Le texte de BR-CO-09 dans le Schematron EN 16931 (validation-1.3.17), gravité fatale : « 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’. »
Elle concerne trois numéros : le vôtre (BT-31), celui de votre représentant fiscal si vous en avez un (BT-63) et celui du client (BT-48). La Grèce fait exception : elle peut utiliser EL au lieu de GR.

Les règles qui exigent le numéro
BR-CO-09 vérifie le format. Les autres vérifient que le numéro est présent, et dépendent de la catégorie de TVA des lignes :
| Règle | Quand elle s'applique | Texte |
|---|---|---|
| BR-CO-26 | Toujours | 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 | Lignes au taux normal | 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 | Autoliquidation | 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 | Livraison intracommunautaire | 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). |
Les quatre sont fatales. Remarquez la différence : pour une vente au taux normal, seul votre numéro est nécessaire ; pour une autoliquidation ou une livraison intracommunautaire, celui du client l'est aussi.
Ce que vérifie Odoo
Avant de générer le fichier, Odoo contrôle que le numéro de TVA de votre société et celui du client commencent par deux lettres. Sinon, il affiche l'avertissement « The VAT of the %s should be prefixed with its country code. », avec « supplier » ou « customer ». Sur Odoo 17, ce contrôle ne s'exécute que pour trois formats, Peppol BIS, XRechnung et NLCIUS (le format néerlandais) ; sur Odoo 18, 19 et 20, il se trouve dans la couche commune EN 16931.
Le contrôle vérifie seulement la présence de lettres en tête. Que ces lettres correspondent au bon pays, ou que le numéro soit valide, ce n'est pas ce que cette règle contrôle.
Comment le saisir dans Odoo
- Bien
- Le numéro tel que le publie le registre de TVA de chaque pays, avec ses deux lettres en tête : DE pour l'Allemagne, FR pour la France, BE pour la Belgique, NL pour les Pays-Bas.
- Mal
- Le numéro sans lettres, avec des espaces ou des points au milieu, ou avec le préfixe d'un autre pays.
- Grèce
- EL en tête, et non GR : l'exception que la règle elle-même prévoit.
Avec notre module XRechnung et ZUGFeRD

Sur Odoo 18, 19 et 20, avec l'abonnement FlexigoTech Cloud, chaque XRechnung et chaque ZUGFeRD EN 16931 généré par le module est validé avec les règles de KoSIT, qui incluent celles d'EN 16931 : un numéro de TVA sans préfixe apparaît comme BR-CO-09 dans Validation Errors et la facture n'est pas marquée Ready to send. Sur Odoo 17, la version publiée ne valide pas.
Que corriger
- Ouvrez la fiche que mentionne le message : votre société (supplier) ou le client (customer).
- Saisissez le numéro de TVA avec le préfixe du pays, sans espaces.
- Pour une autoliquidation ou une vente vers un autre pays de l'UE, vérifiez aussi le numéro du client.
- Générez de nouveau le fichier.
À lire aussi
Vérifié dans le code du module (version 17.0 et 20.0) et dans les sources citées
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_
- Code du module : flexigo_germany_xrechnung 20.0 (446f2f68): models/xrechnung_cloud.py
- Code du module : flexigo_germany_xrechnung 17.0 (ad05de8f): __manifest__.py
- github.com/ConnectingEurope/eInvoicing-EN16931/releases/tag/validation-1.3.17
