Counterfoil rule note

BR-S-01

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-17

Official statement

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 "Standard rated" shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "Standard rated".

Source: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-S-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.

Plain-language reading

If a line, a document allowance, or a document charge uses the VAT category "Standard rated", the VAT breakdown must contain at least one VAT category code equal with "Standard rated". The published test compares that code to S, requires at least one S breakdown in that case, and also requires no S breakdown when no line, allowance, or charge uses S.

What to change

Add a VAT breakdown (BG-23) with category code S. The statement asks for at least one, not exactly one.

Illustration

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 S, and the VAT breakdown has no S category.

Passes the stated condition. One of those uses S, and the VAT breakdown has at least one S category.

Published context and test

Copied from the source. Not reimplemented on this page.

/ubl:Invoice | /cn:CreditNote
((count(//cac:AllowanceCharge/cac:TaxCategory[normalize-space(cbc:ID) = 'S']) + count(//cac:ClassifiedTaxCategory[normalize-space(cbc:ID) = 'S'])) > 0 and count(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'S']) > 0) or ((count(//cac:AllowanceCharge/cac:TaxCategory[normalize-space(cbc:ID) = 'S']) + count(//cac:ClassifiedTaxCategory[normalize-space(cbc:ID) = 'S'])) = 0 and count(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'S']) = 0)

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