PEPPOL-EN16931-P0105:Tax category and exemption reason code do not match
Fix: Invoice Navigator automatically fixes this Invoice compliance issue by updating the relevant XML elements (PEPPOL-EN16931-P0105). Upload your invoice to fix this automatically.
Your invoice has a VAT breakdown where the tax category and the exemption reason code do not match. For example, category "O" (Not subject to VAT) requires exemption code "VATEX-EU-O", but a different code was found.
Engine Classification
Synchronise tax category code and exemption reason code. Category O requires VATEX-EU-O, and vice versa.
Confidence: 95% · Applied automatically in pipeline
What is PEPPOL-EN16931-P0105?
PEPPOL-EN16931-P0105 is a fatal validation rule defined in the Peppol BIS 3.0 specification. It validates the TaxExemptionReasonCode element under TaxSubtotal > TaxCategory in the UBL invoice XML.
When this rule fires, the invoice is rejected by Peppol access points and never reaches the buyer.
Target path: //cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReasonCode
Why This Error Matters
Invoice will be rejected by PEPPOL validators. PEPPOL BIS Billing enforces specific format, type code, and VAT exemption code consistency requirements.
PEPPOL-EN16931-P0105 is a hard failure — the invoice must be corrected and re-sent before it can reach the recipient.
Peppol access points reject invoices where the tax category and exemption code contradict each other. This also affects correct tax reporting for VAT-exempt or out-of-scope transactions.
Invoice Navigator can automatically correct this error in your pipeline. The fix is applied with full audit evidence, so your compliance trail remains intact.
Validator Behavior
- ·Causes invoice rejection
- ·Rejected by PEPPOL Access Points
- ·Error returned: PEPPOL-EN16931-P0105
- ·Specification: Peppol BIS 3.0
How to Fix It
Before / After
<Invoice> <!-- Issue: Tax Category O MUST be used when exemption reason code is VA --> </Invoice>
<Invoice> <!-- Issue resolved per Peppol BIS 3.0 --> </Invoice>
Technical Reference
//cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReasonCodeCommon Causes
- ·VATEX-EU-O exemption code used without category O
- ·Out of scope exemption reason requires category O
- ·BT-121 is VATEX-EU-O but BT-118 is not O
- ·Mismatch between exemption code and VAT category
- ·Not subject to VAT exemption needs category O
Seeing this in production? The API handles PEPPOL-EN16931-P0105 automatically. See the fix response →
Frequently Asked Questions
Your invoice has a VAT breakdown where the tax category and the exemption reason code do not match. For example, category "O" (Not subject to VAT) requires exemption code "VATEX-EU-O", but a different code was found.
Invoice Navigator automatically fixes this Invoice compliance issue by updating the relevant XML elements (PEPPOL-EN16931-P0105). You can also use Invoice Navigator's compliance engine to correct this automatically in your pipeline.
Yes, PEPPOL-EN16931-P0105 is a critical error that will cause invoice rejection. It must be fixed before submission.
Many instances of PEPPOL-EN16931-P0105 can be automatically corrected using Invoice Navigator's compliance engine. The fix is applied in your pipeline with full audit evidence.
Related Content
Last updated: 27 February 2026
Validate your invoice
Drop your XML here to check for PEPPOL-EN16931-P0105
Auto-fix PEPPOL-EN16931-P0105 in seconds
Upload your invoice and we fix this error automatically. Financial fields are never touched.