# 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).