Kompletter Umbau in einem Rutsch auf PDF als template Grundlage
This commit is contained in:
1 parent
dbe325d305
commit
169d2167e0
12 files changed
+421
-287
No files matched your search
+42
-22
@@ -1,27 +1,47 @@
|
||||
# Aufgaben: Tätigkeitsnachweis-Generator (Streamlit App)
|
||||
# Aufgaben: Tätigkeitsnachweis-Generator (Streamlit App) – PDF-Migration
|
||||
|
||||
## 🔍 Analyse ✅
|
||||
- [x] **A1**: Input-Datei `input/2025 JM.xlsx` analysieren → Sheet-Namen, exakte Spaltenüberschriften (Zeile 1), Spaltenpositionen (A, B, C…), Beispiel-Daten
|
||||
- [x] **A2**: Template `template/Tätigkeitsnachweise Stellenförderung.xlsx` analysieren → zu befüllende Zielzellen identifizieren (Zelladresse + erwarteter Inhalt)
|
||||
> **Migration**: Das XLSX-Template war schreibgeschützt und wurde durch ein PDF-Template ersetzt.
|
||||
> Alle `_Field`-Platzhalter im PDF werden durch echte Daten ersetzt.
|
||||
|
||||
## ⚙️ Konfiguration ✅
|
||||
- [x] **K1**: `config/input-fields.json` mit Spaltenschema befüllen — `column` (A, B…), `field_name` (exakte Überschrift aus Excel), `type`, `required`
|
||||
- [x] **K2**: `config/output-fields.json` mit Zell-Mappings befüllen — `source_field` (exakte Spaltenüberschrift aus input-fields.json), `target_cell`, `format`
|
||||
- [x] **K3**: `config/settings.ini` mit Pfaden und Einstellungen befüllen
|
||||
## 🔄 Migration: XLSX → PDF Template ✅
|
||||
|
||||
## 🧱 Core-Module ✅
|
||||
- [x] **C1**: `requirements.txt` befüllen (streamlit, openpyxl)
|
||||
- [x] **C2**: `src/__init__.py` + `src/models.py` — Datenklassen
|
||||
- [x] **C3**: `src/config.py` — Konfigurations-Loader
|
||||
- [x] **C4**: `src/parser.py` — Input-Datei parsen
|
||||
- [x] **C5**: `src/validator.py` — Eingabevalidierung
|
||||
- [x] **C6**: `src/writer.py` — Output generieren
|
||||
- [x] **M1**: `requirements.txt` → `PyMuPDF` hinzufügen
|
||||
- [x] **M2**: `config/settings.ini` → `filename_pattern` auf `.pdf`-Endung ändern
|
||||
- [x] **M3**: `config/output-fields.json` → `target_cell` entfernen, `pdf_field` hinzufügen (Mapping source_field → PDF-Platzhalter-Name)
|
||||
- [x] **M4**: `src/config.py` → `get_available_templates()` auf `.pdf`-Dateien umstellen
|
||||
- [x] **M5**: `src/validator.py` → `validate_template()` für PDF angepasst (prüft `_Field`-Platzhalter via PyMuPDF)
|
||||
- [x] **M6**: `src/writer.py` → Komplett neu: PDF-basierte Generierung mit PyMuPDF
|
||||
- Pre-Scan: Alle `_Field`-Platzhalter im Template-PDF finden (Position, Schriftgröße)
|
||||
- Für jeden Mitarbeiter: neues PDF, pro Monat eine Seite (Template-Kopie), `_Field`-Texte redacten + ersetzen
|
||||
- Dateiname: `{nachname}_{vorname}_Tätigkeitsnachweis.pdf`
|
||||
- [x] **M7**: `app.py` → Template-Validierung für PDF angepasst (Dropdown zeigt `.pdf`, Validierung prüft `_Field`-Marker)
|
||||
- [x] **M8**: `coldrun.py` → An PDF-Template angepasst
|
||||
- [x] **M9**: `tests/test_e2e.py` → Tests für PDF-Output umgeschrieben (PyMuPDF statt openpyxl zur Output-Validierung)
|
||||
- [x] **M10**: `.copilot/PLAN.md` und `.copilot/TASKS.md` aktualisiert
|
||||
|
||||
## 🖥️ UI & Start ✅
|
||||
- [x] **U1**: `app.py` — Streamlit-Oberfläche (Input-Selektion: validieren & Mitarbeiteranzahl + Antragsnummern anzeigen; Template-Selektion: validieren & Zielfelder anzeigen; Mitarbeiter-Multiselect zum Ein-/Ausschließen)
|
||||
- [x] **U2**: `start.bat` — Windows Batch-Startdatei
|
||||
- [x] **U3**: `README.md` — vollständige Dokumentation
|
||||
## 🔍 Analyse (abgeschlossen)
|
||||
- [x] **A1**: Input-Datei `input/2025 JM.xlsx` analysiert
|
||||
- [x] **A2**: PDF-Template `template/Tätigkeitsnachweise Stellenförderung.pdf` liegt vor (mit `_Field`-Platzhaltern)
|
||||
|
||||
## ✅ Test ✅
|
||||
- [x] **T1**: App mit vorhandener Input-Datei und Template testen — 19 Tätigkeitsnachweise erfolgreich generiert
|
||||
- [x] **T2**: Edge Cases prüfen (leere Zeilen, Sonderzeichen, fehlende Monate) — Umlaute, Sonderzeichen in Namen, "Alle Rollen"-Sheet korrekt behandelt
|
||||
## ⚙️ Konfiguration (migriert)
|
||||
- [x] **K1**: `config/input-fields.json` — unverändert gültig
|
||||
- [x] **K2**: `config/output-fields.json` — `target_cell` entfernt, `pdf_field` hinzugefügt
|
||||
- [x] **K3**: `config/settings.ini` — filename_pattern auf `.pdf`
|
||||
|
||||
## 🧱 Core-Module
|
||||
- [x] **C1**: `requirements.txt` — streamlit, openpyxl, PyMuPDF
|
||||
- [x] **C2**: `src/__init__.py` + `src/models.py` — `OutputMapping` um `pdf_field` erweitert
|
||||
- [x] **C3**: `src/config.py` — Template-Suche auf `.pdf` umgestellt
|
||||
- [x] **C4**: `src/parser.py` — unverändert
|
||||
- [x] **C5**: `src/validator.py` — `validate_template()` für PDF via PyMuPDF
|
||||
- [x] **C6**: `src/writer.py` — Komplett neu mit PyMuPDF (redact + insert_text)
|
||||
|
||||
## 🖥️ UI & Start
|
||||
- [x] **U1**: `app.py` — PDF-Template-Validierung angepasst
|
||||
- [x] **U2**: `start.bat` — unverändert
|
||||
- [x] **U3**: `coldrun.py` — An PDF angepasst, funktioniert
|
||||
- [x] **U4**: `README.md` — vorhanden
|
||||
|
||||
## ✅ Test
|
||||
- [x] **T1**: E2E-Test mit realer Input-Datei und PDF-Template → 5/5 Tests bestanden
|
||||
- [x] **T2**: Edge Cases — Umlaute korrekt im PDF, fehlende Marker (Ort/Datum) werden übersprungen
|
||||
Reference in new issue
Block a user