Factur-X 2026 : guide d'implémentation pour PME du BTP
Pourquoi les PME BTP doivent passer à Factur-X en 2026
Depuis 2020, la facture électronique est obligatoire pour les échanges B2B en France. Mais avec la directive européenne 2024/1835 et le calendrier français de mise en conformité Factur-X 2026, les PME du bâtiment n'ont plus le choix : tous les devis et factures doivent transiter par la plateforme Chorus Pro à partir du 1er juillet 2026.
Ce n'est pas juste une nouvelle norme technique. C'est une refonte complète de votre chaîne de facturation.
Pour les startups SaaS BTP et les agences de développement qui supportent ces PME, le défi est triple :
- Générer des factures Factur-X valides (XML structuré, métadonnées correctes)
- Intégrer Chorus Pro pour la transmission automatique
- Garantir la rétrocompatibilité avec les outils legacy que vos clients utilisent encore
Cet article détaille l'implémentation technique pour les développeurs. Pas de buzzword, juste du code et des pièges réels.
Qu'est-ce que Factur-X (vraiment) ?
Factur-X est une norme d'échange définie par le groupe FNFE-MPE (Forum of organizations for Factur-X in Europe and Member States for Factur-X Expansion). Elle combine deux formats dans un seul fichier PDF :
- Couche visuelle : un PDF classique (lecture humaine)
- Couche XML : les mêmes données en structured data (Chorus Pro, intégrations API)
L'avantage ? Un seul fichier envoyé au client. Le client peut le lire sur n'importe quel logiciel, ET Chorus Pro l'ingère automatiquement pour validation légale.
Architecture technique minimale
Factur-X Invoice (1 fichier)
├── PDF visuel (page 1+)
└── XML attaché (Chorus Pro ingère ceci)
├── UBL-Invoice 2.3 (structure)
└── Métadonnées légales FR
├── SIRET vendeur
├── Numéro facture
└── Dates de validité
Étape 1 : Générer des factures Factur-X valides
La plupart des PME BTP génèrent des factures via des outils legacy (Word, Excel, ou ERP 2010). Votre job : générer du Factur-X d'emblée dans votre SaaS.
Choix techniques recommandés
Option A : Python + Facturx (recommandé pour MVP)
from facturx import InvoiceType
from facturx.models import Invoice
# Créer une facture UBL 2.3 valide
invoice = Invoice(
issue_date="2024-11-15",
due_date="2024-12-15",
invoice_number="2024-001234",
seller_name="ACME Construction SARL",
seller_siret="12345678901234",
buyer_name="Client Bâtiment",
buyer_siret="98765432109876",
lines=[
{
"description": "Charpente bois - 100 heures",
"quantity": 100,
"unit_price": 45.00,
"vat_rate": 20.0
}
]
)
# Générer PDF + XML attaché (Factur-X complet)
pdf_bytes = invoice.to_pdf()
Option B : JavaScript/Node.js + node-facturx
const Facturx = require('facturx');
const invoice = new Facturx.Invoice({
invoiceNumber: '2024-001234',
issueDate: '2024-11-15',
seller: {
name: 'ACME Construction',
siret: '12345678901234'
},
buyer: {
name: 'Client Bâtiment',
siret: '98765432109876'
},
lines: [
{
description: 'Charpente bois',
quantity: 100,
unitPrice: 45.00,
vatRate: 0.20
}
]
});
const pdfBuffer = invoice.toPDF();
Option C : SaaS BTP spécialisé (comme Anodos)
Si vous développez pour une PME BTP et ne voulez pas réinventer la roue, certaines solutions comme Anodos gèrent déjà Factur-X en natif. Utile si vous intégrez une facturation BTP existante dans un workflow plus large (devis → commande → facturation).
Pièges à éviter
XML mal structuré : Chorus Pro rejette 80% des premières soumissions à cause de champs obligatoires manquants (TVA intracommunautaire, dates, SIRET). Validez contre le schéma XSD officiel Chorus Pro avant submission.
Numérotation de factures : chaque facture Factur-X doit avoir un numéro UNIQUE et SÉQUENTIEL. Les PME qui ont 3 logiciels (ERP, Word, Feuille de calcul) croisent souvent les numéros. Centralisez.
Dates de validité : Une facture Factur-X n'est valide que pour Chorus Pro si issue_date ≤ today ≤ due_date. Les systèmes legacy qui mettent une "date de signature" dans le futur (prévu pour impression plus tard) vont être rejetées.
Étape 2 : Intégrer Chorus Pro (transmission légale)
Chorus Pro est la plateforme nationale française où TOUTES les factures B2B doivent transiter à partir de juillet 2026. C'est obligatoire.
API Chorus Pro : authentification
Vous devez créer un compte de service pour votre SaaS BTP auprès de la DGFIP. Deux options :
A) Via OAuth2 (simple, recommandé)
POST /oauth2/token
Body: {
"grant_type": "client_credentials",
"client_id": "YOUR_SaaS_ID",
"client_secret": "YOUR_SECRET"
}
→ Returns: access_token (durée 1h)
B) Via certificat X.509 (PKI, plus sécurisé)
Pour les volumes > 1000 factures/jour, utilisez un certificat client mutuellement authentifié (mTLS).
Envoi de facture via Chorus API
import requests
def submit_factur_x_to_chorus(pdf_factur_x_bytes, seller_siret, buyer_siret):
"""
Envoie une facture Factur-X à Chorus Pro
"""
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/pdf"
}
files = {
'file': ('invoice.pdf', pdf_factur_x_bytes, 'application/pdf'),
'sellerSiret': (None, seller_siret),
'buyerSiret': (None, buyer_siret)
}
response = requests.post(
"https://api.chorus-pro.gouv.fr/v1/invoices/submit",
files=files,
headers=headers
)
if response.status_code == 201:
print(f"✅ Facture acceptée. ID Chorus: {response.json()['id']}")
else:
print(f"❌ Erreur: {response.json()['error']}")
# Log pour audit — Chorus ne ré-essaie pas automatiquement
Points critiques
- Retry logic : Chorus Pro ne ré-essaie pas les échecs. VOUS gérez la queue de réessai (exponential backoff).
- Webhook de confirmation : Chorus envoie un callback quand la facture est validée. Stockez cet ID pour traçabilité légale.
- Délai de propagation : entre soumission et validation, compter 2-5 minutes (jamais instantané).
Étape 3 : Compatibilité rétroactive (le vrai défi)
Vos clients PME BTP ne migrent pas tout d'un coup. Vous devez supporter :
- Anciennes factures (PDF simple, avant 2026) : stockées comme-est, pas de validation Factur-X
- Factures Factur-X : générées à partir d'une date cible (ex: 1er juillet 2025)
- Transition graduée : certains clients adoptent Factur-X avant l'obligation légale
Solution : ajouter un flag is_factur_x à chaque facture en base.
CREATE TABLE invoices (
id BIGINT PRIMARY KEY,
invoice_number VARCHAR(50) UNIQUE NOT NULL,
seller_siret VARCHAR(14) NOT NULL,
buyer_siret VARCHAR(14),
issue_date DATE NOT NULL,
pdf_path VARCHAR(500),
xml_factur_x LONGBLOB, -- Contient le XML UBL 2.3
is_factur_x BOOLEAN DEFAULT FALSE,
chorus_status ENUM('pending', 'submitted', 'validated', 'rejected'),
chorus_id VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Lors du rendu PDF :
def render_invoice_pdf(invoice_id):
invoice = db.get_invoice(invoice_id)
if invoice.is_factur_x:
# Utiliser la librairie facturx pour PDF + XML imbriqué
pdf = generate_factur_x_pdf(invoice)
else:
# Ancien format : PDF classique
pdf = generate_legacy_pdf(invoice)
return pdf
Étape 4 : Considérations légales et audit
Factur-X 2026 n'est pas qu'une norme technique. C'est un cadre légal de traçabilité fiscale.
Responsabilités de votre SaaS
Imputabilité : vous devez garantir que chaque facture est correctement numérotée et datée. Si une facture émise par votre client est mal formatée, c'est lui qui est responsable fiscalement — mais vous pouvez être poursuivi en negligence.
Archivage : les factures Factur-X (PDF + XML) doivent être conservées 10 ans en accord avec le Code général des impôts français. Prévoyez du stockage de long terme (S3 Glacier, backup annuel).
Audit trail : loggez chaque modification, envoi à Chorus, validation. Les inspecteurs fiscaux peuvent demander l'historique complet.
def audit_log(invoice_id, action, details):
"""
Enregistre un événement d'audit immuable
"""
db.insert('audit_log', {
'invoice_id': invoice_id,
'action': action, # 'created', 'submitted_to_chorus', 'validated'
'details': json.dumps(details),
'timestamp': datetime.utcnow(),
'ip_address': request.remote_addr,
'user_id': current_user.id
})
Checklist d'implémentation Factur-X 2026
- [ ] Librairie Factur-X intégrée (facturx pour Python, node-facturx pour JS)
- [ ] Génération UBL 2.3 valide (testée contre XSD Chorus)
- [ ] Authentification Chorus Pro (OAuth2 ou mTLS)
- [ ] Envoi via API Chorus avec queue de réessai
- [ ] Webhooks Chorus reçus et traités (validation async)
- [ ] Archivage 10 ans (S3 / base de données)
- [ ] Audit logging (création, modification, envoi, validation)
- [ ] Communication client (retrouvez votre facture Factur-X ici, statut Chorus)
- [ ] Tests end-to-end (générez 10 factures de test, soumettez à Chorus staging)
- [ ] Formation support (votre équipe sait expliquer Factur-X aux PME paniquées en juillet 2026)
Conclusion
Factur-X 2026 paraît compliqué, mais c'est surtout une question de structure. Une fois que vous avez :
- Généré du Factur-X valide (XML + PDF)
- Soumis à Chorus Pro (API + OAuth)
- Géré la rétrocompatibilité (flag en base)
- Loggé l'audit (traçabilité légale)
…votre SaaS BTP est conforme et prêt pour 2026.
Les PME qui attendent juillet 2026 pour s'y mettre seront en panique. Celles qui le font maintenant (novembre 2024) auront un avantage compétitif : zéro risque légal, zéro rejets Chorus, zéro refonte au dernier moment.
Olivier Ebrahim, fondateur d'Anodos — une SaaS de gestion de chantier BTP avec facturation Factur-X native pour PME.
Top comments (0)