Skip to content

Developer notes

How France E-Invoicing (kv_fr_e_invoicing) builds its files, which official rules it follows (with the source of each), how it talks to the platforms, and where the data lives. Points we could not confirm in an official text are marked Not verified instead of being guessed.

All sources are official texts or the platforms’ own published API descriptions. Retrieved on 7 November 2026.

Topic Rule applied by the add-on Official source
Calendar Receiving e-invoices: all companies from 1 September 2026. Issuing and e-reporting: large and mid-size companies from 1 September 2026, all other companies (SMEs, micro) from 1 September 2027. Loi de finances 2024 n° 2023-1322 art. 91 (amending art. 26 of LFR 2022); DGFiP Spécifications externes v3.2 (30/04/2026), Dossier général §2.3.5; DGFiP Guide pratique de démarrage (July 2026), “maintien du calendrier légal”
Use of an accredited platform Issuing, sending and receiving e-invoices go through a plateforme agréée (PA); the PA sends the data to the tax administration. CGI art. 289 bis I and art. 289 E as amended by Loi de finances 2026 n° 2026-103 art. 123 (legifrance JORFARTI000053508878)
Penalties (information only, not enforced by the add-on) EUR 50 per invoice not issued electronically (cap EUR 15,000 per year); EUR 500 per missing e-reporting transmission (cap EUR 15,000 per year); no fine for a first offence corrected within 30 days. CGI art. 1737 III and art. 1788 D as amended by LF 2026; service-public.gouv.fr news A18802 (20/02/2026)
Mandatory mentions Buyer SIREN; delivery address when it differs from the billing address; category of the operation (goods, services or both); the option to pay VAT on debits when taken. CGI annexe II art. 242 nonies A (version from 1 January 2025, décret 2024-1195), 1°, 7° bis, 8° bis, 11° bis
SIREN encoding Seller SIREN in BT-30 and buyer SIREN in BT-47, both with scheme 0002 (rule G1.63: mandatory, with their scheme). SIRET with scheme 0009 (rule G1.73). Spécifications externes v3.2, Annexe 7 Règles de gestion v1.9, G1.63, G1.73
Electronic address BT-34 / BT-49 with scheme 0225 (“FRCTC electronic address”); default value = the SIREN. Annexe 7 v1.9, code list for BT-34-1 / BT-49-1
Operation category BT-23 cadre de facturation: B1 / S1 / M1 (goods / services / both), B2 / S2 / M2 when the invoice is already paid. Mandatory from 1 September 2026. Annexe 7 v1.9, G1.02 and G6.08
VAT on debits BT-8 code 5 in CII (ApplicableTradeTax/DueDateTypeCode), the same in every VAT breakdown, only when the seller opted for VAT on debits. Annexe 7 v1.9, G1.43 and S1.13
Delivery address BG-15 written whenever the order has a shipping address. Required in the tax data from 1 September 2027 when it differs, not for services. Annexe 7 v1.9, G6.16
Invoice number At most 35 characters: letters, digits, space, -, +, _, /, no leading, trailing or double spaces. Number + year + seller SIREN must be unique. Numbers come from a continuous chronological series. Annexe 7 v1.9, G1.05 and G1.45; CGI annexe II art. 242 nonies A I-7°
VAT rates Only 0, 0.9, 1.05, 1.75, 2.1, 5.5, 7, 8.5, 9.2, 9.6, 10, 13, 19.6, 20, 20.6 %. Annexe 7 v1.9, G1.24
VAT categories S, E, AE, K, G, O, Z (L and M not used in France). Annexe 7 v1.9, G2.31
Exempt sales A group with category E needs an exemption reason and code (G1.41) and the seller VAT ID (G1.47). Sellers under the VAT franchise without a VAT number may use category Z (G1.47). Annexe 7 v1.9, G1.40, G1.41, G1.47
Credit notes Type 381; the earlier invoice number in BT-25 (mandatory from 2026) and its date in BT-26 (mandatory from 2027). The add-on writes both at header level, never also on the lines. Annexe 7 v1.9, G1.01, G1.31
Note subject codes BT-21 codes from UNTDID 4451; DGFiP names AAB (early payment discount). Annexe 7 v1.9, G1.52
Lifecycle Mandatory statuses: 200 Déposée, 210 Refusée (buyer), 212 Encaissée (seller, amounts per VAT rate), 213 Rejetée (platform). 201-209 and 211 optional. Spécifications externes v3.2, Annexe 2 v2.3 (sheet Statuts), G7.44, G7.45, Dossier général table 8
E-reporting scope B2C transactions (flux 10.3, one entry per day, currency and category) and payments for B2C services (flux 10.4); international B2B in 10.1 / 10.2. Payment data only for services, not with reverse charge or VAT on debits. Dossier général v3.2 §3.7; Annexe 6 v1.10
Transaction categories TLB1 goods subject to VAT, TPS1 services subject to VAT, TNT1 operations not subject to French VAT (incl. intra-EU distance sales), TMA1 margin scheme. Annexe 7 v1.9, G1.68
E-reporting periods Normal regime, monthly returns: ten-day periods (send by the 20th, last day of the month, 10th of the next month), payments monthly by the 10th. Normal regime, quarterly returns: monthly, by the 10th of the next month. Simplified regime: monthly, by the last day of the next month. VAT franchise: every two calendar months, by the last day of the next month. Dossier général v3.2, table 13
E-reporting file Flux 10 XML (Report: ReportDocument, TransactionsReport, PaymentsReport), type IN (initial) or RE (corrective); sender = the platform (role WK, scheme 0238), declarant = the seller SIREN (role SE, scheme 0002); dates AAAAMMJJ. Annexe 6 v1.10 (TT-1 to TT-99); XSD folder 3- XSD_v3.2/1 - E-reporting of the v3.2 zip
Accredited platforms SUPER PDP (accredited 22/12/2025) and the other platforms are on the DGFiP list. Chorus Pro is the public-sector platform, not a PA. impots.gouv.fr/node/27127 (list updated 03/11/2026), file liste_pa_attente_rapport_audit.xlsx; Dossier général §2.3.4
Formats UBL, CII and Factur-X are the minimum set of formats every platform accepts, all following EN 16931. Dossier général v3.2 §3.6.3

Sources: Spécifications externes (zip v3.2, sha256 cd8f6e81…a3862), legifrance, entreprendre.service-public.gouv.fr, FNFE-MPE Factur-X.

  • Factur-X profile. No DGFiP text says that the Factur-X EN 16931 profile (the one the add-on writes) is enough by itself; FNFE-MPE describes an EXTENDED-CTC-FR profile for France. The add-on writes EN 16931 with every French reform field that EN 16931 can carry, as the platforms accept EN 16931 files (§3.6.3). Check with your platform.
  • Factur-X version. FNFE-MPE lists Factur-X 1.09.2 (August 2026). Its XSD and schematron are only downloadable after giving an e-mail address, so they are not shipped. The add-on validates the CII part against the UN/CEFACT D16B schema (the schema of the Factur-X EN 16931 profile) and the release QA runs the CEN EN 16931 schematron and Mustang / veraPDF.
  • BR-FR rules. The BR-FR-* rules are defined in the paid AFNOR standard XP Z12-012. The add-on implements the DGFiP rules listed above (G1.xx, G2.xx, G6.xx) instead.
  • PMT and PMD note codes. The notes for the fixed recovery fee (PMT) and late payment penalties (PMD) follow the French CIUS practice; only AAB, TXD and BLU are named in the DGFiP files.
  • VATEX-FR-FRANCHISE. The exemption code used for the VAT franchise (art. 293 B) comes from the CEF VATEX code list; it is not named in the DGFiP files.
  • Exports and B2C categories. B2C exports (category G, 0 %) are reported as TLB1 / TPS1 at 0 %; foreign VAT rates of distance sales are reported as TNT1 at 0 %.
  • Territory. France for the add-on = FR, MC, GP, MQ, RE as CS-Cart country codes.
  • Model\Builder turns an order into the EN 16931 model; Format\Cii writes the CII D16B XML (urn:cen.eu:en16931:2017); Pdf\FacturX writes a PDF/A-3b with factur-x.xml attached (AFRelationship Alternative, XMP fx: schema, ConformanceLevel EN 16931). Fonts: Noto Sans (OFL), subset.
  • Taxes are read with OrderTax, which supports both CS-Cart tax calculation methods (unit price: P_<item>, S_<group>_<shipping>, PS_<payment>; subtotal: P / S / PS + the items lists). The rate decides the VAT group; amounts are recomputed per group (BR-S-08/09). A difference of more than EUR 1 between the order total and the invoice is never written as rounding: the check fails (TOTAL) so a tax the add-on could not read is fixed first.
  • Validator runs on every document: XML Schema (resources/xsd/cii-d16b, UN/CEFACT D16B) and the rules in the table above. A failed check stops sending; the document can be rebuilt with the same number.
  • Dates are shop dates: CS-Cart sets the PHP time zone from Settings > Appearance > Time zone, and date() gives the issue date.
Driver Send Look up after a timeout Lifecycle Payment received (212) B2C e-reporting
SUPER PDP (Pa\SuperPdp) POST /v1.beta/invoices?external_id=<key>&processing_rule=B2B|B2BInt, body = Factur-X PDF GET /v1.beta/invoices?direction=out&order=desc matched on external_id (the API has no idempotency header) GET /v1.beta/invoice_events (fr:200 … fr:213) POST /v1.beta/invoice_events fr:212 with reported_data (type MEN, per rate) POST /v1.beta/b2c_transactions, /v1.beta/b2c_payments (a corrective period sends only the difference)
AFNOR Flow API (Pa\Afnor, any platform that offers XP Z12-013) POST /v1/flows multipart file + flowInfo (flowSyntax Factur-X, trackingId = key, sha256) POST /v1/flows/search {where: {trackingId}} flow acknowledgement (Pending / Ok / Error) not sent (portal) flux 10 XML as a flow with flowSyntax FRR
Manual (Pa\Manual) download, upload in the portal - set by hand portal download the flux 10 XML

Sources: SUPER PDP OpenAPI https://api.superpdp.tech/openapi/superpdp.json (1.39.0.beta, 2026-11-03); AFNOR Flow Service OpenAPI 1.3.0 as published by SUPER PDP (xp-z12-013-flow-1.3.0.json). OAuth 2 client credentials in both (/oauth2/token).

Testing. The drivers are tested against tests/mock-server/pa_mock.php, a local stand-in written from those two published contracts (same paths, bodies, answers and errors). They have not been run against a live SUPER PDP sandbox or another platform yet: SUPER PDP’s sandbox needs an account, which we do not create for tests. The listing says so.

  • A document’s request key (idem_key, at most 36 characters, SUPER PDP’s external_id limit) is stored before the upload, with status P (sending). A retry of a document in P first looks the earlier upload up and adopts it; only when nothing is found is it sent again. A rejected document gets a new key when it is sent again.
  • Per-object database locks (GET_LOCK): order (creating the invoice), seller numbering series, invoice (credit notes), document (send / poll), payment, report. The unique source_key (I:<order>, C:<invoice>:<form token>) makes a repeated request return the existing document.
  • Documents::advance() never moves a status backwards; F, J and K are final.
  • Credit notes are built from what is still open (Issuer::remaining(): earlier credit notes subtracted) and are refused while the invoice is still being sent.
Table Contents
kv_fr_e_invoicing_documents Invoices and credit notes: number, date, channel (B domestic B2B, X international B2B, R B2C, N out of scope), category, totals, status, platform id, request key, model (JSON), CII, PDF (base64), check result, payment state
kv_fr_e_invoicing_events Lifecycle events (unique per platform event id)
kv_fr_e_invoicing_reports E-reporting transmissions per seller, kind (T / P) and period, type IN / RE, payload (flux 10 XML)
kv_fr_e_invoicing_sellers Seller identity per seller id
kv_fr_e_invoicing_series Gapless counters
kv_fr_e_invoicing_products Product nature (goods / services)
kv_fr_e_invoicing_accounts, _jobs, _log Connection (secrets AES-256-GCM), queue, log

Seller id: 0 for CS-Cart and CS-Cart Ultimate (one legal seller for all storefronts) and for Multi-Vendor in marketplace mode; the vendor id in vendor mode.

  • PHP hooks: change_order_status_post (create the invoice, record the payment, automatic credit note), delete_order (log only), update_product_post (product nature).
  • Template hooks: orders:tabs_extra, orders:manage_header, orders:manage_data, products:update_product_amount (admin); orders:details_tools (storefront).
  • Full page cache: nothing is printed on cacheable pages; the storefront output is on the customer’s order page (session page) and the download controller (Cache-Control: private, no-store).
  • Cron: php admin.php --dispatch=kv_fr_e_invoicing.cron or the secret URL from the settings.
  • Upgrades: Upgrade\Synchronizer applies new tables, settings and language variables after files are replaced; fn_kv_fr_e_invoicing_upgrade_sync() re-creates the profile fields.