| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Invoicing (account) |
| Lines of code | 3830 |
| Technical Name |
eh_l10n_fr_einvoicing |
| License | OPL-1 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Invoicing (account) |
| Lines of code | 3830 |
| Technical Name |
eh_l10n_fr_einvoicing |
| License | OPL-1 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
France e-Invoicing
Facturation Électronique France · Réforme 2026
Be ready for September 1, 2026. Factur-X PDF/A-3, PDP routing, Chorus Pro B2G, PPF directory lookup, 14-state DGFiP lifecycle, full e-reporting, audit-grade archive. One price, three Odoo versions, no subscription.
Prêt pour le 1er septembre 2026. Construction Factur-X complète, routage PDP, Chorus Pro pour le secteur public, recherche dans l'annuaire PPF, cycle de vie DGFiP à 14 états, e-reporting intégral, archive à valeur probante. Prix unique, trois versions Odoo, sans abonnement.
Le 1er septembre 2026 n'est pas un objectif. C'est une obligation légale.
French B2B issuers and recipients facing the September 2026 DGFiP mandate. Large enterprises, ETI, SMEs, and micro-enterprises that need every outbound invoice routed through an accredited PDP.
Émetteurs et destinataires B2B français visés par l'échéance DGFiP de septembre 2026. Grandes entreprises, ETI, PME et micro-entreprises.
EUR 15 per missing invoice. EUR 250 per missing e-report transaction. Cap EUR 15,000 per entity per year. Plus the months of integration work to wire a third-party PDP, Chorus Pro, and the PPF directory by hand.
15 EUR par facture manquante. 250 EUR par transaction e-reporting manquante. Plafond annuel de 15 000 EUR par entité.
Overview
A complete, compliance-grade implementation. Not a feature stub.
eh_l10n_fr_einvoicing builds Factur-X PDF/A-3 documents with embedded UN/CEFACT CII, routes them through any DGFiP-accredited Plateforme de Dématérialisation Partenaire (PDP) or through Chorus Pro for B2G, captures all 14 documented lifecycle states, and ships the e-reporting flow for B2C, cross-border, and reverse-charge transactions.
Aperçu
Une implémentation complète et conforme. Pas une ébauche.
Le module construit des documents Factur-X PDF/A-3 avec CII embarqué, les route vers toute PDP accréditée par la DGFiP ou vers Chorus Pro pour le secteur public, suit les 14 états du cycle de vie, et gère l'e-reporting B2C, transfrontalier et autoliquidation.
The deadline
Two phases. No carve-outs. Penalties from day one.
Every French business must be able to receive e-invoices. Large enterprises and ETI must also issue.
Toute entreprise française doit pouvoir recevoir. Les grandes entreprises et ETI doivent aussi émettre.
SMEs and micro-enterprises must issue structured electronic invoices. No business is exempt.
Les PME et micro-entreprises doivent émettre. Aucune entreprise n'est exemptée.
Capabilities
Nine concrete capabilities. All in version 1.
Factur-X PDF/A-3 builder
All four FNFE-MPE profiles: Minimum, Basic WL, Basic, EN 16931. CII XML embedded as a PDF/A-3 attachment. JavaScript, OpenAction, Launch, ImportData, SubmitForm stripped on every build.
Quatre profils FNFE-MPE. CII embarqué dans un PDF/A-3. Chaque charge JavaScript ou action automatique retirée avant scellement.
EN 16931 pre-flight validator
EN 16931 business rules checked before the payload leaves the building. Errors surface as a clean exception list with rule code, severity, and message.
Règles métier EN 16931 vérifiées avant envoi. Les erreurs apparaissent en liste claire avec code, sévérité et message.
PDP adapter framework
Generic REST adapter that targets any DGFiP-accredited PDP. Connect any accredited platform without writing code.
Adaptateur REST générique qui cible toute PDP accréditée par la DGFiP. Connectez n'importe quelle PDP accréditée sans code.
Chorus Pro (B2G)
Public-sector invoicing through the DGFiP Chorus Pro REST API. OAuth2 client-credentials flow, syntax flag set automatically based on attachment.
Facturation au secteur public via l'API REST Chorus Pro de la DGFiP. Flux OAuth2 client_credentials.
PPF directory lookup
SIRET to recipient-PDP resolution via the Portail Public de Facturation. Signed-response handling (JOSE verification on the roadmap, pending the DGFiP public key). 6-hour TTL cache.
Le SIRET est résolu vers la PDP du destinataire via le Portail Public de Facturation. Traitement des réponses signées (vérification JOSE prévue, en attente de la clé publique DGFiP), cache de 6 heures.
Full 14-state DGFiP lifecycle
Every DGFiP-documented state. Atomic compare-and-set SQL transitions prevent concurrent advance. Each transition logged with actor, timestamp, and message.
Tous les états documentés par la DGFiP. Transitions atomiques compare-and-set. Chaque transition tracée avec acteur, horodatage et message.
E-reporting B2C, cross-border
Full B2C, cross-border, and reverse-charge coverage. Monthly cron with correction-filing support. The DGFiP retains visibility on transactions outside the PDP network.
Couverture intégrale B2C, transfrontalier et autoliquidation. Cron mensuel de génération des lots ; transmission sur action, dépôt de corrections supporté.
AES-256 credential vault
AES-256-GCM with per-record associated data. Master key sourced from the OS keyring or a file outside the Odoo database. Plaintext never leaves the server tier.
AES-256-GCM avec AAD par enregistrement. Clé maître dans le trousseau OS ou un fichier vérifié hors base. Le clair ne quitte jamais le serveur.
Hash-chained archive
Append-only SHA-256 chain anchored to the company SIRET. Postgres ON DELETE DO INSTEAD NOTHING rule installed at the table layer. Daily integrity-walk cron flags tampering on the company chatter.
Chaîne SHA-256 ancrée au SIRET. Règle Postgres ON DELETE DO INSTEAD NOTHING installée au niveau table. Cron quotidien de vérification d'intégrité.
A day in the life
An AP clerk posts the September invoices. Zero compliance overhead.
Post the invoice in Odoo as normal
No new screen, no extra form. The standard "Confirm" action triggers Factur-X build + EN 16931 pre-flight in one step.
Aucun nouvel écran. L'action « Confirmer » habituelle déclenche la construction Factur-X et la pré-validation EN 16931.
PPF resolves the recipient PDP
SIRET to recipient-PDP lookup runs in the background, signed response handled, result cached for 6 hours.
L'annuaire PPF résout le SIRET vers la PDP destinataire. Réponse signée traitée, résultat mis en cache 6 heures.
Sent through your PDP
TLS 1.3 with per-PDP certificate pinning at the handshake. Wrong certificate aborts before any byte of the request leaves the process.
TLS 1.3 avec épinglage de certificat par PDP. Un mauvais certificat bloque la requête avant tout envoi.
Webhook lands with HMAC verified
The PDP callback hits an unguessable URL, HMAC-SHA256 verified, event_id deduplicated. State advances atomically.
Le rappel PDP arrive sur une URL non devinable, HMAC vérifié, event_id dédupliqué. État avancé atomiquement.
Sealed into the archive chain
A new SHA-256 chain entry appends, anchored to the company SIRET. Postgres rule blocks any future DELETE; daily integrity cron polices the chain.
Une nouvelle entrée SHA-256 est ajoutée à la chaîne, ancrée au SIRET. Règle Postgres anti-DELETE active, cron quotidien d'intégrité.
Where stock Odoo stops
Half a solution leaves you exposed to the full penalty.
A short, honest comparison without naming names. Stock Odoo and most community modules cover only a slice of the September 2026 mandate; the slice they miss is the one the DGFiP audits.
Une demi-solution vous expose à la sanction complète. Plusieurs modules sur le marché prétendent adresser la réforme 2026 ; en pratique, ils couvrent une tranche seulement, et c'est celle que la DGFiP audite.
Factur-X PDF, nothing else
Builds a Factur-X PDF on a button click, then stops. No PDP routing, no PPF lookup, no Chorus Pro, no lifecycle, no e-reporting, no archive. You still pay the PDP integrator's invoice.
Construit un PDF Factur-X et s'arrête là. Pas de routage PDP, pas d'annuaire PPF, pas de Chorus Pro, pas de cycle de vie, pas d'e-reporting, pas d'archive.
Chorus Pro only
Sends B2G invoices through Chorus Pro. The B2B half of the mandate (every private-sector invoice you issue) is unaddressed. You ship public-sector compliance and miss 90 percent of your invoice volume.
Adresse seulement le B2G via Chorus Pro. La moitié B2B (toutes les factures du secteur privé) n'est pas couverte. Vous livrez 10 pour cent de la conformité.
Full chain, one module
Build, validate, route via PDP or Chorus Pro, resolve through PPF, follow the 14-state DGFiP lifecycle, file e-reporting, seal into a tamper-evident archive. One module, one price, one API call.
Nous livrons la chaîne complète. Construction, validation, routage via PDP ou Chorus Pro, résolution PPF, suivi du cycle DGFiP à 14 états, dépôt e-reporting, scellement dans une archive vérifiable. Un module, un prix.
Security
Designed against a deliberate adversarial threat model.
TLS 1.3 + cert pinning
Per-PDP SHA-256 fingerprint asserted at handshake.
Empreinte SHA-256 par PDP, vérifiée à la poignée de main.
Defused XML
XXE, DTD, billion-laughs rejected at parse. DOCTYPE preamble refused.
XXE, DTD, attaques d'expansion rejetées au parsing. Préambule DOCTYPE refusé.
HMAC webhooks
SHA-256 body signature plus 192-bit URL token. Constant-time compare. Idempotency on every event.
Signature SHA-256 et jeton URL 192 bits. Comparaison à temps constant.
AES-256-GCM vault
Per-record associated data. Master key in OS keyring or external file.
AAD par enregistrement. Clé maître dans le trousseau OS ou fichier externe.
Postgres-level DELETE block
ON DELETE DO INSTEAD NOTHING rule on the archive table; even a superuser psql session cannot remove a row.
Règle ON DELETE DO INSTEAD NOTHING sur la table archive ; même un superutilisateur en psql ne peut pas supprimer.
Compare-and-set FSM
State transitions via atomic SQL UPDATE WHERE state = expected. Concurrent advance rejected.
Transitions d'état via UPDATE atomique. Avance concurrente rejetée.
API key redaction
Audit log redacts every credential field at write. Recursion into lists and tuples.
Audit redacte chaque champ d'identifiant à l'écriture. Récursion dans listes et tuples.
Multi-company isolation
Per-company PDP credentials, per-company archive chain, per-company audit log. Record rules on every model.
Identifiants PDP par société, chaîne d'archive par société, journal par société.
FAQ
Common questions, direct answers.
Will the module be ready before the September 1, 2026 deadline?
Yes. The module is shipping today; version 1 covers every documented DGFiP requirement for Phase 1. Subsequent patches add named first-party PDP adapters as their developer-partner agreements close.
Le module sera-t-il prêt avant le 1er septembre 2026 ?
Oui. Le module est livré aujourd'hui ; la version 1 couvre toutes les exigences DGFiP documentées pour la Phase 1.
Do I need to install a separate Factur-X module?
No. The Factur-X builder, the EN 16931 validator, the CII parser, the PDF/A-3 conformance step, and the PDP transport are all in this module. One install covers the full chain.
Faut-il installer un module Factur-X séparé ?
Non. Le constructeur Factur-X, le validateur EN 16931, le parseur CII, la conformité PDF/A-3 et le transport PDP sont tous dans ce module.
Which PDPs does it support?
Any DGFiP-accredited PDP. The generic REST adapter is configured by URL and credentials on the PDP record; no code needed. Named first-party adapters land on the 1.x patch line as their developer-partner agreements close.
Quelles PDP sont supportées ?
Toute PDP accréditée par la DGFiP. L'adaptateur REST générique se configure par URL et identifiants sur la fiche PDP, sans code.
How are my API keys protected?
AES-256-GCM ciphertext at rest, with associated data binding the ciphertext to the PDP record. The master key is sourced from the OS keyring or a file that lives outside the Odoo database; plaintext never touches the DB. Audit logs redact every credential field.
Comment mes clés API sont-elles protégées ?
Chiffrement AES-256-GCM au repos, avec données associées liant le chiffré à la fiche PDP. Clé maître dans le trousseau OS ou un fichier hors base.
Is the archive admissible in a regular audit?
Yes. Every entry carries a SHA-256 hash chained to the prior entry and anchored to your company SIRET. The Postgres ON DELETE DO INSTEAD NOTHING rule blocks row removal even by superuser. A daily integrity-walk cron posts a chatter warning the moment a hash link breaks.
L'archive est-elle recevable lors d'un contrôle ?
Oui. Chaque entrée porte un SHA-256 chaîné, ancré au SIRET. Règle Postgres anti-DELETE même superutilisateur. Cron quotidien d'intégrité.
What is the support model?
Email support included with the one-time purchase. Optional support tier with documented response SLAs for production deployments. Source code is auditable under OPL-1; functional and technical training available from ERP Heritage.
Quel est le modèle de support ?
Support par e-mail inclus avec l'achat. Offre de support optionnelle avec SLA documentés. Code source auditable sous OPL-1.
Will it run on Odoo 17, 18, and 19?
Same code lineage targets 17.0, 18.0, and 19.0. Buy once per version; identical feature set across all three. The 16.0 backport is also available on request.
Compatible Odoo 17, 18 et 19 ?
Même lignée de code pour 17, 18 et 19. Un achat par version, même périmètre.
Pricing
USD 349 · one-time · OPL-1
One flat price per Odoo version. No subscription, no per-user fee, no per-company tax. Includes Community and Enterprise.
Un prix forfaitaire par version Odoo. Sans abonnement, sans coût par utilisateur, sans coût par société.
Buy on the Odoo Apps StoreSupport & Licensing
Commercial, audit-ready, maintained.
Licensed under OPL-1 (Apps Store standard). Issues reported by email get a first response within one business day. Implementation services, training, and onboarding for production deployments available from ERP Heritage; partner integrators in France recommendable on request.
Support et licence
Commercial, prêt pour le contrôle, maintenu.
Licence OPL-1. Première réponse par e-mail sous un jour ouvré. Services d'implémentation, formation et accompagnement disponibles auprès d'ERP Heritage ; intégrateurs partenaires en France recommandés sur demande.
Talk to ERP Heritage about France e-Invoicing, customisation, training, or support.
Discutez avec ERP Heritage de la facturation électronique française, des personnalisations, des formations et du support.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module