INVOIC — Invoice Message (D.96A)
Le message INVOIC porte la facture commerciale d'un vendeur à un acheteur : montants TTC, base taxable, conditions de paiement, références à la commande et à l'avis d'expédition.
Objet du message
Selon la définition officielle UN/CEFACT, INVOIC « a pour but de réclamer un paiement pour des biens ou services fournis, conformément aux termes et conditions convenues entre le vendeur et l'acheteur ». En pratique, INVOIC supporte aussi bien la facture commerciale classique que l'avoir (credit note), la facture récapitulative multi-livraisons, l'auto-facturation (self-billing) ou la facture proforma. Le code de fonction porté par BGM[1] (380 = facture commerciale, 381 = avoir, 384 = facture corrective…) précise le type.
Structure segmentaire
Un message INVOIC D.96A se découpe en trois sections : Header, Detail (groupe SG25 répétable, jusqu'à 9 999 999 lignes par interchange), et Summary. La structure est plus dense qu'ORDERS — les taxes, devises et termes de paiement sont systématiquement présents.
Header
Au niveau du header, les segments mandataires sont : UNH M , BGM M , et DTM M . Les autres segments de tête sont conditionnels : PAI C , ALI C , IMD C , FTX C .
Suivent les groupes de segments SG1 à SG24 du header, dans cet ordre
précis : SG1 RFF+DTM (références — c'est ici qu'on rappelle le
numéro de commande, le numéro de bon de livraison, le contrat-cadre), SG2
NAD+LOC+FII (parties — vendeur, acheteur, livré-à, payeur), SG3
RFF+DTM (références liées à une partie), SG4 DOC+DTM
(documents associés), SG5 CTA+COM (contacts), SG6 TAX+MOA+LOC
(taxes header), SG7 CUX+DTM (devises et taux de change), SG8
PAT+DTM+PCD+MOA+PAI+FII (termes de paiement), SG9 TDT
(transport), SG10 LOC+DTM (lieux), SG11 RFF+DTM, SG12
TOD+LOC (conditions de livraison), SG13 PAC+MEA (emballage),
SG14 PCI+RFF+DTM+GIN (identification colis), SG15
ALC+ALI avec ses sous-groupes SG16-SG21 (RFF+DTM,
QTY+RNG, PCD+RNG, MOA+RNG, RTE+RNG,
TAX+MOA) pour les allowances/charges header, SG22
RCS+RFF+DTM+FTX (requirements), SG23 AJT+FTX (ajustement),
SG24 INP+FTX (instructions parties).
Detail (ligne d'article)
La section Detail est entièrement encapsulée dans SG25, un loop construit autour du segment LIN M . Chaque ligne peut porter PIA , IMD , MEA , QTY , PCD , ALI , DTM , GIN , GIR , QVR , EQD , et FTX .
Au-delà du LIN lui-même, 22 groupes nichés permettent de décrire à la maille ligne :
montants ligne (SG26 MOA+CUX), termes de paiement spécifiques (SG27
PAT+DTM+PCD+MOA), prix (SG28 PRI+APR+RNG+DTM), références
(SG29 RFF+DTM), emballage (SG30 PAC+MEA) et son sous-groupe
SG31 PCI+RFF+DTM+GIN, lieux et quantités par site (SG32
LOC+QTY+DTM), taxes ligne (SG33 TAX+MOA+LOC), parties
spécifiques à la ligne (SG34 NAD+LOC) avec leurs sous-groupes SG35-SG37
(RFF+DTM, DOC+DTM, CTA+COM), allowances/charges
ligne (SG38 ALC+ALI+DTM) et leurs sous-groupes SG39-SG43
(QTY+RNG, PCD+RNG, MOA+RNG, RTE+RNG,
TAX+MOA), transport ligne (SG44 TDT) et SG45
LOC+DTM, conditions de livraison ligne (SG46 TOD+LOC),
requirements ligne (SG47 RCS+RFF+DTM+FTX).
La spécification autorise jusqu'à 9 999 999 répétitions du loop SG25 par interchange — un plafond rarement atteint, mais qui rend possible la facture récapitulative annuelle d'un gros fournisseur télécoms ou énergie.
Summary
La section Summary contient : UNS M , CNT , puis un groupe mandataire SG48 ( MOA M ) avec ses sous-groupes SG49 ( RFF + DTM ) et SG50 ( TAX + MOA ), puis SG51 ( ALC + ALI + MOA ) pour les allowances/charges globales, et enfin UNT M .
Obligatoire / conditionnel
Quatre segments sont strictement mandataires dans tout INVOIC
D.96A : UNH, BGM, UNS+S, UNT.
Le groupe SG48 (totaux MOA) est également mandataire —
c'est la spécificité d'INVOIC par rapport à ORDERS.
UNH— ouvre le message, porte l'identifiant et la version.BGM— précise le code de fonction (380 = facture commerciale, 381 = avoir), le numéro de facture, et le statut du document.UNS+S— délimite le passage du Detail au Summary.SG48 MOA— au moins un total monétaire (montant TTC ou montant HT).UNT— ferme le message, déclare le nombre de segments.
À cela il faut au moins un DTM+137 (date de facture) et un NAD+SU
et NAD+BY pour identifier vendeur et acheteur. Les conventions sectorielles
(EANCOM en retail, Galia en automotive) ajoutent l'obligation de référencer la commande
(RFF+ON) et l'avis d'expédition (RFF+DQ).
Exemple réel
Une facture retail typique entre un industriel (vendeur) et une centrale d'achat (acheteur), pour deux produits livrés via le DESADV de référence :
UNB+UNOC:3+5410000000456:14+5410000000123:14+260601:1000+CTRL000003'
UNH+1+INVOIC:D:96A:UN:EAN008'
BGM+380+INV-2026-1042+9'
DTM+137:20260601:102'
DTM+35:20260520:102'
RFF+ON:ORDER789'
RFF+DQ:DESADV-2026-0521'
NAD+SU+5410000000456::9'
NAD+BY+5410000000123::9'
CUX+2:EUR:4'
PAT+1++5:3:D:30'
LIN+1++3520000001234:EN'
QTY+47:2'
MOA+203:1698.00'
PRI+AAA:849.00'
TAX+7+VAT+++:::20'
MOA+125:1698.00'
LIN+2++3520000005678:EN'
QTY+47:5'
MOA+203:97.50'
PRI+AAA:19.50'
TAX+7+VAT+++:::20'
MOA+125:97.50'
UNS+S'
MOA+79:1795.50'
MOA+125:1795.50'
MOA+150:359.10'
MOA+9:2154.60'
TAX+7+VAT+++:::20'
MOA+124:359.10'
UNT+30+1'
UNZ+1+CTRL000003' BGM+380+INV-2026-1042+9— type 380 (facture commerciale), numéro INV-2026-1042, statut 9 (Original).DTM+137— date de facture.DTM+35— date de livraison effective.RFF+ONetRFF+DQ— références à la commande (ORDER789) et au bon de livraison (DESADV-2026-0521).CUX+2:EUR:4— devise de facturation (EUR, qualifier 4 = invoicing currency).PAT+1++5:3:D:30— termes de paiement : escompte 3 % à 5 jours, échéance 30 jours net.- Deux
LINavec leur QTY+47 (invoiced quantity), MOA+203 (montant ligne HT), PRI+AAA (prix net unitaire), TAX+7 (VAT 20 %) et MOA+125 (taxable amount). - Summary : MOA+79 (line total), MOA+125 (taxable base), MOA+150 (tax payable), MOA+9 (total payable), TAX+7 + MOA+124 (tax detail).
UNT+30+1— 30 segments dans le message, référence « 1 » en cohérence avec UNH.
Erreurs fréquentes
- Cohérence des totaux — le MOA+9 (total payable) du summary doit être égal au MOA+125 (taxable base) + MOA+150 (total tax). C'est l'erreur la plus filtrée par les contrôles métier côté acheteur.
- Absence de référence à la commande — un INVOIC sans
RFF+ONest rejeté automatiquement par 100 % des plateformes de dématérialisation retail (Tradeshift, Tungsten, Generix…). - Devise manquante quand non-EUR —
CUX+2est obligatoire si la devise diffère de celle déclarée dans l'accord d'interchange. Une facture USD avec CUX absent est ambiguë. - Code TVA invalide —
TAX[1]doit être un qualifier connu (7 = VAT, 5 = customs duty…). Un code custom non documenté bloque le traitement automatique. - UNT segment count erroné — la valeur après
UNT+doit inclure UNH et UNT eux-mêmes.
Messages liés
INVOIC est l'aboutissement du cycle order-to-cash :
- ORDERS D.96A — la commande, référencée via RFF+ON.
- ORDRSP D.96A — la confirmation de commande.
- DESADV D.96A — l'avis d'expédition, référencé via RFF+DQ.
- RECADV D.96A — l'avis de réception côté acheteur.
- REMADV D.96A — l'avis de paiement (remittance advice) qui clôt le cycle.
- CONTRL D.96A — l'accusé syntaxique automatique.
Équivalent JSON
Projection JSON correspondant à l'exemple ci-dessus. Ce mapping n'est pas normatif : c'est une convention ediverse pour faciliter l'intégration en TypeScript / Python.
{
"interchange": {
"controlRef": "CTRL000003",
"from": { "id": "5410000000456", "qualifier": "14" },
"to": { "id": "5410000000123", "qualifier": "14" },
"datetime": "2026-06-01T10:00:00Z",
"syntax": { "id": "UNOC", "version": "3" }
},
"message": {
"ref": "1",
"type": "INVOIC",
"version": { "syntax": "D", "release": "96A", "agency": "UN", "association": "EAN008" }
},
"invoice": {
"number": "INV-2026-1042",
"function": "380",
"status": "9",
"issueDate": "2026-06-01",
"deliveryDate": "2026-05-20",
"references": {
"buyerOrder": "ORDER789",
"despatchAdvice": "DESADV-2026-0521"
},
"parties": {
"supplier": { "gln": "5410000000456" },
"buyer": { "gln": "5410000000123" }
},
"currency": "EUR",
"paymentTerms": { "basis": "1", "days": 30, "discount": { "percent": 3, "days": 5 } },
"lines": [
{
"ref": 1,
"gtin": "3520000001234",
"quantity": { "invoiced": 2 },
"price": { "net": 849.00 },
"lineTotal": 1698.00,
"vat": { "rate": 20, "amount": 339.60 }
},
{
"ref": 2,
"gtin": "3520000005678",
"quantity": { "invoiced": 5 },
"price": { "net": 19.50 },
"lineTotal": 97.50,
"vat": { "rate": 20, "amount": 19.50 }
}
],
"totals": {
"totalLineNet": 1795.50,
"taxableBase": 1795.50,
"totalTax": 359.10,
"amountDue": 2154.60
}
}
}