Aller au contenu

Ironfang Finance - Référence des règles

PEPPOL-EN16931-R130 : Utiliser l'unité de la quantité de la ligne pour la quantité de base du prix

Lorsque cac:Price/cbc:BaseQuantity a un unitCode, ce doit être celui de la quantité de la ligne. Convertissez le prix plutôt que de renommer l'unité.

Peppol BIS BillingErreur : le document n'est pas valideLignes et prixListes de codes

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.

TermeSignificationÉlément UBL
BT-150Code de l'unité de mesure de la quantité de base du prix de l'articlecac:InvoiceLine/cac:Price/cbc:BaseQuantity/@unitCode
BT-130Code de l'unité de mesure de la quantité facturéecac:InvoiceLine/cbc:InvoicedQuantity/@unitCode (cac:CreditNoteLine/cbc:CreditedQuantity/@unitCode in a credit note)
BT-149Quantité de base du prix de l'articlecac: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 C62 dans l'une et H87 dans 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

  1. Comparez les deux valeurs unitCode de 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.
  2. Si les deux codes signifient la même chose pour vous, comme C62 et H87 pour 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.
  3. 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.
  4. Ne vous contentez pas de renommer l'unité. PEPPOL-EN16931-R120 ignore 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 1 KGM a aussi échoué à cette règle, car 500 x 50 ne fait pas 25.00, et écrire GRM sur une quantité de base de 1 laisserait cet écart en place.
  5. Omettre unitCode sur cbc:BaseQuantity passe 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é

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 Invoice et CreditNote. Dans un avoir, la comparaison se fait avec cbc:CreditedQuantity ; lors d'un essai, une quantité créditée en C62 face à une quantité de base en H87 n'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.

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.