Das zweite Blatt "fuer das Amt" trug DIESELBE Rechnungsnummer, aber einen anderen Gesamtbetrag. Mehrere Blaetter zum selben Umsatz mit verschiedenen Endbetraegen sehen aus, als werde ueber verschiedene Umsaetze abgerechnet - bei einer Pruefung ein Problem. Ersatzlos entfallen; was die Stadt braucht, rechnet das Steuerjournal aus den Kenndaten der PDF. Mit dem Blatt fielen _AmtMarke, gesamtrechnung_betont und der doppelte Renderlauf weg. Die API kann das Fenster jetzt BEDIENEN - mit Schluessel wie bei einem SSH-Key: 32 Byte Zufall in api_schluessel.txt im gemeinsamen Ordner, den nur das Steuerjournal und der Betreiber lesen. Ohne gueltigen Schluessel kein Zutritt (compare_digest). ping und schau_nach bleiben schluessellos, sonst kann ein aelteres Journal nicht mehr anklopfen. Was einen BELEG schreibt, geht nur im Testlauf - eine Fernbedienung, die echte Rechnungen ausstellt, hat in einer Buchhaltung nichts zu suchen. api.py liegt wie immer in beiden Programmen. Der Erststart fragte nach "der zuletzt vergebenen Nummer" - das holt niemanden ab, der bei 0 anfaengt. Jetzt zwei Wege: bei 0 anfangen ODER die eigene Zaehlung weiterfuehren. Unter das schon Vergebene kommt keiner der beiden. pruef_nummernsperre bediente den Dialog nur halb: nach einer abgelehnten Zahl bleibt er offen (so soll er), niemand drueckte "Spaeter" - das Programm wartete in wait_window() ewig. Das war schon vor diesem Umbau so. Neu: pruef_api.py. Alle 14 Pruefstaende gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
5.5 KiB
Rechnungstool: rechtssicher, gestaltbar, mit Vorschau
Stand 05.09.2026 — in Arbeit. Programm C:\claude\rechnungstool,
Repo git.pcore.de/TheMockTv/rechnungstool (Pre-Tag pre/rechtssicher-bilder).
Seine Ansage: „wir bauen den rechnungs ersteller so um das der nun richtig rechtlich sicher ist und die kopf und fuss zeile mit eigenen bildern import" — und im Lauf des Umbaus dazu: „das die firmen das designen können", „eine vorschau butten wäre gut … sonst haben die den storno auf wand", „das mit rechnung an das amt kommt raus, das ist nicht § conform".
1. Bilder und Farbe gehören der Firma (fertig)
Bis jetzt war das Blatt auf EINEN Betrieb gebaut: Camping-Grün fest im Code, das Logo ein Pfad in der config.
bilder.py(neu): ein gewähltes Bild wird in den Ordnerbilder/neben dieconfig.jsonkopiert, gemerkt wird nurbilder/logo.png. Der Grund: ein Pfad auf den Desktop ist tot, sobald dort jemand aufräumt — und das fällt erst beim Drucken auf. Gleicher Name, anderes Bild →-2, nie überschreiben.- Kopfbild (Logo, oben links) und Fußbild (schmaler Streifen unten) sind austauschbar. Das Layout bleibt, wie es war.
- Firmenname, Anschrift, Bank, Steuernummer bleiben gezeichnet. Kein Bild kann sie ersetzen — die Steuernummer ist Pflichtangabe (§ 14 Abs. 4 Nr. 2 UStG), und was in einem Bild steht, kann niemand prüfen. (Ein Haken „Angaben stehen im Bild" war gebaut und ist auf seine Ansage hin wieder rausgeflogen.)
- Farbe der Rechnung: EIN Wert (
design.akzent), Hex-Feld und Farbwähler in den Einstellungen. Die helle Fläche im Tabellenkopf wird daraus gemischt — niemand muss zwei Farben aufeinander abstimmen. Eine unlesbare Farbe fällt still auf die Vorgabe zurück, statt das Schreiben der Rechnung zu verhindern.
Prüfstand: pruef_bilder.py.
2. Vorschau-Knopf (fertig)
Seine Begründung: „sonst haben die den storno auf wand" — eine ausgestellte Rechnung lässt sich nur noch über Storno oder Berichtigung geradeziehen.
Der Knopf zeigt das fertige Blatt, bevor es eine Rechnung wird:
- verbraucht keine Rechnungsnummer, trägt nichts ins Nummernbuch,
- landet nicht im Rechnungsordner (Temp-Ordner),
- trägt quer über jeder Seite „VORSCHAU – keine Rechnung",
- prüft keine Pflichtfelder — man will ja gerade sehen, was noch fehlt.
Prüfstand: pruef_vorschau.py (u. a.: die echte Rechnung danach trägt die
Marke NICHT).
3. Das Blatt „für das Amt" ist entfallen
Bis 05.09.2026 hing an jeder Rechnung mit Beherbergungssteuer ein zweites Blatt mit derselben Rechnungsnummer, aber ohne die Steuer — also mit einem anderen Gesamtbetrag.
Seine Ansage: „das mit rechnung an das amt kommt raus … wenn so was in den büchern von einem unternehmen drin ist, dann ist das ein genickbruch, wenn der prüfer kommt". Vorgeschichte: Bartl wollte es so, weil es sonst seine Steuerberaterin durcheinanderbringe; der Widerspruch stand schon damals.
Nachgeschlagen: mehrere Blätter zum selben Umsatz mit gleicher Nummer sind für sich noch kein § 14c-Fall — aber unterschiedliche Endbeträge erwecken den Eindruck, es werde über verschiedene Umsätze abgerechnet. Genau das fällt bei einer Prüfung auf.
Was an die Stelle tritt: nichts im Rechnungstool. Das Steuerjournal liest
die Kenndaten (/Subject) der PDF und rechnet die Bemessungsgrundlage selbst
aus; ans Amt geht eine Summenanmeldung, keine Rechnungskopie mit Gastnamen.
Vorher geprüft: kein Programm liest die zweite Seite — pruef_montage.py
belegt weiter, dass das Journal die Datei einliest.
Mit dem Blatt entfielen: _AmtMarke, der Parameter gesamtrechnung_betont und
der doppelte Renderlauf (der existierte nur, um zu wissen, auf welcher Seite das
Amt-Blatt beginnt). Der Renderer ist dadurch deutlich kürzer.
4. Prüfstände nehmen keine Maus mehr
Sein Fund mitten im Lauf: „pack doch die maus nicht immer auf das programm, weil ich kann dir sonst nichts schreiben".
config.TESTLAUFsteht an einer Stelle (--test/CAMPINGHOF_TEST=1).- Hauptfenster und jeder Dialog werden im Prüflauf durchsichtig gemacht und
aus dem Bild geschoben, und
grab_setfällt weg. - ⚠️ Nicht
withdraw(): damit baut ein Fenster seine Dialoge nicht mehr richtig auf — vier Prüfstände wurden davon rot und hätten eine Bedienung geprüft, die es so nicht gibt. pruefsteuerung.py(neu): Meldungen wandern ins Protokoll, Ja/Nein-Fragen in einen Fahrplan (antwortet("Hausnummer", True)). Eine unangemeldete Frage bricht den Lauf ab — stillschweigend „ja" zu sagen würde genau die Fälle übergehen, wegen denen es die Prüfung gibt.
Offen
- Betriebsart abfragen (Campingplatz / Handwerker / Unternehmen) — sein Zielbau: „nicht jeder braucht das so wie der camping typ". Handwerker und Unternehmen brauchen freie Rechnungszeilen statt des festen Katalogs; das ist ein neuer Eingabemodus, kein Schalter.
- § 14-Lücke Leistungszeitpunkt: ohne An-/Abreise (z. B. nur Gasfüllung) steht heute kein Leistungsdatum auf dem Blatt — § 14 Abs. 4 Nr. 6 UStG.
- Zahlungsziel einstellbar.
- E-Rechnung (ZUGFeRD): Pflicht ab 01.01.2028 für B2B — trifft die
Montage-Rechnung. Bibliothek
factur-xist geprüft und kann XML erzeugen (Profil EN 16931), prüfen (XSD + Schematron) und einbetten (PDF/A-3). - GoBD: PDFs nach dem Schreiben schreibgeschützt; Aufbewahrung seit BEG IV 8 statt 10 Jahre (§ 147 Abs. 3 AO).