Ersetzt die Excel-Mappe des Campinghofs. Die Rechnungs-PDFs des Rechnungstools sind die Quelle; SQLite ist nur Cache, Excel nur noch Import des Altbestands. Bericht fuers Amt als PDF im Briefkopf der Rechnungen (Firmendaten aus der config.json des Rechnungstools). - pdf_parser: liest Datum, Nummer, Name, Naechte, Zwischensumme, Satz - db: Journal + Scan mit Cache (Pfad/mtime/Groesse) - xlsx_io: Import der alten Tabelle, vereinheitlicht Rechnungsnummern - bericht_pdf: Monats- und Jahresbericht (reportlab) - GUI: Monatsreiter, Suche, Anhaken + Papierkorb, Kennzahlen-Leiste Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
77 lines
3.3 KiB
Markdown
77 lines
3.3 KiB
Markdown
# Beherbergungssteuer – Campinghof Bartl
|
||
|
||
Ersetzt die Excel-Mappe `Beherbergungsteuer.xlsx`.
|
||
|
||
**Quelle der Wahrheit sind die Rechnungs-PDFs** aus dem Rechnungstool. Das Programm
|
||
liest den Rechnungs-Ordner ein, führt daraus das Steuerjournal und schreibt auf
|
||
Knopfdruck die Excel-Mappe fürs Amt.
|
||
|
||
## Starten
|
||
|
||
- **Doppelklick** auf `Beherbergungssteuer starten.bat`
|
||
- oder im Terminal: `python app.py`
|
||
|
||
## Bedienung
|
||
|
||
1. **Rechnungs-Ordner…** → den Ordner wählen, in dem das Rechnungstool die PDFs ablegt
|
||
(Standard: `Dokumente\Campinghof Rechnungen`). Danach wird sofort eingelesen; bei
|
||
jedem Start passiert das automatisch.
|
||
2. **Rechnungen einlesen** (oder F5) holt neue Rechnungen nach. Bereits gelesene PDFs
|
||
werden übersprungen (Vergleich über Pfad, Änderungszeit und Größe) – das geht auch
|
||
bei tausend Rechnungen schnell.
|
||
3. **Monats-Reiter** zeigen die Buchungen mit Summenzeile, unten rechts steht die
|
||
Jahressumme.
|
||
4. **PDF fürs Amt** schreibt den Monatsbericht des offenen Reiters als PDF im
|
||
Campinghof-Layout (gleicher Briefkopf wie die Rechnungen) nach `berichte/`:
|
||
Tabelle aller Rechnungen, Summenblock mit der Steuer, Unterschriftszeile.
|
||
Über das Menü gibt es zusätzlich den **Jahresbericht**. Gedruckt wird aus dem
|
||
PDF-Programm heraus.
|
||
|
||
Eine Zeile per **Doppelklick** bearbeiten, mit **Entf** aus dem Journal löschen
|
||
(die PDF bleibt liegen und wird beim nächsten Einlesen wieder gefunden).
|
||
Barzahlungen ohne PDF gehen über **Neue Buchung**.
|
||
|
||
Der Briefkopf des Berichts (Firma, Logo, Bankzeile) wird aus der `config.json` des
|
||
Rechnungstools gelesen – also nur an einer Stelle gepflegt.
|
||
|
||
## Was aus der PDF gelesen wird
|
||
|
||
| Spalte | Herkunft in der Rechnung |
|
||
|--------|--------------------------|
|
||
| Datum | `Rechnungsdatum:` |
|
||
| Rechnung | `Rechnungsnummer:` (z.B. 2026-238) |
|
||
| Nachname | erste Zeile unter `Rechnung an:` |
|
||
| Übernachtungen | `Zeitraum: 3 Nächte` (ersatzweise An-/Abreise) |
|
||
| Gezahlt | `Zwischensumme:` – das ist die Basis der Steuer |
|
||
| Steuer | `zzgl. Beherbergungssteuer (5 %):` |
|
||
|
||
Weicht der in der PDF ausgewiesene Steuerbetrag von der eigenen Rechnung ab,
|
||
steht das als Warnung in `beherbergungssteuer.log`.
|
||
|
||
## Excel einlesen
|
||
|
||
`Datei → Excel-Tabelle einlesen…` zieht die bisherige `Beherbergungsteuer.xlsx` ins
|
||
Journal – sowohl den Altbestand aus der Zeit vor dem Rechnungstool als auch jede
|
||
spätere Fassung, die noch in Excel gepflegt wurde. Zeilen ohne PDF sind in der
|
||
Tabelle grau dargestellt. Rechnungsnummern werden dabei vereinheitlicht
|
||
(`001`, `13`, `2026-17` → `2026-013`), sonst entstünden doppelte Buchungen.
|
||
|
||
## Dateien
|
||
|
||
| Datei | Zweck |
|
||
|-------|-------|
|
||
| `app.py` | Fenster, Menü, Aktionen |
|
||
| `gui_monat.py` | ein Monatsblatt (Tabelle + Summenzeile) |
|
||
| `gui_dialoge.py` | Buchung von Hand anlegen/bearbeiten |
|
||
| `pdf_parser.py` | Rechnungs-PDF → Buchung |
|
||
| `bericht_pdf.py` | Monats-/Jahresbericht fürs Amt (reportlab) |
|
||
| `firma.py` | Briefkopf aus der `config.json` des Rechnungstools |
|
||
| `db.py` | Journal (SQLite) + PDF-Scan mit Cache |
|
||
| `xlsx_io.py` | Excel-Import |
|
||
| `modell.py` | Datenmodell + Steuerrechnung (die einzige Rechenstelle) |
|
||
| `journal.sqlite3` | die Daten (wird beim 1. Start angelegt) |
|
||
| `berichte/` | die erzeugten Amts-PDFs |
|
||
|
||
## Voraussetzungen
|
||
|
||
Python 3.10+, `pypdf`, `openpyxl` und `reportlab` (`pip install pypdf openpyxl reportlab`).
|