Sur cette page
La réponse courte
BR-CL-18 échoue lorsque le cbc:ID du cac:ClassifiedTaxCategory de l'article d'une ligne ne fait pas partie des codes de catégorie de TVA autorisés. Remplacez-le par le code de la catégorie dans laquelle la ligne a réellement été taxée ; dans l'exemple enregistré, la ligne indique SR et le code du taux normal est S.
Tant que la ligne porte un code non reconnu, elle n'appartient à aucune catégorie : la ventilation qui devrait la totaliser ne correspond donc plus, et les règles de catégorie le signalent aussi.
Ce que la règle vérifie
La règle s'exécute sur chaque cbc:ID d'un cac:ClassifiedTaxCategory, qui dans ces documents appartient à l'article de chaque cac:InvoiceLine ou cac:CreditNoteLine. Les ventilations et les remises et frais au niveau du document relèvent de BR-CL-17 à la place.
Elle accepte les dix mêmes codes que la règle de la ventilation : S, Z, E, AE, K, G, O, L, M et B. Les espaces qui entourent la valeur sont retirés, mais la comparaison est sensible à la casse, et un s minuscule sur la ligne a été rejeté lors d'un essai.
Un cbc:ID vide sur la ligne échoue ici, et non au titre de BR-CO-04, qui demande seulement que l'élément existe. Lors d'un essai, il a aussi entraîné PEPPOL-EN16931-R008.
Un code de la liste est accepté même s'il n'est pas la bonne catégorie pour l'article. La cohérence avec la ventilation est testée par les règles de catégorie, pas par celle-ci.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-151 | Code 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 :
- Le code fiscal de l'article issu du référentiel produits, comme
SRouZR, est copié sur la ligne sans traduction. - La ventilation est construite au moyen d'une table de correspondance, mais pas les lignes, si bien que les deux portent des jeux de codes différents.
- Une description comme
Standardou un taux comme20est écrit dans le champ du code. - Une bibliothèque ou un modèle produit le code en minuscules.
Comment corriger le document
- Utilisez l'emplacement du constat pour trouver la ligne et son code actuel.
- Traduisez-le en code autorisé de la catégorie dans laquelle l'article a été taxé, avec la même correspondance que pour la ventilation.
- Vérifiez que la ligne relève désormais d'une ventilation de même catégorie et de même taux, afin que la base imposable de cette ventilation corresponde à ses lignes.
- Rejetez à l'export les codes fiscaux d'article sans correspondance.
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 est codée SR alors que sa ventilation est codée S
<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>
<!-- tax scheme omitted from this fragment -->
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Example service</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>SR</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 ligne utilise le code S du taux normal
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<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>
<!-- price omitted from this fragment -->
</cac:InvoiceLine>La facture en échec a SR dans le cac:ClassifiedTaxCategory/cbc:ID de l'article de la ligne ; la facture corrigée a S, et rien d'autre ne diffère. Deux règles de ventilation se déclenchent aussi, car avec SR sur l'unique ligne, rien dans le document n'est au taux normal alors que la ventilation l'est toujours. BR-S-01 conteste une ventilation au taux normal sans ligne, remise ou frais au taux normal derrière elle. BR-S-08 ne trouve aucune ligne au taux normal à 20 % pour justifier la base imposable de 25.00. Corriger le code efface les trois constats.
Ce que le validateur a signalé
- La facture en erreur signale BR-CL-18, BR-S-01 et BR-S-08. Le document corrigé passe toutes les étapes de validation sans constat.Télécharger le XML en erreurTélécharger le XML corrigé
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 à
InvoiceetCreditNoteen UBL. Dans un avoir, la ligne estcac:CreditNoteLine; avecSRsur sa ligne, l'avoir a signalé les trois mêmes règles lors d'un essai. - Les constats associés dépendent de la catégorie que la ligne aurait dû avoir. Lors d'un essai,
ZRsur la ligne au taux zéro d'une facture mixte a entraînéBR-Z-08à la place. - Si la ventilation porte le même mauvais code, les règles de catégorie se taisent et c'est
BR-CL-17qui est signalée à côté de cette règle. - Signalée par l'étape EN 16931 ; l'exemple enregistré réussit l'étape Peppol.
Règles liées
- BR-CL-17 applique la même liste de codes à la ventilation de la TVA et aux remises et frais au niveau du document
- BR-CO-04 exige le code de catégorie de la ligne que cette règle contrôle
- BR-S-01 se déclenche avec cette règle lorsque la ligne mal codée laisse une ventilation au taux normal sans justification
- BR-S-08 recalcule la base imposable au taux normal sans la ligne mal codée
- Parcourir toutes les règles de la référence
- Contexte (en anglais) : Understanding EN 16931 validation errors
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-CL-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.

