Dieses Dokument ist ein technisches Referenzdokument nach Art. 30 DSGVO (Verzeichnis von Verarbeitungstätigkeiten) und richtet sich an Datenschutzbeauftragte, Aufsichtsbehörden und technisch versierte Verantwortliche. Es beschreibt die Verarbeitungstätigkeiten aus Sicht des Auftragsverarbeiters Benyamin Jafari / Clean Clock.
§1 Datenkategorien und Datenbankfelder
1.1 Benutzer- und Authentifizierungsdaten
Feld/Tabelle
Typ
Beschreibung
Frist
auth.users.id
UUID
Eindeutige Benutzer-ID (Supabase Auth)
Vertragsende + 12 Monate
auth.users.email
text
E-Mail-Adresse (Anmeldung)
Vertragsende + 12 Monate
auth.users.encrypted_password
text
bcrypt-Hash des Passworts
Vertragsende + 12 Monate
auth.sessions.*
Tabelle
Aktive Sitzungen, Refresh-Tokens
Session-Ablauf (JWT: 1h / Refresh: 30d)
public.profiles.id
UUID
Profil-ID (referenziert auth.users)
Vertragsende
public.profiles.full_name
text
Vollständiger Name des Nutzers
Vertragsende + 12 Monate (Löschantrag)
public.profiles.role
enum
Rolle: admin | employee
Vertragsende
public.profiles.company_id
UUID
Zugehörige Unternehmens-ID
Vertragsende
1.2 Zeiterfassungsdaten
Feld/Tabelle
Typ
Beschreibung
Frist
public.time_entries.id
UUID
Eindeutige ID des Zeiteintrags
Gesetzliche Aufbewahrungsfrist (6–10 J.)
public.time_entries.user_id
UUID (FK)
Referenz auf Benutzer-ID
Wie Zeiteintrag
public.time_entries.clock_in
timestamptz
Einstempelzeitpunkt (UTC)
Gesetzliche Aufbewahrungsfrist
public.time_entries.clock_out
timestamptz
Ausstempelzeitpunkt (UTC), NULL wenn aktiv
Gesetzliche Aufbewahrungsfrist
public.time_entries.gps_lat
numeric(9,6)
Breitengrad bei Einstempelung (optional)
30 Tage → automatisch NULL
public.time_entries.gps_lng
numeric(9,6)
Längengrad bei Einstempelung (optional)
30 Tage → automatisch NULL
public.time_entries.gps_accuracy
numeric
GPS-Genauigkeit in Metern
30 Tage → automatisch NULL
public.time_entries.notes
text
Optionaler Kommentar des Mitarbeiters
Gesetzliche Aufbewahrungsfrist
1.3 Pausenzeiten
Feld/Tabelle
Typ
Beschreibung
Frist
public.breaks.id
UUID
Pausen-ID
Kaskadierende Löschung mit Zeiteintrag
public.breaks.time_entry_id
UUID (FK)
Referenz auf übergeordneten Zeiteintrag
Kaskadierende Löschung
public.breaks.break_start
timestamptz
Pausenbeginn
Kaskadierende Löschung
public.breaks.break_end
timestamptz
Pausenende (NULL wenn aktiv)
Kaskadierende Löschung
1.4 GPS-Override-Anfragen
Feld/Tabelle
Typ
Beschreibung
Frist
public.gps_override_requests.id
UUID
Antrags-ID
90 Tage
public.gps_override_requests.user_id
UUID (FK)
Antragsteller
90 Tage
public.gps_override_requests.time_entry_id
UUID (FK)
Betroffener Zeiteintrag
90 Tage
public.gps_override_requests.reason
text
Begründung des Mitarbeiters
90 Tage
public.gps_override_requests.status
enum
pending | approved | rejected
90 Tage
public.gps_override_requests.created_at
timestamptz
Antragsdatum
90 Tage
1.5 Konto-Löschungsanfragen
Feld/Tabelle
Typ
Beschreibung
Frist
public.account_deletion_requests.id
UUID
Antrags-ID
12 Monate (bis Löschung abgeschlossen)
public.account_deletion_requests.user_id
UUID (FK)
Betroffene Benutzer-ID
Bis Löschung abgeschlossen
public.account_deletion_requests.requested_at
timestamptz
Antragsdatum
Bis Löschung abgeschlossen
public.account_deletion_requests.completed_at
timestamptz
Datum der abgeschlossenen Löschung
Audit-Nachweis (5 Jahre)
1.6 GPS-Attestierungs-Log
Feld/Tabelle
Typ
Beschreibung
Frist
public.gps_attestations.id
UUID
Attestierungs-ID
Dauerhaft (Compliance-Nachweis)
public.gps_attestations.company_id
UUID (FK)
Attiestierendes Unternehmen
Dauerhaft
public.gps_attestations.attested_by
UUID (FK)
Administrator, der attestiert hat
Dauerhaft
public.gps_attestations.gps_mode
enum
off | soft | hard
Dauerhaft
public.gps_attestations.legal_basis
text
Vom Admin angegebene Rechtsgrundlage
Dauerhaft
public.gps_attestations.version
integer
Versionsnummer der Attestierung
Dauerhaft
public.gps_attestations.created_at
timestamptz
Zeitpunkt der Attestierung
Dauerhaft
§2 Aufbewahrungsfristen und automatische Redaktion
2.1 Automatisierte Cleanup-Funktionen
Die folgenden Datenbankfunktionen laufen täglich automatisch via pg_cron:
Funktion
Zeitplan
Aktion
redact_old_gps_in_time_entries()
Täglich 02:00 UTC
Setzt gps_lat, gps_lng, gps_accuracy auf NULL für Zeiteinträge, deren clock_in älter als 30 Tage ist
cleanup_old_gps_override_requests()
Täglich 02:30 UTC
Löscht GPS-Override-Anfragen, deren created_at älter als 90 Tage ist
cleanup_completed_deletion_requests()
Täglich 03:00 UTC
Entfernt abgeschlossene Löschungsanfragen nach 12 Monaten; behält completed_at für Audit-Zwecke