Issuing electronic invoices — SMEs and micro-businesses (1 September 2027)
Status as of 21/07/2026: scope delivered = generation, validation (Epic 1), documentation (Epic 2), public validator (Epic 3), self-service accounts/billing (Epic 4), Factur-X/CII extraction (Epic 5), and UBL generation/conversion/extraction (Epic 6).
What the reform says
After large companies and mid-caps (ETI) (1 September 2026), SMEs and micro-businesses will have to issue their invoices in a structured electronic format from 1 September 2027. This is the primary market window targeted by Heartwood (see the project's PRD).
What Heartwood covers today
- Factur-X generation compliant with the two profiles retained by the
French minimum core standard (AFNOR standard XP Z12-012): EN 16931
and EXTENDED-CTC-FR — the only two profiles of the French minimum
core standard (AFNOR standard XP Z12-012). The generic
BASICprofile is absent from this core standard: it does not carry the French extensions (EXT-FR-FE-*) and will be rejected on inspection. A necessary nuance: no official text explicitly states "BASIC is refused" — it is an exclusion by omission (the word appears nowhere in the external DGFiP v3.2 specifications), not a written prohibition. - Structural validation (XSD) of the embedded CII, with a detailed report.
- Versioned and listable rule packs (
GET /v1/rulepacks) — the rule repository applied is always identified in each response.
What Heartwood also covers since Epic 4
- Self-service signup (
POST /signup+ email verification) and account area (/account/) to manage API keys and track usage — see the getting started guide and the accounts and billing page. - Paid tiers (Starter/Pro/Éditeur) via Stripe Checkout, card/invoice/ cancellation management via the Stripe Customer Portal — see accounts and billing.
What Heartwood also covers since Epic 5/6
- Extraction of Factur-X, CII or UBL to normalized JSON
(
POST /v1/extract) — see extraction examples. - UBL 2.1 generation (
fr-socle,peppol-bis) and conversions CII↔UBL, CII→Factur-X packaging, raw CII extraction from an existing Factur-X (POST /v1/generate/ubl,POST /v1/convert) — see Peppol Belgium, UBL generation examples and conversion examples.
What Heartwood does NOT cover yet
- XRechnung (Germany): not exposed (J4 license/corpus spike not done) — see XRechnung Germany.
- Schematron validation (BR- rules)*: real since Story 3.7/3.8 for
Factur-X/CII and UBL (EN16931 and EXTENDED-CTC-FR profiles,
official FNFE-MPE reference repository,
schematronChecked: true, automatic format detection submitted toPOST /v1/validate) — see validation report. No automated non-regression corpus in CI for either format (spot-checked on a few official examples only, seerulepacks/README.md). - 80%/100% quota alerts and Stripe accounting reconciliation: counting and billing work, but these two operational mechanisms are not yet wired up (see Story 4.4, Dev Notes).
Fidelity to the EXTENDED-CTC-FR profile
The EXTENDED-CTC-FR profile carries requirements specific to the French context (specific tax mentions, rounding tolerances, multi-delivery at line level). The current model covers the common core with EN 16931; the particularities specific to EXTENDED-CTC-FR are not all modeled yet — do not presume full compliance with this profile before a story dedicated to its complete fidelity.