Sur cette page
La réponse courte
BR-O-03 échoue lorsqu'un cac:AllowanceCharge à la racine avec cbc:ChargeIndicator false a une cac:TaxCategory O et que le document porte aussi un identifiant TVA : un cbc:CompanyID dans un cac:PartyTaxScheme VAT du vendeur, de l'acheteur ou du représentant fiscal. Dans l'exemple enregistré, c'est l'identifiant GB987654321 de l'acheteur, à côté d'un Loyalty discount de 5.00. Retirez le cac:PartyTaxScheme VAT de chaque partie.
Le constat arrive normalement avec BR-O-02, car un document ayant une remise O a aussi des lignes O ; les deux règles contrôlent les mêmes identifiants à partir de points de départ différents, et retirer les identifiants lève les deux.
Ce que la règle vérifie
Le déclencheur se limite aux remises placées directement sous la racine du document dont la cac:TaxCategory est O sous le schéma VAT. Les remises et frais de ligne n'en relèvent pas, pas plus que les lignes elles-mêmes, que couvre BR-O-02.
Trois endroits sont examinés, chacun uniquement sous un cac:PartyTaxScheme dont le schéma est VAT : le vendeur, l'acheteur et cac:TaxRepresentativeParty. Lors d'essais sur la facture corrigée, l'identifiant GB123456789 du vendeur et un représentant fiscal avec GB987654321 ont chacun signalé cette règle avec BR-O-02.
Sans ligne O, la règle agit seule. Lors d'un essai, la même remise de 5.00 en catégorie O sur une facture au taux normal dont le vendeur a GB123456789 a signalé cette règle et BR-O-01, mais pas BR-O-02, puisqu'aucune ligne n'était en O.
Une immatriculation du vendeur sous le schéma TAX n'est pas un identifiant TVA pour cette règle : ajoutée à la facture corrigée sous la forme 1234567890, elle a laissé valide le document avec la remise lors d'un essai.
| Terme | Signification | Élément UBL |
|---|---|---|
| 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-31 | Identifiant à la TVA du vendeur | cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID |
| BT-48 | Identifiant à la TVA de l'acheteur | cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID |
| BT-63 | Identifiant à la TVA du représentant fiscal du vendeur | cac:TaxRepresentativeParty/cac:PartyTaxScheme/cbc:CompanyID |
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 fiche client fournit le numéro de TVA de l'acheteur à chaque document, y compris à un document dont les lignes et la remise sont toutes hors du champ de la TVA.
- Une remise est marquée
Oparce qu'elle ne porte pas de taxe propre, sur la facture d'un vendeur immatriculé à la TVA dont les numéros de TVA sont écrits comme d'habitude. - La remise reprend
Odu document tandis que le bloc des parties est construit séparément à partir des paramètres de la société et du client, sans que rien ne compare les deux.
Comment corriger le document
- Vérifiez que la remise est réellement hors du champ de la TVA. Une remise suit normalement le traitement TVA de ce qu'elle réduit ; si les lignes sont taxables, la remise doit porter leur catégorie, pas
O. - Si le document n'est réellement pas soumis à la TVA, supprimez chaque
cac:PartyTaxSchemedont lecac:TaxScheme/cbc:IDvautVATchez l'acheteur, le vendeur et danscac:TaxRepresentativeParty. Dans l'exemple enregistré, il s'agit du bloc de l'acheteur contenantGB987654321. - Gardez les deux parties identifiées autrement, par exemple par
cac:PartyLegalEntity/cbc:CompanyID, qu'elles ont déjà dans l'exemple enregistré (12345678et87654321). - Faites supprimer les identifiants TVA par le mapping dès qu'une ligne, une remise ou des frais sont en
O, au lieu de ne tester que les lignes.
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 identifiant TVA de l'acheteur sur un document dont la remise de fidélité est en catégorie O
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0088">7300010000001</cbc:EndpointID>
<!-- postal address omitted from this fragment -->
<cac:PartyTaxScheme>
<cbc:CompanyID>GB987654321</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Example Buyer Ltd</cbc:RegistrationName>
<cbc:CompanyID>87654321</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Loyalty discount</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="GBP">5.00</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>O</cbc:ID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>Fragment de la facture corrigée : l'acheteur ne garde que son identifiant d'immatriculation légale
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0088">7300010000001</cbc:EndpointID>
<!-- postal address omitted from this fragment -->
<cac:PartyLegalEntity>
<cbc:RegistrationName>Example Buyer Ltd</cbc:RegistrationName>
<cbc:CompanyID>87654321</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>
<!-- the loyalty discount of 5.00 in category O, unchanged, omitted from this fragment -->La facture en échec ajoute à l'acheteur un cac:PartyTaxScheme VAT avec GB987654321 ; la facture corrigée n'a d'identifiant TVA pour aucune partie, et les deux gardent la remise de 5.00 et la ligne en catégorie O. Le document en échec signale BR-O-02 en plus de BR-O-03, car sa ligne est aussi en O et cette règle interdit le même identifiant de l'acheteur à cause de la ligne.
Ce que le validateur a signalé
- La facture en erreur signale BR-O-02 et BR-O-03. 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. Réécrite en avoir, la facture en échec a signalé les deux mêmes constats lors d'un essai. - Les frais ont leur propre règle,
BR-O-04, et les lignes ontBR-O-02; les trois partagent la liste des identifiants interdits et ne diffèrent que par ce qui les déclenche. - La même remise ne doit pas indiquer de taux (
BR-O-06), et son montant est déduit de la base imposableOque contrôleBR-O-08.
Règles liées
- BR-O-02 interdit les mêmes identifiants lorsqu'une ligne n'est pas soumise à la TVA, et est signalé avec cette règle dans l'exemple
- BR-O-04 applique la même interdiction lorsque des frais au niveau du document ne sont pas soumis à la TVA
- BR-O-06 écarte tout taux de TVA de cette même remise non soumise à la TVA
- BR-CO-26 exige un autre identifiant du vendeur une fois son identifiant TVA retiré
- 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-03 (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.

