Sur cette page
La réponse courte
BR-47 échoue pour chaque cac:TaxSubtotal dont le cac:TaxCategory n'a pas de cbc:ID, ou dont la catégorie de taxe ne relève pas du schéma fiscal VAT. Ajoutez cbc:ID comme premier enfant de cac:TaxCategory, avec la catégorie des lignes, remises et frais que la ventilation totalise : S dans l'exemple enregistré.
Une ventilation sans code ne correspond à aucune catégorie : la règle de catégorie des lignes qu'elle devrait couvrir se déclenche donc aussi ; ici, c'est BR-S-01.
Ce que la règle vérifie
La règle s'exécute sur chaque cac:TaxSubtotal d'un cac:TaxTotal. Elle est satisfaite lorsque la ventilation a un cac:TaxCategory dont le cac:TaxScheme/cbc:ID vaut VAT et que cette catégorie contient un élément cbc:ID.
Le schéma fiscal est débarrassé de ses espaces et mis en majuscules avant la comparaison : vat a donc été accepté lors d'un essai. Un autre schéma ne l'est pas : une ventilation relevant de GST a signalé cette règle, BR-48 et BR-CO-17, car sa catégorie et son taux n'étaient plus du tout lus comme de la TVA.
Seule la présence de l'élément est testée. Un cbc:ID vide satisfait cette règle, mais lors d'un essai il a été signalé par BR-CL-17 comme code non valide, par PEPPOL-EN16931-R008 comme élément vide, et par BR-S-01.
Omettre tout le cac:TaxCategory n'atteint pas cette règle. UBL en exige un dans chaque ventilation, et lors d'un essai le document a échoué à l'étape XSD à la place.
| Terme | Signification | Élément UBL |
|---|---|---|
| BG-23 | Ventilation de la TVA | cac:TaxTotal/cac:TaxSubtotal |
| BT-118 | Code de catégorie de TVA | cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID |
| - | Schéma fiscal de la catégorie de TVA | cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cac:TaxScheme/cbc:ID |
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 récapitulatif de TVA n'est indexé que par taux : l'export connaît donc 20% mais pas la catégorie à laquelle ce taux appartient.
- La catégorie provient d'une table de correspondance des codes fiscaux internes, et un code sans correspondance est écrit comme une valeur vide au lieu d'arrêter l'export.
- Le schéma fiscal est renseigné à partir d'un type de taxe générique comme
GSTouTAXau lieu de la valeur fixeVAT. - Le sérialiseur écrit
cac:TaxCategoryavec seulementcbc:Percentetcac:TaxScheme, selon une structure prévue pour un autre format.
Comment corriger le document
- Pour chaque ventilation, trouvez la catégorie de TVA des éléments qu'elle totalise : le
cac:ClassifiedTaxCategory/cbc:IDde ses lignes et lecac:TaxCategory/cbc:IDde ses remises et frais au niveau du document. - Écrivez ce code en tant que
cbc:ID, premier enfant ducac:TaxCategoryde la ventilation, avantcbc:Percent. Utilisez l'un des codes autorisés :S,Z,E,AE,K,G,O,L,MouB. - Mettez
cac:TaxScheme/cbc:IDàVATdans la même catégorie de taxe. - Faites en sorte qu'un code fiscal sans correspondance arrête l'export, afin qu'aucune ventilation sans catégorie ne soit jamais envoyée.
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 : la ligne au taux normal est correcte, mais sa ventilation n'a pas de code de catégorie
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:Item>
<cbc:Name>Example service</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>Fragment de la facture corrigée : la ventilation est au taux normal, comme sa ligne
<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>La facture corrigée a <cbc:ID>S</cbc:ID> comme premier enfant du cac:TaxCategory de la ventilation ; la facture en échec ne l'a pas, et rien d'autre ne diffère. Le document en échec signale aussi BR-S-01, car sa ligne est au taux normal et, sans le code, aucune ventilation n'indique S. Ajouter le code fait disparaître les deux constats. Les règles de calcul restent silencieuses : le taux et les montants sont toujours présents, et les contrôles du taux normal ne s'exécutent que sur une ventilation codée S.
Ce que le validateur a signalé
- La facture en erreur signale BR-47 et BR-S-01. 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 à
Invoiceet àCreditNoteen UBL. Lors d'un essai, un avoir dont le code avait été retiré de la ventilation a signalé les deux mêmes règles. - Signalé par l'étape EN 16931 ; l'étape Peppol accepte l'exemple enregistré.
- La règle qui l'accompagne suit la catégorie des lignes. Lors d'un essai, avec le
Eretiré d'une ventilation exonérée, les constats ont été cette règle etBR-E-01. - L'équivalent au niveau de la ligne est
BR-CO-04. Une fois qu'un code de ventilation est présent,BR-CL-17vérifie qu'il fait partie des codes autorisés.
Règles liées
- BR-S-01 exige une ventilation codée S pour les lignes au taux normal et est signalé avec cette règle
- BR-CL-17 vérifie que le code de catégorie de la ventilation fait partie des codes autorisés
- BR-CO-04 est la même exigence pour la catégorie de TVA de chaque ligne
- BR-48 exige le taux à côté du code de catégorie dans la même catégorie de taxe
- 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-24.
La définition officielle de BR-47 (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.

