Sur cette page
La réponse courte
BR-05 échoue lorsque la racine du document n'a pas de cbc:DocumentCurrencyCode, ou en a un vide ou qui ne contient que des espaces. Ajoutez l'élément avec le code ISO 4217 de la devise dans laquelle la facture est émise, par exemple GBP.
Attendez-vous à une longue liste de constats pour cette seule omission. Peppol compare le currencyID de chaque montant à cet élément : tant qu'il manque, PEPPOL-EN16931-R051 est signalé une fois par montant, même lorsque l'attribut est correct.
Ce que la règle vérifie
La règle s'exécute une fois sur la racine Invoice ou CreditNote et cherche un enfant cbc:DocumentCurrencyCode dont le texte n'est pas vide une fois les espaces retirés. Un élément absent, un élément vide et un élément qui ne contient que des espaces la font tous échouer.
Seule la présence d'une valeur est testée ici. Savoir si cette valeur est un vrai code de devise relève de BR-CL-04 : lors d'un essai, gbp a passé cette règle et a été signalé par BR-CL-04 à la place.
Le schéma UBL considère l'élément comme facultatif : un document sans lui passe donc l'étape XSD, et le manque est laissé à l'étape EN 16931. Lors d'un essai, un élément vide et un élément contenant une seule espace ont chacun signalé BR-CL-04, BR-CO-15 et PEPPOL-EN16931-R008 en plus de cette règle, et PEPPOL-EN16931-R051 sur chaque montant.
Les attributs currencyID des montants ne remplacent pas l'élément. L'exemple enregistré porte toujours GBP sur les treize montants et échoue.
| 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 :
- La devise est enregistrée sur la fiche client ou dans le grand livre, et l'export la lit dans l'en-tête de la facture, où elle est nulle.
- Un système qui ne facture que dans une seule devise n'a aucun champ de devise, et le modèle écrit
currencyID="GBP"en dur sur les montants, sans élément pour la devise du document. - Le sérialiseur ignore les valeurs nulles, ou écrit un élément vide pour elles, et le champ de devise était nul pour cette facture.
- Le code est écrit dans
cbc:TaxCurrencyCode, la devise de comptabilisation de la TVA, au lieu decbc:DocumentCurrencyCode.
Comment corriger le document
- Prenez la devise de la transaction : celle dans laquelle les prix ont été convenus et les montants exprimés. Ne vous rabattez pas sur la devise nationale du vendeur si la facture a été établie dans une autre.
- Écrivez-la sous la forme du code alphabétique ISO 4217 en majuscules dans
cbc:DocumentCurrencyCode, directement sous la racine : après le code de type et les éventuelscbc:Noteoucbc:TaxPointDate, et avantcbc:TaxCurrencyCode,cbc:AccountingCostetcbc:BuyerReference. Lors d'un essai, l'élément placé aprèscbc:BuyerReferencea échoué à l'étape XSD. - Vérifiez que chaque montant porte le même code dans
currencyID, caractère pour caractère. Seul le total de TVA exprimé dans une devise de comptabilisation distincte peut différer. - Rendez la devise obligatoire là où les factures sont créées, afin qu'une facture sans devise ne puisse pas atteindre l'export.
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 : aucun code de devise entre le code de type et la référence de l'acheteur, alors que les montants indiquent toujours GBP
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<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 from this fragment -->
<cbc:PayableAmount currencyID="GBP">30.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Fragment de la facture corrigée : le code de devise est présent et les montants sont inchangés
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<cbc:BuyerReference>BUYER-REF-001</cbc:BuyerReference>La facture corrigée contient cbc:DocumentCurrencyCode avec la valeur GBP entre le code de type et la référence de l'acheteur ; la facture en échec n'a pas cet élément, et rien d'autre ne diffère. Le document en échec signale aussi PEPPOL-EN16931-R051 treize fois, une fois pour chaque montant du total de taxe, des totaux monétaires et de la ligne : cette règle Peppol exige que chaque currencyID soit égal au code de devise du document, et sans code à comparer, même les attributs GBP corrects échouent. Ajouter l'élément lève les quatorze constats.
Ce que le validateur a signalé
- La facture en erreur signale BR-05 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 de la même façon aux documents UBL
InvoiceetCreditNote; l'élément a le même nom et la même position dans les deux. Lors d'un essai, un avoir sans cet élément a signaléBR-05etPEPPOL-EN16931-R051sur chaque montant, exactement comme la facture. - Tant que le code manque,
BR-CO-15n'a pas de devise du document pour trouver le total de TVA et passe quels que soient les totaux. Lors d'un essai avec un total TVA comprise trop élevé d'une livre,BR-CO-15est resté muet, et parmi les contrôles des totaux seulBR-CO-16a signalé quelque chose. Validez à nouveau après avoir ajouté le code, avant de vous fier aux totaux. - Écrire la devise dans
cbc:TaxCurrencyCodeà la place n'aide pas. Cet élément déclare une devise de comptabilisation de la TVA distincte ; lors d'un essai, il a laissé en placeBR-05et chaque constatPEPPOL-EN16931-R051, et a ajoutéPEPPOL-EN16931-R054etPEPPOL-EN16931-R055.
Règles liées
- BR-CL-04 vérifie que le code de devise, une fois présent, est un code ISO 4217 valide
- PEPPOL-EN16931-R051 compare le currencyID de chaque montant à ce code, et échoue sur chaque montant tant qu'il manque
- BR-CO-15 trouve le total de TVA grâce à la devise du document : il ne peut donc pas contrôler le total TVA comprise tant que ce code n'existe pas
- BR-CL-03 contrôle le code de devise écrit sur chaque montant
- 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-05 (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.

