Peppol Koppeling UBL PEPPOL facturen voor PHP en Laravel

darvis/ubl-peppol

Elektronische facturen die het PEPPOL netwerk accepteert

Een PHP pakket dat UBL 2.1 facturen en creditnota's maakt volgens PEPPOL BIS Billing 3.0 en EN 16931. Met Nederlandse en Belgische regels, een btw nummer controle via VIES en een optionele Laravel koppeling.

$ composer require darvis/ubl-peppol

Wat is de Peppol Koppeling

Je hebt je factuurgegevens al, in een database, een ERP of een webshop. Dit pakket zet ze om in een XML document dat een PEPPOL ontvanger accepteert. Jij koppelt je gegevens aan de builder, het pakket schrijft de XML.

Wat het doet

  • Nederlandse facturen en creditnota's met UblNlBis3Service
  • Belgische facturen en creditnota's met UblBeBis3Service
  • Controle met validate() vóór verzending, met de regel die faalt
  • Btw nummers controleren via VIES en KvK, KBO, RCS, SIREN en Handelsregister nummers op formaat
  • In Laravel: versturen naar je access point provider, met logging en een opschoon commando

Wat het niet doet

  • Het is geen access point. Voor verzending heb je een contract met een provider nodig.
  • Het rekent je factuur niet uit. Jij geeft bedragen, btw en totalen mee.
  • Het maakt geen PDF en ontvangt geen facturen.

Uitgelicht

Versie 1.11: btw categorieën als kennisbank

Een enum met alle negen btw categorieën die PEPPOL toestaat, met uitleg wanneer je welke gebruikt en welke vrijstellingsreden erbij hoort. validate() controleert nu ook wat elke categorie vraagt.

Online PEPPOL validator

Upload of plak een UBL factuur of creditnota en laat hem controleren tegen de officiële EN 16931 en PEPPOL BIS Billing 3.0 regels. Alles draait in je browser, er wordt niets geüpload.

Creditnota's met de Nederlandse builder

Sinds versie 1.10 maakt ook de Nederlandse builder creditnota's, met een verwijzing naar de factuur die je corrigeert.

Alle wijzigingen

Zo maak je een factuur

Maak een builder, voeg de kop, de partijen, de betaling, de btw, de totalen en de regels toe, en laat hem de XML schrijven. Met validateFirst: true weet je vóór verzending of er iets ontbreekt.

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(/* jouw bedrijf */);
$ubl->addAccountingCustomerParty(/* je klant */);
$ubl->addPaymentMeans('30', 'Credit transfer', 'INV-2026-001', 'NL91ABNA0417164300');

$ubl->addTaxTotal([/* btw per categorie */]);
$ubl->addLegalMonetaryTotal([/* totalen */], 'EUR');
$ubl->addInvoiceLine([/* factuurregel */]);

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

Het volledige voorbeeld, regel voor regel

Waarom nu

België

Verplicht sinds 2026

Sinds 1 januari 2026 moeten Belgische ondernemingen onderling elektronisch factureren. Peppol is daarvoor het standaard kanaal.

Nederland

Verplicht vanaf 2030

Het kabinet wil elektronisch factureren tussen bedrijven vanaf 1 juli 2030 verplicht stellen. Wie nu koppelt, is op tijd klaar.

Europa

VAT in the Digital Age

Met ViDA komen digitale btw rapportage en elektronische facturen voor grensoverschrijdende handel tussen bedrijven.

Veelgestelde vragen

Verstuurt dit pakket mijn facturen over het PEPPOL netwerk?

Nee. Het pakket is geen access point. PEPPOL is een gesloten netwerk dat je bereikt via een access point provider waar je een contract mee hebt. In Laravel stuurt PeppolService de XML naar de API van die provider, met PEPPOL_URL, PEPPOL_USERNAME en PEPPOL_PASSWORD uit je .env.

Wat is het verschil tussen de Nederlandse en de Belgische builder?

Kies de builder op basis van het land van de ontvanger. UblNlBis3Service zet de elementen zelf in de juiste volgorde en controleert de Nederlandse regels. UblBeBis3Service rekent met calculateTotals() de regels voor je op en controleert of de bedragen kloppen. Beide maken creditnota's.

Is een geslaagde validate() genoeg?

Nee. validate() verandert niets aan je document en controleert de regels die het pakket kent. Een ontvanger controleert meer. Haal een document daarom door een officiële validator voordat je live gaat, bijvoorbeeld de online validator in de documentatie.

Welke PHP en Laravel versie heb ik nodig?

PHP 8.2 of nieuwer met de dom en libxml extensies. Voor een IBAN controle heb je bcmath nodig, voor VIES de soap extensie. Laravel 11, 12 of 13 is alleen nodig voor de optionele Laravel laag.

Is het pakket gratis?

Ja. Het pakket is gratis en valt onder de MIT licentie. Je mag het gebruiken in commerciële projecten.

Meer vragen in de documentatie