Aller au contenu

Ironfang Finance - Référence des règles

BR-05 : Ajouter le code de devise de la facture

Le document n'a pas de cbc:DocumentCurrencyCode, ou il est vide. Indiquez la devise dans laquelle la facture est émise, sous la forme d'un code ISO 4217 à trois lettres.

EN 16931Erreur : le document n'est pas valideChamps de base

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.

TermeSignificationÉlément UBL
BT-5Code de devise de la facturecbc: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 de cbc:DocumentCurrencyCode.

Comment corriger le document

  1. 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.
  2. É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 éventuels cbc:Note ou cbc:TaxPointDate, et avant cbc:TaxCurrencyCode, cbc:AccountingCost et cbc:BuyerReference. Lors d'un essai, l'élément placé après cbc:BuyerReference a échoué à l'étape XSD.
  3. 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.
  4. 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é

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 Invoice et CreditNote ; 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-05 et PEPPOL-EN16931-R051 sur chaque montant, exactement comme la facture.
  • Tant que le code manque, BR-CO-15 n'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-15 est resté muet, et parmi les contrôles des totaux seul BR-CO-16 a 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 place BR-05 et chaque constat PEPPOL-EN16931-R051, et a ajouté PEPPOL-EN16931-R054 et PEPPOL-EN16931-R055.

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.