diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..1c2ff4e --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,139 @@ +# TimeMaster – Roadmap + +> Stand: Mai 2026 · Deployed: Dev `.137` · Prod `.164` + +--- + +## ✅ Fertiggestellt + +| Feature | Migration | Deployed | +|---|---|---| +| Auth, JWT, Rollen (5 Stufen), TOTP/2FA | 0001–0016 | ✅ | +| Zeiterfassung (Stempel, Pausen, Genehmigung) | 0002 | ✅ | +| Abwesenheiten (Urlaub, Genehmigung, Kalender) | 0003–0016 | ✅ | +| Urlaubskonto (Grundurlaub, Sondertage, Resturlaub) | 0003–0016 | ✅ | +| Kiosk-Modus (PIN, NFC, QR, Mitarbeiterliste) | 0018 | ✅ | +| Personalnummer (Format, Auto-Modus, CSV-Import) | 0020 | ✅ | +| Krankmeldung (Quick-Sick, Bradford-Faktor, AU-Pflicht) | 0022 | ✅ | +| Busylight-Integration (Pull-Modus, per-Firma Token) | 0023 | ✅ | +| Row Level Security (PostgreSQL RLS, Mandanten-Isolation) | 0024 | ✅ | +| SSRF-Fix CalDAV (CALDAV_ALLOWED_CIDRS Whitelist) | 0026 | ✅ | +| Mobile Stempelseite `/mobile` (PWA, Touch-optimiert) | 0027 | ✅ | +| FZA-Lücken geschlossen (Overdraft-Schutz, Refund, Auto-Recalc) | 0028 | ✅ | +| Sondervertretungs-Faktoren (×1.5, eigene HR-Seite) | 0029 | ✅ | +| Audit-Log Backend + Frontend (COMPANY_ADMIN/SUPER_ADMIN) | — | ✅ | +| §3b EStG Stunden-Report (Nacht/Wochenende/Feiertag) | — | ✅ | + +--- + +## 🚧 In Planung + +### Priorität 1 – Sicherheit & Infrastruktur + +#### agent-08: Kiosk-Härtung (Ed25519-Signierung) +**Warum:** Aktueller Token-Auth ist nicht MITM-resistent. Kein Produktiveinsatz ohne diese Absicherung. + +- [ ] **Backend + CLI**: Ed25519-Verifizierung pro Request, `timemaster kiosk`-CLI (add/approve/revoke/rotate-key), Migration 0030 +- [ ] **Kiosk-Frontend**: ServiceWorker signiert alle Requests, WebCrypto `extractable: false`, IndexedDB Offline-Queue, Heartbeat +- [ ] **Verwaltungs-Frontend**: KioskDevicesPage-Erweiterung (Status-Ampel, Fingerprint, Heartbeat-Timestamp), Health-Badge im Layout +- [ ] *(Phase 2 später)* Anomalie-Detection (Frequenz-Threshold, IP-Sprung) + +--- + +### Priorität 2 – Kernfunktionen + +#### agent-02-zeiterfassung: Vollständige Zeiterfassung +**Warum:** ArbZG-Prüfung, Überstundenkonto und Genehmigungsworkflow sind noch nicht vollständig abgebildet. + +- [ ] Work Schedules (Arbeitspläne) mit Wochenstunden +- [ ] ArbZG-Regeln: Max. 10h/Tag, Pause ab 6h/9h, 11h Mindestruhezeit +- [ ] Überstunden-Konto: auto-Berechnung bei Genehmigung +- [ ] Manuelle Zeiteinträge (mit Berechtigung) +- [ ] Export: CSV · XLSX · PDF + +#### agent-04-dashboard: Dashboards & Reports +- [ ] Mitarbeiter-Dashboard (eigene KPIs: Arbeitszeit heute, Urlaubskonto, Überstunden) +- [ ] Manager-Dashboard (Teamübersicht: wer ist heute da, wer fehlt, offene Anträge) +- [ ] Admin-Dashboard (Firmen-KPIs: Auslastung, Fehlzeiten, Bradford-Heatmap) +- [ ] Erweiterte Exports: PDF (WeasyPrint), XLSX (openpyxl) + +--- + +### Priorität 3 – HR-Erweiterungen + +#### Personalnummer Phase 2–5 +- [ ] `GET /users/by-personnel/{number}` – Lookup für externe Integrationen +- [ ] CSV-Import-UI mit Validierungs-Vorschau +- [ ] Personalnummer in allen Exports (CSV/XLSX/PDF) +- [ ] Kiosk-Login per Personalnummer + PIN + +#### Sondervertretungen – Erweiterungen +- [ ] Jahresübersicht aller aktiven Zuweisungen +- [ ] Bulk-Import via CSV (Spalten: Pers.-Nr., Von, Bis, Faktor, Ziel, Bezeichnung) +- [ ] 🏅-Badge in Mitarbeiter-Tabelle (UsersPage) bei aktiver Zuweisung +- [ ] Verknüpfung Payroll-Report ↔ Sondervertretungs-Seite + +--- + +### Priorität 4 – Mobile & Kiosk + +#### Android App (Flutter) +**Warum:** Mitarbeiter ohne PC-Zugang brauchen eine native App für Zeiterfassung unterwegs. + +- [ ] Flutter-App `mobile/` im Monorepo +- [ ] Employee-only: Stempel In/Out/Pause, Tagesübersicht, Überstundenkonto +- [ ] Offline-Modus: Hive-Queue, Auto-Sync bei Netzwerkwiederkehr +- [ ] Direkt-APK (Sideloading, kein Play Store) +- [ ] Konfigurierbarer Server-URL beim ersten Start + +--- + +### Priorität 5 – Integrationen & Compliance + +#### LDAP-Sync (agent-09, geplant) +- [ ] Automatischer User-Sync aus Active Directory / OpenLDAP +- [ ] Mapping: `employeeNumber` → Personalnummer, `department` → Abteilung +- [ ] Konflikt-Handling: Personalnr.-Kollision → Fehler (kein Override) + +#### CalDAV-Erweiterungen +- [ ] Urlaubs-Events automatisch in Nextcloud-Kalender schreiben (bei Genehmigung) +- [ ] Abwesenheits-Template mit Platzhalter `$personalnummer` und `$kuerzel` + +#### DSGVO-Hilfsmittel +- [ ] Datenexport pro Mitarbeiter (Art. 20 DSGVO) +- [ ] Löschfristen-Konfiguration + automatische Anonymisierung alter Einträge + +--- + +## 💡 Ideen-Backlog (nicht priorisiert) + +| Idee | Notiz | +|---|---| +| Dienstplan-Modul | Schichtplanung mit Drag & Drop, Wochen-/Monatsansicht | +| Lohnabrechnung-Export | DATEV-Format, Steuerberater-CSV mit §3b-Stunden | +| Bereitschafts-Erfassung | Rufbereitschaft vs. Bereitschaftsdienst (25–95%-Quote) | +| Slack/Teams-Integration | Abwesenheits-Notifications, Genehmigungs-Workflow im Chat | +| Mehrsprachigkeit (i18n) | EN/FR/PL als erste Sprachen | +| Multi-Mandanten-Admin | SUPER_ADMIN-Übersicht aller Firmen + Nutzung-KPIs | +| Kiosk Anomalie-Detection | Frequenz-Threshold, Geo-Inkonsistenz, AuditLog-Alarm | + +--- + +## Migrations-Übersicht + +| Migration | Inhalt | Status | +|---|---|---| +| 0001–0016 | Auth, Users, Abwesenheiten, TOTP | ✅ deployed | +| 0018 | Kiosk-Geräte | ✅ deployed | +| 0019 | Manual-Entry-Berechtigung | ✅ deployed | +| 0020 | Personalnummer | ✅ deployed | +| 0021 | Kiosk-Security (mTLS-Vorstufe) | ✅ deployed | +| 0022 | Krankmeldung-Konfiguration | ✅ deployed | +| 0023 | Busylight-Token | ✅ deployed | +| 0024 | Row Level Security | ✅ deployed | +| 0025 | Kiosk NFC-UID | ✅ deployed | +| 0026 | Security-Fixes (LDAP TLS, TOTP-Länge) | ✅ deployed | +| 0027 | Mobile-Stamping | ✅ deployed | +| 0028 | FZA-Konfiguration (Overdraft, Warnschwelle) | ✅ deployed | +| 0029 | Sondervertretungs-Faktoren | ✅ deployed | +| **0030** | Kiosk-Härtung Ed25519 | 🔜 agent-08 |