Aller au contenu

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

PEPPOL-EN16931-R051 : Utiliser le code de devise de la facture dans le currencyID de chaque montant

Un montant a un currencyID autre que cbc:DocumentCurrencyCode. Tous les montants doivent être dans la devise de la facture, sauf le total de TVA en devise de comptabilisation.

Peppol BIS BillingErreur : le document n'est pas valideChamps de base

Sur cette page

La réponse courte

PEPPOL-EN16931-R051 échoue pour chaque montant dont le currencyID n'est pas exactement la valeur de cbc:DocumentCurrencyCode. L'emplacement du constat est le montant : remplacez son currencyID par la devise de la facture, et assurez-vous que le chiffre est réellement exprimé dans cette devise.

Il existe une exception. Lorsque cbc:TaxCurrencyCode désigne une devise de comptabilisation de la TVA, le total de TVA dans cette devise va dans un second cac:TaxTotal sans ventilation, et ce montant garde sa propre devise.

Ce que la règle vérifie

La règle parcourt chaque élément de montant des types utilisés dans une facture, y compris cbc:PriceAmount et les montants des remises et des frais à tous les niveaux, et compare son currencyID au texte de cbc:DocumentCurrencyCode sous la racine. La comparaison est exacte : la casse et les espaces comptent.

Le cbc:TaxAmount d'un cac:TaxTotal sans cac:TaxSubtotal est ignoré ; c'est là que se place le total de TVA en devise de comptabilisation. Lors d'un essai, une facture en GBP avec un cbc:TaxCurrencyCode à EUR et un second total de taxe de 13.46 EUR a été validée sans erreur.

L'exception dépend de la forme du total de taxe, pas de la devise déclarée. Lors d'un essai, un second total de taxe en EUR qui reprenait la ventilation de la TVA a été signalé par cette règle sur ses trois montants, avec PEPPOL-EN16931-R053 et plusieurs règles de ventilation de la TVA.

Lorsque cbc:DocumentCurrencyCode est absent ou vide, il n'y a rien à quoi comparer, et chaque montant du document est signalé. Le code manquant lui-même relève de BR-05.

Un code absent de la liste ISO 4217 fait aussi échouer cette règle, puisqu'il ne peut pas être égal à une devise de document valide ; les règles de listes de codes BR-CL-03 et PEPPOL-EN16931-CL007 apparaissent alors avec elle.

TermeSignificationÉlément UBL
BT-5Code de devise de la facturecbc:DocumentCurrencyCode
-Devise d'un montant (l'attribut currencyID)currencyID on each amount element, for example cac:InvoiceLine/cac:Price/cbc:PriceAmount/@currencyID
BT-6Code de devise de comptabilisation de la TVAcbc:TaxCurrencyCode
BT-111Montant total de la TVA de la facture dans la devise de comptabilisation (exclu)cac:TaxTotal/cbc:TaxAmount, in the cac:TaxTotal that has no cac:TaxSubtotal

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 :

  • Les prix proviennent d'une liste de prix dans une autre devise que la facture, et l'élément de prix reprend la devise de la liste alors que les totaux utilisent la devise de la facture.
  • La facture est convertie pour l'acheteur, et certains montants sont convertis et réétiquetés, d'autres non.
  • La devise du document est définie par client dans l'en-tête, alors que les attributs currencyID sont codés en dur dans le modèle.
  • La TVA dans une devise locale est envoyée sous forme de copie complète de la ventilation au lieu d'un montant unique en devise de comptabilisation.

Comment corriger le document

  1. Choisissez la devise de la facture et écrivez-la dans cbc:DocumentCurrencyCode.
  2. Exprimez chaque montant dans cette devise. Si un prix provient d'une liste dans une autre devise, convertissez-le avant de construire la ligne ; changer seulement l'attribut laisserait un chiffre faux.
  3. Renseignez chaque currencyID à partir de la devise du document, à un seul endroit de votre mapping.
  4. Si la TVA doit aussi être indiquée dans une devise de comptabilisation locale, ajoutez cbc:TaxCurrencyCode et un second cac:TaxTotal contenant seulement un cbc:TaxAmount dans cette devise, sans cac:TaxSubtotal.

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 : une facture en GBP dont le prix de l'article est en EUR

<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<!-- parties, tax total and monetary totals omitted from this fragment -->

<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="EUR">12.5</cbc:PriceAmount>
    <cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
  </cac:Price>
</cac:InvoiceLine>

Fragment de la facture corrigée : le prix de l'article est en GBP, la devise de la facture

<cac:Price>
  <cbc:PriceAmount currencyID="GBP">12.5</cbc:PriceAmount>
  <cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>

La seule différence est le currencyID du prix de l'article : EUR dans la facture en échec et GBP dans la facture corrigée, sur une facture dont le code de devise est GBP. EUR est un code ISO 4217 valide : les règles de listes de codes restent donc muettes et l'étape EN 16931 passe, ce qui laisse cette règle Peppol comme seul constat. Dans l'exemple enregistré, réétiqueter est la bonne correction, car le prix de 12.5 a toujours été entendu en livres. Un prix réellement exprimé en euros devrait aussi être converti.

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 aussi bien aux documents UBL Invoice qu'aux CreditNote. Lors d'un essai, un avoir avec un prix en EUR sur un document en GBP n'a signalé que cette règle.
  • Elle est signalée par l'étape Peppol. Dans l'exemple enregistré, l'étape EN 16931 passe, car aucune de ses règles ne compare la devise d'un prix d'article à la devise du document.
  • Une mauvaise devise sur le total de TVA qui porte la ventilation concerne aussi EN 16931. Lors d'un essai, EUR à cet endroit a aussi entraîné BR-CO-15, qui ne trouve alors aucun total de TVA dans la devise du document.
  • Un second total de taxe dans une autre devise, envoyé sans cbc:TaxCurrencyCode, n'est pas signalé ici : lors d'un essai, c'est PEPPOL-EN16931-R054 qui l'a signalé.

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 PEPPOL-EN16931-R051 (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.