Sur cette page
La réponse courte
BR-21 échoue pour une ligne dont le cbc:ID propre n'a pas de texte. Dans l'exemple enregistré, l'unique cac:InvoiceLine commence par <cbc:ID></cbc:ID>. Écrivez le numéro de ligne, ou une autre référence qui distingue cette ligne des autres, dans cet élément de chaque cac:InvoiceLine ou cac:CreditNoteLine.
Supprimer l'élément n'est pas une solution. Le schéma UBL exige un cbc:ID dans chaque ligne : une ligne qui n'en a pas est donc refusée à l'étape XSD, et aucune règle métier n'est signalée.
Ce que la règle vérifie
La règle est évaluée une fois par ligne, sur chaque cac:InvoiceLine d'une facture et chaque cac:CreditNoteLine d'un avoir. Elle lit uniquement le cbc:ID qui appartient directement à la ligne et passe lorsque cet élément contient au moins un caractère autre qu'une espace.
Vide et blanc sont traités de la même façon. Lors d'un essai, une balise ouvrante et fermante sans rien entre elles, un <cbc:ID/> auto-fermant et un élément contenant trois espaces ont chacun signalé BR-21 avec PEPPOL-EN16931-R008. Un cbc:ID vide portant un attribut schemeID a échoué de la même façon, car un attribut n'est pas un contenu.
Une ligne sans aucun cbc:ID n'atteint jamais cette règle. Lors d'essais sur une facture et sur un avoir, l'étape XSD a refusé le document, et les étapes EN 16931 et Peppol ont été ignorées.
Au-delà de sa présence, la valeur n'est pas examinée. LINE-A passe aussi bien que 1, et lors d'un essai, une facture avec deux lignes toutes deux numérotées 1 a passé toutes les étapes. EN 16931 décrit l'identifiant de ligne comme unique dans le document : gardez-le unique, même si le validateur ne le vérifie pas.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-126 | Identifiant de ligne de facture | cac:InvoiceLine/cbc:ID (cac:CreditNoteLine/cbc:ID in a credit note) |
| BG-25 | Ligne de facture | cac:InvoiceLine (cac:CreditNoteLine in a credit note) |
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 numéros de ligne sont attribués lors de la comptabilisation de la facture, et le XML est construit à partir d'un brouillon dans lequel le champ est encore vide.
- Les lignes ajoutées par l'export lui-même, comme des frais de livraison ou une ligne d'arrondi, n'ont pas d'enregistrement dans la table source et donc pas de numéro de ligne à copier.
- Une référence de ligne nulle est sérialisée sous forme d'élément vide au lieu d'être remplie à partir du rang de la ligne.
- L'identifiant est lu dans un champ qui n'existe que pour certains types de ligne, comme une référence de ligne de commande, et il est vide pour les lignes en texte libre.
Comment corriger le document
- Utilisez l'emplacement du constat, par exemple
cac:InvoiceLine[1], pour voir quelle ligne est concernée. Chaque ligne dont l'identifiant est vide donne son propre constat. - Prenez l'identifiant dans la ligne source : son numéro de ligne ou son rang sur la facture telle qu'émise. Si la source n'en a pas, numérotez les lignes dans l'ordre du document,
1,2,3, lors de la construction du XML. - Gardez les identifiants uniques dans le document et identiques à ceux de tout PDF ou de toute copie de la facture, afin que l'acheteur puisse vous citer une ligne.
- Laissez
cbc:IDlà où le schéma le place, au début de la ligne, avant l'éventuelcbc:Noteet la quantité. Le déplacer ou le supprimer transforme ce constat en échec XSD.
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'identifiant de ligne est présent mais vide
<cac:InvoiceLine>
<cbc:ID></cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<!-- item and price omitted from this fragment -->
</cac:InvoiceLine>Fragment de la facture corrigée : la ligne porte le numéro 1
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<!-- item and price omitted from this fragment -->
</cac:InvoiceLine>Seul le cbc:ID de la ligne diffère : vide dans la facture en échec, 1 dans la facture corrigée. Le document en échec signale aussi PEPPOL-EN16931-R008, localisé à ce cbc:ID plutôt qu'à la ligne, car Peppol refuse tout élément sans contenu. Écrire le numéro de ligne lève les deux constats.
Ce que le validateur a signalé
- La facture en erreur signale BR-21 et PEPPOL-EN16931-R008. 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 un document UBLInvoiceet àcac:CreditNoteLinedans un documentCreditNote. Lors d'un essai sur un avoir, un identifiant de ligne vide a signaléBR-21surcac:CreditNoteLine[1]etPEPPOL-EN16931-R008sur soncbc:ID, la même paire que sur la facture. - Les autres éléments
cbc:IDne sont pas lus par cette règle : ni le numéro du document directement sous la racine, couvert parBR-02, ni ceux imbriqués dans la ligne, comme le code de catégorie de TVA danscac:ClassifiedTaxCategory.
Règles liées
- PEPPOL-EN16931-R008 est signalé sur le même élément lorsque l'identifiant de ligne est présent mais vide
- BR-02 est le contrôle de présence équivalent pour le numéro du document sous la racine
- BR-22 exige une quantité sur la même ligne
- BR-25 exige un nom d'article sur chaque ligne
- 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-21 (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.

