Aller au contenu

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

BR-CO-18 : Ajouter au bloc de taxes la ventilation de la TVA manquante

Chaque facture et chaque avoir a besoin d'au moins une ventilation de la TVA : un TaxSubtotal dans un TaxTotal au niveau du document.

EN 16931Erreur : le document n'est pas valideTVATotaux

Sur cette page

La réponse courte

BR-CO-18 échoue lorsque le document n'a aucun cac:TaxSubtotal dans un cac:TaxTotal placé directement sous la racine. Ajoutez un cac:TaxSubtotal pour chaque catégorie et chaque taux de TVA utilisés sur les lignes et sur les remises et frais au niveau du document, avec sa base imposable, son montant de taxe et sa cac:TaxCategory.

Un cac:TaxTotal qui ne porte que le cbc:TaxAmount global ne suffit pas, même lorsque ce montant est juste.

Ce que la règle vérifie

Il s'agit d'un contrôle de présence sur la racine du document : au moins un cac:TaxTotal/cac:TaxSubtotal doit exister. Il n'examine pas le contenu de la ventilation ; les montants et la catégorie sont vérifiés par d'autres règles.

Le XSD accepte un cac:TaxTotal sans aucun cac:TaxSubtotal, ainsi qu'un document sans aucun cac:TaxTotal : l'omission est donc signalée d'abord ici, et non par l'étape du schéma.

Un document sans TVA à payer a tout de même besoin d'une ventilation. Une facture exonérée avec un total de TVA de 0.00 échoue à cette règle dès que son cac:TaxSubtotal est retiré.

TermeSignificationÉlément UBL
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 mapping écrit le total de la TVA à partir d'un champ d'en-tête et ne construit jamais la ventilation par catégorie.
  • La ventilation n'est générée que lorsque le montant de TVA est supérieur à zéro, si bien que les documents au taux zéro, exonérés ou en autoliquidation la perdent.
  • Le regroupement par catégorie de TVA dans la source ne renvoie aucune ligne, par exemple parce qu'aucun code de taxe n'est attribué aux lignes, et la boucle qui écrit cac:TaxSubtotal n'émet rien.
  • La ventilation est écrite dans un cac:TaxTotal sous chaque ligne au lieu du cac:TaxTotal au niveau du document. Seules les ventilations placées directement sous la racine comptent.

Comment corriger le document

  1. Regroupez les montants nets des lignes, les remises au niveau du document et les frais au niveau du document par code de catégorie de TVA et par taux.
  2. Pour chaque groupe, écrivez un cac:TaxSubtotal avec cbc:TaxableAmount, cbc:TaxAmount et une cac:TaxCategory contenant cbc:ID, cbc:Percent et cac:TaxScheme/cbc:ID à VAT. Certaines catégories exigent aussi un motif d'exonération.
  3. Placez les ventilations dans le cac:TaxTotal qui porte le total de la TVA dans la devise du document, et faites de son cbc:TaxAmount la somme des montants de taxe de la ventilation. BR-CO-14 le vérifie.
  4. Utilisez les catégories de TVA que l'opération comporte réellement. N'ajoutez pas de ventilation pour une catégorie absente des lignes simplement pour satisfaire cette règle.

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 bloc de taxes a un montant mais aucune ventilation

<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
</cac:TaxTotal>

Fragment de la facture corrigée : une ventilation au taux normal pour l'unique ligne de 25.00

<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:ID>S</cbc:ID>
      <cbc:Percent>20</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>

Le document corrigé comporte le cac:TaxSubtotal qui manque au document en échec ; rien d'autre ne diffère. Le document en échec signale aussi BR-S-01, car sa ligne est au taux normal et aucune ventilation au taux normal n'existe, ainsi que deux constats Peppol sur la forme des blocs de taxes : PEPPOL-EN16931-R053, car aucun bloc de taxes ne porte de ventilation, et PEPPOL-EN16931-R054, car un bloc de taxes sans ventilation est présent alors qu'aucune devise de comptabilisation de la TVA n'est déclarée. Rétablir la ventilation lève les quatre 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 aussi bien aux documents UBL Invoice qu'aux CreditNote ; un avoir dont l'unique ventilation a été retirée signale les quatre mêmes constats.
  • La règle de catégorie qui accompagne ce constat dépend des catégories de TVA du document. L'exemple enregistré est au taux normal et signale BR-S-01 ; une facture exonérée signale à la place la règle correspondante de la catégorie exonérée.
  • BR-CO-14 reste muette dans cette situation. Elle ignore un bloc de taxes sans ventilation : le total de la TVA n'est donc comparé à une ventilation qu'une fois celle-ci rétablie.
  • Un élément cac:TaxSubtotal vide ne permet pas de contourner la règle : l'étape XSD le rejette et les étapes suivantes sont ignorées.

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-20.

La définition officielle de BR-CO-18 (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.