BT-31Seller VAT identifierBT-48Buyer VAT identifierBT-63Seller tax representative VAT identifier
Official rule text
[BR-CO-09] The Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) shall have a prefix in accordance with ISO code ISO 3166-1 alpha-2 by which the country of issue may be identified. Nevertheless, Greece may use the prefix ‘EL’.
Why this error occurs
The seller VAT identifier (BT-31), the seller tax representative VAT identifier (BT-63) and the buyer VAT identifier (BT-48) must start with the ISO 3166-1 alpha-2 code of the issuing country; Greece may use EL. The rule checks the first two characters of cac:PartyTaxScheme/cbc:CompanyID where cac:TaxScheme/cbc:ID is VAT (UBL) or ram:SpecifiedTaxRegistration/ram:ID with schemeID VA (CII). It fires when a national tax number (German Steuernummer, French SIREN) is entered as VAT ID, or the prefix is missing or lowercase.
How to fix it
Enter the VAT identification number as issued, with its two-letter country prefix and without spaces, e.g. DE123456789, ATU12345678, NL123456789B01, EL123456789. A German Steuernummer is not a VAT ID: in UBL put it in a separate cac:PartyTaxScheme with cac:TaxScheme/cbc:ID = FC (BT-32), in CII in ram:SpecifiedTaxRegistration/ram:ID with schemeID="FC". If the party has no VAT ID, omit the VAT element rather than filling it with a placeholder.
Example (valid)
<cac:PartyTaxScheme>
<cbc:CompanyID>DE123456789</cbc:CompanyID>
<cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:PartyTaxScheme>
What the validator checks
Checked element (context):
UBL
//cac:PartyTaxScheme[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']Test (XPath):
( contains( ' 1A AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH EL ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS XI YE YT ZA ZM ZW ',substring(cbc:CompanyID,1,2) ) )CII
//ram:SpecifiedTaxRegistration/ram:ID[@schemeID='VA']Test (XPath):
contains(' 1A AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BQ BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH EL ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SX SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS XI YE YT ZA ZM ZW ', concat(' ', substring(.,1,2), ' '))
Check your invoice
Drop your XML or PDF on the validator and every failed rule is linked to its page here. Free, no account, the file is not stored.
Same check via API:
curl -F file=@invoice.xml https://einvoicechecker.com/v1/validateRelated rules
BR-AE-02An Invoice that contains an Invoice line where the Invoiced item VAT category code is…BR-AE-03An Invoice that contains a Document level allowance where the Document level allowance…BR-AE-04An Invoice that contains a Document level charge where the Document level charge VAT…BR-IC-02An Invoice that contains an Invoice line where the Invoiced item VAT category code is…BR-IC-03An Invoice that contains a Document level allowance where the Document level allowance…BR-IC-04An Invoice that contains a Document level charge where the Document level charge VAT…BR-O-02An Invoice that contains an Invoice line where the Invoiced item VAT category code is…BR-O-03An Invoice that contains a Document level allowance where the Document level allowance…
Frequently asked questions
What does BR-CO-09 mean?
BR-CO-09 is a en 16931 core rule: The Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) shall have a prefix in accordance with ISO code ISO 3166-1 alpha-2 by which the country of issue may be identified. Nevertheless, Greece may use the prefix ‘EL’.
Will my invoice be rejected because of BR-CO-09?
Yes. BR-CO-09 is flagged "fatal"; validators (KoSIT, Peppol access points, the German ZRE/OZG-RE portals) reject the invoice until it is fixed.
Which formats does BR-CO-09 apply to?
Every EN 16931 invoice: XRechnung, ZUGFeRD 2.x / Factur-X (profiles EN 16931, EXTENDED, XRECHNUNG), Peppol BIS Billing 3.0, and national CIUS such as the Dutch NLCIUS or the Italian/Spanish profiles. Syntax: UBL and CII.
Source: EN 16931-1:2017 schematron (CEN TC434, via Peppol BIS 3.0.20). Catalogue generated from the official schematron on 2026-10-14.