Aller au contenu

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

BR-53 : Ajouter le total de TVA dans la devise de comptabilisation de la TVA

Lorsque cbc:TaxCurrencyCode est indiqué, le document exige un second total de taxe dont le cbc:TaxAmount est exprimé dans cette devise.

EN 16931Erreur : le document n'est pas valideTVATotaux

Sur cette page

La réponse courte

BR-53 échoue lorsque le document déclare une devise de comptabilisation de la TVA dans cbc:TaxCurrencyCode et qu'aucun cac:TaxTotal/cbc:TaxAmount n'a cette devise dans son currencyID. Ajoutez directement sous la racine un second cac:TaxTotal qui ne contient qu'un cbc:TaxAmount, avec currencyID égal à la devise de comptabilisation et le total de TVA converti dans cette devise.

Si le vendeur comptabilise la TVA dans la devise de la facture, la correction va dans l'autre sens : retirez cbc:TaxCurrencyCode. Il est facultatif et n'a sa place que sur un document dont la TVA doit être comptabilisée dans une devise autre que celle dans laquelle il est émis.

Ce que la règle vérifie

La règle s'exécute une fois sur la racine du document. Pour le cbc:TaxCurrencyCode qui s'y trouve, elle cherche un cbc:TaxAmount qui est un enfant direct d'un cac:TaxTotal et dont le currencyID est le même code. Les montants de taxe à l'intérieur d'un cac:TaxSubtotal ne comptent pas, et l'ordre des totaux de taxe n'a pas d'importance.

Un document sans cbc:TaxCurrencyCode ne donne rien à chercher à la règle : il passe donc.

Seule la devise est comparée. Le montant n'est pas examiné : aucune règle ne convertit le total de TVA de la facture ni ne vérifie un taux de change, et lors d'un essai, un total en devise de comptabilisation de 0.00 à côté de 5.00 de TVA dans la devise de la facture a réussi toutes les étapes.

Le code et le currencyID sont comparés exactement tels qu'ils sont écrits. Lors d'un essai, un cbc:TaxCurrencyCode avec des espaces autour de EUR, à côté d'un total correct en EUR, a signalé cette règle et rien d'autre. Un eur en minuscules a en plus entraîné BR-CL-05, la règle de liste de codes des devises, et PEPPOL-EN16931-R055.

TermeSignificationÉlément UBL
BT-6Code de devise de comptabilisation de la TVAcbc:TaxCurrencyCode
BT-111Montant total de la TVA de la facture dans la devise de comptabilisationcac:TaxTotal/cbc:TaxAmount (in the tax total without cac:TaxSubtotal, currencyID equal to BT-6)
BT-110Montant total de la TVA de la facturecac:TaxTotal/cbc:TaxAmount (in the tax total that holds the VAT breakdown)

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 code de la devise de comptabilisation est renseigné sur chaque document à partir d'un paramètre de l'entreprise, alors que le total de TVA converti n'est écrit que lorsqu'une conversion a réellement été faite.
  • Le sérialiseur écrit un seul cac:TaxTotal et n'a pas de place pour un second : le chiffre converti est donc perdu.
  • Le montant converti est écrit avec la devise de la facture, ou une autre devise, dans son currencyID. Lors d'un essai avec la devise de la facture, BR-CO-15 est venu en plus, car il attend exactement un total de TVA dans la devise de la facture.
  • Le code est écrit en minuscules ou avec des espaces de remplissage, si bien qu'il ne correspond plus au currencyID du montant.

Comment corriger le document

  1. Décidez si le document a vraiment besoin d'une devise de comptabilisation de la TVA. Si le vendeur comptabilise la TVA dans la devise de la facture, retirez cbc:TaxCurrencyCode et arrêtez-vous là.
  2. Sinon, prenez le total de TVA de la facture, le cbc:TaxAmount du cac:TaxTotal qui contient la ventilation, et convertissez-le dans la devise de comptabilisation au taux qu'exige votre comptabilité de TVA. Le taux vient de vos règles comptables ; le validateur ne le vérifie pas.
  3. Ajoutez directement sous la racine un second cac:TaxTotal ne contenant que cbc:TaxAmount, avec currencyID égal à la valeur de cbc:TaxCurrencyCode et le montant converti arrondi à deux décimales. Une troisième décimale entraîne UBL-DT-01. Ne donnez à ce total aucun cac:TaxSubtotal : la ventilation reste dans la devise de la facture.
  4. Écrivez le code et le currencyID sous la forme du même code ISO 4217 en majuscules sans espaces, et gardez le montant converti du même côté de zéro que le total de TVA de la facture, ce que vérifie PEPPOL-EN16931-R055.

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 : EUR est déclaré comme devise de comptabilisation, mais le seul total de taxe est en GBP

<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<cbc:TaxCurrencyCode>EUR</cbc:TaxCurrencyCode>
<!-- buyer reference and parties omitted from this fragment -->
<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
  <!-- VAT breakdown omitted from this fragment -->
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
  <!-- monetary totals omitted from this fragment -->
</cac:LegalMonetaryTotal>

Fragment de la facture corrigée : un second total de taxe indique la TVA en EUR

<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<cbc:TaxCurrencyCode>EUR</cbc:TaxCurrencyCode>
<!-- buyer reference and parties omitted from this fragment -->
<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
  <!-- VAT breakdown omitted from this fragment -->
</cac:TaxTotal>
<cac:TaxTotal>
  <cbc:TaxAmount currencyID="EUR">5.80</cbc:TaxAmount>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
  <!-- monetary totals omitted from this fragment -->
</cac:LegalMonetaryTotal>

La facture corrigée a un second cac:TaxTotal qui ne contient qu'un cbc:TaxAmount de 5.80 en EUR ; la facture en échec déclare EUR comme devise de comptabilisation et n'a aucun montant dans cette devise. Deux règles Peppol signalent la même lacune. PEPPOL-EN16931-R054 se déclenche car une devise de comptabilisation déclarée exige exactement un total de taxe sans ventilation et il n'y en a aucun. PEPPOL-EN16931-R055 se déclenche car il compare les signes des deux totaux de TVA et ne trouve pas celui en EUR. Rétablir le total en EUR fait disparaître les trois constats. Le montant de 5.80 est un chiffre d'illustration : rien ne le vérifie par rapport aux 5.00 en GBP.

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 à Invoice et à CreditNote en UBL. Lors d'un essai, un avoir déclarant EUR sans total de taxe en EUR a signalé les trois mêmes règles.
  • Signalé par l'étape EN 16931. L'étape Peppol ajoute PEPPOL-EN16931-R054 et PEPPOL-EN16931-R055 pour la même lacune, et PEPPOL-EN16931-R005 lorsque la devise de comptabilisation déclarée est la devise de la facture.
  • Le montant en devise de comptabilisation échappe à l'exigence Peppol selon laquelle chaque currencyID doit être égal à la devise de la facture, car il se trouve dans un total de taxe sans ventilation. Une ventilation dans la devise de comptabilisation n'est pas acceptée ; ce cas est décrit sous PEPPOL-EN16931-R054.
  • Un cbc:TaxCurrencyCode qui n'est pas un code ISO 4217 valide est signalé par BR-CL-05.

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-53 (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.