Mapping: botão "Sugerir Regras de Conversão"
Segundo passo de inteligência do mapping editor — depois de mapear de-para, propõe a transformação certa baseada em tipo/length/precision/scale.
Sugerir Regras de Conversão
O mapping editor tem 2 botões de inteligência lado a lado:
- Sugerir IA: propõe de-para (source field ↔ destination field) via pirâmide de IA (heurística → embeddings → LLM).
- Sugerir Regras de Conversão: propõe transformação (
transform+transform_config) pras linhas já mapeadas.
A separação é deliberada: depois de aceitar/ajustar o de-para, você roda o "Sugerir Regras" pra que o Lefia proponha como converter o valor entre as duas pontas. Não altera o mapeamento — só ajusta a transformação aplicada.
Como funciona
Pra cada linha com
source + destination + transform != ignore:
- Busca o
FormatFielddos dois lados nos catálogos (source e destination). - Compara
type/length/precision/scale/pattern/enumeration. - Propõe
transform+transform_configcom confidence + explanation.
Casos cobertos
| Caso | Sugestão |
|---|---|
| Mesmo tipo + length compatível | direct |
| String origem > length destino | truncate com length |
| Date → String length 10 | date_format format=date (YYYY-MM-DD) |
| Date → String length 19+ | date_format format=iso (ISO 8601 completo) |
| Date → String length 8 | date_format format=date + flagged "runtime sem YYYYMMDD nativo" |
| Boolean → String com enum 2 valores | value_map com map_true/map_false casando os enums |
| Boolean → String sem enum | value_map com map_true=S, map_false=N (default BR) |
| String → Boolean | value_map com map_S=true, map_N=false, map_1=true, ... |
| Decimal scale > scale destino | direct + flagged (runtime sem round nativo) |
| Date ↔ Boolean / Binary ↔ texto | direct + flagged incompatible |
Runtime contract
Os configs propostos seguem o formato do
apply-mapping.ts no runtime:
truncate→transform_config.length(NÃOmaxLength)date_format→transform_config.format = "iso" | "date" | "epoch_ms"value_map→ keys com prefixmap_<sourceValue>, ex:{ map_S: "true" }multiply→transform_config.valuecomo factor (sem round nativo)
Regression guards no teste impedem propostas com formato fora desse contrato.
Tickets
- #207.2 implementação (PR #48).
- #52 fix runtime contract após Codex review.
Histórico de versões
- 1.0.0
Botão "Sugerir Regras de Conversão" separado do "Sugerir IA". Helper proposeConversionRule propõe transform + transform_config baseado em type/length/precision/scale dos catálogos source+destination. NÃO altera mapeamento — só sugere a transformação. Endpoint /api/edi-hub/suggest-conversion-rules + ConversionRulesDialog UI. PR #48.
5/17/2026 · new
- 1.0.1
Fix runtime contract: configs propostos não casavam com apply-mapping.ts. Corrigido truncate (maxLength→length), date_format (YYYY-MM-DD→date|iso|epoch_ms), value_map (keys com prefix map_<sourceValue>), multiply (round removido, runtime sem suporte nativo). Adicionado regression guards na suite de testes. Codex review pegou. PR #52.
5/17/2026 · updated