Sur cette page
La réponse courte
UBL-CR-646 est un avertissement émis lorsque cac:SubInvoiceLine apparaît dans une ligne de facture (cac:InvoiceLine). EN 16931 n'a pas de terme métier pour cet élément : retirez-le avec tout son contenu. EN 16931 n'a qu'un seul niveau de lignes : donnez à chaque sous-ligne sa propre ligne en retirant son montant de la ligne parente, ou décrivez-la dans l'unique cbc:Note de la ligne parente (BT-127, UBL-SR-34).
L'avertissement seul ne rend pas le document invalide, mais d'autres règles vérifient toujours ce qui est présent. Retirer l'élément maintient le XML dans le modèle EN 16931, à partir duquel un destinataire intègre la facture.
Ce que la règle vérifie
La règle vérifie une seule chose : la présence de cac:InvoiceLine/cac:SubInvoiceLine. Son contenu n'est pas lu.
Elle s'exécute une seule fois sur l'ensemble du document et ne produit donc qu'un constat, quel que soit le nombre de lignes qui portent l'élément. Ce constat pointe vers la racine du document, et non vers l'élément : cherchez cac:InvoiceLine/cac:SubInvoiceLine dans le XML.
Tout ce que contient cac:SubInvoiceLine disparaît avec lui ; aucune autre règle UBL-CR ne désigne un emplacement à l'intérieur.
Seule une Invoice peut le contenir : l'avoir UBL 2.1 n'a pas de cac:InvoiceLine/cac:SubInvoiceLine.
| Terme | Signification | Élément UBL |
|---|---|---|
| - | SubInvoiceLine (UBL uniquement, sans terme métier) | cac:InvoiceLine/cac:SubInvoiceLine |
| BG-25 | Ligne de facture | cac:InvoiceLine |
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 :
- Une structure
cac:SubInvoiceLineentière est reprise d'une fiche de référence ou d'un autre type de document, y compris des parties qu'EN 16931 n'utilise pas. - Une bibliothèque UBL 2.1 générique écrit chaque élément et attribut pour lequel elle a une valeur, qu'EN 16931 l'utilise ou non.
- Un mapping conçu pour un autre document basé sur UBL, comme une commande, un avis d'expédition ou un profil national, est réutilisé pour Peppol BIS Billing.
Comment corriger le document
- Cessez d'écrire
cac:InvoiceLine/cac:SubInvoiceLine, avec tout son contenu. - EN 16931 n'a qu'un seul niveau de lignes : donnez à chaque sous-ligne sa propre ligne en retirant son montant de la ligne parente, ou décrivez-la dans l'unique
cbc:Notede la ligne parente (BT-127, UBL-SR-34). - Validez à nouveau : l'avertissement disparaît. Si l'élément était le seul contenu de son parent, retirez aussi le parent : Peppol refuse les éléments vides (PEPPOL-EN16931-R008).
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 avec l'avertissement : SubInvoiceLine dans une ligne de facture
</cac:Price>
<cac:SubInvoiceLine>
<cbc:ID>EXAMPLE-1</cbc:ID>
<cbc:LineExtensionAmount currencyID="GBP">1.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Description>Example</cbc:Description>
</cac:Item>
</cac:SubInvoiceLine>
</cac:InvoiceLine>Fragment de la facture corrigée : les mêmes lignes sans l'élément
</cac:Price>
</cac:InvoiceLine>La facture avec l'avertissement contient <cac:SubInvoiceLine> dans une ligne de facture, et la facture corrigée est le même document sans l'élément. La facture avec l'avertissement ne signale que celui-ci et est valide à toutes les étapes : elle serait donc acceptée en l'état.
Ce que le validateur a signalé
- La facture avec l'avertissement est valide et signale l'avertissement UBL-CR-646. Le document corrigé passe toutes les étapes de validation sans constat.Télécharger le XML avec l'avertissementTé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
- Ne s'applique qu'à un document UBL
Invoice: l'autre type de document ne peut pas contenir l'élément ici. - L'avertissement vient des règles de l'étape EN 16931 pour la syntaxe UBL. Dans l'exemple enregistré, l'étape XSD réussit : l'élément est valide en UBL 2.1 et sort seulement du modèle EN 16931.
Règles liées
- UBL-CR-562 : WithholdingTaxTotal dans une ligne de facture
- UBL-CR-645 : DeliveryTerms dans une ligne de facture
- UBL-CR-647 : ItemPriceExtension dans une ligne de facture
- 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-29.1 : source vérifiée le 2026-09-29, explication mise à jour le 2026-09-29.
La définition officielle de UBL-CR-646 (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.

