rechnungstool/AUFGABE_RECHTSSICHER_BILDER_VORSCHAU.md
TheMockTv ca9ac212cf Amt-Blatt raus, Bedienung ueber die API, Erststart fragt nach zwei Wegen
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
2026-09-05 18:24:59 +02:00

107 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 Ordner `bilder/` neben
die `config.json` **kopiert**, gemerkt wird nur `bilder/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.TESTLAUF` steht an **einer** Stelle (`--test` / `CAMPINGHOF_TEST=1`).
- Hauptfenster und **jeder** Dialog werden im Prüflauf durchsichtig gemacht und
aus dem Bild geschoben, und `grab_set` fä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-x` ist 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).