From a0cfc31ae6d95b1bf6a2a214b4d8e7826e4066e6 Mon Sep 17 00:00:00 2001 From: TheMockTv Date: Sat, 1 Aug 2026 12:33:53 +0200 Subject: [PATCH] Kenndaten-Metadaten v2: USt-Aufteilung je Satz Der Steuerrechner braucht Brutto->Netto je Steuersatz; auf einer Rechnung stecken 7 % (Uebernachtung) und 19 % (Waesche, Gas, Rad) gemischt drin, und die Aufteilung stand bisher nur im Fliesstext. Neu in /Subject: netto_gesamt, ust_gesamt, ust_bloecke[{satz,netto,ust,brutto}]. Alle Felder der Version 1 bleiben unveraendert - am zwischensumme/steuer_satz/ steuer_betrag haengt der Import des Steuerjournals. Verifiziert an einer gemischten Testrechnung (7 % + 19 %): Summe der Bloecke = Zwischensumme = netto_gesamt + ust_gesamt; Steuerjournal liest die v2-PDF unveraendert ein. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01TxFbNUnzkEk7FRFcZQoepm --- pdf_renderer.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/pdf_renderer.py b/pdf_renderer.py index c554322..d1fcce9 100644 --- a/pdf_renderer.py +++ b/pdf_renderer.py @@ -368,11 +368,17 @@ def _kenndaten(rechnung, kopf): Das Steuerjournal (Programm "Beherbergungssteuer") liest sie von dort aus, statt Nachname und Betraege aus dem Fliesstext zu raten. Fuer den Ausdruck aendert sich nichts - Metadaten stehen nicht auf dem Blatt. + + Version 2 ergaenzt die USt-Aufteilung ("ust_bloecke") fuers dritte Programm, + den Steuerrechner: der braucht Brutto->Netto je Steuersatz, und 7 % und 19 % + stecken auf einer Rechnung gemischt drin. Alle Felder der Version 1 bleiben + unveraendert stehen - am "zwischensumme"/"steuer_satz"/"steuer_betrag" haengt + der Import des Steuerjournals, das darf nicht brechen. """ aufschlag = rechnung.aufschlaege[0] if rechnung.aufschlaege else None daten = { "quelle": "rechnungstool", - "version": 1, + "version": 2, "rechnungsnummer": kopf.get("rechnungsnummer", ""), "datum": kopf.get("datum", ""), "nachname": kopf.get("nachname", ""), @@ -382,6 +388,14 @@ def _kenndaten(rechnung, kopf): "steuer_satz": float(aufschlag.satz) if aufschlag else 0.0, "steuer_betrag": runde(aufschlag.betrag) if aufschlag else 0.0, "gesamt": runde(rechnung.gesamt), + # neu in Version 2: je USt-Satz ein Block (Netto, enthaltene USt, Brutto) + "netto_gesamt": runde(rechnung.netto_gesamt), + "ust_gesamt": runde(rechnung.ust_gesamt), + "ust_bloecke": [ + {"satz": b.satz, "netto": runde(b.netto), "ust": runde(b.ust), + "brutto": runde(b.brutto)} + for b in rechnung.bloecke + ], } return json.dumps(daten, ensure_ascii=False)