Stand: [AUSFÜLLEN: Datum der letzten anwaltlichen Freigabe, Format TT.MM.JJJJ] · Version [AUSFÜLLEN: z. B. 1.0.0]
Die folgenden Hinweise geben einen einfachen Überblick darüber, was mit Ihren personenbezogenen Daten passiert, wenn Sie diese Webanwendung nutzen. Ausführliche Informationen finden Sie in der ausführlichen Datenschutzerklärung weiter unten.
Siehe Abschnitt 2.
Siehe Abschnitt 3.
Siehe Abschnitt 5.
Siehe Abschnitt 11.
[AUSFÜLLEN: Vollständiger Firmenname]
[AUSFÜLLEN: Straße + Hausnummer]
[AUSFÜLLEN: PLZ + Ort]
Telefon: [AUSFÜLLEN: +49 (Vorwahl) Nummer]
E-Mail: [AUSFÜLLEN: datenschutz@ics-group.eu]
[AUSFÜLLEN, sofern gemäß Art. 37 DSGVO bestellungspflichtig — prüfen]:
Name, postalische Anschrift, E-Mail des DSB.
Bestellungspflichtig, wenn die Kerntätigkeit in der umfangreichen
Verarbeitung besonderer Datenkategorien (Art. 9) besteht oder die
Verarbeitungstätigkeit Risiken für Betroffene birgt. Diese App verarbeitet
u. a. Gesundheitsdaten (Art. 9 — siehe /requests sick/parental_leave),
eine DSB-Bestellung wird daher EMPFOHLEN, sofern kein internes
Datenschutz-Team die Funktion übernimmt.
Die folgende Tabelle führt alle Datenkategorien, Verarbeitungszwecke und Rechtsgrundlagen gemäß Art. 13(1)(c) DSGVO auf.
Stammdaten (Name, E-Mail, Abteilung, Rolle) Konto-Verwaltung, Authentifizierung Art. 6(1)(b) DSGVO (Vertrag) / § 26(1) BDSG Schichtpläne, Dienstzeiten, Kalender-Token Arbeitszeitorganisation Art. 6(1)(b) DSGVO / § 26(1) BDSG Abwesenheiten (Urlaub, Krank, Elternzeit) HR-Workflow, gesetzliche Aufzeichnungspflicht Art. 6(1)(c) DSGVO (ArbZG, EFZG, MuSchG) + § 26(3) BDSG für besondere Datenkategorien (Art. 9(2)(b)) Bradford-Faktor-Scores und Verlauf (#3198) Frühwarnsystem Krankheitsmuster (Aggregat) — siehe Abschnitt 9 Art. 6(1)(f) DSGVO (berechtigtes Interesse Personalplanung) + Art. 22-Hinweis (siehe Abschnitt 9) Bradford-Opt-Out und Appeal-Status (#3201, #3202) Ausübung des Widerspruchsrechts (Art. 22(3) DSGVO) Art. 22(3) DSGVO + EU AI Act Art. 14(5) Benachrichtigungs-Präferenzen (E-Mail, Teams, ServiceNow) Zustellung dienstlicher Mitteilungen Art. 6(1)(b)/(f) DSGVO — Widerspruch jederzeit möglich Audit-Logs, Sitzungs-IDs, IP-Adressen (gehasht), Bradford-Audit-Trail (#3199) Sicherheit, Forensik, gesetzliche Aufbewahrung, KI-Compliance Art. 6(1)(c) DSGVO i. V. m. § 32 BDSG + Art. 6(1)(f) (berechtigtes Interesse IT-Sicherheit) + EU AI Act Art. 12Inhalte von Krankmeldungen (Diagnose-Hinweise im Kommentarfeld) und Elternzeit-Anträgen (Begründungen, die Familienplanung betreffen) werden als besondere Kategorien personenbezogener Daten gemäß Art. 9 DSGVO mit AES-256-GCM verschlüsselt persistiert. Der Schlüssel wird per HKDF aus AUTH_ENCRYPTION_KEY abgeleitet (eigener Salt pro Datensatz, keine direkte Schlüssel-Wiederverwendung). Der Zugriff auf die entschlüsselten Inhalte ist auf Mitarbeiter mit Admin-Rolle beschränkt (Compliance-Funktion gemäß § 26(3) BDSG).
Hinweis: Die Aggregat-Werte für den Bradford-Faktor (Anzahl Krankheits-Episoden, Anzahl Tage) werden aus Datenschutzgründen NICHT aus den verschlüsselten Kommentarfeldern abgeleitet, sondern ausschließlich aus der strukturierten Abwesenheits-Tabelle (Datenkategorie „Abwesenheiten" in Abschnitt 3).
Diese Webanwendung verwendet technisch notwendige Cookies sowie lokale Speicherung (localStorage) zur Authentifizierung, Sicherheit und UI-State-Erhaltung. Es werden keine Tracking-, Analyse- oder Marketing-Cookies gesetzt und keine Daten an Drittanbieter zu Werbezwecken übermittelt.
Die folgenden Cookies werden ausschließlich von dieser Webanwendung (Erstanbieter) gesetzt. Sie sind technisch erforderlich (§ 25(2) Nr. 2 TTDSG) und benötigen daher keine Einwilligung. Rechtsgrundlage ist Art. 6(1)(b) DSGVO (Vertragserfüllung — Login) bzw. Art. 6(1)(f) DSGVO (berechtigtes Interesse — Sicherheit).
authjs.session-token (prod: __Secure-authjs.session-token) JWT-Session-Token zur Authentifizierung des angemeldeten Nutzers. 12 Stunden (konfigurierbar via AUTH_SESSION_MAX_AGE_HOURS) Essenziell (§ 25(2) Nr. 2 TTDSG — für Login zwingend erforderlich) httpOnly — nicht per JavaScript lesbar (Schutz vor XSS-Diebstahl der Session) Art. 6(1)(b) DSGVO authjs.csrf-token (prod: __Host-authjs.csrf-token) Double-Submit-CSRF-Token für Schreib-Requests. Session (bis Browser-Tab geschlossen) Essenziell (§ 25(2) Nr. 2 TTDSG — für Schreib-Requests zwingend erforderlich) Per JavaScript lesbar — zwingend für CSRF-Schutz nach Double-Submit-Pattern (Client-JS liest den Cookie und schickt ihn als X-CSRF-Token-Header) Art. 6(1)(f) DSGVO (IT-Sicherheit) authjs.callback-url (prod: __Secure-authjs.callback-url) Speichert die Ziel-URL für die Weiterleitung nach erfolgreichem Login (Open-Redirect-Schutz). Session (bis Browser-Tab geschlossen) Essenziell (§ 25(2) Nr. 2 TTDSG — Teil des Login-Flows) httpOnly — nicht per JavaScript lesbar (Schutz vor XSS-Manipulation der Ziel-URL) Art. 6(1)(b)/(f) DSGVOHinweis (Cluster #3177 + #3180): Die Spalten Klassifikation und JavaScript-Zugriff wurden ergänzt, um die in TTDSG § 25(2) Nr. 2 geforderte Trennung zwischen essenziellen, funktionalen und analysebezogenen Cookies explizit zu dokumentieren. Derzeit sind alle drei Cookies als essenziell klassifiziert — es gibt keine funktionalen, analyse- oder marketingbezogenen Cookies. Der csrf-Token ist absichtlich nicht httpOnly, weil die NextAuth-CSRF-Defense (Double-Submit-Pattern) JavaScript- Zugriff benötigt; der Diebstahl via XSS ist akzeptabel, weil SameSite=lax + Sec-Fetch-Site-Check (withAuth) die Ausnutzung cross-site verhindern.
In Produktion werden Cookies mit den Prefixen __Secure- und __Host- (RFC 6265bis) ausgestattet. Diese erzwingen Secure-Attribut und beim CSRF-Cookie zusätzlich Path=/ ohne Domain-Attribut — als Schutz gegen Subdomain-Cookie-Injection. In lokalen Dev-Umgebungen (HTTP) entfallen die Prefixe.
Die Anwendung speichert UI-Präferenzen im localStorage des Browsers. Diese Einträge enthalten keine personenbezogenen Daten (ausschließlich anonyme UI-Konfiguration) und dienen der Wiederherstellung der Benutzeroberfläche nach einem Seiten-Reload. Rechtsgrundlage: Art. 6(1)(f) DSGVO (berechtigtes Interesse — benutzerfreundliche UI).
SHIFT_COUNT_KEY Anzahl und Anordnung der Schicht-Gruppen im Schichtplaner Funktional (UI-State) planning/page.tsx PLAN_VIEW_CONFIG_KEY Ansicht-Konfiguration (Wochen-/Monats-/Jahresansicht, Zoom) Funktional (UI-State) planning/page.tsx ics-column-visibility-* Spalten-Ein-/Ausblendung pro Bericht-Typ (anonym) Funktional (UI-State) components/reports/ColumnPicker.tsx SHIFT_GROUPS_KEY Gruppierungs-Auswahl im Schicht-Bericht Funktional (UI-State) components/reports/ShiftsReportTab.tsx ics-sidebar-collapsed Eingeklappt-Zustand der Sidebar-Navigation Funktional (UI-State) stores/ui-store.ts ics-tweaks-storage Power-User-Tweaks (anonyme UI-Flags, Theme-Mode) Funktional (UI-State) stores/tweaks-store.ts (Zustand persist) ics-consent Cookie-Consent-Auswahl (Zeitstempel + Auswahl: alle/essenziell/individual) Erforderlich (Cluster #3175+#3182 — Consent-Nachweis) components/legal/CookieConsentBanner.tsxHinweis (Cluster #3178): Alle localStorage-Einträge sind als funktional (UI-State) klassifiziert — sie speichern ausschließlich anonyme UI-Konfiguration ohne Personenbezug und ohne Drittanbieter-Zugriff. Daher fallen sie NICHT unter TTDSG § 25(1) (Speicherung von Informationen in Endgeräten), sondern unter Art. 6(1)(f) DSGVO (berechtigtes Interesse). Ein Consent-Gate ist nicht erforderlich; die Einträge können jederzeit über Cookie-Einstellungen (im Footer jeder Seite) oder durch manuelles Löschen des Browserspeichers entfernt werden.
Es werden derzeit keine Drittanbieter-Cookies gesetzt und keine Daten an externe Tracking-, Analyse- oder Marketing-Dienste übermittelt. Schriften (Geist, Geist Mono, Inter, Atkinson Hyperlegible) werden über Next.js next/font/local vollständig lokal unter /public/fonts/{geist,geist-mono,inter,atkinson}/ ausgeliefert (Cluster #3151). Es findet kein Netzwerk-Aufruf zu fonts.googleapis.com oder fonts.gstatic.com statt — weder zur Build- noch zur Laufzeit. Der Build läuft komplett offline.
Falls in Zukunft Drittanbieter-Dienste eingebunden werden (z. B. Analytics, Error-Reporting, Payment, CDN), wird dieser Abschnitt im selben Pull-Request aktualisiert und das Cookie-Consent-Banner (siehe §5.5) erweitert die Auswahlmöglichkeiten entsprechend.
Trotz der ausschließlich technisch-notwendigen Cookies und anonymisierten UI-State-Einträge (die nach § 25(2) Nr. 2 TTDSG keine Einwilligung erfordern) zeigt die Anwendung beim ersten Besuch ein Cookie-Consent-Banner mit drei gleichwertigen Auswahlmöglichkeiten:
Die Auswahl wird im localStorage-Schlüssel ics-consent (Format: JSON mit Zeitstempel + Auswahl + Policy-Version) gespeichert. Das Banner erscheint erneut, sobald der Nutzer über den Footer-Link Cookie-Einstellungen oder die Profilseite die Auswahl ändert (Widerrufsrecht, Art. 7(3) DSGVO + EDPB Guidelines 05/2020 §83).
Authentifizierungs-Cookies werden unabhängig von der Auswahl gesetzt, weil sie für den Login zwingend erforderlich sind (§ 25(2) Nr. 2 TTDSG). Eine Ablehnung des Banners blockiert daher nicht den Login — der Nutzer kann die Anwendung auch ohne aktive Consent-Bestätigung nutzen, verliert dann aber die UI-Präferenzen (Theme, Sidebar-Zustand, Spalten-Sichtbarkeit).
Sie können Ihre Cookie- und Consent-Auswahl jederzeit über die folgenden Wege ändern oder widerrufen:
Beim Widerruf werden nur die UI-Präferenzen (Theme, Sidebar-Zustand, Spalten-Sichtbarkeit) auf die Standardwerte zurückgesetzt. Auth-Cookies bleiben so lange aktiv, bis die Session abläuft (12 h) oder Sie sich aktiv abmelden — ein Widerruf des Cookie-Consent berührt nicht die Laufzeit der JWT-Session.
Für die auf Ihrer Einwilligung beruhenden Verarbeitungen (Geburtstags-Anzeige im Dashboard und E-Mail-Benachrichtigungen für die vier Kategorien Schichtanträge, Schichtpläne, Zeiterfassung und Bradford-Faktor) können Sie Ihre Einwilligung jederzeit mit Wirkung für die Zukunft widerrufen (Art. 7(3) DSGVO, EDPB Guidelines 05/2020 §83 — „the withdrawal of consent shall be as easy as granting it"). Folgende Widerrufswege stehen zur Verfügung:
Beim Widerruf werden die jeweiligen Spalten in der Datenbank auf den Standardwert (false) zurückgesetzt. Bei scope=birthday_display werden die Granular-Toggles „Tag" und „Jahr" automatisch mit deaktiviert (Hierarchie: Geburtstag aus → Tag und Jahr zwingend aus). Bei scope=notifications_email werden alle vier Benachrichtigungs-Kategorien sowie der E-Mail-Sub-Channel gemeinsam deaktiviert.
Jeder Widerruf wird in der user_consent_log-Tabelle mit Zeitstempel, IP-Hash (HMAC-SHA256 mit AUDIT_HASH_SALT), User-Agent und optionalem Freitext als Grund auditierbar protokolliert (Art. 7(1) DSGVO — Nachweispflicht). Die Rechtmäßigkeit der bis zum Widerruf erfolgten Verarbeitung bleibt vom Widerruf unberührt (Art. 7(3) Satz 2 DSGVO).
Ein Widerruf hat keine Auswirkung auf die Funktion der Anwendung: Sie können sich weiterhin anmelden, Schichten bearbeiten und Anträge stellen. Lediglich die Geburtstags-Anzeige anderer Nutzer im Dashboard und/oder der E-Mail-Versand entfallen.
Personenbezogene Daten werden — soweit zur Erfüllung der genannten Zwecke erforderlich — an folgende Empfänger übermittelt:
Sofern Daten in Drittländer (insbesondere USA) übertragen werden, geschieht dies auf folgenden Rechtsgrundlagen:
[AUSFÜLLEN: Konkretes Land je Empfänger, Garantie-Typ, Link zur SCC/Zertifizierung]
Personenbezogene Daten werden gemäß den gesetzlichen Aufbewahrungsfristen und internen Löschkonzepten gespeichert und anschließend gelöscht oder anonymisiert:
Nach Ablauf der Frist erfolgt entweder Löschung gemäß Art. 17 DSGVO oder Anonymisierung gemäß Art. 89 DSGVO.
Bradford-Faktor: Die Anwendung berechnet aus der Krankheitshistorie einen Bradford-Faktor-Score und benachrichtigt Vorgesetzte, wenn ein Schwellenwert überschritten wird. Es handelt sich um ein Frühwarn-System, das einen Menschen (Personalabteilung) informiert; es trifft KEINE automatisierten Entscheidungen mit Rechtswirkung oder ähnlich erheblicher Beeinträchtigung (Art. 22(1) DSGVO). Die Personalabteilung prüft jeden Fall manuell.
Verarbeitet werden ausschließlich aggregierte Abwesenheits-Daten: Anzahl der Krankheits-Episoden im laufenden Kalenderjahr, Anzahl der dadurch ausgefallenen Arbeitstage und Dauer der einzelnen Episoden. Die Berechnung folgt der Formel Anzahl Episoden² × Tage. Abwesenheiten, die unter das Allgemeine Gleichbehandlungsgesetz (AGG) fallen (z. B. nachgewiesene Schwerbehinderung, Mutterschutz, Pflegezeiten), werden nicht in den Score eingerechnet — die Anzahl ausgeschlossener Episoden wird im Audit-Log protokolliert (excluded_agg_count).
Die folgenden Schwellenwerte kommen zur Anwendung (können von der Personalverantwortung über settings/bradford_thresholds konfiguriert werden; die hier angegebenen Werte sind die Standard-Konfiguration):
Die aktuell gültigen Schwellenwerte sowie Ihre aktuelle Score-Position werden Ihnen im Profil dauerhaft angezeigt (#3204).
Vor jeder Eskalation in die Stufen „Gespräch" oder „Maßnahme" legt das System einen Pflicht-Review-Datensatz an (ai_system_reviews). Die Führungskraft MUSS die algorithmische Empfehlung im UI bestätigen oder überschreiben, bevor Maßnahmen ergriffen werden.
Sie haben das Recht, der automatisierten Bewertungs-Vorbereitung zu widersprechen. Wir stellen Ihnen dazu zwei Wege zur Verfügung:
Zusätzlich haben Sie gemäß Art. 15 DSGVO das Recht auf Auskunft über Ihren Bradford-Score-Verlauf; Sie finden ihn direkt im Profil.
Sie haben gegenüber dem Verantwortlichen folgende Rechte bezüglich Ihrer personenbezogenen Daten:
Unbeschadet eines anderweitigen verwaltungsrechtlichen oder gerichtlichen Rechtsbehelfs steht Ihnen das Recht auf Beschwerde bei einer Aufsichtsbehörde zu, insbesondere in dem Mitgliedstaat Ihres gewöhnlichen Aufenthaltsorts, Ihres Arbeitsplatzes oder des Orts des mutmaßlichen Verstoßes (Art. 77 DSGVO).
Zuständige Aufsichtsbehörde für unser Unternehmen:
[AUSFÜLLEN: Name und Adresse der zuständigen Landesdatenschutzbehörde, z. B.
„Landesbeauftragte für den Datenschutz und die Informationsfreiheit
[Land], [Adresse]"]
Die Bereitstellung der Stammdaten, Schichtpläne und Abwesenheitsdaten ist für die Durchführung des Beschäftigungsverhältnisses erforderlich (§ 26(1) BDSG). Ohne diese Daten kann die Schichtplanung nicht durchgeführt werden.
Zur Absicherung gegen Brute-Force-Angriffe, automatisierte Missbrauchs- versuche und unbeabsichtigte Lastspitzen werden auf sämtlichen API-Endpunkten Rate-Limits (Sliding-Window) durchgesetzt. Diese werden in src/lib/rate-limit.ts zentral konfiguriert und sind nach Feature-Namespaces getrennt:
auth, login, mfa, reauth, password, delete Authentifizierungs- Brute-Force-Schutz (per IP und/oder Email-Hash) data-export DSGVO Art. 15 Export — Begrenzung auf wenige Aufrufe pro Stunde report Berichte (PDF/CSV/XLSX) — Schutz vor ressourcenintensiven Generierungen integration, sync, webhook ServiceNow / LDAP / OIDC- Synchronisationen und eingehende Webhooks swap, requests, time-entries Antragswesen und Zeiterfassungs-Mutationen (eigener Namespace für Time-Entries nach ArbZG §6) dashboard, planning, notifications, employees, models Mutationen an Stammdaten und Konfiguration admin Admin-Aktionen (Backup-Restore, Import, Konfigurations-Änderungen) public Unauthentifizierte Endpoints (z. B. OIDC-Provider-Liste) seating, kitchen, whistleblower Spezialisierte Namespaces (Seating-Desk-Locks, Küchendienst, anonyme Whistleblower-Meldungen nach HinSchG §6)Bei Überschreitung eines Limits wird die Anfrage mit HTTP 429 (Too Many Requests) und einem Retry-After-Header abgelehnt. Rate-Limits werden in einer Redis-Datenbank gespeichert; bei Redis-Ausfall greift Fail-Closed (Anfrage wird abgelehnt), sofern das Feature nicht explizit via RATE_LIMIT_FAIL_OPEN_FEATURES auf Fail-Open konfiguriert ist.
Die konkreten Schwellenwerte (z. B. 20 Aufrufe pro 5 min für Abwesenheits-Anlage, 3 Aufrufe pro 5 min für LDAP-Test) sind in den jeweiligen Route-Handlern als Argumente an checkRateLimit() ersichtlich und können vom Betreiber per ENV-Variable angepasst werden.
Diese Datenschutzerklärung wurde automatisch auf den Pflicht-Stand gemäß Art. 13 DSGVO gebracht (sec #3026) und um die implementierten Features ergänzt: Bradford-Faktor (#3198, #3199, #3201, #3202, #3203, #3204), Cookie- und localStorage-Disclosure (#3173, #3174), Drittanbieter-Disclosure (#3181), Rate-Limit-Disclosure (#3159), Cookie-Klassifikation + httpOnly-Spalte (#3177, #3180), Consent-Banner + Widerruf (#3175, #3182) sowie dedizierte /cookies-Route (#3179). Der Betreiber ist verpflichtet, jede als [AUSFÜLLEN] markierte Sektion vor Go-Live mit den tatsächlichen Daten des Verantwortlichen, der Aufsichtsbehörde und der Subdienstleister zu füllen. Hinweis: Bußgeldrahmen bei Verstoß gegen Art. 13 DSGVO gemäß Art. 83(5)(b) DSGVO: bis zu 20 Mio. € oder 4 % des Jahresumsatzes.