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 und ZUGFeRD 2

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 identisch mit mit dem französischen Standard Factur-X.

ZUGFeRD 1.0 und 2.0 wenden bezüglich der Einbettung in PDF/A die gleichen Prinzipien an. Auf kleinere Unterschiede 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.0/Factur-X unterstützen mehrere Anwendungsprofile:

  • Nur ZUGFeRD 2.0: Die Profile »Minimum« und »Basic WL« wurden in ZUGFeRD 2.0 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.0 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 in Abschnitt 7 »Einbettung in eine PDF/A-3-Datei« die folgenden 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"
  • Factur-X: Dateiname "factur-x.xml"

Die Beziehung zwischen Anhang und Dokument muss vom Typ »Alternative« sein,  um zu verdeutlichen, dass die PDF- und XML-Darstellungen äquivalent sind. In PDF/A-3 lässt sich dies mit dem Schlüssel /AFRelationship ausdrücken.

(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 (etwa Acrobat XI). Dies lässt sich durch Aufnahme des Anhangs 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. Beachten Sie, dass die Anforderungen an XMP-Extension-Schemas für PDF/A-1, PDF/A-2 und PDF/A-3 identisch sind. Vorlagen für die XMP-Metadaten-Eigenschaften für ZUGFeRD 1.0, ZUGFeRD 2.0 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.

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 Schema überprüft.
  • Die korrekte Einbettung der XML-Datei gemäß ZUGFeRD 1.0, ZUGFeRD 2.0 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 mit PDF/A-3 mit veraPDF sowie die Gültigkeit des Rechnungs-XML gemäß ZUGFeRD 1.0 und ZUGFeRD 2.0 mit dem ProfileEN16931 anhand der jeweiligen Schematron-Dateien. Er ist online verfügbar unter https://www.zugferd-community.net/de/open_community/validation (erfordert Registrierung).
    Beachten Sie, dass wir auf mehrere Konflikte zwischen der Spezifikation von ZUGFeRD 2.0, den Beispielrechnungen im Info-Paket und dem Online-Validierer gestoßen sind. Diese Probleme wurden an das FeRD gemeldet.

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 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/ZUGFeRD-invoice.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-Topics im PDFlib Cookbook

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

ZUGFeRD-Beispielrechnungen

Das ZUGFeRD-Infopaket von FeRD enthält mehrere PDF/A-3-Beispielrechnungen. Wir bieten ebenfalls ZUGFeRD-Rechnung zum Download an. Diese Rechnungen wurden mit PDFlib und dem im PDFlib Cookbook gezeigten Code erstellt:

ZUGFeRD 1.0 Beispielrechnung (benutzt das Profil »Basic«)

ZUGFeRD 2.0 Beispielrechnung (benutzt das Profil »Basic«)

Links