Aller au contenu

Ironfang Finance - Référence des règles

BR-CO-15 : Corriger un total TVA comprise qui n'est pas le total hors TVA plus le total de la TVA

Le total TVA comprise doit être égal au total hors TVA plus le total de la TVA dans la devise du document, arrondi à deux décimales.

EN 16931Erreur : le document n'est pas valideTotauxTVA

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.

TermeSignificationÉlément UBL
BT-112Montant total de la facture TVA comprisecac:LegalMonetaryTotal/cbc:TaxInclusiveAmount
BT-109Montant total de la facture hors TVAcac:LegalMonetaryTotal/cbc:TaxExclusiveAmount
BT-110Montant total de la TVA de la facturecac:TaxTotal/cbc:TaxAmount
BT-5Code de devise de la facturecbc: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 currencyID du total de la TVA n'est pas le même code que cbc:DocumentCurrencyCode : aucun total de TVA n'est donc trouvé.
  • Le cac:TaxTotal est absent, ou le total de taxe dans la devise du document est émis deux fois.

Comment corriger le document

  1. 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).
  2. Vérifiez qu'exactement un cac:TaxTotal/cbc:TaxAmount porte la devise du document dans currencyID.
  3. Additionnez le total hors TVA et ce total de TVA en arithmétique décimale et arrondissez à deux décimales.
  4. Écrivez le résultat dans cac:LegalMonetaryTotal/cbc:TaxInclusiveAmount, puis recalculez à partir de lui le montant à payer. BR-CO-16 le 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é

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 Invoice qu'aux CreditNote ; un avoir comportant la même erreur signale les deux mêmes constats.
  • Un document sans aucun cac:TaxTotal signale cette règle avec BR-CO-18 et 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 le currencyID n'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:TaxTotal supplémentaire dans cette devise ne perturbe pas cette règle.

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.