Sur cette page
La réponse courte
PEPPOL-EN16931-R130 échoue lorsque cac:Price/cbc:BaseQuantity a un unitCode différent de celui de la quantité de la ligne. Dans l'exemple enregistré, la quantité est en C62 et la quantité de base en H87. Donnez à la quantité de base l'unité de la quantité et, si le prix a été établi dans une autre unité, exprimez de nouveau le prix et la quantité de base dans l'unité de la quantité.
Chaque code peut être valide à lui seul ; c'est le désaccord qui échoue. C62 (un) et H87 (pièce) figurent tous deux dans la liste des unités, c'est pourquoi l'étape EN 16931 passe.
Ce que la règle vérifie
La règle s'exécute sur chaque cbc:BaseQuantity qui porte un attribut unitCode et compare ce code au unitCode de la quantité de la même ligne : cbc:InvoicedQuantity dans une facture, cbc:CreditedQuantity dans un avoir.
La comparaison porte sur les deux chaînes telles quelles, sans conversion d'unité ni normalisation de la casse. Lors d'un essai, c62 face à C62 a échoué ici et sous BR-CL-23, et unitCode=" C62 ", avec des espaces autour du code, a échoué ici seulement.
Trois situations sont ignorées. Une quantité de base sans unitCode n'est pas contrôlée ; lors d'un essai, retirer l'attribut de la quantité de base enregistrée a donné un résultat sans constat. Une ligne sans élément de quantité est laissée de côté, et BR-22 la signale. Une ligne sans cbc:BaseQuantity n'a rien à comparer.
Une quantité présente sans unitCode compte tout de même comme une quantité : une quantité de base qui a une unité échoue donc face à elle. C'est pourquoi une unité de ligne manquante signale cette règle à côté de BR-23.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-150 | Code de l'unité de mesure de la quantité de base du prix de l'article | cac:InvoiceLine/cac:Price/cbc:BaseQuantity/@unitCode |
| BT-130 | Code de l'unité de mesure de la quantité facturée | cac:InvoiceLine/cbc:InvoicedQuantity/@unitCode (cac:CreditNoteLine/cbc:CreditedQuantity/@unitCode in a credit note) |
| 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 :
- Le prix provient d'une liste de prix tenue au kilogramme, au mètre ou au paquet, alors que la quantité est enregistrée en grammes, en centimètres ou à la pièce.
- Deux tables de correspondance traduisent les unités, l'une pour les lignes de commande ou de livraison, l'autre pour la liste de prix, et elles donnent des codes différents à la même unité locale, comme
C62dans l'une etH87dans l'autre. - L'unité de la quantité de base est figée dans le modèle, alors que l'unité de la ligne provient du produit.
- L'unité de la ligne a été corrigée après un constat
BR-CL-23, et la quantité de base a gardé l'ancien code.
Comment corriger le document
- Comparez les deux valeurs
unitCodede la ligne en échec et décidez dans quelle unité la quantité est réellement comptée. L'unité de la quantité décrit ce qui a été livré : gardez-la, sauf si c'est elle qui est erronée. - Si les deux codes signifient la même chose pour vous, comme
C62etH87pour des articles à l'unité, choisissez-en un et écrivez-le sur les deux éléments. Faites en sorte que la correspondance des unités produise un seul code pour chaque unité locale. - Si le prix est établi dans une autre unité, exprimez la quantité de base dans l'unité de la ligne. Un prix de 50 par kilogramme face à une quantité de 500 grammes devient un prix de 50 pour une quantité de base de 1000
GRM. Lors d'un essai, cette ligne, avec un montant net de 25.00, a passé toutes les étapes. - Ne vous contentez pas de renommer l'unité.
PEPPOL-EN16931-R120ignore les unités et divise le prix par la quantité de base comme un simple nombre : lors d'un essai, la même ligne avec le prix pour 1KGMa aussi échoué à cette règle, car 500 x 50 ne fait pas 25.00, et écrireGRMsur une quantité de base de 1 laisserait cet écart en place. - Omettre
unitCodesurcbc:BaseQuantitypasse aussi, car la règle n'a alors rien à comparer, mais écrire le même code que sur la quantité garde un prix qui se décrit lui-même.
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 quantité est en C62, la quantité de base du prix en H87
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<!-- item omitted from this fragment -->
<cac:Price>
<cbc:PriceAmount currencyID="GBP">12.5</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>Fragment de la facture corrigée : les deux quantités sont en C62
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<!-- item omitted from this fragment -->
<cac:Price>
<cbc:PriceAmount currencyID="GBP">12.5</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>Seul le unitCode de cbc:BaseQuantity diffère : H87 dans la facture en échec, C62 dans la facture corrigée, comme sur cbc:InvoicedQuantity. Le document en échec ne signale que PEPPOL-EN16931-R130. H87 est une unité reconnue, donc BR-CL-23 reste muet, et le calcul de la ligne ne regarde pas les unités, donc PEPPOL-EN16931-R120 trouve toujours 2 x 12.5 = 25.00.
Ce que le validateur a signalé
- La facture en erreur signale PEPPOL-EN16931-R130. 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. Dans un avoir, la comparaison se fait aveccbc:CreditedQuantity; lors d'un essai, une quantité créditée enC62face à une quantité de base enH87n'a signalé que cette règle, comme sur la facture. - C'est une règle Peppol BIS, signalée à l'étape Peppol. L'étape EN 16931 ne signale pas le désaccord : elle passe dans l'exemple enregistré.
- Un code non reconnu sur l'un ou l'autre élément est un constat distinct,
BR-CL-23, et les deux règles peuvent être signalées ensemble pour la même quantité de base.
Règles liées
- BR-23 exige le code d'unité sur la quantité de la ligne, auquel cette règle compare
- BR-CL-23 vérifie que chaque code d'unité est un code UN/ECE reconnu
- PEPPOL-EN16931-R121 exige que la quantité de base du prix soit elle-même supérieure à zéro
- PEPPOL-EN16931-R120 divise le prix par la quantité de base lorsqu'elle contrôle le montant net de la ligne
- Parcourir toutes les règles de la référence
- Contexte (en anglais) : How Peppol invoice validation actually works
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 PEPPOL-EN16931-R130 (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.

