Lecteur Markdown
Invoices Migrations
Migrations — Facturation électronique Factur-X #
Migrations SQL liées à la réforme de facturation électronique obligatoire (France, 2026-2027).
Contexte réglementaire #
La réforme impose la facturation électronique B2B en France via une plateforme agréée (PDP ou PPF). Format cible : Factur-X EN16931 (PDF/A-3 + XML CII D16B embarqué — BeamReactor implémente le XML sans le PDF, qui reste facultatif).
| Échéance | Obligation |
|----------|------------|
| 1er septembre 2026 | Réception électronique obligatoire — grandes entreprises et ETI en émission |
| 1er septembre 2027 | Émission électronique obligatoire — PME et micro-entreprises |
Fichiers #
2026_03_31_orders_facturx_fields.sql #
Ajoute deux colonnes à la table orders :
| Colonne | Type | Description |
|---------|------|-------------|
| customer_siren | VARCHAR(14) | SIREN (9) ou SIRET (14) de l'acheteur |
| customer_vat_number | VARCHAR(20) | TVA intracommunautaire acheteur (ex: FR12345678901) |
Ces champs sont DEFAULT NULL — ils ne sont obligatoires que pour les entreprises françaises (voir logique SIREN dans la documentation du plugin invoices).
Un index est ajouté sur customer_siren pour les recherches de facturation.
2026_03_31_invoices.sql #
Crée la table invoices :
| Colonne | Type | Description |
|---------|------|-------------|
| id | INT UNSIGNED AUTO_INCREMENT | Clé primaire |
| invoice_number | VARCHAR(30) UNIQUE | Numéro séquentiel immutable (FACT-YYYY-NNNNN) |
| order_id | INT(11) | Référence orders.id (pas de FK — convention BeamReactor) |
| type | ENUM('invoice','credit_note') | Facture ou avoir |
| status | ENUM(...) | draft, issued, sent, acknowledged, cancelled |
| issue_date | DATE | Date d'émission — obligatoire EN16931 |
| due_date | DATE | Date d'échéance — obligatoire EN16931 si paiement différé |
| subtotal_ht | DECIMAL(10,2) | Snapshot HT figé à l'émission |
| vat_amount | DECIMAL(10,2) | Snapshot TVA |
| total_ttc | DECIMAL(10,2) | Snapshot TTC |
| currency | VARCHAR(3) | Devise ISO 4217 |
| buyer_name | VARCHAR(255) | Snapshot raison sociale ou nom acheteur |
| buyer_siren | VARCHAR(14) | Snapshot SIREN/SIRET acheteur |
| buyer_vat_number | VARCHAR(20) | Snapshot TVA intracommunautaire acheteur |
| buyer_address | TEXT | Snapshot adresse facturation acheteur |
| facturx_path | VARCHAR(500) | Chemin relatif vers le XML (depuis ROOT_DIR) |
| facturx_profile | ENUM(...) | Profil Factur-X — défaut en16931 |
| transmission_status | ENUM(...) | pending, exported, sent, acknowledged, rejected, error |
| transmission_platform | VARCHAR(50) | chorus_pro, file_export, pdp_xxx |
| transmission_reference | VARCHAR(255) | Référence retournée par la plateforme |
| transmitted_at | DATETIME | Horodatage de transmission |
| transmission_log | TEXT | Réponse brute de la plateforme |
| created_at | DATETIME | Création |
| updated_at | DATETIME ON UPDATE | Dernière modification |
Profils Factur-X supportés #
| Valeur | Description |
|--------|-------------|
| minimum | Profil minimal (B2G simplifié) |
| basic_wl | Basic Without Lines |
| basic | Basic |
| en16931 | Profil cible BeamReactor — conforme EN16931 |
| extended | Extended (données supplémentaires) |
Installation #
Exécuter dans l'ordre :
-- 1. Champs acheteur sur orders
SOURCE var/migrations/2026_03_31_orders_facturx_fields.sql;
-- 2. Table invoices
SOURCE var/migrations/2026_03_31_invoices.sql;
Ou via phpMyAdmin, dans l'ordre indiqué.
Décisions d'architecture #
Pas de FK sur order_id — convention BeamReactor : les tables e-commerce ne déclarent pas de contraintes de clé étrangère entre modules pour conserver l'indépendance des plugins.
Snapshot financier et acheteur — les données sont copiées au moment de l'émission de la facture et ne suivent pas les modifications ultérieures de la commande. C'est une obligation légale : une facture émise est immutable.
SIREN vendeur dans $cfg[34] — le SIREN/SIRET du vendeur est stocké dans les préférences système (company_number), pas dans la table invoices. La classe FacturX l'extrait via $cfg[34]['company_number'] en supprimant les caractères non numériques.
Conservation légale — les fichiers XML doivent être conservés 6 ans. Le répertoire var/invoices/ ne doit pas être soumis à des politiques de purge automatique.