Aller au contenu

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

BR-54 : Donner à chaque attribut d'article un nom et une valeur

Chaque cac:AdditionalItemProperty doit avoir un cbc:Name et un cbc:Value. Si l'article n'a pas de valeur pour un attribut, omettez l'attribut.

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

Sur cette page

La réponse courte

BR-54 échoue lorsqu'une cac:AdditionalItemProperty dans l'article d'une ligne n'a pas son cbc:Value ou son cbc:Name. Dans l'exemple enregistré, l'attribut s'appelle Service level et n'a pas de valeur. Ajoutez la valeur tirée des données de l'article, ou retirez toute la cac:AdditionalItemProperty si l'article n'en a pas pour cet attribut.

Un nom manquant n'atteint pas cette règle en pratique. cbc:Name est obligatoire dans cet élément UBL : une propriété qui ne l'a pas est donc refusée à l'étape XSD avant toute règle métier.

Ce que la règle vérifie

La règle s'exécute sur chaque cac:AdditionalItemProperty du document et est satisfaite lorsqu'elle a à la fois un enfant cbc:Name et un enfant cbc:Value. Chaque propriété est jugée séparément : lors d'un essai, un article avec deux propriétés sans valeur a signalé la règle deux fois, une pour chacune.

Seule la présence des deux éléments est testée. Un cbc:Value vide satisfait cette règle et est signalé à la place par PEPPOL-EN16931-R008 ; un cbc:Name vide s'est comporté de la même façon lors d'un essai.

Seul cbc:Value compte comme valeur. Lors d'un essai, une propriété avec cbc:ValueQuantity à sa place a signalé cette règle et l'avertissement UBL-CR-611, qui signale cbc:ValueQuantity comme un élément hors du modèle EN 16931.

L'ordre des éléments compte pour le schéma, pas pour cette règle. Lors d'un essai, une propriété avec cbc:Value écrit avant cbc:Name a échoué à l'étape XSD.

TermeSignificationÉlément UBL
BG-32Attributs de l'articlecac:InvoiceLine/cac:Item/cac:AdditionalItemProperty (cac:CreditNoteLine/cac:Item/cac:AdditionalItemProperty in a credit note)
BT-160Nom de l'attribut de l'articlecac:InvoiceLine/cac:Item/cac:AdditionalItemProperty/cbc:Name
BT-161Valeur de l'attribut de l'articlecac:InvoiceLine/cac:Item/cac:AdditionalItemProperty/cbc:Value

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 attributs sont générés à partir d'un modèle de produit aux noms d'attribut fixes, et la valeur est vide pour ce produit.
  • Le sérialiseur omet les valeurs nulles mais écrit quand même la cac:AdditionalItemProperty englobante et son nom.
  • Un attribut numérique comme un poids est écrit en cbc:ValueQuantity parce qu'UBL le propose, et aucun cbc:Value n'est envoyé.
  • Les noms et les valeurs d'attribut proviennent de sources différentes, comme un catalogue et une commande, et la jointure ne trouve aucune valeur pour cette ligne.

Comment corriger le document

  1. Utilisez l'emplacement du constat, par exemple cac:InvoiceLine[1]/cac:Item[1]/cac:AdditionalItemProperty[1], pour trouver la propriété.
  2. Si l'article a une valeur pour l'attribut, écrivez-la sous forme de texte dans cbc:Value, juste après cbc:Name. Pour une mesure, mettez le nombre et son unité dans ce texte, car cbc:Value est le seul élément de valeur qu'utilise le modèle EN 16931.
  3. S'il n'y a pas de valeur, omettez toute la cac:AdditionalItemProperty. Un cbc:Value vide ne fait qu'échanger ce constat contre PEPPOL-EN16931-R008.
  4. Empêchez le sérialiseur d'écrire une propriété dont la valeur est nulle, afin qu'un nom ne soit jamais envoyé seul.

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 : l'attribut d'article a un nom et aucune valeur

<cac:Item>
  <cbc:Name>Example service</cbc:Name>
  <!-- standard identifier, classification and tax category omitted from this fragment -->
  <cac:AdditionalItemProperty>
    <cbc:Name>Service level</cbc:Name>
  </cac:AdditionalItemProperty>
</cac:Item>

Fragment de la facture corrigée : l'attribut Service level a la valeur Standard

<cac:Item>
  <cbc:Name>Example service</cbc:Name>
  <!-- standard identifier, classification and tax category omitted from this fragment -->
  <cac:AdditionalItemProperty>
    <cbc:Name>Service level</cbc:Name>
    <cbc:Value>Standard</cbc:Value>
  </cac:AdditionalItemProperty>
</cac:Item>

Seul cbc:Value diffère : absent de l'attribut d'article dans la facture en échec, Standard dans la facture corrigée. Le document en échec ne signale que BR-54. Son étape Peppol réussit, car l'élément de valeur est absent plutôt que vide : PEPPOL-EN16931-R008 n'a donc aucun élément à signaler.

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 à cac:InvoiceLine/cac:Item dans une Invoice UBL et à cac:CreditNoteLine/cac:Item dans un CreditNote. Lors d'un essai, un avoir dont la valeur avait été retirée a signalé le même constat unique sur cac:CreditNoteLine[1].
  • Les attributs d'article sont facultatifs. Une ligne sans aucune cac:AdditionalItemProperty passe, c'est pourquoi retirer un attribut que vous ne pouvez pas renseigner est une correction légitime.
  • La règle ne lit que l'attribut. Le nom de l'article, l'identifiant standard et la classification du même article ont leurs propres règles.

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