# Aufgaben: Tätigkeitsnachweis-Generator (Streamlit App) – PDF-Migration > **Migration**: Das XLSX-Template war schreibgeschützt und wurde durch ein PDF-Template ersetzt. > Alle `_Field`-Platzhalter im PDF werden durch echte Daten ersetzt. ## 🔄 Migration: XLSX → PDF Template ✅ - [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 ## 🔍 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) ## ⚙️ 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