ZUGFeRD erstellen: Was ein gültiges ZUGFeRD-PDF ausmacht
Eine XML an ein PDF hängen kann jeder. Ein gültiges ZUGFeRD daraus zu machen, ist eine andere Sache — und man sieht der Datei nicht an, welche von beiden man vor sich hat.
Ein PDF mit Anhang ist noch kein ZUGFeRD
Das ist der Punkt, an dem selbstgebaute Lösungen scheitern. Eine XML-Datei an ein PDF anzuhängen kann jedes bessere PDF-Werkzeug. Ein gültiges ZUGFeRD zu erzeugen ist etwas anderes.
Die fünf Bedingungen
- PDF/A-3. Nicht irgendein PDF, sondern das Archivformat mit eingebetteten Schriften und definiertem Farbraum. PDF/A-3 ist die einzige Variante, die Anhänge erlaubt.
- Die XML eingebettet, nicht danebengelegt. Dateiname und Struktur sind vorgegeben.
- Die richtige Beziehungsangabe. Im PDF steht, in welchem Verhältnis der Anhang zum Dokument steht. Für ZUGFeRD muss dort
Alternativestehen — das sagt: derselbe Inhalt, andere Form. - XMP-Metadaten mit Profilnamen und Version. Daran erkennt das Empfängerprogramm, was es vor sich hat, ohne die XML erst zu öffnen.
- Ein Profil ab EN 16931. Darunter fehlen Pflichtangaben, und die Datei zählt gesetzlich nicht als E-Rechnung.
Die Profile, kurz erklärt
| Profil | Enthält | Gilt als E-Rechnung |
|---|---|---|
| MINIMUM | Nur Kopfdaten und Summen, keine Positionen | Nein |
| BASIC WL | Wie MINIMUM plus Steueraufschlüsselung | Nein |
| BASIC | Positionen dabei, aber eingeschränkt | Nein |
| EN 16931 | Vollständig nach europäischer Norm | Ja |
| EXTENDED | Zusätzliche Felder für komplexe Fälle | Ja |
| XRECHNUNG | EN 16931 plus deutsche Zusatzregeln | Ja, auch für Behörden |
Wie du prüfst, ob deins gültig ist
Nicht mit dem Auge. Ein fehlerhaftes ZUGFeRD sieht aus wie ein richtiges — der Unterschied steckt in den Metadaten. Öffne deine Datei mit einem Betrachter, der die eingebettete XML tatsächlich ausliest. Zeigt er die Rechnung mit allen Positionen an, ist die Einbettung in Ordnung. Zeigt er nichts, ist es eine PDF mit Anhang.
Für die formale Prüfung gibt es freie Werkzeuge wie den Mustang-Validator, der Profil, Metadaten und XML in einem Durchgang testet.