From f716feaa3e3c4adffacb66d51b72c05b8958cf83 Mon Sep 17 00:00:00 2001 From: Rob Date: Fri, 27 Mar 2026 13:15:59 +0100 Subject: [PATCH] add README --- README.md | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..db2d1d7 --- /dev/null +++ b/README.md @@ -0,0 +1,168 @@ +# Anwesenheit PDF Generator + +Liest Anwesenheitsdaten aus einer Excel-Datei (`.xlsx`) und erzeugt für jeden Teilnehmer eine ausgefüllte PDF-Datei (SAB-Formular). + +--- + +## Voraussetzungen + +- Python 3.10 oder höher +- pip + +--- + +## Installation + +```bash +# Abhängigkeiten installieren +pip install -r requirements.txt +``` + +Für Entwicklung inkl. Tests: + +```bash +pip install -r requirements-dev.txt +``` + +--- + +## Konfiguration + +Vor dem ersten Start müssen zwei Werte in `config.json` eingetragen werden: + +| Feld | Beschreibung | +|---|---| +| `antragsnummer` | SAB-Antragsnummer der Einrichtung | +| `ort` | Ort für die Unterschriftszeile im PDF | + +Alle anderen Felder sind vorbelegt und müssen nur bei abweichender Excel-Struktur angepasst werden. + +--- + +## Verzeichnisstruktur + +``` +generate.py ← Einstiegspunkt +config.json ← Konfiguration +input/ ← Excel-Dateien ablegen +template/ + sab.pdf ← PDF-Vorlage (muss vorhanden sein) +output/ ← Generierte PDFs (werden hier abgelegt) +``` + +--- + +## Verwendung + +### Generierung starten + +```bash +python generate.py generate --file "input/Anwesenheitsliste 2026.xlsx" --month Feb +``` + +Das Programm zeigt vor der Generierung eine Vorschau und fragt zur Bestätigung: + +``` +=== Vorschau der ermittelten Werte === +Excel-Datei : Anwesenheitsliste 2026.xlsx +Jahr : 2026 +Monat : Feb (02) +Antragsnummer : 12345 +Ort : Leipzig +Erstelldatum : 27.03.2026 +Teilnehmer : 49 +Fehler : 0 + +Möchten Sie die PDF-Generierung starten? [j/N] +``` + +Nur bei Eingabe von `j` werden PDFs geschrieben. + +### Nur Validierung (keine PDFs erzeugen) + +```bash +python generate.py validate --file "input/Anwesenheitsliste 2026.xlsx" --month Feb +``` + +Führt alle Prüfungen durch und zeigt die Vorschau — ohne Dateien zu schreiben. + +--- + +## Optionen + +### `generate` + +| Option | Pflicht | Beschreibung | +|---|---|---| +| `--file` | ja | Pfad zur Excel-Datei | +| `--month` | ja | Name des Monats-Sheets (z. B. `Jan`, `Feb`, `Mrz`, `Apr` …) | +| `--out` | nein | Ausgabeverzeichnis (Standard: `output/` aus `config.json`) | + +### `validate` + +| Option | Pflicht | Beschreibung | +|---|---|---| +| `--file` | ja | Pfad zur Excel-Datei | +| `--month` | ja | Name des Monats-Sheets | + +--- + +## Sheet-Namen + +Die deutschen Monatsabkürzungen entsprechen den Tabellenblatt-Namen in der Excel-Datei: + +| Sheet | Monat | +|---|---| +| `Jan` | Januar | +| `Feb` | Februar | +| `Mrz` | März | +| `Apr` | April | +| `Mai` | Mai | +| `Jun` | Juni | +| `Jul` | Juli | +| `Aug` | August | +| `Sep` | September | +| `Okt` | Oktober | +| `Nov` | November | +| `Dez` | Dezember | + +--- + +## Ausgabe + +Für jeden Teilnehmer wird eine PDF-Datei erstellt: + +``` +output/ + (1) Mustermann, Max.pdf + (2) Beispiel, Anna.pdf + ... +``` + +Die laufende Nummer entspricht der Nummerierung in Spalte A der Excel-Datei. + +--- + +## Tests ausführen + +```bash +pytest tests/ -v +``` + +Die Tests benötigen keine echten Excel- oder PDF-Dateien und laufen vollständig mit synthetischen Daten. + +--- + +## Validierungsprüfungen + +Das Programm prüft vor jeder Generierung: + +1. `config.json` vorhanden und vollständig +2. Excel-Datei existiert und ist eine `.xlsx`/`.xlsm`-Datei +3. Jahr aus Dateiname extrahierbar (z. B. `Anwesenheitsliste 2026.xlsx`) +4. Sheet-Name bekannt (in `month_mapping` der `config.json`) +5. Sheet existiert in der Arbeitsmappe +6. Spalte A (lfd. Nummer) enthält Daten +7. Headerzeile mit `Name, Vorname` gefunden +8. Tagesspalten ab Spaltenindex 9 vorhanden +9. PDF-Template unter `template/sab.pdf` erreichbar