Sur cette page
La réponse courte
PEPPOL-EN16931-R008 échoue une fois pour chaque élément qui n'a ni élément enfant ni texte autre que des espaces. L'emplacement du constat est le chemin de l'élément vide. Si la valeur est facultative et que vous ne l'avez pas, supprimez l'élément ; si elle est obligatoire, fournissez la valeur.
Dans l'exemple enregistré, la référence comptable facultative de l'acheteur, cbc:AccountingCost, est écrite sous la forme d'une balise ouvrante et d'une balise fermante sans rien entre elles. Un élément facultatif sans valeur devrait simplement être absent.
Ce que la règle vérifie
La règle n'a pas de condition propre. Elle sélectionne chaque élément, à toute profondeur et de tout nom, qui n'a pas d'élément enfant et dont le texte est vide une fois les espaces retirés, et elle signale chacun d'eux.
Tous les cas suivants ont été signalés lors d'un essai : une balise ouvrante et fermante sans rien entre elles, une balise auto-fermante, un élément ne contenant que des espaces, des tabulations ou des sauts de ligne, et un élément ne contenant qu'un commentaire XML.
Les attributs ne comptent pas comme contenu. Un élément avec un attribut et sans texte reste vide.
Les agrégats comptent aussi. Un cac:PaymentTerms sans enfant est signalé sur cet élément. Un parent dont tous les enfants sont vides n'est pas signalé lui-même, mais chaque enfant vide l'est : un cac:Contact avec trois champs vides produit donc trois constats.
Une espace insécable ( ) n'est pas traitée comme un espace blanc : un élément qui ne contient que ce caractère n'est donc pas signalé. C'est une valeur composée d'un caractère invisible, pas une correction.
| Terme | Signification | Élément UBL |
|---|---|---|
| - | Tout élément du document, à toute profondeur | //* |
| BT-19 | Référence comptable de l'acheteur (l'élément de l'exemple enregistré) | cbc:AccountingCost |
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 sérialiseur écrit chaque champ mappé et transforme les chaînes nulles ou vides en éléments vides au lieu de les ignorer.
- Un modèle contient des éléments facultatifs fixes comme
cbc:Note,cbc:AccountingCostou les champs de contact, et ils restent vides lorsque la source n'a rien. - Les valeurs sont nettoyées après la décision d'émettre l'élément, si bien qu'un champ ne contenant que des espaces devient un élément vide.
- Un élément englobant comme
cac:Contactoucac:PaymentTermsest toujours émis alors que ses enfants sont conditionnels, ce qui laisse une coquille vide.
Comment corriger le document
- Utilisez l'emplacement de chaque constat pour identifier l'élément. Il y a un constat par élément vide, la liste est donc complète.
- Pour un élément facultatif sans valeur, ne l'émettez pas. Faites ignorer au sérialiseur les valeurs nulles, vides ou ne contenant que des espaces, en règle générale et non champ par champ.
- Après avoir supprimé les enfants vides, vérifiez le parent. S'il n'a plus d'enfant, supprimez-le aussi, sinon il devient le prochain élément vide signalé.
- Pour un élément qu'une autre règle exige, corrigez les données source afin qu'il y ait une vraie valeur. Ne le remplissez pas avec une valeur de substitution comme un tiret ou
N/A, sauf si c'est bien ce que disent les données métier.
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 référence comptable de l'acheteur est présente mais vide
<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<cbc:AccountingCost></cbc:AccountingCost>
<cbc:BuyerReference>BUYER-REF-001</cbc:BuyerReference>Fragment de la facture corrigée : l'élément porte une valeur. Omettre complètement l'élément réussit aussi
<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<cbc:AccountingCost>COST-123</cbc:AccountingCost>
<cbc:BuyerReference>BUYER-REF-001</cbc:BuyerReference>Seul cbc:AccountingCost diffère : vide dans le document en échec, COST-123 dans le document corrigé. Le document en échec ne signale que PEPPOL-EN16931-R008. Le schéma UBL accepte un élément texte vide, et EN 16931 n'a pas de règle sur ce champ facultatif : les étapes XSD et EN 16931 réussissent donc toutes deux.
Ce que le validateur a signalé
- La facture en erreur signale 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 aussi bien à UBL
Invoicequ'àCreditNote, et à chaque élément du document, y compris ceux situés danscac:InvoiceLineoucac:CreditNoteLine. - Certains éléments vides n'arrivent pas jusque-là. Un montant vide ou une date vide, par exemple, échoue d'abord à l'étape XSD ; les étapes EN 16931 et Peppol sont alors ignorées, et cette règle n'est donc pas signalée pour eux.
- Lorsqu'un élément obligatoire est vide, cette règle arrive avec la règle qui exige la valeur. Un
cbc:CustomizationIDvide, par exemple, signale aussiBR-01etPEPPOL-EN16931-R004. - Un élément vide ne permet pas de contourner une règle de présence. Un
cbc:BuyerReferencevide suffit pourPEPPOL-EN16931-R003, qui ne cherche que l'élément, mais il est signalé ici.
Règles liées
- PEPPOL-EN16931-R003 exige une référence de l'acheteur ou de commande, qui ne doit pas être fournie sous forme d'élément vide
- BR-01 est signalé avec cette règle lorsque l'identifiant de spécification est vide
- PEPPOL-EN16931-R004 est aussi signalé lorsque l'identifiant de spécification est vide
- FW-XML-001 couvre le cas différent où le XML lui-même ne peut pas être analysé
- Parcourir toutes les règles de la référence
- Contexte (en anglais) : How Peppol invoice validation actually works
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-20.
La définition officielle de PEPPOL-EN16931-R008 (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.

