errorbusinessPeppol BIS 3.0

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.

Severity
Fatal
Rule set
Peppol BIS 3.0
Country
All EU
Fix type
AUTO-FIX
Confidence
95%

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

Failing XML
<Invoice>
  <!-- Issue: Tax Category O MUST be used when exemption reason code is VA -->
</Invoice>
Corrected XML
<Invoice>
  <!-- Issue resolved per Peppol BIS 3.0 -->
</Invoice>

Technical Reference

XPath//cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReasonCode
SpecPeppol BIS 3.0
Operationset_value
StrategySynchronise tax category code and exemption reason code. Category O requires VATEX-EU-O, and vice versa.

Common 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

Share this guide:

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.