Mitteilungen, Programmierung

ZUGFeRD 2.1

ZUGFeRD-LogoMit der nächsten Release unterstützt CONZEPT 16 die aktuellste Version – nämlich 2.1 – der ZUGFeRD-Spezifikation. ZUGFeRD (Zentraler User Guide des Forums elektronische Rechnung Deutschland) definiert Standardformate für elektronische Rechnungen.

Eine ZUGFeRD-konforme, elektronische Rechnung entspricht einer Rechnung im PDF/A-3-Format mit XML-Anhang und XMP-Metadaten. Das eigentliche PDF beschreibt dabei eine visuelle, also von Menschen verwertbare Darstellung der Rechnung. Der XML-Anhang hingegen beschreibt eine standardisierte, also von Maschinen verwertbare Darstellung der Rechnung. Dabei können verschiedene Profile gewählt werden, die den Detailgrad der enthaltenen Informationen definieren.

Bereits seit der Version 5.8.06 bietet CONZEPT 16 die Möglichkeit elektronische Rechnungen nach der ZUGFeRD-Spezifikation zu erstellen, wie im Artikel ZUGFeRD mit CONZEPT 16 erläutert.

Während in Deutschland das FeRD (Forum elektronische Rechnung Deutschland) die Spezifikation ZUGFeRD für elektronische Rechnungen für Deutschland pflegt, übernimmt in Frankreich das FNFE-MPE (Forum National de la Facture Electronique et des Marchés Publics Electroniques) die Pflege der Spezifikation Factur-X für elektronische Rechnungen in Frankreich.

Mit der Veröffentlichung von ZUGFeRD 2.1 und Factur-X 1.0 am 24. März 2020 wurde ZUGFeRD an Factur-X angeglichen, so dass ZUGFeRD 2.1 technisch identisch mit Factur-X 1.0 ist.

Damit stehen folgende Versionen von ZUGFeRD zur Verfügung:

Aus technischer Sicht unterscheiden sich die Versionen in folgenden Merkmalen:

  • Name des XML-Anhang
    Der Dateiname des XML-Anhangs variiert je nach Version:
    • ZUGFeRD 1.0: ZUGFeRD-invoice.xml
    • ZUGFeRD 2.0: zugferd-invoice.xml
    • ZUGFeRD 2.1: factur-x.xml
  • Struktur des XML-Anhang
    Einige Elemente der XML-Struktur haben verschiedene Namen oder Positionen, sind hinzugekommen bzw. weggefallen oder nur noch in einem detailierteren Profil erlaubt.
  • XMP-Metadaten
    Die Metadaten definieren unter anderem die Version und das Profil der gewählten Spezifikation.

Um die Korrektheit der XML-Struktur sicherzustellen, empfiehlt sich ein Blick in die jeweilige Spezifikation. Dort werden die einzelnen Elemente und eventuelle Abhängigkeiten im Detail beschrieben. Außerdem sind in den Info-Paketen XML-Schemata enthalten, mit denen die XML-Daten validiert werden können. Dabei ist allerdings zu beachten, dass dabei nicht jeder Fehler erkannt werden kann! Um dennoch die Konformität in Gänze zu überprüfen, stehen verschiedene Werkzeuge zur Verfügung, die nicht nur den XML-Anhang, sondern das komplette PDF-Dokument auf Konformität mit der Spezifikation überprüfen:

  • ZUGFeRD Validation.Portal und ZF/FX Validation
    Diese Online-Portal stellen jeweils einen Dienst bereit, mit dem – nach einer Registrierung – PDF-Dokumente validiert werden können. Das erstgenannte beherrscht allerdings nur die Spezifikation der Version 1.0.
  • ZUGFeRD validator: Dieses Java-Programm kann ohne Registrierung verwendet werden um PDF-Dokumente aller ZUGFeRD-Versionen auf einem beliebigen Java-fähigen Computer zu validieren.

In CONZEPT 16 ist beim Einfügen des XML-Anhangs zum PDF-Dokument auf den zur ZUGFeRD-Version gehörigen Namen zu achten:

// PDF nach ZUGFeRD 1.0
tPDF->PdfAttachFile('ZUGFeRD-invoice.xml', _PdfAttachAssociateZUGFeRD);
// PDF nach ZUGFeRD 2.0
tPDF->PdfAttachFile('zugferd-invoice.xml', _PdfAttachAssociateZUGFeRD);
// PDF nach ZUGFeRD 2.1
tPDF->PdfAttachFile('factur-x.xml', _PdfAttachAssociateZUGFeRD);

Für die Einbettung der zur gewählten Spezifikation passenden XMP-Metadaten sorgt CONZEPT 16 automatisch beim Speichern des PDF-Dokuments. Mit der kommenden CONZEPT 16-Version wird es dabei möglich sein, neben dem Profil auch die Version der Spezifikation zu bestimmen:

// PDF nach ZUGFeRD 1.0 mit Profil Basic erzeugen
tPDF->PdfClose('Rechnung.pdf', _PdfModePdfZUGFeRD10 | _PdfModePdfZUGFeRDBasic);
// PDF nach ZUGFeRD 2.0 mit Profil Comfort erzeugen
tPDF->PdfClose('Rechnung.pdf', _PdfModePdfZUGFeRD20 | _PdfModePdfZUGFeRDComfort);
// PDF nach ZUGFeRD 2.1 mit Profil Extended erzeugen
tPDF->PdfClose('Rechnung.pdf', _PdfModePdfZUGFeRD21 | _PdfModePdfZUGFeRDExtended);

In der CodeLibrary befindet sich bereits jetzt ein Beispiel namens ZUGFeRD_Basic, das wir zeitgleich mit der Freigabe auf ZUGFeRD 2.1 aktualisieren werden.

Kommen bei Ihnen im Unternehmen bereits elektronische Rechnungen zum Einsatz? Setzen Sie auf ZUGFeRD oder eine andere Lösung? Lassen Sie uns wissen, welche Erfahrungen Sie gemacht haben.

Bei Interesse stellen wir Ihnen gerne eine Vorabversion bereit, mit der Sie die Erweiterungen testen können. Kontaktieren Sie hierzu einfach unseren Support.

Keine Kommentare

Kommentar abgeben