Sur cette page
La réponse courte
BR-CO-17 échoue lorsque le cbc:TaxAmount d'un cac:TaxSubtotal ne concorde pas avec le cbc:TaxableAmount de ce même bloc multiplié par son cac:TaxCategory/cbc:Percent. La valeur correcte est base imposable x taux / 100, arrondie à deux décimales. Recalculez-la, puis reportez la valeur corrigée dans le total de la TVA et dans les totaux qui en dépendent.
La règle s'exécute sur chaque ventilation de la TVA, quelle que soit sa catégorie. Sur une ventilation au taux normal, le même calcul est vérifié à nouveau par BR-S-09 : les deux sont donc normalement signalées ensemble.
Ce que la règle vérifie
Pour une ventilation dont le taux n'est pas nul, la règle calcule base imposable x taux / 100, arrondit à deux décimales et compare le résultat au montant de taxe. La comparaison n'est pas exacte : elle passe lorsque les deux diffèrent de moins de 1.00 et échoue lorsque l'écart est exactement de 1.00 ou plus. Sur 25.00 à 20 %, où le montant calculé est 5.00, des montants de taxe de 4.01 et 5.99 passent, tandis que 4.00 et 6.00 échouent.
Respecter cette tolérance ne rend pas la valeur juste. Une ventilation de 5.90 sur 25.00 à 20 % est validée lorsque les totaux la suivent, et la facture déclare pourtant 0.90 de TVA en trop. Considérez la tolérance comme une marge du contrôle, et non comme une marge d'arrondi dont vous pouvez vous servir.
Lorsque le taux est 0, ou que la ventilation n'a pas du tout de cbc:Percent, le montant de taxe doit seulement s'arrondir à zéro en nombre entier : 0.40 passe cette règle et 0.50 non. Les règles de catégorie sont plus strictes ; une ventilation au taux zéro avec 0.40 de taxe est tout de même rejetée par BR-Z-09.
Les deux montants sont comparés en valeur absolue : la règle ne tient donc pas compte du signe. Un montant de taxe de -5.00 sur une base imposable de 25.00 la passe.
Seules les trois valeurs de la ventilation sont lues. Savoir si le total de la TVA du document concorde avec les ventilations est un contrôle distinct, BR-CO-14.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-117 | Montant de la TVA de la catégorie | cac:TaxTotal/cac:TaxSubtotal/cbc:TaxAmount |
| BT-116 | Base imposable de la catégorie de TVA | cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount |
| BT-119 | Taux de la catégorie de TVA | cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:Percent |
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 :
- La TVA est calculée ligne par ligne et les résultats des lignes sont additionnés dans la ventilation, qui s'écarte ainsi de base imposable x taux. Quelques centimes d'écart restent dans la tolérance ; un écart plus grand signifie généralement qu'une ligne a été taxée à un autre taux que celui que déclare la ventilation.
- Le montant de taxe provient d'une écriture comptable, tandis que la base imposable et le taux sont reconstruits à partir des lignes, et les deux ont été produits à des moments différents ou à partir de données différentes.
- Le taux est écrit sous forme de fraction,
0.2au lieu de20, si bien que le montant calculé vaut un centième de ce qui était prévu. - La base imposable a été modifiée par une remise ou des frais au niveau du document, et le montant de taxe n'a pas été recalculé.
- Un montant brut, ou la taxe d'une autre catégorie, est mappé dans
cbc:TaxAmount.
Comment corriger le document
- Pour chaque
cac:TaxSubtotal, prenezcbc:TaxableAmountetcac:TaxCategory/cbc:Percenttels qu'ils sont envoyés. - Calculez base imposable x taux / 100 en arithmétique décimale et arrondissez le résultat à deux décimales. Écrivez-le dans le
cbc:TaxAmountdu bloc. - Si la valeur calculée ne concorde pas avec ce que contient votre comptabilité, déterminez avant l'envoi lequel est faux, de la base imposable, du taux ou de la taxe comptabilisée. N'ajustez pas le montant petit à petit jusqu'à ce qu'il entre dans la tolérance.
- Donnez à
cac:TaxTotal/cbc:TaxAmountla somme des montants de taxe de la ventilation (BR-CO-14), puis recalculezcbc:TaxInclusiveAmount(BR-CO-15) etcbc:PayableAmount(BR-CO-16).
L'exemple enregistré comporte une seule ventilation : 25.00 imposables à 20 %.
Taxe calculée : 25.00 x 20 / 100 = 5.00 Montant de taxe envoyé : 6.50 Écart : 1.50, qui n'est pas inférieur à 1.00, donc la règle échoue Corrigé : montant de taxe 5.00, total de la TVA 5.00, total TVA comprise 25.00 + 5.00 = 30.00
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 : 6.50 de TVA sur 25.00 à 20 %, avec des totaux construits sur la valeur erronée
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">6.50</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">6.50</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">25.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="GBP">31.50</cbc:TaxInclusiveAmount>
<!-- allowance, charge, prepaid and rounding totals (all 0.00) omitted from this fragment -->
<cbc:PayableAmount currencyID="GBP">31.50</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Fragment de la facture corrigée : la ventilation vaut 5.00 et les totaux suivent
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<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>
<!-- allowance, charge, prepaid and rounding totals (all 0.00) omitted from this fragment -->
<cbc:PayableAmount currencyID="GBP">30.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Quatre valeurs diffèrent : le cbc:TaxAmount de la ventilation et le cac:TaxTotal/cbc:TaxAmount du document passent de 6.50 à 5.00, et cbc:TaxInclusiveAmount et cbc:PayableAmount passent de 31.50 à 30.00. Le document en échec signale aussi BR-S-09, car la ventilation est au taux normal et cette règle refait le calcul pour la catégorie. Aucune règle de totaux ne se déclenche, car les totaux du document en échec ont été construits de manière cohérente sur les 6.50 erronés. Si seule la ventilation avait été fausse, BR-CO-14 aurait aussi été signalée.
Ce que le validateur a signalé
- La facture en erreur signale BR-CO-17 et BR-S-09. 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 avec les mêmes 6.50 sur 25.00 à 20 % signale les deux mêmes règles. - Chaque
cac:TaxSubtotald'uncac:TaxTotalest vérifié, quelle que soit la catégorie de TVA. Les équivalents propres à chaque catégorie, commeBR-S-09pour le taux normal etBR-Z-09pour le taux zéro, s'exécutent en plus. - Les montants sont comparés dans la devise dans laquelle ils sont écrits. La règle ne convertit pas les devises.
- Une ventilation qui passe cette règle peut encore avoir une base imposable fausse. Pour les ventilations au taux normal,
BR-S-08la vérifie par rapport aux lignes, aux remises et aux frais.
Règles liées
- BR-S-09 refait ce calcul pour les ventilations au taux normal et se déclenche en même temps
- BR-CO-14 vérifie que le total de la TVA du document est la somme des montants de taxe de la ventilation
- BR-CO-15 vérifie le total TVA comprise une fois le total de la TVA corrigé
- BR-S-08 vérifie la base imposable au taux normal dont part ce calcul
- 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-17 (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.

