$invoiceHeader = ['invoiceNumber' => '2025-INV-001', // BT-1 'invoiceType' => 380, // BT-3 - FACTURE d'ACOMPTE : 386, FACTURE 380 ou AVOIR 381 'invoiceDate' => '2025-11-24', 'dueDate' => '2025-12-24', 'currency' => 'EUR', Référence de l'acheteur (souvent obligatoire en B2G / grands comptes) 'buyerReference' => 'SERVICE-ACHATS-75', Référence de commande client (BC) 'orderReference' => ['id' => 'BC-2025-789', 'issueDate' => '2025-11-20' // optionnel], Fournisseur 'supplier' => ['name' => 'Ma Société SARL', 'vatNumber' => 'FR12345678901', 'companyId' => '12345678900011', // SIRET 'street' => '1 Rue de la Paix', 'city' => 'Paris', 'zip' => '75001', 'countryCode' => 'FR'], Client 'customer' => ['name' => 'Client SA', 'vatNumber' => 'FR98765432109', 'companyId' => '98765432100022', 'street' => '10 Avenue des Champs-Élysées', 'city' => 'Paris', 'zip' => '75008', 'countryCode' => 'FR'], Remises globales (document entier) – optionnelles Ici on suppose que la remise est exprimée en montant HT 'allowances' => [['reason' => 'Remise commerciale globale', 'amount' => 10.00, // montant de la remise 'taxPercent' => 20.00 // taux de TVA applicable à cette remise],// tu peux en mettre plusieurs, éventuellement à des taux différents ],]; $FacturX = new FactureElectronique(); $FacturX->setEnteteFacture($invoiceHeader); echo $FacturX->getXml();
function __construct()
{
// Initilisation du document XML
$this->xml = new DOMDocument('1.0', 'UTF-8');
// Ajout du formatage du fichier XML (meilleure lisibilité, à eventuellement desactiver en prod)
$this->xml->formatOutput = true;
}
🔧 entete
Création de l'entete du fichier XML
function entete()
{
// Entête XML de la facturX
$this->facture = $this->xml->createElement('rsm:CrossIndustryInvoice');
// On ajoute l'entête au document XML
$this->xml->appendChild($this->facture);
// Bibliothèque de types de données qualifiés (100 = valeur du standard)
$this->facture->setAttribute('xmlns:qdt', 'urn:un:unece:uncefact:data:standard:QualifiedDataType:100');
// Bibliothèque de types de données NON qualifiés (100 = valeur du standard)
$this->facture->setAttribute('xmlns:udt', 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100');
// Bibliothèque standard UN/CEFACT de structures métier réutilisables (RABIE), version 100
$this->facture->setAttribute('xmlns:ram', 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100');
// Bibliotheque du standard du de la facture électronique (CII) en version 100
$this->facture->setAttribute('xmlns:rsm', 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100');
// Déclaration du type XML fourni par la W3C
$this->facture->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
}
↩️ Returns
(void)
🔧 contexteDocument
BG2 - Exchange document contexte
function contexteDocument()
{
// Création du contexte du document
$contexteDocument = $this->xml->createElement('rsm:ExchangedDocumentContext');
// Ajout au XML de la facture
$this->facture->appendChild($contexteDocument);
// BT 23 - Pour chorus Pro, on déclare un dépot de facture
$BusinessProcessSpecifiedDocumentContextParameter = $this->xml->createElement('ram:BusinessProcessSpecifiedDocumentContextParameter');
$contexteDocument->appendChild($BusinessProcessSpecifiedDocumentContextParameter);
$BusinessProcessSpecifiedDocumentContextParameter->appendChild(
$this->xml->createElement('ram:ID', 'A1')
);
// BT-24 - On déclare un format Factur-x Profil conforme à la norme EN 16931
$guidelineParam = $this->xml->createElement('ram:GuidelineSpecifiedDocumentContextParameter');
$contexteDocument->appendChild($guidelineParam);
// ... (truncated)
↩️ Returns
(void)
⚠️ Throws
DOMException:
🔧 exchangeDocument
BT-1-00 - Exchange document
function exchangeDocument()
{
// Création du document
$exchangedDocument = $this->xml->createElement('rsm:ExchangedDocument');
// BT-1 - Numéro de la facture
$exchangedDocument->appendChild($this->xml->createElement('ram:ID', $this->enteteFacture['invoiceNumber']));
// BT-3 - Type de facture
$exchangedDocument->appendChild($this->xml->createElement('ram:TypeCode', $this->enteteFacture['invoiceType']));
// BT-2.00 - Date d'échéance
$guidelineParam = $this->xml->createElement('ram:IssueDateTime');
$exchangedDocument->appendChild($guidelineParam);
$DateTimeString = $this->xml->createElement('udt:DateTimeString', 'urn:cen.eu:en16931:2017');
$guidelineParam->appendChild($DateTimeString);
$DateTimeString->setAttribute('format', 102);
// ... (truncated)
↩️ Returns
(void)
🔧 lignesDeFactures
AAI : Information générale SUR : Remarques fournisseur REG : Information réglementaire ABL : Information légale TXD : Information fiscale CUS : Information douanière
function lignesDeFactures()
{
// Création du bloc
$lignesFactures = $this->xml->createElement('rsm:SupplyChainTradeTransaction');
$this->facture->appendChild($lignesFactures);
$this->headerTradeAgreement($lignesFactures);
}
🔧 lignesDeFactures
BG25-BG131 - lignes de facture (Supply Chain Trade Transaction)
function lignesDeFactures()
{
// Création du bloc
$lignesFactures = $this->xml->createElement('rsm:SupplyChainTradeTransaction');
$this->facture->appendChild($lignesFactures);
$this->headerTradeAgreement($lignesFactures);
}