9bdd90c073d9b149882db9cfb09b37f2e66dfd3b
Tätigkeitsnachweis-Generator
Streamlit-App zur automatisierten Erstellung von Tätigkeitsnachweisen aus Excel-Daten.
Setup
- Python 3.9+ installieren (falls nicht vorhanden): https://python.org
- Virtuelle Umgebung erstellen und Abhängigkeiten installieren:
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt
- App starten:
streamlit run app.py
Oder einfach start.bat (Windows) bzw. ./start.sh (macOS/Linux) ausführen.
Cold Run – Headless-Generierung
coldrun.py erzeugt ohne GUI einen Tätigkeitsnachweis für die erste Person –
automatisch mit der ersten Input- und Template-Datei. Ergebnis wird auf macOS
im Finder geöffnet.
# Kommandozeile
.venv/bin/python coldrun.py
# oder per Doppelklick (macOS)
coldrun.command
Bedienung
- Input-Datei wählen – Dropdown zeigt alle
.xlsx-Dateien aus deminput/-Ordner- Nach Auswahl wird die Datei sofort validiert
- Angezeigt werden: Anzahl Mitarbeiter, Antragsnummern, Einträge pro Monat
- Template wählen – Dropdown zeigt alle
.xlsx-Dateien aus demtemplate/-Ordner- Nach Auswahl wird das Template sofort validiert
- Angezeigt wird: Anzahl gefundener Zielfelder
- Mitarbeiter auswählen – Multiselect-Liste aller gefundenen Mitarbeiter
- Standardmäßig sind alle ausgewählt
- Nicht selektierte Mitarbeiter werden bei der Generierung übersprungen
- "Tätigkeitsnachweise generieren" klicken
- Die generierten Dateien werden im
output/-Ordner abgelegt
- Die generierten Dateien werden im
Konfiguration
Alle Einstellungen liegen im config/-Ordner:
settings.ini
[paths]– Ordner für Input, Template, Output[output]– Dateinamen-Pattern ({first_name},{last_name})[parsing]– Monats-Sheet-Erkennung, Leerzeilen-Verhalten
input-fields.json
Definiert die Spalten der Input-Tabelle:
column: Spaltenbuchstabe (A, B, C…)field_name: Exakte Spaltenüberschrift aus der Excel-Dateitype:stringodernumberrequired:trueoderfalse
output-fields.json
Mapping von Input-Feldern auf Template-Zellen:
source_field: Exakte Spaltenüberschrift ausinput-fields.jsontarget_cell: Zelladresse im Template (z. B."C16")format: Optionaler Format-String (z. B."%.2f"für Prozentwerte)
Erwartetes Input-Format
- Eine
.xlsx-Datei mit einem Sheet pro Monat (z. B. "Januar 2025", "Februar 2025", …) - Jedes Sheet hat in Zeile 1 die Spaltenüberschriften (laut
input-fields.json) - Daten beginnen ab Zeile 2
- Jede Zeile entspricht einer Mitarbeiter-Funktion-Kombination für diesen Monat
Output
- Pro selektiertem Mitarbeiter wird eine
.xlsx-Datei erstellt - Jeder Monat wird als eigenes Sheet (Kopie des Templates) eingefügt
- Dateiname:
{Nachname}_{Vorname}_Tätigkeitsnachweis.xlsx
Tests
End-to-End-Tests parsen die reale Input-Datei (input/2025 JM.xlsx) und das reale
Template (template/Tätigkeitsnachweise Stellenförderung.xlsx) und validieren
den gesamten Generierungs-Workflow.
# Test-Abhängigkeiten installieren
.venv/bin/pip install pytest
# Tests ausführen
.venv/bin/python -m pytest tests/test_e2e.py -v
Die Tests prüfen:
- Vorhandensein der Input- und Template-Dateien
- Korrekte Parsierung (168 Datensätze, 19 Personen)
- Vollständige Pipeline für die erste Person („Draßdo, Cornelia"): 12 Monats-Sheets mit allen Zellinhalten (Antragsnummer, Name, Stellenanteil, Qualifikation, Monat, Funktion, Tätigkeit, Ort, Datum)
Languages
Python
92.9%
Batchfile
4.1%
Shell
3%