Le texte de la règle, tel qu'il apparaît dans le rapport du validateur (KoSIT le rédige en allemand), est : « Das Element "Buyer reference" (BT-10) muss übermittelt werden. » En français : l'élément Buyer reference doit être transmis. Dans le Schematron de XRechnung 3.0.2 (version v2.6.0 de KoSIT), sa gravité est fatale : ce n'est pas un avertissement, la facture échoue.
Ce qu'elle vérifie et ce qu'elle ne vérifie pas
La règle vérifie seulement que le champ existe et n'est pas vide. Elle ne contrôle pas que la valeur ait un sens : n'importe quel texte la satisfait. En UBL, il s'agit de l'élément cbc:BuyerReference, dans l'en-tête du document.
Peppol BIS, le format utilisé en Belgique ou aux Pays-Bas, est plus souple : la référence de l'acheteur ou celle de la commande suffit, comme l'indique sa règle PEPPOL-EN16931-R003 : « A buyer reference or purchase order reference MUST be provided. » C'est pourquoi une facture qui circule sans problème via Peppol peut déclencher BR-DE-15 lorsque vous la convertissez en XRechnung pour un client allemand.

D'où Odoo tire le BT-10
L'export XRechnung fourni avec Odoo (sans modules tiers) remplit le champ de cette façon :
| Version | Valeur de BT-10 | S'il n'y en a aucune |
|---|---|---|
| Odoo 17 | Le champ Référence de la société cliente. Si son adresse électronique Peppol (EAS) est 0204, son Peppol Endpoint. | Écrit « N/A ». |
| Odoo 18 et 19 | Le champ Référence du contact ou, s'il est vide, celui de sa société. Avec EAS 0204, le Peppol Endpoint. | Écrit « N/A ». |
| Odoo 20 | Identique, mais le schéma et l'identifiant s'appellent Routing ID et Routing Endpoint. Avec Routing ID 0204, le Routing Endpoint. | Écrit « N/A ». |
Avec la XRechnung d'Odoo, BR-DE-15 ne se déclenche jamais, car le champ n'est jamais vide. Mais « N/A » respecte seulement la lettre de la règle. Ce n'est pas la référence qu'attend votre client, et si vous facturez une administration, ce n'est pas son Leitweg-ID. Avant d'envoyer, ouvrez le XML ou l'aperçu et vérifiez ce que contient BT-10.
Lorsque le client est une administration
0204 est le schéma du Leitweg-ID dans la liste des schémas d'adresses électroniques. Si vous indiquez ce schéma sur le contact de l'organisme public et son Leitweg-ID comme identifiant, Odoo le recopie dans BT-10 sans que vous ayez à le saisir à chaque facture. Pour une entreprise privée, la valeur habituelle est la référence demandée, souvent son numéro de commande ou de fournisseur : elle se met dans le champ Référence de sa fiche.
Avec notre module XRechnung et ZUGFeRD
Le module ajoute son propre onglet E-Invoicing dans la fiche client, avec deux champs pour cette donnée : Leitweg-ID (BT-10), utilisé lorsque vous marquez le client comme administration (B2G Partner), et Buyer Reference (BT-10) pour les autres. Si vous marquez le client comme administration et que le Leitweg-ID manque, le module ne génère pas la facture : il s'arrête avec « B2G partner requires a Leitweg-ID (BT-10). ». Si ce n'en est pas une et que la Buyer Reference est vide, le XML part sans BuyerReference, sans remplissage du type « N/A », et c'est là qu'apparaît BR-DE-15.

Sous Odoo 18, 19 et 20, vous le voyez avant tout envoi : avec l'abonnement FlexigoTech Cloud, chaque XRechnung générée est validée avec les règles KoSIT et les erreurs restent sur la facture, dans Validation Errors, une ligne par règle. Une facture avec BR-DE-15 n'est pas marquée Ready to send. La version publiée pour Odoo 17 génère la XRechnung mais ne la valide pas.
Comment corriger
- Si le client est une administration allemande, demandez son Leitweg-ID et renseignez-le sur sa fiche : dans le champ Leitweg-ID de l'onglet E-Invoicing avec notre module, ou comme adresse électronique avec le schéma 0204 dans Odoo.
- S'il s'agit d'une entreprise, demandez quelle référence elle souhaite voir et enregistrez-la sur sa fiche (Buyer Reference avec le module, Référence dans Odoo).
- Générez de nouveau la XRechnung : celle déjà envoyée ne change pas, et si elle a été rejetée, il faut envoyer la version corrigée.
- Vérifiez BT-10 dans le résultat avant de l'envoyer.
À lire aussi
Vérifié dans le code du module (version 17.0 et 20.0) et dans les sources citées
Sources
- Code du module : flexigo_germany_xrechnung 20.0 (446f2f68): models/account_move.py
- 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_
- 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_
- 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_
- github.com/odoo/odoo/blob/6f00fdadb875342de2d14a179f25431f93cd63c9/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/account_edi_ubl_
- Code du module : flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/ubl_generator.py
- 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/itplr-kosit/xrechnung-schematron/releases/tag/v2.6.0
- docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-R003/
