Anleitung
Rechnung mit ZUGFeRD
Erzeugen Sie eine deutsche Rechnung als PDF/A-3b, die die Rechnung auch als EN-16931-Daten trägt. Die Software des Empfängers bucht sie ohne Abtippen.
Auf dieser Seite
ZUGFeRD und Factur-X sind ein Format mit zwei Namen. Die Datei ist ein PDF
nach PDF/A-3b (der PDF-Norm für Langzeitarchive, die angehängte Dateien
erlaubt). Ein Mensch liest die Seite. Im PDF steckt die Datei factur-x.xml.
Sie enthält dieselbe Rechnung als Daten nach der Norm EN 16931. Die Software
des Empfängers liest diese Datei.
Seit dem 1. Januar 2025 muss jedes deutsche Unternehmen solche Rechnungen empfangen können. Ein Unternehmen mit mehr als 800.000 € Umsatz im Vorjahr muss ab dem 1. Januar 2027 eine solche Rechnung senden. Alle anderen müssen es ab dem 1. Januar 2028.
Mit der Vorlage beginnen
Die Vorlage rechnung-zugferd ist eine vollständige Rechnung auf A4 für den Fensterumschlag, nach DIN 5008 Form B. Ihr Ordner enthält fünf Dateien:
| Datei | Was es ist |
|---|---|
rechnung-zugferd.html |
Die Seite. Sie bindet ../din5008/din5008.css ein, der Ordner din5008/ muss also daneben liegen. |
rechnung-zugferd.css |
Die Einstellungen für Form B. |
rechnung-zugferd.schema.json |
Die Felder und was jedes aufnimmt. |
sample.json |
Eine Rechnung mit 3 Positionen zu 19 % und 7 % Umsatzsteuer. Beginnen Sie damit. |
rechnung-zugferd.pdf |
Das Beispiel, mit --einvoice gesetzt. |
Die Positionstabelle trägt data-brevier-uebertrag. Auf einer zweiten Seite
steht darum am Umbruch der Übertrag. Siehe Tabellen.
Daten eintragen
Legen Sie Ihre Rechnung in einer JSON-Datei ab, aufgebaut wie sample.json.
| Feld | Bedeutung |
|---|---|
number, issueDate, deliveryDate, currency |
Rechnungsnummer, Rechnungsdatum, Leistungsdatum (JJJJ-MM-TT) und ein Währungscode wie EUR. Alle vier sind Pflicht. |
dueDate oder paymentTerms |
Das Fälligkeitsdatum oder ein Satz zur Zahlung. Eines von beiden ist Pflicht. |
seller, buyer |
name und address. In der Adresse ist nur country Pflicht, als Code wie DE. Der Verkäufer gibt außerdem vatId an. |
lines |
Mindestens eine. Jede hat position, name, quantity, unitCode, unitPrice, netAmount und vatRate. |
vat |
Ein Eintrag je Steuersatz: rate, taxableAmount, taxAmount. |
totals |
lineNet, taxBasis, tax, gross, due. |
unitCode ist ein UN/ECE-Code: HUR sind Stunden, DAY Tage, C62 Stück.
Das XML bekommt immer den Code. Die Seite druckt unitLabel (zum Beispiel
Std.) und nimmt sonst den Code.
PDF schreiben
brevier pdf rechnung-zugferd.html --data meine-rechnung.json --einvoice -o rechnung.pdfOhne --einvoice erhalten Sie dieselbe Seite als einfaches PDF/A-3b. Alle
Optionen stehen in der CLI-Referenz.
Was Brevier prüft
Bevor Brevier die Datei schreibt, prüft es Ihre Daten gegen das Schema. Mit
--einvoice prüft es außerdem, ob die Beträge stimmen. Es rechnet sie nicht
für Sie aus.
| Prüfung | Regel |
|---|---|
| Eine Position | netAmount ist quantity mal unitPrice, auf Cent gerundet. |
| Ein Steuereintrag | taxableAmount ist die Summe der Positionen mit diesem Satz. taxAmount ist diese Summe mal dem Satz, auf Cent gerundet. |
| Die Summen | lineNet ist die Summe der Positionen. taxBasis ist gleich lineNet. tax ist die Summe der Steuereinträge. gross ist taxBasis plus tax. due ist gleich gross. |
Verletzt eine Regel, bricht der Befehl ab, schreibt keine Datei und nennt das Feld:
Error: E-invoice amounts do not add up: BT-112 Invoice total with VAT: is 3610.54 but BT-109 plus BT-110 is 3610.53Datei prüfen
Listen Sie die angehängten Dateien auf. Eine gute Rechnung hat genau eine,
factur-x.xml:
pdfdetach -list rechnung.pdfUm das XML und den PDF/A-Teil zu prüfen, nutzen Sie Mustang und veraPDF:
java -jar Mustang-CLI-2.26.0.jar --action validate --no-notices --source rechnung.pdf
verapdf --flavour 3b rechnung.pdfMustang endet auch bei einer ungültigen Datei mit Exit-Code 0. Suchen Sie in
seinem Bericht nach status="invalid".
Was noch nicht geht
- Nur die Standard-Steuerkategorie
Smit einem Satz über null. Satz null, steuerfrei und Reverse Charge stehen nicht im Schema. - Nur Rechnungen (Typ 380). Keine Gutschriften.
- Keine Nachlässe, Zuschläge oder Anzahlungen.