Counterfoil rule note
Quoted from a public specification. This page is not a validator, and it is not tax, legal, or accounting advice.
An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "Exempt from VAT" shall contain exactly one VAT breakdown (BG-23) with the VAT category code (BT-118) equal to "Exempt from VAT".
Source: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-E-01/
Peppol BIS Billing 3.0, May 2026 release, EN 16931 model bound to UBL
Severity note: fatal, from the Flag column of the Peppol BIS Billing 3.0 UBL rules index retrieved 2026-10-17.
If a line, a document allowance, or a document charge uses the VAT category "Exempt from VAT", the invoice must contain exactly one VAT breakdown with that same category. The published UBL test compares the code to E.
Add one VAT breakdown (BG-23) with category code E, and do not add a second E breakdown.
Illustration of the condition in the official statement. Not an example published by the source.
Fails the stated condition. A line, allowance, or charge uses VAT category code E, and the VAT breakdown has no E category or has two.
Passes the stated condition. One of those uses E, and the VAT breakdown has exactly one E category.
Copied from the source. Not reimplemented on this page.
/ubl:Invoice | /cn:CreditNote
((exists(//cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'E']) or exists(//cac:ClassifiedTaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'E'])) and (count(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'E']) = 1)) or (not(//cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'E']) and not(//cac:ClassifiedTaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'E']))
All rule notes · JSON · Markdown · llms.txt · Invoice page · Privacy