Peppol Koppeling Factures UBL PEPPOL pour PHP et Laravel

darvis/ubl-peppol

Des factures électroniques acceptées par le réseau PEPPOL

Un paquet PHP qui crée des factures et des notes de crédit UBL 2.1 selon PEPPOL BIS Billing 3.0 et EN 16931. Avec les règles néerlandaises et belges, un contrôle du numéro de TVA via VIES et une connexion Laravel optionnelle.

$ composer require darvis/ubl-peppol

Peppol Koppeling en bref

Vous avez déjà vos données de facturation, dans une base de données, un ERP ou une boutique en ligne. Ce paquet les transforme en un document XML accepté par un destinataire PEPPOL. Vous transmettez vos données au builder, le paquet écrit le XML.

Vous découvrez Peppol ? Lisez d'abord ce qu'est Peppol et comment fonctionne le réseau, ou contactez-nous si vous souhaitez de l'aide pour votre intégration.

Ce qu'il fait

  • Factures et notes de crédit néerlandaises avec UblNlBis3Service
  • Factures et notes de crédit belges avec UblBeBis3Service
  • Contrôle avec validate() avant l'envoi, avec la règle qui échoue
  • Contrôle des numéros de TVA via VIES et du format des numéros KvK, BCE, RCS, SIREN et Handelsregister
  • Dans Laravel : envoi à votre prestataire de point d'accès, avec journalisation et une commande de nettoyage

Ce qu'il ne fait pas

  • Ce n'est pas un point d'accès. Pour envoyer, il vous faut un contrat avec un prestataire.
  • Il ne calcule pas votre facture. Vous fournissez les montants, la TVA et les totaux.
  • Il ne crée pas de PDF et ne reçoit pas de factures.

À la une

Version 1.11 : les catégories de TVA en base de connaissances

Un enum avec les neuf catégories de TVA autorisées par PEPPOL, qui explique quand utiliser chacune et quel motif d'exonération s'y rattache. validate() contrôle désormais aussi ce que chaque catégorie exige.

Validateur PEPPOL en ligne

Importez ou collez une facture ou une note de crédit UBL, puis lancez le contrôle selon les règles officielles EN 16931 et PEPPOL BIS Billing 3.0. Tout s'exécute dans votre navigateur, rien n'est envoyé.

Notes de crédit avec le builder néerlandais

Depuis la version 1.10, le builder néerlandais crée aussi des notes de crédit, avec une référence à la facture que vous corrigez.

Toutes les modifications

Comment créer une facture

Créez un builder, ajoutez l'entête, les parties, le paiement, la TVA, les totaux et les lignes, et le builder écrit le XML pour vous. Avec validateFirst: true, vous savez avant l'envoi s'il manque quelque chose.

use Darvis\UblPeppol\UblNlBis3Service;

$ubl = new UblNlBis3Service();

$ubl->createDocument();
$ubl->addInvoiceHeader('INV-2026-001', '2026-01-15', '2026-02-14');
$ubl->addBuyerReference('CLIENT-001');

$ubl->addAccountingSupplierParty(/* votre entreprise */);
$ubl->addAccountingCustomerParty(/* votre client */);
$ubl->addPaymentMeans('30', 'Credit transfer', 'INV-2026-001', 'NL91ABNA0417164300');

$ubl->addTaxTotal([/* TVA par catégorie */]);
$ubl->addLegalMonetaryTotal([/* totaux */], 'EUR');
$ubl->addInvoiceLine([/* ligne de facture */]);

// Throws an InvalidArgumentException when validate() finds an error.
$xml = $ubl->generateXml(validateFirst: true);

L'exemple complet, ligne par ligne

Pourquoi maintenant

Belgique

Obligatoire depuis 2026

Depuis le 1er janvier 2026, les entreprises belges doivent se facturer électroniquement. Peppol en est le canal par défaut.

Pays-Bas

Obligatoire dès 2030

Le gouvernement néerlandais veut rendre la facturation électronique entre entreprises obligatoire à partir du 1er juillet 2030. En vous connectant maintenant, vous serez prêt à temps.

Europe

VAT in the Digital Age

Avec ViDA arrivent la déclaration numérique de la TVA et la facture électronique pour le commerce transfrontalier entre entreprises.

Questions fréquentes

Ce paquet envoie mes factures sur le réseau PEPPOL ?

Non. Le paquet n'est pas un point d'accès. PEPPOL est un réseau fermé que vous atteignez via un prestataire de point d'accès avec lequel vous avez un contrat. Dans Laravel, PeppolService envoie le XML à l'API de ce prestataire, avec PEPPOL_URL, PEPPOL_USERNAME et PEPPOL_PASSWORD de votre .env.

Quelle est la différence entre le builder néerlandais et le builder belge ?

Choisissez le builder selon le pays du destinataire. UblNlBis3Service place automatiquement les éléments dans le bon ordre et contrôle les règles néerlandaises. UblBeBis3Service additionne les lignes pour vous avec calculateTotals() et vérifie que les montants sont corrects. Les deux créent des notes de crédit.

Un validate() réussi, cela suffit ?

Non. validate() ne modifie rien à votre document et contrôle les règles que le paquet connaît. Un destinataire en contrôle davantage. Passez donc un document dans un validateur officiel avant la mise en production, par exemple le validateur en ligne de la documentation.

Quelles versions de PHP et de Laravel sont nécessaires ?

PHP 8.2 ou plus récent avec les extensions dom et libxml. Pour contrôler un IBAN, il faut bcmath, et pour VIES l'extension soap. Laravel 11, 12 ou 13 n'est nécessaire que pour la couche Laravel optionnelle.

Combien coûte le paquet ?

Rien. Le paquet est gratuit et publié sous licence MIT. Vous pouvez l'utiliser dans des projets commerciaux.

Plus de questions dans la documentation