Compatibilidade

RESUMO EXECUTIVO - Compatibilidade Frontend/API

RESUMO EXECUTIVO - Compatibilidade Frontend/API

Status Geral: 🔴 CRÍTICO - NÃO RECOMENDADO PARA PRODUÇÃO


Erros Críticos Encontrados

1. 🔴 CAMPO QUANTIDADE NÃO É MAPEADO CORRETAMENTE

Arquivo: /apps/producer/components/order/wizard/Step2Products.vue

Problema:

  • Interface declara: quantidade: number (linha 23)
  • Template usa: v-model.number="item.quantity" (linha 222)
  • Sincronização envia: quantidade: item.quantity → UNDEFINED!

Consequência: Produtos chegam na API com quantidade = 0 ou undefined

Solução: Padronizar nomenclatura

// Opção 1: Renomear em todo lugar para "quantity"
interface ProdutoItem {
  quantity: number;  // mudar
}
v-model.number="item.quantity"  // OK

// Opção 2: Renomear em todo lugar para "quantidade"
v-model.number="item.quantidade"  // mudar

2. 🔴 FALTA VALIDAÇÃO COMPLETA NA API

Arquivo: /apps/api/app/Http/Requests/StoreOrderRequest.php

Campos não validados:

  • bidding_type - deveria ser enum (open|closed)
  • customer_address_id - deveria validar EXISTS
  • freight_type - deveria ser enum (cif|fob)
  • deadline_mode - deveria ser enum (general|specific)
  • condicao_pagamento - valores válidos?

Consequência: Dados inválidos são salvos no banco

Solução: Adicionar regras de validação

'bidding_type' => 'required|in:open,closed',
'freight_type' => 'required|in:cif,fob',
'customer_address_id' => 'required|integer|exists:customer_addresses,id',
'deadline_mode' => 'in:general,specific',
'condicao_pagamento' => 'in:avista,parcelado,a_combinar',

Problemas de Design

3. 🟡 CAMPO DESCRIPTION FIXO

Arquivo: /apps/producer/composables/useWizardOrder.ts (linha 393)

Problema: Description sempre é "Rascunho de licitação"

API Valida: min:50|max:1000

Solução: Adicionar campo customizável no Step 1


4. 🟡 INCONSISTÊNCIA DE NOMES DE CAMPOS

Problema:

  • StoreOrderRequest espera: data_limite_cotacao
  • saveDraft envia: deadline_date
  • Diferentes convenções causam confusão

Solução: Padronizar em toda a API


Matriz de Status por Step

StepComponenteStatusProblema
1BasicInfo✅ OKNenhum
2Products🔴 CRÍTICOquantidade undefined
3Deadlines✅ OKNenhum
4Location✅ OKNenhum
5Review✅ OKNenhum
APIsaveDraft🔴 CRÍTICOValidação faltando

Checklist de Correção

FAZER IMEDIATAMENTE:

  • Step2Products.vue: Corrigir item.quantityitem.quantidade
  • StoreOrderRequest.php: Adicionar validações faltantes
  • useWizardOrder.ts: Permitir customizar description
  • Testar fluxo completo end-to-end

DEPOIS:

  • Padronizar nomes de campos na API
  • Adicionar testes para validações
  • Documentar contrato API
  • Usar TypeScript strict mode

Impacto por Usuário

Cenário 1: Criando licitação com 5 produtos

Resultado Esperado: 5 produtos salvos com quantidade Resultado Real: 5 produtos salvos com quantidade = 0 ou undefined Status: 🔴 FALHA

Cenário 2: Enviando dados inválidos

Resultado Esperado: Validação rejeita dados inválidos Resultado Real: Dados inválidos são salvos no banco Status: 🔴 FALHA

Cenário 3: Salvando rascunho sem descrição

Resultado Esperado: Erro (description obrigatória) Resultado Real: "Rascunho de licitação" salvo automaticamente Status: ⚠️ PARCIAL (funiona mas não é ideal)


Tempo Estimado de Correção

TarefaTempoPrioridade
Corrigir quantity → quantidade15 minALTA
Adicionar validações API30 minALTA
Corrigir description20 minMÉDIA
Testes end-to-end45 minALTA
Padronizar nomes campos20 minMÉDIA
TOTAL2h 10min

Recomendação Final

Não proceder com qualquer deploy até:

  1. ✅ Campo quantidade ser mapeado corretamente
  2. ✅ Validações serem adicionadas na API
  3. ✅ Testes end-to-end passarem

Próximos Passos

  1. Revisar relatório completo: COMPATIBILITY_REPORT.md
  2. Corrigir erros críticos
  3. Rodar suite de testes
  4. Realizar teste de integração
  5. Deploy com confiança

Relatório Completo: Veja COMPATIBILITY_REPORT.md

Gerado em: 2024-12-22

Copyright © 2026