© Spirit Boom Cat/Shutterstock.com
Behördenrechnungen aus Papier werden durch XML ersetzt - zum Glück?

Zum Glück gezwungen?


Ab Ende November akzeptieren deutsche Bundesbehörden keine Papierrechnungen mehr, die XML-Datei wird für Rechnungen an Behörden Pflicht. Aber Geschichte hin und Rechtliches her, was steckt technisch dahinter, wie lässt es sich mit PHP umsetzen und ist das auch für Rechnungen zwischen Unternehmen anwendbar? Das soll dieser Artikel klären.

XML-Rechnungen an europäische Behörden (Business to Government, B2G) lassen sich gemäß den CEN-Vorgaben in EN16931-2 [1] als UN/CEFACT Cross-Industry-Invoice (CII) oder in Universal Business Language (UBL) ausdrücken (Kasten: „XRechnung“). Beide sind auch für Business-to-Business-(B2B-)Rechnungen geeignet, die CII ist aber auch die Basis für ZUGFeRD, das auch für Rechnungen an private Endkunden (Business to Consumer, B2C) eingesetzt werden kann. Einen Überblick über die Einsatzgebiete der einzelnen Formate finden sich zur besseren Übersicht in Tabelle 1.

XRechnung

Die XRechnung ist die Anforderungsspezifikation (eine sogenannte CIUS) der deutschen Behörden an strukturierte elektronische Rechnungen in UBL oder UN/CEFACT. XRechnung Version 2 ist ab dem 01.01.2021 verpflichtend, bis dahin gilt Version 1.2.2. Bestimmte Elemente, die in EN16931 optional sind, wurden dabei als verpflichtend erklärt, beispielsweise kann eine Rechnung an Firma ABC in Frankreich gerichtet sein – in Deutschland wäre eine solche Rechnung ohne Postanschrift nach §19 UStG nicht vorsteuerabzugsfähig. Die Postanschrift ist daher Pflicht, daneben auf Behördenwunsch auch ein Ansprechpartner beim Absender und die Leitweg-ID im Element BuyerReference.

Leitweg-ID

Die Leitweg-ID ist eine durch die Verwaltung vergebene Empfänger-ID für Behörden und deren Abteilungen. Bundesbehörden (und einige Länder) haben einen zentralen elektronischen Rechnungseingang. Lädt man dort eine XRechnung hoch, kann sie durch die Leitweg-ID automatisch dem richtigen Empfänger zugeordnet werden.

Skonto

Da Skonto an Behörden wohl nur in Deutschland üblich ist, konnte sich schon EN16931 nicht dazu durchringen, die entsprechenden Felder von UBL bzw. UN/CEFACT in EN16931 einzublenden, die XRechnung definiert aber auf S. 36f in [10] ein Format, wie man Skonto maschinenlesbar in ein Freitextfeld codieren kann.

B2G

B2B

B2C

Papier

N**

J*

J

PDF

N**

J*

J

ZUGFeRD-PDF

J

J

J

OpenTrans

N

J

N

Financial Invoice

N

J

N

UN/CEFACT CII

J

J

N

UBL

J

J

N

EDIFACT

J

***

N

Tabelle 1: Formate und deren Einsatzgebiete; * = nicht maschinenlesbar **=bald nur noch an einige Länderbehörden *** kein XML-Format

XML-Beispieldateien gibt es beispielsweise unter den entsprechenden GitHub-Links [2], [3] und in einem XML-Editor (Kasten: „XML“).

XML

Namespaces

XML Namespaces sind die Möglichkeit, mehrere XML-Dokumente ineinander zu verarbeiten. Dafür werden sowohl der Namespace als auch ein grundsätzlich beliebiges Präfix definiert. Letzteres erhält einen Doppelpunkt vor dem Element, etwa <xsl:value-of></xsl:value-of>. Nur der Standard-Namespace bedarf keines Präfix. Der Vorteil dieser kontrollierten Dokumentdurchmischung besteht darin, dass weiterhin alle Namespaces anhand ihrer Schemadateien geprüft und alle Features aller Namespaces genutzt werden können.

XPath

XPath könnte man auch als die regulären Ausdrücke von XML bezeichnen. Es ist eine Methode innerhalb eines XML-Dokuments, mit der Elemente oder Attribute absolut oder relativ adressiert, gesucht oder aggregiert werden können – also beispielsweise eine Summe bilden. XPath-Ausdrücke werden beispielsweise in XSLT und Schematron verwendet. Der „kleine Bruder“ XPointer kann nicht aggregieren und der „große Bruder“ XQuery gilt vielmehr als eine Art SQL-ähnliche Abfragesprache für XML. Er unterstützt nicht nur die Abfrage ganzer Gruppen, sondern beispielsweise auch Schleifen.

Mit passenden Schemadateien [4], lässt sich eine Rechnung auch auf eigene Bedürfnisse anpassen. Weiterhin können Sie die Rechenregeln [5] oder die Liste möglicher Attributwerte [6] (= Codelisten) wie beispielsweise Mengeneinheiten einsehen oder eine Art Referenz beziehen, welche Elemente mit welchen Attributen in welcher Anzahl benutzt werden können. Diese findet sich beispielsweise im technischen Anhang von ZUGFeRD, der Teil des ZUGFeRD-Infopakets [7] ist, das neben Beispielen und Schemadateien auch die Codelisten enthält. Ebenfalls vorhanden ist eine Art offizielle Referenz für Behördenrechnungen: In EN16931-3-3 ist die Zuordnung zu den UN/CEFACT-Elementen aufgeführt, im Gegensatz zu den EN16931-1 bis -2 sind EN16931-3 bis -7 leider nicht kostenlos erhältlich. Mögliche Anlaufstellen für Communitysupport sind im Kasten „Hilfe zur Selbsthilfe“ zu finden.

Hilfe zur Selbsthilfe

Communitysupport gibt es beispielsweise im Forum der ZUGFeRD Community [12] oder auf Englisch in einer vom Autor ins Leben gerufenen Google Group [13]. Issues zu @GPs Factur-X-Bibliothek beziehungsweise Mustang können wie üblich über GitHub [14] beziehungsweise [15] eingestellt werden, generell weiterführende Informationen zum Thema finden sich unter [16], [17], [18] sowie auf der vom Autor betreuten Seite [19].

Wenn Sie sicherstellen möchten, dass Sie nichts falsch gemacht haben, können Sie Ihre angepassten Dateien probeweise visualisieren, beispielsweise mit den XSL-Transformation-(XSLT-)Stylesheets von Kosit [8] oder Version 2 alpha von Mustang [9], die auch auf diesen Stylesheets basiert. So wird mit java -jar mustang-cli-2.0.0.jar –action=visualize --source=xrechnung.xml aus xrechnung.xml eine HTML-Datei factur-x.html erzeugt. Auch kann die Syntax der Dateien online oder offline automatisch validiert werden (Kasten: „Validierer“).

Validierer

Bei ref.xrechnung.bund.de handelt es sich um die Testversion der „Zentralen Rechnungseingangsplattform des Bundes“ ZRE, die Produktivversion zum Upload von XRechnungen an Bundesbehö...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang