Peppol Koppeling UBL PEPPOL Rechnungen für PHP und Laravel

darvis/ubl-peppol

Elektronische Rechnungen, die das PEPPOL Netzwerk akzeptiert

Ein PHP Paket, das UBL 2.1 Rechnungen und Gutschriften nach PEPPOL BIS Billing 3.0 und EN 16931 erstellt. Mit niederländischen und belgischen Regeln, einer Prüfung der Steuernummer über VIES und einer optionalen Laravel Anbindung.

$ composer require darvis/ubl-peppol

Was ist Peppol Koppeling

Deine Rechnungsdaten hast du schon, in einer Datenbank, einem ERP oder einem Webshop. Dieses Paket macht daraus ein XML Dokument, das ein PEPPOL Empfänger akzeptiert. Du übergibst deine Daten an den Builder, das Paket schreibt das XML.

Neu bei Peppol? Lies zuerst nach, was Peppol ist und wie das Netzwerk funktioniert, oder nimm Kontakt auf, wenn du Hilfe bei deiner Anbindung möchtest.

Was es kann

  • Niederländische Rechnungen und Gutschriften mit UblNlBis3Service
  • Belgische Rechnungen und Gutschriften mit UblBeBis3Service
  • Prüfung mit validate() vor dem Versand, mit der Regel, die fehlschlägt
  • Steuernummern über VIES prüfen, dazu das Format von KvK, KBO, RCS, SIREN und Handelsregisternummern
  • In Laravel: Versand an deinen Access Point Provider, mit Logging und einem Aufräumbefehl

Was es nicht kann

  • Es ist kein Access Point. Für den Versand brauchst du einen Vertrag mit einem Provider.
  • Es rechnet deine Rechnung nicht aus. Beträge, Steuer und Summen gibst du selbst mit.
  • Es erstellt keine PDFs und empfängt keine Rechnungen.

Aktuelles

Version 1.11: Steuerkategorien als Wissensbasis

Ein Enum mit allen neun Steuerkategorien, die PEPPOL erlaubt, mit Erklärung, wann du welche nutzt und welcher Befreiungsgrund dazugehört. validate() prüft jetzt auch, was jede Kategorie verlangt.

Online PEPPOL Validator

Lade eine UBL Rechnung oder Gutschrift hoch oder füge sie ein und prüfe sie gegen die offiziellen Regeln von EN 16931 und PEPPOL BIS Billing 3.0. Alles läuft in deinem Browser, nichts wird hochgeladen.

Gutschriften mit dem niederländischen Builder

Seit Version 1.10 erstellt auch der niederländische Builder Gutschriften, mit einem Verweis auf die Rechnung, die du korrigierst.

Alle Änderungen

So erstellst du eine Rechnung

Erstelle einen Builder, füge Kopf, Parteien, Zahlung, Umsatzsteuer, Summen und Positionen hinzu und lass ihn das XML schreiben. Mit validateFirst: true weißt du vor dem Versand, ob etwas fehlt.

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(/* deine Firma */);
$ubl->addAccountingCustomerParty(/* dein Kunde */);
$ubl->addPaymentMeans('30', 'Credit transfer', 'INV-2026-001', 'NL91ABNA0417164300');

$ubl->addTaxTotal([/* Umsatzsteuer je Kategorie */]);
$ubl->addLegalMonetaryTotal([/* Summen */], 'EUR');
$ubl->addInvoiceLine([/* Rechnungsposition */]);

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

Das vollständige Beispiel, Zeile für Zeile

Warum jetzt

Belgien

Pflicht seit 2026

Seit dem 1. Januar 2026 müssen belgische Unternehmen einander elektronisch Rechnungen stellen. Peppol ist dafür der Standardkanal.

Niederlande

Pflicht ab 2030

Die niederländische Regierung will elektronische Rechnungen zwischen Unternehmen ab dem 1. Juli 2030 zur Pflicht machen. Wer jetzt anbindet, ist rechtzeitig bereit.

Europa

VAT in the Digital Age

Mit ViDA kommen digitale Umsatzsteuermeldungen und elektronische Rechnungen für den grenzüberschreitenden Handel zwischen Unternehmen.

Häufige Fragen

Versendet dieses Paket meine Rechnungen über das PEPPOL Netzwerk?

Nein. Das Paket ist kein Access Point. PEPPOL ist ein geschlossenes Netzwerk, das du über einen Access Point Provider erreichst, mit dem du einen Vertrag hast. In Laravel sendet PeppolService das XML an die API dieses Providers, mit PEPPOL_URL, PEPPOL_USERNAME und PEPPOL_PASSWORD aus deiner .env.

Was ist der Unterschied zwischen dem niederländischen und dem belgischen Builder?

Wähle den Builder nach dem Land des Empfängers. UblNlBis3Service bringt die Elemente selbst in die richtige Reihenfolge und prüft die niederländischen Regeln. UblBeBis3Service summiert mit calculateTotals() die Positionen für dich und prüft, ob die Beträge stimmen. Beide erstellen Gutschriften.

Reicht ein erfolgreiches validate()?

Nein. validate() ändert nichts an deinem Dokument und prüft die Regeln, die das Paket kennt. Ein Empfänger prüft mehr. Prüfe ein Dokument deshalb mit einem offiziellen Validator, bevor du live gehst, zum Beispiel mit dem Online Validator in der Dokumentation.

Welche PHP und Laravel Version brauche ich?

PHP 8.2 oder neuer mit den Erweiterungen dom und libxml. Für eine IBAN Prüfung brauchst du bcmath, für VIES die soap Erweiterung. Laravel 11, 12 oder 13 ist nur für die optionale Laravel Schicht nötig.

Ist das Paket kostenlos?

Ja. Das Paket ist kostenlos und steht unter der MIT Lizenz. Du darfst es in kommerziellen Projekten einsetzen.

Weitere Fragen in der Dokumentation