# SAB Taetigkeitsnachweise Generator - Aufgabenliste ## Ziel Projekt vollstaendig umsetzen: aus PS_PW.xlsx und Stellenbeschreibungen.xlsx monatliche Taetigkeitsnachweise per Template erzeugen. ## Arbeitsmodus - [ ] Immer nur genau eine Aufgabe aktiv bearbeiten. - [ ] Nach Abschluss jeder Aufgabe: Ergebnis pruefen und abhaken. - [ ] Bei Blockern: Fehler dokumentieren und naechsten konkreten Schritt notieren. - [ ] Nach jedem erledigten task einen git commit erzeugen ## Phase 1 - Planung und Konfiguration - [x] T1: Plan final im Plan-Dokument pflegen (Scope, Annahmen, Reihenfolge, DoD pro Aufgabe). - [x] T2: `config.json` Struktur festlegen - [ ] Pfade fuer `input/`, `template/`, `output/` - [ ] Dateinamen der drei Excel-Dateien - [ ] Sheetnamen und Spaltenzuordnung je Quelle - [ ] Zielzellen-Mapping fuer Template - [ ] Dateinamenmuster fuer Ausgaben - [ ] Regeln fuer Monatsmarker und Datumsformat ## Phase 2 - Projektgeruest und Basiskomponenten - [x] T3: Python-Projektstruktur anlegen - [x] Modulaufteilung (cli, parser, matcher, validator, writer, model, util) - [x] Gemeinsame Datenmodelle (z. B. dataclasses) definieren - [x] Zentrales Logging/Fehlermodell vorbereiten - [x] T4: Abhaengigkeiten und Laufzeit vorbereiten - [x] benoetigte Pakete festlegen (z. B. openpyxl, click) - [x] requirements-Datei pflegen - [x] Startkommando fuer lokale Ausfuehrung dokumentieren ## Phase 3 - Einlesen der Quelldaten - [x] T5: Parser fuer PS_PW.xlsx implementieren - [x] Monatsmarker in Zeile 2 erkennen und parsen (`ab 01.MM.YYYY`) - [x] Zielspalte fuer requested month/year eindeutig bestimmen - [x] Mitarbeiterkontext ueber Mehrzeilen-Eintraege vererben - [x] Werte normalisieren (`-`, `0`, leer, numerisch) - [x] Normalisierte Records erzeugen - [x] T6: Parser fuer Stellenbeschreibungen.xlsx implementieren - [x] Felder ID, Antragsnummer, Name, Qualifikation, Stellenanteil, Funktion, Taetigkeit einlesen - [x] Prozentwerte (deutsches Dezimalformat) robust in Zahlen umwandeln - [x] Mehrfache Eintraege je Name korrekt behalten ## Phase 4 - Matching und Fachlogik - [x] T7: Foerderquote berechnen - [x] Formel: funded_weekly_hours / contract_weekly_hours * 100 - [x] Rundungs-/Vergleichsregeln definieren - [x] T8: Matching-Engine bauen - [x] Primaerschluessel Name anwenden - [x] Kandidaten via Stellenanteil/Foerderquote aufloesen - [x] Ambigue und fehlende Treffer sauber markieren - [x] Hinweise aus Bemerkungsspalte als Validierungshinweis weitergeben ## Phase 5 - Validierung - [x] T9: Source-Validierung implementieren - [x] Dateien vorhanden und lesbar - [x] Benoetigte Sheets vorhanden - [x] Spalten vorhanden - [x] Monatsmarker parsebar - [x] Gewuenschter Monat exakt einmal vorhanden - [x] Stunden-/Vertragswerte gueltig - [x] T10: Business-Validierung implementieren - [x] Mindestens ein aktiver Fall vorhanden - [x] Jeder aktive Fall hat eindeutigen Match oder klaren Fehler - [x] Template enthaelt genau ein Quellblatt - [x] Dateinamenkollisionen vermeiden - [x] Pflicht-Zielzellen vollstaendig konfiguriert ## Phase 6 - Ausgabeerzeugung - [x] T11: Template-Verarbeitung bauen - [x] Template-Workbook laden - [x] Sheet pro aktiver Zuordnung klonen - [x] Inhalte assignment-spezifisch in Zielzellen schreiben - [x] T12: Dateinamen und Speichern - [x] Muster: `Taetigkeitsnachweis_YYYY_MM_Vorname_Nachname.xlsx` - [x] Pro Mitarbeiter genau eine Datei pro Monat erzeugen - [x] Bei mehreren Zuordnungen: mehrere Sheets in derselben Datei ## Phase 7 - CLI und Benutzerfluss - [ ] T13: CLI in `generate.py` implementieren - [ ] Parameter `--month` und `--year` - [ ] Pipeline orchestrieren: parse -> match -> validate -> preview -> write - [ ] Kontrollierter Exit-Code bei Fehlern - [ ] T14: Vorschau + Bestaetigung vor Schreiben - [ ] Uebersicht zu Berichtsmonat, aktiven Faellen, Fehlern - [ ] Liste der geplanten Ausgabedateien - [ ] Interaktive Bestaetigung (Abbruch ohne Schreibzugriff moeglich) ## Phase 8 - Tests und Abnahme - [ ] T15: Smoke-Test fuer End-to-End-Lauf - [ ] Beispielmonat ausfuehren - [ ] Dateien in `output/` entstehen erwartungsgemaess - [ ] T16: Fachtests definieren und ausfuehren - [ ] Mehrfachzuordnung eines Mitarbeiters - [ ] Fehlender Match - [ ] Ungueltige Monatsmarker - [ ] Fehlende Pflichtspalte/Sheet - [ ] T17: Ergebnispruefung gegen Template-Regeln - [ ] Pflichtfelder korrekt befuellt - [ ] Taetigkeitstext inkl. Zeilenumbrueche korrekt - [ ] Datums- und Monatsanzeige korrekt ## Umsetzungsreihenfolge 1. T1 -> T2 2. T3 -> T4 3. T5 und T6 (danach zusammenfuehren) 4. T7 -> T8 5. T9 -> T10 6. T11 -> T12 7. T13 -> T14 8. T15 -> T16 -> T17 ## Aktueller Startpunkt - [ ] Naechste aktive Aufgabe: T13 (CLI in generate.py implementieren)