Sur cette page
La réponse courte
PEPPOL-EN16931-R053 échoue lorsque le nombre d'éléments cac:TaxTotal de niveau racine contenant un cac:TaxSubtotal est différent de un. Placez chaque ventilation de la TVA, un cac:TaxSubtotal par catégorie et taux, dans un seul cac:TaxTotal dont le cbc:TaxAmount est la somme de leurs montants de taxe.
Zéro échoue aussi. Un document sans aucune ventilation de la TVA signale cette règle à côté des règles EN 16931 relatives à la ventilation manquante.
Ce que la règle vérifie
La règle s'exécute une fois sur la racine et compte les enfants cac:TaxTotal qui contiennent au moins un cac:TaxSubtotal. Elle ne passe que si ce nombre est exactement un.
Un cac:TaxTotal sans ventilation n'est pas compté. Peppol en autorise un, et seulement lorsque cbc:TaxCurrencyCode est présent, pour le total de TVA en devise de comptabilisation ; c'est PEPPOL-EN16931-R054 qui l'impose.
Aucun montant n'est comparé. La répartition enregistrée garde des chiffres justes, 11.70 et 0.00 donnant ensemble l'ancien total de TVA, et elle est pourtant rejetée sur le nombre.
Lors d'un essai, un document sans cac:TaxTotal a signalé cette règle avec BR-CO-15, BR-CO-18 et BR-S-01. Un document dont le seul total de taxe avait perdu sa ventilation l'a signalée avec BR-CO-18, BR-S-01 et PEPPOL-EN16931-R054.
| Terme | Signification | Élément UBL |
|---|---|---|
| BG-23 | Ventilation de la TVA | cac:TaxTotal/cac:TaxSubtotal |
| BT-110 | Montant total de la TVA de la facture | cac:TaxTotal/cbc:TaxAmount |
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 mapping émet un
cac:TaxTotalpar taux de TVA, à l'image d'une table source qui contient une ligne de taxe par taux. - Une boucle sur les catégories de taxe ouvre et ferme le total de taxe à l'intérieur de la boucle au lieu d'une seule fois autour d'elle.
- La TVA dans une seconde devise est envoyée sous forme de copie complète de la ventilation, ce qui crée un second total de taxe avec ventilation.
Comment corriger le document
- Ouvrez un seul
cac:TaxTotaldirectement sous la racine, après les éventuelscac:AllowanceChargeau niveau du document et avantcac:LegalMonetaryTotal. - À l'intérieur, écrivez un
cac:TaxSubtotalpour chaque combinaison de catégorie et de taux de TVA utilisée dans le document. - Donnez à son
cbc:TaxAmountla somme des montants de taxe de la ventilation, arrondie à deux décimales, dans la devise du document. - Si la TVA doit aussi être indiquée dans une devise de comptabilisation, ajoutez
cbc:TaxCurrencyCodeet un secondcac:TaxTotalne contenant qu'uncbc:TaxAmountdans cette devise. Il ne porte aucune ventilation et n'est donc pas compté ici.
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 ventilations au taux normal et au taux zéro sont dans deux totaux de taxe séparés
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">58.50</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<!-- tax scheme omitted from this fragment -->
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">10.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>Z</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<!-- tax scheme omitted from this fragment -->
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>Fragment de la facture corrigée : un seul total de taxe de 11.70 contenant les deux ventilations
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">58.50</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<!-- tax scheme omitted from this fragment -->
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">10.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>Z</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<!-- tax scheme omitted from this fragment -->
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>La facture en échec ferme le total de taxe après la ventilation au taux normal et en ouvre un second, avec son propre total de TVA de 0.00, pour la ventilation au taux zéro ; la facture corrigée garde les deux ventilations dans un seul total de taxe de 11.70. Chaque total de taxe concorde toujours avec sa propre ventilation : BR-CO-14 passe donc. Le document en échec signale aussi BR-CO-15 depuis l'étape EN 16931. Cette règle attend exactement un total de TVA dans la devise du document à ajouter au total hors TVA, en trouve deux, 11.70 et 0.00, et échoue sur le nombre, alors que 68.50 + 11.70 + 0.00 donne toujours le total TVA comprise de 80.20. Fusionner les totaux de taxe lève les deux constats.
Ce que le validateur a signalé
- La facture en erreur signale BR-CO-15 et PEPPOL-EN16931-R053. 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. Lors d'un essai, un avoir réparti de la même façon a signalé les deux mêmes règles. - C'est une règle Peppol BIS, et l'étape EN 16931 ne compte pas les totaux de taxe en tant que tels. Une ventilation répartie échoue pourtant aux deux étapes, car
BR-CO-15réagit au second total de TVA dans la devise du document. - Un second total de taxe qui reprend la ventilation dans une devise de comptabilisation est compté lui aussi. Lors d'un essai, une copie en EUR de la ventilation au taux normal a signalé, entre autres constats, cette règle,
PEPPOL-EN16931-R051sur chacun de ses montants etPEPPOL-EN16931-R054. La devise de comptabilisation ne prend qu'un seulcbc:TaxAmount, sans ventilation.
Règles liées
- BR-CO-15 échoue à côté de cette règle, car elle exige un seul total de TVA dans la devise du document
- PEPPOL-EN16931-R054 est la règle compagne pour le total de taxe sans ventilation
- BR-CO-14 vérifie que le total de TVA est égal à la somme de sa ventilation
- BR-CO-18 exige au moins une ventilation de la TVA, le cas où cette règle compte zéro
- Parcourir toutes les règles de la référence
- Contexte (en anglais) : How Peppol invoice validation actually works
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 PEPPOL-EN16931-R053 (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.

