ZUGFeRD-Rechnungen

Das ZUGFeRD-Format für elektronische Rechnungen

Auf dieser Seite beschreiben wir das ZUGFeRD-Format für elektronische Rechnungen in Deutschland. 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).

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.

Das ZUGFeRD-Format soll als nationale Norm (DIN) formuliert werden und anschließend als New Work Item (NWI) für die Erstellung einer europäischen Norm bei CEN eingereicht werden.

Grundlage

Nach über einem Jahr Vorlauf mit »Release Candidates« wurde im Juni 2014 die Spezifikation für ZUGFeRD 1.0 veröffentlicht. Das ZUGFeRD-Infopaket enthält Spezifikationen, XML-Schemas, XSLT-Stylesheets sowie ein Dutzend PDF-Beispielrechnungen. Die PDF-spezifischen Anforderungen des ZUGFeRD-Formats werden im Folgenden zusammengefasst.

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 unterstützt drei Profile,  die aus unterschiedlichen CII-Untergruppen bestehen, die nicht branchenspezifisch sind:

  • Das »Basic«-Profil stellt strukturierte Daten für einfache Rechnungen zur Verfügung. Zusätzliche Informationen können als Freitext eingebunden werden.
  • Das »Comfort«-Profil fügt strukturierte Daten für die vollautomatisierte Rechnungsverarbeitung hinzu.
  • Das »Extended«-Profil fügt weitere strukturierte Daten für den branchenübergreifenden Rechnungsaustausch hinzu.

Als Mindestanforderung müssen ZUGFeRD-Anwendungen das »Basic«-Profil unterstützen; weitere CII-Elemente können hinzugefügt werden, sofern diese nicht das »Extended«-Profil 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. Für den XML-Anhang muss zwingend der Dateiname ZUGFeRD-invoice.xml verwendet werden. 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 (immer ZUGFeRD-invoice.xml); die Version des entsprechenden XML-Schemas (derzeit 1.0); und den Namen des benutzten ZUGFeRD-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. Eine Vorlage für die XMP-Metadaten-Eigenschaften für ZUGFeRD einschließlich der erforderlichen Beschreibung des PDF/A-Extension-Schemas finden Sie hier.

Validierung von ZUGFeRD-Rechnungen

Einzelne Aspekte von ZUGFeRD-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 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-Schemadateien sind Bestandteil des ZUGFeRD-Infopakets. Das ZUGFeRD-Infopaket 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.
  • Spezielle ZUGFeRD-Validierer sind ebenfalls verfügbar, zum Beispiel https://www.din-zugferd-validation.org.

PDF-Verarbeitungschritte für ZUGFeRD

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

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

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

Implementierung von ZUGFeRD mit PDFlib 9

PDFlib 9 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 eine ZUGFeRD-Rechnung zu Demonstrationszwecken an. Diese Rechnung wurde mit PDFlib 9 und dem im PDFlib Cookbook gezeigten Code erstellt.  

Links

ZUGFeRD-Infopaket einschließlich Formatspezifikation

Die folgende XMP-Datei enthält die erforderliche ZUGFeRD-Extension-Schemabeschreibung für PDF/A. Es kann zur Erstellung von ZUGFeRD-Rechnungen mit PDFlib oder anderer Software benutzt werden:
XMP-Metadaten für ZUGFeRD mit PDF/A-3-Extension-Schema

TechNote 0009 beschreibt den Aufbau von XMP-Extension-Schemas, die für die ZUGFeRD-Metadaten benötigt werden

ZUGFeRD-Beispiele im PDFlib Cookbook und pCOS Cookbook:
http://www.pdflib.com/pdflib-cookbook/pdfa/
http://www.pdflib.com/pcos-cookbook/document-interchange/