La norme EN16931 définit plus de 160 Business Terms (BT) répartis en Business Groups (BG). Tous ne sont pas obligatoires — la cardinalité varie de “obligatoire” à “optionnel” en passant par “conditionnel”. Mais une facture soumise à une PDP avec un champ obligatoire manquant sera rejetée par la validation Schematron avant même d’atteindre le destinataire.
Ce guide cartographie les champs que les développeurs oublient le plus souvent lors du mapping ERP → XML, et explique comment les renseigner correctement dans un XML CII (Factur-X).
Pour le contexte général de la validation, voir Facturation électronique 2026 : le guide technique complet. Pour comprendre les erreurs Schematron qui en résultent, voir Valider EN16931/Factur-X : XSD vs Schematron, erreurs BR-*.
Structure du modèle EN16931
Le modèle sémantique est organisé en Business Groups (BG) qui regroupent des Business Terms (BT). Chaque BT a un identifiant unique (BT-1, BT-2, etc.), un type de données, et une cardinalité.
Les cardinalités possibles :
| Cardinalité | Signification |
|---|---|
| 1..1 | Obligatoire — exactement une occurrence |
| 0..1 | Optionnel — zéro ou une occurrence |
| 1..n | Obligatoire — au moins une occurrence |
| 0..n | Optionnel — zéro ou plusieurs occurrences |
Un champ marqué 1..1 dans EN16931 doit être présent dans le XML pour passer la validation Schematron. Un champ 0..1 peut être absent — mais certaines règles Schematron conditionnelles (BR-CO-, BR-S-) le rendent obligatoire selon le contexte fiscal.
Les Business Groups clés
BG-1 — En-tête de facture
| BT | Nom | Card. | XPath CII |
|---|---|---|---|
| BT-1 | Numéro de facture | 1..1 | ram:ID |
| BT-2 | Date d’émission | 1..1 | ram:IssueDateTime/udt:DateTimeString |
| BT-3 | Type de facture | 1..1 | ram:TypeCode |
| BT-5 | Code devise | 1..1 | ram:InvoiceCurrencyCode |
| BT-24 | Specification identifier | 1..1 | ram:ID |
Erreurs fréquentes : BT-1 vide ou absent — BT-2 au format JJ/MM/AAAA au lieu de AAAAMMJJ — BT-3 avec un code UNTDID 1001 incorrect (380 = facture, 381 = avoir) — BT-5 absent ou non ISO 4217 — BT-24 avec une URN incorrecte pour le profil.
XPaths complets (depuis rsm:CrossIndustryInvoice) :
BT-1 → rsm:ExchangedDocument/ram:ID
BT-2 → rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString
BT-3 → rsm:ExchangedDocument/ram:TypeCode
BT-5 → …/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode
BT-24 → …/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID
BT-24 — Specification identifier : ce champ est rendu obligatoire par la règle BR-01. Il identifie la spécification à laquelle la facture se conforme (ex: urn:cen.eu:en16931:2017 pour le profil EN16931). Son absence provoque un rejet immédiat.
BT-2 — Format de date : en CII, le format attendu dans udt:DateTimeString est AAAAMMJJ (ex: 20260401) avec l’attribut format="102". C’est une source d’erreur fréquente car les ERP stockent souvent les dates en ISO 8601 (2026-04-01).
BG-4 — Vendeur
| BT | Nom | Card. | XPath CII |
|---|---|---|---|
| BT-27 | Nom du vendeur | 1..1 | ram:Name |
| BT-30 | Identifiant légal vendeur | 0..1 | …/ram:SpecifiedLegalOrganization/ram:ID |
| BT-31 | Numéro TVA vendeur | 0..1 | …/ram:SpecifiedTaxRegistration/ram:ID |
| BT-35 | Adresse — ligne 1 | 0..1 | ram:PostalTradeAddress/ram:LineOne |
| BT-37 | Ville | 0..1 | ram:PostalTradeAddress/ram:CityName |
| BT-40 | Code pays | 1..1 | ram:PostalTradeAddress/ram:CountryID |
Tous les XPaths ci-dessus sont relatifs à ram:SellerTradeParty.
BT-35 et BT-37 : ces champs ont une cardinalité 0..1 dans le noyau EN16931 (optionnels). Cependant, ils sont fortement recommandés et peuvent devenir obligatoires selon le profil Factur-X ou les exigences de la PDP. Ne pas les confondre avec BT-40 (code pays) qui est véritablement 1..1.
Attention BT-30 vs BT-31 : BT-30 est l’identifiant d’enregistrement légal du vendeur. En France, il s’agit du SIRET (schemeID 0002). D’autres pays utilisent d’autres identifiants (ex: numéro de registre du commerce en Belgique, Handelsregisternummer en Allemagne). BT-31 est le numéro de TVA intracommunautaire. Les deux sont marqués 0..1 dans EN16931, mais la règle Schematron BR-CO-26 exige qu’au moins un identifiant vendeur soit présent parmi BT-29, BT-30 et BT-31.
Pour BT-30, le schemeID identifie le registre utilisé. En France, 0002 correspond au répertoire SIRENE (SIRET/SIREN) dans la liste ISO 6523 :
<ram:SellerTradeParty>
<ram:Name>Ma Société SAS</ram:Name>
<ram:SpecifiedLegalOrganization>
<ram:ID schemeID="0002">12345678901234</ram:ID>
</ram:SpecifiedLegalOrganization>
<ram:SpecifiedTaxRegistration>
<ram:ID schemeID="VA">FR12345678901</ram:ID>
</ram:SpecifiedTaxRegistration>
</ram:SellerTradeParty>
BG-7 — Acheteur
| BT | Nom | Card. | XPath CII |
|---|---|---|---|
| BT-44 | Nom de l’acheteur | 1..1 | ram:Name |
| BT-50 | Adresse — ligne 1 | 0..1 | ram:PostalTradeAddress/ram:LineOne |
| BT-52 | Ville | 0..1 | ram:PostalTradeAddress/ram:CityName |
| BT-55 | Code pays | 1..1 | ram:PostalTradeAddress/ram:CountryID |
Tous les XPaths ci-dessus sont relatifs à ram:BuyerTradeParty.
BT-50 et BT-52 : comme pour le vendeur (BT-35/BT-37), ces champs sont 0..1 dans EN16931 (optionnels), même s’ils sont fortement recommandés en pratique. Seul BT-55 (code pays) est véritablement obligatoire (1..1).
Le minimum pour l’acheteur est le nom et le code pays. En B2B, l’identifiant légal (BT-47) ou le numéro de TVA (BT-48) est fortement recommandé pour le routage PDP, même si EN16931 ne les rend pas systématiquement obligatoires.
BG-22 — Totaux du document
| BT | Nom | Card. | XPath CII |
|---|---|---|---|
| BT-106 | Total HT lignes | 1..1 | …/ram:LineTotalAmount |
| BT-109 | Total HT | 1..1 | ram:TaxBasisTotalAmount |
| BT-110 | Total TVA | 1..1 | ram:TaxTotalAmount |
| BT-112 | Total TTC | 1..1 | ram:GrandTotalAmount |
| BT-115 | Montant à payer | 1..1 | ram:DuePayableAmount |
XPaths relatifs à ram:SpecifiedTradeSettlementHeaderMonetarySummation.
BT-110 — Total TVA : ce champ est toujours obligatoire dans le noyau EN16931, y compris pour les factures exonérées de TVA. Dans ce cas, la valeur doit être 0.00. Ne pas confondre “exonéré de TVA” et “TVA non applicable” — dans les deux cas, BT-110 doit être présent.
Ces champs sont les plus contrôlés par Schematron. Les règles BR-CO-10 (somme des lignes = total HT lignes), BR-CO-13 (total HT = lignes + charges − remises), et BR-CO-15 (TTC = HT + TVA) vérifient la cohérence arithmétique. Un écart d’un centime suffit à déclencher un rejet.
BG-23 — Ventilation TVA
| BT | Nom | Card. | XPath CII |
|---|---|---|---|
| BT-116 | Base taxable par catégorie | 1..1 | ram:BasisAmount |
| BT-117 | Montant TVA par catégorie | 1..1 | ram:CalculatedAmount |
| BT-118 | Code catégorie TVA | 1..1 | ram:CategoryCode |
| BT-119 | Taux TVA | cond. | ram:RateApplicablePercent |
XPaths relatifs à chaque ram:ApplicableTradeTax (ventilation TVA).
La règle BR-S-05 exige un taux TVA > 0 pour la catégorie “Standard rated” (code S). La règle BR-CO-17 vérifie que BT-117 = BT-116 × BT-119 / 100, arrondi à 2 décimales. Ces deux règles sont parmi les causes de rejet les plus fréquentes.
BG-25 — Lignes de facture
Chaque facture doit contenir au moins une ligne (règle BR-16).
| BT | Nom | Card. | XPath CII |
|---|---|---|---|
| BT-126 | Identifiant de ligne | 1..1 | …/ram:LineID |
| BT-129 | Quantité facturée | 1..1 | ram:BilledQuantity |
| BT-130 | Unité de mesure | 1..1 | ram:BilledQuantity/@unitCode |
| BT-131 | Montant net de ligne | 1..1 | ram:LineTotalAmount |
| BT-146 | Prix unitaire net | 1..1 | ram:ChargeAmount |
| BT-151 | Code catégorie TVA | 1..1 | ram:CategoryCode |
| BT-153 | Nom de l’article | 1..1 | ram:Name |
BT-126 : XPath complet ram:AssociatedDocumentLineDocument/ram:LineID.
BT-130 — Unité de mesure : doit être un code UN/ECE Rec 20 ou Rec 21 (ex: C62 = unité, HUR = heure, KGM = kilogramme). Les ERP utilisent souvent des labels en clair (“pièce”, “heure”) qu’il faut mapper vers les codes normalisés.
Les 10 champs les plus souvent manquants
En analysant les erreurs Schematron les plus fréquentes, voici les champs que les intégrations ERP oublient le plus souvent :
| Rang | BT | Erreur Schematron | Cause ERP typique |
|---|---|---|---|
| 1 | BT-5 (devise) | BR-05 | Pas configuré dans les paramètres société |
| 2 | BT-30 ou BT-31 (id vendeur) | BR-CO-26 | SIRET/TVA dans un champ libre non mappé |
| 3 | BT-40 (pays vendeur) | BR-09 | Adresse incomplète dans la fiche société |
| 4 | BT-130 (unité de mesure) | BR-23 | Label en clair au lieu du code UN/ECE |
| 5 | BT-2 (date) | Format error | Date au format local, pas AAAAMMJJ |
| 6 | BT-3 (type) | BR-04 | Code absent ou code ERP interne non mappé |
| 7 | BT-118 (catégorie TVA) | BR-S-01 | Code TVA ERP vs code UNCL 5305 |
| 8 | BT-119 (taux TVA) | BR-S-05 | Taux absent pour catégorie S |
| 9 | BT-151 (catégorie TVA ligne) | BR-S-01 | Même problème que BT-118, au niveau ligne |
| 10 | BT-115 (montant à payer) | BR-CO-16 | Calculé côté ERP mais pas exporté dans le XML |
Mapping ERP → XML : méthodologie
Étape 1 : Inventaire des champs ERP
Pour chaque champ obligatoire EN16931, identifier dans votre ERP :
- Où la donnée est stockée (table, colonne, relation)
- Sous quel format (date ISO vs locale, code interne vs code normalisé)
- Si elle existe (certains champs EN16931 n’ont pas d’équivalent natif dans l’ERP)
Étape 2 : Table de correspondance
Créer une table de mapping explicite. Exemple pour les champs vendeur :
| BT EN16931 | Champ ERP (exemple Odoo) | Transformation |
|---|---|---|
| BT-27 (nom vendeur) | res.company.name | Aucune |
| BT-30 (identifiant légal) | res.company.siret | Ajouter schemeID=“0002” (France) |
| BT-31 (TVA) | res.company.vat | Ajouter schemeID=“VA” |
| BT-35 (adresse) | res.company.street | Aucune |
| BT-40 (pays) | res.company.country_id.code | Vérifier ISO 3166-1 alpha-2 |
Étape 3 : Transformations de format
Les transformations les plus courantes :
| Type | ERP | XML CII attendu |
|---|---|---|
| Date | 2026-04-01 (ISO 8601) | 20260401 + format="102" |
| Devise | EUR ou € | EUR (ISO 4217 alpha-3) |
| Unité | "pièce", "unité" | C62 (UN/ECE Rec 20) |
| Pays | "France", "FR" | FR (ISO 3166-1 alpha-2) |
| Type facture | "Facture", "INV" | 380 (UNTDID 1001) |
| Type avoir | "Avoir", "CN" | 381 (UNTDID 1001) |
| Catégorie TVA | "Normal", "20%" | S (UNCL 5305) |
Étape 4 : Validation en boucle
Après chaque ajustement de mapping, valider le XML produit contre les trois couches : XSD, Schematron EN16931, et (pour Factur-X) la conformité PDF/A-3. Les erreurs Schematron sont les plus informatives — elles indiquent exactement quel BT pose problème.
Conditions de paiement et coordonnées bancaires
BG-16 — Instructions de paiement
| BT | Nom | Cardinalité | Remarque |
|---|---|---|---|
| BT-81 | Moyen de paiement | 1..1 | Code UNTDID 4461 (ex: 30 = virement, 58 = SEPA) |
| BT-82 | Texte paiement | 0..1 | Texte libre (conditions, délais) |
| BT-84 | IBAN | conditionnel | Obligatoire si moyen = virement |
| BT-86 | BIC | conditionnel | Recommandé pour les virements internationaux |
BT-81 — Code moyen de paiement : les ERP stockent souvent un label (“Virement bancaire”, “Prélèvement SEPA”) qu’il faut convertir en code UNTDID 4461. Les codes les plus utilisés en France :
| Code | Signification |
|---|---|
30 | Virement |
31 | Virement demandé |
42 | Paiement à un compte bancaire |
48 | Carte bancaire |
49 | Prélèvement |
58 | Virement SEPA |
59 | Prélèvement SEPA |
BG-20 — Conditions de paiement
| BT | Nom | Cardinalité | XPath CII |
|---|---|---|---|
| BT-9 | Date d’échéance | 0..1 | ram:DueDateDateTime/udt:DateTimeString |
| BT-20 | Conditions en texte libre | 0..1 | ram:Description (dans SpecifiedTradePaymentTerms) |
BT-9 et BT-20 sont optionnels en EN16931 mais fortement attendus par les PDP et les destinataires. Une facture sans date d’échéance ni conditions de paiement est techniquement valide mais opérationnellement incomplète.
Checklist de mapping
CHAMPS OBLIGATOIRES EN16931 — VÉRIFICATION MAPPING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
En-tête
☐ BT-1 Numéro de facture — non vide
☐ BT-2 Date — format AAAAMMJJ + format="102"
☐ BT-3 Type — code UNTDID 1001 (380/381)
☐ BT-5 Devise — ISO 4217 alpha-3
☐ BT-24 Specification identifier — URN du profil (BR-01)
Vendeur (BG-4)
☐ BT-27 Nom — non vide
☐ BT-30 ou BT-31 — au moins un identifiant (BR-CO-26)
☐ BT-35 Adresse ligne 1 (0..1 EN16931, recommandé)
☐ BT-37 Ville (0..1 EN16931, recommandé)
☐ BT-40 Code pays ISO 3166
Acheteur (BG-7)
☐ BT-44 Nom — non vide
☐ BT-50 Adresse ligne 1 (0..1 EN16931, recommandé)
☐ BT-52 Ville (0..1 EN16931, recommandé)
☐ BT-55 Code pays ISO 3166
Totaux (BG-22)
☐ BT-106 Total HT lignes
☐ BT-109 Total HT
☐ BT-110 Total TVA — toujours requis (0.00 si exonéré)
☐ BT-112 Total TTC
☐ BT-115 Montant à payer
☐ Cohérence arithmétique (BR-CO-10, BR-CO-13, BR-CO-15)
TVA (BG-23)
☐ Au moins une ventilation TVA
☐ BT-116 Base taxable
☐ BT-117 Montant TVA
☐ BT-118 Code catégorie (UNCL 5305)
☐ BT-119 Taux — présent si catégorie S (BR-S-05)
☐ BR-CO-17 vérifiée (BT-117 = BT-116 × BT-119 / 100)
Lignes (BG-25)
☐ Au moins une ligne (BR-16)
☐ BT-126 Identifiant de ligne
☐ BT-129 Quantité
☐ BT-130 Unité — code UN/ECE Rec 20 (pas de label)
☐ BT-131 Montant net
☐ BT-146 Prix unitaire
☐ BT-151 Code catégorie TVA
☐ BT-153 Nom article
Paiement (BG-16)
☐ BT-81 Moyen de paiement — code UNTDID 4461
☐ BT-84 IBAN si virement
Ressources
- Facturation électronique 2026 : le guide technique complet — contexte réforme, pipeline, calendrier
- Valider EN16931/Factur-X : XSD vs Schematron, erreurs BR-* — comprendre les erreurs quand un champ manque
- Factur-X vs UBL vs CII : quel format choisir — quel format selon votre intégration
- PDF/A-3 pour Factur-X : checklist de conformité — la couche conteneur PDF