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

Factur-X 2026 is the new French/EU e-invoicing standard (UBL derivative) that replaces older formats. If you're building SaaS for construction in France, your invoicing pipeline must support it by January 2026. This guide covers the implementation path for developers.


Why Factur-X Matters Now

Background

  • Factur-X 2025 was optional for large companies (>250 employees)
  • Factur-X 2026 becomes mandatory for all French companies (>1 employee) and EU suppliers
  • Non-compliance = penalties, invoice rejection, payment delays
  • Old formats (PDF-only, EDI/EDIFACT, XML custom) are deprecated

Impact on Construction SaaS

Construction businesses issue 10–100 invoices/month (small PME) to 1000+ invoices/month (big contractors). A single broken invoice format means:

  • Customer's accounting system rejects it (automated parsing fails)
  • Manual data entry by customer (annoying, error-prone)
  • Payment delay (your cash flow suffers)
  • Potential URSSAF audit flag (French tax authority)

What Is Factur-X 2026?

Factur-X is a semantic structured XML format based on UBL 2.1 (Universal Business Language) with French-specific extensions.

Structure (Simplified)

<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
  <ID>INV-2026-00042</ID>
  <IssueDate>2026-01-15</IssueDate>
  <InvoiceTypeCode>380</InvoiceTypeCode>  <!-- 380 = commercial invoice -->
  <DocumentCurrencyCode>EUR</DocumentCurrencyCode>

  <!-- Supplier -->
  <AccountingSupplierParty>
    <Party>
      <PartyName>
        <Name>SARL Anodos</Name>
      </PartyName>
      <PostalAddress>
        <StreetName>123 Rue de la Paix</StreetName>
        <CityName>Paris</CityName>
        <PostalZone>75001</PostalZone>
        <CountrySubentity>FR</CountrySubentity>
      </PostalAddress>
      <PartyTaxScheme>
        <CompanyID>FR12345678901</CompanyID>  <!-- SIRET for FR -->
      </PartyTaxScheme>
    </Party>
  </AccountingSupplierParty>

  <!-- Buyer (same structure) -->
  <AccountingCustomerParty>
    ...
  </AccountingCustomerParty>

  <!-- Line items -->
  <InvoiceLine>
    <ID>1</ID>
    <InvoicedQuantity unitCode="MTR">2.5</InvoicedQuantity>
    <LineExtensionAmount currencyID="EUR">750.00</LineExtensionAmount>
    <Item>
      <Name>BA13 plasterboard sheets</Name>
      <ClassifiedTaxCategory>
        <ID>S</ID>  <!-- Standard rate (20% FR) -->
        <Percent>20</Percent>
      </ClassifiedTaxCategory>
    </Item>
    <Price>
      <PriceAmount currencyID="EUR">300.00</PriceAmount>
    </Price>
  </InvoiceLine>

  <!-- Totals -->
  <LegalMonetaryTotal>
    <LineExtensionAmount currencyID="EUR">750.00</LineExtensionAmount>
    <TaxInclusiveAmount currencyID="EUR">900.00</TaxInclusiveAmount>
    <PayableAmount currencyID="EUR">900.00</PayableAmount>
  </LegalMonetaryTotal>
</Invoice>
Enter fullscreen mode Exit fullscreen mode

Implementation Steps (For Developers)

Step 1: Choose a Library (Don't Build From Scratch)

Node.js / JavaScript:

  • peppol-invoice (lightweight, UBL 2.1 compliant)
  • facturx-js (French-specific, maintained by FNTP)
  • invoiz (commercial, full-stack, overkill for most)

Python:

  • facturx (official, from Chorus Pro maintainers)
  • xsdata (schema-based XML generation, flexible)

PHP / Laravel:

  • dompdf + custom XML (manual, but straightforward)
  • easybill/facturx (Packagist, French startup)

Recommendation: Use a library. Hand-rolling XML is a footgun (encoding, whitespace, attribute order matter for validation).

Step 2: Validate Against Peppol/Chorus Pro

French invoices must pass Peppol validation (European standard) and be submittable to Chorus Pro (France's e-invoicing portal).

Tools:

Once validated, your SaaS can:

  1. Generate Factur-X XML from quote/invoice data
  2. Embed it in a PDF (hybrid format: human-readable + machine-readable)
  3. Optionally submit to Chorus Pro (if customer has opted in)

Step 3: Handle Edge Cases in Construction

Construction invoices have quirks:

A. Partial Invoices (Milestone Billing)

Quote: €10,000 total
Milestone 1 (foundation): €3,000 (30%) — invoice dated 2026-01-10
Milestone 2 (walls): €5,000 (50%) — invoice dated 2026-01-20
Milestone 3 (finish): €2,000 (20%) — invoice dated 2026-02-01
Enter fullscreen mode Exit fullscreen mode

Factur-X supports this via InvoiceTypeCode 380 (partial invoice) with a parent quote reference. Each invoice must link to the original quote (Factur-X: BillingReference/InvoiceDocumentReference).

B. Retention/Hold-Backs
Construction often withholds 5–10% until final handoff. Factur-X models this as:

<PrepaidAmount>500.00</PrepaidAmount>  <!-- Already paid (advance) -->
<AllowanceCharge>
  <ChargeIndicator>true</ChargeIndicator>
  <Amount>-500.00</Amount>  <!-- Hold-back (negative charge) -->
  <AllowanceChargeReason>Retention until final inspection</AllowanceChargeReason>
</AllowanceCharge>
Enter fullscreen mode Exit fullscreen mode

C. Reverse Invoices (Credit Notes)
If a material was over-charged or a job was partially canceled:

<InvoiceTypeCode>381</InvoiceTypeCode>  <!-- 381 = credit note -->
<BillingReference>
  <InvoiceDocumentReference>
    <ID>INV-2026-00042</ID>  <!-- References the original invoice -->
  </InvoiceDocumentReference>
</BillingReference>
Enter fullscreen mode Exit fullscreen mode

Integration Checklist

  • [ ] Library selected and integrated into invoicing module
  • [ ] SIRET/SIREN lookup from company master data
  • [ ] Tax rate logic for standard (20%) and reduced rates (5.5%, 2.1%)
  • [ ] Line item -> Factur-X item mapping (including unit codes: MTR, TNE, PA, etc.)
  • [ ] PDF generation with embedded Factur-X XML (hybrid format)
  • [ ] Unit tests for edge cases (partial invoices, holds, credit notes)
  • [ ] Peppol validator integration (automated check before sending)
  • [ ] Chorus Pro test submission (if applicable for your customer)
  • [ ] Rollback plan (if invoice generation fails, graceful fallback to old format)
  • [ ] Customer communication (notify when Factur-X is live)

Real-World Implementation Time

For a mid-stage construction SaaS (100–500 customer invoices/month):

Task Effort Notes
Library integration 4–8 hours Mostly reading docs + test data
Core invoice mapping 16–24 hours Data model alignment, tax logic
Edge cases (partial, hold-backs) 8–12 hours Construction-specific quirks
Testing + validation 12–16 hours Peppol + Chorus Pro test
Deployment + monitoring 4–8 hours Gradual rollout, error logging
Total 44–68 hours ~1–2 sprints for a 2-person team

Cost Implications

  • Factur-X library: Free (open-source) to €50–200/year (commercial)
  • PDF generation: Already in your stack (dompdf, wkhtmltopdf, etc.)
  • Validation API: Free (Peppol) or included in Chorus Pro subscription
  • Infrastructure: No extra servers needed (XML generation is CPU-light)

Bottom line: Minimal cost, high compliance value.


Conclusion

Factur-X 2026 is coming. If you're building construction SaaS in France, implement it by Q3 2025 (before the January 2026 mandate). Use a library, validate early, test with real customer data, and educate your users on the change.

If you're already using Anodos, our invoicing module includes Factur-X 2026 by default — no extra work on your end.


Olivier Ebrahim

Founder, Anodos — Construction crew management SaaS with built-in Factur-X 2026 compliance.

Top comments (0)