ZUGFeRD und Factur-X

Die Formate ZUGFeRD und Factur-X für elektronische Rechnungen

Auf dieser Seite beschreiben wir das ZUGFeRD-Format für elektronische Rechnungen. Der Name ist ein Wortspiel mit »Zugpferd« und soll auf das große Potenzial hinweisen, das dem neuen Standard im Hinblick auf eine effiziente elektronische Rechnungsstellung beigemessen wird. ZUGFeRD erlaubt den Austausch von Rechnungen zwischen Ersteller (Lieferant oder Dienstleister) und Empfänger (Zahlungspflichtiger) ohne vorherige Absprachen über Formatdetails. ZUGFeRD-Rechnungen sind universell einsetzbar und nicht auf bestimmte Branchen, Industriezweige oder Unternehmensgrößen beschränkt. Private Unternehmen können genauso wie Organisationen der öffentlichen Verwaltung ihrer Rechnungsverarbeitung mit ZUGFeRD effizienter gestalten.

Der Standard wurde von einer Arbeitsgruppe aus Vertretern der öffentlichen Verwaltung, drei Bundesministerien, von Verbänden der Finanz-, Steuer- und Softwarebranche und anderen Organisationen geschaffen. Diese Arbeitsgruppe nennt sich »Forum elektronische Rechnung Deutschland« (FeRD). Die für Factur-X verantwortliche Organisation heißt FNFE-MPE (»Forum National de la Facture Electronique et des Marchés Publics Electroniques«).

ZUGFeRD ist die Abkürzung für »Zentraler User Guide des Forum elektronische Rechnung Deutschland«. Das Ziel von ZUGFeRD ist es, den Austausch elektronischer Rechnungen einschließlich strukturierter Daten im öffentlichen und privaten Sektor zu ermöglichen. Im Gegensatz zu bestehenden Standards wie EDI ist er nicht nur auf große Unternehmen ausgerichtet, sondern auch auf kleine und mittelständische Unternehmen sowie auf Freiberufler. ZUGFeRD-Rechnungen erfordern keine vorherige Absprache zwischen Sender und Empfänger und sind nicht branchenspezifisch.

ZUGFeRD 1.0 wurde als nationale Norm in Deutschland entwickelt. ZUGFeRD 2.0 und der Zwillingsstandard Factur-X zielen auf den Austausch elektronischer Rechnungen in allen EU-Ländern ab.

ZUGFeRD 1, ZUGFeRD 2 und Factur-X

Die Spezifikation für ZUGFeRD 1.0 wurde im Juni 2014 veröffentlicht. Das Infopaket ZUGFeRD 1.0 enthält Spezifikationen, XML-Schemas, XSLT-Stylesheets sowie ein Dutzend PDF-Beispielrechnungen. Die PDF-spezifischen Anforderungen des ZUGFeRD-Formats werden im Folgenden zusammengefasst.

ZUGFeRD 2.0 wurde im März 2019 veröffentlicht. Diese Version basiert auf der Europäischen Norm EN 16931 vom Juni 2017, erfüllt die Anforderungen des Standards XRechnung und ist weit gehend identisch mit mit dem französischen Standard Factur-X.

ZUGFeRD 2.1 wurde im März 2020 veröffentlicht. Es macht den Standard vollständig kompatibel mit Factur-X 1.0.05.

ZUGFeRD 1 und 2 wenden bezüglich der Einbettung in PDF/A die gleichen Prinzipien an. Auf kleinere Unterschiede zwischen den Versionen gehen wir in der Beschreibung unten ein.

ZUGFeRD-Design

Das ZUGFeRD-Rechnungsformat besteht aus einer visuellen, lesbaren Darstellung (Rendering) der Rechnung sowie einer strukturierten maschinenlesbaren XML-Darstellung. Die visuelle Darstellung wird als eine oder mehrere dem PDF/A-Standard entsprechende PDF-Seiten kodiert. Weitere Informationen zu PDF/A finden Sie hier. Die XML-Darstellung ist kein vollständig neues Format, sondern basiert auf internationalen Standards. Um beide Rechnungsdarstellungen miteinander zu verknüpfen, nutzt ZUGFeRD ein wichtiges Feature von PDF/A-3 (ISO 19005-3), das es erlaubt,  Anhänge beliebiger Typen in ein PDF/A-Dokument einzubetten. Die XML-Rechnungsdaten werden als Anhang (attachment oder associated file) gemäß PDF/A-3 in das PDF-Dokument eingebettet. ZUGFeRD-Rechnungen enthalten also zwei separate Darstellungen der Rechnung, wobei PDF/A-3 als eine der Darstellungen sowie als Container für die XML-Darstellung dient.

XML-Teil von ZUGFeRD-Rechnungen

Da der Fokus im Weiteren auf den PDF-Aspekten von ZUGFeRD liegt, soll hier nur ein kurzer Überblick über das in der Rechnung eingebettete XML gegeben werden. ZUGFeRD führt für Rechnungen kein neues XML-Format ein, sondern es basiert auf dem bestehenden Standard »Core Cross Industry Invoice« (CII), der von UN/CEFACT entwickelt wurde. CII bietet ein großes Datenmodell mit mehr als 2000 Elementen. Das Datenmodell bildet Unternehmensprozesse und -Beziehungen ab. Üblicherweise wird das CII-Datenmodell für bestimmte Anwendungsfälle beschränkt, da meist nicht alle Elemente benötigt werden.

ZUGFeRD 2.0 und Factur-X basieren auf UN/CEFACT Cross Industry Invoice Stand D16B version 100, uncoupled set of schemas (CII). Da ZUGFeRD 1.0 eine modifizierte XML-Variante nutzt, unterscheidet sich das Rechnungs-XML der beiden Versionen geringfügig. So lautet zum Beispiel das Root-Element in ZUGFeRD 1.0 CrossIndustryDocument, in ZUGFeRD 2.0/Factur-X jedoch CrossIndustryInvoice.

ZUGFeRD 1.0 und 2.x/Factur-X unterstützen mehrere Anwendungsprofile:

  • Nur ZUGFeRD 2.x: Die Profile »Minimum« und »Basic WL« wurden in ZUGFeRD 2.x zur Vereinheitlichung mit dem französischen Standard Factur-X aufgenommen. Sie enthalten nicht alle in Deutschland für eine Rechnung erforderlichen Angaben und sollten daher in Deutschland nicht für Rechnungen verwendet werden, sondern allenfalls als Buchungshilfe.
  • Das Profil »Basic« stellt strukturierte Daten für einfache Rechnungen zur Verfügung. Zusätzliche Informationen können als Freitext eingebunden werden. Es umfasst nur eine Teilmenge von EN 16931-1 und kann für einfache Rechnungen genutzt werden.
  • Das Profil »Comfort«, das in ZUGFeRD 2.x als »EN 16931« bezeichnet wird, fügt strukturierte Daten für die vollautomatisierte Rechnungsverarbeitung hinzu und bildet EN 16931-1 vollständig ab.
  • Das Profil »Extended« fügt weitere strukturierte Daten für den branchenübergreifenden Rechnungsaustausch hinzu.

Als Mindestanforderung müssen Anwendungen das Profil »Basic« unterstützen; weitere CII-Elemente können hinzugefügt werden, sofern diese nicht das Profil »Extended« beeinträchtigen. Da zusätzliche Elemente außerhalb des Anwendungsbereichs von ZUGFeRD liegen, bedürfen sie der vorherigen Absprache zwischen den am Austausch Beteiligten.

PDF-Anforderungen für ZUGFeRD-Rechnungen

Die ZUGFeRD-Formatspezifikation formuliert folgende Anforderungen:

(1) Der PDF-Teil einer ZUGFeRD-Rechnung muss konform zum PDF/A-3-Standard (ISO 19005-3) sein, wobei alle Konformitätsstufen von PDF/A-3 erlaubt sind, also PDF/A-3a, PDF/A-3b und PDF/A-3u. Gleichzeitig dient er als Container für den XML-Teil. Während nur ein einziger XML-Rechnungsanhang in ZUGFeRD erlaubt ist, können weitere Anhänge für andere Zwecke eingebettet werden. So können zum Beispiel Spreadsheets, CAD-Zeichnungen, Bilder oder andere Dateien eingebettet werden, die einen Bezug zur Rechnung haben oder für die Rechnungsprüfung relevant sein können.

Während ausschließlich PDF/A-3 eingebettete Dateianhänge erlaubt, sind die drei PDF/A-Stufen bezüglich der genutzten PDF-Elemente aufwärtskompatibel. Daraus ergeben sich folgende Möglichkeiten, PDF/A-Rechnungen durch Einbetten von XML in ZUGFeRD-Rechnungen umzuwandeln:

  • PDF/A-1a und PDF/A-2a können als Ausgangspunkt für PDF/A-3a, PDF/A-3b oder PDF/A-3u dienen;
  • PDF/A-1b und PDF/A-2b können als Ausgangspunkt für PDF/A-3b dienen;
  • PDF/A-2u kann als Ausgangspunkt für PDF/A-3b oder PDF/A-3u dienen;

(2) Der XML-Teil der Rechnung muss mit der Dokumentebene des PDF/A-Dokuments verknüpft sein (also nicht nur mit einem Teil davon, wie zum Beispiel einer Seite). In PDF/A-3 lässt sich dies mit dem Schlüssel /AF (associated files) im Dokumentkatalog ausdrücken. Der Name der Datei mit dem XML-Anhang ist fest vorgegeben; hier unterscheiden sich die Standards allerdings geringfügig:

  • ZUGFeRD 1.0: Dateiname »ZUGFeRD-invoice.xml«
  • ZUGFeRD 2.0: Dateiname »zugferd-invoice.xml«
  • ZUGFeRD 2.1 und Factur-X: Dateiname »factur-x.xml«

Die Beziehung zwischen Anhang und Dokument muss in ZUGFeRD 1.0 und 2.0 vom Typ »Alternative« sein, um zu verdeutlichen, dass die PDF- und XML-Darstellungen äquivalent sind. In PDF/A-3 wird dies mit dem Schlüssel /AFRelationship ausgedrückt.

ZUGFeRD 2.1 ändert den vorgeschriebenen Wert des Schlüssels /AFRelationship von »Alternative« auf »Source« für die Profile BASIC, EN 16931 and EXTENDED, falls der Rechnungsempfänger seinen Sitz außerhalb Deutschlands hat und das PDF-Dokument druch Transformation der XML-Daten erzeugt wurde. Beachten Sie, dass die Beispiele zu ZUGFeRD 2.1 einen falschen Schlüssel /AFRelationship enthalten (»Data« anstelle des vorgeschriebenen Werts »Alternative« oder »Source«).

(3) Die XML-Datei muss zusätzlich als regulärer PDF-Anhang deklariert werden, damit sie auch von Anwendungen verarbeitet werden kann,  die keine Unterstützung für Associated Files gemäß PDF/A-3 bieten. Dies lässt sich durch Aufnahme des Attachments in die PDF 1.7-Standarddatenstruktur /EmbeddedFiles im Dokumentkatalog erreichen.

(4) Die XMP-Dokument-Metadaten müssen vier Einträge aus dem ZUGFeRD-Schema enthalten. Diese Einträge beschreiben folgendes: den Dokumenttyp (immer INVOICE); den Dateinamen der eingebetteten XML-Darstellung, der mit dem Namen übereinstimmen muss, unter dem das XML im PDF-Dokument eingebettet ist, die Version des entsprechenden XML-Schemas sowie den Namen des benutzten Profils (BASIC, COMFORT oder EXTENDED). Der PDF/A-Standard erfordert, dass benutzerdefinierte Metadaten-Eigenschaften wie die von ZUGFeRD von einer entsprechenden Schema-Beschreibung (auch Extension Schema genannt) begleitet werden; weitere Informationen dazu finden Sie hier. Die Anforderungen an XMP-Extension-Schemabeschreibungen sind für PDF/A-1, PDF/A-2 und PDF/A-3 identisch. Vorlagen für die XMP-Metadaten-Eigenschaften für ZUGFeRD 1.0, 2.0, 2.1 und Factur-X einschließlich der erforderlichen Beschreibung des PDF/A-Extension-Schemas finden Sie am Ende dieser Seite. Die Vorlagen für die drei Standards unterscheiden sich geringfügig, da verschiedene Dateinamen für die XML-Attachments vorgeschrieben sind (siehe (2) oben) und verschiedene XML-Namespaces und Präfixe genutzt werden.

Wichtige Unterschiede zwischen ZUGFeRD 2.0 und 2.1

ZUGFeRD 2.1 behebt einerseits Unterschiede zwischen ZUGFeRD 2.0 und Factur-X sowie andererseits zwischen ZUGFeRD 2.0 und dem Profil XRechnung, das von deutschen Bundesbehörden genutzt wird. ZUGFeRD 2.1 ist technisch identisch mit Factur-X 1.0.05 und enthält insbesondere folgende Anpassungen:

  • ZUGFeRD 2.1 ändert das XML-Namespace-Präfix von »zf« auf »fx«.
  • ZUGFeRD 2.1 ändert den Namen der eingebetteten XML-Datei von »zugferd-invoice.xml« auf »factur-x.xml« (die Beispiele zu ZUGFeRD 2.1 benutzen immer noch »zugferd-invoice.xml«).
  • ZUGFeRD 2.1 ändert die interne Versionsnummer »2p0« im XMP-Namespace-URI zur Versionsnummer »1p0« von Factur-X, wobei »p« als Platzhalter für einen Dezimalpunkt genutzt wird. Während Factur-X für die XMP-Property fx:Version den Wert »1.0« vorschreibt, benutzt die Spezifikation zu ZUGFeRD 2.1 an einer Stelle (Technischer Anhang A, p.9) den Wert »1p0«, an einer anderen (p.11) dagegen »1.0«. Da ZUGFeRD 2.1 und Factur-X technisch identisch sein sollen und die Beispiele zu ZUGFeRD 2.1 ebenfalls den Wert »1.0« statt »1p0« in der XMP-Property fx:Version enthalten, betrachten wir »1p0« als Fehler in der Spezifikation.
  • Wie oben bereits beschrieben, ändert ZUGFeRD 2.1 den vorgeschriebenen Wert des Schlüssels /AFRelationship in einer bestimmten Situation (die Beispiele zu ZUGFeRD 2.1 enthalten den falschen Wert »Data«).

Die ersten drei Punkte erfordern beim Wechsel auf ZUGFeRD 2.1 Anpassungen in der zugehörigen XMP-Extension-Schemabeschreibung (erhältlich am Ende dieser Seite).

Weitere rechnungsbegründende Unterlagen

ZUGFeRD 2.0 führte die Möglichkeit ein, weitere rechnungsbegründende Unterlagen einzubetten, die zur Überprüfung der Rechnung nützlich sein können, zum Beispiel:

  • Tabellenkalkulation mit Berechnungen
  • CAD-Design
  • XML-Dokument mit technischen Angaben
  • Lieferschein
  • Arbeitsbericht
  • Auslagenbeleg

Solche Anhänge zur Untermauerung der Rechnung erfordern die Angabe eines geeigneten MIME-Typs im PDF/A-Dokument, jedoch keine zusätzlichen XMP-Metadaten.

Die Spezifikation zu ZUGFeRD 2.1 ist inkonsistent bezüglich der Frage, welche Profile rechnungsbegründende Unterlagen zulassen:

  • Der Technische Anhang der Spezifikation zu ZUGFeRD 2.1 mit der XML-Schemabeschreibung (p.74) erlaubt rechnungsbegründende Unterlagen nur für die Profile COMFORT und EXTENDED.
  • Im Widerspruch dazu impliziert die Spezifikation von ZUGFeRD 2.1 im Technischen Anhang, Anlage A, Abschnitt 2.4.2.2 (äquivalent auch in ZUGFeRD 2.0, Abschnitt 5.4.2.2), dass alle Profile rechnungsbegründende Unterlagen zulassen:

    »In den Profilen EN 16931, BASIC, BASIC WL und MINIMUM dürfen nur diese Formate [PDF, PNG, JPEG, CSV, Excel, Calc] genutzt werden. In den Profilen [sic!] EXTENDED sind sämtliche Dateiformate mit gültigen MIME Typ zulässig.«

Jede eingebettete Dokument erfordert das Element AdditionalReferencedDocument in der XML-Datei. Dieser Verweis besteht aus einem relativen Fragment-Identifier der Form »#ef=filename«, zeigt also auf ein lokales Dokument (die Syntax für Fragment-Identifier für PDF-Dokumente wird in ISO 32000-2, Annex O spezifiziert):

 

<ram:AdditionalReferencedDocument>
    <ram:IssuerAssignedID>12345</ram:IssuerAssignedID>
    <ram:URIID>#ef=Taxi-Rechnung.pdf</ram:URIID>
    <ram:TypeCode>916</ram:TypeCode>
</ram:AdditionalReferencedDocument>

 

Einige der Beispiele zu ZUGFeRD 2.1 and Factur-X 1.0.05 enthalten rechnungsbegründende Unterlagen. Da diese nicht ganz einfach zu identifizieren sind, listen wir sie hier auf:

Beispiele zu ZUGFeRD 2.1 mit rechnungsbegründenden Unterlagen (all diese Beispiele nutzen das Profil COMFORT):

  • zugferd_2p1_EN16931_Betriebskostenabrechnung.pdf
  • zugferd_2p1_EN16931_Elektron.pdf
  • zugferd_2p1_EN16931_Reisekostenabrechnung.pdf

Beispiele zu Factur-X 1.0.05 mit rechnungsbegründenden Unterlagen:

  • Facture_F20200023_*.pdf (diese Beispiele decken alle Profile ab)

Rechnungsbegründende Unterlagen sind weder eine Alternative zum PDF-Dokument noch dessen Quelle, sondern enthalten gewöhnlich zusätzliche Informationen. Aus diesem Grund erscheint für den Schlüssel /AFRelationship der Wert »Supplement« am besten geeignet (die Beispiele zu ZUGFeRD 2.1 enthalten »Data«, während die Beispiele zu Factur-X 1.0.05 den Wert »Unspecified« enthalten; beide Werte erscheinen nicht angemessen).

Validierung von ZUGFeRD- und Factur-X-Rechnungen

Einzelne Aspekte von ZUGFeRD- und Factur-X-Rechnungen können wie folgt getestet werden:

  • Die Konformität zum Standard PDF/A-3 kann mit einem der verfügbaren PDF/A-3-Validierer überprüft werden. Die Preflight-Funktion von Acrobat XI und höher bietet zum Beispiel diese Möglichkeit. Dabei wird auch das erforderliche XMP-Extension-Schemabeschreibung überprüft.
  • Die korrekte Einbettung der XML-Datei gemäß ZUGFeRD 1.0, 2.0, 2.1 oder Factur-X können Sie mit dem Beispielprogramm zugferd_retrieve_XML aus dem pCOS-Cookbook überprüfen. Dieses Programm extrahiert die XML-Darstellung der Rechnung.
  • Die extrahierte XML-Rechnung kann mit einem XML-Schemavalidierer auf formale Gültigkeit überprüft werden. Die dazu benötigten XSD/Schematron-Schemadateien sind Bestandteil der ZUGFeRD/Factur-X-Pakete. Das Infopaket zu ZUGFeRD 1.0 enthält außerdem ein Stylesheet, mit dem die XML-Rechnungsdaten als HTML visualisiert werden können (das Stylesheet erfordert einen Prozessor mit Unterstützung für XSLT 2.0). Dies ermöglicht die Darstellung der Rechnungsinhalte unabhängig von der PDF-Darstellung, was für die Überprüfung oder die Darstellung im HTML-Browser genutzt werden kann.
  • Ein Validierer für ZUGFeRD 1.0 ist unter https://www.din-zugferd-validation.org verfügbar (kostenlos, erfordert aber Registrierung).
  • Der Open-Source-Validierer ZUV (ZUGFeRD+VeraPDF) überprüft die Konformität zu PDF/A-3 mit veraPDF sowie die Gültigkeit des Rechnungs-XML gemäß ZUGFeRD 1.0, 2.0 oder 2.1 mit dem ProfileEN16931 anhand der jeweiligen Schematron-Dateien. Er ist auch online verfügbar unter https://www.zugferd-community.net/de/open_community/validation (erfordert Registrierung).

PDF-Verarbeitungschritte für ZUGFeRD und Factur-X

Unternehmen können ZUGFeRD- oder Factur-X-Rechnungen mit einem oder mehreren der folgenden PDF-Verarbeitungsschritte implementieren:

  • Komplette Erstellung einer Rechnung mit eingebettetem XML-Rechnungsteil
  • Hinzufügen des XML-Rechnungsteils zu einem bestehenden PDF/A-Dokument zur Erstellung einer PDF/A-3-Rechnung
  • Extrahieren des XML-Rechnungsteils aus einer bestehenden PDF/A-3-Rechnung

Diese PDF-Verarbeitungsschritte lassen sich mit PDFlib-Produkten implementieren, wie im Folgenden näher ausgeführt wird.

Implementierung elektronischer ZUGFeRD-Rechnungen mit PDFlib

PDFlib bietet vollständige Unterstützung für die Standards PDF/A-1/2/3  und kann für die Implementierung des ZUGFeRD-Formats verwendet werden. Alle drei oben beschriebenen PDF-Verarbeitungsschritte werden unterstützt. Die oben beschriebenen ZUGFeRD-Anforderungen können mit geeigneten PDFlib-Optionen erfüllt werden.

Die Konformität zum PDF/A-3-Standard lässt sich mit der Option pdfa von begin_document() einstellen. Die erforderlichen XMP-Metadaten können mit der Option metadata übergeben werden:

 

if (p.begin_document(outfile,
    "pdfa=PDF/A-3b metadata={filename={" + xmpfile + "}}") == -1)

 

Da der XML-Rechnungsteil dynamisch erzeugt wird, empfehlen wir das PDFlib Virtual Filesystem (PVF), um eine Datei im Arbeitsspeicher zu erzeugen, die den XML-Stream für die Rechnung enthält. Diese PVF-Datei muss als Asset geladen werden, das gemäß den Anforderungen von ZUGFeRD als Dateianhang eingebettet wird. Mit der Option documentattachment wird sichergestellt, dass sie auch bei PDF-Viewern erscheint, die associated files gemäß PDF/A-3 nicht unterstützen (mit anderen Worten: die XML-Datei lässt sich auch mit Acrobat extrahieren):

 

// Place XML stream in a virtual PVF file
String pvf_name = "/pvf/factur-x.xml";
byte[] xml_bytes = xml_string.getBytes("UTF-8");
p.create_pvf(pvf_name, xml_bytes, "");

// Create file attachment (asset) from PVF file
int xml_asset = p.load_asset("Attachment", pvf_name,
     "mimetype=text/xml description={ZUGFeRD invoice in XML format} "
   + "relationship=Alternative documentattachment=true");

// Associate file attachment with the document
p.end_document("associatedfiles={" + xml_asset + "}");

ZUGFeRD und Factur-X im PDFlib Cookbook

Das PDFlib-Cookbook und das pCOS-Cookbook enthalten vollständigen Beispielcode für die oben dargestellten PDF-Verarbeitungsschritte:

ZUGFeRD-Beispielrechnungen

Die ZUGFeRD- und Factur-X-Infopakete enthalten PDF/A-3-Beispielrechnungen für diverse Anwendungssituationen. Wir bieten ebenfalls Beispielrechnungen zum Download an. Diese Rechnungen wurden mit PDFlib und dem im PDFlib Cookbook gezeigten Code erstellt:

ZUGFeRD 1.0 Beispielrechnung: Basic-Profil

ZUGFeRD 2.0 Beispielrechnung: Basic-Profil

Factur-X Beispielrechnung: Profil EN 16931 (COMFORT) mit eingebettetem Lieferschein als rechnungsbegründende Unterlage

Links