Sur cette page
La réponse courte
BR-S-01 échoue lorsque le document utilise la catégorie de TVA S sur une ligne, une remise au niveau du document ou des frais au niveau du document, mais que cac:TaxTotal n'a aucun cac:TaxSubtotal dont le cac:TaxCategory/cbc:ID vaut S. Ajoutez une ventilation au taux normal, une par taux normal utilisé, avec la base imposable et le montant de taxe pour ce taux.
La règle échoue aussi dans l'autre sens : une ventilation au taux normal dans un document où rien n'est au taux normal.
Ce que la règle vérifie
La règle compte la catégorie S à deux endroits. Le premier est chaque cac:ClassifiedTaxCategory et chaque cac:AllowanceCharge/cac:TaxCategory n'importe où dans le document. Le second est cac:TaxCategory dans cac:TaxTotal/cac:TaxSubtotal sous la racine du document. Soit les deux comptes sont supérieurs à zéro, soit les deux sont nuls ; tout autre cas échoue.
Il s'agit uniquement d'un contrôle de présence. Il demande au moins une ventilation au taux normal, donc plusieurs ventilations à différents taux normaux le satisfont, et il ne regarde ni les taux ni les montants. Ceux-ci relèvent de BR-S-08 et BR-S-09.
Dans le cas inverse, une facture dont la seule ligne est au taux zéro mais dont la ventilation indique S signale BR-S-01 avec BR-S-08 et BR-Z-01.
| 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 |
| BT-151 | Code de catégorie de TVA de l'article facturé | cac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID |
| BT-95 | Code de catégorie de TVA de la remise au niveau du document | cac:AllowanceCharge[cbc:ChargeIndicator = false]/cac:TaxCategory/cbc:ID |
| BT-102 | Code de catégorie de TVA des charges ou frais au niveau du document | cac:AllowanceCharge[cbc:ChargeIndicator = true]/cac:TaxCategory/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 :
- La ventilation est construite à partir des seules lignes, et le seul élément au taux normal du document consiste en frais au niveau du document, comme des frais de transport.
- Les ventilations dont le montant de taxe ou la base imposable est nul sont filtrées avant l'écriture du XML.
- La ventilation est copiée d'un récapitulatif fiscal qui utilise des codes de taxe internes, et la correspondance vers
Smanque pour l'un d'eux. - Une ligne est marquée
Spar défaut dans le mapping des articles alors que le récapitulatif fiscal la traite à juste titre dans une autre catégorie, si bien que les deux divergent. - Une ventilation au taux normal subsiste d'un modèle alors que le document n'a aucun contenu au taux normal.
Comment corriger le document
- Repérez chaque élément au taux normal : les lignes via
cac:Item/cac:ClassifiedTaxCategory/cbc:ID, et les élémentscac:AllowanceChargeà la racine viacac:TaxCategory/cbc:ID. - Déterminez quel côté est faux. Si les éléments sont vraiment au taux normal, c'est la ventilation qui manque. S'ils ne le sont pas, corrigez la catégorie là où elle est attribuée dans les données source ; ne changez pas l'étiquette des éléments uniquement pour qu'ils correspondent à la ventilation qui se trouve là.
- Pour chaque taux normal, ajoutez un
cac:TaxSubtotalaveccbc:TaxableAmountégal aux lignes plus les frais moins les remises à ce taux,cbc:TaxAmountégal à base imposable x taux / 100 arrondi à deux décimales, et unecac:TaxCategoryaveccbc:IDégal àS, lecbc:Percentet le schéma fiscalVAT. - Vérifiez que
cac:TaxTotal/cbc:TaxAmountest égal à la somme de tous les montants de taxe des ventilations, y compris celle que vous venez d'ajouter.
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 : une ligne au taux normal, mais la seule ventilation de la TVA est au taux zéro
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">11.70</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>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<!-- note, quantity and other line details omitted from this fragment -->
<cbc:LineExtensionAmount currencyID="GBP">58.00</cbc:LineExtensionAmount>
<cac:Item>
<!-- description, name and item identifiers omitted from this fragment -->
<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>
<!-- price omitted from this fragment -->
</cac:InvoiceLine>Fragment de la facture corrigée : la ventilation au taux normal est présente à côté de celle au taux zéro
<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>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</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>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>La facture corrigée comporte le cac:TaxSubtotal complet au taux normal (58.50 de base imposable, 11.70 de taxe, S à 20) qui manque à la facture en échec ; rien d'autre ne diffère. Le document en échec signale aussi BR-CO-14, car son total de TVA reste 11.70 alors que la seule ventilation restante totalise 0.00. Rétablir la ventilation lève les deux. Outre la ligne 1 montrée ici, la facture a une seconde ligne au taux normal, une remise au niveau du document au taux normal et des frais au niveau du document au taux normal.
Ce que le validateur a signalé
- La facture en erreur signale BR-CO-14 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 aux documents UBL
InvoiceetCreditNote; la règle est évaluée à la racine de l'un comme de l'autre. Un avoir dont la ventilation au taux normal est retirée signale les deux mêmes règles. BR-CO-14est un effet secondaire de l'exemple enregistré, et non une partie de cette règle. Avec le total de TVA et les totaux du document réduits pour correspondre à la ventilation manquante, le document signaleBR-S-01seul.- Les autres catégories de TVA ont leurs propres règles de ce type.
BR-Z-01est celle du taux zéro et elle est plus stricte : elle demande exactement une ventilation.
Règles liées
- BR-S-08 contrôle la base imposable de la ventilation au taux normal une fois qu'elle existe
- BR-S-09 contrôle le montant de taxe de la ventilation au taux normal
- BR-CO-14 compare le total de TVA à la somme des montants de taxe des ventilations
- BR-Z-01 est l'exigence correspondante pour le contenu au taux zéro
- 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-S-01 (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.

