Sur cette page
La réponse courte
BR-26 échoue lorsqu'une ligne n'a pas de cac:Price/cbc:PriceAmount. Ajoutez un bloc cac:Price après cac:Item, contenant le prix net unitaire dans cbc:PriceAmount, ainsi qu'un cbc:BaseQuantity si le prix est exprimé pour plus d'une unité.
Le prix est le montant net pour une unité, ou pour la quantité de base, après une éventuelle remise sur le prix. Ce n'est pas le total de la ligne : la ligne enregistrée de 2 unités valant 25.00 a un prix de 12.5.
Ce que la règle vérifie
La règle s'exécute sur chaque cac:InvoiceLine ou cac:CreditNoteLine et est satisfaite lorsque la ligne a un cac:Price contenant un cbc:PriceAmount. Le montant n'est pas évalué ici ; un prix de 0 passe.
En pratique, ce constat signifie que tout le bloc cac:Price manque. Le schéma UBL permet à une ligne d'omettre cac:Price, mais dès que cac:Price est présent, il doit contenir un cbc:PriceAmount numérique. Lors d'un essai, un cac:Price ne contenant qu'une quantité de base, un cac:Price vide et un cbc:PriceAmount vide ont tous été refusés à l'étape XSD : aucun d'eux n'a donc atteint cette règle.
Deux autres règles échouent sur la même ligne chaque fois que le prix manque. BR-27 compare le prix à zéro, et un prix qui n'existe pas ne passe pas cette comparaison. PEPPOL-EN16931-R120 traite un prix manquant comme 0 : il attend donc que le montant de la ligne soit simplement les frais de la ligne moins les remises de la ligne.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-146 | Prix net de l'article | cac:InvoiceLine/cac:Price/cbc:PriceAmount (cac:CreditNoteLine/cac:Price/cbc:PriceAmount in a credit note) |
| BG-29 | Détail du prix | cac:InvoiceLine/cac:Price |
| BT-149 | Quantité de base du prix de l'article | cac:InvoiceLine/cac:Price/cbc:BaseQuantity |
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 lignes de forfait ou de frais ponctuels ne sont conservées que sous forme de montant, et l'export n'écrit aucun prix parce que la source n'a pas de prix unitaire pour elles.
- Le bloc de prix n'est émis que si une entrée de liste de prix existe, et cette ligne a été tarifée à la main.
- Le mapping a été écrit uniquement d'après le schéma UBL, où
cac:Priceest facultatif : il n'a donc jamais été ajouté. - Le prix est repris de la ligne de commande, et les lignes ajoutées au moment de la facturation n'ont pas de ligne de commande d'où le reprendre.
Comment corriger le document
- Repérez la ligne grâce à l'emplacement du constat.
- Prenez le prix net unitaire de la ligne source : le prix par unité après une éventuelle remise au niveau du prix. Si la source ne contient qu'une quantité et un montant, divisez le montant avant remises et frais de ligne par la quantité, en gardant assez de décimales pour que quantité x prix retombe sur ce montant à 0.02 près.
- Écrivez
cac:Priceaprèscac:Itemdans la ligne, aveccbc:PriceAmountdans la devise du document et, pour un prix exprimé pour plusieurs unités,cbc:BaseQuantityavec le mêmeunitCodeque la quantité de la ligne. - Gardez le prix nul ou positif. Une ligne de déduction ou de correction reçoit une quantité négative et un prix positif, sinon c'est
BR-27qui échoue à la place.
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 1 se termine après l'article, sans prix
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Example service</cbc:Name>
<!-- tax category omitted from this fragment -->
</cac:Item>
</cac:InvoiceLine>Fragment de la facture corrigée : un prix de 12.5 pour 1 C62 suit l'article
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Example service</cbc:Name>
<!-- tax category omitted from this fragment -->
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="GBP">12.5</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>La facture corrigée a un bloc cac:Price avec un cbc:PriceAmount de 12.5 et un cbc:BaseQuantity de 1 ; la facture en échec n'a aucun prix sur la ligne 1. Le document en échec signale aussi BR-27, car le contrôle vérifiant que le prix n'est pas négatif n'a aucune valeur à comparer et échoue, et PEPPOL-EN16931-R120, car avec un prix compté comme 0 la ligne devrait valoir 0.00, et non 25.00. Rétablir le prix fait disparaître les trois constats.
Ce que le validateur a signalé
- La facture en erreur signale BR-26, BR-27 et PEPPOL-EN16931-R120. 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 à
cac:InvoiceLinedans uneInvoiceUBL et àcac:CreditNoteLinedans unCreditNote, oùcac:Pricea la même structure. Lorsque le prix a été retiré d'une ligne d'avoir, les trois mêmes règles ont été signalées surcac:CreditNoteLine[1]. - Le prix brut et la remise sur le prix dans
cac:Price/cac:AllowanceChargesont facultatifs et ne jouent aucun rôle dans cette règle. Lorsqu'ils sont présents,PEPPOL-EN16931-R046vérifie que le prix net en découle. - Un prix de zéro compte comme présent. Sur une ligne dont le montant net n'est pas nul, il échoue quand même au calcul de ligne : lors d'un essai sur la ligne enregistrée, un prix de 0 a signalé
PEPPOL-EN16931-R120seul.
Règles liées
- BR-27 rejette un prix net d'article négatif et est signalé avec cette règle lorsque le prix manque
- PEPPOL-EN16931-R120 vérifie le montant net de la ligne par rapport à la quantité et au prix, en lisant un prix manquant comme 0
- PEPPOL-EN16931-R121 vérifie la quantité de base du prix dans le même bloc de prix
- BR-22 exige la quantité par laquelle le prix est multiplié
- 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-26 (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.

