Se rendre au contenu

Peppol dans Odoo : des factures qui partent bel et bien.

Depuis le 1er janvier 2026, un PDF par e-mail ne suffit plus entre entreprises belges. Peppol dans Odoo contrôle à l'avance ce qui manque. Vous trouverez ici, par code d'erreur, ce qui ne va pas et ce que vous adaptez dans Odoo.

Ce que l'obligation signifie pour vos factures

Les entreprises belges envoient leurs factures aux autres entreprises belges par voie électronique, dans un format structuré. Cela se fait via le réseau Peppol.

Les factures aux particuliers n'en relèvent pas. Les factures entrantes des fournisseurs belges arrivent aussi via Peppol.

Odoo peut envoyer et recevoir des factures Peppol. Votre organisation doit toutefois d'abord être enregistrée.

Peppol est plus qu'une case à cocher pour le comptable. Une facture qui n'arrive pas n'est pas payée. La cause se trouve généralement dans une fiche client que remplit le service commercial.

Cette page décrit le fonctionnement d'Odoo et n'est pas un avis fiscal. Les règles elles-mêmes sont publiées par le SPF Finances.

Mieux vaut voir une erreur avant l'envoi

Votre organisation est sur le réseau.

Dans les paramètres de Facturation, vous enregistrez votre organisation sur Peppol. Dès lors, vous êtes aussi joignable pour vos fournisseurs.

Odoo vérifie si le client est joignable.

Sur la fiche client, Odoo affiche le statut Peppol : sur Peppol, pas sur Peppol, ou pas de réception de ce type de document.

Odoo contrôle la facture à l'avance.

S'il manque quelque chose, Odoo le signale avant l'envoi. Dans Odoo 18 à 20, Odoo intercepte ainsi la plupart des erreurs ci-dessous.

Après une correction, vous envoyez un nouveau fichier

Odoo conserve le fichier XML d'une facture envoyée en pièce jointe de cette facture.

Si vous corrigez ensuite la fiche client ou un code TVA, Odoo renvoie cet ancien fichier.

Remettez donc la facture en brouillon et supprimez l'ancienne pièce jointe XML. Confirmez-la à nouveau et envoyez-la. Odoo crée alors un nouveau fichier avec les données corrigées.

La facture était-elle déjà lettrée avec un paiement ? La remise en brouillon supprime ce lettrage. Lettrez-la ensuite à nouveau.

Vous trouverez ci-dessous les codes d'erreur que nous voyons dans notre support, pour Odoo 16 à 20. Cliquez sur un code pour voir la cause et ce que vous adaptez dans Odoo.

Les codes d'erreur et comment les résoudre

PEPPOL-EN16931-R010 et BR-63 : l'adresse Peppol du client manque

[PEPPOL-EN16931-R010]-Buyer electronic address MUST be provided

[BR-63]-The Buyer electronic address (BT-49) shall have a Scheme identifier.

L'adresse Peppol du client manque, ou un schéma est indiqué sans numéro.

Dans Odoo 16, Odoo remplit l'adresse Peppol uniquement à partir du champ ID de la société, pas à partir du numéro de TVA. À partir d'Odoo 17, Odoo déduit l'ID de la société d'un client belge de son numéro de TVA.

Ouvrez le client dans Contacts, onglet Facturation. Dans Adresse Peppol, indiquez le schéma et le numéro. Pour une entreprise belge, c'est 0208 avec le numéro d'entreprise à dix chiffres. Dans Odoo 20, ce champ s'appelle ID de routage.

Cliquez ensuite sur Vérifier. Le statut Peppol affiche alors Le partenaire est sur Peppol. Pour de nombreux clients à la fois, sélectionnez-les dans la liste Contacts et choisissez Actions > Vérifier Peppol.

Le client ne reçoit pas via Peppol, comme un particulier ? Videz alors le champ format eInvoice et envoyez la facture par e-mail.

Dans Odoo 17 à 20, Odoo signale cette erreur sous la forme The Peppol endpoint is missing in the XML file.

Odoo 18 à 20 bloquent au préalable une facture sans adresse Peppol, avec l'un de ces messages.

  • [PEPPOL-EN16931-R010] An electronic address (EAS) must be provided on the customer
  • Buyer Electronic Address / Endpoint ID is missing [IBR-080].
  • Buyer Electronic Address Scheme Identifier is missing [IBR-063].
PEPPOL-COMMON-R043 : le numéro d'entreprise est incorrect

[PEPPOL-COMMON-R043]-Belgian enterprise number MUST be stated in the correct format.

Le numéro d'entreprise belge du client est dans un format incorrect, ou le numéro n'existe pas.

Dans Odoo 16 et 17, il s'agit de points ou d'espaces dans l'ID de la société. Peppol n'accepte que des chiffres : 0123456789 est correct, 0123.456.789 ne l'est pas.

Allez dans Contacts et ouvrez la fiche client. Le champ ID de la société se trouve dans l'onglet Ventes & Achats. Supprimez tous les points et espaces.

Dans Odoo 16, c'est le même champ ID de la société, dans l'onglet Ventes & Achats.

Le numéro compte exactement 10 chiffres et commence par 0 ou 1.

Dans Odoo 18 et 19, Odoo place lui-même le numéro sans points dans le fichier. L'erreur signifie alors que le numéro est incorrect, par exemple à cause d'une faute de frappe.

Odoo bloque une telle facture au préalable. Le message indique que le client should have a valid KBO/BCE number in the Company ID field.

Recherchez le bon numéro dans la BCE et corrigez-le sur la fiche client.

Odoo 20 tire le numéro d'entreprise du numéro de TVA. Il figure sous BCE/KBO parmi les identifiants du client. S'il est incorrect, vérifiez d'abord le numéro de TVA. Le message est should have a valid KBO/BCE number set as additional identifier (BE_EN).

L'adresse Peppol compte elle aussi dix chiffres, sans BE, points ni espaces. Odoo 17 et 18 refusent un autre format avec ce message.

The Peppol endpoint is not valid. The expected format is: 0239843188

Avec le schéma 0208, Odoo 19 retire lui-même de l'adresse Peppol tout ce qui n'est pas un chiffre.

Le champ ID de la société sur la fiche client dans Odoo, rempli sans points ni espaces

BR-11 : le client n'a pas de pays

[BR-11]-The Buyer postal address shall contain a Buyer country code (BT-55).

Aucun pays ne figure dans l'adresse du client.

Ouvrez le client dans Contacts et indiquez le pays. Si l'adresse de facturation est un contact distinct, indiquez-y aussi le pays.

Odoo le vérifie avant l'envoi, depuis Odoo 16. Le message est The country is required for the customer.

Dans Odoo 17 à 20, Odoo affiche un rejet par le réseau sous la forme Missing Buyer Country.

Si l'erreur revient quand même du réseau, c'est l'ancien fichier qui est reparti. Supprimez alors l'ancienne pièce jointe XML comme décrit plus haut.

BR-CO-09 : il manque le code pays dans le numéro de TVA du client

[BR-CO-09]-The Seller VAT identifier (BT-31) … and the Buyer VAT identifier (BT-48) shall have a prefix …

Le numéro de TVA du client est indiqué sans code pays : 0123456789 au lieu de BE0123456789.

Ouvrez le client dans Contacts et ajoutez BE devant le numéro de TVA.

Odoo le vérifie avant l'envoi, depuis Odoo 16. Le message est The VAT of the customer should be prefixed with its country code.

Si l'erreur revient après la correction, Odoo envoie encore l'ancien fichier. Supprimez l'ancienne pièce jointe XML comme décrit plus haut.

PEPPOL-EN16931-R020 et BR-CO-26 : les données de votre propre société manquent

[PEPPOL-EN16931-R020]-Seller electronic address MUST be provided

[BR-CO-26]-In order for the buyer to automatically identify a supplier, the Seller identifier (BT-29) … shall be present.

Le réseau peut aussi signaler BR-S-02 et UBL-SR-53.

Il manque à la société émettrice dans Odoo un numéro de TVA, un numéro d'entreprise ou une adresse Peppol. Cela arrive avec une branche dans un Odoo à plusieurs sociétés.

Allez dans Paramètres > Utilisateurs & Sociétés > Sociétés et ouvrez la société ou la branche. Indiquez le numéro de TVA et l'ID de la société.

Vérifiez ensuite dans Paramètres > Facturation si la société est enregistrée sur Peppol. Une branche peut utiliser la connexion Peppol de la société mère. Le numéro de TVA doit toutefois figurer sur la branche elle-même.

Odoo 18 à 20 bloquent une telle facture au préalable avec ce message.

[PEPPOL-EN16931-R020] An electronic address (EAS) must be provided on the company

BR-CO-04 et UBL-SR-48 : une ligne de facture sans TVA

[BR-CO-04]-Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151).

[UBL-SR-48]-Invoice lines shall have one and only one classified tax category.

Une ligne de facture n'a pas de code TVA, ou elle porte deux taux de TVA. Il s'agit souvent de transport, de vidanges, d'une remise ou d'une ligne de texte libre.

Donnez à chaque ligne exactement un code TVA, même si le taux est de 0 %. Mettez aussi ce code TVA sur le produit, dans le champ Taxes de vente de l'onglet Informations générales.

Les nouvelles commandes et factures le reprennent alors automatiquement. Passez en revue les commandes ouvertes et les factures en brouillon avec ce produit.

Depuis Odoo 16, Odoo bloque au préalable une ligne sans TVA. Le message est Each invoice line should have at least one tax.

Si une ligne porte deux taux de TVA, Odoo signale Each invoice line shall have one and only one tax.

Pour BR-CO-04, Odoo 17 à 20 conseillent d'installer le module account_edi_ubl_cii_tax_extension. Dans Odoo 19 et 20, ce module n'existe plus. Un code TVA sur la ligne y suffit.

BR-S-08, BR-E-08 et BR-Z-08 : la base imposable par taux de TVA est incorrecte

[BR-S-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", …

BR-E-08 est la même règle pour les lignes exonérées, BR-Z-08 pour les lignes à 0 %.

La base imposable par taux de TVA ne correspond pas à la somme des lignes. Cela arrive avec des vidanges indiquées comme taxe fixe sur la ligne de produit.

Dans Odoo 19, ouvrez le code TVA des vidanges via Facturation > Configuration > Taxes. Dans l'onglet Options avancées, mettez le Code de catégorie fiscale sur E et indiquez un motif d'exonération.

Désactivez Impacter la base des taxes ultérieures. Odoo en fait alors une ligne exonérée distincte.

Cette case détermine aussi si la TVA s'applique aux vidanges. Demandez à votre comptable ce qui convient.

Dans Odoo 16, les vidanges s'ajoutent comme supplément sur la ligne de produit. Cela provoque cette erreur, et il faut alors du développement sur mesure. À partir d'Odoo 17, Odoo place les vidanges sur une ligne distincte.

Sans vidanges, un écart d'arrondi peut être la cause, par exemple avec des prix à quatre décimales. Le mieux est de l'examiner ensemble via le support.

Pour en savoir plus sur les vidanges dans les factures Peppol, lisez notre article sur les vidanges et Peppol.

BR-CO-16 : le montant à payer diffère

[BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).

Le montant à payer dans le fichier diffère du total des lignes.

Cela arrive quand quelqu'un modifie un code TVA déjà utilisé sur des factures comptabilisées. Un développement sur mesure qui retire des lignes du fichier provoque aussi cette erreur.

Ne modifiez pas un code TVA déjà utilisé sur des factures comptabilisées. Créez un nouveau code TVA via Facturation > Configuration > Taxes et archivez l'ancien.

Remettez une facture avec cette erreur en brouillon et vérifiez la TVA sur les lignes. Confirmez-la ensuite à nouveau et envoyez-la.

Odoo 18 et 19 absorbent eux-mêmes les petits écarts d'arrondi. Un code TVA modifié après coup, Odoo ne le rattrape pas. Si vous travaillez avec des vidanges, lisez aussi BR-S-08 plus haut.

PEPPOL-EN16931-R120 : le montant de la ligne est incorrect

[PEPPOL-EN16931-R120]-Invoice line net amount MUST equal (Invoiced quantity * (Item net price/item price base quantity) …

La quantité multipliée par le prix unitaire ne donne pas le montant de la ligne. Le réseau tolère un écart de deux centimes.

Nous le voyons avec une ligne de remise à quantité positive et prix négatif. Un développement sur mesure qui recalcule les prix avec une taxe provoque aussi cette erreur.

Placez une remise ou un retour sur une ligne distincte avec une quantité négative et un prix positif. Renvoyez ensuite la facture, comme décrit plus haut.

Depuis Odoo 16, Odoo reporte lui-même le signe moins d'un prix négatif sur la quantité. Si vous obtenez quand même l'erreur, faites mettre à jour le module account_edi_ubl_cii et vérifiez le développement sur mesure lié aux prix.

BR-CL-19 et BR-CL-20 : un code erroné pour une remise ou un supplément

[BR-CL-19]-Coded allowance reasons MUST belong to the UNCL 5189 code list

[BR-CL-20]-Coded charge reasons MUST belong to the UNCL 7161 code list

Le réseau signale aussi PEPPOL-EN16931-CL002 ou PEPPOL-EN16931-CL003.

Une remise ou un supplément sur une ligne reçoit un code motif de la mauvaise liste. Cela arrive avec un pourcentage de remise négatif : c'est en fait un supplément. Plusieurs remises sur une même ligne provoquent aussi cette erreur.

N'utilisez pas de pourcentage de remise négatif. Placez un supplément de prix ou une remise supplémentaire sur une ligne distincte avec son propre produit. Renvoyez ensuite la facture.

Dans les versions actuelles d'Odoo 18 et 19, une remise négative devient un supplément avec le bon code. Si vous voyez l'erreur sur Odoo 18, faites mettre à jour le module account_edi_ubl_cii.

BR-CL-23 : une unité de mesure que Peppol ne connaît pas

[BR-CL-23]-Unit code MUST be coded according to the UN/ECE Recommendation 20 with Rec 21 extension

Une unité de mesure part avec un code que Peppol ne connaît pas. Nous l'avons vu avec une unité d'emballage partie sous le code HD.

Par défaut, dans Odoo 16 à 19, Odoo n'indique des codes que pour ses propres unités. Pour toute autre unité, Odoo indique C62, qui signifie pièce. Un code invalide vient donc d'un développement sur mesure ou d'un module supplémentaire.

Utilisez les unités standard d'Odoo, ou faites vérifier le développement sur mesure qui traduit les unités. À partir d'Odoo 20, vous définissez vous-même le code UN/ECE par unité de mesure, via Inventaire > Configuration > Unités & conditionnements.

Messages sans code d'erreur

Le client n'est pas sur Peppol

Vérifiez d'abord l'ID de la société sur la fiche client. S'il est correct, le client n'est pas encore enregistré. Demandez-lui de le faire dans son logiciel comptable. S'il s'agit d'un hôpital ou d'une administration publique, vérifiez le GLN.

Le client est sur Peppol, mais ne reçoit rien

Odoo signale : Customer is on Peppol but did not enable receiving documents.

Le client est enregistré, mais n'a pas activé la réception. Il doit le faire lui-même auprès de son prestataire.

Les factures entrantes n'arrivent pas

Odoo signale : A purchase journal must be used to receive Peppol documents.

Les factures Peppol des fournisseurs arrivent dans un journal des achats. Choisissez ce journal dans les paramètres Peppol de Facturation.

Les hôpitaux et les administrations publiques reçoivent sur un GLN

Les universités aussi reçoivent souvent sur un GLN, pas sur leur numéro d'entreprise. Odoo cherche alors à la mauvaise adresse.

Le statut Peppol affiche alors Le partenaire ne peut pas recevoir ce format ou Le partenaire n’est pas sur Peppol.

Demandez son GLN au client, ou cherchez-le dans le Peppol Directory.

Ouvrez le client dans Contacts, onglet Facturation. Dans Adresse Peppol (dans Odoo 20 : ID de routage), indiquez le schéma 0088 avec le GLN et cliquez sur Vérifier. Vérifiez à la première facture qu'elle arrive bien.

Odoo ne peut pas le déduire lui-même : le GLN ne figure pas dans le numéro de TVA.

Les administrations publiques demandent souvent leur numéro de bon de commande sur la facture. Indiquez-le dans le champ Référence client.

Questions sur Peppol dans Odoo

Devons-nous installer un logiciel supplémentaire ?

Odoo envoie et reçoit lui-même les factures Peppol, sans logiciel supplémentaire. Vous enregistrez votre organisation dans les paramètres de Facturation.

L'obligation vaut-elle aussi pour les clients étrangers ?

L'obligation belge porte sur les factures entre entreprises belges. Peppol est aussi utilisé dans d'autres pays. Odoo envoie une facture via Peppol si le client y est joignable.

Pouvez-vous vérifier nos paramètres Peppol ?

Oui, nous le faisons via le support. Si Peppol bloque dans le cadre d'une question plus large sur votre comptabilité, nous l'examinons lors d'une évaluation. Abstractive est Odoo Silver Partner à Affligem, entre Gand et Bruxelles. Depuis 2016, nous mettons Odoo en place pour des organisations du Benelux.

Une facture n'est vraiment envoyée que si elle arrive

Vous avez une autre erreur Peppol ? Signalez-la via notre formulaire de support. Nous cherchons la cause avec vous.