Documentation13 min de lecture

l10n_fr_einvoicing : la facturation électronique française dans Odoo

Le module OCA `l10n_fr_einvoicing` (dépôt `fr-einvoicing`) est l'implémentation communautaire de la réforme française : relevé sur une instance Odoo 18 Community, il crée 10 modèles et ajoute 322 champs, et s'appuie sur la bibliothèque Python `pyfrctc` pour dialoguer avec une plateforme agréée. Les quatre écrans, les contrôles qui bloquent une facture, et les deux tâches désactivées par défaut.

Flux de factures électroniques et annuaire national consultés sur un écran

C'est le module le plus lourd de tout notre socle, et celui qui porte l'obligation la plus datée : 322 champs ajoutés à l'instance pour faire circuler une facture entre votre comptabilité et une plateforme agréée.

Il connecte Odoo à cette plateforme pour interroger l'annuaire national, émettre vos factures et avoirs clients, recevoir les factures fournisseurs, et suivre le cycle de vie de chaque pièce par les statuts normalisés AFNOR/CDAR.

Résumé

C'est le module le plus lourd du socle — 10 modèles et 322 champs — et le seul qui porte une obligation datée : il connecte Odoo à une plateforme agréée pour interroger l'annuaire national, émettre, recevoir et suivre le cycle de vie des factures.

Trois points décident de son fonctionnement, et aucun n'est dans le module : les deux tâches planifiées désactivées à l'installation — cause de la quasi-totalité des « mes factures ne partent pas » —, le paramétrage de TVA, qui a son propre bouton de vérification, et les SIREN de vos clients.

L'essentiel

  • 10 modèles créés, 7 étendus, 322 champs, 5 menus, 29 vues — relevé sur instance.
  • Quatre écrans : lignes d'annuaire, flux, événements de facture, journaux techniques.
  • Contrôles bloquants à la validation : une facture dont la ligne d'annuaire est inactive ne part pas.
  • Avoir automatique en option sur un refus ou un rejet, avec annulation de la facture.
  • Deux tâches planifiées désactivées par défaut — c'est le piège d'installation n° 1.
  • Purge des journaux techniques après 600 jours par défaut, paramétrable.

Ce que le module ajoute à l'instance

ÉlémentNombre
Modèles créés10
Modèles étendus7
Champs ajoutés322
Menus5
Vues29
Actions de fenêtre7
Groupes de droits0

Les dix modèles décrivent le dispositif complet. Cinq suffisent à le comprendre :

ModèleCe qu'il est
fr.directory.lineUne ligne d'annuaire : par où joindre une entité (SIREN, SIRET, code de routage)
fr.einvoicing.flowUn flux : une transmission, entrante ou sortante, avec son état
fr.einvoicing.eventUn événement : un statut du cycle de vie, reçu ou envoyé
fr.einvoicing.logUn journal technique : le détail INFO / WARNING / ERROR de chaque opération
fr.einvoicing.tokenLe jeton d'authentification auprès de la plateforme

Les sept modèles étendus incluent account.move, account.move.line, account.journal, res.company et res.partner : c'est par eux que le dispositif s'insère dans votre comptabilité au lieu de vivre à côté.

Liste des lignes d'annuaire de facturation électronique : chaque entité avec son identifiant, son type et son état actif ou non
Liste des lignes d'annuaire de facturation électronique : chaque entité avec son identifiant, son type et son état actif ou non

Où le trouver dans Odoo

MenuQuand on l'ouvre
Facturation ▸ Configuration ▸ France - Facturation électroniqueLe menu racine
… ▸ Lignes d'annuaireQuand une facture ne trouve pas son destinataire
… ▸ Flux de facturation électroniquePour vérifier qu'une facture est bien partie
… ▸ Événements de facturesQuand un client conteste avoir reçu une facture
… ▸ Journaux de facturation électroniqueQuand il faut comprendre un rejet

Et surtout, le module greffe des points d'entrée là où le travail se fait :

  • Sur une facture ou un avoir : un onglet eInvoicing avec la ligne d'annuaire, le flux associé, l'historique des événements, un bouton New Event, et un bandeau « Click here to send it immediately ».
  • Sur une fiche contact société : un groupe e-Invoicing for France avec le statut d'annuaire et un bouton Directory Sync.
  • Sur le tableau de bord comptable, cartes des journaux Ventes et Achats : un lien Import from AP Now.
  • Dans Facturation ▸ Configuration ▸ Paramètres, un bloc France eInvoicing, visible uniquement si le pays de la société est la France.

La liste des factures gagne aussi une colonne Flow State et une colonne Last Event : c'est l'écran de pilotage quotidien, et il ne demande pas d'ouvrir les menus de configuration.

Cas d'usage

Raccorder l'instance à la plateforme agréée

  1. Facturation ▸ Configuration ▸ Paramètres, bloc France eInvoicing.
  2. Choisir l'Accredited Platform.
  3. Choisir la méthode d'authentification : « Client Credentials » (saisir alors l'identifiant et le secret client) ou « Authorization Code » (cliquer sur Onboarding, qui redirige vers la page d'autorisation de la plateforme).
  4. Cliquer sur Test API pour vérifier la connexion.
  5. Cliquer sur Check config for EN16931 invoicing : ce bouton vérifie que vos taxes sont correctement configurées pour la génération des fichiers.
  6. Enregistrer.

L'étape 5 mérite d'exister, et son existence est révélatrice : un paramétrage de TVA approximatif est la première cause de rejet technique. Si la communauté a ajouté un bouton de vérification dédié, c'est que le problème est fréquent.

Enrôler sa société et synchroniser un client

  1. Dans le même bloc de paramètres, cliquer sur Company Directory Sync (visible si le statut n'est pas encore connu).
  2. Cliquer sur Directory Sync : Odoo interroge l'annuaire avec le SIREN de la société et détermine son statut — Private VAT Registered, Public Sector, Not Present…
  3. Si plusieurs lignes d'annuaire actives existent, choisir la ligne par défaut et valider.
  4. Pour un client : ouvrir sa fiche contact, groupe e-Invoicing for France, puis Directory Sync. Son statut et ses lignes actives sont mis à jour.

L'étape 1 est celle qu'on oublie : on s'occupe de ses clients et on néglige sa propre entité. Sans enrôlement de votre société, vos fournisseurs ne savent pas où vous adresser leurs factures — alors que l'obligation de réception court depuis le 1er septembre 2026.

Émettre une facture vers un destinataire identifié

  1. Créer la facture pour un client dont le Directory Status est « Private VAT Registered » ou « Public Sector ».
  2. Onglet eInvoicing : vérifier la Directory Line du destinataire et la Company Directory Line de l'émetteur.
  3. Cliquer sur Confirm : un flux est créé automatiquement.
  4. Un bandeau apparaît : pour ne pas attendre la tâche planifiée, cliquer sur Click here to send it immediately.
  5. Suivre le statut dans les Flux, ou dans la colonne Flow State de la liste des factures.

Un flux sortant passe par les états Created → Generated → Sent → Done, avec les boutons correspondants sur sa fiche : Generate File, Send to AP, Update Status. Un flux entrant passe par Created → Downloaded → Done, avec Download puis Import in Odoo.

Traiter un refus, et l'avoir automatique

  1. Un événement Refused arrive sur une facture client : il apparaît dans les Événements de factures, badge rouge.
  2. Si l'option Auto Reverse Invoice if Refused/Rejected est active, Odoo crée et valide automatiquement un avoir marqué Internal Refund, et annule la facture.
  3. Si l'annulation est manuelle, cliquer sur Annuler sur la facture : en l'absence d'événement de refus, l'assistant New Event s'ouvre avec le statut prérempli Refused.
  4. Renseigner le motif dans le tableau Reasons and Actions Requested, cocher Confirm, puis Send Event.

Liste des événements de facture : chaque statut du cycle de vie reçu ou envoyé, avec sa date et sa couleur de décoration
Liste des événements de facture : chaque statut du cycle de vie reçu ou envoyé, avec sa date et sa couleur de décoration

Le refus est définitif : la case Confirm et le bandeau d'avertissement en témoignent. L'assistant le rappelle explicitement avant l'envoi.

Les contrôles qui bloquent une facture — et pourquoi c'est souhaitable

À la validation d'une facture client, le module exécute une série de vérifications. Si l'une échoue, la facture ne se valide pas. Cela surprend, et c'est exactement ce qu'il faut.

  • Si le statut du client dans l'annuaire est inconnu ou inactif, la synchronisation est déclenchée automatiquement.
  • La ligne d'annuaire retenue est vérifiée : active, et cohérente avec le client.
  • Pour une entité publique (Chorus Pro), présence du SIRET de votre société et d'un mode de paiement sur la facture.

Sans ces contrôles, la facture serait validée, comptabilisée, puis rejetée par la plateforme — et vous l'apprendriez plus tard, sur une pièce déjà dans vos comptes. Un blocage coûte trente secondes ; un rejet après comptabilisation coûte un avoir et une relance.

Deux blocages de gestion complètent l'ensemble, et ils sont la contrepartie logique d'un document transmis à l'administration :

  • Une facture liée à un flux ne peut plus être supprimée.
  • Elle ne peut plus revenir en brouillon, sauf contexte technique explicite.

Les deux tâches désactivées par défaut

C'est le piège d'installation numéro un de ce module, et il est silencieux.

Le module ajoute deux tâches planifiées — l'import des flux entrants et l'envoi puis le suivi des flux sortants — désactivées par défaut. C'est un choix prudent de la communauté : on n'active pas de transmission automatique sans que quelqu'un l'ait décidé.

Mais si personne ne les active, les factures restent à l'état Created sans que rien ne le signale. Vous découvrez le problème en analysant vos impayés, des semaines plus tard.

  1. Paramètres ▸ Technique ▸ Automatisation ▸ Actions planifiées.
  2. Activer la tâche d'import des flux entrants.
  3. Activer la tâche d'envoi et de suivi des flux sortants.
  4. Émettre une facture réelle et vérifier qu'elle passe à Sent sans intervention.

Trois automatisations facultatives méritent par ailleurs d'être examinées : l'avoir automatique sur refus ou rejet, l'envoi automatique de l'événement « prise en charge » à l'import d'une facture fournisseur, et l'envoi automatique de l'événement « approuvée » à sa validation. Les deux dernières informent votre fournisseur de l'avancement, et réduisent les appels de relance.

Les statuts du cycle de vie

Le modèle d'événement implémente l'ensemble des statuts définis par la norme AFNOR/CDAR, chacun associé à un code et à une couleur. Les voici, regroupés par ce qu'ils signifient pour vous :

NatureStatuts
Transmission en coursSubmitted, Issued by the Platform, Received by the Platform, Made Available
Pris en chargeIn Hand, Completed
AcceptéApproved, Stamped
RéservePartially Approved, Disputed, Suspended
Refus ou échecRefused, Rejected, Cancelled, Routing Error, Unacceptable
PaiementPayment Sent, Payment Received, Direct Payment Query
AffacturageFactored, Undisclosed Factored, Not Factored, Payment Entity Change

Seuls quatre de ces statuts sont obligatoires dans la réforme — déposée, rejetée, refusée, encaissée. Les autres sont recommandés, et c'est leur présence qui donne la visibilité utile sur une facture en attente. Voir les quatre statuts obligatoires.

Côté saisie manuelle, l'assistant New Event n'autorise que certains statuts : Completed pour une pièce client, et Approved, Partially Approved, Disputed, Suspended ou Refused pour une pièce fournisseur. Les statuts à réserve ouvrent un tableau Reasons and Actions Requested où l'on précise le motif et l'action attendue — information complémentaire, facture rectificative, avoir total, avoir partiel, remboursement.

Limites connues et points d'exploitation

Le dépôt ne répertorie pas de défaut sur ce module. Cinq points d'exploitation déterminent en revanche s'il fonctionne chez vous.

  • Les deux tâches planifiées sont désactivées à l'installation. C'est la cause de la quasi-totalité des « mes factures ne partent pas ».
  • La bibliothèque Python pyfrctc doit être disponible sur le serveur : c'est elle qui dialogue avec la plateforme.
  • Les journaux techniques sont purgés après 600 jours par défaut, via l'autovacuum, réglable par le paramètre système fr_einvoicing.log_days. Sur un fort volume, c'est un point à surveiller côté taille de base.
  • Le paramétrage de TVA conditionne tout. Le bouton de vérification dédié existe parce que c'est la première cause de rejet.
  • Les SIREN de vos clients sont le vrai chantier. Aucun module ne les devinera, et une facture sans destinataire trouvé ne part pas.

Le cinquième point n'est pas technique et c'est le plus long : voir l'annuaire, les SIREN et le routage.

Identité technique

Nom techniquel10n_fr_einvoicing
Dépôt OCAfr-einvoicing, branche 18.0
Dépendancesl10n_fr_account_invoice_en16931
Dépendance Pythonpyfrctc
Modules de liaison du même dépôtl10n_fr_einvoicing_sale, _import, _purchase, _payment_batch_oca, _dashboard_banner
Version Odoo18.0 Community

Le dépôt fr-einvoicing compte 9 modules documentés. Trois font partie de notre socle commun : le module central, celui qui porte la ligne d'annuaire depuis le devis, et celui qui transforme une facture fournisseur reçue en brouillon comptable.

Pour la vue d'ensemble côté métier plutôt que côté module, voir ce qu'Odoo couvre nativement sur la réforme.

Questions fréquentes

Pourquoi mes factures restent-elles à l'état « Created » ?

Parce que les deux tâches planifiées du module — import des flux entrants, envoi et suivi des flux sortants — sont désactivées par défaut à l'installation. Rien ne le signale : les factures s'accumulent sans partir. Activez-les dans Paramètres ▸ Technique ▸ Automatisation ▸ Actions planifiées, puis testez avec une facture réelle.

Que fait le bouton « Check config for EN16931 invoicing » ?

Il vérifie que les taxes de votre société sont correctement configurées pour la génération des fichiers structurés. Son existence est révélatrice : un paramétrage de TVA approximatif est la première cause de rejet technique, et la communauté a jugé utile d'ajouter un contrôle dédié.

Pourquoi ma facture refuse-t-elle de se valider ?

Le module exécute des contrôles bloquants avant transmission : statut du client dans l'annuaire inconnu ou inactif, ligne d'annuaire incohérente, ou — pour une entité publique — absence du SIRET de votre société ou d'un mode de paiement sur la facture. C'est voulu : mieux vaut un blocage de trente secondes qu'un rejet sur une pièce déjà comptabilisée.

Peut-on annuler une facture déjà transmise ?

Pas librement : une facture liée à un flux ne peut plus être supprimée ni revenir en brouillon. À l'annulation, l'assistant New Event s'ouvre avec le statut prérempli Refused, et il faut confirmer explicitement — le refus est définitif. L'option d'avoir automatique crée alors la contrepartie comptable.

Combien de temps les journaux techniques sont-ils conservés ?

600 jours par défaut, purgés automatiquement par l'autovacuum. Le délai se règle par le paramètre système fr_einvoicing.log_days. Sur une instance à fort volume de factures, c'est un poste à surveiller dans la taille de votre base.

Se faire accompagner

Trois choses décident si ce module fonctionne chez vous, et aucune n'est dans le module : les tâches planifiées à activer, le paramétrage de TVA à vérifier, et les SIREN de vos clients à relever. La troisième est la plus longue, et elle n'est pas technique.

Notre paramétrage accompagné de la facturation électronique couvre les trois en 1 à 3 jours : raccordement à la plateforme, enrôlement de votre société, contrôle des taxes, activation des tâches, et test réel de bout en bout. Voir les prestations d'Atalios Consulting ou demander un rappel.

Pour aller plus loin

En résumé

322 champs, dix modèles, quatre écrans : l10n_fr_einvoicing est le module le plus lourd du socle, et le seul qui porte une obligation datée. Trois points décident de son fonctionnement — les tâches planifiées désactivées par défaut, le paramétrage de TVA, et les SIREN de vos clients. Parlons de votre conformité.

Documentation OCAFacturation électroniqueConformité

Partager

Fiches connexes

Relevés bancaires et pièces comptables sur un bureau
Relevé sur une instance Odoo 18 Community, le module OCA `account_reconcile_oca` (dépôt `account-reconcile`, version 18.0.1.1.14, licence AGPL-3) ajoute 2 modèles, 87 champs et 17 vues : il remplace le lettrage limité de la Community par deux écrans dédiés, bancaire et par compte. Ce qu'il ajoute à l'instance, où le trouver, ses quatre cas d'usage et ses limites connues.
Lire la suite
Documentation OCA, Comptabilité
Relevé bancaire et suivi des opérations sur un bureau
Odoo a retiré l'import de relevés bancaires de son édition Community à partir de la version 14 : les 3 modules OCA `account_statement_import_file` (18.0.1.0.3, LGPL-3), `_camt` et `_ofx` le rétablissent, avec la détection des transactions déjà importées. Comment ils s'articulent, ce que CAMT apporte de plus qu'OFX, et le piège du fichier sans IBAN.
Lire la suite
Documentation OCA, Comptabilité