Reports Modul
Zweck
Das Reports Modul bietet umfangreiche Berichte und Analytics für Zeiterfassung, Schichten, Projekte und Mitarbeiter. Es unterstützt Export-Funktionen (CSV, PDF), Zeitraum-Filter, benutzerdefinierte Report-Typen und statistische Auswertungen.
Verantwortlichkeiten
Was gehört zum Modul
- Berichte erstellen: Verschiedene Report-Typen generieren
- Analytics: Statistische Auswertungen
- Export-Funktionen: CSV, PDF Export
- Zeitraum-Filter: Berichte für bestimmte Zeiträume
- Benutzerdefinierte Reports: Custom Report-Konfigurationen
Was gehört nicht zum Modul
- Daten-Erstellung: Daten werden von anderen Modulen bereitgestellt
- Detaillierte Ansichten: Siehe jeweilige Modul-Seiten
Implementierung
Backend- und Frontend-API sind modular aufgebaut; Details siehe interne Entwickler-Dokumentation.
Konfiguration
Entitlement
Das Modul erfordert das Entitlement module.reports. Dieses wird pro Tenant aktiviert/deaktiviert.
Entitlement-Key: module.reports
Environment Variables
Keine modulspezifischen ENV-Variablen erforderlich.
Defaults
- Standard-Format: CSV
- Standard-Zeitraum: Aktueller Monat
Abhängigkeiten
Optionale Abhängigkeiten
- time-tracking: Für Zeiterfassungs-Berichte
- shift-pool: Für Schicht-Berichte
- projects: Für Projekt-Berichte
Core-Abhängigkeiten
- members: Für Mitarbeiter-Berichte
API-Endpoints
Authentifizierung
Alle Endpoints erfordern Authentifizierung. Zwei Methoden werden unterstützt:
- Firebase ID Token (Standard für Web-App)
- API-Token (für externe Nutzung)
Header: Authorization: Bearer <token>
Dashboard-Widget-Daten abrufen
GET /api/reports/dashboard
Lädt Dashboard-Widget-Daten für Berichte.
Response:
{
"success": true,
"data": {
"timeTracking": {
"todayMinutes": 240,
"weekHours": 35.5
},
"shifts": {
"upcoming": 5
}
}
}
Zeit-Zusammenfassungs-Report
GET /api/reports/time-summary?period=this_week&format=json&startDate=2024-01-01&endDate=2024-01-31
Generiert einen Zeit-Zusammenfassungs-Report.
Query-Parameter:
- period (optional): Zeitraum (today, yesterday, this_week, last_week, this_month, last_month, custom, Standard: this_week)
- startDate (optional): Start-Datum (ISO 8601, erforderlich wenn period=custom)
- endDate (optional): End-Datum (ISO 8601, erforderlich wenn period=custom)
- format (optional): Format (json oder pdf, Standard: json)
Response (JSON):
{
"success": true,
"report": {
"type": "time_summary",
"period": "this_week",
"startDate": "2024-01-15",
"endDate": "2024-01-21",
"totalHours": 40.0,
"totalMinutes": 2400,
"entriesCount": 5,
"members": [
{
"uid": "user123",
"hours": 40.0,
"minutes": 2400,
"entriesCount": 5
}
]
}
}
Response (PDF): PDF-Datei wird direkt heruntergeladen.
Fehler:
- 400 INVALID_PERIOD: Ungültiger Zeitraum
- 400 MISSING_DATES: Start- und Enddatum erforderlich für benutzerdefinierten Zeitraum
Schicht-Übersichts-Report
GET /api/reports/shift-overview?period=this_week&format=json&startDate=2024-01-01&endDate=2024-01-31
Generiert einen Schicht-Übersichts-Report.
Query-Parameter:
- period (optional): Zeitraum (Standard: this_week)
- startDate (optional): Start-Datum (erforderlich wenn period=custom)
- endDate (optional): End-Datum (erforderlich wenn period=custom)
- format (optional): Format (json oder pdf, Standard: json)
Response (JSON):
{
"success": true,
"report": {
"type": "shift_overview",
"period": "this_week",
"startDate": "2024-01-15",
"endDate": "2024-01-21",
"totalShifts": 10,
"publishedShifts": 8,
"completedShifts": 5,
"shifts": [
{
"id": "shift123",
"title": "Schicht-Titel",
"status": "PUBLISHED",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z"
}
]
}
}
Response (PDF): PDF-Datei wird direkt heruntergeladen.
Fehler:
- 400 INVALID_PERIOD: Ungültiger Zeitraum
- 400 MISSING_DATES: Start- und Enddatum erforderlich für benutzerdefinierten Zeitraum
Mitarbeiter-Aktivitäts-Report
GET /api/reports/member-activity?period=this_week&format=json&startDate=2024-01-01&endDate=2024-01-31
Generiert einen Mitarbeiter-Aktivitäts-Report (nur Admin/Manager).
Query-Parameter:
- period (optional): Zeitraum (Standard: this_week)
- startDate (optional): Start-Datum (erforderlich wenn period=custom)
- endDate (optional): End-Datum (erforderlich wenn period=custom)
- format (optional): Format (json oder pdf, Standard: json)
Response (JSON):
{
"success": true,
"report": {
"type": "member_activity",
"period": "this_week",
"startDate": "2024-01-15",
"endDate": "2024-01-21",
"members": [
{
"uid": "user123",
"displayName": "Max Mustermann",
"totalHours": 40.0,
"shiftsCount": 5,
"timeEntriesCount": 10
}
]
}
}
Response (PDF): PDF-Datei wird direkt heruntergeladen.
Fehler:
- 400 INVALID_PERIOD: Ungültiger Zeitraum
- 400 MISSING_DATES: Start- und Enddatum erforderlich für benutzerdefinierten Zeitraum
- 403 FORBIDDEN: Nur Admin oder Manager können Mitarbeiter-Reports sehen
Bericht generieren
POST /api/reports/generate
Generiert einen Bericht basierend auf Typ und Parametern.
Request Body:
{
"type": "time_summary",
"period": "this_week",
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"format": "json"
}
Request Body (Custom Period):
{
"type": "shift_overview",
"period": "custom",
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"format": "pdf"
}
Mögliche Report-Typen:
- time_summary: Zeit-Zusammenfassungs-Report
- shift_overview: Schicht-Übersichts-Report
- member_activity: Mitarbeiter-Aktivitäts-Report (nur Admin/Manager)
Mögliche Zeiträume:
- today: Heute
- yesterday: Gestern
- this_week: Diese Woche
- last_week: Letzte Woche
- this_month: Dieser Monat
- last_month: Letzter Monat
- custom: Benutzerdefiniert (erfordert startDate und endDate)
Mögliche Formate:
- json: JSON-Response
- pdf: PDF-Datei (wird direkt heruntergeladen)
Response (JSON):
{
"success": true,
"report": {
"type": "time_summary",
"period": "this_week",
"startDate": "2024-01-15",
"endDate": "2024-01-21",
"totalHours": 40.0
}
}
Response (PDF): PDF-Datei wird direkt heruntergeladen.
Fehler:
- 400 INVALID_TYPE: Ungültiger Report-Typ
- 400 INVALID_PERIOD: Ungültiger Zeitraum
- 400 MISSING_DATES: Start- und Enddatum erforderlich für benutzerdefinierten Zeitraum
- 400 UNKNOWN_TYPE: Unbekannter Report-Typ
Firestore Collections
Das Reports Modul verwendet keine eigenen Collections. Es aggregiert Daten aus anderen Modulen für Berichte.
Wird dokumentiert: Detaillierte Datenbank-Struktur folgt.
Fehlerfälle
HTTP-Status-Codes
- 200 OK: Erfolgreich
- 400 Bad Request: Validierungsfehler
- 401 Unauthorized: Nicht authentifiziert
- 403 Forbidden: Keine Berechtigung
- 500 Internal Server Error: Server-Fehler
Fehlercodes
Die folgenden Fehlercodes werden von den API-Endpunkten zurückgegeben:
INVALID_TYPE: Ungültiger Report-TypINVALID_PERIOD: Ungültiger ZeitraumMISSING_DATES: Start- und Enddatum erforderlich für benutzerdefinierten ZeitraumUNKNOWN_TYPE: Unbekannter Report-TypFORBIDDEN: Keine Berechtigung (z.B. für member_activity Report)
FAQ / Troubleshooting
Wird dokumentiert: Häufige Fragen und Lösungen folgen.