Aller au contenu

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

BR-23 : Ajouter l'attribut unitCode à la quantité de la ligne

Le cbc:InvoicedQuantity ou cbc:CreditedQuantity de chaque ligne doit porter un attribut unitCode indiquant son unité de mesure.

EN 16931Erreur : le document n'est pas valideLignes et prixChamps de base

Sur cette page

La réponse courte

BR-23 échoue lorsque la quantité de la ligne n'a pas d'attribut unitCode, comme dans <cbc:InvoicedQuantity>2</cbc:InvoicedQuantity>. Ajoutez unitCode avec le code de la recommandation 20 de l'UN/ECE correspondant à l'unité dans laquelle la quantité est comptée, et utilisez le même code sur cac:Price/cbc:BaseQuantity si la ligne en comporte une.

L'attribut doit se trouver sur l'élément de quantité lui-même. Un unitCodeListID sans unitCode, ou une unité mentionnée uniquement dans le nom ou la description de l'article, ne compte pas.

Ce que la règle vérifie

Pour chaque cac:InvoiceLine ou cac:CreditNoteLine, la règle est satisfaite lorsque l'élément de quantité de la ligne porte un attribut nommé unitCode. Elle vérifie que l'attribut existe, pas ce qu'il contient.

Un attribut vide ou composé uniquement d'espaces passe cette règle et est intercepté par d'autres. Lors d'un essai, unitCode="" et unitCode=" " ont chacun signalé BR-CL-23, car aucun des deux n'est un code reconnu, et PEPPOL-EN16931-R130, car aucun ne correspond au C62 de la quantité de base. BR-23 lui-même n'a pas été signalé.

Une ligne sans aucun élément de quantité échoue aussi ici, avec BR-22, car il n'y a aucun élément pour porter l'attribut.

L'unité de cac:Price/cbc:BaseQuantity ne joue aucun rôle dans cette règle. Lorsque l'unité a été retirée à la fois de la quantité et de la quantité de base, seul BR-23 a été signalé : la comparaison des unités de Peppol ne porte que sur une quantité de base qui a une unité.

TermeSignificationÉlément UBL
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-129Quantité facturéecac:InvoiceLine/cbc:InvoicedQuantity
BT-150Code de l'unité de mesure de la quantité de base du prix de l'articlecac:InvoiceLine/cac:Price/cbc:BaseQuantity/@unitCode

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 système source stocke les quantités comme de simples nombres et n'a aucun champ d'unité que l'export pourrait utiliser.
  • Le sérialiseur n'écrit les attributs que lorsqu'une valeur est présente, et l'unité est nulle pour les lignes de service ou les lignes saisies à la main.
  • L'unité est envoyée dans unitCodeListID, ou seulement dans la description de l'article, et l'attribut unitCode est omis.
  • Un mapping d'avoir construit cbc:CreditedQuantity de zéro et copie le nombre sans l'attribut.

Comment corriger le document

  1. Repérez la ligne grâce à l'emplacement du constat, puis trouvez l'unité de sa quantité dans la source : l'unité de vente du produit, ou l'unité dans laquelle le service est facturé.
  2. Associez cette unité à son code de la recommandation 20 de l'UN/ECE, par exemple C62 pour un, H87 pour pièce, HUR pour heure ou KGM pour kilogramme, et écrivez-le en majuscules dans unitCode sur cbc:InvoicedQuantity ou cbc:CreditedQuantity.
  3. Écrivez le même code sur cac:Price/cbc:BaseQuantity lorsque la ligne en comporte une. PEPPOL-EN16931-R130 rejette une quantité de base dont l'unité diffère de celle de la quantité.
  4. Ne répondez pas au constat Peppol en retirant aussi l'unité de la quantité de base. Cela fait taire PEPPOL-EN16931-R130 et laisse BR-23 exactement là où il était.

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 2 sans unité, alors que le prix est exprimé pour 1 C62

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity>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>

Fragment de la facture corrigée : la quantité et la quantité de base du prix sont toutes deux 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>

La seule différence est unitCode="C62" sur cbc:InvoicedQuantity, absent de la facture en échec et présent dans la facture corrigée. Le document en échec signale aussi PEPPOL-EN16931-R130 sur cbc:BaseQuantity : la quantité de base du prix indique C62, et une quantité sans unité ne peut pas y correspondre. Ajouter l'attribut à la quantité fait disparaître les deux constats.

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 à cbc:InvoicedQuantity dans une Invoice UBL et à cbc:CreditedQuantity dans un CreditNote. Lors d'un essai sur un avoir, retirer l'attribut de la quantité créditée a signalé BR-23 et PEPPOL-EN16931-R130, la même paire que pour la facture.
  • Le schéma UBL traite unitCode comme facultatif : son absence passe donc l'étape XSD et reste à la charge de cette règle.
  • Le code acceptable est déterminé par BR-CL-23, pas ici. Une fois l'attribut présent, une valeur comme EACH ou pcs déplace le constat vers cette règle.

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-23 (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.