Aller au contenu

Facturation électronique française (réforme 2026)

La France rend obligatoire la facturation électronique pour les transactions B2B domestiques :

  • Septembre 2026 : toute entreprise doit être en mesure de recevoir des factures électroniques ; les grandes entreprises et les entreprises de taille intermédiaire (ETI) doivent également les émettre.
  • Septembre 2027 : l'émission devient obligatoire pour les PME et micro-entreprises.

Les factures B2B doivent transiter par une Plateforme Agréée (PA), une plateforme habilitée par l'État, dans un format structuré : Factur-X (PDF avec XML embarqué), UBL ou CII. Pennylane est elle-même une PA agréée, si bien que les utilisateurs de Pennylane n'ont besoin d'aucune plateforme tierce. L'API expose l'ensemble du flux, et ce SDK le couvre intégralement.

Vérifier vos enregistrements PA

<?php

use Pennylane\Sdk\Pennylane;

$client = new Pennylane(); // lit PENNYLANE_API_TOKEN

foreach ($client->paRegistrations->list() as $registration) {
    echo $registration->siret . ' ' . $registration->status . PHP_EOL;
}

Envoyer une facture via le réseau PA

Finalisez la facture, puis transmettez-la à la plateforme :

$invoice = $client->customerInvoices->finalize($draft->id);
$client->customerInvoices->sendToPa($invoice->id);

Suivez le statut de livraison soit via le champ de facturation électronique de la facture ($invoice->eInvoicing->status), soit via le flux de changements, soit avec l'événement webhook customer_invoice.e_invoicing_status_updated (voir le guide des webhooks).

Recevoir des factures électroniques fournisseurs

Les factures arrivant par le réseau atterrissent automatiquement dans Pennylane. Si vous recevez des factures structurées par un autre canal, importez-les :

use Pennylane\Sdk\FileUpload;

$client->supplierInvoices->importEInvoice(FileUpload::fromPath('invoice.xml'));

Les données Factur-X ou XML sont analysées de façon structurelle (pas d'OCR), ce qui garantit la fiabilité du fournisseur, des montants et des lignes.

Importer des factures de vente électroniques depuis un autre outil

Si vous facturez depuis un ERP externe tout en gardant Pennylane comme système comptable et comme PA, poussez vos factures de vente en tant que factures électroniques :

$client->customerInvoices->importEInvoice(
    FileUpload::fromPath('factur-x.pdf'),
    invoiceOptions: [
        // pré-remplit le client et fait correspondre les lignes de facture par e_invoice_line_id
        // (le LineID BT-126 de Factur-X), voir le docblock de la méthode
        'customer_id' => 123,
    ],
);

Mettre à jour le statut d'une facture électronique (avancé)

Les flux côté achats peuvent mettre à jour le statut de cycle de vie d'une facture électronique fournisseur reçue :

$client->supplierInvoices->updateEInvoiceStatus(
    $invoiceId,
    status: 'approved',
);

// Contester une ligne nécessite un code de motif
$client->supplierInvoices->updateEInvoiceStatus(
    $invoiceId,
    status: 'disputed',
    reason: 'incorrect_vat_rate',
);

status vaut disputed, refused ou approved. reason est requis avec disputed (par exemple incorrect_vat_rate, incorrect_unit_prices, incorrect_billed_quantity, defective_delivered_item, bank_details_error) ou avec refused (par exemple incorrect_vat_rate, contract_completed, duplicate_invoice, non_compliant_invoice) ; il est omis quand status vaut approved.

Les échéances sont critiques pour l'activité

Si vous intégrez la facturation en vue de septembre 2026, testez le flux PA tôt, dans un environnement de test (sandbox). Le SDK lève une ValidationException accompagnée des détails de l'API lorsqu'un document ne respecte pas les exigences de format.