Sur cette page
La réponse courte
BR-CO-10 échoue lorsque cac:LegalMonetaryTotal/cbc:LineExtensionAmount n'est pas la somme des montants nets des lignes. Additionnez le cbc:LineExtensionAmount de chaque cac:InvoiceLine (ou cac:CreditNoteLine), arrondissez la somme à deux décimales et écrivez cette valeur dans les totaux monétaires.
Corrigez le total, pas les lignes, sauf si une ligne est réellement fausse. Tous les totaux suivants reposent sur celui-ci : attendez-vous donc à voir BR-CO-13 à côté tant que la valeur n'est pas juste.
Ce que la règle vérifie
La règle lit deux choses : le cbc:LineExtensionAmount contenu dans cac:LegalMonetaryTotal, et le cbc:LineExtensionAmount de chaque ligne du document. Les lignes dont le montant net est négatif comptent avec leur signe.
Les remises et les frais au niveau du document ne jouent aucun rôle. Ils relèvent du total des remises et du total des frais, et non de cette somme. Les remises et les frais de ligne ne sont pas non plus ajoutés séparément, car chaque montant net de ligne les inclut déjà.
La somme des lignes est arrondie à deux décimales puis comparée exactement. Il n'y a aucune tolérance : un total de 66.01 face à des lignes qui donnent 66.00 échoue.
| 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 total provient d'un en-tête de commande ou d'écriture stocké, tandis que les lignes sont construites à partir d'une table distincte, et une ligne a été filtrée, ajoutée ou modifiée après l'enregistrement de l'en-tête.
- Les lignes de correction aux montants négatifs sont ignorées, ou ajoutées en valeur absolue, lors du calcul du total.
- Le total est calculé à partir de la quantité multipliée par le prix, sans arrondi, puis arrondi une seule fois, tandis que chaque montant net de ligne est arrondi à deux décimales avant d'être écrit.
- Une remise ou des frais au niveau du document sont intégrés au total des lignes en plus d'être envoyés sous forme de
cac:AllowanceCharge. - Les montants sont additionnés en virgule flottante binaire et le résultat est décalé d'un centime une fois formaté.
Comment corriger le document
- Prenez le
cbc:LineExtensionAmountde chaque ligne exactement tel qu'il figurera dans le XML, déjà arrondi à deux décimales. - Additionnez ces valeurs en arithmétique décimale, en conservant le signe des lignes négatives, et arrondissez le résultat à deux décimales.
- Écrivez le résultat dans
cac:LegalMonetaryTotal/cbc:LineExtensionAmount. - Recalculez le total hors TVA à partir de la valeur corrigée : total des lignes, moins total des remises, plus total des frais.
BR-CO-13le vérifie ensuite.
L'exemple enregistré comporte trois lignes, dont une correction négative.
Montants nets des lignes : 58.00 + 10.00 + (-2.00) = 66.00 Total des lignes envoyé (BT-106) : 67.00, donc BR-CO-10 échoue Total hors TVA envoyé : 68.50, soit 66.00 - 1.00 + 3.50 Face aux 67.00 envoyés, BR-CO-13 attend 67.00 - 1.00 + 3.50 = 69.50, et échoue donc 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 : le total indique 67.00, les lignes donnent 66.00
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">67.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">68.50</cbc:TaxExclusiveAmount>
<!-- remaining totals omitted from this fragment -->
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<!-- note and quantity omitted from this fragment -->
<cbc:LineExtensionAmount currencyID="GBP">58.00</cbc:LineExtensionAmount>
<!-- accounting cost, order line reference, line allowance and charge, item and price omitted from this fragment -->
</cac:InvoiceLine>
<cac:InvoiceLine>
<cbc:ID>2</cbc:ID>
<!-- quantity omitted from this fragment -->
<cbc:LineExtensionAmount currencyID="GBP">10.00</cbc:LineExtensionAmount>
<!-- item and price omitted from this fragment -->
</cac:InvoiceLine>
<cac:InvoiceLine>
<cbc:ID>3</cbc:ID>
<!-- quantity omitted from this fragment -->
<cbc:LineExtensionAmount currencyID="GBP">-2.00</cbc:LineExtensionAmount>
<!-- item and price omitted from this fragment -->
</cac:InvoiceLine>Fragment de la facture corrigée : le total est la somme des trois lignes
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">66.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">68.50</cbc:TaxExclusiveAmount>
<!-- remaining totals omitted from this fragment -->
</cac:LegalMonetaryTotal>Seul le cbc:LineExtensionAmount contenu dans cac:LegalMonetaryTotal diffère ; les lignes sont identiques. Le document en échec signale aussi BR-CO-13, car le total hors TVA de 68.50 a été calculé à partir d'un total des lignes de 66.00 et ne concorde plus avec les 67.00 envoyés. Corriger le total des lignes lève les deux constats.
Ce que le validateur a signalé
- La facture en erreur signale 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 aussi bien aux documents UBL
Invoicequ'auxCreditNote. Dans un avoir, les lignes sont descac:CreditNoteLine; le total porte le même nom et les deux mêmes constats apparaissent. - La règle ne vérifie pas comment un montant net de ligne a été calculé à partir de la quantité, du prix et des remises de ligne. C'est un contrôle Peppol distinct sur chaque ligne.
- La règle ne compare que les nombres. Elle ne lit pas
currencyIDet ne convertit rien.
Règles liées
- BR-CO-13 calcule le total hors TVA à partir de ce total des lignes
- PEPPOL-EN16931-R120 vérifie chaque montant net de ligne par rapport à sa quantité, à son prix, à ses remises et à ses frais
- BR-DEC-23 limite chaque montant net de ligne à deux décimales
- 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-20.
La définition officielle de BR-CO-10 (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.

