Counterfoil rule note
Quoted from a public specification. This page is not a validator, and it is not tax, legal, or accounting advice.
Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT.
Source: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-48/
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-18.
Each VAT breakdown (BG-23) must have a VAT category rate (BT-119), except if the Invoice is not subject to VAT. The message says "not subject to VAT" with no quotes and no hyphen. It says "shall have" and starts with "Each". It ends with a period. The context is a tax subtotal. The published test checks that a percent exists under a VAT tax scheme, or that the category id under that scheme is O. Both tax-scheme comparisons are ='VAT' with no space before =. The category comparison is ='O' with no space before =. The percent branch calls exists. The O branch does not. The test is not a percent equal to 0, and it is not not(cbc:Percent).
On each VAT breakdown, send a VAT category rate (BT-119) under a VAT tax scheme, or use category code O when the invoice is not subject to VAT.
Illustration of the condition in the official statement. Not an example published by the source.
Fails the stated condition. A tax subtotal under a VAT tax scheme has no percent, and its category id is not O.
Passes the stated condition. That tax subtotal has a percent under a VAT tax scheme, or its category id is O.
Copied from the source. Not reimplemented on this page.
cac:TaxTotal/cac:TaxSubtotal
exists(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:Percent) or (cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/normalize-space(cbc:ID)='O')
All rule notes · JSON · Markdown · llms.txt · Invoice page · Privacy