Counterfoil rule note

BR-IC-12

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

In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Deliver to country code (BT-80) shall not be blank.

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

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

An invoice with a VAT breakdown whose category is "Intra-community supply" must include a deliver-to country code (BT-80) that is not blank. The official message capitalizes "Deliver to country code", and it has no comma before "the Deliver". The published test passes when a VAT breakdown category code K exists and the delivery-location country identification code has a string length greater than 1. It also passes when no VAT breakdown uses K. The negative branch is not(...) and does not call exists. Both branches require the tax scheme to be VAT. The tax-scheme comparison is written cbc:ID)='VAT' with no space before =. The category comparison is normalize-space(.) = 'K' with spaces around =. The official test writes >1 with no space before 1. The stored test keeps it. A K breakdown makes the first exists true, so the test does not also require an intra-community line.

What to change

On an invoice that has a K VAT breakdown, set the deliver-to country code (BT-80) to a value longer than one character.

Illustration

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

Fails the stated condition. A VAT breakdown uses category code K, and the deliver-to country code is missing or one character.

Passes the stated condition. A VAT breakdown uses K, and the deliver-to country code is longer than one character.

Published context and test

Copied from the source. Not reimplemented on this page.

/ubl:Invoice | /cn:CreditNote
(exists(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'K']) and (string-length(cac:Delivery/cac:DeliveryLocation/cac:Address/cac:Country/cbc:IdentificationCode) >1)) or (not(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'K']))

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