Aller au contenu

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

PEPPOL-EN16931-R054 : N'envoyer un total de taxe sans ventilation qu'avec une devise de comptabilisation de la TVA

Un cac:TaxTotal sans cac:TaxSubtotal doit figurer exactement une fois lorsque cbc:TaxCurrencyCode est indiqué, et pas du tout lorsqu'il est absent.

Peppol BIS BillingErreur : le document n'est pas valideTVATotaux

Sur cette page

La réponse courte

PEPPOL-EN16931-R054 compte les éléments cac:TaxTotal placés directement sous la racine qui ne contiennent aucun cac:TaxSubtotal. Si cbc:TaxCurrencyCode est présent, il doit y en avoir exactement un, portant le total de TVA dans la devise de comptabilisation ; sans ce code, il ne doit y en avoir aucun. Dans l'exemple enregistré, un total de taxe en EUR est présent, mais pas le code qui déclare EUR comme devise de comptabilisation : ajoutez donc cbc:TaxCurrencyCode ou supprimez le total en trop.

Laquelle des deux options est la bonne relève d'un fait commercial, que le validateur ne peut pas trancher. Ne gardez le second total que si le vendeur comptabilise réellement la TVA dans cette devise.

Ce que la règle vérifie

La règle s'exécute une fois par document. Un total de taxe est compté lorsqu'il est un enfant direct de la racine et n'a aucun enfant cac:TaxSubtotal ; le total de taxe qui porte la ventilation de la TVA n'est jamais compté.

Le nombre attendu est 1 lorsque cbc:TaxCurrencyCode existe et 0 sinon. La devise du total compté n'est pas examinée ici : un total superflu dans la devise de la facture compte autant qu'un total dans la devise de comptabilisation. Lors d'un essai sans cbc:TaxCurrencyCode, un total GBP en double a été signalé par cette règle et par BR-CO-15.

Deux totaux sans ventilation échouent même s'ils sont tous deux dans la devise déclarée. Lors d'un essai, un total EUR dupliqué à côté d'un cbc:TaxCurrencyCode à EUR n'a signalé que cette règle.

Le total en devise de comptabilisation ne doit pas porter sa propre ventilation. Lors d'un essai, donner au total EUR un cac:TaxSubtotal n'a laissé aucun total sans ventilation : cette règle s'est donc déclenchée, accompagnée de PEPPOL-EN16931-R053 (deux totaux avec ventilation), de PEPPOL-EN16931-R051 (des montants en EUR là où la devise de la facture est exigée) et de BR-S-08.

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)
BG-23Ventilation de la TVAcac:TaxTotal/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 :

  • Le total de TVA converti est écrit dès que l'enregistrement source en contient un, alors que cbc:TaxCurrencyCode dépend d'un paramètre distinct qui est désactivé.
  • Le total de TVA est émis deux fois : une fois dans le total de taxe avec ventilation, et une seconde fois comme total de taxe nu dans la devise de la facture.
  • La devise de comptabilisation est déclarée, mais le sérialiseur n'émet jamais qu'un seul cac:TaxTotal : le montant converti n'apparaît donc jamais.
  • La TVA convertie est ventilée par catégorie comme le total principal, au lieu d'être envoyée comme un montant unique.

Comment corriger le document

  1. Établissez si le vendeur comptabilise la TVA dans une autre devise que celle de la facture.
  2. Si c'est le cas, écrivez ce code de devise dans cbc:TaxCurrencyCode, juste après cbc:DocumentCurrencyCode, et gardez exactement un cac:TaxTotal supplémentaire ne contenant que cbc:TaxAmount, avec ce code comme currencyID.
  3. Sinon, supprimez chaque cac:TaxTotal qui n'a pas de cac:TaxSubtotal. Le total de TVA dans la devise de la facture a sa place dans le total de taxe qui porte la ventilation.
  4. Ne donnez pas de ventilation au total en devise de comptabilisation, et ne l'écrivez pas deux fois.

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 : un total de taxe en EUR sans ventilation, mais aucune devise de comptabilisation de la TVA déclarée

<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<cbc:BuyerReference>BUYER-REF-001</cbc:BuyerReference>
<!-- 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>

Fragment de la facture corrigée : EUR est déclaré comme devise de comptabilisation de la TVA

<cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
<cbc:TaxCurrencyCode>EUR</cbc:TaxCurrencyCode>
<cbc:BuyerReference>BUYER-REF-001</cbc:BuyerReference>
<!-- 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>

La facture corrigée ajoute <cbc:TaxCurrencyCode>EUR</cbc:TaxCurrencyCode> après la devise du document ; les deux totaux de taxe sont identiques dans les deux documents. Le document en échec ne signale que PEPPOL-EN16931-R054. Sans devise de comptabilisation déclarée, BR-53 et PEPPOL-EN16931-R055 n'ont rien à tester, et PEPPOL-EN16931-R051 exclut de son contrôle de devise les totaux de taxe sans ventilation : le montant EUR égaré n'est donc repéré que par cette règle. Supprimer le total EUR aurait aussi permis de passer.

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 aux documents UBL Invoice et CreditNote. Lors d'un essai, un avoir avec un total de taxe en EUR et sans cbc:TaxCurrencyCode n'a signalé que cette règle.
  • Signalée par l'étape Peppol. À côté d'elle apparaissent BR-53 et PEPPOL-EN16931-R055 lorsque la devise de comptabilisation est déclarée mais que son total manque, et PEPPOL-EN16931-R005 lorsque la devise de comptabilisation déclarée est la devise de la facture elle-même.
  • Un document dont le seul cac:TaxTotal n'a pas de ventilation signale cette règle avec BR-CO-18, PEPPOL-EN16931-R053 et la règle de catégorie de ses lignes : ce total unique compte comme un total sans ventilation.

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