Rezepte für Rechnungsvorlagen
Kopierfertige BlockTemplate-Snippets für wiederkehrende Aufgaben — von SEPA-QR-Code bis dynamischen Steuerzeilen. Einfach in das body.blocks-Array (bzw. header / footer) einfügen.

SEPA-Girocode (QR) für Überweisungen
Ein qrcode-Block mit EPC-069-12-konformem Inhalt aus dem nested seller.bankAccount (iban ist dort Pflicht — bei ZUGFeRD/XRechnung mit SEPA-Überweisung ohnehin zwingend). Kunden scannen ihn in ihrer Banking-App, Überweisungsdaten werden vorausgefüllt.

1{2 "type": "qrcode",3 "condition": "{{seller.bankAccount.iban}}",4 "data": {5 "size": 120,6 "alignment": "right",7 "eccLevel": "M",8 "content": "BCD\n002\n1\nSCT\n{{seller.bankAccount.bic}}\n{{seller.bankAccount.accountHolder}}\n{{seller.bankAccount.iban}}\nEUR{{total}}\n\n{{invoiceNumber}}\n\nRechnung {{invoiceNumber}}"9 }10}Artikelnummer-Spalte in der Positions-Tabelle
Zusätzliche Spalte für die Artikel-/Leistungsnummer aus items[].articleNumber. Bei leerem Feld bleibt die Zelle einfach leer.

1{2 "type": "table",3 "data": {4 "dataSource": "{{items}}",5 "columns": [6 { "field": "articleNumber", "header": "Artikel-Nr.", "width": "15%" },7 { "field": "description", "header": "Beschreibung", "width": "*" },8 { "field": "quantity", "header": "Menge", "width": "10%", "align": "center" },9 { "field": "unitPrice", "header": "Einzel", "width": "15%", "align": "right", "format": "currency" },10 { "field": "netAmount", "header": "Netto", "width": "15%", "align": "right", "format": "currency" }11 ]12 }13}Logo rechts, Firma links im Kopf
Zwei-Spalten-Header mit textueller Absenderadresse links und Logo rechts — repeatOnAllPages macht es zum Briefkopf. Das Logo wird als statische URL oder Base64-Data-URI eingebunden.

1{2 "header": {3 "height": 100,4 "repeatOnAllPages": true,5 "blocks": [6 {7 "type": "columns",8 "data": {9 "columnGap": 20,10 "columns": [11 { "width": "*", "blocks": [12 { "type": "text", "data": { "content": "{{seller.name}}", "style": "h2" } },13 { "type": "text", "data": { "content": "{{seller.street}}", "style": "muted" } },14 { "type": "text", "data": { "content": "{{seller.postalCode}} {{seller.city}}", "style": "muted" } }15 ]},16 { "width": "auto", "blocks": [17 { "type": "image", "data": { "src": "https://cdn.example.com/logo.png", "fit": [140, 70], "alignment": "right" } }18 ]}19 ]20 }21 }22 ]23 }24}Seitenzahl im Footer
Die Runtime-Platzhalter {{pageNumber}} und {{pageCount}} liefern die aktuelle Seite und die Gesamtseitenzahl. Kombiniert mit repeatOnAllPages.

1{2 "footer": {3 "repeatOnAllPages": true,4 "blocks": [5 { "type": "line", "data": { "thickness": 0.5, "color": { "token": "lineColor" } } },6 { "type": "text", "data": {7 "content": "Seite {{pageNumber}} von {{pageCount}} • Rechnung {{invoiceNumber}}",8 "fontSize": 8,9 "alignment": "center",10 "color": { "token": "mutedColor" }11 }}12 ]13 }14}USt.-Zeilen dynamisch aus taxSummary
Eine Summary-Zeile je Steuersatz — ohne fest verdrahtete 19 %-Logik. Funktioniert gleichermaßen für gemischte Rechnungen mit 7 %, 19 %, Reverse-Charge (AE) oder steuerfrei (Z/E).

1{2 "type": "summary",3 "data": {4 "alignment": "right",5 "labelBold": true,6 "headerRows": [7 { "label": "Netto gesamt", "value": "{{subtotal}}", "valueFormat": "currency" }8 ],9 "dynamicRows": {10 "dataSource": "{{taxSummary}}",11 "valueField": "taxAmount",12 "valueFormat": "currency",13 "labelTemplate": "USt {{taxRate}}% ({{taxCategoryCode}})"14 },15 "footerRows": [16 { "label": "Gesamtbetrag", "value": "{{total}}", "bold": true, "valueFormat": "currency", "separator": true }17 ]18 }19}Zahlungsbedingungen mit Skonto
Bedingter Block: nutzt paymentTerms.earlyPaymentDiscount (nested). Nur rendern, wenn discountPercent gesetzt ist.

1{2 "type": "text",3 "condition": "{{paymentTerms.earlyPaymentDiscount.discountPercent}}",4 "data": {5 "content": "Zahlbar bis {{dueDate}}. Bei Zahlung innerhalb von {{paymentTerms.earlyPaymentDiscount.days}} Tagen gewähren wir {{paymentTerms.earlyPaymentDiscount.discountPercent}}% Skonto.",6 "fontSize": 9,7 "margin": [0, 12, 0, 0]8 }9}Kleinunternehmer-Hinweis (§ 19 UStG)
countrySpecific.isKleinunternehmer ist ein Boolean-Flag für DE-Rechnungen. Per condition wird der Paragraphen-Hinweis nur gerendert, wenn das Flag gesetzt ist.

1{2 "type": "text",3 "condition": "{{countrySpecific.isKleinunternehmer}}",4 "data": {5 "content": "Gemäß § 19 UStG wird keine Umsatzsteuer berechnet (Kleinunternehmer-Regelung).",6 "italics": true,7 "fontSize": 9,8 "margin": [0, 12, 0, 0]9 }10}B2G: Leitweg-ID im Kopfbereich
Für Rechnungen an öffentliche Auftraggeber (DE). Leitweg-ID und Bestellreferenz liegen unter countrySpecific. Hinweis zum Payload: countrySpecific verlangt den Pflicht-Discriminator countryCode: "DE", und EN 16931 erwartet mindestens eines von leitwegId oder buyerReference.

1{2 "type": "keyvalue",3 "condition": "{{countrySpecific.leitwegId}}",4 "data": {5 "layout": "horizontal",6 "labelWidth": 120,7 "labelBold": true,8 "items": [9 { "label": "Leitweg-ID", "value": "{{countrySpecific.leitwegId}}" },10 { "label": "Bestellreferenz", "value": "{{countrySpecific.buyerReference}}", "optionalMode": "anyEmpty" }11 ]12 }13}Ein Rezept fehlt dir?
Schreib uns — wir nehmen häufig nachgefragte Muster gerne in das Cookbook auf.
Rezept vorschlagen →