Sur cette page
La réponse courte
BR-CO-15 échoue lorsque cac:LegalMonetaryTotal/cbc:TaxInclusiveAmount n'est pas égal à cbc:TaxExclusiveAmount plus le total de la TVA. Le total de la TVA est le cbc:TaxAmount placé directement sous cac:TaxTotal dont le currencyID correspond à cbc:DocumentCurrencyCode. Additionnez les deux, arrondissez à deux décimales et écrivez le résultat comme total TVA comprise.
Elle échoue aussi lorsque ce total de TVA ne peut pas être identifié : le document doit contenir exactement un cac:TaxTotal/cbc:TaxAmount dans la devise du document.
Ce que la règle vérifie
La règle s'exécute une fois sur la racine du document. Elle compte d'abord les éléments cbc:TaxAmount placés directement sous un cac:TaxTotal de niveau racine dont le currencyID est égal à cbc:DocumentCurrencyCode. Il doit y en avoir exactement un. Aucun, ou deux, font échouer la règle, quoi que disent les totaux.
Elle ajoute ensuite ce montant à cbc:TaxExclusiveAmount, arrondit à deux décimales et compare le résultat exactement à cbc:TaxInclusiveAmount. Un total TVA comprise de 80.21 alors que la somme donne 80.20 échoue.
Un second cac:TaxTotal dans la devise de comptabilisation de la TVA est ignoré, car son currencyID n'est pas la devise du document.
Les montants payés d'avance et les montants d'arrondi ne font pas partie de ce total. Ils interviennent ensuite, entre le total TVA comprise et le montant à payer.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-112 | Montant total de la facture TVA comprise | cac:LegalMonetaryTotal/cbc:TaxInclusiveAmount |
| BT-109 | Montant total de la facture hors TVA | cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount |
| BT-110 | Montant total de la TVA de la facture | cac:TaxTotal/cbc:TaxAmount |
| BT-5 | Code de devise de la facture | cbc:DocumentCurrencyCode |
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 TVA comprise est copié depuis le système source, où la TVA a été arrondie autrement que le total de la TVA écrit dans le XML.
- L'une des deux données d'entrée a été corrigée lors du mapping, par exemple le total de la TVA recalculé à partir de la ventilation, et le total TVA comprise est resté tel quel.
- Le total TVA comprise est envoyé déduction faite d'un acompte, ou avec un arrondi de caisse déjà appliqué, ce qui relève plutôt du montant à payer.
- Le
currencyIDdu total de la TVA n'est pas le même code quecbc:DocumentCurrencyCode: aucun total de TVA n'est donc trouvé. - Le
cac:TaxTotalest absent, ou le total de taxe dans la devise du document est émis deux fois.
Comment corriger le document
- Assurez-vous que les données d'entrée sont définitives : le total hors TVA (
BR-CO-13) et le total de la TVA (BR-CO-14). - Vérifiez qu'exactement un
cac:TaxTotal/cbc:TaxAmountporte la devise du document danscurrencyID. - Additionnez le total hors TVA et ce total de TVA en arithmétique décimale et arrondissez à deux décimales.
- Écrivez le résultat dans
cac:LegalMonetaryTotal/cbc:TaxInclusiveAmount, puis recalculez à partir de lui le montant à payer.BR-CO-16le vérifie ensuite.
L'exemple enregistré comporte un total hors TVA de 68.50, un total de TVA de 11.70, 10.00 payés d'avance et un montant d'arrondi de -0.20.
Total TVA comprise attendu : 68.50 + 11.70 = 80.20 Total TVA comprise envoyé (BT-112) : 80.25, donc BR-CO-15 échoue Montant à payer envoyé : 70.00, soit 80.20 - 10.00 + (-0.20) Face aux 80.25 envoyés, BR-CO-16 attend 80.25 - 10.00 + (-0.20) = 70.05, 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 : 68.50 + 11.70 donne 80.20, mais le total TVA comprise indique 80.25
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
<!-- both VAT breakdowns omitted from this fragment -->
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">66.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">68.50</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="GBP">80.25</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="GBP">1.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="GBP">3.50</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="GBP">10.00</cbc:PrepaidAmount>
<cbc:PayableRoundingAmount currencyID="GBP">-0.20</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="GBP">70.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Fragment de la facture corrigée : le total TVA comprise est le total hors TVA plus le total de la TVA
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">66.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">68.50</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="GBP">80.20</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="GBP">1.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="GBP">3.50</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="GBP">10.00</cbc:PrepaidAmount>
<cbc:PayableRoundingAmount currencyID="GBP">-0.20</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="GBP">70.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Seul cbc:TaxInclusiveAmount diffère : 80.25 dans le document en échec, 80.20 dans le document corrigé. Le document en échec signale aussi BR-CO-16, car le montant à payer de 70.00 a été calculé à partir de 80.20 et ne découle pas des 80.25 envoyés. Corriger le total TVA comprise lève les deux constats.
Ce que le validateur a signalé
- La facture en erreur signale BR-CO-15 et BR-CO-16. 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; un avoir comportant la même erreur signale les deux mêmes constats. - Un document sans aucun
cac:TaxTotalsignale cette règle avecBR-CO-18et d'autres règles portant sur la ventilation de la TVA manquante. Deux totaux de taxe dans la devise du document, ou un total de TVA dont lecurrencyIDn'est pas la devise du document, signalent chacun cette règle à côté d'un constat Peppol qui leur est propre. - Lorsqu'une devise de comptabilisation de la TVA est utilisée, le
cac:TaxTotalsupplémentaire dans cette devise ne perturbe pas cette règle.
Règles liées
- BR-CO-13 vérifie le total hors TVA dont part cette somme
- BR-CO-14 vérifie le total de la TVA par rapport à la ventilation de la TVA
- BR-CO-16 déduit le montant à payer du total TVA comprise
- 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-15 (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.

