afa6ef61d4978063fa060daebda7f14508212196
beide Datensätze verbunden über die neu erstellte Spalte Tätigkeitsschlüssel und Ausgaben in Deutsch
beide Datensätze verbunden über die neu erstellte Spalte Tätigkeitsschlüssel und Ausgaben in Deutsch
SAB Tätigkeitsnachweise Tool
Automatisierte Generierung monatlicher Tätigkeitsnachweise (SAB Stellenförderung). Das Tool liest eine zentrale Stundenzuordnung und Stammdaten aus Excel-Dateien, ordnet Mitarbeiter zu Projekten zu und erzeugt pro Mitarbeiter eine vorausgefüllte Excel-Datei auf Basis der SAB-Vorlage.
Setup
- Create and activate a virtual environment.
- Install dependencies:
pip install -r requirements.txt
Ausführung
Haupteinstiegspunkt ist generate.py (Click-basierte CLI):
python generate.py --month 5 --year 2026
CLI-Optionen
| Option | Typ | Pflicht | Beschreibung |
|---|---|---|---|
--month |
1–12 | Ja | Berichtsmonat |
--year |
2000–2100 | Ja | Berichtsjahr |
--yes |
Flag | Nein | Interaktive Bestätigung überspringen |
--skip-errors |
Flag | Nein | Generierung trotz nicht-zuordenbarer Einträge fortsetzen |
Implementierte Features
Pipeline (generate.py)
Vollständige Generierungs-Pipeline mit folgenden Schritten:
- Konfiguration laden –
config.jsonwird eingelesen - Quellvalidierung – Prüfung der Eingabedateien auf Existenz, Sheets, Spalten, Monatsmarker
- Parsing – Stundenzuordnung und Stammdaten aus Excel einlesen
- Matching – Zuordnung der Mitarbeiter über normalisierte Namensabgleiche
- Geschäftsregel-Validierung – Duplikate, fehlende Template-Sheets, Output-Kollisionen
- Vorschau – Zusammenfassung der geplanten Ausgabe (Dry-Run-Ansicht)
- Bestätigung – Interaktive Abfrage (überspringbar mit
--yes) - Generierung – Excel-Workbooks erstellen und in
output/speichern
Parser (src/taetigkeitsnachweis/parser.py)
- Stundenzuordnung parsen (
parse_allocation_records): LiestPS_PW.xlsx, erkennt Monatsspalte über Datumsmarker (ab DD.MM.YYYY), vererbt Mitarbeiter-/Vertragsstunden-Kontext über Zeilen - Stammdaten parsen (
parse_masterdata_records): LiestStellenbeschreibungen.xlsxmit Antragsnummer, Qualifikation, Funktion, Tätigkeiten etc. - Erkennung inaktiver Werte (Elternzeit, Kündigung, etc.)
Matcher (src/taetigkeitsnachweis/matcher.py)
- Namens-Normalisierung: Trimming, Akzente entfernen, Casefolding, Leerzeichenbereinigung
- Flexible Namens-Zuordnung: Unterstützt „Nachname, Vorname" ↔ „Vorname Nachname"
- Disambiguierung: Bei mehreren Stammdaten-Treffern wird über
project_scopeaufgelöst - Förderquote-Berechnung:
(geförderte Stunden / Vertragsstunden) × 100 - Erzeugt Validierungsmeldungen:
MISSING_MASTERDATA,AMBIGUOUS_MASTERDATA,ALLOCATION_NOTE
Validator (src/taetigkeitsnachweis/validator.py)
Zweistufige Validierung:
- Quellvalidierung (
validate_sources): Datei-Existenz, Sheet-Existenz, Spaltenprüfung, Monatsmarker-Parsebarkeit, Vertragsstunden-Prüfung - Geschäftsregel-Validierung (
validate_business_rules): Keine aktiven Zuordnungen, doppelte Matches, Template-Sheet-Existenz, Template-Targets-Vollständigkeit, Dateinamen-Kollisionen
Writer (src/taetigkeitsnachweis/writer.py)
- Workbook-Generierung (
build_employee_workbooks): Lädt SAB-Vorlage, erstellt pro Zuordnung ein Sheet, befüllt konfigurierte Zielzellen (Antragsnummer, Name, Qualifikation, Funktion, Tätigkeiten, Berichtsmonat, Förderquote, Erstelldatum) - Dateinamen-Generierung (
build_output_filename): Pattern-basiert mit{year},{month},{first_name},{last_name} - Speicherung (
save_employee_workbooks): Schreibt inoutput/, erkennt Dateinamen-Kollisionen
Datenmodelle (src/taetigkeitsnachweis/models.py)
AllocationRecord– Mitarbeitername, Vertragsstunden, Projektkürzel, geförderte Stunden, AnmerkungenMasterDataRecord– Antragsnummer, Name, Qualifikation, Projektumfang, Stellenanteil, Funktion, TätigkeitMatchedAssignment– Verknüpfung Zuordnung + Stammdaten + berechnete FörderquoteValidationIssue– Code, Meldung, Schweregrad, Kontext
Fehlerbehandlung (src/taetigkeitsnachweis/errors.py)
Exception-Hierarchie: TaetigkeitsnachweisError → ConfigurationError, ValidationError, MatchingError
Konfiguration (config.json)
Zentrale Konfigurationsdatei mit:
- Pfade: Input-, Template- und Output-Verzeichnisse
- Dateien: Zuordnungs-Workbook, Stammdaten-Workbook, Template-Workbook
- Sheet-Namen: Pro Workbook konfigurierbar
- Parsing-Regeln: Spalten-Mappings, Monatsmarker-Format, inaktive Werte
- Matching-Einstellungen: Normalisierung, Toleranz
- Output-Einstellungen: Dateinamen-Pattern, ein Workbook pro Mitarbeiter, ein Sheet pro Zuordnung
- Template-Targets: Zielzellen-Adressen in der Vorlage
Projektstruktur
Tool/
├── generate.py # Haupteinstiegspunkt (Click CLI)
├── config.json # Zentrale Konfiguration
├── start.sh # Shell-Wrapper
├── requirements.txt # Python-Abhängigkeiten
├── input/ # Eingabe-Excel-Dateien (PS_PW.xlsx, Stellenbeschreibungen.xlsx)
├── output/ # Generierte Tätigkeitsnachweise
├── template/ # SAB-Vorlage (Tätigkeitsnachweis Stellenförderung.xlsx)
└── src/taetigkeitsnachweis/
├── cli.py # Legacy-Scaffold (argparse)
├── errors.py # Exception-Klassen
├── logging_utils.py # Logging-Konfiguration
├── matcher.py # Namenszuordnung & Förderquote
├── models.py # Datenklassen
├── parser.py # Excel-Parsing
├── util.py # Utilities (noch leer)
├── validator.py # Zwei-Phasen-Validierung
└── writer.py # Excel-Ausgabe
Languages
Python
92.9%
Batchfile
4.1%
Shell
3%