Aller au contenu

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

BR-S-01 : Ajouter la ventilation de la TVA au taux normal qu'exigent les lignes, remises ou frais

Si une ligne, une remise ou des frais au niveau du document sont au taux normal, la ventilation de la TVA doit aussi avoir une entrée au taux normal, et l'inverse vaut aussi.

EN 16931Erreur : le document n'est pas valideTVA

Sur cette page

La réponse courte

BR-S-01 échoue lorsque le document utilise la catégorie de TVA S sur une ligne, une remise au niveau du document ou des frais au niveau du document, mais que cac:TaxTotal n'a aucun cac:TaxSubtotal dont le cac:TaxCategory/cbc:ID vaut S. Ajoutez une ventilation au taux normal, une par taux normal utilisé, avec la base imposable et le montant de taxe pour ce taux.

La règle échoue aussi dans l'autre sens : une ventilation au taux normal dans un document où rien n'est au taux normal.

Ce que la règle vérifie

La règle compte la catégorie S à deux endroits. Le premier est chaque cac:ClassifiedTaxCategory et chaque cac:AllowanceCharge/cac:TaxCategory n'importe où dans le document. Le second est cac:TaxCategory dans cac:TaxTotal/cac:TaxSubtotal sous la racine du document. Soit les deux comptes sont supérieurs à zéro, soit les deux sont nuls ; tout autre cas échoue.

Il s'agit uniquement d'un contrôle de présence. Il demande au moins une ventilation au taux normal, donc plusieurs ventilations à différents taux normaux le satisfont, et il ne regarde ni les taux ni les montants. Ceux-ci relèvent de BR-S-08 et BR-S-09.

Dans le cas inverse, une facture dont la seule ligne est au taux zéro mais dont la ventilation indique S signale BR-S-01 avec BR-S-08 et BR-Z-01.

TermeSignificationÉlément UBL
BG-23Ventilation de la TVAcac:TaxTotal/cac:TaxSubtotal
BT-118Code de catégorie de TVAcac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID
BT-151Code de catégorie de TVA de l'article facturécac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID
BT-95Code de catégorie de TVA de la remise au niveau du documentcac:AllowanceCharge[cbc:ChargeIndicator = false]/cac:TaxCategory/cbc:ID
BT-102Code de catégorie de TVA des charges ou frais au niveau du documentcac:AllowanceCharge[cbc:ChargeIndicator = true]/cac:TaxCategory/cbc:ID

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 :

  • La ventilation est construite à partir des seules lignes, et le seul élément au taux normal du document consiste en frais au niveau du document, comme des frais de transport.
  • Les ventilations dont le montant de taxe ou la base imposable est nul sont filtrées avant l'écriture du XML.
  • La ventilation est copiée d'un récapitulatif fiscal qui utilise des codes de taxe internes, et la correspondance vers S manque pour l'un d'eux.
  • Une ligne est marquée S par défaut dans le mapping des articles alors que le récapitulatif fiscal la traite à juste titre dans une autre catégorie, si bien que les deux divergent.
  • Une ventilation au taux normal subsiste d'un modèle alors que le document n'a aucun contenu au taux normal.

Comment corriger le document

  1. Repérez chaque élément au taux normal : les lignes via cac:Item/cac:ClassifiedTaxCategory/cbc:ID, et les éléments cac:AllowanceCharge à la racine via cac:TaxCategory/cbc:ID.
  2. Déterminez quel côté est faux. Si les éléments sont vraiment au taux normal, c'est la ventilation qui manque. S'ils ne le sont pas, corrigez la catégorie là où elle est attribuée dans les données source ; ne changez pas l'étiquette des éléments uniquement pour qu'ils correspondent à la ventilation qui se trouve là.
  3. Pour chaque taux normal, ajoutez un cac:TaxSubtotal avec cbc:TaxableAmount égal aux lignes plus les frais moins les remises à ce taux, cbc:TaxAmount égal à base imposable x taux / 100 arrondi à deux décimales, et une cac:TaxCategory avec cbc:ID égal à S, le cbc:Percent et le schéma fiscal VAT.
  4. Vérifiez que cac:TaxTotal/cbc:TaxAmount est égal à la somme de tous les montants de taxe des ventilations, y compris celle que vous venez d'ajouter.

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 ligne au taux normal, mais la seule ventilation de la TVA est au taux zéro

<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">10.00</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:ID>Z</cbc:ID>
      <cbc:Percent>0</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <!-- note, quantity and other line details omitted from this fragment -->
  <cbc:LineExtensionAmount currencyID="GBP">58.00</cbc:LineExtensionAmount>
  <cac:Item>
    <!-- description, name and item identifiers omitted from this fragment -->
    <cac:ClassifiedTaxCategory>
      <cbc:ID>S</cbc:ID>
      <cbc:Percent>20</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:ClassifiedTaxCategory>
  </cac:Item>
  <!-- price omitted from this fragment -->
</cac:InvoiceLine>

Fragment de la facture corrigée : la ventilation au taux normal est présente à côté de celle au taux zéro

<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">58.50</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="GBP">11.70</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:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">10.00</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:ID>Z</cbc:ID>
      <cbc:Percent>0</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>

La facture corrigée comporte le cac:TaxSubtotal complet au taux normal (58.50 de base imposable, 11.70 de taxe, S à 20) qui manque à la facture en échec ; rien d'autre ne diffère. Le document en échec signale aussi BR-CO-14, car son total de TVA reste 11.70 alors que la seule ventilation restante totalise 0.00. Rétablir la ventilation lève les deux. Outre la ligne 1 montrée ici, la facture a une seconde ligne au taux normal, une remise au niveau du document au taux normal et des frais au niveau du document au taux normal.

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 ; la règle est évaluée à la racine de l'un comme de l'autre. Un avoir dont la ventilation au taux normal est retirée signale les deux mêmes règles.
  • BR-CO-14 est un effet secondaire de l'exemple enregistré, et non une partie de cette règle. Avec le total de TVA et les totaux du document réduits pour correspondre à la ventilation manquante, le document signale BR-S-01 seul.
  • Les autres catégories de TVA ont leurs propres règles de ce type. BR-Z-01 est celle du taux zéro et elle est plus stricte : elle demande exactement une 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-20.

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