FT-MAPPING-ERRORS-V1· 1.0.0Mappings & EDI Hub
Mapping — erros explicáveis ao invés de "erro ao aplicar mapping"
Quando um mapping falha, a mensagem agora aponta exatamente qual campo, qual transform, qual valor causou o problema, e (quando possível) sugere a origem certa.
Atualizado em 5/6/2026
Mapping — erros explicáveis
Atualizado 2026-05-06. Substitui o comportamento antigo de mostrar "Erro ao aplicar mapping: <stack>" sem contexto.
O que mudou
Antes, qualquer falha no mapping retornava uma mensagem genérica e
pipeline_status: error sem indicar o quê quebrou. O operador tinha que abrir o payload manualmente e adivinhar.Agora a mensagem traz kind, campo, valor recebido, valor esperado e sugestão de origem quando há um candidato próximo nos segments.
4 tipos de erro
| Kind | Severity | Quando acontece | Exemplo |
|---|---|---|---|
missing_required | error (bloqueia) | source_field aponta pra path inexistente E o campo é required: true | "Campo obrigatório invoiceNumber não encontrado (origem invoice_number ausente). Origem sugerida: invoice_number." |
source_path_invalid | warning (não bloqueia) | source_field aponta pra path inexistente, mas o campo NÃO é required | "Origem optional_email não encontrada para customer_email." |
type_mismatch | error | sourceValue tem tipo incompatível com o transform (ex: multiply em string non-numérica, truncate em number) | 'Transform "multiply" em total esperava número mas recebeu "abc" (origem qty).' |
transform_failed | error | configuração do transform inválida (parseInt retornou NaN, JSON.parse falhou) | 'Transform "concatenate" em fullName falhou: transform_config.fields não é JSON válido.' |
Como ver os erros
1. Logs da mensagem
Em/edi-hub/empresa/[id] ou /monitor, abrir uma mensagem com pipeline_status: error e ver os logs. O log de step: error agora traz:Erro ao aplicar mapping:
Campo obrigatório invoiceNumber não encontrado (origem invoice_number ausente).
Origem sugerida: invoice_number;
Transform "multiply" em total esperava número mas recebeu "abc" (origem qty).
E em
details do log, um array errors estruturado com kind, field, source_field, transform, expected, received, suggestion.2. Warnings (mensagem segue OK)
Se o mapping tiver apenas warnings (campos opcionais ausentes), opipeline_status continua mapped e a mensagem segue pro destino. Aparece um log step: mapped, status: warning listando o que ficou de fora.Sugestão de origem (fuzzy match)
Quando o
source_field configurado não bate, o sistema procura nos segments reais por algum nome próximo (Levenshtein normalizado em chars, capa em distância 3). Pega:
- typos (
Belnnr→BELNR) - diferença de case (
invoiceNumber→invoice_number) - separadores (
billing-document→billing_document)
Não pega nomes muito diferentes (
abc → totally_other_field_name retorna null).Como marcar campo como required
No JSON
field_mappings da tabela mappings:[
{
"source_field": "E1EDK01.BELNR",
"destination_field": "purchaseOrder",
"transform": "direct",
"required": true
}
]
required: true = bloqueia pipeline se source ausente. required: false ou omitido = warning, segue pro destino.A UI de edição de mapping ainda não tem checkbox de required (vai entrar junto com #66 — Validação de schema antes de ativar). Por enquanto, marcar via SQL:
UPDATE mappings SET field_mappings = jsonb_set(
field_mappings,
'{0,required}', 'true'::jsonb
) WHERE id = '<mapping-id>';
Reprocessamento após corrigir
Depois de ajustar o
field_mappings (corrigir source_field, adicionar required, corrigir transform_config), o operador clica Reprocessar na mensagem em erro. O pipeline aplica o mapping novo e — se passar — segue pro destino.Para reprocessar em lote, usar o painel
/admin/queue (super_admin/support) ou a ação bulk em /edi-hub.Itens relacionados no roadmap
- #66 — Mapping: Validação de schema antes de ativar: usa o mesmo tipo
MappingErrorpra rodar contra um payload de exemplo e bloquear ativação se houverkind: error - #65 — Mapping: Preview do payload convertido: aproveita os erros estruturados pra destacar campos problemáticos no UI antes de enviar
- #68 — Mapping: arrays/items ✅ entregue 2026-05-06: ver mapping-arrays-items
- #67 — Este item: Mensagens de erro explicáveis ✅ entregue 2026-05-06
Histórico de versões
- 1.0.0
Mapping retorna MappingError discriminado (4 kinds: missing_required, source_path_invalid, type_mismatch, transform_failed) com sugestão de origem via fuzzy match. Substitui mensagem genérica "erro ao aplicar mapping". Lib pura em src/lib/mapping/ + 26 testes.
5/6/2026 · new