DEV Community

Olivier EBRAHIM
Olivier EBRAHIM

Posted on

Factur-X 2026: Implementation Guide for French Construction SaaS

Factur-X 2026: Implementation Guide for French Construction SaaS

TL;DR

France's mandatory e-invoice standard (Factur-X) kicks in June 2026 for B2B transactions. If you're building SaaS for construction SMBs, you need to implement it now. This guide covers what changed, why it matters, and how to avoid the 5 most common pitfalls that cause invoice rejection.

What is Factur-X and Why Should You Care?

Factur-X is a hybrid standard combining:

  • UBL XML (technically compliant, machine-readable invoice data)
  • PDF/A-3 wrapper (human-readable invoice for printing and archiving)
  • Embedded metadata (invoice details baked into the PDF itself)

This isn't optional. From June 17, 2026, all B2B invoices in France must comply. Failure to comply = invoices rejected by buyer accounting systems = payment delays = cash flow crisis.

For construction SMBs, this is existential: no invoice → no payment → no materials → no work.

Critical Dates

  • June 2026: Large enterprises (>250 employees) MUST be able to receive Factur-X invoices
  • January 2027: ALL businesses (including SMBs) MUST send AND receive Factur-X
  • Penalties: Up to €15,000 per non-compliant invoice (and yes, they audit)

The 5-Minute Technical Overview

File Structure

A Factur-X file is a PDF/A-3 with embedded XML. When you open it in Adobe Reader or Outlook, you see a normal invoice PDF. But underneath:

PDF/A-3 Document
├── /EmbeddedFile → factur-x.xml (the machine-readable invoice)
├── /Annots → Visual link to invoice data
└── /Metadata → Factur-X conformance level declared
Enter fullscreen mode Exit fullscreen mode

Users don't see the XML, but their accounting software (Sage, Ciel, SAP, even Odoo) reads it automatically. This is the whole point: invoices that humans AND machines can parse.

Minimum Required Fields

Every Factur-X invoice MUST include:

  • Invoice identifier (unique number + date)
  • Seller details (business name + SIRET or SIREN—no exceptions)
  • Buyer details (business name + SIRET or SIREN—mandatory even for SMBs)
  • Line items (description, quantity, unit price, VAT category)
  • Totals (subtotal, VAT amount, grand total)
  • Payment terms (structured: due date in ISO 8601 format, payment method code)
  • Payment account (IBAN/BIC for SEPA transfers—mandatory from 2026)

Missing any of these? Your invoice will fail buyer validation.

Optional But Highly Recommended

  • Payment schedule (for progress invoices on long-term chantier contracts)
  • Corrective invoice references (credit notes, adjustments)
  • Attachment pointers (inspection photos, site reports, delivery notes)
  • Digital signature (for audit trail and proof of authenticity)

The 5 Pitfalls That Cause Rejection

Pitfall #1: SIRET Missing or Malformed

French businesses must include the buyer's SIRET (14-digit business identifier). On construction sites, the invoice is often written without verifying buyer details—because the work is on-site and invoices are issued later from the office.

Result: Invoice reaches buyer's accounting software → validation fails → invoice rejected → payment delayed 2+ weeks while buyer's team chases you for the correct SIRET.

Fix:

  • Add a SIRET lookup step before invoice generation
  • Use INSEE's free API or a local cached database
  • Display SIRET prominently on the invoice and in the XML
  • Test with a buyer's system (even a spreadsheet validator) before sending

Smart move: Anodos auto-validates SIRET when you create a quote. The invoice already has the correct identifier—zero friction.

Pitfall #2: Mixed VAT Rates Without Clear Itemization

Construction invoices often have multiple VAT rates:

  • 20% on labor
  • 5.5% on certain materials (reduced rate for eco-construction)
  • 10% on other services

Factur-X requires each line item to explicitly declare its VAT category. If you group lines or declare VAT at the invoice level, the XML schema validation will reject it.

Result: Invoice fails XSD validation → doesn't parse → buyer's system rejects silently.

Fix:

  • Enforce one VAT category per line item in your quote/invoice module
  • If a project has mixed rates, split the lines visually on the PDF and in the XML
  • Test your VAT calculation logic: (unit_price × quantity) × (1 + VAT_rate) = line_total

Pitfall #3: Payment Terms in Free Text Only

Many invoices are written "Payment due 30 days net" in prose. Factur-X doesn't parse this. It expects structured fields:

<DueDate>2026-07-17</DueDate>
<PaymentTerms>
  <Note>NET_30</Note>
  <PaymentMeansID>30</PaymentMeansID>
</PaymentTerms>
Enter fullscreen mode Exit fullscreen mode

Result: Buyer's SEPA automation can't calculate the due date → manual follow-up required → payment delayed.

Fix:

  • Parse payment terms from your contract or use sensible defaults (e.g., NET_30)
  • Emit both human-readable text ("Payment due 30 days") in the PDF AND structured fields in the XML
  • Use ISO 8601 date format everywhere (YYYY-MM-DD)

Pitfall #4: No IBAN/BIC for SEPA Transfers

Domestic construction invoices often omit IBAN/BIC because "we always get paid the same way." But from 2026, large buyers or cross-border invoices require IBAN/BIC in the XML.

Result: Buyer tries to automate payment via SEPA → no IBAN in invoice XML → payment gateway rejects → manual processing → delays.

Fix:

  • Always include IBAN/BIC in the XML, even for domestic invoices
  • Store your company's IBAN/BIC in your seller master data
  • Validate IBAN format (IBAN::Validate in PHP, PyIBAN in Python)

Pitfall #5: Timestamp and Signature Drift

Factur-X invoices are digitally signed with a UTC timestamp. If your server clock is off by 5 minutes, the signature will be rejected as "too old" or "timestamp in the future."

Result: Buyer's validation rejects the signature → invoice marked as untrusted → escalated to CFO for manual approval → delays, friction.

Fix:

  • Use NTP-synced clocks on your server
  • Validate timestamps server-side before emitting the invoice
  • Sign using a trusted certificate authority (DigiCert, GlobalSign, etc.)
  • Test signature validation with an independent tool (e.g., Adobe Acrobat Reader signature panel)

Implementation Checklist

  • [ ] Audit your current invoice template for missing required fields (SIRET, VAT codes, IBAN, due date)
  • [ ] Map your database schema to Factur-X XML elements (use the XSD schema as reference)
  • [ ] Test VAT calculation per line item (not invoice-level totals)
  • [ ] Implement SIRET validation (INSEE API or cached DB)
  • [ ] Generate a sample Factur-X invoice, open it in Adobe Reader, verify human-readable output
  • [ ] Validate the XML against the official Factur-X XSD schema
  • [ ] Test invoice delivery to a buyer's accounting system (Sage, Ciel, or a SaaS ERP)
  • [ ] Plan migration: legacy invoices → Factur-X compliant by June 2026
  • [ ] Document customer support SOP: "Why was my invoice rejected?" → SIRET fix, VAT correction, IBAN validation
  • [ ] Run a pilot: 10% of invoices Factur-X, 90% legacy, monitor rejections for 2 weeks

Tools and Libraries

Free and Open Source

Factur-X Python Library (facturx)

import facturx
inv = facturx.Invoice(...)
inv.add_line_item(description="Labor", quantity=8, price=50, vat=0.20)
facturx.generate_pdf(inv, output="invoice.pdf")
Enter fullscreen mode Exit fullscreen mode

Tested on 100+ real invoices, actively maintained.

UBL Validator (OASIS)
Uses XSD schema validation to catch compliance issues early. Free, standards-based.

PDF/A-3 Libraries

  • Java: Apache PDFBox, iText 7
  • Python: pypdf, reportlab
  • .NET: SelectPdf

SaaS Solutions (Faster, Less Risk)

Billable.io
API-first platform, handles full Factur-X emission + buyer auto-validation. Good for high-volume SaaS.

Stripe Billing
Factur-X-ready as of Q4 2025. If you use Stripe, check the latest docs.

Anodos
French BTP-specific. Built-in Factur-X 2026 + voice-to-quote workflow. Quote → invoice → payment, all Factur-X compliant from day one. No separate integrations needed.

Regulatory and Audit Trail

  • Retention: Keep Factur-X invoices (original files) for 6 years (French legal requirement)
  • Timestamp all invoices with server time for audit trail
  • Log all rejections with reason codes (SIRET mismatch, VAT error, etc.)
  • Corrective invoices: If an invoice is incorrect, don't overwrite it—issue a formal credit note (avoir) instead

Testing Before June 2026

Phase 1: Unit Tests (Now)

Generate sample invoice → Validate XML against XSD schema → Pass
Enter fullscreen mode Exit fullscreen mode

Phase 2: Integration Tests (March 2026)

Generate Factur-X invoice → Send to buyer's accounting software (or validator) → Check acceptance
Enter fullscreen mode Exit fullscreen mode

Phase 3: Pilot (April 2026)

10% of invoices → Factur-X
90% of invoices → Legacy format
Monitor for rejections, errors, buyer complaints for 2 weeks
Enter fullscreen mode Exit fullscreen mode

Phase 4: Full Rollout (June 2026)

100% Factur-X compliant
Enter fullscreen mode Exit fullscreen mode

Conclusion

Factur-X 2026 is not optional—it's a compliance deadline. Start now, test thoroughly, and don't wait until May 2026. The construction SaaS builders who transition early will have zero payment friction; those who rush will face rejected invoices, angry buyers, and support ticket chaos.

If you're building construction SaaS, implement Factur-X in your invoicing module today. Your users will thank you, and you'll avoid the scramble when June rolls around.


Olivier Ebrahim

Founder, Anodos — Voice-to-quote SaaS for French construction teams. Built-in Factur-X 2026 compliance from day one.

Top comments (0)