Todos os artigos
FT-EDI-HUB· 2.100.0help.categories.mapping

Sincronizar com catálogo agora é destrutivo + IA automática

O botão "Sincronizar com catálogo" remove TODOS os fields obsoletos (inclusive já mapeados) e dispara a pirâmide IA pra repropor o mapping. Resolve banner stale persistente.

Atualizado em 5/19/2026

O que mudou (19/05/2026)



Antes, "Sincronizar com catálogo" preservava fields que você havia mapeado manualmente — mas isso fazia o banner "Mapping com campos desatualizados" persistir pra sempre.

Como funciona agora



  1. Click "Sincronizar com catálogo" → confirm dialog avisa que é destrutivo
  2. Backend refresca o catálogo via $metadata do SAP (garantia de dados frescos)
  3. Remove TODOS os fields obsoletos — inclusive os com destination preenchido (perde mapping + transform_config dessas rows)
  4. Adiciona fields novos que o SAP tem mas o mapping não
  5. Pirâmide IA roda automaticamente (Camada 1 heurística → Camada 2 Voyage → Camada 3 Claude)
  6. Sugerir Regras encadeia após a IA terminar — propostas de value_map / date_format aparecem em dialog


Toast pós-sync



Mostra: catálogo +N/-M · +X / −Y mapping. Re-sugerindo mapping…

Quando usar



  • SAP atualizou o serviço e há fields novos / removidos
  • Banner "Mapping com campos desatualizados" não some mesmo após "Atualizar catálogo"
  • Você quer "limpar" o mapping antigo e deixar a IA recompor do zero

Histórico de versões

  • 2.100.0

    Tabela de mensagens da integração segue o padrão estético do Monitor: PipelineStatusBadge (componente único, sem drift), coluna ERRO mostra error_detail (não statxt), filtro por pipeline_status.

    6/9/2026 · updated

  • 2.99.2

    Filtro busca typeahead nas 4 views toggle (/admin, /edi-hub, /edi-hub/empresa/[id], /reports). Funciona em cards + lista. AdminTenantsView API mudou: cardsContent → cardsByTenantId Record<id, ReactNode>. i18n 3 línguas em 3 namespaces.

    5/24/2026 · new

  • 2.99.1

    Hover canonical em 7 lugares do mapping editor — mapping-structured-view (header grupo + rows não-mapeadas + mapeadas), catalog-browser, mapping-version-history, conversion-rules-dialog (3 botões), mapping-rule-drawer (dropdown source). Todos hover:bg-accent.

    5/24/2026 · updated

  • 2.99.0

    Paridade REAL 3 viewers — olhinho, ver saída e comparar mensagens agora leem `raw_data ?? segments` igual. Antes só olhinho lia raw_data; diff e preview-mapping liam segments legado (subset pré PR #273). Engine applyMapping também roda em raw_data agora — warnings TOD/MOA/TDT/DOC devem cair.

    5/24/2026 · updated

  • 2.14.0

    Sessão 24/05: Multi-tenant E2E fixture permanente (#258). 39 tenants órfãos no DB limpos via SQL cascade. Script seed:e2e-multi-tenant + 14 secrets pra setar.

    5/24/2026 · updated

  • 2.13.0

    Maratona 19/05 EDI Hub: stat "Mapeados por IA" só conta destination preenchido (#103), Sugerir Regras encadeado pós Sugerir IA com fieldMappingsInline (#104), Sincronizar destrutivo + auto-dispara IA (#109), updateField preserva ai_suggested em ajustes de transform (#110).

    5/19/2026 · updated

  • 2.12.0

    Sessão 17/05 — 3 PRs (#38-#40, roadmap #198-#204) fechando bugs reportados por Bruno na criação de integração + tech debt em update-integration. Blockers (#38): helper resolveAuthType em protocol-fields.ts substitui lógica duplicada em 4 paths (create-integration, wizard/finalize, update-integration, partner-invitations) — auth_type NULL violation eliminada para protocolos sem authType (webhook, SFTP, RFC, AS2, IBM MQ, MLLP); URLs SAP suggestions agora param em /API_*_SRV (sem entitySet no fim — base URL correta pro SAP API Hub); rollback de integration órfã quando INSERT connections falha (idempotente). Paridade manual (#39): protocolo default vazio com bloqueio do botão Criar + aviso visível; OdataSyncConfig (top/cursor/filters/data inicial) adicionado no modal manual condicional a source=odata, availableFields derivado via useMemo do test connection ou catálogo estático. Security update-integration (#40): cross-tenant write guard — lê tenant_id real do DB, compara com body, divergiu → 400 + audit security.cross_tenant_attempt; OAuth token cache invalidation — DELETE oauth_tokens ao mudar encrypted_credentials (sem isso customer revogava client_secret no provider mas Nexio seguia chamando SAP com token cacheado até 1h).

    5/16/2026 · updated

  • 2.11.0

    Sessão 16/05 maratona integrações — 11 PRs (#24-#34, roadmap #175-#190): Edit migrado pra ProtocolConnectionFields com test connection paritário ao wizard. Manual exige test OData antes de criar (#177). Connection-test badge sincroniza com last_test_* do server (#181). Cobertura plataforma↔protocolo expandida + OAuth 2.0 UI shell + fix RFC sysnr duplicado. Layout D distribuído em manual/edit/wizard. Desacoplamento mapping ↔ integração (#184) — mapping nasce em /edi-hub com 2 caminhos (Manual / Derivar). Codex review fixes (fieldsMode=all default, embedding context com standard+segment, Opus 4.7 real). UX polishes #187-190: pré-popular edit, auto-select 1 opção, olho/máscara em passwords, excluir draft. Derivar mapping Modo B + test connection no destino. OAuth 2.0 Client Credentials backend real (#178) — tabela oauth_tokens (PK=connection_id, expires_at com buffer 30s), service role only, cascade on delete.

    5/16/2026 · updated

  • 2.10.0

    Sessão 15/05 noite — 4 PRs (#20-#23, roadmap #172-#180): MessageTypeBlock compartilhado wizard↔manual↔edit (Layout D — tipo de mensagem fica junto da conexão correspondente). Datalist URLs SAP + auto-derive entity da URL no wizard step2 (Polish #3). Catálogo X12-850 expandido de 18 → 68 fields (BEG completo, REF, PER, FOB, ITD, DTM, N3/N4, PID, MEA, AMT, SE). Polish #5 destFormat propagado nos 3 fluxos + dedup catálogo via migration partial unique index (WHERE version IS NULL).

    5/16/2026 · updated

  • 2.9.0

    authType undefined bug (#18) — wizard de criação de integração falhava 401 falso porque <select> mostrava default visual mas state continuava undefined. useEffect inicializa state ao mount/protocol change. + Layout fix (#19): botões cursor field não mais overflowam col-span-2.

    5/15/2026 · updated

  • 2.8.0

    Cleanup connector_templates legacy (-662 linhas), CreateIntegrationMenu nas 2 páginas (/admin e /edi-hub/empresa), IntegrationTemplatePicker mostra updated_at, ConfirmDialog substitui confirm() nativo, contraste tabs Dados Originais/Convertidos.

    5/15/2026 · updated

  • 2.7.0

    Fix #157 (commit d43619f) — parser do $metadata estava perdendo TODOS os nav fields no overlay DB. Causa: assumia que <End Role="X"/> da Association == navName (to_Item). SAP V2 real usa Roles hash anônimo (ToRole_assoc_HASH...). Resolução correta exige cruzar via Relationship FQN da NavigationProperty → Association.Name → End com Role == NavigationProperty.ToRole. Após fix: parseMetadataXml captura Relationship+ToRole por nav, tabela assocByName cruza referências. Fixture do test atualizado pra refletir convenção SAP real. 667/667 tests (era 666). Bruno precisa re-clicar em $meta para A_SalesOrder e A_BillingDocument (overlays atuais têm 79/93 fields só raiz — parser bugado escreveu); novos updates vão trazer fields completos incluindo to_Item.*, to_Partner.*, etc.

    5/15/2026 · updated

  • 2.6.0

    #155 push C (b86b7ef): Templates agora = integrações marcadas com is_template=true (não mais connector_templates hardcoded — 5 entries antigas desativadas via UPDATE). Novo endpoint /api/admin/integration-templates filtra por tenant access (super_admin vê todas, user normal só dos próprios tenants). Novo IntegrationTemplatePicker (modal simples) lista templates + search inline + clona via /integration/clone existente. Multi-tenant: cliente A nunca vê template de cliente B.

    5/14/2026 · updated

  • 2.5.0

    #155 push B (67fa754): botão único "+ Criar integração" com dropdown 3 modos (Wizard / Template / Manual) substitui os 2 botões antigos no /admin/empresa/[id]. CreateIntegrationButton ganhou props pra controle externo. Cursor field no OdataSyncConfig agora deriva dinamicamente de availableFields (catálogo refletindo $metadata real), com fallback pros 3 hardcoded + warning quando catálogo não tem timestamps.

    5/14/2026 · updated

  • 2.4.0

    #155 push A (10d2390): capacity panel format "Xh Ymin" em vez de "1746 min"; catalog browser mostra "há N dias" ao lado do generated_from (overlays DB têm generated_at); contraste fixado nas tabs Dados Originais/Convertidos do /monitor/[id] (text-muted-foreground → text-foreground sobre bg-card/zinc-900).

    5/14/2026 · updated

  • 2.3.1

    Fix #154 v12 (commit 063ec75) — UX cleanup. Bruno apontou que "Importar do catálogo" e "Sincronizar" tinham roles sobrepostos. Removido botão "Importar" (add_only), mantém só "Sincronizar" com confirm() reforçando add+remove. Endpoint continua aceitando mode=add_only por compat backward.

    5/14/2026 · updated

  • 2.3.0

    Fix #154 v11 (commit 1961125) — 2 bugs no fluxo de "Importar do catálogo" após Bruno atualizar A_SalesOrder via $meta (de 302 pra 79 fields) e ver que o mapping continuava com 302. (A) Endpoint import-catalog-fields lia findLocalFormat (hardcoded estático), ignorando overlay no catalog_user_messages. Fix: loadAllStandards(admin) mescla overlay+hardcoded. (B) Endpoint só adicionava, nunca removia — catálogo novo era subset do mapping antigo, então add_only sempre retornava 0 mudanças. Fix: param mode aceita "sync" que remove fields ausentes no catálogo SEM destination_field (preserva curadoria humana e campos custom Z). UI: botão "Importar do catálogo" preserva comportamento add_only; botão NOVO "Sincronizar" (warning) com confirm() chama mode=sync.

    5/14/2026 · updated

  • 2.2.3

    Fix #154 v10 (commit 6fecbb0) — help contextual no refresh modal pra IDoc. Quando user clica RefreshCw num entry standardId=idoc, banner azul aparece explicando que IDoc não tem repositório público (pesquisa confirmou: só samples/TXT em comunidade, vendors B2B comerciais, sem mirror estável). Caminho oficial: transação WE60 no SAP do cliente → IDoc Type → Documentation → XML Schema → Download → paste no Nexio. i18n PT/EN/ES.

    5/14/2026 · updated

  • 2.2.2

    Fix #154 v9 (commit 77cef22) — registry expandido para 22 entries. Adicionados 11 FHIR R4 (Patient, Encounter, Observation, DiagnosticReport, MedicationRequest, ServiceRequest, Bundle, Practitioner, Organization, Coverage, Claim — todos com URL oficial HL7), 3 cXML (PO/Invoice/ASN via adrianchia/cxml-xsd derivado do DTD oficial), 1 CT-e v4.00 (nfephp-org/sped-cte mirror SPED). Todos validados via WebFetch antes do commit. Ainda fora: X12, HL7 v2.x, RosettaNet, VDA, IDoc SAP, NFS-e (todos com restrição de acesso ou layout não-universal).

    5/14/2026 · updated

  • 2.2.1

    Fix #154 v8 (commit d8ed32d) — registry de official-sources populado com 7 URLs validadas via WebFetch. EDIFACT D01B (5 mensagens — DESADV, INVOIC, ORDERS, ORDRSP, REMADV) de microsoft/Integration BizTalk EANCOM. NF-e v4.00 (NFe40 + NFCe40) de nfephp-org/sped-nfe. Trade-offs documentados: nenhuma fonte é portal oficial (UN/CEFACT distribui em ZIP, Receita idem), mas ambos repos são referência estável do ecossistema. X12 fica fora (ANSI cobra pelos standards). Botão 🌐 oficial agora aparece automaticamente pra esses 7 entries no /edi-hub/catalogo.

    5/14/2026 · updated

  • 2.2.0

    Fix #154 v7 (commit 2e01cba) — refresh do catálogo a partir de source oficial pra standards universais (EDIFACT, NF-e, X12, HL7). Padrão complementar ao OData/SAP onde schema vem da conexão. Registry estático src/lib/edi-hub/official-sources.ts mapeia (standardId, code, version) → URL oficial (UN/CEFACT, SPED, ANSI). Endpoint POST/GET /api/admin/catalog/refresh-from-official wrapper sobre refresh-catalog-message. Botão azul "🌐 oficial" no catalog browser auto-renderiza só pra entries com fonte registrada. MVP com registry vazio — URLs validadas serão adicionadas via PR à medida que confirmadas (governo BR e UN/CEFACT frequentemente distribuem em ZIP, exigindo validação caso a caso). 659/659 tests.

    5/14/2026 · updated

  • 2.1.0

    UX agrupada no mapping editor (commit f4bca3a, #154 follow-up): fields plana antes virou agrupamento universal por navigation property. Cada `to_X.field` cai num grupo `to_X` colapsável; fields sem prefixo vão pro grupo "Campos diretos" (sempre expandido por default). Header de cada nav mostra: nome em mono + badge "auto $expand" + contagem + chevron. Detecção via regex `^to_[A-Z]\w+\.` no source_field — mesmo padrão do helper `deriveExpansionsFromSelect`. Funciona pra Sales Order, Billing, Delivery, Purchase Order, Business Partner, Material, e qualquer entity SAP futura sem código novo. i18n PT/EN/ES com next-intl plurals: directFields, autoExpand, navGroupCount. 651/651 tests.

    5/14/2026 · updated