Created
December 19, 2025 14:45
-
-
Save Simon-Laux/9d0683dc646698c7be81768a1930ccb1 to your computer and use it in GitHub Desktop.
German: Erstattungsforderung um Arbeitsausgaben vom Arbeitgeber zurückzufordern.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ---- Stammdaten ------ | |
| #let my_name = "Otto Normalverbraucher" | |
| #let my_iban = "DE49201202005467194628" | |
| #let my_address = ("Sesamstr. 7", "Stuttgart, BW 70173") | |
| #let your_name = "Max Muster" | |
| #let your_address = ("Musterfirma", "Sesamstr. 5", "Stuttgart, BW 70173") | |
| #let anrede = "Sehr geehrter Herr Muster" | |
| #let currency = ( | |
| code: "EUR", | |
| normal: "euro", | |
| cent: "cent", | |
| symbol: "€" | |
| ) | |
| // ---- Einmal Daten ------ | |
| #let betreff = "Erstattung der Merch Artikel Bestellungen" | |
| #let what = "die Merch Bestellung" | |
| #let posten = csv(bytes(" | |
| ElektronikShop,Bluetooth Kopfhörer,50.00,59.50 | |
| TechnikWelt,Externe Festplatte,80.00,95.20 | |
| GadgetStore,USB-C Adapter,20.00,23.80 | |
| OfficePlus,Ergonomische Maus,35.00,41.65 | |
| SoftwareCenter,Projektmanagement Software,120.00,142.80 | |
| ")) | |
| // you can uncomment this if you only have one position | |
| // #let posten = csv(bytes(" | |
| // ElektronikShop,Bluetooth Kopfhörer,50.00,59.50 | |
| // ")) | |
| // ---- start of template ------ | |
| #import "@preview/numeris-scribere:0.1.2": * | |
| #import "@preview/ibanator:0.1.0": iban | |
| // ---- calculate ------ | |
| #let (total_netto, total_gross) = { | |
| let extract_net((vendor, product, net, gross)) = decimal(net) | |
| let extract_gross((vendor, product, net, gross)) = decimal(gross) | |
| let total_netto = posten.map(extract_net).sum() | |
| let total_gross = posten.map(extract_gross).sum() | |
| (total_netto, total_gross) | |
| } | |
| #let betrag = total_gross | |
| #let betrag_in_worten = { | |
| let amount = calc.floor(betrag) | |
| let cent_amount = int((betrag - calc.floor(betrag)) * 100) | |
| spell-number(amount, lang: "de") + " " + currency.normal + " und "+ spell-number(cent_amount, lang: "de") + " "+ currency.cent | |
| } | |
| // ---- Document ------ | |
| #set text( | |
| font: "Noto Sans", | |
| size: 12pt, | |
| lang: "de" | |
| ) | |
| #set document( | |
| title: [ | |
| Betreff: #betreff | |
| ], | |
| author: "#name" | |
| ) | |
| #set page( | |
| paper: "a4", | |
| margin: (top: 4.5cm, x: 2cm), // für brief fenster | |
| header: [ | |
| #set align(right) | |
| #text(size: 20pt)[ | |
| #my_name | |
| #linebreak() | |
| #my_address.join(", ") | |
| ] | |
| ], | |
| ) | |
| #text(size: 9pt)[ | |
| #my_name, #my_address.join(", ") | |
| ] | |
| #your_name | |
| #linebreak() | |
| #your_address.join(linebreak()) | |
| #linebreak() | |
| #show title: set text(size: 12pt) | |
| #title() | |
| #linebreak() | |
| #anrede, | |
| #underline[ | |
| Mit diesem Schreiben bitte ich um Erstattung der #betrag #currency.code (#betrag_in_worten) Kosten für die Merch Bestellung. | |
| ] | |
| Bitte überweisen Sie die den Betrag auf mein Gehalts Konto: *#iban(my_iban)* | |
| #let table-value-cell(number) = align(right)[#number#h(0.2em, weak: true)#currency.symbol] | |
| #let table-row(vendor, product, net, gross) = ([#vendor], [#product], table-value-cell(net), table-value-cell(gross)) | |
| #table( | |
| columns: (auto, 1fr, auto, auto), | |
| inset: 5pt, | |
| align: horizon, | |
| table.header( | |
| [*Händler*], [*Bezeichnung*], align(right)[*Netto*], align(right)[*Brutto* (mit MwSt.)], | |
| ), | |
| table.hline(stroke: 2pt, start: 0), | |
| ..posten.map(item => table-row(..item)).flatten(), | |
| ..(if posten.len() > 1 {( | |
| // [],[],[],[], | |
| table.hline(stroke: 2pt, start: 0), | |
| [*Total*],[],[#table-value-cell(total_netto)], [#table-value-cell(total_gross)], | |
| )} else {()}) | |
| ) | |
| Die Rechnung#{if posten.len() > 1 {"en"}} mit allen Details finden Sie im Anhang. | |
| #linebreak() | |
| Mit freundlichen Grüßen, | |
| #my_name |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
To use this you need this package which is not released yet typst/packages#3698