Sein Grund, woertlich (06.09.2026):
"ich will fuer den pruefer sichtbar machen: ich wollte das so. die software
dokumentiert das, und damit wird es nachvollziehbar, weil es einen checkmark
nun gibt in der sqlite" - "das soll alles von anfang bis ende pruefbar sein"
WAS PASSIERT
Vor dem Schreiben eines Belegs fragt das Programm einmal ausdruecklich nach.
Der Text nennt, was gleich entsteht und was daran bindend ist:
Rechnung: ausgestellt im Sinne des § 14 UStG; die Nummer ist danach vergeben
und darf kein zweites Mal verwendet werden (§ 14 Abs. 4 Nr. 4 UStG);
zehn Jahre aufzubewahren (§ 147 Abs. 3 AO); nachtraeglich nicht
aenderbar (§ 146 Abs. 4 AO) - eine falsche Rechnung wird nicht
ueberschrieben, sondern storniert.
Angebot: unverbindlich, KEINE Rechnung, weist keine Steuer aus, verbraucht
keine Rechnungsnummer, wird nirgends gebucht.
Storno/Korrektur und Berichtigung haben ihre eigene Rueckfrage - sie wird nicht
verdoppelt (ein Schritt pro Fenster).
DIE SPUR
Ein Popup allein waere fuer einen Pruefer wertlos, es hinterlaesst nichts.
Deshalb bekommt die Tabelle "nummern" im gemeinsamen Buch eine Spalte
"freigabe": der ISO-Zeitstempel der ausdruecklichen Freigabe, an der
Rechnungsnummer haengend. Bestehende Buecher werden per ALTER TABLE nachgezogen;
alte Zeilen bleiben LEER - dort wurde nie gefragt, und ein nachtraeglich
erfundener Zeitstempel waere schlimmer als keiner.
gemeinsam.py liegt in beiden Programmen gleich und wurde mit hinuebergezogen.
PRUEFSTAND
pruef_freigabe.py prueft beide Richtungen, weil jede einzeln wertlos waere:
NEIN -> kein PDF, Zaehler unveraendert, Nummer im Feld unveraendert,
Nummernbuch leer
JA -> genau ein PDF, eine Nummer im Buch, Freigabe gesetzt und ein ISO-Datum
Die sieben Pruefstaende, die Belege erzeugen, melden die Freigabe jetzt
ausdruecklich an (pruefsteuerung bricht bei unangemeldeten Dialogen absichtlich
ab - kein stilles "ja").
Alle 16 Pruefstaende gruen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
Sein Fall: 'der typ hat mit dem alten programm einfach eine neue rechnung
gemacht, nun hat der die gleiche rechnung 3-4 mal drin, aber mit anderen
nummern'. Die Ueberzaehligen muessen storniert werden - und ihr Storno muss auf
die Rechnung verweisen, die BLEIBT, nicht auf eine neue.
Nach dem Auswaehlen der Rechnung fragt das Storno jetzt:
A - es folgt eine neue Rechnung (der bisherige Weg)
B - die Leistung ist schon abgerechnet
Zweistufig, weil er es so braucht: 'ich druecke b und ERST DANN kann ich die
nummer eingeben ... das ein opa, immer step by step, nicht alles auf einmal,
wie bei kindern'. Schritt 1 zeigt nur die Wahl, Schritt 2 das Nummernfeld, mit
Zurueck.
Geprueft wird nicht nur, OB es die Nummer gibt, sondern auch, ob der INHALT
passt (sein Zusatz): anderer Gast = geht nicht, anderer Zeitraum oder Betrag =
Nachfrage. Auf dem Blatt steht dann 'Schon abgerechnet: 2026-001' statt
'Berichtigte Rechnung', dazu der Satz, dass die Leistung versehentlich doppelt
in Rechnung gestellt wurde und keine weitere Rechnung folgt. Es wird keine
Nummer reserviert und kein Vorgang offen gehalten.
Pruefstand pruef_doppelte_leistung.py: faehrt das echte zweistufige Fenster,
prueft die Inhaltspruefung einzeln und am Ende das Steuerjournal - EIN
Aufenthalt (3 Naechte, 39,00) statt zwei.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYeAfLtccFrbU3MTj1MMTx