Title: FacturConforme
Author: turbule
Published: <strong>September 1, 2026</strong>
Last modified: September 3, 2026

---

Search plugins

![](https://ps.w.org/facturconforme/assets/banner-772x250.png?rev=3676194)

![](https://ps.w.org/facturconforme/assets/icon-256x256.png?rev=3676194)

# FacturConforme

 By [turbule](https://profiles.wordpress.org/turbule/)

[Download](https://downloads.wordpress.org/plugin/facturconforme.0.9.2.zip)

 * [Details](https://wordpress.org/plugins/facturconforme/#description)
 * [Reviews](https://wordpress.org/plugins/facturconforme/#reviews)
 *  [Installation](https://wordpress.org/plugins/facturconforme/#installation)
 * [Development](https://wordpress.org/plugins/facturconforme/#developers)

 [Support](https://wordpress.org/support/plugin/facturconforme/)

## Description

France is making electronic invoicing mandatory. From 1 September 2026, every VAT-
registered company must be able to receive electronic invoices, and new mentions
become mandatory on invoices. From 1 September 2027, small and medium companies 
must issue their invoices in a structured format and transmit their transaction 
data (e-reporting).

A WooCommerce store is not ready out of the box. It does not collect the customer’s
SIREN number, does not qualify the nature of the operation, and does not carry the
mandatory legal mentions required by French law.

FacturConforme fills that gap.

**Please note:** the rules this plugin implements are French. The interface is available
in English and in French, and follows your site language.

#### What the plugin does

 * Adds a SIREN / SIRET field and an intra-community VAT field to the checkout, 
   on both the classic and the block checkout.
 * Validates the identifiers mathematically: Luhn key for SIREN and SIRET, and the
   control key for French VAT numbers whose key is numeric. Foreign VAT numbers 
   are checked for country code and shape only, not against any registry. Typing
   mistakes are caught at checkout instead of six months later.
 * Determines the category of the operation automatically — supply of goods, supply
   of services, or mixed — from the contents of the order.
 * Carries the mandatory legal mentions required by the French commercial code: 
   late payment penalties, the 40 euro recovery fee, and early payment discount.
 * Generates the invoice as a CII XML file following the EN 16931 profile, one of
   the three formats accepted by the reform.
 * Produces credit notes for refunded orders, referencing the invoice they correct.
 * Assigns proper invoice numbers: a chronological, gap-free sequence, distinct 
   from order numbers, allocated under a database lock and never recalculated. Credit
   notes get their own sequence.
 * Freezes each issued document: the XML is built once, stored with its SHA-256 
   fingerprint and chained to the previous one, and every later download serves 
   exactly those bytes.
 * Reports, order by order, what is missing for the invoice to be compliant, with
   a dedicated column in the order list and a summary dashboard.
 * 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.

#### What this plugin produces, precisely

It produces a **CII XML document following the EN 16931 profile** of the Factur-
X specification. A complete Factur-X invoice is a PDF/A-3 file carrying that XML
inside it; this plugin generates the XML alone, which is one of the three formats
the French reform accepts in its own right.

#### Validation

Every document the plugin issues is checked against the official Factur-X artefacts
for the EN 16931 profile: the XSD schema and the Schematron business rules, run 
locally at build time over a matrix of fiscal scenarios — goods, services, mixed,
two VAT rates, shipping, fees, discounts, bank transfer, exemption, reverse charge,
out of scope, zero rate, and credit notes including refunds of shipping alone. A
sample was also submitted to the FNFE-MPE online validator (reports 2026-139776 
and 2026-139777, profile CII EN 16931).

This says the documents are well formed and follow the standard’s rules. It does
not say your accounting is right: that remains yours, and your accountant’s.

#### What the Pro version adds

Automatic transmission to an approved platform, automated e-reporting, invoice lifecycle
statuses and supplier invoice reception are part of the Pro version, available on
facturconforme.fr.

#### Independence

The plugin is not tied to any approved platform. You choose yours; the plugin connects
to it.

## Screenshots

[⌊The compliance dashboard: what is missing, order by order, before an invoice can
be issued.⌉⌊The compliance dashboard: what is missing, order by order, before an
invoice can be issued.⌉[

The compliance dashboard: what is missing, order by order, before an invoice can
be issued.

[⌊On each order: the compliance status, the issued invoice with its number and fingerprint,
and the credit notes.⌉⌊On each order: the compliance status, the issued invoice 
with its number and fingerprint, and the credit notes.⌉[

On each order: the compliance status, the issued invoice with its number and fingerprint,
and the credit notes.

[⌊The e-reporting summary, split into ten-day or monthly periods according to your
VAT regime.⌉⌊The e-reporting summary, split into ten-day or monthly periods according
to your VAT regime.⌉[

The e-reporting summary, split into ten-day or monthly periods according to your
VAT regime.

[⌊The settings: store identity, collection at checkout, VAT categories and mandatory
mentions.⌉⌊The settings: store identity, collection at checkout, VAT categories 
and mandatory mentions.⌉[

The settings: store identity, collection at checkout, VAT categories and mandatory
mentions.

## Installation

 1. Install and activate the plugin.
 2. Go to WooCommerce > Settings > FacturConforme.
 3. Enter your store SIREN and VAT number.
 4. Choose how the SIREN field behaves at checkout.

## FAQ

### Does the plugin transmit my invoices to the tax administration?

No. The free version prepares and checks the data. Transmission must go through 
an approved platform, and is part of the Pro version.

### Will my private customers see the SIREN field?

The field is optional by default. You can make it mandatory only when the customer
fills in a company name.

### Is the plugin compatible with High-Performance Order Storage?

Yes, and with the block checkout as well.

### Why is there no electronic invoice for some orders?

Sales to private individuals and to customers established outside France are not
electronically invoiced: they fall under e-reporting. The plugin marks those orders
accordingly instead of producing a file that would be rejected.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“FacturConforme” is open source software. The following people have contributed 
to this plugin.

Contributors

 *   [ turbule ](https://profiles.wordpress.org/turbule/)

[Translate “FacturConforme” into your language.](https://translate.wordpress.org/projects/wp-plugins/facturconforme)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/facturconforme/), check
out the [SVN repository](https://plugins.svn.wordpress.org/facturconforme/), or 
subscribe to the [development log](https://plugins.trac.wordpress.org/log/facturconforme/)
by [RSS](https://plugins.trac.wordpress.org/log/facturconforme/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.9.2

 * Invoices now carry a due date and the buyer’s contact details, both optional 
   in EN 16931 but required by several approved platforms, which refused to issue
   an invoice without them. The payment term, in days, is a new setting; leave it
   at zero for payment on order, which is the usual case for an online shop.
 * 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

 * E-reporting summary with CSV export.

#### 0.2.0

 * CII XML generation following the EN 16931 profile.

#### 0.1.0

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

## Meta

 *  Version **0.9.2**
 *  Last updated **14 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [e-invoicing](https://wordpress.org/plugins/tags/e-invoicing/)[factur-x](https://wordpress.org/plugins/tags/factur-x/)
   [facturation electronique](https://wordpress.org/plugins/tags/facturation-electronique/)
   [invoicing](https://wordpress.org/plugins/tags/invoicing/)[woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/facturconforme/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/facturconforme/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/facturconforme/reviews/)

## Contributors

 *   [ turbule ](https://profiles.wordpress.org/turbule/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/facturconforme/)