""" DSFA checks — Art. 35 DSGVO (Datenschutz-Folgenabschaetzung). Level 1: Pflichtangabe erwaehnt? Level 2: Pflichtangabe korrekt/vollstaendig? """ DSFA_CHECKLIST = [ # ── L1: Schwellwertanalyse ──────────────────────────────────────── { "id": "trigger", "label": "Schwellwertanalyse / Ausloesepruefung (Art. 35(1))", "level": 1, "parent": None, "patterns": [ r"art\.\s*35\s*(?:abs|absatz)?\s*\.?\s*1", r"hohes\s+risiko", r"voraussichtlich.*risiko", r"schwellwert", r"folgen.*(?:verarbeitung|schutz).*personenbezogen", ], "severity": "HIGH", "hint": "Es fehlt eine Schwellwertanalyse gemaess Art. 35 Abs. 1 DSGVO. Beschreiben Sie, warum die Verarbeitung voraussichtlich ein hohes Risiko fuer die Rechte und Freiheiten natuerlicher Personen birgt und eine DSFA erforderlich ist.", }, # ── L1: Beschreibung der Verarbeitungsvorgaenge ─────────────────── { "id": "description", "label": "Beschreibung der Verarbeitungsvorgaenge (Art. 35(7)(a))", "level": 1, "parent": None, "patterns": [ r"beschreibung.*verarbeitung", r"verarbeitungsvorg(?:ae|ä)ng", r"systematische\s+beschreibung", r"gegenstand.*verarbeitung", r"social\s*media.*(?:angebot|nutzung|besteht\s+aus)", r"(?:kan(?:ae|ä)le|plattform).*(?:facebook|twitter|instagram|youtube|linkedin|xing)", ], "severity": "HIGH", "hint": "Eine systematische Beschreibung der geplanten Verarbeitungsvorgaenge fehlt. Fuegen Sie einen Abschnitt hinzu, der Art, Umfang, Umstaende und Zweck der Verarbeitung detailliert beschreibt.", }, { "id": "processing_named", "label": "Konkreter Verarbeitungsvorgang benannt", "level": 2, "parent": "description", "patterns": [ r"(?:betrieb|nutzung|verwaltung|pflege)\s+(?:der|von|unserer|eines)\s+(?:seite|profil|kan(?:ae|ä)l|account|fanpage|pr(?:ae|ä)senz)", r"(?:verarbeitung|erhebung|speicherung)\s+(?:von|der)\s+(?:nutzerdaten|personenbezogen|besucher|mitglieder)", r"(?:angebot|social[\-\s]?media[\-\s]?angebot).*(?:besteht\s+aus|umfasst|beinhaltet)", r"kan(?:ae|ä)le\w*\s+(?:facebook|twitter|instagram|youtube|linkedin|xing)", ], "severity": "LOW", "hint": "Der konkrete Verarbeitungsvorgang ist nicht namentlich benannt. Benennen Sie den spezifischen Vorgang (z.B. Betrieb einer Fanpage, Verwaltung eines Social-Media-Kanals) explizit im Dokument.", }, # ── L1: Notwendigkeit / Verhaeltnismaessigkeit ──────────────────── { "id": "necessity", "label": "Notwendigkeit und Verhaeltnismaessigkeit (Art. 35(7)(b))", "level": 1, "parent": None, "patterns": [ r"notwendigkeit", r"verh(?:ae|ä)ltnism(?:ae|ä)(?:ss|ß)igkeit", r"erforderlichkeit", r"zweckbindung", r"geringen?\s+umfang", r"nur\s+(?:die|sehr).*daten.*(?:verarbeitet|erhoben)", r"freiwillig\s+angegeben", ], "severity": "HIGH", "hint": "Die Bewertung der Notwendigkeit und Verhaeltnismaessigkeit der Verarbeitung fehlt. Begruenden Sie, warum die Verarbeitung erforderlich ist und in einem angemessenen Verhaeltnis zum Zweck steht.", }, { "id": "legal_basis_dsfa", "label": "Rechtsgrundlage fuer die Verarbeitung", "level": 2, "parent": "necessity", "patterns": [ r"rechtsgrundlage.*(?:art\.\s*6|berechtigte|einwilligung)", r"art\.\s*6\s*(?:abs\.\s*)?1\s*(?:lit\.\s*)?[a-f]", r"(?:einwilligung|vertrag|berechtigt).*(?:rechtsgrundlage|grundlage)", ], "severity": "LOW", "hint": "Die Rechtsgrundlage der Verarbeitung ist nicht angegeben. Nennen Sie die einschlaegige Rechtsgrundlage nach Art. 6 Abs. 1 DSGVO (z.B. Einwilligung, berechtigtes Interesse, Vertragserfuellung).", }, # ── L1: Risikobewertung ─────────────────────────────────────────── { "id": "risks", "label": "Risikobewertung fuer Betroffene (Art. 35(7)(c))", "level": 1, "parent": None, "patterns": [ r"risiko.*(?:bewertung|analyse|einsch(?:ae|ä)tzung|abw(?:ae|ä)gung)", r"risiken.*(?:rechte|freiheit)", r"eintrittswahrscheinlichkeit", r"schwere.*(?:risiko|auswirkung)", r"hohes\s+risiko.*(?:rechte|freiheit)", r"systematische\s+beobachtung", ], "severity": "HIGH", "hint": "Eine Risikobewertung fuer die Rechte und Freiheiten der Betroffenen fehlt. Fuehren Sie eine strukturierte Risikoanalyse durch, die moegliche Schaeden und deren Auswirkungen auf die betroffenen Personen beschreibt.", }, { "id": "risk_probability", "label": "Eintrittswahrscheinlichkeit bewertet", "level": 2, "parent": "risks", "patterns": [ r"eintrittswahrscheinlichkeit", r"(?:wahrscheinlichkeit|likelihood)\s*[:\|]", r"(?:gering|mittel|hoch)\w*\s+(?:wahrscheinlichkeit|eintritt)", ], "severity": "MEDIUM", "hint": "Die Eintrittswahrscheinlichkeit der identifizierten Risiken ist nicht bewertet. Ordnen Sie jedem Risiko eine Eintrittswahrscheinlichkeit zu (z.B. gering, mittel, hoch).", }, { "id": "risk_severity", "label": "Schwere/Auswirkung bewertet", "level": 2, "parent": "risks", "patterns": [ r"(?:schwere|auswirkung|schadensh(?:oe|ö)he|schadenpotential|schadenpotenzial)\s*[:\|]", r"(?:gering|mittel|hoch|kritisch)\w*\s+(?:schwere|auswirkung|schaden)", r"(?:physisch|materiell|immateriell)\w*\s+(?:schaden|nachteil|beeintr(?:ae|ä)chtigung)", r"schadensschwere", r"(?:risiko|gefahr).*(?:gering|mittel|hoch|wesentlich|begrenzt)", ], "severity": "MEDIUM", "hint": "Die Schwere der moeglichen Auswirkungen auf Betroffene ist nicht bewertet. Bewerten Sie fuer jedes Risiko die Schadenshoehe (z.B. gering, mittel, hoch, kritisch) und unterscheiden Sie physische, materielle und immaterielle Schaeden.", }, # ── L1: Abhilfemassnahmen ───────────────────────────────────────── { "id": "measures", "label": "Abhilfemassnahmen (Art. 35(7)(d))", "level": 1, "parent": None, "patterns": [ r"abhilfe", r"(?:ma(?:ss|ß)nahm).*(?:risiko|schutz|minderung)", r"schutzma(?:ss|ß)nahm", r"(?:technisch|organisatorisch).*ma(?:ss|ß)nahm", r"tom", r"risiko.*(?:minim|reduz|begrenzen)", ], "severity": "HIGH", "hint": "Abhilfemassnahmen zur Risikominderung fehlen. Beschreiben Sie die geplanten technischen und organisatorischen Massnahmen (TOMs), mit denen die identifizierten Risiken eingedaemmt werden sollen.", }, { "id": "tom_encryption", "label": "Verschluesselung als Massnahme", "level": 2, "parent": "measures", "patterns": [ r"verschl(?:ue|ü)sselung|encryption|ssl|tls|https", r"(?:transport|ende[\-\s]zu[\-\s]ende)[\-\s]?verschl(?:ue|ü)sselung", ], "severity": "LOW", "hint": "Verschluesselung ist nicht als Schutzmassnahme aufgefuehrt. Ergaenzen Sie, ob und welche Verschluesselungsverfahren eingesetzt werden (z.B. TLS-Transportverschluesselung, Ende-zu-Ende-Verschluesselung).", }, { "id": "tom_pseudonymization", "label": "Pseudonymisierung als Massnahme", "level": 2, "parent": "measures", "patterns": [ r"pseudonymisierung|anonymisierung", r"(?:pseudonymisiert|anonymisiert).*(?:daten|verarbeit)", ], "severity": "LOW", "hint": "Pseudonymisierung oder Anonymisierung ist nicht als Massnahme erwaehnt. Pruefen Sie, ob personenbezogene Daten pseudonymisiert oder anonymisiert werden koennen, und dokumentieren Sie dies.", }, { "id": "tom_access_control", "label": "Zugriffskontrolle als Massnahme", "level": 2, "parent": "measures", "patterns": [ r"zugriffskontrolle|zugangskontrolle|zutrittskontrolle", r"(?:berechtigungs|rollen).*(?:konzept|management|vergabe)", r"(?:need[\-\s]to[\-\s]know|least\s+privilege|minimalprinzip)", ], "severity": "LOW", "hint": "Zugriffskontrollmassnahmen sind nicht dokumentiert. Beschreiben Sie, wie der Zugriff auf personenbezogene Daten beschraenkt wird (z.B. Berechtigungskonzept, Rollenmodell, Need-to-know-Prinzip).", }, { "id": "tom_logging", "label": "Protokollierung/Logging als Massnahme", "level": 2, "parent": "measures", "patterns": [ r"(?:protokollierung|logging|audit[\-\s]?trail|nachvollziehbarkeit)", r"(?:zugriff|(?:ae|ä)nderung).*(?:protokoll|logging|nachvollzieh)", ], "severity": "LOW", "hint": "Protokollierung und Nachvollziehbarkeit sind nicht als Massnahme aufgefuehrt. Ergaenzen Sie, wie Zugriffe und Aenderungen an personenbezogenen Daten protokolliert und nachvollziehbar gemacht werden.", }, # ── L1: Landesbehoerden ─────────────────────────────────────────── { "id": "lfdi", "label": "Beruecksichtigung Landesbehoerden-Richtlinie", "level": 1, "parent": None, "patterns": [ r"l(?:an)?fdi", r"landesbeauftragt.*datenschutz", r"landes.?datenschutz", r"richtlinie.*(?:land|lfdi|landes)", r"(?:aufsichtsbeh(?:oe|ö)rde|beh(?:oe|ö)rde).*(?:richtlinie|empfehlung|vorgabe)", ], "severity": "MEDIUM", "hint": "Es fehlt ein Verweis auf die Richtlinien der zustaendigen Landesbehoerde (LfDI). Pruefen Sie, ob Ihre Landesdatenschutzbehoerde spezifische Vorgaben oder Empfehlungen fuer diese Verarbeitung veroeffentlicht hat, und beruecksichtigen Sie diese.", }, # ── L1: Einbeziehung DSB ────────────────────────────────────────── { "id": "stakeholders", "label": "Einbeziehung des DSB (Art. 35(2))", "level": 1, "parent": None, "patterns": [ r"datenschutzbeauftragt.*(?:einbez|konsult|beteilig|rat)", r"dsb.*(?:konsult|einbez|rat)", r"stellungnahme.*dsb", r"(?:rat|empfehlung).*datenschutzbeauftragt", ], "severity": "MEDIUM", "hint": "Die Einbeziehung des Datenschutzbeauftragten (DSB) ist nicht dokumentiert. Gemaess Art. 35 Abs. 2 DSGVO muss der DSB bei der DSFA konsultiert werden — dokumentieren Sie dessen Beteiligung und Stellungnahme.", }, { "id": "dsb_opinion_documented", "label": "DSB-Stellungnahme dokumentiert", "level": 2, "parent": "stakeholders", "patterns": [ r"stellungnahme.*(?:dsb|datenschutzbeauftragt)", r"(?:dsb|datenschutzbeauftragt).*(?:stellungnahme|empfiehlt|bewertet|best(?:ae|ä)tigt)", r"(?:empfehlung|beurteilung|einsch(?:ae|ä)tzung)\s+(?:des|der)\s+(?:dsb|datenschutzbeauftragt)", ], "severity": "LOW", "hint": "Die Stellungnahme des Datenschutzbeauftragten ist nicht im Dokument enthalten. Fuegen Sie die schriftliche Stellungnahme oder Empfehlung des DSB zur DSFA hinzu.", }, # ── L1: Dokumentation ───────────────────────────────────────────── { "id": "documentation", "label": "Dokumentation der Ergebnisse", "level": 1, "parent": None, "patterns": [ r"(?:dokument|ergebnis|bericht).*(?:dsfa|folgenabsch(?:ae|ä)tzung)", r"(?:ergebnis|schlussfolgerung|bewertung).*(?:risiko|verarbeitung)", r"vorliegend.*(?:dsfa|analyse|bewertung|absch(?:ae|ä)tzung)", ], "severity": "MEDIUM", "hint": "Die Ergebnisse der DSFA sind nicht zusammenfassend dokumentiert. Erstellen Sie einen Ergebnisabschnitt, der die Schlussfolgerungen der Folgenabschaetzung und die Gesamtbewertung des Restrisikos festhält.", }, { "id": "review_cycle", "label": "Ueberpruefungszyklus/Review-Termin", "level": 2, "parent": "documentation", "patterns": [ r"(?:ueberpr(?:ue|ü)f|überpr(?:ue|ü)f|review|aktualisierung).*(?:zyklus|turnus|j(?:ae|ä)hrlich|regelm(?:ae|ä)(?:ss|ß)ig|termin)", r"(?:regelm(?:ae|ä)(?:ss|ß)ig|j(?:ae|ä)hrlich|quartal|halbjahr).*(?:ueberpr(?:ue|ü)f|überpr(?:ue|ü)f|review|aktualisier)", r"n(?:ae|ä)chste\s+(?:ueberpr(?:ue|ü)fung|überprüfung|review)", ], "severity": "LOW", "hint": "Ein Ueberpruefungszyklus fuer die DSFA ist nicht festgelegt. Definieren Sie, in welchem Turnus die DSFA ueberprueft und aktualisiert wird (z.B. jaehrlich oder bei wesentlichen Aenderungen der Verarbeitung).", }, ]