Aller au contenu

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

BR-CL-03 : Utiliser un code de devise ISO 4217 dans chaque attribut currencyID

Le currencyID d'un montant n'est pas un code ISO 4217 à trois lettres. Utilisez le code de la devise de la facture, comme GBP, en majuscules.

EN 16931Erreur : le document n'est pas valideListes de codes

Sur cette page

La réponse courte

BR-CL-03 échoue lorsque l'attribut currencyID d'un montant n'est pas un code de la liste alphabétique ISO 4217. Le constat est localisé sur l'élément de montant ; mettez l'attribut au code à trois lettres de la devise de la facture, la même valeur que cbc:DocumentCurrencyCode.

Le UKP de l'exemple enregistré ressemble à un code pour la livre sterling mais n'en est pas un ; le code ISO est GBP. Deux règles Peppol examinent le même attribut, si bien qu'une seule valeur erronée produit trois constats.

Ce que la règle vérifie

Elle contrôle le currencyID de chaque cbc:Amount, cbc:BaseAmount, cbc:PriceAmount, cbc:TaxAmount, cbc:TaxableAmount et cbc:LineExtensionAmount, ainsi que des autres totaux de cac:LegalMonetaryTotal, où qu'ils apparaissent. Contrairement à la limite de décimales, elle couvre aussi le prix de l'article.

L'attribut est débarrassé des espaces qui l'entourent, puis recherché dans une liste fixe de codes, en respectant la casse. Lors d'un essai, gbp, le code numérique 826, un symbole livre et un attribut vide ont chacun échoué.

Les espaces autour sont tolérés ici mais pas ailleurs. Lors d'un essai, un espace initial avant GBP a passé cette règle et a quand même été signalé par PEPPOL-EN16931-CL007 et PEPPOL-EN16931-R051, qui comparent l'attribut exactement tel qu'il est écrit.

Tout code de la liste passe, y compris un code différent de la devise du document. La correspondance avec la devise de la facture relève de PEPPOL-EN16931-R051.

L'attribut est obligatoire dans le schéma UBL. Lors d'un essai, un montant sans currencyID a échoué à l'étape XSD et cette règle n'a jamais été atteinte.

TermeSignificationÉlément UBL
-Devise d'un montant (l'attribut currencyID)currencyID on each amount element, for example cac:InvoiceLine/cac:Price/cbc:PriceAmount/@currencyID
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 :

  • Une devise est saisie à la main ou conservée dans un champ de texte libre, ce qui produit des valeurs comme UKP ou STG.
  • Les codes de devise sont stockés en minuscules ou sous forme de codes numériques ISO, et écrits tels quels.
  • Chaque type de montant prend sa devise dans une source différente, et l'une d'elles, comme une liste de prix, écrit la devise autrement.
  • Un symbole monétaire issu de la couche d'affichage est utilisé comme valeur de l'attribut.

Comment corriger le document

  1. Servez-vous de l'emplacement du constat pour voir quel montant porte la valeur erronée, puis trouvez où votre mapping remplit son currencyID.
  2. Remplissez chaque currencyID à partir de la même source que cbc:DocumentCurrencyCode, afin que les codes ne puissent pas diverger.
  3. Écrivez le code alphabétique ISO 4217 en majuscules, sans espaces autour. Convertissez les codes numériques, symboles et noms à l'endroit où la valeur entre dans votre système.
  4. Le seul montant qui peut porter un autre code est le total de la TVA dans la devise de comptabilisation de la TVA, dans son propre cac:TaxTotal sans ventilation, et ce code doit correspondre à cbc:TaxCurrencyCode.

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 prix est libellé en UKP

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <!-- item omitted from this fragment -->
  <cac:Price>
    <cbc:PriceAmount currencyID="UKP">12.5</cbc:PriceAmount>
    <cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
  </cac:Price>
</cac:InvoiceLine>

Fragment de la facture corrigée : le prix est en GBP comme tous les autres montants

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <!-- item omitted from this fragment -->
  <cac:Price>
    <cbc:PriceAmount currencyID="GBP">12.5</cbc:PriceAmount>
    <cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
  </cac:Price>
</cac:InvoiceLine>

Seul le currencyID de cbc:PriceAmount diffère : UKP dans la facture en échec, GBP dans la facture corrigée. Trois constats partagent cet emplacement. BR-CL-03 est le contrôle de liste de codes d'EN 16931. PEPPOL-EN16931-CL007 est le contrôle du même attribut par rapport à ISO 4217 à l'étape Peppol, donc une valeur qui n'est pas un code de la liste échoue aux deux. PEPPOL-EN16931-R051 est signalé parce que UKP n'est pas la devise du document GBP ; il se déclencherait même pour un code valide comme EUR. Corriger l'attribut élimine les trois.

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 à UBL Invoice et CreditNote. Lors d'un essai, un avoir avec UKP sur le prix a signalé les trois mêmes règles.
  • La liste est le même instantané ISO 4217 que celui que BR-CL-04 applique à la devise du document, donc un code retiré échoue ici aussi.
  • La règle examine un attribut à la fois. Elle ne compare pas les montants entre eux ni avec la devise du document, donc un mélange de codes valides la passe.

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-CL-03 (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.