feat(overtime): Auszahlungs-Anträge durch Mitarbeiter (opt-in pro Firma)
Security Audit / Node.js Dependency Audit (push) Has been cancelled
Security Audit / Python Dependency Audit (push) Has been cancelled

Mitarbeiter beantragt Überstunden-Auszahlung, HR genehmigt/lehnt ab.
Firmen-Opt-in payout_request_enabled (Default aus - nur HR-Direktbuchung).
Saldo-Abzug erst bei Genehmigung; Reject/Cancel bucht nichts.

- Migration 0042: hours_payouts.status/decided_by/decided_at/rejection_reason
  + companies.payout_request_enabled (nur Spalten, RLS unveraendert)
- Router: POST /hr/payouts/request|{id}/approve|reject|cancel; list status-Filter;
  HR-Direktbuchung bleibt (status approved)
- Frontend: PayoutRequestCard (Selbstbedienung in AbsencesPage), HR-Page
  Status-Spalte + Genehmigen/Ablehnen, CompanySettings-Toggle
- 4 pytest-Cases

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-08 22:43:26 +02:00
co-authored by Claude Opus 4.8
parent 2c57c36abd
commit 65596e80a4
15 changed files with 1134 additions and 96 deletions
+460
View File
@@ -2176,3 +2176,463 @@ Keine Commits in dieser Session.
- frontend/src/pages/TenantsPage.tsx | 30 +++++++++++++++++++++---------
---
## 2026-06-23 01:44 01:44 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- c3cb9ce docs: DEVLOG agent-10 Reseller/Mandantenübersicht
### Geänderte Dateien
- DEVLOG.md | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-06-23 01:45 01:45 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-06-23 01:45 01:47 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-06-23 01:47 01:48 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-06-23 10:45 10:47 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-06-23 10:54 11:01 (7m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-06-23 11:04 11:35 (30m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-06-23 11:46 11:48 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- 3b2df1c feat: agent-11 PR1 Vertretung, Storno-Re-Genehmigung, Kommentare
### Geänderte Dateien
- backend/app/models/__init__.py | 2 ++
- backend/app/models/absence.py | 11 +++---
- backend/app/models/absence_comment.py | 44 +++++++++++++++++++++++
- backend/app/routers/absences.py | 43 ++++++++++++++++++++++
- backend/app/routers/users.py | 21 +++++++++++
- backend/app/schemas/absence.py | 22 ++++++++++++
- backend/app/services/absence_service.py | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
- backend/app/services/caldav_service.py | 28 +++++++++++++++
- backend/app/services/email_service.py | 22 ++++++++++++
- backend/migrations/versions/0035_absence_comments.py | 61 +++++++++++++++++++++++++++++++
- backend/tests/conftest.py | 2 +-
- backend/tests/test_absences.py | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/src/components/absences/AbsenceCommentsModal.tsx | 83 ++++++++++++++++++++++++++++++++++++++++++
- frontend/src/components/absences/AbsenceModals.tsx | 17 ++++++++-
- frontend/src/hooks/useAbsences.ts | 22 ++++++++----
- frontend/src/pages/AbsencesPage.tsx | 40 +++++++++++++++++----
- frontend/src/types/absence.ts | 12 ++++++-
- frontend/src/utils/calendar.ts | 2 ++
---
## 2026-06-23 11:48 12:04 (15m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- c9c197d feat: agent-11 PR2 Urlaubsanspruch (Verfall scharf, Pro-rata, Teilzeit)
### Geänderte Dateien
- backend/app/models/company.py | 8 ++++++++
- backend/app/models/user.py | 8 ++++++--
- backend/app/routers/absences.py | 16 ++++------------
- backend/app/schemas/absence.py | 2 ++
- backend/app/schemas/company.py | 6 ++++++
- backend/app/schemas/user.py | 7 ++++++-
- backend/app/services/absence_service.py | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
- backend/migrations/versions/0036_vacation_entitlement.py | 36 ++++++++++++++++++++++++++++++++++++
- backend/tests/test_absences.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/src/pages/AbsencesPage.tsx | 7 +++++--
- frontend/src/pages/CompanySettingsPage.tsx | 41 +++++++++++++++++++++++++++++++++++++++++
- frontend/src/pages/UsersPage.tsx | 18 ++++++++++++++++++
- frontend/src/types/absence.ts | 1 +
---
## 2026-06-23 12:06 12:39 (33m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- c83fb31 feat: agent-11 PR3 Scheduler + Erinnerungs-Mails + Notification-Prefs
### Geänderte Dateien
- backend/app/core/config.py | 5 +++
- backend/app/core/notifications.py | 27 ++++++++++++++++
- backend/app/main.py | 9 ++++++
- backend/app/models/user.py | 5 ++-
- backend/app/routers/absences.py | 18 ++++++-----
- backend/app/routers/companies.py | 13 ++++++++
- backend/app/routers/users.py | 28 +++++++++++++++++
- backend/app/schemas/user.py | 10 ++++++
- backend/app/services/absence_service.py | 3 ++
- backend/app/services/email_service.py | 59 +++++++++++++++++++++++++++++++++++
- backend/app/services/scheduler_service.py | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- backend/migrations/versions/0037_notification_prefs.py | 24 +++++++++++++++
- backend/requirements.txt | 1 +
- backend/tests/test_reminders.py | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/src/pages/ProfilePage.tsx | 36 +++++++++++++++++++++-
---
## 2026-06-23 12:41 13:19 (38m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- 450dbdb feat: agent-12 Zwei-Stufen-Genehmigung für Abwesenheiten
### Geänderte Dateien
- backend/app/models/absence.py | 6 ++++++
- backend/app/models/company.py | 5 +++++
- backend/app/schemas/absence.py | 1 +
- backend/app/schemas/company.py | 4 ++++
- backend/app/services/absence_service.py | 42 +++++++++++++++++++++++++++++++++++++-----
- backend/app/services/scheduler_service.py | 5 ++++-
- backend/migrations/versions/0038_two_stage_approval.py | 39 +++++++++++++++++++++++++++++++++++++++
- backend/tests/test_absences.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/src/pages/AbsencesPage.tsx | 6 ++++++
- frontend/src/pages/CompanySettingsPage.tsx | 28 +++++++++++++++++++++++++++-
- frontend/src/types/absence.ts | 1 +
- frontend/src/utils/calendar.ts | 2 ++
---
## 2026-06-23 13:20 13:24 (4m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- 6a34bd1 fix: AuditLogPage React-key am Listen-Fragment (Konsolen-Warnung)
### Geänderte Dateien
- frontend/src/pages/AuditLogPage.tsx | 9 ++++-----
---
## 2026-06-23 13:24 13:28 (4m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- e1d423e feat: agent-04 Team-Dashboard für Manager/HR im Frontend angebunden
### Geänderte Dateien
- frontend/src/pages/DashboardPage.tsx | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-06-23 13:45 14:07 (21m)
**Beschreibung:** Claude Code Session
**Projekt:** backend
### Commits
- fe00eb4 fix(security/dsgvo): RLS für hours_payouts nachgezogen (Mandantentrennung)
- 31e39c6 fix(security): K-5 LDAP/CalDAV/SMTP-Verschlüsselung auf zentralen Datenschlüssel
### Geänderte Dateien
- backend/migrations/versions/0039_rls_hours_payouts.py | 43 +++++++++++++++++++++++++++++++++++++++++++
- backend/tests/conftest.py | 2 +-
- backend/tests/test_rls.py | 28 ++++++++++++++++++++++++++++
---
## 2026-06-23 14:23 14:31 (8m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- 2af2269 feat(dsgvo): Art. 17 Anonymisierung von Mitarbeiterkonten
### Geänderte Dateien
- backend/app/models/user.py | 3 +++
- backend/app/routers/users.py | 12 ++++++++++++
- backend/app/schemas/user.py | 1 +
- backend/app/services/user_service.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
- backend/migrations/versions/0040_user_anonymization.py | 23 +++++++++++++++++++++++
- backend/tests/test_users.py | 35 +++++++++++++++++++++++++++++++++++
- frontend/src/pages/UsersPage.tsx | 33 +++++++++++++++++++++++++++++++--
---
## 2026-06-23 14:31 14:32 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- backend/app/models/user.py | 3 +++
- backend/app/routers/users.py | 12 ++++++++++++
- backend/app/schemas/user.py | 1 +
- backend/app/services/user_service.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
- backend/migrations/versions/0040_user_anonymization.py | 23 +++++++++++++++++++++++
- backend/tests/test_users.py | 35 +++++++++++++++++++++++++++++++++++
- frontend/src/pages/UsersPage.tsx | 33 +++++++++++++++++++++++++++++++--
---
## 2026-06-23 14:36 21:41 (7h 04m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- backend/app/models/user.py | 3 ++
- backend/app/routers/users.py | 12 ++++++
- backend/app/schemas/user.py | 1 +
- backend/app/services/user_service.py | 48 ++++++++++++++++++++++
- .../migrations/versions/0040_user_anonymization.py | 23 +++++++++++
- backend/tests/test_users.py | 35 ++++++++++++++++
- frontend/src/pages/UsersPage.tsx | 33 ++++++++++++++-
---
## 2026-06-23 22:07 22:07 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** frontend
### Commits
- 89d85a9 feat(ui): Navigation neu strukturiert (flache Topbar + Verwaltung-Menü + /settings)
### Geänderte Dateien
- frontend/src/App.tsx | 2 ++
- frontend/src/components/Layout.tsx | 150 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------
- frontend/src/components/navConfig.ts | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/src/pages/SettingsPage.tsx | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-06-23 22:25 22:28 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- add154b refactor(ui): Verwaltung-Dropdown aufgelöst Berichte flach, Rest in /settings
### Geänderte Dateien
- frontend/src/components/Layout.tsx | 60 ++++--------------------------------------------------------
- frontend/src/components/navConfig.ts | 27 +++++++++++++++++----------
---
## 2026-06-23 22:34 22:35 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- 1978d58 fix(payouts): 500 in GET /hr/payouts computed Felder als optional
### Geänderte Dateien
- backend/app/schemas/hours_payout.py | 4 ++--
---
## 2026-06-23 23:22 23:22 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- backend/app/schemas/hours_payout.py | 4 ++--
---
## 2026-07-08 14:12 14:12 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- backend/app/schemas/hours_payout.py | 4 ++--
---
## 2026-07-08 14:14 14:15 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- backend/app/schemas/hours_payout.py | 4 ++--
---
## 2026-07-08 16:02 16:06 (3m)
**Beschreibung:** Claude Code Session
**Projekt:** frontend
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- backend/app/schemas/hours_payout.py | 4 ++--
---
## 2026-07-08 16:09 16:09 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- backend/app/schemas/hours_payout.py | 4 ++--
---
## 2026-07-08 16:11 16:13 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- 43ebc83 feat(ical): abonnierbarer read-only Kalender-Feed pro Nutzer
### Geänderte Dateien
- backend/app/main.py | 2 ++
- backend/app/models/user.py | 4 ++++
- backend/app/routers/ical.py | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- backend/migrations/versions/0041_ical_token.py | 29 +++++++++++++++++++++++++++++
- backend/tests/test_ical.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/src/pages/ProfilePage.tsx | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-07-08 16:15 16:16 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- backend/app/main.py | 2 ++
- backend/app/models/user.py | 4 ++++
- backend/app/routers/ical.py | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- backend/migrations/versions/0041_ical_token.py | 29 +++++++++++++++++++++++++++++
- backend/tests/test_ical.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/src/pages/ProfilePage.tsx | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-07-08 16:16 16:20 (4m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- backend/app/main.py | 2 ++
- backend/app/models/user.py | 4 ++++
- backend/app/routers/ical.py | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- backend/migrations/versions/0041_ical_token.py | 29 +++++++++++++++++++++++++++++
- backend/tests/test_ical.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/src/pages/ProfilePage.tsx | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-07-08 16:23 16:30 (7m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- f24b25b chore(deploy): entkoppelte Self-Update-Skripte pro Server
### Geänderte Dateien
- deploy.sh | 121 +++++-------------------------------
- push-frontend.sh | 49 +++++++++++++++
- server-update.sh | 68 ++++++++++++++++++++
- update.sh | 562 ++++-----------------------------------------------------------------------------------------------------------------------------------------------------------------
---
## 2026-07-08 16:31 16:34 (3m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- fad27cb fix(deploy): server-update.sh Health-Check mit Retry (Worker-Startzeit)
### Geänderte Dateien
- server-update.sh | 11 +++++++++--
---
## 2026-07-08 16:39 16:48 (8m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- 2c57c36 fix(deploy): server-update.sh re-exec nach git pull (Self-Edit-Falle)
### Geänderte Dateien
- server-update.sh | 14 ++++++++++----
---
## 2026-07-08 16:52 16:53 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- server-update.sh | 14 ++++++++++----
---
## 2026-07-08 17:10 17:12 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- server-update.sh | 14 ++++++++++----
---