Counterfoil rule note

BR-AE-03

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 a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Reverse charge" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).

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

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 document-level allowance uses VAT category "Reverse charge", the invoice must include at least one of the seller VAT identifier (BT-31), the seller tax registration identifier (BT-32), or the seller tax representative VAT identifier (BT-63), and at least one of the buyer VAT identifier (BT-48) or the buyer legal registration identifier (BT-47). The published test looks for an allowance whose category code is AE.

What to change

On an allowance coded AE, send at least one of BT-31, BT-32, or BT-63, and at least one of BT-48 or BT-47.

Illustration

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

Fails the stated condition. A document-level allowance uses category code AE, and every seller identifier named in the rule is missing, or every buyer identifier named in the rule is missing.

Passes the stated condition. An allowance uses AE, at least one of BT-31, BT-32, or BT-63 is present, and at least one of BT-48 or BT-47 is present.

Published context and test

Copied from the source. Not reimplemented on this page.

/ubl:Invoice | /cn:CreditNote
(exists(//cac:AllowanceCharge[cbc:ChargeIndicator=false()]/cac:TaxCategory[normalize-space(cbc:ID) = 'AE'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']) and (exists(//cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID) or exists(//cac:TaxRepresentativeParty/cac:PartyTaxScheme[cac:TaxScheme/(normalize-space(upper-case(cbc:ID)) = 'VAT')]/cbc:CompanyID)) and (exists(//cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme[cac:TaxScheme/(normalize-space(upper-case(cbc:ID)) = 'VAT')]/cbc:CompanyID) or exists(//cac:AccountingCustomerParty/cac:Party/cac:PartyLegalEntity/cbc:CompanyID))) or not(exists(//cac:AllowanceCharge[cbc:ChargeIndicator=false()]/cac:TaxCategory[normalize-space(cbc:ID) = 'AE'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']))

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