Tätigkeitsnachweis-Generator

Streamlit-App zur automatisierten Erstellung von Tätigkeitsnachweisen aus Excel-Daten.

Setup

  1. Python 3.9+ installieren (falls nicht vorhanden): https://python.org
  2. Virtuelle Umgebung erstellen und Abhängigkeiten installieren:
python -m venv .venv
.venv\Scripts\activate     # Windows
pip install -r requirements.txt
  1. 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

  1. Input-Datei wählen – Dropdown zeigt alle .xlsx-Dateien aus dem input/-Ordner
    • Nach Auswahl wird die Datei sofort validiert
    • Angezeigt werden: Anzahl Mitarbeiter, Antragsnummern, Einträge pro Monat
  2. Template wählen – Dropdown zeigt alle .xlsx-Dateien aus dem template/-Ordner
    • Nach Auswahl wird das Template sofort validiert
    • Angezeigt wird: Anzahl gefundener Zielfelder
  3. Mitarbeiter auswählen – Multiselect-Liste aller gefundenen Mitarbeiter
    • Standardmäßig sind alle ausgewählt
    • Nicht selektierte Mitarbeiter werden bei der Generierung übersprungen
  4. "Tätigkeitsnachweise generieren" klicken
    • Die generierten Dateien werden im output/-Ordner abgelegt

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-Datei
  • type: string oder number
  • required: true oder false

output-fields.json

Mapping von Input-Feldern auf Template-Zellen:

  • source_field: Exakte Spaltenüberschrift aus input-fields.json
  • target_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)
S
Description
No description provided
Readme
2.6 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 92.9%
Batchfile 4.1%
Shell 3%