Sur cette page
La réponse courte
BR-CL-04 échoue lorsque la valeur de cbc:DocumentCurrencyCode ne figure pas dans la liste des codes alphabétiques ISO 4217 livrée avec les artefacts de validation. Envoyez le code à trois lettres de la devise dans laquelle la facture est réellement émise, en majuscules : GBP, et non gbp, 826, Pound sterling ou un symbole monétaire.
La même valeur erronée est généralement copiée dans chaque attribut currencyID ; attendez-vous donc à ce que cette règle arrive avec un constat par montant, émis par les règles qui contrôlent ces attributs.
Ce que la règle vérifie
La règle compare le texte de l'élément à une liste fixe de codes alphabétiques ISO 4217. La correspondance est exacte et sensible à la casse : gbp et Gbp échouent tous deux. De même que le code numérique ISO, un code pays comme GB, un nom de devise et un symbole.
La liste est l'instantané publié avec les artefacts EN 16931 figés, pas l'historique complet d'ISO 4217. Les codes retirés n'y figurent pas ; HRK et BGN sont tous deux rejetés. Un système qui conserve encore un ancien code pour une devise remplacée depuis doit mettre à jour ses données de référence.
Des espaces autour du code ne font pas échouer cette règle, mais n'aident pas non plus le document. Les montants sont rapprochés de la devise du document par comparaison exacte, donc un code entouré d'espaces qui passe ici est tout de même signalé par BR-CO-15 et par la règle Peppol PEPPOL-EN16931-R051 sur chaque montant. Retirez ces espaces.
Absent ou vide : cbc:DocumentCurrencyCode est facultatif dans le schéma UBL, un document qui l'omet passe donc l'étape XSD. Cette règle n'a alors rien à contrôler et reste muette ; la devise manquante est signalée par BR-05 à la place. Un élément présent mais vide signale ensemble BR-05, BR-CL-04 et PEPPOL-EN16931-R008.
| Terme | Signification | Élément UBL |
|---|---|---|
| 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 :
- Le système source stocke une valeur d'affichage, un nom ou un symbole, et le mapping la transmet sans la convertir en code.
- Les codes sont stockés ou normalisés en minuscules.
- Le logiciel comptable utilise des codes ISO numériques ou ses propres clés de devise internes.
- La table des devises est antérieure à un changement de monnaie et contient encore un code retiré.
- Une valeur de remplissage comme
ZZZest écrite lorsque la devise du document source est nulle. - Un code pays est utilisé là où un code de devise est attendu, parce que les deux proviennent de la même fiche client.
Comment corriger le document
- Établissez dans quelle devise les montants de la facture sont réellement exprimés. C'est un fait de la transaction ; ne choisissez pas un autre code valide simplement parce qu'il passe la validation.
- Convertissez-la en code alphabétique ISO 4217, en majuscules et sans espaces autour, et écrivez-le dans
cbc:DocumentCurrencyCode. - Écrivez le même code dans l'attribut
currencyIDde chaque montant exprimé dans la devise du document. La seule exception est le secondcac:TaxTotal, qui indique le total de la TVA dans la devise de comptabilisation lorsquecbc:TaxCurrencyCodeest utilisé. - Validez les codes de devise à leur entrée dans votre système, par rapport à la liste ISO 4217 en vigueur, afin qu'une valeur inconnue soit détectée avant qu'une facture ne soit construite dessus.
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 : ZZZ comme devise du document et sur chaque montant
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>ZZZ</cbc:DocumentCurrencyCode>
<cbc:BuyerReference>BUYER-REF-001</cbc:BuyerReference>
<!-- parties and tax total omitted from this fragment -->
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="ZZZ">25.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="ZZZ">25.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="ZZZ">30.00</cbc:TaxInclusiveAmount>
<!-- allowance, charge, prepaid and rounding totals omitted; they carry the same currencyID -->
<cbc:PayableAmount currencyID="ZZZ">30.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Fragment de la facture corrigée : GBP partout
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<cbc:BuyerReference>BUYER-REF-001</cbc:BuyerReference>
<!-- parties and tax total omitted from this fragment -->
<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; they carry the same currencyID -->
<cbc:PayableAmount currencyID="GBP">30.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>La facture en échec a ZZZ dans cbc:DocumentCurrencyCode et dans le currencyID des treize montants, dans le total de taxe, les totaux monétaires et la ligne ; la facture corrigée a GBP à chaque endroit. BR-CL-04 est signalé une fois, pour l'élément. Le document en échec signale aussi BR-CL-03 et PEPPOL-EN16931-CL007 treize fois chacun : ce sont les contrôles de liste de codes EN 16931 et Peppol de l'attribut currencyID, et chacun se déclenche sur chaque montant. Si seul l'élément avait été faux et que les attributs indiquaient encore GBP, le rapport aurait plutôt contenu BR-CL-04 avec BR-CO-15 et un PEPPOL-EN16931-R051 par montant, parce que les montants ne correspondraient plus à la devise du document.
Ce que le validateur a signalé
- La facture en erreur signale BR-CL-03, BR-CL-04 et
PEPPOL-EN16931-CL007. 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; l'élément porte le même nom dans les deux, et l'avoir enregistré avecZZZsignale les trois mêmes règles. - La règle ne lit que
cbc:DocumentCurrencyCode.cbc:TaxCurrencyCode, la devise de comptabilisation de la TVA, a sa propre règle de liste de codes,BR-CL-05. - L'élément n'a besoin d'aucun attribut. Ajouter un
listIDentraîne l'avertissementUBL-CR-657et rien d'autre.
Règles liées
- BR-CO-15 échoue lorsqu'aucun total de la TVA n'est exprimé dans la devise du document, ce que provoque un code de devise modifié ou entouré d'espaces
- BR-CL-23 est le contrôle de liste de codes équivalent pour les codes d'unité de quantité
- BR-CL-01 contrôle le code de type de document par rapport à sa propre liste de codes
- 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-20.
La définition officielle de BR-CL-04 (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.

