En vous promenant sur Beamreactor, nous stockons votre IP 48h pour des raisons de sécurité.

Markdown Reader

invoices Documentation › INVOICES_DOCUMENTATION

Invoices Documentation

Invoices #

Facturation électronique Factur-X EN16931.

Namespace: Beamreactor\Invoices

Version: 1.0.0

Niveau requis: ORDERS_LEVEL_ADMIN

Vue d'ensemble #

Plugin de génération et de gestion des factures électroniques pour BeamReactor. Conforme au profil Factur-X EN16931 (urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:en16931), il génère des fichiers XML CII D16B directement transmissibles à Chorus Pro ou à toute PDP certifiée.

Répond à la réforme française de facturation électronique obligatoire :

  • 1er septembre 2026 — obligation de réception pour toutes les entreprises
  • 1er septembre 2027 — obligation d'émission pour PME et micro-entreprises

Fonctionnalités #

  • Génération de factures et avoirs depuis les commandes (orders)
  • XML EN16931 (CII D16B) généré nativement — zéro dépendance externe
  • Numérotation séquentielle immutable (FACT-YYYY-NNNNN)
  • Snapshot financier et acheteur figé à l'émission
  • Vue HTML imprimable avec badges de statut
  • Téléchargement XML direct
  • Traçabilité de la chaîne de transmission
  • Placeholder Chorus Pro (OAuth2 PISTE — implémentation à venir)

Actions (paramètre invact) #

| Valeur | Méthode | Action |

|--------|---------|--------|

| (défaut) | GET | Liste des factures avec filtres par statut |

| generate | GET | Formulaire de confirmation (paramètre order_id requis) |

| generate | POST | Génération effective (champ order_id requis) |

| view | GET | Détail HTML imprimable (paramètre id requis) |

| download | GET | Téléchargement XML Factur-X (paramètre id requis) |

| transmit | GET | Transmission Chorus Pro — placeholder (paramètre id requis) |

Classe FacturX #

Générateur XML EN16931 basé sur DOMDocument natif PHP.

php
use Beamreactor\Invoices\FacturX;

$xml = FacturX::generate($invoice, $seller, $items);

Paramètres #

$invoice — ligne de la table invoices :

| Clé | Type | Description |

|-----|------|-------------|

| invoice_number | string | Numéro de facture (FACT-YYYY-NNNNN) |

| type | string | invoice ou credit_note |

| issue_date | string | Date d'émission (YYYY-MM-DD) |

| due_date | string\|null | Date d'échéance (YYYY-MM-DD) |

| currency | string | Devise ISO 4217 (défaut EUR) |

| subtotal_ht | decimal | Sous-total HT |

| vat_amount | decimal | Montant TVA |

| total_ttc | decimal | Total TTC |

| buyer_name | string | Raison sociale ou nom complet acheteur |

| buyer_siren | string\|null | SIREN/SIRET acheteur (9 ou 14 chiffres) |

| buyer_vat_number | string\|null | TVA intracommunautaire acheteur |

| buyer_address | string\|null | Adresse complète acheteur (snapshot) |

$seller — tableau issu de array_merge($cfg[34], $cfg[35]) :

| Clé $cfg[34] | Description |

|----------------|-------------|

| headoffice_name | Raison sociale vendeur |

| company_number | SIRET (ex: SIRET 993 471 077 00012) — chiffres extraits automatiquement |

| headoffice_address | Adresse ligne 1 |

| headoffice_postcode | Code postal |

| headoffice_city | Ville |

| headoffice_country | Pays (nom complet — converti en ISO 3166-1 alpha-2) |

| headoffice_vat_number | TVA vendeur (optionnel — calculée depuis SIREN si absente) |

| Clé $cfg[35] | Description |

|----------------|-------------|

| headoffice_iban | IBAN vendeur (inclus dans le XML si renseigné) |

| headoffice_bic | BIC vendeur |

$items — lignes de order_items :

| Clé | Type | Description |

|-----|------|-------------|

| product_name | string | Désignation produit |

| product_reference | string | Référence produit (optionnel) |

| quantity | int | Quantité |

| unit_price_ht | decimal | Prix unitaire HT |

| vat_rate | decimal | Taux TVA (ex: 20.00) |

Calcul automatique du numéro TVA vendeur #

Si headoffice_vat_number est absent de $cfg[34], la classe calcule le numéro de TVA intracommunautaire français depuis le SIREN :

text
clé = (12 + 3 × (SIREN mod 97)) mod 97
N° TVA = "FR" + clé (2 chiffres) + SIREN (9 chiffres)

Codes TypeCode EN16931 #

| Constante | Valeur | Usage |

|-----------|--------|-------|

| TYPE_INVOICE | 380 | Facture |

| TYPE_CREDIT_NOTE | 381 | Avoir |

Catégories TVA (schéma EN16931) #

| Constante | Code | Condition |

|-----------|------|-----------|

| VAT_S | S | Taux > 0 (standard) |

| VAT_Z | Z | Taux = 0 |

| VAT_E | E | Exonéré |

| VAT_AE | AE | Autoliquidation |

Numérotation des factures #

Format : FACT-{ANNÉE}-{ID sur 5 chiffres}

Exemple : FACT-2026-00001

La numérotation s'appuie sur l'AUTO_INCREMENT de la table invoices — le numéro est généré après insertion et mis à jour immédiatement. Il est immutable : aucune mise à jour après émission ne doit le modifier.

Stockage des fichiers XML #

Les fichiers XML Factur-X sont écrits dans :

text
ROOT_DIR/var/invoices/{invoice_number}.xml

Le chemin relatif est conservé dans invoices.facturx_path (depuis ROOT_DIR).

Le répertoire var/invoices/ doit être accessible en écriture. Il est exclu des caches BeamReactor.

Logique SIREN acheteur #

| customer_type | Pays | Comportement |

|-----------------|------|--------------|

| individual | Tous | SIREN NULL — pas de validation |

| company | France | SIREN obligatoire — validé via Parser::sanitize($v, 'siren') |

| company | UE ≠ France | TVA intracommunautaire obligatoire, SIREN NULL |

| company | Hors UE | Les deux NULL — accepté |

Le champ SIREN ne s'affiche dans le formulaire de commande que si customer_type = company et pays = France.

Chaîne de transmission #

| transmission_platform | Description |

|-------------------------|-------------|

| file_export | Téléchargement direct — client dépose sur sa PDP |

| chorus_pro | Transmission Chorus Pro via API PISTE (OAuth2) — à implémenter |

| pdp_xxx | PDP privée certifiée — modules optionnels futurs |

Tables concernées #

| Table | Rôle |

|-------|------|

| invoices | Factures et avoirs — une commande peut en avoir plusieurs |

| orders | Source des données financières et acheteur |

| order_items | Lignes de commande — snapshottées dans le XML |

Dépendances #

  • Beamreactor\Database\SQL — accès base de données
  • Beamreactor\Sanitizer\Parser — validation SIREN et chaînes
  • DOMDocument — génération XML (natif PHP, aucune lib externe)
  • $cfg[34] — infos vendeur (siège, SIRET, adresse)
  • $cfg[35] — coordonnées bancaires vendeur (IBAN, BIC)

Voir aussi #

  • Migrations Factur-X
  • var/migrations/2026_03_31_orders_facturx_fields.sql
  • var/migrations/2026_03_31_invoices.sql
de en fr