Factur-X: die elektronische Rechnung
Seit dem 1. September 2026 muss jedes umsatzsteuerpflichtige Unternehmen in Frankreich eine elektronische Rechnung empfangen können, und die großen und mittleren müssen ihre in dieser Form versenden. Kleinere Unternehmen folgen am 1. September 2027. Eine Rechnung, die nur eine gut gemachte Seite ist, zählt nicht mehr als Rechnung, und das Nichtausstellen in elektronischer Form wird mit 50 € pro Rechnung geahndet, bis zu 15 000 € im Jahr.
Eine elektronische Rechnung ist kein per E-Mail gesendetes PDF. Sie ist die Rechnung, als Einträge geschrieben, die eine Maschine liest, in einer der drei Formen, die die französische Reform akzeptiert: Zwei davon sind XML-Dateien ganz ohne Seite, und die dritte ist Factur-X, ein PDF, das dieses XML in sich trägt. Factur-X ist die einzige der drei, die ein Mensch noch öffnen und lesen kann, und die in Frankreich am meisten genutzte.
Diese Datei ist eine einzige. Ein Mensch öffnet sie und sieht die Seite: die Leistung, die Steuer zu zwanzig Prozent, fünftausendeinhundert Euro zu zahlen. Eine Buchhaltungssoftware öffnet dieselbe Datei, findet die darin angehängte Rechnung und liest dieselben Beträge, ohne dass jemand sie abtippt. Beide können sich nicht widersprechen, denn es gibt nur ein Dokument — und was es trägt, steht weiter unten auf dieser Seite gedruckt, aus genau der hier angebotenen Datei wieder herausgeholt.
Was hineinkommt, wählen Sie. Diese Bibliothek schreibt jede der fünf Detailstufen, die die Norm definiert: Minimum, die wenigen Einträge, die ein Dokument überhaupt zum Buchen braucht; Basic WL, der Kopf einer Rechnung ohne Positionen; Basic, die Positionen dazu; EN 16931, alles, was die europäische Norm verlangt; und Extended, wiederum alles, einschließlich dessen, was nur manche Branchen verwenden. Sie schreibt die Datei als PDF/A-3, die Form, in der eine Rechnung jahrelang abgelegt bleibt, hängt Ihr XML unter dem von Ihnen angegebenen Namen an und gibt im Dokument selbst an, dass der Anhang die Rechnung ist und keine mitreisende Datei. Dieselbe Rechnung wird aus Rust geschrieben, aus Python oder als die Beschreibung, die ein Programm von Ihnen an unsere Adresse sendet.
Und was hineinkommt, muss zu dem passen, was das Dokument darüber sagt. Eine Datei, die eine Rechnung nach EN 16931 erklärt und eine Minimalrechnung enthält, schreiben wir nicht: Die Rechnung wird zurückgelesen, bevor das Dokument hinausgeht, und das Dokument wird abgelehnt, statt sich widersprechend versendet zu werden. Ebenso bei einer Rechnung, die unter einem Namen angehängt ist, unter dem das Dokument keine Datei trägt, und bei einer Datei, die gar keine Rechnung ist. Was die Rechnung inhaltlich sagt, ist Ihre Sache und wird hier nicht beurteilt — aber die beiden Hälften der Datei können nicht mehr Verschiedenes sagen.
Was dieses Beispiel zeigt
- Eine Seite: die Leistung, die Steuer zu zwanzig Prozent und fünftausendeinhundert Euro zu zahlen — und dieselbe Rechnung in der Datei, als das XML geschrieben, das Buchhaltungssoftware liest.
- Das Dokument sagt, was es trägt: eine Rechnung, Factur-X Version 1.0, Detailstufe Minimum, angehängt unter factur-x.xml und als eigene Daten des Dokuments getragen — und jede der fünf Detailstufen, von Minimum bis Extended, auf dieselbe Weise geschrieben.
- veraPDF übergeben, einem kostenlosen Programm, das am Schreiben nicht beteiligt war, als Datei, die sich zur Langzeitaufbewahrung eignet — und die Rechnung darin wieder herausgeholt und mit dem verglichen, was hineinging.
Der Quellcode, vollständig
Nichts ist weggelassen und nichts vereinfacht: Das ist das Programm genau so, wie es läuft, für den Entwickler, der diese Bibliothek nutzt.
Die dritte ist die Beschreibung selbst: eine schlichte Liste dessen, was die Seite sagen muss, und das wird dem Dienst gesendet.
Den Rust-Quellcode lesen
Den Python-Quellcode lesen
Den JSON-Quellcode lesen
Das Dokument selbst
Das Dokument auf Englisch öffnen
Das Dokument auf Französisch öffnen
Das Dokument auf Deutsch öffnen
Das Dokument auf Spanisch öffnen
Das Dokument auf Italienisch öffnen
Das Dokument auf Portugiesisch öffnen