Counterfoil rule note
Quoted from a public specification. This page is not a validator, and it is not tax, legal, or accounting advice.
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.
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.
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 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.
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