Statt Hard-Delete (kollidiert mit Lohn-/Steuer-Aufbewahrung) werden bei DSGVO-Löschanfrage die personenbezogenen Felder der bestehenden User-Zeile überschrieben; referenzierte Daten (Zeit/Abwesenheit/Auszahlung/AuditLog) bleiben entkoppelt erhalten. - users.anonymized_at (Migration 0040); UserOut.anonymized_at. - user_service.anonymize_user: überschreibt Name/E-Mail (eindeutig anon-<id>@deleted.local), entfernt Auth-Material (Passwort/PIN/QR/NFC/TOTP/LDAP-DN), is_active=False, löscht Sessions, AuditLog 'user_anonymized'. Personalnummer bleibt reserviert (kein Personenbezug mehr). Selbst-Anonymisierung (400), Doppelanonymisierung/Reaktivierung anonymisierter Konten (409). - POST /users/{id}/anonymize (COMPANY_ADMIN/SUPER_ADMIN, mandantengeprüft). - UsersPage: "Anonymisieren"-Button mit Sicherheitsabfrage + "Anonymisiert"-Badge. 193/193 Tests grün. Deployed 137 + 164. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Stand: agent-06 (Audit-Log), agent-05 (Krankmeldung), agent-07 Phase 1 (Personalnummer), Busylight-Pull-Integration, TOTP/2FA, Abwesenheiten, Zeiterfassung, Kiosk-Grundgerüst. Migrations 0001–0023 deployed auf 192.168.1.137 + .164. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>