PDF Rechnung mit oder ohne ZUGFeRD empfangen?
Ab 1. Januar 2025 könnte jeder empfange PDF Rechnung eine e-Rechnung im ZUGFeRD Format sein. Es steht ja nicht immer dabei und bei einer ZUGFeRD Rechnung sollte der XML Anteil ausgewertet oder wenigstens kontrolliert werden.
Jede Rechnung im Eingang sollte geprüft werden, u.a.
- Sind alle Angaben nach §14 UStG einhalten?
- Sind die Mengen korrekt?
- Sind die Beträge und folglich die Summen korrekt?
- Ist die Umsatzsteuer korrekt ausgewiesen?
- passt die Rechnung zum Angebot bzw. Bestellung?
Dann die Frage, ob die Rechnung nur ein PDF ist oder doch einen XML Anhang enthält. Wenn ja, sollte das XML angeschaut werden. Bei inhaltlichen Abweichungen zwischen dem PDF und dem XML, hat das XML Vorrang!
Wir kontrollieren folglich das XML:
- Kann das XML ausgelesen werden?
- Stimmt die Checksumme falls vorhanden?
- Hat das XML eine korrekte Struktur und gibt keinen Fehler beim Parsen?
- Validiert das XML gegen das Schema?
- Passen die Werte im XML zum Text im PDF?
Vor allem Summe, Datum, Rechnungsnummer und Kontoverbindung! - Validiert das XML gegen die Business Regeln?
Für viele Punkte können wir mit dem MBS FileMaker Plugin und den DynaPDF Funktionen helfen. Aber die Frage, ob ein PDF eine ZUGFeRD Rechnung enthält, können wir ohne Plugin beantworten.
Jede ZUGFeRD Rechnung muss XMP Metadaten haben, die unkomprimiert im PDF enthalten sind. Darin steht der Dateiname vom Anhang, den wir somit auslesen können: Bei einer aktuellen ZUGFeRD 2.3 Rechnung steht "factur-x.xml" im Text, bei ZUGFeRD 2.0 war es "zugferd-invoice.xml" in Kleinbuchstaben un bei ZUGFeRD 1.0 war es "ZUGFeRD-invoice.xml".
Die Rechnung im Container kann man mit HexEncode auslesen. In dem String suchen wir nach den Dateinamen oben und schauen, ob die Position größer als Null ist. Hier einmal ein
Variable setzen [ $PDF ; Wert: HexEncode ( Kontakte::PDF ) ]
Variable setzen [ $pos1 ; Wert: Position ( $PDF ; HexEncode ( "factur-x.xml" ) ; 1 ; 1 ) ]
Variable setzen [ $pos2 ; Wert: Position ( $PDF ; HexEncode ( "zugferd-invoice.xml" ) ; 1 ; 1 ) ]
Variable setzen [ $pos3 ; Wert: Position ( $PDF ; HexEncode ( "ZUGFeRD-invoice.xml" ) ; 1 ; 1 ) ]
Variable setzen [ $IstZUGFeRD ; Wert: $pos1 > 0 ODER $pos2 > 0 ODER $pos3 > 0 ]
Wenn [ $IstZUGFeRD ]
Eigenes Dialogfeld anzeigen [ "ZUGFeRD e-Rechnung" ; "Bitte die e-Rechnung kontrollieren." ]
Ende (wenn)
Solange Sie keine eigene ZUGFeRD Verabreitung haben, sollten Sie wenigstens einen Viewer wie den Quba Viewer nehmen um das XML anzuschauen. Oder nehmen Sie unser Beispiel und bauen Sie es mal ein.
In unserem Blog finden sie weitere Artikel zum Thema: