Sur cette page
La réponse courte
BR-O-08 échoue lorsque le cbc:TaxableAmount d'une ventilation O diffère du contenu O du document : le cbc:LineExtensionAmount de chaque ligne en O, plus les frais O à la racine, moins les remises O à la racine. La facture enregistrée envoie 25.00, la ligne seule, et oublie le Loyalty discount de 5.00 ; le bon montant est 20.00.
Le montant doit tomber juste au centime près. O n'a pas de taux selon lesquels regrouper et la règle n'admet aucune tolérance, il y a donc une seule somme par document, comparée exactement.
Ce que la règle vérifie
La règle est évaluée sur chaque cac:TaxCategory dont le cbc:ID vaut O sous le schéma VAT dans cac:TaxTotal/cac:TaxSubtotal, et la somme est toujours construite à partir de tout le document. Une ventilation O dupliquée portant les 25.00 complets a passé cette règle deux fois lors d'un essai et a été laissée à BR-O-01 ; répartie en 25.00 et 10.00 pour deux lignes O, les deux parties ont échoué ici.
Les lignes sont sélectionnées par cac:Item/cac:ClassifiedTaxCategory/cbc:ID égal à O, et les remises et frais par leur propre cac:TaxCategory/cbc:ID, directement sous la racine seulement. Les remises et frais de ligne sont déjà inclus dans le montant net de la ligne et ne sont pas comptés deux fois.
Les frais s'ajoutent et les remises se soustraient. Lors d'un essai, 30.00, le résultat obtenu en ajoutant la remise de 5.00 au lieu de la déduire, a échoué ; de même 25.00 sur une facture où des frais de livraison de 4.00 en O devaient être ajoutés pour atteindre 29.00.
L'exactitude joue dans les deux sens : 25.01 pour une seule ligne O de 25.00 a signalé cette règle lors d'un essai, alors que 25 écrit à la place de 25.00 est passé, car les valeurs sont comparées comme des nombres.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-116 | Base imposable de la catégorie de TVA | cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount |
| BT-118 | Code de catégorie de TVA | cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID |
| BT-131 | Montant net de ligne de facture | cac:InvoiceLine/cbc:LineExtensionAmount (cac:CreditNoteLine/cbc:LineExtensionAmount in a credit note) |
| BT-92 | Montant de la remise au niveau du document | cac:AllowanceCharge[cbc:ChargeIndicator = false]/cbc:Amount |
| BT-99 | Montant des charges ou frais au niveau du document | cac:AllowanceCharge[cbc:ChargeIndicator = true]/cbc:Amount |
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 base imposable est copiée de la somme des montants nets des lignes, si bien qu'une remise ou des frais
Oau niveau du document ne l'atteignent jamais. - La remise est ajoutée au lieu d'être soustraite, ou des frais sont soustraits, lors de la construction de la ventilation.
- Des montants d'autres catégories sans TVA, comme des lignes au taux zéro ou exonérées, sont regroupés dans le montant
O. - La ventilation provient d'un récapitulatif fiscal enregistré avant l'ajout de la remise ou des frais à la commande.
- Une ventilation
Oest écrite par ligne, si bien que chacune ne contient qu'une partie du total.
Comment corriger le document
- Partez des lignes en
O: dans l'exemple enregistré, la ligne 1 avec uncbc:LineExtensionAmountde 25.00. Gardez le signe de toute ligne négative. - Prenez en compte les éléments
cac:AllowanceChargeenOà la racine, les frais (cbc:ChargeIndicatortrue) avec un signe plus et les remises (false) avec un signe moins : ici seulement leLoyalty discountde 5.00, ce qui donne 20.00. - Écrivez le résultat avec deux décimales comme
cbc:TaxableAmountde l'uniquecac:TaxSubtotalO, et laissez son montant de TVA à0.00, comme l'exigeBR-O-09. - Recoupez avec
cbc:TaxExclusiveAmount, construit à partir des mêmes éléments : sur une facture entièrement enO, les deux montants sont égaux, 20.00 dans l'exemple enregistré.
L'exemple enregistré a une ligne et une remise au niveau du document, toutes deux en catégorie O, et aucuns frais au niveau du document.
Montant net de la ligne en O : 25.00 Frais au niveau du document en O : aucuns, donc + 0.00 Remise au niveau du document en O, la remise de fidélité : - 5.00 Base imposable O attendue : 25.00 + 0.00 - 5.00 = 20.00 Envoyé : 25.00, le total des lignes seul, donc la règle échoue
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 : 25.00 de base imposable en O, alors que la remise O de 5.00 ramène le contenu O à 20.00
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<!-- reason code 95 and reason omitted from this fragment -->
<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>
<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>
<!-- 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 in category O: LineExtensionAmount 25.00 -->Fragment de la facture corrigée : 25.00 - 5.00 = 20.00 de base imposable en O
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">20.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>Seul le cbc:TaxableAmount O diffère : 25.00 dans la facture en échec et 20.00 dans la facture corrigée. Le document en échec ne signale que BR-O-08. Ses totaux déduisent déjà la remise, avec cbc:TaxExclusiveAmount et cbc:PayableAmount à 20.00 dans les deux documents, et rien d'autre dans le document ne réagit au mauvais montant de la ventilation.
Ce que le validateur a signalé
- La facture en erreur signale BR-O-08. 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; pour un avoir, la règle additionne les montants nets descac:CreditNoteLine, et la facture en échec réécrite ainsi a de nouveau signalé cette règle lors d'un essai. - La règle suppose une ventilation
O.BR-O-01exige exactement cela, etBR-O-09exige que son montant de TVA soit 0. - Les bases imposables des autres catégories sont contrôlées par leurs propres règles, comme
BR-S-08pour les ventilations au taux normal, qui tolère un écart inférieur à 1.00 là où cette règle n'en tolère aucun.
Règles liées
- BR-O-01 exige l'unique ventilation O dont cette règle contrôle la base imposable
- BR-O-09 exige que le montant de TVA placé à côté de cette base imposable soit nul
- BR-S-08 est le contrôle de la base imposable au taux normal, regroupé par taux et avec une tolérance
- BR-CO-13 contrôle le total hors TVA, construit à partir des mêmes montants de lignes, remises et frais
- 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-08 (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.

