ediverse Explorer la plateforme

À la une PEPPOL BIS Billing 3.0 L’obligation européenne d’e-invoicing arrive : France sept 2026, Belgique janv 2026, Allemagne 2025.

Canonical Mapping

Le mapping comme artefact concret du Canonical Model — l'unité de travail élémentaire d'une équipe d'intégration B2B.

Problème

Un hub EDI a 80 partenaires (chacun avec son format : EDIFACT D.96A, EDIFACT D.21B, X12 4010, X12 6020, UBL 2.1, cXML 1.2, Factur-X) et 6 systèmes internes (SAP, Oracle, Sage, Salesforce, lake Snowflake, archive S3). Sans modèle canonique, chaque partenaire doit être mappé vers chaque système : 80 × 6 = 480 mappings à maintenir. Une évolution X12 6020 → 7050 oblige à re-tester 6 mappings. Pire : chaque équipe ERP a sa propre convention, deux mappings vers SAP sont incohérents l'un avec l'autre.

Forces

  • Le nombre de partenaires croît. Un retailer ajoute un nouveau fournisseur tous les mois.
  • Les formats évoluent. Versions UN/EDIFACT mineures, X12 versions, UBL 2.1 → 2.3.
  • Les systèmes internes diffèrent. SAP, Oracle, Sage ont des conventions différentes.
  • Le mapping est versionnable. Un mapping est un artefact codé qui peut être testé, revu, livré.

Solution

Définir un modèle canonique interne riche sémantiquement (couvrant les besoins de tous les partenaires et systèmes). Puis matérialiser, pour chaque format externe, un mapping bidirectionnel partenaire ↔ canonique. Symétriquement pour chaque système interne : mapping canonique ↔ système. Le mapping est codé : XSLT, Smooks DSL, MapForce, Camel transformer, Apache NiFi processor, ou simple code Java/Python avec tests unitaires. Versionné en git, propriété d'une équipe référente.

Sans mapping canonique (N × M) :       Avec mapping canonique (N + M) :

  EDIFACT INVOIC ─┐                       EDIFACT INVOIC ─┐
  X12 810        ─┼──▶ SAP                                │
  UBL            ─┘                       X12 810        ─┤
                                                          ├─▶  Canonical
  EDIFACT INVOIC ─┐                       UBL            ─┤    Invoice
  X12 810        ─┼──▶ Oracle EBS                         │       │
  UBL            ─┘                       Factur-X       ─┘       │
                                                                  ├──▶ SAP
  EDIFACT INVOIC ─┐                                                │
  X12 810        ─┼──▶ Sage                                        ├──▶ Oracle
  UBL            ─┘                                                │
                                                                  └──▶ Sage
  3 partenaires × 3 ERP = 9 mappings        3 + 3 = 6 mappings

Implémentation EDI

Cas concret : hub EDI avec canonique Invoice.v3 en JSON Schema. Mapping edifact-invoic-d96a.xslt convertit EDIFACT INVOIC vers ce JSON : UNH.S009messageType, BGM.C002invoiceTypeCode, DTM+137issueDate, RFF+ONorderReference, NAD+BYbuyer, NAD+SEseller, segments LIN/PIA/IMD → tableau lines[]. Mapping inverse canonical-to-x12-810.py pour générer le X12 vers Walmart. Le code mapping inclut des tests unitaires : « PRI+AAA:25.00:CA équivaut à canonical.lines[].priceExclTax = 25.00 EUR ». Outils : BizTalk Mapper, Sterling Mapper, Boomi Map, Smooks, MapForce, ou code natif. Documentation des correspondances dans un format human-readable (Markdown table) à côté du mapping. Catalogue de mappings versionnés tenu en artefactory.

Anti-patterns

  • Mapping ad hoc dans chaque microservice. Pas de modèle canonique central, chaque consumer mappe lui-même : duplication, divergence des règles.
  • Mapping comme appendice du code applicatif. Si le mapping vit dans le code Java, il est lié au cycle de release applicatif. Le sortir comme artefact séparé.
  • Mapping inversible mais asymétrique. Pour parser EDIFACT vers canonique, on tolère des trous (pas de prix unitaire : OK). Pour sérialiser canonique vers EDIFACT, on doit imposer un schéma strict. Confondre les deux donne des EDIFACT invalides.
  • Mapping sans tests. La moindre modification casse silencieusement les flux partenaires. Investir dans une suite de tests par mapping (entrée fixture → sortie attendue).
  • Mapping qui contient business logic. « Si pays = FR, alors taxer à 20% » dans le mapping : la règle fiscale s'éparpille. Garder dans un service dédié.

Patterns liés

Sources