Sur cette page
La réponse courte
PEPPOL-EN16931-P0109 échoue pour chaque cac:TaxCategory qui porte VATEX-EU-F alors que son cbc:ID n'est pas E. Sous le régime de la marge pour les biens d'occasion, le revendeur acquitte la TVA sur sa marge et n'en fait apparaître aucune sur la facture ; la liste VATEX associe le code à la catégorie exonérée, et Peppol impose cette association.
L'exemple enregistré vend une bibliothèque d'occasion et code la vente O, non soumise à la TVA, avec le code du régime de la marge à côté. Une vente sous le régime de la marge entre dans le champ de la TVA, si bien que O la décrit mal, même si la facture ne montre aucune TVA.
Ce que la règle vérifie
Chaque cac:TaxCategory dont le code d'exonération, mis en majuscules, vaut VATEX-EU-F doit avoir E pour catégorie, sans espaces de bord. La ventilation O enregistrée est le seul constat, car la facture en échec satisfait par ailleurs la catégorie O : sa ligne n'a pas de taux et son vendeur pas d'identifiant TVA.
Changer la seule lettre ne suffit pas. Lors d'un essai, passer la ventilation et la ligne enregistrées de O à E a effacé cette règle et fait apparaître BR-48 (la ventilation exige un taux), BR-E-02 (l'identifiant TVA du vendeur) et BR-E-05 (le taux de la ligne doit valoir 0).
Appliquer le taux zéro à la vente échoue aussi. Lors d'un essai, l'exemple corrigé avec sa ventilation et sa ligne en Z a été signalé par cette règle et par BR-Z-10, qui interdit tout motif d'exonération sur une ventilation au taux zéro.
L'association est tout ce que la règle contrôle. Lors d'un essai, VATEX-EU-O à la place de VATEX-EU-F a fait réussir toutes les étapes au document en échec, ce qui n'est juste que si la vente est réellement hors du champ de la TVA.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-121 | Code du motif d'exonération de TVA | cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReasonCode |
| BT-118 | Code de catégorie de TVA | cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID |
| BT-31 | Identifiant à la TVA du vendeur | cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID |
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 ventes sans TVA sur la facture sont associées par défaut à
O, et l'indicateur du régime de la marge ne fixe que le code d'exonération. - Un système de magasin ou de caisse qui gère le régime de la marge n'a pas de catégorie exonérée, si bien que les ventes sous ce régime partent comme hors du champ ou au taux zéro.
- Le code du régime de la marge vient de la fiche article, tandis que la catégorie vient du client ou du montant de TVA de la facture.
Comment corriger le document
- Traitez une vente sous le régime de la marge comme exonérée dans la facture électronique : catégorie
Edans la ventilation et sur chaque ligne de biens d'occasion, avec le taux0aux deux endroits, et gardezVATEX-EU-F. - Indiquez l'identifiant TVA du vendeur dans
cac:PartyTaxScheme.BR-E-02exige un identifiant fiscal du vendeur sur une facture comportant une ligne exonérée, et un revendeur qui applique le régime de la marge est identifié à la TVA : c'est donc son identifiant TVA qu'il faut indiquer. - N'affichez aucune TVA sur la marge : le montant de taxe de la ventilation reste
0.00, et le code d'exonération indique à l'acheteur pourquoi. - Lorsqu'une facture mêle des articles sous le régime de la marge et des articles taxés normalement, donnez à chaque catégorie sa propre ventilation.
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 vente sous le régime de la marge codée non soumise à la TVA, O, sans taux
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>O</cbc:ID>
<cbc:TaxExemptionReasonCode>VATEX-EU-F</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Margin scheme - Second-hand goods</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<!-- totals and the start of the invoice line omitted from this fragment -->
<cac:Item>
<cbc:Name>Second-hand bookcase</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>O</cbc:ID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>Fragment de la facture corrigée : la même vente en catégorie E, avec le taux 0
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>E</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cbc:TaxExemptionReasonCode>VATEX-EU-F</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Margin scheme - Second-hand goods</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<!-- totals and the start of the invoice line omitted from this fragment -->
<cac:Item>
<cbc:Name>Second-hand bookcase</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>E</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>Dans la facture en échec, la ventilation et la ligne de la bibliothèque sont en catégorie O sans taux, et le vendeur n'a pas d'identifiant TVA. La facture corrigée a E avec le taux 0 aux deux endroits et l'identifiant TVA du vendeur GB123456789. VATEX-EU-F et son texte de motif sont identiques dans les deux, et le document en échec ne signale que cette règle.
Ce que le validateur a signalé
- La facture en erreur signale PEPPOL-EN16931-P0109. 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 à UBL
InvoiceetCreditNote. Lors d'un essai, un avoir portantVATEX-EU-Fdans une ventilation au taux zéro a signalé cette règle avecBR-Z-10. - Signalée par l'étape Peppol ; dans l'étape EN 16931,
BR-CL-22confirme seulement queVATEX-EU-Ffigure sur la liste VATEX. - Dans une ventilation exonérée, le code n'a pas besoin d'un texte de motif à côté : lors d'un essai, l'exemple corrigé sans son texte a réussi toutes les étapes. Envoyer les deux, comme le fait l'exemple, est permis.
Règles liées
- PEPPOL-EN16931-P0108 applique la même association à VATEX-EU-D pour les moyens de transport d'occasion
- PEPPOL-EN16931-P0111 lie le code du régime de la marge pour les antiquités, VATEX-EU-J, à la catégorie E
- BR-E-02 exige un identifiant fiscal du vendeur, que la facture corrigée donne sous forme d'identifiant TVA
- BR-Z-10 ajoute son propre constat lorsqu'une vente sous le régime de la marge est codée au taux zéro avec ce code
- Parcourir toutes les règles de la référence
- Contexte (en anglais) : How Peppol invoice validation actually works
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-28.1 : source vérifiée le 2026-09-28, explication mise à jour le 2026-09-28.
La définition officielle de PEPPOL-EN16931-P0109 (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.

