Peppol BIS Billing 3.0 aus .NET erzeugen und lesen.
Peppol BIS Billing 3.0 ist eine CIUS auf Basis von EN 16931 – technisch dieselbe UBL-Struktur wie die XRechnung, unterschieden über die Spezifikationskennung (BT-24). Mit FactoorSharp entsteht beides aus demselben Rechnungsmodell in C# und VB.NET.
Diese Seite beschreibt die Dokumentebene: erzeugen, lesen, kennzeichnen. Den Versand über das Peppol-Netzwerk übernimmt ein Access Point – was das bedeutet, steht weiter unten.
FacturXInvoice.SetLicense("DEIN-LIZENZSCHLUESSEL");
var invoice = FacturXInvoice.CreateInvoice(
"RE-2025-0042",
new DateTime(2025, 9, 3),
CurrencyCodes.EUR);
invoice.SetSeller("BikeTech GmbH", "10115", "Berlin", "Radweg 12", CountryCodes.DE);
invoice.SetBuyer("City Bikes AG", "20457", "Hamburg", "Hafenstraße 45", CountryCodes.DE);
// Peppol BIS Billing 3.0 statt XRechnung kennzeichnen (BT-24)
invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30;
// Peppol kennt keine CII-Syntax – UBL wird deshalb explizit angegeben
invoice.Save("peppol-invoice.xml", ZUGFeRDVersion.Version25, Profile.XRechnung, ZUGFeRDFormats.UBL);
FacturXInvoice.SetLicense("DEIN-LIZENZSCHLUESSEL")
Dim invoice = FacturXInvoice.CreateInvoice(
"RE-2025-0042",
New DateTime(2025, 9, 3),
CurrencyCodes.EUR)
invoice.SetSeller("BikeTech GmbH", "10115", "Berlin", "Radweg 12", CountryCodes.DE)
invoice.SetBuyer("City Bikes AG", "20457", "Hamburg", "Hafenstraße 45", CountryCodes.DE)
' Peppol BIS Billing 3.0 statt XRechnung kennzeichnen (BT-24)
invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30
' Peppol kennt keine CII-Syntax – UBL wird deshalb explizit angegeben
invoice.Save("peppol-invoice.xml", ZUGFeRDVersion.Version25, Profile.XRechnung, ZUGFeRDFormats.UBL)
Peppol BIS Billing 3.0
Spezifikationskennung (BT-24), Geschäftsprozess (BT-23) und UBL-Ausgabe – aus demselben Rechnungsmodell wie ZUGFeRD und XRechnung.
Teilnehmerkennungen
Elektronische Adressen für Verkäufer und Käufer (BT-34 / BT-49) mit Schema-Kennung – USt-IdNr., GLN und die weiteren EAS-Codes.
XRechnung und Peppol parallel
Ein Rechnungsobjekt, drei Zielformate: XRechnung, XRechnung mit KoSIT-Extension und Peppol BIS Billing 3.0.
Eingehende Rechnungen
UBL-Rechnungen einlesen, das verwendete Regelwerk an BT-24 erkennen und die Endpunkt-Kennungen auswerten.
XRechnung oder Peppol BIS Billing 3.0? Derselbe Kern, eine andere Kennung
Beide sind CIUS (Core Invoice Usage Specification) auf Basis von EN 16931 und verwenden
dieselbe UBL-Struktur. Unterschieden werden sie über die Spezifikationskennung BT-24,
die als cbc:CustomizationID im XML steht.
Praktisch heißt das: Wer bereits XRechnungen erzeugt, braucht für Peppol kein zweites Rechnungsmodell und keine zweite Bibliothek – nur eine andere Kennung beim Speichern.
BT-24 ist keine geschlossene Codeliste: Auch CIUS anderer EU-Staaten lassen sich über
SpecificationIdentifier als URN setzen.
// Dasselbe Rechnungsmodell, drei Zielformate – unterschieden nur über BT-24:
// 1. XRechnung (Standard beim Profil XRechnung, Kennung wird automatisch gesetzt)
invoice.Save("xrechnung.xml", ZUGFeRDVersion.Version25, Profile.XRechnung);
// 2. XRechnung mit KoSIT-Extension
invoice.SpecificationIdentifier = SpecificationIdentifiers.XRechnung30Extension;
invoice.Save("xrechnung-extension.xml", ZUGFeRDVersion.Version25, Profile.XRechnung);
// 3. Peppol BIS Billing 3.0
invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30;
invoice.Save("peppol-invoice.xml", ZUGFeRDVersion.Version25, Profile.XRechnung, ZUGFeRDFormats.UBL);
' Dasselbe Rechnungsmodell, drei Zielformate – unterschieden nur über BT-24:
' 1. XRechnung (Standard beim Profil XRechnung, Kennung wird automatisch gesetzt)
invoice.Save("xrechnung.xml", ZUGFeRDVersion.Version25, Profile.XRechnung)
' 2. XRechnung mit KoSIT-Extension
invoice.SpecificationIdentifier = SpecificationIdentifiers.XRechnung30Extension
invoice.Save("xrechnung-extension.xml", ZUGFeRDVersion.Version25, Profile.XRechnung)
' 3. Peppol BIS Billing 3.0
invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30
invoice.Save("peppol-invoice.xml", ZUGFeRDVersion.Version25, Profile.XRechnung, ZUGFeRDFormats.UBL)
Was Peppol zusätzlich verlangt
Die Spezifikationskennung allein macht aus einer XRechnung noch keine gültige Peppol-Rechnung. Peppol BIS Billing 3.0 fordert zwei Angaben, die bei einer reinen XRechnung optional bleiben dürfen.
Bei XRechnungen an deutsche öffentliche Auftraggeber steht in BT-10 ohnehin meist die Leitweg-ID – diese Anforderung ist dort also in der Regel schon erfüllt.
// Teilnehmerkennungen für Verkäufer und Käufer (BT-34 / BT-49).
// Üblich sind die USt-IdNr. (Schema 9930 für Deutschland) oder eine GLN (Schema 0088).
invoice.SetSellerElectronicAddress("DE123456789", ElectronicAddressSchemeIdentifiers.GermanyVatNumber);
invoice.SetBuyerElectronicAddress("DE987654321", ElectronicAddressSchemeIdentifiers.GermanyVatNumber);
// Mindestens eines der beiden Felder ist bei Peppol BIS Billing 3.0 verpflichtend
invoice.ReferenceOrderNo = "PROJ-4711"; // Referenz des Käufers, BT-10
// oder alternativ:
invoice.OrderNo = "PO-2026-0042"; // Bestellreferenz, BT-13
' Teilnehmerkennungen für Verkäufer und Käufer (BT-34 / BT-49).
' Üblich sind die USt-IdNr. (Schema 9930 für Deutschland) oder eine GLN (Schema 0088).
invoice.SetSellerElectronicAddress("DE123456789", ElectronicAddressSchemeIdentifiers.GermanyVatNumber)
invoice.SetBuyerElectronicAddress("DE987654321", ElectronicAddressSchemeIdentifiers.GermanyVatNumber)
' Mindestens eines der beiden Felder ist bei Peppol BIS Billing 3.0 verpflichtend
invoice.ReferenceOrderNo = "PROJ-4711" ' Referenz des Käufers, BT-10
' oder alternativ:
invoice.OrderNo = "PO-2026-0042" ' Bestellreferenz, BT-13
Eingehende Peppol-Rechnungen verarbeiten
Beim Einlesen ist der Weg derselbe wie bei ZUGFeRD und XRechnung. Welches Regelwerk der Absender verwendet hat, steht in BT-24; die Endpunkt-Kennungen hängen an den Parteien.
Elektronische Adressen sind dabei nicht auf Verkäufer und Käufer beschränkt – das Datenmodell sieht sie an 19 Geschäftsterminen vor, überall dort, wo eine Partei im Dokument auftaucht.
var invoice = FacturXInvoice.Load("peppol-invoice.xml");
// Welches Regelwerk war es? BT-24 steht als cbc:CustomizationID im Dokument.
if (invoice.SpecificationIdentifier == SpecificationIdentifiers.PeppolBisBilling30)
{
var sellerEndpoint = invoice.Seller.ElectronicAddress; // BT-34
var buyerEndpoint = invoice.Buyer.ElectronicAddress; // BT-49
}
Dim invoice = FacturXInvoice.Load("peppol-invoice.xml")
' Welches Regelwerk war es? BT-24 steht als cbc:CustomizationID im Dokument.
If invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30 Then
Dim sellerEndpoint = invoice.Seller.ElectronicAddress ' BT-34
Dim buyerEndpoint = invoice.Buyer.ElectronicAddress ' BT-49
End If
Wo FactoorSharp aufhört: der Access Point
Peppol besteht aus zwei Teilen, die oft in einen Topf geworfen werden: dem Dokument und dem Netzwerk. FactoorSharp deckt den ersten Teil ab – es erzeugt, liest und kennzeichnet Peppol-BIS-Billing-3.0-Dokumente. Den zweiten Teil, also den Transport über das Peppol-Netzwerk per AS4, übernimmt ein Access Point.
Mit FactoorSharp
- Peppol BIS Billing 3.0 erzeugen und lesen (UBL)
- Spezifikationskennung BT-24 setzen und auswerten
- Geschäftsprozess BT-23 – wird beim Speichern automatisch gesetzt
- Teilnehmerkennungen BT-34 / BT-49 mit EAS-Schema
- Pflichtfelder BT-10 / BT-13 befüllen
- ZUGFeRD, Factur-X und XRechnung aus demselben Modell
Dafür braucht es einen Access Point
- Versand und Empfang über das Peppol-Netzwerk (AS4)
- Registrierung als Peppol-Teilnehmer
- Empfänger-Lookup über SMP und SML
- Zertifikate und Zustellnachweise
Die Arbeitsteilung ist üblich und praktisch: Der Access Point transportiert, was Ihre Anwendung erzeugt. FactoorSharp sorgt dafür, dass das übergebene Dokument den Regeln entspricht, bevor es das Haus verlässt.
Typische Einsatzszenarien
- Rechnungen für Geschäftspartner im EU-Ausland, die über Peppol empfangen
- Anbindung an einen vorhandenen Access Point als Dokumentenquelle
- Bestehende XRechnung-Integration um Peppol erweitern
- Eingehende UBL-Rechnungen aus dem Peppol-Netzwerk verarbeiten
Geeignet für
- ERP- und Warenwirtschaftssysteme
- E-Commerce- und SaaS-Plattformen
- Rechnungsportale und Middleware
- Individuelle .NET-Fachanwendungen
Entscheidende Vorteile
- Ein Rechnungsmodell für ZUGFeRD, XRechnung und Peppol
- Keine zweite Bibliothek für UBL nötig
- Validierung vor dem Versand statt Ablehnung durch den Empfänger
- Klare .NET-API statt eigener XML-Sonderlogik
Häufige Fragen
Nein. FactoorSharp arbeitet auf Dokumentebene: Es erzeugt, liest und validiert Peppol-BIS-Billing-3.0-Dokumente. Der Versand über das Peppol-Netzwerk läuft über AS4 und setzt einen Access Point sowie eine Registrierung als Peppol-Teilnehmer voraus.
In der Praxis ist das eine saubere Arbeitsteilung: Ihre Anwendung erzeugt das Dokument mit FactoorSharp, der Access Point transportiert es.
Beide sind CIUS auf Basis von EN 16931 und nutzen dieselbe UBL-Struktur. Unterschieden werden sie über die Spezifikationskennung BT-24 (cbc:CustomizationID). XRechnung ist der deutsche Standard für öffentliche Auftraggeber, Peppol BIS Billing 3.0 das Regelwerk für den Austausch über das Peppol-Netzwerk.
Zusätzlich verlangt Peppol Teilnehmerkennungen für beide Parteien (BT-34 / BT-49) und mindestens eines der Felder BT-10 oder BT-13.
ZUGFeRDFormats.UBL. Für Peppol ist das zwingend, weil Peppol BIS Billing 3.0 keine CII-Syntax kennt.ElectronicAddressSchemeIdentifiers; elektronische Adressen sind dabei nicht auf Verkäufer und Käufer beschränkt.Peppol BIS Billing 3.0 in Ihrer .NET-Anwendung?
Starten Sie mit FactoorSharp in wenigen Minuten oder sehen Sie sich direkt die Lizenz- und Preismodelle an.