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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TxFbNUnzkEk7FRFcZQoepm
This commit is contained in:
TheMockTv 2026-08-01 12:33:53 +02:00
parent b5799a60a1
commit a0cfc31ae6

View file

@ -368,11 +368,17 @@ def _kenndaten(rechnung, kopf):
Das Steuerjournal (Programm "Beherbergungssteuer") liest sie von dort aus, Das Steuerjournal (Programm "Beherbergungssteuer") liest sie von dort aus,
statt Nachname und Betraege aus dem Fliesstext zu raten. Fuer den Ausdruck statt Nachname und Betraege aus dem Fliesstext zu raten. Fuer den Ausdruck
aendert sich nichts - Metadaten stehen nicht auf dem Blatt. 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 aufschlag = rechnung.aufschlaege[0] if rechnung.aufschlaege else None
daten = { daten = {
"quelle": "rechnungstool", "quelle": "rechnungstool",
"version": 1, "version": 2,
"rechnungsnummer": kopf.get("rechnungsnummer", ""), "rechnungsnummer": kopf.get("rechnungsnummer", ""),
"datum": kopf.get("datum", ""), "datum": kopf.get("datum", ""),
"nachname": kopf.get("nachname", ""), "nachname": kopf.get("nachname", ""),
@ -382,6 +388,14 @@ def _kenndaten(rechnung, kopf):
"steuer_satz": float(aufschlag.satz) if aufschlag else 0.0, "steuer_satz": float(aufschlag.satz) if aufschlag else 0.0,
"steuer_betrag": runde(aufschlag.betrag) if aufschlag else 0.0, "steuer_betrag": runde(aufschlag.betrag) if aufschlag else 0.0,
"gesamt": runde(rechnung.gesamt), "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) return json.dumps(daten, ensure_ascii=False)