Règles métier
Deux vues sur les règles CTC françaises de la matrice AFNOR XP Z12-012 V1.4.
- Points d'attention — douze sujets rédigés d'après le chapitre 4.4 de XP Z12-012 (juin 2026) et vérifiés contre la norme : calcul des lignes et des totaux, arrondi, prix brut/remise/net, remises et charges, catégories de TVA et codes d'exonération, taxes hors TVA et DEEE, avoirs vs factures négatives, notes et mentions obligatoires, profil et cadre de facturation, types de données, sous-lignes, et factures multi-vendeurs. Chaque sujet indique ce qu'exige la norme et comment NomaUBL l'applique, chapitre à l'appui.
- Catalogue de règles — les 148 règles CTC françaises de la matrice (contrôles BR-FR, cohérence, mapping flux 1 / 10.1, formats numériques, multi-vendeurs, règles PPF) avec leur texte complet, un filtre par famille, la recherche et les termes UBL que chaque règle contraint.
Chaque terme UBL de la page Référence UBL renvoie aux règles qui s'y appliquent.
Points d'attention rédigés d'après l'AFNOR XP Z12-012 (juin 2026), vérifiés le 2026-09-25.
§4.4.5Règle de calcul des lignes et des totaux
Ce qu’exige la norme
- Montant net de ligne (BT-131) = arrondi à 2 décimales de (prix net BT-146 ÷ quantité de base BT-149 × quantité facturée BT-129), moins la somme des remises de ligne (BT-136), plus la somme des charges de ligne (BT-141). Le produit est arrondi avant d'appliquer les remises et charges, elles-mêmes déjà à 2 décimales.
- L'unité de la quantité de base du prix (BT-150) doit être celle de la quantité facturée (BT-130), sinon le résultat est faux du facteur d'unité (gramme contre kilogramme = 1 000).
- Cette formule de ligne n'est pas contrôlée par le schematron EN 16931 aujourd'hui ; la révision de la norme l'ajoutera avec une tolérance. Les totaux de document, eux, sont contrôlés (BR-CO-10 à BR-CO-16) : BT-106 = Σ BT-131 ; BT-109 = BT-106 − BT-107 + BT-108 ; BT-110 = Σ BT-117 ; BT-112 = BT-109 + BT-110 ; BT-115 = BT-112 − BT-113 + BT-114.
- Par catégorie et taux de TVA : base = Σ BT-131 des lignes de la catégorie + charges de document − remises de document de la même catégorie ; montant = base × taux ÷ 100, arrondi à 2 décimales.
- Le profil EXTENDED-CTC-FR tolère 0,01 € par ligne et par remise/charge de document dans ces sommes (prix TTC du B2C, TVA calculée à la ligne). Seules les lignes DETAIL, ou sans sous-type, entrent dans les calculs.
Dans NomaUBL
- Les montants JDE sont repris tels quels : la XSL ne recalcule ni BT-131 ni les totaux, elle normalise ce que le spool contient. La cohérence dépend donc du mapping (TAG_LINE_AMOUNT face à TAG_LINE_PRICE, TAG_LINE_QUANTITY et TAG_LINE_PRICE_BASE_QTY).
- Le modal de facture recalcule chaque ligne et chaque total avec exactement cette formule, division par la quantité de base comprise.
- La règle schematron NomaUBL BR-NOMAUBL-02 émet un avertissement (pas une erreur) quand BT-131 s'écarte de la formule de plus de 0,011 : le calcul AFNOR est ainsi vérifié avant envoi, même si l'EN 16931 ne le fait pas.
Termes:BT-131BT-146BT-149BT-129BT-136BT-141BT-106BT-109BT-110BT-112BT-115
§4.4.6Règle d'arrondi
Ce qu’exige la norme
- Arrondi au plus proche, et en cas de demi (…5) à l'écart de zéro : 13,455 donne 13,46 et −13,455 donne −13,46, de sorte que deux montants opposés restent opposés une fois arrondis. S'applique à chaque multiplication ou division.
Dans NomaUBL
- XSL : aucune arithmétique sur les montants, hormis BT-115 quand un acompte ou un arrondi est renseigné (soustraction de valeurs à 2 décimales, aucun cas de demi possible). L'arrondi est donc à la charge de JDE.
- Modal de facture : toute multiplication ou division passe par un arrondi « demi à l'écart de zéro » (roundHalfAwayFromZero dans buildUblXml.ts), avec une garde contre la représentation binaire des décimaux (13,455 × 100 = 1345,4999…). Produit prix × quantité arrondi à 2 décimales avant les remises de ligne, TVA = base × taux ÷ 100 arrondie à 2 décimales, prix unitaires à 6 décimales. Corrigé le 25/09/2026 ; auparavant Math.round arrondissait les demis vers +∞ (−13,455 donnait −13,45).
§4.4.9Prix brut, rabais et prix net (BG-29)
Ce qu’exige la norme
- Trois niveaux de remise/charge : au document (TVA propre, sommées en BT-107/BT-108), à la ligne (même TVA que la ligne, intégrées dans BT-131) et sur le prix unitaire, uniquement un rabais (BT-147) qui fait passer du prix brut (BT-148) au prix net (BT-146).
- Le prix net (BT-146) est obligatoire et c'est lui qui multiplie la quantité. Le prix brut est facultatif dans l'EN 16931 mais devient obligatoire en France dès qu'il diffère du prix net. Il contient les charges ou taxes éventuellement incluses (écotaxe par exemple).
- Contrôles associés : net = brut − rabais à 1 centime près (G1.55) ; brut absent copié depuis le net dans les flux 1 et 10.1 (BR-FR-MAP-21/22) ; plusieurs rabais sont sommés et BT-147 devient obligatoire dans ces flux à partir de septembre 2027 (BR-FR-MAP-30) ; 6 décimales maximum, jamais négatif hors cadre 9 (BR-FR-DEC-03).
- Ne jamais déclarer la même remise deux fois : soit en rabais sur prix (BT-147), soit en remise de ligne (BG-27), jamais les deux. Un prix déclaré net avec la remise répétée en BG-27 fausse BT-131 du montant de la remise.
Dans NomaUBL
- Variables de mapping : TAG_LINE_PRICE (BT-146), TAG_LINE_GROSS_PRICE (BT-148), TAG_DISCOUNT_AMOUNT (BT-147), TAG_LINE_PRICE_BASE_QTY (BT-149). Spool en brut + remise : mapper les deux, le net est dérivé (brut − remise). Spool en net + remise : le brut est émis comme net + remise.
- Modal de facture : le bloc « Prix (BG-29) » édite brut et rabais, le net est calculé ; le montant de ligne utilise le net et le prix d'entête est verrouillé tant que BG-29 est actif.
Termes:BT-146BT-147BT-148BT-149BT-150BT-136
§4.4.9Remises et charges
Ce qu’exige la norme
- En UBL, remises et charges partagent l'élément cac:AllowanceCharge, distingué par cbc:ChargeIndicator : false pour une remise, true pour une charge. Les montants sont positifs, sauf pour signifier une reprise dans une facture négative.
- Une remise ou charge de ligne doit porter le même taux de TVA que la ligne ; sinon, elle devient une ligne à part entière (positive pour une charge, quantité négative pour une remise).
- Les remises et charges de document ont leur propre catégorie et taux de TVA (BT-95/BT-96, BT-102/BT-103) et alimentent la ventilation de TVA comme des lignes supplémentaires.
Dans NomaUBL
- Le modal de facture gère les remises et charges de document et de ligne avec leur catégorie de TVA ; BT-131 intègre celles de la ligne.
- Deux mappings existent pour une remise de ligne : TAG_DISCOUNT_AMOUNT en rabais sur prix (BG-29) ou le groupe TAG_LINE_AC_* en remise/charge de ligne (BG-27/BG-28). Une même remise ne doit passer que par l'un des deux.
Termes:BT-92BT-95BT-96BT-99BT-102BT-103BT-136BT-141
§4.4.7Catégories de TVA et motifs d'exonération
Ce qu’exige la norme
- S taux standard ; E exonéré, avec motif obligatoire en texte et en code (BT-120/BT-121) ; AE autoliquidation, code VATEX-EU-AE (VATEX-FR-AE en domestique) ; K livraison intracommunautaire de biens, VATEX-EU-IC ; G export hors UE, VATEX-EU-G, y compris services hors UE ; O hors champ, VATEX-EU-O. Z (taux 0) n'est pas utilisé en France, sauf transcodage de la franchise en base.
- Services vendus en UE : catégorie AE (autoliquidation par le preneur), pas K, malgré le libellé de K ; confirmation européenne en cours.
- La règle BR-O-11 (une facture O ne contient que du O) est levée dans le profil EXTENDED-CTC-FR : des lignes O peuvent cohabiter avec d'autres catégories.
- Ventilation (BG-23) : une entrée par catégorie et taux présents dans les lignes, base = somme des lignes, taux 0 si exonéré et absent pour O, montant nul sans TVA, et un motif dans tous les cas sauf S. Franchise en base : E + VATEX-FR-FRANCHISE, transcodé en Z dans les flux 1 et 10.1 (BR-FR-MAP-08/09). Taux autorisés : liste BR-FR-16.
Dans NomaUBL
- Catégorie, taux et motifs de ligne : TAG_LINE_VAT_CATEGORY, TAG_LINE_VAT_RATE, TAG_LINE_VAT_EXEMPTION_CODE et TAG_LINE_VAT_EXEMPTION_REASON. La ventilation BG-23 et ses motifs doivent rester cohérents avec les lignes ; les schematrons EN 16931 et CTC-FR le vérifient à la validation.
Termes:BT-118BT-119BT-120BT-121BT-151BT-152EXT-FR-FE-178EXT-FR-FE-179
§4.4.8Taxes autres que la TVA, éco-contribution DEEE
Ce qu’exige la norme
- Taxe soumise à la même TVA que le produit : charge de ligne (BG-28) avec motif BT-144 ou code BT-145. Taxe non soumise ou à un autre taux : ligne de service séparée ; pour les taxes parafiscales, GS1 publie des GTIN dédiés (BT-157 avec schéma 0160).
- Taxe sur toute la facture : charge de document (BG-21) avec motif BT-104/BT-105 et sa TVA en BT-102/BT-103.
- L'éco-contribution DEEE est en général incluse dans le prix unitaire et simplement mentionnée (« dont xx,xx € éco-contribution ») dans une note de ligne (BT-127) ou de document avec le code sujet BLU. Elle ne sert pas à l'intégration comptable de l'acheteur.
- La révision de l'EN 16931 ajoute des codes de taxe hors TVA (BT-193 à la ligne, BT-177 au document, liste UNTDID 5153) en alternative aux codes motif BT-145/BT-105 ; déjà intégrés au profil EXTENDED-CTC-FR.
Dans NomaUBL
- Aucune taxe hors TVA n'est émise par défaut. Une mention DEEE se fait par une note de ligne préfixée ##BLU## ; les codes BT-193/BT-177 ne sont pas mappés.
Termes:BT-141BT-144BT-145BT-193BT-177BT-127BT-157
§4.4.4Avoirs et factures négatives
Ce qu’exige la norme
- Deux représentations : l'avoir typé (381, 261, 396, 502, 503) dont tous les totaux gardent le signe de la facture annulée, et la facture négative (type facture, prix unitaires positifs, quantités négatives, remises et charges inversées) qui résulte d'un calcul de facturation avec reprises.
- Interdits : l'avoir négatif (pour annuler un avoir, faire une facture qui le référence) et l'avoir à total TTC négatif issu de lignes de signes mixtes (préférer une facture rectificative). Pratique française : l'avoir typé, clone de la facture avec nouveau numéro, date, référence à la facture annulée et éventuellement échéance.
- Un avoir doit référencer la facture antérieure : en entête (BT-25 et sa date BT-26) ou sur chaque ligne DETAIL (EXT-FR-FE-136 et EXT-FR-FE-138), jamais les deux à la fois sous peine de rejet du flux 1 (G1.31). Une facture rectificative (384, 471, 472, 473) porte exactement une référence d'entête.
Dans NomaUBL
- Les avoirs sont émis en UBL CreditNote (CreditNoteLine, CreditedQuantity) avec BT-3 = 381 ; la référence d'entête vient de TAG_LINE_BILLING_REF / TAG_LINE_BILLING_REF_DATE ou des références de document.
- Le modal de facture édite BG-3 en entête et EXT-FR-FE-136 à la ligne (avec DocumentStatusCode), strictement à un seul niveau à la fois.
Termes:BT-3BT-25BT-26EXT-FR-FE-136EXT-FR-FE-138
§4.4.3Notes et mentions obligatoires
Ce qu’exige la norme
- Les mentions obligatoires sans champ dédié sont portées par une note (BT-22) qualifiée d'un code sujet (BT-21) ; en UBL, le code s'écrit entre ## au début du texte. Même mécanisme pour les notes de ligne (BT-127, code EXT-FR-FE-183).
- Toute facture porte au moins PMT (indemnité forfaitaire de 40 € pour frais de recouvrement), PMD (pénalités de retard) et AAB (escompte ou absence d'escompte) — BR-FR-05 ; PMD, PMT, AAB et TXD au plus une fois chacun — BR-FR-06.
- Autres sujets usuels : AAI informations générales, ABL mentions légales (RCS…), ACC subrogation d'affacturage, ADN facture B2G, BAR traitement attendu (B2B, B2BINT, B2C, OUTOFSCOPE, ARCHIVEONLY — BR-FR-20), BLU éco-contribution, CUS douane, DCL mandat de facturation, SUR remarques fournisseur, TXD membre d'un assujetti unique (texte MEMBRE_ASSUJETTI_UNIQUE).
Dans NomaUBL
- Chaque note mappée est émise avec son préfixe ##CODE##. Vérifier que PMT, PMD et AAB sont toujours présents, par exemple via les valeurs par défaut de société.
Termes:BT-21BT-22BT-127EXT-FR-FE-183
§4.4.2Profil (BT-24) et cadre de facturation (BT-23)
Ce qu’exige la norme
- BT-24 identifie le profil : urn:cen.eu:en16931:2017 pour EN 16931, urn:cen.eu:en16931:2017#conformant#urn.cpro.gouv.fr:1p0:extended-ctc-fr pour EXTENDED-CTC-FR ; Factur-X a ses propres URN (basicwl, basic, extended).
- BT-23 code le cadre de facturation : première lettre B biens, S services, M mixte ; chiffre 1 standard, 2 déjà payée, 3 sous-traitance B2G, 4 définitive après acompte, 5/6 sous-traitant / cotraitant, 7 déjà e-reportée, 8 multi-vendeurs, 9 bidirectionnelle (liste BR-FR-08). Contraintes : cadre 4 exclut les types acompte (BR-FR-CO-08) ; cadre 2 impose BT-113 = BT-112, BT-115 = 0 et la date de paiement en BT-9 (BR-FR-CO-09).
- Le périmètre (e-invoicing, e-reporting B2B international ou B2C, hors réforme) ne se déduit pas de la facture ; il peut être porté par une note BAR (BR-FR-20) ou par le canal de transmission vers la PA.
Dans NomaUBL
- BT-24 est fixé au profil EXTENDED-CTC-FR ; BT-23 est mappé par modèle de document (B1, S1 ou M1 en usage courant).
Termes:BT-23BT-24
§4.4.1Types de données et décimales
Ce qu’exige la norme
- Montants : 2 décimales maximum, point décimal, pas de séparateur de milliers, devise toujours présente en UBL (currencyID). Prix unitaires : pas de limite dans l'EN 16931 aujourd'hui, 6 décimales maximum en France (BR-FR-DEC-03), 4 dans la révision à venir. Quantités : 4 décimales (BR-FR-DEC-02). Pourcentages : 2 décimales, valeur 20 pour 20 % (BR-FR-DEC-04). 19 chiffres significatifs au total.
- Dates AAAA-MM-JJ en UBL ; identifiants avec schemeID quand plusieurs schémas existent (VAT pour un numéro de TVA en UBL) ; codes accompagnés de leur liste ; objet binaire avec mimeCode et filename.
Dans NomaUBL
- La XSL nettoie les valeurs du spool (espaces, €, virgule décimale) : montants normalisés à 2 décimales, prix unitaires jusqu'à 6. Le modal applique les mêmes précisions.
§4.4.11Sous-lignes (DETAIL, GROUP, INFORMATION)
Ce qu’exige la norme
- Le profil EXTENDED-CTC-FR hiérarchise les lignes avec l'identifiant de ligne parent (EXT-FR-FE-162) et le sous-type de ligne (EXT-FR-FE-163). Seules les lignes DETAIL, ou sans sous-type, entrent dans les totaux, la ventilation de TVA et les flux 1 / 10.1 (BR-FR-MAP-24).
- INFORMATION rend facultatifs prix net, quantité, unité, TVA et montant de ligne ; GROUP est une ligne de regroupement dont le montant, s'il est présent, doit égaler la somme des sous-lignes DETAIL ou GROUP directement rattachées. Plusieurs niveaux sont possibles ; le numéro de ligne n'a pas à refléter la hiérarchie.
- En UBL, ces deux données passent par cac:BillingReference (BillingReferenceLine/ID et InvoiceDocumentReference/DocumentStatusCode) avec InvoiceDocumentReference/ID égal au numéro de la facture elle-même ; l'implémentation peut encore évoluer.
Dans NomaUBL
- NomaUBL ne génère pas de sous-lignes. Le modal expose DocumentStatusCode sur les références de facture antérieure à la ligne, qui est le même élément UBL : n'utiliser INFORMATION ou GROUP qu'en connaissance de cause.
Termes:EXT-FR-FE-162EXT-FR-FE-163
§4.4.12 / §4.4.13Factures multi-vendeurs et auto-factures bidirectionnelles
Ce qu’exige la norme
- Cadres B8/S8/M8 (multi-vendeurs) et B9/S9/M9 (auto-facture bidirectionnelle). Chaque facture unitaire est une ligne GROUP sans parent portant le vendeur à la ligne (EXT-FR-FE-BG-12), son numéro (BT-128 avec schéma AFL), son cadre (BT-128 avec schéma AVV), son exigibilité et ses montants de TVA et TTC ; chaque ligne DETAIL porte le numéro AFL, l'identifiant légal du vendeur et un motif d'exonération commençant par #numéro#. Même date et même type pour toutes les factures unitaires.
- La PA d'émission recompose une facture unitaire par vendeur et produit un flux 1 ou 10.1 par facture unitaire ; les remises et charges de document restent au vendeur principal et sont déconseillées. L'auto-facture bidirectionnelle est à proscrire sauf pratique déjà tolérée par l'administration fiscale.
Dans NomaUBL
- Non pris en charge : une facture JDE n'a qu'un vendeur.