Aller au contenu

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

BR-CO-04 : Ajouter le code de catégorie de TVA à chaque ligne de facture

Chaque ligne a besoin de cac:Item/cac:ClassifiedTaxCategory/cbc:ID sous le régime fiscal VAT, qui donne la catégorie de TVA de l'article.

EN 16931Erreur : le document n'est pas valideTVALignes et prix

Sur cette page

La réponse courte

BR-CO-04 échoue pour chaque cac:InvoiceLine (ou cac:CreditNoteLine) dont l'article n'a pas de cac:ClassifiedTaxCategory avec un cbc:ID sous le régime fiscal VAT. Ajoutez cbc:ID comme premier enfant de cac:Item/cac:ClassifiedTaxCategory, avec la catégorie de TVA dans laquelle la ligne a été taxée : Z pour la ligne au taux zéro de l'exemple enregistré.

Une ligne sans catégorie sort aussi de sa ventilation de la TVA. La ventilation inclut toujours le montant de la ligne, si bien que le contrôle de la base imposable de cette catégorie échoue en même temps.

Ce que la règle vérifie

La règle s'exécute une fois par ligne, et l'emplacement du constat est la ligne. Elle cherche dans cac:Item un cac:ClassifiedTaxCategory dont le cac:TaxScheme/cbc:ID vaut VAT, sans tenir compte de la casse ni des espaces qui l'entourent, et passe lorsque cette catégorie a un élément cbc:ID.

Une catégorie sous un autre régime fiscal ne compte pas. Lors d'un essai, une ligne dont la catégorie avait le régime fiscal GST a été signalée par cette règle.

Un cbc:ID présent mais vide n'est pas détecté ici. Lors d'un essai, un code vide sur une ligne au taux normal a été signalé par BR-CL-18 et PEPPOL-EN16931-R008 à la place, avec BR-S-01 et BR-S-08.

Une ligne sans aucun cac:ClassifiedTaxCategory fait aussi échouer cette règle. Lors d'un essai, elle a en outre signalé UBL-SR-48, qui demande exactement une catégorie de taxe classifiée par ligne.

TermeSignificationÉlément UBL
BG-25Ligne de facturecac:InvoiceLine (cac:CreditNoteLine in a credit note)
BT-151Code de catégorie de TVA de l'article facturécac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID (cac:CreditNoteLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID in a credit note)

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 :

  • Les articles sans code fiscal dans le référentiel produits sont exportés avec une catégorie de taxe vide au lieu d'être bloqués.
  • La catégorie de la ligne n'est écrite que lorsqu'elle diffère d'une valeur par défaut du document, si bien que les lignes de la catégorie par défaut la perdent.
  • Les lignes au taux zéro ou exonérées sont traitées comme si elles ne portaient pas de TVA, et l'export omet leur code de catégorie.
  • Les lignes saisies à la main, comme des services ponctuels ou des ajustements, sont créées sans code fiscal d'article.

Comment corriger le document

  1. Trouvez la catégorie de TVA dans laquelle la ligne a réellement été taxée, à partir du code fiscal de son article ou de la détermination fiscale de cette ligne.
  2. Écrivez-la sous la forme de cbc:ID, premier enfant de cac:ClassifiedTaxCategory, suivi de cbc:Percent (omis pour la catégorie O) et de cac:TaxScheme avec un cbc:ID égal à VAT.
  3. Vérifiez que la ligne relève désormais de la ventilation de même catégorie et de même taux, afin que la base imposable de cette ventilation corresponde de nouveau à ses lignes.
  4. Arrêtez l'export lorsqu'une ligne n'a pas de code fiscal, plutôt que de l'envoyer sans catégorie.

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 ventilation au taux zéro totalise 10.00, mais la ligne 2 a perdu son code de catégorie

<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>
    <!-- tax scheme omitted from this fragment -->
  </cac:TaxCategory>
</cac:TaxSubtotal>

<cac:InvoiceLine>
  <cbc:ID>2</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">10.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example zero-rated item</cbc:Name>
    <cac:ClassifiedTaxCategory>
      <cbc:Percent>0</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 ligne 2 est de nouveau au taux zéro

<cac:InvoiceLine>
  <cbc:ID>2</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">10.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example zero-rated item</cbc:Name>
    <cac:ClassifiedTaxCategory>
      <cbc:ID>Z</cbc:ID>
      <cbc:Percent>0</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:ClassifiedTaxCategory>
  </cac:Item>
  <!-- price omitted from this fragment -->
</cac:InvoiceLine>

La facture corrigée a <cbc:ID>Z</cbc:ID> au début du cac:ClassifiedTaxCategory de la ligne 2 ; rien d'autre ne diffère. Le document en échec signale aussi BR-Z-08, qui exige que la base imposable de la ventilation au taux zéro soit égale aux montants des lignes au taux zéro. Sans catégorie pour la ligne 2, le document n'a aucune ligne au taux zéro : le montant attendu est donc 0.00, contre 10.00 dans la ventilation. BR-Z-01 reste muette, car elle ne s'oppose pas à une ventilation au taux zéro sans rien au taux zéro derrière elle. Rétablir le code efface les deux 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 à Invoice et CreditNote en UBL. Dans un avoir, la ligne est cac:CreditNoteLine ; avec le code retiré de son unique ligne, au taux normal, l'avoir a signalé cette règle avec BR-S-01 et BR-S-08 lors d'un essai.
  • Les constats associés dépendent de la catégorie que la ligne a perdue. Une ligne au taux normal laisse la ventilation au taux normal sans rien derrière elle, ce que BR-S-01 et BR-S-08 détectent toutes deux ; la ligne au taux zéro de cet exemple n'entraîne que BR-Z-08.
  • Signalée par l'étape EN 16931. Une fois un code présent, BR-CL-18 vérifie qu'il s'agit d'un code de catégorie autorisé.
  • Les remises et frais au niveau du document portent leur catégorie dans cac:AllowanceCharge/cac:TaxCategory, que cette règle ne lit pas ; BR-32 couvre les remises.

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-CO-04 (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.