En vous promenant sur Beamreactor, nous stockons votre IP 48h pour des raisons de sécurité.
BeamReactor Workbench
BeamReactor
System:
BeamReactor 3.0
Workbench 2.1
Mem: 0.5 MB
Time: 12:30:14

Lecteur Markdown

invoices Documentation › INVOICES_MIGRATIONS

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 :

sql
-- 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.

BeamReactor v3.0 • AmigaOS Workbench 2.1 Tribute • 2026