feat: Expand Social Media (10 checks) + DSFA (8 checks) checklists

Art. 26 Joint Controller (10 checks, was 7):
+ Auflistung der genutzten Plattformen
+ Rechtsgrundlage (Art. 6)
+ Social Bookmarks vs. Plugins Hinweis
Improved: broader patterns for joint parties, contact point, data types

DSFA Art. 35 (8 checks, was 5):
+ Schwellwertanalyse / Auslösepruefung
+ Beruecksichtigung Landesbehörden-Richtlinie (LFDI)
+ Dokumentation der Ergebnisse
Improved: IHK-specific patterns (Kanäle, systematische Beobachtung,
geringer Umfang, sensitive Daten)

Total: 40 → 47 Regex-Checks across all document types.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-07 11:17:16 +02:00
parent e7f2f98da3
commit 4642abba23
@@ -200,52 +200,93 @@ COOKIE_CHECKLIST = [
JOINT_CONTROLLER_CHECKLIST = [ JOINT_CONTROLLER_CHECKLIST = [
{"id": "joint_parties", "label": "Gemeinsam Verantwortliche benannt (Art. 26(1))", {"id": "joint_parties", "label": "Gemeinsam Verantwortliche benannt (Art. 26(1))",
"patterns": [r"gemeinsam.*verantwortlich", r"joint.*controller", r"gemeinsame\s+verantwortlichkeit", "patterns": [r"gemeinsam.*verantwortlich", r"joint.*controller", r"gemeinsame\s+verantwortlichkeit",
r"art\.\s*26", r"mitverantwortlich"]}, r"art\.\s*26", r"mitverantwortlich",
r"wir.*(?:und|gemeinsam).*(?:betreiber|facebook|meta|google)",
r"(?:betreiber|netzwerk).*verantwortlich"]},
{"id": "arrangement", "label": "Vereinbarung nach Art. 26 DSGVO", {"id": "arrangement", "label": "Vereinbarung nach Art. 26 DSGVO",
"patterns": [r"vereinbarung.*art\.\s*26", r"art\.\s*26.*vereinbarung", "patterns": [r"vereinbarung.*art\.\s*26", r"art\.\s*26.*vereinbarung",
r"page\s*controller", r"fanpage", r"insights", r"page\s*controller", r"fanpage", r"insights",
r"gemeinsame.*verantwortung.*(?:vertrag|vereinbarung)"]}, r"gemeinsame.*verantwortung.*(?:vertrag|vereinbarung)",
r"addendum|nachtrag|seiten.*insights"]},
{"id": "contact_point", "label": "Anlaufstelle fuer Betroffene (Art. 26(1) S.3)", {"id": "contact_point", "label": "Anlaufstelle fuer Betroffene (Art. 26(1) S.3)",
"patterns": [r"anlaufstelle", r"kontaktstelle", r"ansprechpartner.*betroffene", "patterns": [r"anlaufstelle", r"kontaktstelle", r"ansprechpartner.*betroffene",
r"rechte.*(?:gegenueber|gegenüber)\s+(?:uns|beiden)", r"rechte.*(?:gegenueber|gegenüber)\s+(?:uns|beiden)",
r"rechte.*(?:sowohl|grundsaetzlich|grundsätzlich).*(?:uns|als auch)"]}, r"rechte.*(?:sowohl|grundsaetzlich|grundsätzlich).*(?:uns|als auch)",
r"rechte.*geltend\s+machen", r"wenden\s+sie\s+sich"]},
{"id": "processing_split", "label": "Verarbeitungsaufteilung (wer macht was)", {"id": "processing_split", "label": "Verarbeitungsaufteilung (wer macht was)",
"patterns": [r"(?:wir|betreiber).*(?:verarbeiten|erheben|nutzen).*(?:daten|informationen)", "patterns": [r"(?:wir|betreiber).*(?:verarbeiten|erheben|nutzen).*(?:daten|informationen)",
r"(?:facebook|meta|google|youtube|instagram|linkedin|twitter|x\.com).*(?:verarbeit|erhebt|nutzt|speichert)", r"(?:facebook|meta|google|youtube|instagram|linkedin|twitter|x\.com).*(?:verarbeit|erhebt|nutzt|speichert)",
r"bei\s+besuch\s+(?:unserer|der)\s+(?:seite|fanpage|profil)"]}, r"bei\s+besuch\s+(?:unserer|der)\s+(?:seite|fanpage|profil)",
r"(?:senden|ver(?:oe|ö)ffentlich|teilen).*(?:inhalte|beitr(?:ae|ä)ge)",
r"(?:nutzungsstatistik|statistik|insight).*(?:betreiber|netzwerk)"]},
{"id": "social_data_types", "label": "Kategorien verarbeiteter Daten", {"id": "social_data_types", "label": "Kategorien verarbeiteter Daten",
"patterns": [r"(?:nutzungsstatistik|insight|reichweite|interaktion|klick|aufruf)", "patterns": [r"(?:nutzungsstatistik|insight|reichweite|interaktion|klick|aufruf)",
r"(?:ip.?adresse|standort|browser|geraet|alter|geschlecht).*(?:social|profil|seite|fanpage)", r"(?:ip.?adresse|standort|browser|ger(?:ae|ä)t|alter|geschlecht)",
r"(?:personenbezogen|daten).*(?:social|netzwerk|plattform)"]}, r"(?:personenbezogen|daten).*(?:social|netzwerk|plattform)",
r"(?:nutzername|beitr(?:ae|ä)g|profil|like|kommentar)",
r"(?:sensitive|besondere).*(?:daten|kategori)"]},
{"id": "platforms", "label": "Auflistung der genutzten Plattformen",
"patterns": [r"(?:facebook|instagram|youtube|twitter|x\.com|linkedin|xing|tiktok)",
r"(?:kan(?:ae|ä)le|plattform|netzwerk|profil|account|auftritte).*(?:social|medien)",
r"social\s*media.*(?:angebot|pr(?:ae|ä)senz|auftritte)"]},
{"id": "third_country", "label": "Drittlandtransfer (USA bei Social Media)", {"id": "third_country", "label": "Drittlandtransfer (USA bei Social Media)",
"patterns": [r"(?:usa|vereinigte\s+staaten|drittland|drittstaaten).*(?:social|facebook|meta|google)", "patterns": [r"(?:usa|vereinigte\s+staaten|drittland|drittstaaten)",
r"(?:social|facebook|meta|google).*(?:usa|drittland|drittstaaten)",
r"privacy\s+shield|data\s+privacy\s+framework|angemessenheitsbeschluss", r"privacy\s+shield|data\s+privacy\s+framework|angemessenheitsbeschluss",
r"standardvertragsklausel|standard.*contractual"]}, r"standardvertragsklausel|standard.*contractual",
r"(?:uebermittlung|übermittlung).*(?:usa|drittland|ausserhalb|außerhalb)"]},
{"id": "legal_basis", "label": "Rechtsgrundlage (Art. 6 DSGVO)",
"patterns": [r"rechtsgrundlage", r"art\.\s*6", r"berechtigtes\s+interesse",
r"einwilligung.*art\.\s*6", r"lit\.\s*[a-f]"]},
{"id": "rights", "label": "Betroffenenrechte (Art. 15-21)", {"id": "rights", "label": "Betroffenenrechte (Art. 15-21)",
"patterns": [r"recht\s+auf\s+auskunft", r"recht\s+auf\s+l(?:oe|ö)schung", "patterns": [r"recht\s+auf\s+auskunft", r"recht\s+auf\s+l(?:oe|ö)schung",
r"art\.\s*1[5-9]", r"betroffenenrecht", r"art\.\s*1[5-9]", r"betroffenenrecht",
r"ihre\s+rechte", r"rechte.*betroffene"]}, r"ihre\s+rechte", r"rechte.*betroffene", r"widerspruchsrecht"]},
{"id": "social_bookmarks", "label": "Hinweis auf Social Bookmarks vs. Plugins",
"patterns": [r"social\s*(?:bookmark|plugin|button|widget)",
r"(?:kein|keine).*(?:plugin|widget|button).*(?:gesetzt|eingebunden|geladen)",
r"(?:link|verweis|weiterleitung).*(?:dienst|anbieter|netzwerk)"]},
] ]
# DSFA minimal checklist (Art. 35 DSGVO) — basic structure checks # DSFA checklist (Art. 35 DSGVO)
DSFA_CHECKLIST = [ DSFA_CHECKLIST = [
{"id": "trigger", "label": "Schwellwertanalyse / Ausloesepruefung (Art. 35(1))",
"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"]},
{"id": "description", "label": "Beschreibung der Verarbeitungsvorgaenge (Art. 35(7)(a))", {"id": "description", "label": "Beschreibung der Verarbeitungsvorgaenge (Art. 35(7)(a))",
"patterns": [r"beschreibung.*verarbeitung", r"verarbeitungsvorg(?:ae|ä)ng", "patterns": [r"beschreibung.*verarbeitung", r"verarbeitungsvorg(?:ae|ä)ng",
r"systematische\s+beschreibung", r"gegenstand.*verarbeitung"]}, 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)"]},
{"id": "necessity", "label": "Notwendigkeit und Verhaeltnismaessigkeit (Art. 35(7)(b))", {"id": "necessity", "label": "Notwendigkeit und Verhaeltnismaessigkeit (Art. 35(7)(b))",
"patterns": [r"notwendigkeit", r"verh(?:ae|ä)ltnism(?:ae|ä)ssigkeit", "patterns": [r"notwendigkeit", r"verh(?:ae|ä)ltnism(?:ae|ä)ssigkeit",
r"erforderlichkeit", r"zweckbindung"]}, r"erforderlichkeit", r"zweckbindung",
r"geringen?\s+umfang", r"nur\s+(?:die|sehr).*daten.*(?:verarbeitet|erhoben)",
r"freiwillig\s+angegeben"]},
{"id": "risks", "label": "Risikobewertung fuer Betroffene (Art. 35(7)(c))", {"id": "risks", "label": "Risikobewertung fuer Betroffene (Art. 35(7)(c))",
"patterns": [r"risiko.*(?:bewertung|analyse|einsch(?:ae|ä)tzung)", "patterns": [r"risiko.*(?:bewertung|analyse|einsch(?:ae|ä)tzung|abw(?:ae|ä)gung)",
r"risiken.*(?:rechte|freiheit)", r"eintrittswahrscheinlichkeit", r"risiken.*(?:rechte|freiheit)", r"eintrittswahrscheinlichkeit",
r"schwere.*(?:risiko|auswirkung)"]}, r"schwere.*(?:risiko|auswirkung)",
r"hohes\s+risiko.*(?:rechte|freiheit)",
r"systematische\s+beobachtung",
r"(?:sensitiv|politisch|sexuell|gesundheit).*(?:daten|offenbar)"]},
{"id": "measures", "label": "Abhilfemassnahmen (Art. 35(7)(d))", {"id": "measures", "label": "Abhilfemassnahmen (Art. 35(7)(d))",
"patterns": [r"abhilfe", r"massnahmen.*risiko", r"schutzma(?:ss|ß)nahm", "patterns": [r"abhilfe", r"(?:ma(?:ss|ß)nahm).*(?:risiko|schutz|minderung)",
r"(?:technisch|organisatorisch).*massnahm", r"tom"]}, r"schutzma(?:ss|ß)nahm", r"(?:technisch|organisatorisch).*ma(?:ss|ß)nahm",
r"tom", r"risiko.*(?:minim|reduz|begrenzen)",
r"(?:einschr(?:ae|ä)nk|begrenz).*(?:verarbeitung|zugriff)"]},
{"id": "lfdi", "label": "Beruecksichtigung Landesbehoerden-Richtlinie",
"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)"]},
{"id": "stakeholders", "label": "Einbeziehung des DSB (Art. 35(2))", {"id": "stakeholders", "label": "Einbeziehung des DSB (Art. 35(2))",
"patterns": [r"datenschutzbeauftragt.*(?:einbez|konsult|beteilig|rat)", "patterns": [r"datenschutzbeauftragt.*(?:einbez|konsult|beteilig|rat)",
r"dsb.*(?:konsult|einbez|rat)", r"stellungnahme.*dsb"]}, r"dsb.*(?:konsult|einbez|rat)", r"stellungnahme.*dsb",
r"(?:rat|empfehlung).*datenschutzbeauftragt"]},
{"id": "documentation", "label": "Dokumentation der Ergebnisse",
"patterns": [r"(?:dokument|ergebnis|bericht).*(?:dsfa|folgenabsch(?:ae|ä)tzung)",
r"(?:ergebnis|schlussfolgerung|bewertung).*(?:risiko|verarbeitung)",
r"vorliegend.*(?:dsfa|analyse|bewertung|absch(?:ae|ä)tzung)"]},
] ]