Sur cette page
La réponse courte
BR-O-01 échoue lorsque la catégorie O est utilisée quelque part dans le document et que cac:TaxTotal ne contient pas exactement un cac:TaxSubtotal dont la cac:TaxCategory/cbc:ID vaut O. Dans l'exemple enregistré, la ventilation non soumise à la TVA de 25.00 a été écrite deux fois. Gardez une seule ventilation O qui couvre chaque ligne, remise et frais en O.
N'avoir aucune TVA à déclarer ne dispense pas de la ventilation. Une facture dont toutes les lignes sont hors du champ de la TVA a quand même besoin de son unique entrée O, avec un montant de TVA de 0.00 et un motif d'exonération, par exemple le code VATEX-EU-O.
Ce que la règle vérifie
Le déclencheur est tout cbc:ID égal à O sous le schéma VAT, dans la cac:ClassifiedTaxCategory d'une ligne ou dans n'importe quelle cac:TaxCategory, y compris celle de la ventilation elle-même. Le comptage qui suit ne regarde que cac:TaxTotal/cac:TaxSubtotal sous la racine du document, et le résultat doit valoir exactement 1.
Une ventilation absente échoue autant qu'une ventilation répétée. Lors d'un essai, supprimer l'unique ventilation O de la facture corrigée a signalé cette règle avec BR-CO-18, PEPPOL-EN16931-R053 et PEPPOL-EN16931-R054, car le document n'avait alors plus aucune ventilation de la TVA.
Une remise ou des frais suffisent à la déclencher. Lors d'un essai, une remise au niveau du document de 5.00 en catégorie O sur une facture au taux normal sans ventilation O a signalé cette règle, à côté de BR-O-03 pour l'identifiant TVA du vendeur que porte cette facture ; des frais de 4.00 en O ont fait de même avec BR-O-04.
Les montants ne jouent ici aucun rôle. Le doublon enregistré répète les 25.00 complets, ce qui satisfait deux fois BR-O-08 ; lors d'un essai avec une ventilation O par ligne, 25.00 et 10.00 pour deux lignes O, BR-O-08 a en plus échoué sur chacune des deux.
Le cas inverse passe. Une ventilation O de 0.00 sur une facture au taux normal sans contenu O passe cette règle, car la ventilation compte elle-même comme contenu O ; lors d'un essai, cette facture a été rejetée par BR-O-11 et BR-O-12 à 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 |
| BT-151 | Code de catégorie de TVA de l'article facturé | cac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID (cac:CreditNoteLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID in a credit note) |
| 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 :
- Les ventilations ne sont générées que lorsqu'il y a de la TVA à déclarer, si bien qu'un document entièrement hors du champ de la TVA part avec un total de taxe vide.
- Le récapitulatif fiscal est ajouté deux fois, par exemple une fois par la boucle des lignes et une fois par une étape de totaux, et les deux copies indiquent
O. - Une ventilation est écrite par ligne ou par code de taxe interne, et plusieurs codes, comme "hors champ" et "hors activité économique", correspondent tous à
O. - Une remise ou des frais au niveau du document sont placés en
Oalors que les lignes utilisent une autre catégorie, si bien qu'aucune ventilationOn'a jamais été prévue.
Comment corriger le document
- Dressez la liste de ce que le document place en
O, en lisant lacac:Item/cac:ClassifiedTaxCategory/cbc:IDde chaque ligne et lacac:TaxCategory/cbc:IDde chaquecac:AllowanceChargeplacé directement sous la racine ; dans l'exemple enregistré, c'est l'unique ligne de 25.00. - Écrivez pour eux un
cac:TaxSubtotal: le contenu net enOcommecbc:TaxableAmount,0.00commecbc:TaxAmount, et unecac:TaxCategoryaveccbc:IDO, le code de motifVATEX-EU-Oou le texte du motif, sanscbc:Percent, et le schémaVAT. - Si le générateur a produit plusieurs ventilations
O, fusionnez-les en celle-ci et supprimez les autres. Dans l'exemple enregistré, la seconde copie disparaît tout simplement. - Laissez
cac:TaxTotal/cbc:TaxAmountà0.00, puisqu'une ventilationOn'y ajoute aucune TVA.
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 : deux ventilations O identiques pour l'unique ligne O de 25.00
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>O</cbc:ID>
<cbc:TaxExemptionReasonCode>VATEX-EU-O</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Not subject to VAT</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>O</cbc:ID>
<!-- the same reason code and text omitted from this fragment -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<!-- line 1, 25.00 in category O, omitted from this fragment -->Fragment de la facture corrigée : une seule ventilation O
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>O</cbc:ID>
<cbc:TaxExemptionReasonCode>VATEX-EU-O</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Not subject to VAT</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>La facture en échec répète tout le cac:TaxSubtotal O, base imposable 25.00 et TVA 0.00, si bien que son cac:TaxTotal contient deux entrées identiques pour l'unique ligne ; la facture corrigée en garde une. Le document en échec ne signale que BR-O-01 : le total de TVA de 0.00 égale toujours la somme des ventilations, et chaque copie concorde à elle seule avec la ligne de 25.00.
Ce que le validateur a signalé
- La facture en erreur signale BR-O-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, avec un constat à la racine du document. Réécrite en avoir, la facture en échec a signalé le même constat unique lors d'un essai. - Seul le schéma
VATcompte, dans les catégories comme dans la ventilation. Les autres catégories ont chacune une règle de ce type, commeBR-Z-01etBR-E-01, tandis queBR-S-01admet plusieurs ventilations au taux normal parce que les taux normaux diffèrent. - L'unique ventilation
Odoit encore être juste dans le détail :BR-O-08contrôle sa base imposable,BR-O-09son montant de TVA etBR-O-10son motif.
Règles liées
- BR-O-08 contrôle la base imposable de l'unique ventilation O par rapport aux lignes, remises et frais en O
- BR-O-09 exige que le montant de TVA de cette ventilation soit nul
- BR-CO-18 est signalé à côté de cette règle lorsqu'une facture hors champ est envoyée sans aucune ventilation de la TVA
- BR-Z-01 est la version au taux zéro de la règle exigeant exactement une ventilation
- 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-28.1 : source vérifiée le 2026-09-28, explication mise à jour le 2026-09-28.
La définition officielle de BR-O-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.

