Factur-X 2026 Implementation Cheatsheet for Construction SMBs
Factur-X 2026 est devenu obligatoire pour la facturation B2B en France. Si tu développes un logiciel de gestion de chantier ou si tu gères les finances d'une PME BTP, ce guide t'évite 6 mois de debugging.
Qu'est-ce que Factur-X 2026 exactement ?
Factur-X (aussi appelé ZUGFeRD en Europe) est un format hybride XML+PDF qui combine :
- Un PDF visuel classique (lisible par l'humain)
- Un flux XML structuré (parsable par les systèmes comptables)
Obligatoire depuis janvier 2024 pour les factures B2B en France. Les non-conformes risquent pénalités + rejet par les systèmes de trésorier.
Structure minimale :
- Métadonnées : SIRET, TVA, adresses légales
- Lignes article : quantité, prix HT, TVA
- Totaux : HT, TVA, TTC
- Termes paiement : date d'échéance, méthode (IBAN pour virement)
3 profils à connaître :
- BASIC : le plus courant. 20 champs obligatoires.
- COMFORT : ajout détails tiers (mandataire, acheteur intermédiaire).
- EXTENDED : all-in. Pour les volumes Rhône-Alpes / Ile-de-France avec fournisseurs structurés.
99% des PME BTP utilisent BASIC. Les deux autres ajoutent complexity sans ROI.
Les 5 pièges classiques (et comment les éviter)
Piège #1 : Décimal mal encodé
L'XML requiert . (point) comme séparateur décimal, jamais , (virgule).
<!-- ❌ FAUX -->
<PriceAmount>1250,50</PriceAmount>
<!-- ✅ CORRECT -->
<PriceAmount>1250.50</PriceAmount>
Quand tu lis depuis Excel ou d'une base locale (locale=fr_FR), convertis systématiquement.
Piège #2 : SIRET sans padding
Un SIRET doit faire 14 chiffres. Si tu as 75123456789 (11 chiffres), ajoute 000 au début.
siret = str(siret).zfill(14) # Python trick
Piège #3 : TVA négligée
En construction, TVA réduite 10% est courant (matériaux de rénovation). Or certaines clés API Factur-X encodent mal la TVA au niveau de la ligne article.
- Toujours valider :
quantité × prix_unitaire_HT × (1 + taux_TVA) = prix_TTC_ligne - La somme des TVA lignes doit matcher la TVA total facture (à ±1 centime près).
Piège #4 : Date de compétence vs date de paiement
- Date de la facture = quand elle est émise (obligation légale)
- Date d'échéance = date d'exigibilité TVA (30j après émission par défaut)
- Date de compétence = date du service/livraison (pour la comptabilité analytique)
En gestion de chantier, ces trois dates sont souvent différentes. Factur-X exige date facture + échéance. Si tu oublies, le système comptable du client rejettera.
Piège #5 : Encoding UTF-8 oublié
L'XML Factur-X doit déclarer encoding="UTF-8" en header. Les accents (é, è, ç) doivent être encodés correctement. Si tu génères depuis une base non-UTF8, tu vas faire buguer le parseur.
Stack technique minimale pour générer Factur-X
Python (le plus courant pour les SaaS BTP) :
from facturx import generate_from_dict
invoice_dict = {
"invoice_number": "CHANTIER-2026-001",
"invoice_date": "2026-02-15",
"seller": {
"name": "SARL Construction XYZ",
"siret": "75123456789000",
"address": "123 rue de Paris, 75000 Paris"
},
"buyer": {
"name": "Mairie de Lyon",
"siret": "69123456789000"
},
"lines": [
{
"description": "Fondations béton m3",
"quantity": 50,
"unit_price": 250.00,
"vat_percent": 10
}
],
"payment_terms": "30 jours"
}
pdf_bytes = generate_from_dict(invoice_dict, output_format="BASIC")
JavaScript/Node.js :
Packages comme factur-x ou node-facturx existent mais moins matures. Considère externaliser la génération à un micro-service Python ou une API comme Anodos qui gère ça nativement.
Validation : toujours utiliser un validateur XSD officiel après génération.
# Valider ton XML contre le schéma Factur-X
xmllint --schema ZUGFeRD_2p0.xsd facture.xml
Checklist avant de mettre en production
- [ ] Tous les décimaux en
.pas, - [ ] SIRET/SIREN en 14 chiffres (padé avec zéros si nécessaire)
- [ ] Date facture + date échéance présentes et cohérentes
- [ ] TVA = somme des TVA lignes ± 0.01€
- [ ] Encoding UTF-8 déclaré, accents validés
- [ ] XML générés validés avec schéma XSD officiel
- [ ] Test avec un vrai client (demande retour syntaxe)
- [ ] Archivage PDF+XML : au minimum 6 ans (obligation comptable FR)
- [ ] Pas de logo/images embarquées dans le PDF (alourdit le fichier, parsing lent)
Ressources officielles
- Site FNFE-MPE (France Factur-X) : https://www.fnfe-mpe.org/
- Spécification XSD : https://www.factur-x.fr/ressources
- Validateur en ligne : https://www.xrechnung.bund.de/validator
Olivier Ebrahim, fondateur d'Anodos — plateforme de gestion de chantier avec facturation Factur-X native intégrée. Cet article synthétise les 50 bugs Factur-X résolus en production sur 2024-2026.
Top comments (0)