Storno-Erklaerung steht jetzt auch auf dem Amtsblatt

Sein Fund: "in der pdf wird der satz nicht angezeigt, da ist dann ein
sprung in den rechnungs nummern".

Die Schlusstexte waren komplett auf die Kundenseite beschraenkt ("auf dem
Amt-Blatt unnoetig"). Fuer Dank- und Zahlungstexte stimmt das. Fuer die
STORNO-Erklaerung nicht: auf Seite 2 stand dann eine Stornonummer
(2026-456) neben einer voellig anderen Rechnungsnummer (2026-342), und
das Blatt, das die Stadt bekommt, sagte nirgends warum.

Jetzt traegt auch das Amtsblatt den Satz - "hebt die Rechnung X vom
Y vollstaendig auf, ist bereits mit Z abgerechnet" bzw. bei Version C
"die Leistung wird nicht abgerechnet". Die Beherbergungssteuer-Zeile
bleibt dort weiterhin aussen vor, die gehoert da nicht hin.

pruef_nur_storno an die Verrechnung angepasst (das Steuerjournal laesst
Storno und aufgehobene Rechnung wieder mitzaehlen, sie heben sich
gegenseitig auf): unterm Strich 0 Naechte und 0,00 Euro, gezaehlt werden
aber beide Belege. A und B unveraendert gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017bEsoFUk16DfnNA7MjY36H
This commit is contained in:
TheMockTv 2026-09-04 01:19:50 +02:00
parent 01f6a127c2
commit 37b5c60266
2 changed files with 19 additions and 6 deletions

View file

@ -471,8 +471,14 @@ def _seite_inhalt(story, st, cfg, rechnung, kopf, gesamtrechnung_betont):
story.append(Spacer(1, 8 * mm))
# ---- Schlusstexte (nur Kundenseite; auf dem Amt-Blatt unnoetig) ----
if not gesamtrechnung_betont:
# ---- Schlusstexte -------------------------------------------------------
# Dank- und Zahlungstexte gehoeren nur auf die Kundenseite. Die
# STORNO-Erklaerung gehoert aber AUCH aufs Amtsblatt: dort steht sonst eine
# Stornonummer neben einer voellig anderen Rechnungsnummer, und niemand
# erfaehrt, warum. Sein Fund am 04.09.2026: *"in der pdf wird der satz nicht
# angezeigt, da ist dann ein sprung in den rechnungs nummern"* - genau das
# Blatt, das die Stadt bekommt, war der Beleg ohne Begruendung.
if not gesamtrechnung_betont or art == "storno":
texte = cfg.get("texte", {})
block = []
if art == "storno":

View file

@ -183,14 +183,21 @@ j = Journal(os.path.join(tmp, "journal.sqlite3"))
j.scanne(ordner, 5.0, voll=True)
buchungen = j.buchungen(jahr=2026)
weg = aufgehobene(buchungen)
s = summiere(buchungen, weg)
# Verrechnet, nicht weggelassen (Entscheidung vom 04.09.2026, siehe
# modell.summiere im Steuerjournal): beide Zeilen stehen mit ihrem Vorzeichen
# in der Summe und heben sich gegenseitig auf.
s = summiere(buchungen)
print("--- was im Journal steht ---")
for b in buchungen:
print(f" {b.voll_nummer} {b.nachname:10s} {b.naechte:>3} Naechte {b.gezahlt:>8.2f}")
pruefe(len(buchungen) == 2, f"Rechnung und Storno stehen beide im Journal ({len(buchungen)})")
pruefe(s.buchungen == 0 and s.naechte == 0 and abs(s.gezahlt) < 0.005,
f"gemeldet wird NICHTS: 0 Rechnungen, 0 Naechte, 0,00 Euro "
f"(ist {s.buchungen}, {s.naechte}, {s.gezahlt})")
pruefe(len(weg) == 1, f"die Rechnung ist als aufgehoben erkannt ({len(weg)})")
pruefe(s.naechte == 0 and abs(s.gezahlt) < 0.005,
f"unterm Strich bleibt nichts uebrig: 0 Naechte, 0,00 Euro "
f"(ist {s.naechte}, {s.gezahlt})")
pruefe(s.buchungen == 2,
f"gezaehlt werden aber beide Belege - verrechnet, nicht weggelassen "
f"(ist {s.buchungen})")
j.schliessen()
f.destroy()