Ein Streamlit-basiertes Dashboard für die Analyse von SQL Server Zeiterfassungsdaten mit Entra ID Authentifizierung.
- 🧪 TEST-MODUS: Sofortiger Start mit Dummy-Daten, keine Setup-Zeit
- Benutzerauthentifizierung: Microsoft Entra ID mit lokaler Entwicklungs-Fallback
- 📊 Projekt-Zusammenfassung: Soll vs. Ist-Stunden Übersicht pro Projekt
- Editierbare Sollstunden: Bearbeitbare Zielwerte pro Tätigkeit (Default: 0)
- 📈 Prozentuale Anteile: Anteil jeder Tätigkeit am Gesamtprojekt
- ⏱️ Flexible Stunden-Quelle: Wählbar zwischen "Zeit" und "FaktStd" Spalten
- Status-Ampel: Visueller Erfüllungsstand (🟢 🟡 🔴)
- Projektfilter: Benutzer-spezifische Projektzugriffe mit Datum/Such-Filtern
- Excel Export: Formatierte Datenexporte für Zusammenfassung und Details
- Docker Support: Multi-Stage Container (Einfach/Test/Production)
- Health Monitoring: System-Health-Check Dashboard
- 📈 Sprint-basierte Forecasts: Gewichtete 4-Sprint-Analyse (letzte 8 Wochen)
- 🔮 Prognose-Szenarien: 3 Budget-Ende-Szenarien (Optimistisch/Realistisch/Pessimistisch)
- 📊 Burn-down Charts: Interaktive Plotly-Visualisierungen mit Szenario-Linien
- ⚡ Velocity-Trend-Analyse: Erkennt steigende/fallende Team-Produktivität
- 📝 Manuelle Prognosen: Override-Funktion mit Begründung und Persistierung
- 📅 Budget-Ende-Prognose: Automatische Berechnung basierend auf Sprint-Velocity
- 📈 Wochentrend-Charts: Aggregierte Stunden-Visualisierung
- 🎯 Activity-Level Forecasts: Prognosen für einzelne Tätigkeiten
- 🔄 Live-Updates: Prognosen aktualisieren sofort bei Wert-Änderungen
| Projekt | Kunde | Sollstunden Gesamt | Iststunden Gesamt | Erfüllungsstand (%) | Status |
|---|---|---|---|---|---|
| P24ABC01 | Example Company | 120.0 STD | 87.5 STD | 72.9% | 🟢 Buchbar |
| P24XYZ01 | Mustermann AG | 80.0 STD | 95.0 STD | 118.8% | 🔴 Überbucht |
| Tätigkeit/Activity | Sollstunden | Anteil am Projekt (%) | Erfüllungsstand (%) | Status | Iststunden* |
|---|---|---|---|---|---|
| Implementierung | [Editable: 60] | 50.0% | 83.3% | 🟢 Buchbar | 50.0 STD |
| Testing & QA | [Editable: 30] | 25.0% | 166.7% | 🔴 Überbucht | 50.0 STD |
*Wählbar: "Zeit" oder "FaktStd" Spalte
- Python 3.11+
- SQL Server mit ODBC Driver 17
- Docker (optional)
- Repository klonen
git clone <repository-url>
cd FrontEnd-SQLServer- Test-Umgebung starten
# Option A: Mit Docker
docker-compose -f docker-compose.test.yml up -d
# Option B: Lokal
pip install -r requirements.txt
cp .env.test .env
streamlit run app.py- Dashboard öffnen
http://localhost:8502 # Docker
http://localhost:8501 # Lokal
- Sofort loslegen 🚀
- ✅ Keine SQL Server Konfiguration nötig
- ✅ Keine Entra ID Setup erforderlich
- ✅ Automatische Anmeldung mit Test-Benutzern
- ✅ Realistische Dummy-Daten bereits vorhanden
- ✅ Alle Features sofort testbar (Sollstunden editieren, Spalten wechseln, etc.)
- Repository klonen
git clone <repository-url>
cd FrontEnd-SQLServer- Python Environment einrichten
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt- Konfiguration
cp .env.example .env
# .env Datei mit SQL Server Daten befüllen- Anwendung starten
streamlit run app.py- Docker Image bauen
docker build -t streamlit-dashboard .- Mit Docker Compose starten
docker-compose up -d- Dashboard öffnen
http://localhost:8501
Produktion:
# SQL Server
SQL_SERVER_HOST=your-server
SQL_SERVER_DATABASE=your-database
SQL_SERVER_USERNAME=user
SQL_SERVER_PASSWORD=password
# Entra ID (Optional)
ENTRA_CLIENT_ID=your-client-id
ENTRA_CLIENT_SECRET=your-secret
ENTRA_TENANT_ID=your-tenant-idTEST-MODUS (Schnellstart ohne Setup):
# Aktiviert Test-Umgebung mit Dummy-Daten
TEST_MODE=true
# Alle anderen Variablen werden ignoriertconfig/users.json:
{
"users": {
"user@company.com": {
"projects": ["P24ABC01", "P24XYZ01"],
"permissions": ["read", "export", "edit_targets"]
}
}
}Erwartet SQL Server Tabelle ZV mit folgenden Spalten:
- Name, Zeit, Projekt, Teilprojekt, Kostenstelle
- Verwendung, Status, Kommentar, Datum
- Jahr, Monat, Kundenname, etc.
TEST-MODUS: Verwendet Dummy-Daten, keine echte Datenbank erforderlich.
- TEST-MODUS: Automatische Anmeldung, Benutzer wählbar
- Entra ID: Automatische Weiterleitung zu Microsoft Login
- Lokal: Entwicklungsumgebung mit Test-Benutzern
- Abmeldung: Funktioniert korrekt, kehrt zum Login zurück
Tab "📊 Übersicht":
- Projekt-Zusammenfassung: Übersicht Soll vs. Ist pro Projekt
- Tätigkeits-Tabelle: Editierbare Sollstunden mit Prozent-Anteilen
- Filter: Jahr/Monat/Quartal, Textsuche, Stunden-Quelle auswählen
Tab "📈 Zeitreihen" (NEU):
- Prognose-Szenarien: 3 Budget-Ende-Szenarien mit Konfidenz-Levels
- Burn-down Charts: Interaktive Visualisierung mit Szenario-Linien
- Sprint-Velocity: Gewichtete 4-Sprint-Analyse
- Manuelle Prognosen: Override-Funktion für eigene Einschätzungen
- Wochentrends: Aggregierte Stunden pro Kalenderwoche
- Velocity-Trends: Automatische Erkennung steigender/fallender Produktivität
Tab "📥 Export":
- Excel-Export: Formatierte Downloads für Zusammenfassung und Details
- Sollstunden editieren: Klick in Sollstunden-Spalte, Default: 0
- Stunden-Quelle wechseln: Sidebar → "Zeit" oder "FaktStd" wählen
- Prozent-Anteile: Automatische Berechnung des Projekt-Anteils
- Status-Ampeln: 🟢 ≤100% | 🟡 100-110% | 🔴 >110%
- Budget-Prognosen: 3 Szenarien mit Sprint-Velocity (optimistisch/realistisch/pessimistisch)
- Manuelle Override: Eigene Prognose-Werte mit Begründung speichern
- Live-Update: Änderungen aktualisieren sofort alle Berechnungen und Charts
- Velocity-Analyse: Sprint-Details und Trend-Warnungen
Zugriff über:
- UI: Admin Tools → Health Check
- API:
http://localhost:8501/health(Docker)
Überprüft:
- Datenbankverbindung
- Authentifizierungsservice
- Dateisystem-Zugriff
- Konfiguration
- Optimierte Image-Größe
- Nur Runtime-Dependencies in Production
- Non-root User (streamlit)
- Minimal Base Image (python:3.11-slim)
- Resource Limits
HEALTHCHECK --interval=30s --timeout=10s --retries=3
CMD curl -f http://localhost:8501/_stcore/healthstreamlit-dashboard/
├── app.py # Hauptanwendung
├── config/
│ ├── users.json # Benutzer & Berechtigungen
│ └── database.py # DB Connection
├── components/
│ ├── auth.py # Entra ID Authentication
│ ├── filters.py # Filter Components
│ └── export.py # Excel Export
├── utils/
│ ├── cache.py # Caching System
│ └── health.py # Health Monitoring
└── Dockerfile
# Unit Tests (wenn implementiert)
python -m pytest tests/
# Manual Testing
streamlit run app.py# Streamlit Debug
export STREAMLIT_SERVER_ENABLE_DEBUG=true
streamlit run app.py --server.address=0.0.0.0- Container Logs:
docker logs sql-server-dashboard - File Logs:
logs/Directory (wenn mounted)
- Streamlit Built-in Stats:
/_stcore/health - Custom Health Endpoint für Monitoring
- Dashboard startet nicht
# Stelle sicher dass TEST_MODE=true gesetzt ist
echo $TEST_MODE
# Prüfe ob Dummy-Daten existieren
ls -la test_data/
# Starte im Debug-Modus
TEST_MODE=true streamlit run app.py --server.headless false- Keine Daten sichtbar
# Test-Umgebung Container neu starten
docker-compose -f docker-compose.test.yml restart
# Oder lokale Dummy-Daten neu generieren
cd test_data && python dummy_data_generator.py- SQL Server Connection
# ODBC Driver prüfen
odbcinst -q -d
# Connection String testen
python -c "import pyodbc; print(pyodbc.drivers())"- Entra ID Authentication
# Redirect URI prüfen: http://localhost:8501
# Tenant ID und Client ID validieren- Docker Health Check Failed
# Container Status
docker ps
docker logs sql-server-dashboard
# Manual Health Check
docker exec sql-server-dashboard curl -f http://localhost:8501/_stcore/health# Zu TEST-MODUS wechseln
export TEST_MODE=true
streamlit run app.py
# Zu Produktivmodus wechseln
unset TEST_MODE
# oder
export TEST_MODE=false
streamlit run app.py- Fork das Repository
- Feature Branch erstellen (
git checkout -b feature/amazing-feature) - Changes committen (
git commit -m 'Add amazing feature') - Branch pushen (
git push origin feature/amazing-feature) - Pull Request erstellen
Dieses Projekt ist unter der MIT License lizensiert - siehe die LICENSE Datei für Details.
Bei Fragen oder Problemen:
- Issues auf GitHub erstellen
- Health Check Dashboard prüfen
- Container Logs analysieren
- Dokumentation konsultieren