diff --git a/Beherbergungssteuer.exe b/Beherbergungssteuer.exe
index e13cedf..18b25bd 100644
Binary files a/Beherbergungssteuer.exe and b/Beherbergungssteuer.exe differ
diff --git a/bericht_pdf.py b/bericht_pdf.py
index 10cebf4..2ebf3c8 100644
--- a/bericht_pdf.py
+++ b/bericht_pdf.py
@@ -23,7 +23,7 @@ from reportlab.lib.styles import ParagraphStyle
from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer
-from modell import MONATE, summiere, eur, eur_kurz
+from modell import MONATE, summiere, aufgehobene, eur, eur_kurz
log = logging.getLogger("bst.bericht")
@@ -198,8 +198,28 @@ def _ort(firma):
# ------------------------------------------------------------- Monat --------
+def _art_text(b, weg) -> str:
+ """Was in der Rechnungsspalte unter der Nummer steht.
+
+ Ohne das steht im Bericht fuers Amt eine Stornonummer neben einer voellig
+ anderen Rechnungsnummer, und niemand sieht, was zusammengehoert. Sein Wort
+ dazu am 04.09.2026: *"musst dann rein schreiben storniert oder so was dran
+ setzen"*. Dieselben Worte wie in der Spalte "Art" im Fenster.
+ """
+ if b.storno_zu:
+ return f"Storno zu {b.storno_zu}"
+ if b.id in weg:
+ return "storniert"
+ if b.art == "korrektur":
+ return "Neuausstellung"
+ return ""
+
+
def render_monat(pfad, firma, jahr: int, monat: int, buchungen):
st = _styles()
+ # Ueber ALLE uebergebenen Buchungen bestimmt (das ganze Jahr): der Storno
+ # kann in einem anderen Monat liegen als die Rechnung, die er aufhebt.
+ weg = aufgehobene(buchungen)
# Storno und aufgehobene Rechnung stehen BEIDE im Bericht, jede in ihrem
# Monat und mit ihrem Vorzeichen - so ist die Meldung aus sich heraus
# nachvollziehbar (Entscheidung des Auftraggebers, siehe modell.summiere).
@@ -219,7 +239,9 @@ def render_monat(pfad, firma, jahr: int, monat: int, buchungen):
for b in liste:
daten.append([
Paragraph(b.datum.strftime("%d.%m.%Y"), st["zelle_c"]),
- Paragraph(b.voll_nummer, st["zelle_c"]),
+ Paragraph(b.voll_nummer + (f'
'
+ f'{_art_text(b, weg)}'
+ if _art_text(b, weg) else ""), st["zelle_c"]),
Paragraph(b.nachname, st["zelle"]),
Paragraph(str(b.naechte), st["zelle_c"]),
Paragraph(eur_kurz(b.gezahlt), st["zelle_r"]),
diff --git a/pruef_storno_verrechnet.py b/pruef_storno_verrechnet.py
index 77a0f0d..2d37f1b 100644
--- a/pruef_storno_verrechnet.py
+++ b/pruef_storno_verrechnet.py
@@ -140,7 +140,12 @@ text = (PdfReader(pfad).pages[0].extract_text() or "").replace("\n", " ")
pruefe("2026-900" in text and "2026-901" in text,
"Rechnung UND Storno stehen im Bericht - die Meldung erklaert sich selbst")
pruefe("-52,00" in text, "der Storno steht mit seinem Minusbetrag drin")
-pruefe("117,00" in text, f"und die Monatssumme ist 117,00 Euro")
+pruefe("117,00" in text, "und die Monatssumme ist 117,00 Euro")
+# Ohne Beschriftung steht im Bericht eine Stornonummer neben einer voellig
+# anderen Rechnungsnummer - sein Wort: "musst dann rein schreiben storniert".
+pruefe("storniert" in text, "die aufgehobene Rechnung ist im Bericht als 'storniert' beschriftet")
+pruefe("Storno zu 2026-900" in text, "und der Storno nennt die Rechnung, die er aufhebt")
+pruefe("Neuausstellung" in text, "die neue Rechnung ist als Neuausstellung beschriftet")
# ---------------------------------------------------------------------------
print("--- Fall 4: das echte Fenster ---")