ZUGFeRD-Rechnung: Beispiel mit PDF-Ansicht und XML erklärt
Wie eine ZUGFeRD-Rechnung aussieht: eine vollständige Beispielrechnung als lesbarer Beleg und als XML-Ausschnitt, die wichtigsten Felder erklärt, offizielle Beispieldateien.
Wie sieht eine ZUGFeRD-Rechnung eigentlich aus? Die kurze Antwort: wie jede andere PDF-Rechnung. Die lange Antwort ist interessanter, denn in derselben Datei steckt eine zweite Rechnung, die kein Mensch liest – und die für das Finanzamt und die Buchhaltungssoftware Ihres Kunden die eigentliche ist. Dieser Artikel zeigt beide Seiten an einer durchgängigen Beispielrechnung: erst den Beleg, wie er auf dem Bildschirm erscheint, dann das XML, das darunter liegt, Feld für Feld erklärt.
Was Sie sehen und was drinsteckt
Eine ZUGFeRD-Datei hat zwei Ebenen. Die PDF/A-3 ist die Ansicht: Briefkopf, Anschrift, Positionen, Summen. Sie öffnen sie mit jedem PDF-Reader. Das eingebettete XML namens factur-x.xml ist der Datensatz: dieselben Angaben in benannten Feldern nach der Norm EN 16931, in der Syntax UN/CEFACT CII.
Beide müssen übereinstimmen. Steht in der PDF 902,02 Euro und im XML 902,00, ist die Rechnung fehlerhaft – und das BMF hat im Schreiben vom 15. Oktober 2024 festgelegt, dass in diesem Fall das XML gilt. Wie das Format aufgebaut ist und welche Versionen und Profile es gibt, erklärt der Artikel ZUGFeRD-Format und Versionen; die Grundlagen stehen im Leitfaden ZUGFeRD.
Die Beispielrechnung
Ein fiktiver Elektrobetrieb stellt einem Gewerbekunden eine Installation in Rechnung. Zwei Positionen, Regelbesteuerung mit 19 Prozent, Zahlungsziel 14 Tage. So sieht der sichtbare Teil aus:
Meier Elektrotechnik · Ludwigstraße 12 · 86150 Augsburg · USt-IdNr. DE123456789 · rechnung@meier-elektrotechnik.example
An: Bauer GmbH · Industriestraße 7 · 86199 Augsburg
Rechnung Nr. 0018-2609-BAUER · Rechnungsdatum: 11.09.2026 · Leistungsdatum: 09.09.2026
| Pos. | Bezeichnung | Menge | Einzelpreis | Gesamt |
|---|---|---|---|---|
| 1 | Installation Unterverteilung | 8 Std. | 85,00 € | 680,00 € |
| 2 | Leitungsschutzschalter B16 | 12 Stk. | 6,50 € | 78,00 € |
Nettobetrag 758,00 € · Umsatzsteuer 19 % 144,02 € · Rechnungsbetrag 902,02 €
Zahlbar bis 25.09.2026 per Überweisung auf DE02 1203 0000 0000 2020 51.
Die Rechnungsnummer 0018-2609-BAUER liest sich so: laufende Nummer 18, ausgestellt im September 2026, Kunde Bauer. Die laufende Nummer vorn ist firmenweit fortlaufend; das Kürzel hinten ist Zusatzinformation, die § 14 UStG ausdrücklich erlaubt. Warum das praktisch ist, erklärt der Artikel Rechnungsnummer pro Kunde.
Alle Beträge gehen auf: 8 × 85,00 = 680,00; 12 × 6,50 = 78,00; Summe 758,00; davon 19 Prozent sind 144,02; zusammen 902,02. Das ist keine Nebensache – der Validator rechnet genau das nach.
Dasselbe als XML
Hier der eingebettete Datensatz, gekürzt auf die tragenden Elemente. Der vollständige Baum ist etwa doppelt so lang; ausgelassen sind die zweite Position, Adressen und Bankverbindung.
<?xml version="1.0" encoding="UTF-8"?>
<rsm:CrossIndustryInvoice
xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
<rsm:ExchangedDocumentContext>
<ram:GuidelineSpecifiedDocumentContextParameter>
<ram:ID>urn:cen.eu:en16931:2017</ram:ID>
</ram:GuidelineSpecifiedDocumentContextParameter>
</rsm:ExchangedDocumentContext>
<rsm:ExchangedDocument>
<ram:ID>0018-2609-BAUER</ram:ID>
<ram:TypeCode>380</ram:TypeCode>
<ram:IssueDateTime>
<udt:DateTimeString format="102">20260911</udt:DateTimeString>
</ram:IssueDateTime>
</rsm:ExchangedDocument>
<rsm:SupplyChainTradeTransaction>
<ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument>
<ram:LineID>1</ram:LineID>
</ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct>
<ram:Name>Installation Unterverteilung</ram:Name>
</ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement>
<ram:NetPriceProductTradePrice>
<ram:ChargeAmount>85.00</ram:ChargeAmount>
</ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="HUR">8.00</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement>
<ram:ApplicableTradeTax>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
<ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>680.00</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem>
<!-- Position 2 (Leitungsschutzschalter, 12 × 6,50 = 78,00) analog -->
<ram:ApplicableHeaderTradeAgreement>
<ram:SellerTradeParty>
<ram:Name>Meier Elektrotechnik</ram:Name>
<!-- PostalTradeAddress, E-Mail-Adresse -->
<ram:SpecifiedTaxRegistration>
<ram:ID schemeID="VA">DE123456789</ram:ID>
</ram:SpecifiedTaxRegistration>
</ram:SellerTradeParty>
<ram:BuyerTradeParty>
<ram:Name>Bauer GmbH</ram:Name>
<!-- PostalTradeAddress, E-Mail-Adresse -->
</ram:BuyerTradeParty>
</ram:ApplicableHeaderTradeAgreement>
<ram:ApplicableHeaderTradeSettlement>
<ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
<ram:ApplicableTradeTax>
<ram:CalculatedAmount>144.02</ram:CalculatedAmount>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:BasisAmount>758.00</ram:BasisAmount>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
<ram:SpecifiedTradePaymentTerms>
<ram:DueDateDateTime>
<udt:DateTimeString format="102">20260925</udt:DateTimeString>
</ram:DueDateDateTime>
</ram:SpecifiedTradePaymentTerms>
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:LineTotalAmount>758.00</ram:LineTotalAmount>
<ram:TaxBasisTotalAmount>758.00</ram:TaxBasisTotalAmount>
<ram:TaxTotalAmount currencyID="EUR">144.02</ram:TaxTotalAmount>
<ram:GrandTotalAmount>902.02</ram:GrandTotalAmount>
<ram:DuePayableAmount>902.02</ram:DuePayableAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
</ram:ApplicableHeaderTradeSettlement>
</rsm:SupplyChainTradeTransaction>
</rsm:CrossIndustryInvoice>
Drei Dinge fallen auf. Erstens die Namensräume am Anfang: rsm für das Dokument selbst, ram für die wiederverwendbaren Bausteine (fast alles), udt für einfache Datentypen wie das Datum. Zweitens die Codes statt Wörter: 380 statt „Rechnung", S statt „Regelsteuersatz", HUR statt „Stunde", 20260911 statt „11.09.2026". Drittens die Summen in drei Stufen: Position (LineTotalAmount 680,00), Steueraufschlüsselung (BasisAmount 758,00 → CalculatedAmount 144,02) und Gesamtsumme (GrandTotalAmount 902,02). Alle drei müssen zusammenpassen.
Die vollständige Fassung dieses Beispiels haben wir mit dem Referenzvalidator Mustangproject gegen das Profil EN 16931 geprüft: 89 Regeln, kein Fehler.
Die wichtigsten Felder erklärt
Die EN 16931 gibt jedem Feld eine Nummer, den Business Term (BT). Diese Nummern tauchen in Fehlermeldungen von Validatoren auf – wer sie kennt, versteht die Meldung. Die Felder aus dem Beispiel:
| BT | Bedeutung | XML-Element | Im Beispiel |
|---|---|---|---|
| BT-1 | Rechnungsnummer | ExchangedDocument/ID | 0018-2609-BAUER |
| BT-2 | Rechnungsdatum | ExchangedDocument/IssueDateTime | 20260911 (Format 102 = JJJJMMTT) |
| BT-3 | Rechnungstyp | ExchangedDocument/TypeCode | 380 Rechnung; 381 Gutschrift/Storno |
| BT-5 | Währung | InvoiceCurrencyCode | EUR |
| BT-9 | Fälligkeitsdatum | SpecifiedTradePaymentTerms/DueDateDateTime | 20260925 |
| BT-27 | Name des Verkäufers | SellerTradeParty/Name | Meier Elektrotechnik |
| BT-31 | USt-IdNr. des Verkäufers | SpecifiedTaxRegistration/ID mit schemeID="VA" | DE123456789 |
| BT-44 | Name des Käufers | BuyerTradeParty/Name | Bauer GmbH |
| BT-106 | Summe der Positionen netto | LineTotalAmount | 758.00 |
| BT-110 | Umsatzsteuer gesamt | TaxTotalAmount | 144.02 |
| BT-112 | Rechnungsbetrag brutto | GrandTotalAmount | 902.02 |
| BT-115 | Zahlbetrag | DuePayableAmount | 902.02 |
Die Spezifikation definiert weit mehr Felder – Leistungszeitraum, Leitweg-ID, Rabatte, Vorauszahlungen. Für eine gewöhnliche Rechnung sind die zwölf oben plus Adressen, Positionen und E-Mail-Adressen das, was zählt. Was der Gesetzgeber unabhängig vom Format auf jeder Rechnung verlangt, listet der Artikel Pflichtangaben auf der Rechnung.
- TypeCode 380 = Rechnung, 381 = Gutschrift (in Deutschland für Stornorechnungen üblich), 384 = korrigierte Rechnung
- CategoryCode S = Regelsteuersatz, E = steuerbefreit (etwa § 19 UStG, mit Begründungstext), AE = Reverse Charge, K = innergemeinschaftliche Lieferung
- unitCode H87 = Stück, HUR = Stunde, C62 = Einheit (allgemein), MTR = Meter, KGM = Kilogramm
- schemeID VA = USt-IdNr., FC = Steuernummer, EM = E-Mail-Adresse
Wo Sie offizielle Beispieldateien finden
Das FeRD liefert mit jeder Spezifikation ein Paket mit Beispieldateien je Profil – vollständige ZUGFeRD-PDFs samt XML, dazu ein Stylesheet, das das XML lesbar anzeigt. Kostenlos nach Registrierung auf ferd-net.de.
Das Mustangproject pflegt auf GitHub eine Sammlung von Testdateien (github.com/ZUGFeRD/corpus): gültige ZUGFeRD- und Factur-X-Dateien in mehreren Versionen und Profilen, außerdem absichtlich fehlerhafte Dateien zum Testen von Validatoren. Die Sammlung versteht sich als Community-Projekt, nicht als offizielle FeRD-Veröffentlichung – zum Lernen und Testen taugt sie trotzdem.
Wie Sie das XML aus einer ZUGFeRD-PDF holen
Sie haben eine ZUGFeRD-Rechnung bekommen und möchten hineinsehen? Drei Wege:
Im PDF-Reader. Öffnen Sie die Datei in einem vollwertigen Reader – Adobe Acrobat Reader, Foxit, PDF-XChange. Der Browser reicht nicht. Klicken Sie auf das Büroklammer-Symbol (Anhänge). Dort liegt factur-x.xml; Sie können es speichern und in einem Texteditor öffnen.
Im Quba-Viewer. Das kostenlose Open-Source-Programm für Windows, macOS und Linux (quba-viewer.org) öffnet die PDF, zeigt die Rechnung an und daneben den XML-Inhalt in lesbarer Form. Die Datei bleibt auf Ihrem Rechner.
Mit Mustangproject. Wer die Kommandozeile nicht scheut, extrahiert das XML mit einem Befehl: java -jar Mustang-CLI-2.24.0.jar --action extract --source rechnung.pdf --out factur-x.xml. Dasselbe Werkzeug prüft die Datei auch – wie, steht im Artikel ZUGFeRD-Validator.
Was das Beispiel für Ihre eigenen Rechnungen heißt
Das XML entsteht nicht aus der PDF, sondern aus den Rechnungsdaten – Kunde, Positionen, Steuersatz, Zahlungsziel. Fehlt eines davon oder ist es nur als Freitext vorhanden („Stück" statt H87, „19 %" statt 19.00), kann kein normkonformes XML entstehen. Deshalb gehört die Prüfung der Pflichtfelder an den Anfang, nicht ans Ende: Wer die Rechnung erst festschreibt und dann merkt, dass die E-Mail-Adresse des Kunden fehlt, kann sie nur noch stornieren.
Ihre Rechnung als ZUGFeRD – ohne einen Blick ins XML
Pennio erzeugt aus jeder festgeschriebenen Rechnung eine ZUGFeRD-PDF/A-3 mit eingebettetem XML nach EN 16931 und zusätzlich eine XRechnung. Pflichtfelder werden vor dem Festschreiben geprüft, die Dateien gegen Mustangproject und den KoSIT-Validator validiert.
Keine Kreditkarte nötig
Häufige Fragen
Wie sieht eine ZUGFeRD-Rechnung aus?
factur-x.xml mit denselben Rechnungsdaten in strukturierter Form. Sichtbar wird sie über das Anhang-Symbol eines PDF-Readers oder im Quba-Viewer.Kann ich das XML einer ZUGFeRD-Rechnung selbst lesen?
GrandTotalAmount ist der Bruttobetrag, DueDateDateTime das Fälligkeitsdatum. Ein Viewer zeigt dieselben Daten lesbarer an.Was bedeutet TypeCode 380?
381 (Gutschrift), korrigierte Rechnungen 384.Warum stehen im XML Codes statt Wörter?
HUR ist überall eine Stunde, „Std." nicht. Die Codelisten stammen von den Vereinten Nationen (UN/ECE) und werden von der EU gepflegt.Muss die Rechnungsnummer im XML dieselbe sein wie in der PDF?
Wo bekomme ich eine ZUGFeRD-Beispieldatei zum Testen?
Stand: September 2026. Quellen: EN 16931, ZUGFeRD-Spezifikation 2.5 (FeRD), UN/CEFACT Cross Industry Invoice, § 14 Abs. 4 UStG, BMF-Schreiben vom 15. Oktober 2024.
Die Pennio Redaktion schreibt über E-Rechnung, Rechnungsstellung und Umsatzsteuerrecht. Grundlage sind die aktuellen Gesetzestexte, die Norm EN 16931, die Spezifikationen von XRechnung und ZUGFeRD sowie die Veröffentlichungen des Bundesfinanzministeriums. Wir bauen selbst E-Rechnungs-Software und prüfen jede Aussage an den offiziellen Validatoren.
Das könnte Sie auch interessieren
ZUGFeRD: Das hybride E-Rechnungsformat einfach erklärt
Was ZUGFeRD ist, wie PDF und XML in einer Datei zusammenspielen, welche Profile und Versionen als E-Rechnung gelten, wie Sie ZUGFeRD-Rechnungen erstellen, prüfen und empfangen.
ZUGFeRD-Format: Aufbau, Versionen und Profile im Überblick
Wie das ZUGFeRD-Format aufgebaut ist, was sich von Version 1.0 bis 2.5 änderte und welche Profile heute als E-Rechnung gelten. Mit Vergleichstabelle und Empfehlung.
PDF/A-3 und ZUGFeRD: warum eine normale PDF nicht genügt
ZUGFeRD verlangt eine PDF/A-3 mit eingebettetem XML. Was PDF/A bedeutet, welche Anforderungen gelten, warum Word-PDFs durchfallen und wie Sie die Konformität prüfen.