Aller au contenu

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

BR-47 : Ajouter le code de catégorie de TVA à chaque ventilation de la TVA

Chaque cac:TaxSubtotal exige un cac:TaxCategory/cbc:ID contenant le code de catégorie de TVA, dans une catégorie de taxe dont le schéma fiscal est VAT.

EN 16931Erreur : le document n'est pas valideTVA

Sur cette page

La réponse courte

BR-47 échoue pour chaque cac:TaxSubtotal dont le cac:TaxCategory n'a pas de cbc:ID, ou dont la catégorie de taxe ne relève pas du schéma fiscal VAT. Ajoutez cbc:ID comme premier enfant de cac:TaxCategory, avec la catégorie des lignes, remises et frais que la ventilation totalise : S dans l'exemple enregistré.

Une ventilation sans code ne correspond à aucune catégorie : la règle de catégorie des lignes qu'elle devrait couvrir se déclenche donc aussi ; ici, c'est BR-S-01.

Ce que la règle vérifie

La règle s'exécute sur chaque cac:TaxSubtotal d'un cac:TaxTotal. Elle est satisfaite lorsque la ventilation a un cac:TaxCategory dont le cac:TaxScheme/cbc:ID vaut VAT et que cette catégorie contient un élément cbc:ID.

Le schéma fiscal est débarrassé de ses espaces et mis en majuscules avant la comparaison : vat a donc été accepté lors d'un essai. Un autre schéma ne l'est pas : une ventilation relevant de GST a signalé cette règle, BR-48 et BR-CO-17, car sa catégorie et son taux n'étaient plus du tout lus comme de la TVA.

Seule la présence de l'élément est testée. Un cbc:ID vide satisfait cette règle, mais lors d'un essai il a été signalé par BR-CL-17 comme code non valide, par PEPPOL-EN16931-R008 comme élément vide, et par BR-S-01.

Omettre tout le cac:TaxCategory n'atteint pas cette règle. UBL en exige un dans chaque ventilation, et lors d'un essai le document a échoué à l'étape XSD à la place.

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
-Schéma fiscal de la catégorie de TVAcac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cac:TaxScheme/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 :

  • Le récapitulatif de TVA n'est indexé que par taux : l'export connaît donc 20% mais pas la catégorie à laquelle ce taux appartient.
  • La catégorie provient d'une table de correspondance des codes fiscaux internes, et un code sans correspondance est écrit comme une valeur vide au lieu d'arrêter l'export.
  • Le schéma fiscal est renseigné à partir d'un type de taxe générique comme GST ou TAX au lieu de la valeur fixe VAT.
  • Le sérialiseur écrit cac:TaxCategory avec seulement cbc:Percent et cac:TaxScheme, selon une structure prévue pour un autre format.

Comment corriger le document

  1. Pour chaque ventilation, trouvez la catégorie de TVA des éléments qu'elle totalise : le cac:ClassifiedTaxCategory/cbc:ID de ses lignes et le cac:TaxCategory/cbc:ID de ses remises et frais au niveau du document.
  2. Écrivez ce code en tant que cbc:ID, premier enfant du cac:TaxCategory de la ventilation, avant cbc:Percent. Utilisez l'un des codes autorisés : S, Z, E, AE, K, G, O, L, M ou B.
  3. Mettez cac:TaxScheme/cbc:ID à VAT dans la même catégorie de taxe.
  4. Faites en sorte qu'un code fiscal sans correspondance arrête l'export, afin qu'aucune ventilation sans catégorie ne soit jamais envoyée.

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 : la ligne au taux normal est correcte, mais sa ventilation n'a pas de code de catégorie

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

<cac:Item>
  <cbc:Name>Example service</cbc:Name>
  <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>

Fragment de la facture corrigée : la ventilation est au taux normal, comme sa ligne

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

La facture corrigée a <cbc:ID>S</cbc:ID> comme premier enfant du cac:TaxCategory de la ventilation ; la facture en échec ne l'a pas, et rien d'autre ne diffère. Le document en échec signale aussi BR-S-01, car sa ligne est au taux normal et, sans le code, aucune ventilation n'indique S. Ajouter le code fait disparaître les deux constats. Les règles de calcul restent silencieuses : le taux et les montants sont toujours présents, et les contrôles du taux normal ne s'exécutent que sur une ventilation codée S.

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 dont le code avait été retiré de la ventilation a signalé les deux mêmes règles.
  • Signalé par l'étape EN 16931 ; l'étape Peppol accepte l'exemple enregistré.
  • La règle qui l'accompagne suit la catégorie des lignes. Lors d'un essai, avec le E retiré d'une ventilation exonérée, les constats ont été cette règle et BR-E-01.
  • L'équivalent au niveau de la ligne est BR-CO-04. Une fois qu'un code de ventilation est présent, BR-CL-17 vérifie qu'il fait partie des codes autorisés.

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