FacturConforme

Description

La France rend la facturation électronique obligatoire. À partir du 1er septembre 2026, toute entreprise assujettie à la TVA doit être en mesure de recevoir des factures électroniques, et de nouvelles mentions deviennent obligatoires. À partir du 1er septembre 2027, les TPE et PME devront émettre leurs factures dans un format structuré et transmettre leurs données de transaction (e-reporting).

Une boutique WooCommerce n’est pas prête telle quelle. Elle ne collecte pas le SIREN du client, ne qualifie pas la nature de l’opération et ne porte pas les mentions légales obligatoires exigées par le droit français.

FacturConforme comble ce manque.

À noter : les règles mises en œuvre par cette extension sont françaises. L’interface existe en français et en anglais, et suit la langue de votre site.

Ce que fait l’extension

  • Ajoute un champ SIREN / SIRET et un champ de TVA intracommunautaire à la commande, aussi bien sur le tunnel classique que sur le tunnel en blocs.
  • Vérifie les identifiants par le calcul : clé de Luhn pour le SIREN et le SIRET, et clé de contrôle des numéros de TVA français dont la clé est numérique. Les numéros de TVA étrangers ne sont contrôlés que sur le code pays et la forme, sans interrogation d’aucun registre. Les fautes de frappe sont détectées à la commande, et non six mois plus tard.
  • Détermine automatiquement la catégorie de l’opération — livraison de biens, prestation de services ou opération mixte — d’après le contenu de la commande.
  • Porte les mentions légales obligatoires exigées par le code de commerce : pénalités de retard, indemnité forfaitaire de recouvrement de 40 euros et escompte pour paiement anticipé.
  • Produit la facture sous forme de fichier XML CII au profil EN 16931, l’un des trois formats acceptés par la réforme.
  • Produit les avoirs des commandes remboursées, en référençant la facture qu’ils rectifient.
  • Attribue de véritables numéros de facture : une séquence chronologique et sans trou, distincte des numéros de commande, attribuée sous verrou de base de données et jamais recalculée. Les avoirs ont leur propre séquence.
  • Fige chaque document émis : le XML est construit une seule fois, archivé avec son empreinte SHA-256 et chaîné au précédent ; tout téléchargement ultérieur restitue exactement ces octets.
  • Signale, commande par commande, ce qui manque pour que la facture soit conforme, avec une colonne dédiée dans la liste des commandes et un tableau de bord de synthèse.
  • Summarises the transactions subject to e-reporting, split into ten-day or monthly periods according to your VAT regime, with a CSV export. This summary is an aid to your declaration, not a declaration file: it does not convert currencies and does not deduct refunds, and it says so where those cases occur.

Ce que produit exactement cette extension

Elle produit un document XML CII suivant le profil EN 16931 de la spécification Factur-X. Une facture Factur-X complète est un fichier PDF/A-3 contenant ce XML ; cette extension génère le XML seul, qui est l’un des trois formats que la réforme française accepte à part entière.

Validation

Chaque document émis par l’extension est contrôlé avec les artefacts officiels Factur-X du profil EN 16931 : le schéma XSD et les règles métier Schematron, exécutés en local sur une matrice de scénarios fiscaux — biens, services, mixte, deux taux de TVA, port, frais annexes, remises, virement bancaire, exonération, autoliquidation, hors champ, taux zéro, et avoirs y compris le remboursement du seul port. Un échantillon a également été soumis au validateur en ligne de la FNFE-MPE (rapports 2026-139776 et 2026-139777, profil CII EN 16931).

Cela établit que les documents sont bien formés et respectent les règles de la norme. Cela ne dit pas que votre comptabilité est juste : elle reste la vôtre, et celle de votre comptable.

Ce qu’apporte la version Pro

La transmission automatique vers une plateforme agréée, l’e-reporting automatisé et les statuts du cycle de vie des factures relèvent de la version Pro, disponible sur facturconforme.fr.

Indépendance

L’extension n’est liée à aucune plateforme agréée. Vous choisissez la vôtre ; l’extension s’y connecte.

Captures d’écrans

Installation

  1. Installez et activez l’extension.
  2. FacturConforme
  3. Saisissez le SIREN et le numéro de TVA de votre boutique.
  4. Choisissez le comportement du champ SIREN lors de la commande.

FAQ

L’extension transmet-elle mes factures à l’administration fiscale ?

Non. La version gratuite prépare et contrôle les données. La transmission doit passer par une plateforme agréée et relève de la version Pro.

Will my private customers see the SIREN field?

Le champ est facultatif par défaut. Vous pouvez le rendre obligatoire uniquement lorsque le client ou la cliente saisit un nom d’entreprise.

L’extension est-elle compatible avec le stockage des commandes haute performance (HPOS) ?

Oui, ainsi qu’avec le tunnel de commande en blocs.

Pourquoi certaines commandes ne donnent-elles pas lieu à une facture électronique ?

Les ventes à des particuliers et à la clientèle établis hors de France ne font pas l’objet d’une facture électronique : elles relèvent du e-reporting. L’extension marque ces commandes en conséquence au lieu de générer un fichier qui serait rejeté.

Avis

Il n’y a aucun avis pour cette extension.

Contributeurs/contributrices & développeurs/développeuses

« FacturConforme » est un logiciel libre. Les personnes suivantes ont contribué à cette extension.

Contributeurs

“FacturConforme” a été traduit dans 1 locale. Remerciez l’équipe de traduction pour ses contributions.

Traduisez « FacturConforme » dans votre langue.

Le développement vous intéresse ?

Parcourir le code, consulter le SVN dépôt, ou s’inscrire au journal de développement par RSS.

Journal des modifications

0.9.2

  • Les factures portent désormais une date d’échéance et les coordonnées de contact de l’acheteur, facultatives dans EN 16931 mais exigées par plusieurs plateformes agréées, qui refusaient d’émettre une facture sans elles. Le délai de paiement, en jours, est un nouveau réglage ; laissez-le à zéro pour un paiement à la commande, cas habituel d’une boutique en ligne.
  • The numbering policy could not, in fact, be switched after the first invoice — it was already frozen. A test now protects that guard: without it, unchecking the yearly reset restarts at 1 on a second counter and reissues numbers already used.

0.9.1

  • Class, constant, option, meta key and hook prefixes lengthened from FC_ to FCONF_, so they meet the four-character minimum and are far less likely to collide with another plugin.
  • Admin notices are shown only to users who can act on them, and the issuance result appears only on WooCommerce screens.

0.9.0

  • Credit note totals were wrong whenever shipping or fees were refunded: line amounts were summed negative while charges were summed positive, so the document stated a total that was neither the sum of its own parts nor the amount actually refunded. All amounts are now brought into the document’s orientation before any addition, and the official Schematron confirms the fix.
  • Refunding shipping alone produced a credit note with no line at all, which the standard rejects. Shipping and fees now become invoice lines when they are the only thing refunded.
  • Every issued document is reconciled against the WooCommerce total before it is recorded. A document whose total does not match is refused rather than stored.
  • The invoice number and the document are now written in a single operation. A failure in the generator no longer leaves an order numbered but without a document; a number consumed without a document is recorded, so a gap in the sequence can be justified.
  • Yearly numbering no longer resets a shared counter: each year has its own counter, which removes the race two requests could hit on 1 January. The numbering policy is frozen once the first invoice is issued.
  • Dates and the numbering year now follow the site timezone. In UTC, the first invoice issued after midnight on 1 January fell into the closed year’s series.
  • Issued documents are archived base64-encoded: with legacy order storage, WordPress strips backslashes from metadata, and a document containing one no longer matched its own fingerprint.
  • Out-of-scope operations no longer carry a VAT rate or VAT identifiers, as the standard requires. Intra-community supply and export were removed from the VAT categories: they need a delivery country and a foreign buyer, which this plugin routes to e-reporting rather than invoicing.
  • A VAT category and its reason are now required for lines without VAT wherever they appear, shipping and fees included, and compound taxes block issuance instead of merely warning.
  • SEPA direct debit is no longer declared as a card payment when it runs through another gateway, and no longer asks for the seller IBAN, which is not the account concerned.
  • A document can no longer be built without an allocated number.

0.8.1

  • Escaping fixed on the two hidden fields and the nonce of the new issue form, reported by Plugin Check.

0.8.0

  • Issuing an invoice is now an explicit action. It checks the order, allocates the number under a lock, builds the document once and freezes it with a SHA-256 fingerprint. Downloads serve exactly those bytes. Previously the XML was rebuilt on every download from the current order and settings, so two different documents could carry the same invoice number.
  • Downloading no longer allocates a number. A preview click used to consume a sequence number, even on an order that could not be invoiced.
  • Invoice numbers are allocated under a named database lock, so two simultaneous requests cannot consume two numbers for one order and leave a gap in the sequence.
  • The yearly counter reset is now atomic, is refused when the template carries no year, and the template itself is frozen once the first invoice has been issued.
  • Uninstalling keeps the sequence counters. Deleting them meant a reinstall restarted at 1 and reissued numbers already used.
  • Credit notes: dated on the refund, not on the invoice; refunded quantities and unit prices preserved; refunded shipping and fees stay charges instead of turning into discounts; their own continuous sequence. Amount-only refunds are refused with an explanation instead of producing an empty credit note.
  • A line without VAT must now say which category it falls under — exemption, reverse charge, out of scope, intra-community supply, export or genuine zero rate — with its reason. Everything was previously declared zero-rated, which is wrong on most French invoices and invisible to validators.
  • Bank transfer without an IBAN, missing seller VAT number while the order carries VAT, missing billing country, incomplete customer address and compound taxes are now reported instead of passing as compliant. An unknown payment gateway is declared as undefined rather than as an online payment.
  • E-reporting: a period entirely in a foreign currency is now flagged, refunds are attributed to their own date, VAT rates are read from the WooCommerce tax lines instead of being recomputed by division, and each period is aggregated once instead of twice.
  • Minimum WooCommerce version raised to 8.9, the release that introduced the additional checkout fields API the block checkout relies on.

0.7.0

  • Interface translated into English, with a complete French translation shipped. French stores see exactly the same wording as before.
  • The mandatory legal wording of the invoice is no longer part of the interface translation: it is invoice content, imposed by French law, and now goes through a filter so it can be replaced country by country.
  • Invoice number templates accept {year}, {month} and {number}. The former {annee}, {mois} and {num} keep working.

0.6.1

  • Removed the author URI, which duplicated the plugin URI and blocked submission to the plugin directory.
  • Declared WooCommerce as a required plugin, so the site prevents activation without it instead of showing a notice afterwards.
  • Updated the WooCommerce compatibility range.

0.6.0

  • Readme rewritten in English, as required by the WordPress plugin directory.
  • CSV export rewritten without direct stream functions.
  • Translation loading left to WordPress, as recommended since version 4.6.
  • Direct database calls documented: the atomic allocation of invoice numbers cannot be done through the options API without risking duplicate numbers.

0.5.1

  • Clear separation between electronic invoicing and e-reporting. Sales to private individuals or to customers outside France no longer produce an electronic invoice.

0.5.0

  • Corrections from the official FNFE-MPE validator: billing mode (BT-23), the three mandatory legal mentions, seller and buyer electronic addresses (BT-34, BT-49), and IBAN requirement for bank transfers.

0.4.0

  • Proper invoice numbering, atomically allocated. Credit notes for refunds.

0.3.0

  • Résumé de reporting électronique avec exportation CSV.

0.2.0

  • Génération du XML CII suivant le profil EN 16931.

0.1.0

  • First version: identifier collection, mandatory mentions and compliance checks.