Counterfoil rule note

BR-O-10

Quoted from a public specification. This page is not a validator, and it is not tax, legal, or accounting advice.

Country
EU
Syntax
UBL
Severity
fatal
Last verified
2026-10-18

Official statement

A VAT breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language).

Source: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-O-10/

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.

Plain-language reading

A VAT breakdown whose category is quoted as " Not subject to VAT" must include a VAT exemption reason code (BT-121) that means " Not subject to VAT", or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language). The official message says "with VAT Category code" and omits "the". Each of the three category names has a single space after the opening quote. It says "or a VAT exemption reason text". The published test is exists(cbc:TaxExemptionReason) or (exists(cbc:TaxExemptionReasonCode) ) with a space before the closing parenthesis. It only checks that one of those two elements exists. It does not compare the text.

What to change

On the O VAT breakdown, provide an exemption reason code that means " Not subject to VAT", or set the exemption reason text to " Not subject to VAT" or the equivalent standard text in another language.

Illustration

Illustration of the condition in the official statement. Not an example published by the source.

Fails the stated condition. A VAT breakdown category code is O and both the exemption reason text and the exemption reason code are absent.

Passes the stated condition. That breakdown includes the exemption reason text " Not subject to VAT" (or the equivalent standard text in another language), or a reason code that means " Not subject to VAT".

Published context and test

Copied from the source. Not reimplemented on this page.

/*/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'O'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']
exists(cbc:TaxExemptionReason) or (exists(cbc:TaxExemptionReasonCode) )

All rule notes · JSON · Markdown · llms.txt · Invoice page · Privacy