Sur cette page
La réponse courte
BR-12 échoue lorsque cac:LegalMonetaryTotal n'a pas d'enfant cbc:LineExtensionAmount. Ajoutez-le comme premier élément des totaux monétaires, avec la somme des cbc:LineExtensionAmount de toutes les lignes, arrondie à deux décimales.
Le même nom d'élément apparaît sur chaque ligne, ce qui rend ce total facile à oublier. Les montants des lignes ne comptent pas pour lui : la somme au niveau du document doit aussi être écrite, même lorsqu'une ligne unique rend les deux valeurs identiques.
Ce que la règle vérifie
La règle s'exécute sur cac:LegalMonetaryTotal et exige un élément cbc:LineExtensionAmount directement à l'intérieur. Sa valeur n'est pas examinée ici ; savoir si elle est égale à la somme des lignes relève de BR-CO-10.
Un total des lignes vide n'arrive jamais jusque-là. Le schéma exige que chaque montant soit un nombre décimal : lors d'un essai, un cbc:LineExtensionAmount vide dans les totaux a donc échoué à l'étape XSD, et l'étape EN 16931 a été ignorée.
Parmi les totaux monétaires, le schéma UBL n'exige que le montant à payer, ce qui explique qu'un document sans total des lignes passe l'étape XSD. Le bloc des totaux monétaires est lui-même obligatoire : lors d'un essai, un document sans cac:LegalMonetaryTotal a échoué au schéma.
Les montants nets des lignes sur cac:InvoiceLine ou cac:CreditNoteLine sont des éléments distincts et ne satisfont pas la règle, quel que soit leur nombre.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-106 | Somme des montants nets des lignes de facture | cac:LegalMonetaryTotal/cbc:LineExtensionAmount |
| BT-131 | Montant net de ligne de facture | cac:InvoiceLine/cbc:LineExtensionAmount (cac:CreditNoteLine/cbc:LineExtensionAmount in a credit note) |
Comment une intégration en arrive là
Causes possibles, déduites de la forme de la règle et non d'une utilisation mesurée :
- Le bloc des totaux est construit à partir d'une liste fixe de champs qui ne contient que les totaux stockés par le système source, comme le total net et le total brut, et le total des lignes n'en fait pas partie.
- Le mapping considère le total des lignes comme redondant lorsqu'il n'y a ni remise ni frais au niveau du document, parce qu'il serait alors égal au total hors TVA.
- Le total des lignes est calculé après l'écriture du bloc des totaux : il est donc encore nul lorsque le sérialiseur l'atteint, et il est ignoré.
Comment corriger le document
- Prenez le
cbc:LineExtensionAmountde chaque ligne exactement tel qu'il est écrit, et additionnez-les en arithmétique décimale, en conservant le signe des lignes négatives. - Arrondissez la somme à deux décimales et écrivez-la sous la forme de
cbc:LineExtensionAmount, avec la devise du document danscurrencyID, comme premier enfant decac:LegalMonetaryTotal. Lors d'un essai, l'élément placé aprèscbc:TaxExclusiveAmounta échoué à l'étape XSD. - Vérifiez que le total hors TVA est égal au nouveau total des lignes, moins le total des remises, plus le total des frais, afin que
BR-CO-13passe aussi.
Valider votre facture corrigée
Avant et après
Ce sont des extraits, pas des documents complets. Les documents synthétiques complets dont ils proviennent sont liés ci-dessous.
Fragment de la facture en échec : les totaux monétaires commencent au total hors TVA, tandis que la ligne garde son propre montant net
<cac:LegalMonetaryTotal>
<cbc:TaxExclusiveAmount currencyID="GBP">25.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="GBP">30.00</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="GBP">0.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="GBP">0.00</cbc:ChargeTotalAmount>
<!-- prepaid, rounding and payable amounts omitted from this fragment -->
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<!-- item and price omitted from this fragment -->
</cac:InvoiceLine>Fragment de la facture corrigée : le total des lignes de 25.00 ouvre les totaux monétaires
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">25.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="GBP">30.00</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="GBP">0.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="GBP">0.00</cbc:ChargeTotalAmount>
<!-- prepaid, rounding and payable amounts omitted from this fragment -->
</cac:LegalMonetaryTotal>La facture corrigée a un cbc:LineExtensionAmount de 25.00 comme premier enfant de cac:LegalMonetaryTotal ; la facture en échec ne l'a pas, et son unique ligne est inchangée. Deux autres règles EN 16931 sont signalées au même emplacement. BR-CO-10 compare le total des lignes à la somme des lignes, et un total absent ne peut pas être égal à 25.00. BR-CO-13 calcule le total hors TVA attendu à partir du total des lignes : sans total des lignes, il ne peut pas confirmer les 25.00 envoyés. Rétablir l'élément lève les trois constats.
Ce que le validateur a signalé
- La facture en erreur signale BR-12, BR-CO-10 et BR-CO-13. Le document corrigé passe toutes les étapes de validation sans constat.Télécharger le XML en erreurTélécharger le XML corrigé
Enregistré avec phive 12.1.0 / phive-rules-peppol 4.5.6 / Saxon-HE 12.10, le moteur du validateur gratuit, sur des données synthétiques. Un résultat enregistré est une preuve de non-régression pour ces documents ; ce n'est pas une certification.
Où la règle s'applique
- S'applique aux documents UBL
InvoiceetCreditNote; les totaux monétaires portent le même nom dans les deux. Lors d'un essai, un avoir sans total des lignes a signalé les trois mêmes règles. - Considérez
BR-CO-10etBR-CO-13à côté de cette règle comme des conséquences de l'unique élément manquant, et non comme des défauts distincts. Lors d'un essai sur l'exemple plus riche avec remises et frais au niveau du document, retirer son total des lignes de 66.00 a signalé les trois mêmes règles et rien d'autre. - L'élément de chaque ligne est une autre affaire. Le schéma l'y exige : lors d'un essai, une ligne sans son propre
cbc:LineExtensionAmounta donc échoué à l'étape XSD, et aucune règle métier n'a été signalée pour elle.
Règles liées
- BR-CO-10 vérifie que ce total des lignes, une fois présent, est égal à la somme des lignes
- BR-CO-13 calcule le total hors TVA à partir de ce total des lignes
- BR-13 est la règle de présence correspondante pour le total hors TVA
- Parcourir toutes les règles de la référence
- Contexte (en anglais) : Understanding EN 16931 validation errors
Portée et source
Rédigé pour Peppol BIS Billing 3.0.21 (May 2026), EN 16931 1.3.16, tel qu'appliqué aux documents Invoice et CreditNote en UBL 2.1. D'autres profils, syntaxes et versions peuvent définir cet identifiant autrement. Version du catalogue d'aide 2026-09-24.1 : source vérifiée le 2026-09-24, explication mise à jour le 2026-09-24.
La définition officielle de BR-12 (en anglais) contient le texte normatif et le test. Cette page en est notre explication, pas une copie.
Cette aide ne modifie pas le verdict du moteur. Corriger ce constat ne signifie pas que le document passe toutes les étapes de validation, et la validation ne certifie pas la conformité juridique ou fiscale et ne transmet aucun document via Peppol.

