Sur cette page
La réponse courte
PEPPOL-EN16931-CL007 échoue lorsque le currencyID d'un montant n'est pas exactement l'un des codes de la liste de devises Peppol. Rien n'est supprimé ni mis en majuscules avant la comparaison : l'attribut doit contenir le seul code à trois lettres, comme GBP, et rien d'autre.
Dans l'exemple enregistré, le montant à payer porte GBP suivi d'une espace. EN 16931 supprime les espaces de bord avant son propre contrôle, BR-CL-03, et accepte la valeur. Peppol ne le fait pas, et PEPPOL-EN16931-R051 signale aussi l'attribut, car il n'est plus égal à la devise de la facture.
Ce que la règle vérifie
La règle lit les mêmes treize éléments de montant que BR-CL-03 : cbc:Amount, cbc:BaseAmount, cbc:PriceAmount, cbc:TaxAmount, cbc:TaxableAmount, cbc:LineExtensionAmount et les totaux de cac:LegalMonetaryTotal. Chaque montant dont l'attribut est incorrect donne un constat distinct.
La règle déclenchée dépend de ce qui ne va pas dans la valeur. Une valeur absente des deux listes, comme UKP ou gbp, est signalée par cette règle et par BR-CL-03, ainsi que par PEPPOL-EN16931-R051 lorsqu'elle diffère du code de devise de la facture. Un code valide précédé ou suivi d'une espace réussit BR-CL-03 et n'échoue que dans l'étape Peppol : lors d'un essai, une espace initiale et une espace finale ont chacune été signalées par cette règle et par PEPPOL-EN16931-R051.
Les deux listes diffèrent d'une devise. La liste Peppol contient STN, le code actuel de la dobra de Sao Tomé-et-Principe, et pas le code retiré STD ; la liste EN 16931 fait l'inverse. Lors d'un essai, une facture entièrement en STD a réussi EN 16931 et déclenché cette règle sur chaque montant, tandis qu'une facture entièrement en STN a réussi l'étape Peppol et échoué sur BR-CL-03 et BR-CL-04.
Le montant total de la TVA dans la devise de comptabilisation est couvert, bien que PEPPOL-EN16931-R051 l'exclue. Lors d'un essai avec EUR comme devise de comptabilisation, EUR suivi d'une espace sur ce montant a été signalé par cette règle ainsi que par BR-53 et PEPPOL-EN16931-R055, qui retrouvent ce montant par son code de devise.
| Terme | Signification | Élément UBL |
|---|---|---|
| - | Devise d'un montant (l'attribut currencyID) | currencyID on each amount element, for example cac:LegalMonetaryTotal/cbc:PayableAmount/@currencyID |
| BT-5 | Code de devise de la facture | cbc:DocumentCurrencyCode |
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 :
- La devise provient d'un champ à largeur fixe ou d'une colonne de base de données de type
CHARet garde son remplissage. - Un modèle écrit l'attribut sous la forme
currencyID="{currency} ", ou assemble des chaînes avec un séparateur, ce qui laisse une espace dans la valeur. - Les codes viennent d'une ancienne table de référence qui contient encore des devises retirées comme
STD. - Chaque montant est alimenté par sa propre source, et une seule d'entre elles, comme le total à payer, fournit la valeur non nettoyée.
Comment corriger le document
- Utilisez l'emplacement du constat pour trouver le montant, puis l'endroit de votre mappage qui remplit son
currencyID. - Supprimez les espaces autour du code de devise une seule fois, là où il entre dans votre système, et remplissez chaque
currencyIDetcbc:DocumentCurrencyCodeà partir de cette seule valeur. - Vérifiez le code par rapport à la liste ISO 4217 actuelle. Un code valide dans les deux étapes, comme
GBPouEUR, efface à la fois cette règle etBR-CL-03. - Pour la dobra de Sao Tomé-et-Principe, aucun code n'est accepté par les deux étapes dans la version épinglée :
STNéchoue sur EN 16931 etSTDsur Peppol, si bien qu'une facture dans cette devise ne peut pas réussir tant que les listes ne concordent pas.
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 : le montant à payer porte GBP suivi d'une espace
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">25.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="GBP">30.00</cbc:TaxInclusiveAmount>
<!-- allowance, charge, prepaid and rounding totals omitted from this fragment -->
<cbc:PayableAmount currencyID="GBP ">30.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Fragment de la facture corrigée : chaque montant porte le seul code GBP
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">25.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="GBP">30.00</cbc:TaxInclusiveAmount>
<!-- allowance, charge, prepaid and rounding totals omitted from this fragment -->
<cbc:PayableAmount currencyID="GBP">30.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Seul le currencyID de cbc:PayableAmount diffère : GBP suivi d'une espace dans la facture en échec, GBP seul dans la facture corrigée. Deux constats Peppol partagent cet emplacement : cette règle, parce que la valeur complétée d'une espace n'est pas sur la liste, et PEPPOL-EN16931-R051, parce qu'elle n'est pas égale à la devise de la facture. L'étape EN 16931 réussit, car BR-CL-03 supprime d'abord les espaces de la valeur.
Ce que le validateur a signalé
- La facture en erreur signale PEPPOL-EN16931-CL007 et PEPPOL-EN16931-R051. 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 à UBL
InvoiceetCreditNote. Lors d'un essai, un avoir avec le même montant à payer suivi d'une espace a signalé les deux mêmes règles. - Signalée par l'étape Peppol. En dehors de
STD,STNet des blancs autour d'un code, cette règle etBR-CL-03acceptent et rejettent les mêmes valeurs dans la version épinglée. - Elle ne lit jamais
cbc:DocumentCurrencyCodenicbc:TaxCurrencyCodeeux-mêmes ; ce sontBR-CL-04etBR-CL-05qui les contrôlent. Lors d'un essai avecSTDcomme devise de comptabilisation de la TVA,BR-CL-05a accepté l'élément de code et cette règle n'a signalé que le total de TVA qui portaitSTD.
Règles liées
- BR-CL-03 contrôle les mêmes attributs dans l'étape EN 16931, après en avoir supprimé les espaces de bord
- PEPPOL-EN16931-R051 signale un montant dont le currencyID diffère du code de devise de la facture
- PEPPOL-EN16931-CL006 est le contrôle Peppol de liste de codes pour le code de date d'exigibilité de la TVA
- PEPPOL-EN16931-P0112 est un autre contrôle Peppol qui refuse un code accepté par l'étape EN 16931, en l'occurrence le code de type de facture
- 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-28.1 : source vérifiée le 2026-09-28, explication mise à jour le 2026-09-28.
La définition officielle de PEPPOL-EN16931-CL007 (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.

