Sur cette page
La réponse courte
PEPPOL-EN16931-R054 compte les éléments cac:TaxTotal placés directement sous la racine qui ne contiennent aucun cac:TaxSubtotal. Si cbc:TaxCurrencyCode est présent, il doit y en avoir exactement un, portant le total de TVA dans la devise de comptabilisation ; sans ce code, il ne doit y en avoir aucun. Dans l'exemple enregistré, un total de taxe en EUR est présent, mais pas le code qui déclare EUR comme devise de comptabilisation : ajoutez donc cbc:TaxCurrencyCode ou supprimez le total en trop.
Laquelle des deux options est la bonne relève d'un fait commercial, que le validateur ne peut pas trancher. Ne gardez le second total que si le vendeur comptabilise réellement la TVA dans cette devise.
Ce que la règle vérifie
La règle s'exécute une fois par document. Un total de taxe est compté lorsqu'il est un enfant direct de la racine et n'a aucun enfant cac:TaxSubtotal ; le total de taxe qui porte la ventilation de la TVA n'est jamais compté.
Le nombre attendu est 1 lorsque cbc:TaxCurrencyCode existe et 0 sinon. La devise du total compté n'est pas examinée ici : un total superflu dans la devise de la facture compte autant qu'un total dans la devise de comptabilisation. Lors d'un essai sans cbc:TaxCurrencyCode, un total GBP en double a été signalé par cette règle et par BR-CO-15.
Deux totaux sans ventilation échouent même s'ils sont tous deux dans la devise déclarée. Lors d'un essai, un total EUR dupliqué à côté d'un cbc:TaxCurrencyCode à EUR n'a signalé que cette règle.
Le total en devise de comptabilisation ne doit pas porter sa propre ventilation. Lors d'un essai, donner au total EUR un cac:TaxSubtotal n'a laissé aucun total sans ventilation : cette règle s'est donc déclenchée, accompagnée de PEPPOL-EN16931-R053 (deux totaux avec ventilation), de PEPPOL-EN16931-R051 (des montants en EUR là où la devise de la facture est exigée) et de BR-S-08.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-6 | Code de devise de comptabilisation de la TVA | cbc:TaxCurrencyCode |
| BT-111 | Montant total de la TVA de la facture dans la devise de comptabilisation | cac:TaxTotal/cbc:TaxAmount (in the tax total without cac:TaxSubtotal) |
| BG-23 | Ventilation de la TVA | cac:TaxTotal/cac:TaxSubtotal |
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 de TVA converti est écrit dès que l'enregistrement source en contient un, alors que
cbc:TaxCurrencyCodedépend d'un paramètre distinct qui est désactivé. - Le total de TVA est émis deux fois : une fois dans le total de taxe avec ventilation, et une seconde fois comme total de taxe nu dans la devise de la facture.
- La devise de comptabilisation est déclarée, mais le sérialiseur n'émet jamais qu'un seul
cac:TaxTotal: le montant converti n'apparaît donc jamais. - La TVA convertie est ventilée par catégorie comme le total principal, au lieu d'être envoyée comme un montant unique.
Comment corriger le document
- Établissez si le vendeur comptabilise la TVA dans une autre devise que celle de la facture.
- Si c'est le cas, écrivez ce code de devise dans
cbc:TaxCurrencyCode, juste aprèscbc:DocumentCurrencyCode, et gardez exactement uncac:TaxTotalsupplémentaire ne contenant quecbc:TaxAmount, avec ce code commecurrencyID. - Sinon, supprimez chaque
cac:TaxTotalqui n'a pas decac:TaxSubtotal. Le total de TVA dans la devise de la facture a sa place dans le total de taxe qui porte la ventilation. - Ne donnez pas de ventilation au total en devise de comptabilisation, et ne l'écrivez pas deux fois.
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 : un total de taxe en EUR sans ventilation, mais aucune devise de comptabilisation de la TVA déclarée
<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<cbc:BuyerReference>BUYER-REF-001</cbc:BuyerReference>
<!-- parties omitted from this fragment -->
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
<!-- VAT breakdown omitted from this fragment -->
</cac:TaxTotal>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">5.80</cbc:TaxAmount>
</cac:TaxTotal>Fragment de la facture corrigée : EUR est déclaré comme devise de comptabilisation de la TVA
<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<cbc:TaxCurrencyCode>EUR</cbc:TaxCurrencyCode>
<cbc:BuyerReference>BUYER-REF-001</cbc:BuyerReference>
<!-- parties omitted from this fragment -->
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
<!-- VAT breakdown omitted from this fragment -->
</cac:TaxTotal>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">5.80</cbc:TaxAmount>
</cac:TaxTotal>La facture corrigée ajoute <cbc:TaxCurrencyCode>EUR</cbc:TaxCurrencyCode> après la devise du document ; les deux totaux de taxe sont identiques dans les deux documents. Le document en échec ne signale que PEPPOL-EN16931-R054. Sans devise de comptabilisation déclarée, BR-53 et PEPPOL-EN16931-R055 n'ont rien à tester, et PEPPOL-EN16931-R051 exclut de son contrôle de devise les totaux de taxe sans ventilation : le montant EUR égaré n'est donc repéré que par cette règle. Supprimer le total EUR aurait aussi permis de passer.
Ce que le validateur a signalé
- La facture en erreur signale PEPPOL-EN16931-R054. 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 aux documents UBL
InvoiceetCreditNote. Lors d'un essai, un avoir avec un total de taxe en EUR et sanscbc:TaxCurrencyCoden'a signalé que cette règle. - Signalée par l'étape Peppol. À côté d'elle apparaissent
BR-53etPEPPOL-EN16931-R055lorsque la devise de comptabilisation est déclarée mais que son total manque, etPEPPOL-EN16931-R005lorsque la devise de comptabilisation déclarée est la devise de la facture elle-même. - Un document dont le seul
cac:TaxTotaln'a pas de ventilation signale cette règle avecBR-CO-18,PEPPOL-EN16931-R053et la règle de catégorie de ses lignes : ce total unique compte comme un total sans ventilation.
Règles liées
- BR-53 exige le total de TVA en devise de comptabilisation que cette règle compte
- PEPPOL-EN16931-R053 est le pendant pour le total de taxe qui porte la ventilation, qui doit figurer exactement une fois
- PEPPOL-EN16931-R005 rejette une devise de comptabilisation égale à la devise de la facture et entraîne cette règle avec elle
- PEPPOL-EN16931-R055 compare le signe des deux totaux de TVA dès que les deux sont présents
- 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-R054 (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.

