The text of BR-CO-09 in the EN 16931 Schematron (validation-1.3.17), severity fatal: “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’.”
It covers three numbers: yours (BT-31), your tax representative's if you have one (BT-63) and the customer's (BT-48). Greece is the exception: it may use EL instead of GR.

The rules that require the number
BR-CO-09 looks at the format. These others check that the number is there, and depend on the VAT category of the lines:
| Rule | When it applies | Text |
|---|---|---|
| BR-CO-26 | Always | In order for the buyer to automatically identify a supplier, the Seller identifier (BT-29), the Seller legal registration identifier (BT-30) and/or the Seller VAT identifier (BT-31) shall be present. |
| BR-S-02 | Standard-rate lines | An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Standard rated" 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). |
| BR-AE-02 | Reverse charge | An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) 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). |
| BR-IC-02 | Intra-community supply | An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Intra-community supply" shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48). |
All four are fatal. Note the difference: a standard-rate sale only needs your number; a reverse-charge or intra-community sale needs the customer's too.
What Odoo checks
Before generating the file, Odoo checks that your company's VAT number and the customer's start with two letters. If not, it warns with “The VAT of the %s should be prefixed with its country code.”, with “supplier” or “customer”. On Odoo 17 the check only runs for three formats, Peppol BIS, XRechnung and NLCIUS (the Dutch format); on Odoo 18, 19 and 20 it sits in the shared EN 16931 layer.
The check only looks for letters in front. Whether they are the right country, or whether the number is valid, is not something this rule checks.
How to write it in Odoo
- Right
- The number as each country's VAT register publishes it, with its two letters in front: DE for Germany, FR for France, BE for Belgium, NL for the Netherlands.
- Wrong
- The number with no letters, with spaces or dots inside, or with another country's prefix.
- Greece
- EL in front, not GR: the exception the rule itself states.
With our XRechnung and ZUGFeRD module

On Odoo 18, 19 and 20, with the FlexigoTech Cloud subscription, every XRechnung and every ZUGFeRD EN 16931 the module generates is validated against the KoSIT rules, which include the EN 16931 ones: a VAT number without prefix shows as BR-CO-09 under Validation Errors and the invoice is not marked Ready to send. On Odoo 17, the published version does not validate.
What to fix
- Open the record the message names: your company (supplier) or the customer (customer).
- Type the VAT number with the country prefix, no spaces.
- For reverse charge or a sale to another EU country, check the customer's number as well.
- Generate the file again.
Keep reading
Checked in the module's source code (version 17.0 and 20.0) and the linked sources
Sources
- github.com/odoo/odoo/blob/6f00fdadb875342de2d14a179f25431f93cd63c9/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/4d2d4b5895db70596863df941d9a1f0beeb117f8/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/account_edi_ubl_
- Module source code: flexigo_germany_xrechnung 20.0 (446f2f68): models/xrechnung_cloud.py
- Module source code: flexigo_germany_xrechnung 17.0 (ad05de8f): __manifest__.py
- github.com/ConnectingEurope/eInvoicing-EN16931/releases/tag/validation-1.3.17
