feat: All 138 hints rewritten as expert-level legal guidance
CI / loc-budget (push) Failing after 18s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
Build + Deploy / build-admin-compliance (push) Successful in 9s
Build + Deploy / build-backend-compliance (push) Successful in 10s
Build + Deploy / build-ai-sdk (push) Successful in 9s
Build + Deploy / build-developer-portal (push) Successful in 8s
Build + Deploy / build-tts (push) Successful in 8s
Build + Deploy / build-document-crawler (push) Successful in 8s
Build + Deploy / build-dsms-gateway (push) Successful in 8s
Build + Deploy / build-dsms-node (push) Successful in 8s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / nodejs-build (push) Successful in 3m22s
CI / dep-audit (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 49s
CI / test-python-backend (push) Successful in 43s
CI / test-python-document-crawler (push) Successful in 32s
CI / test-python-dsms-gateway (push) Successful in 26s
CI / validate-canonical-controls (push) Successful in 18s
Build + Deploy / trigger-orca (push) Successful in 2m10s
CI / loc-budget (push) Failing after 18s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
Build + Deploy / build-admin-compliance (push) Successful in 9s
Build + Deploy / build-backend-compliance (push) Successful in 10s
Build + Deploy / build-ai-sdk (push) Successful in 9s
Build + Deploy / build-developer-portal (push) Successful in 8s
Build + Deploy / build-tts (push) Successful in 8s
Build + Deploy / build-document-crawler (push) Successful in 8s
Build + Deploy / build-dsms-gateway (push) Successful in 8s
Build + Deploy / build-dsms-node (push) Successful in 8s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / nodejs-build (push) Successful in 3m22s
CI / dep-audit (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 49s
CI / test-python-backend (push) Successful in 43s
CI / test-python-document-crawler (push) Successful in 32s
CI / test-python-dsms-gateway (push) Successful in 26s
CI / validate-canonical-controls (push) Successful in 18s
Build + Deploy / trigger-orca (push) Successful in 2m10s
Every hint now reads like a mini-consultation from a data protection lawyer — with specific legal references, court rulings, and common mistakes. Examples: - EuGH C-210/16 (Fanpage), C-298/17 (Kontaktpflicht), C-311/18 (Schrems II) - BGH I ZR 228/03 (ladungsfaehige Anschrift), XI ZR 388/10 (AGB) - EDSA Guidelines 2/2019 (lit. b misuse), WP 248 Rev.01 (DSFA) - DSK-Orientierungshilfe, CNIL-Leitlinien, SDM, BSI-IT-Grundschutz - §25 TDDDG, §38 BDSG, §309 BGB, §312k BGB, Art. 246a EGBGB This is the core value proposition: no lawyer can deliver this level of specific, actionable compliance feedback in 60 seconds. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -19,7 +19,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Pruefen Sie die DSK-Blacklist (Positivliste der Aufsichtsbehoerden) und die EDSA-Leitlinien WP 248 Rev.01: Treffen 2+ Kriterien zu (z.B. Profiling, systematische Ueberwachung, grosse Datenmenge), ist die DSFA nach Art. 35(1) DSGVO Pflicht.",
|
||||
},
|
||||
|
||||
# ── L1: Beschreibung der Verarbeitungsvorgaenge ───────────────────
|
||||
@@ -34,7 +34,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Art. 35(7)(a) DSGVO verlangt eine 'systematische Beschreibung'. Nutzen Sie die Struktur der EDSA-Leitlinien: Art der Verarbeitung, Umfang (Datenkategorien, Betroffenenanzahl), Kontext (Umstaende), Zweck und Rechtsgrundlage. Ein Datenflussdiagramm wird von LfDI-Behoerden empfohlen.",
|
||||
},
|
||||
{
|
||||
"id": "processing_named",
|
||||
@@ -47,7 +47,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Benennen Sie den Verarbeitungsvorgang konkret, z.B. 'Betrieb einer Facebook-Fanpage inkl. Page Insights' oder 'Videobeobachtung oeffentlicher Bereiche'. Abstrakte Beschreibungen wie 'Nutzung von Social Media' genuegen nicht den Anforderungen der DSK.",
|
||||
},
|
||||
|
||||
# ── L1: Notwendigkeit / Verhaeltnismaessigkeit ────────────────────
|
||||
@@ -63,7 +63,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Art. 35(7)(b) DSGVO: Pruefen Sie Erforderlichkeit (gibt es mildere Mittel?), Zweckbindung (Art. 5(1)(b)) und Datenminimierung (Art. 5(1)(c)). Bei Social-Media-DSFA: Begruenden Sie, warum eine Fanpage noetig ist und nicht z.B. eine eigene Website genuegt.",
|
||||
},
|
||||
{
|
||||
"id": "legal_basis_dsfa",
|
||||
@@ -75,7 +75,7 @@ DSFA_CHECKLIST = [
|
||||
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).",
|
||||
"hint": "Die Rechtsgrundlage ist Teil der Verhaeltnismaessigkeitspruefung. Bei Art. 6(1) lit. f (berechtigtes Interesse) muss die Interessenabwaegung dokumentiert werden. Bei Art. 9-Daten (z.B. Gesundheit, politische Meinungen) ist zusaetzlich Art. 9(2) DSGVO zu pruefen.",
|
||||
},
|
||||
|
||||
# ── L1: Risikobewertung ───────────────────────────────────────────
|
||||
@@ -92,7 +92,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Art. 35(7)(c) DSGVO: Verwenden Sie eine Risikomatrix (Eintrittswahrscheinlichkeit x Schadenshoehe). Die DSK empfiehlt das SDM (Standard-Datenschutzmodell) mit den Schutzzielen: Vertraulichkeit, Integritaet, Verfuegbarkeit, Nichtverkettbarkeit, Transparenz, Intervenierbarkeit.",
|
||||
},
|
||||
{
|
||||
"id": "risk_probability",
|
||||
@@ -104,7 +104,7 @@ DSFA_CHECKLIST = [
|
||||
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).",
|
||||
"hint": "Nutzen Sie eine 4-stufige Skala (gering/mittel/hoch/sehr hoch) analog zum CNIL-DSFA-Tool oder dem BSI-IT-Grundschutz. Die Eintrittswahrscheinlichkeit muss je Risiko einzeln bewertet und nachvollziehbar begruendet werden.",
|
||||
},
|
||||
{
|
||||
"id": "risk_severity",
|
||||
@@ -118,7 +118,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "EG 75 DSGVO nennt konkrete Schadensbeispiele: Diskriminierung, Identitaetsdiebstahl, finanzielle Verluste, Rufschaedigung, Verlust der Vertraulichkeit bei Berufsgeheimnissen. Bewerten Sie physische, materielle UND immaterielle Schaeden getrennt.",
|
||||
},
|
||||
|
||||
# ── L1: Abhilfemassnahmen ─────────────────────────────────────────
|
||||
@@ -134,7 +134,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Art. 35(7)(d) DSGVO: Ordnen Sie jedem identifizierten Risiko konkrete Abhilfemassnahmen zu. Orientieren Sie sich am SDM (Standard-Datenschutzmodell) der DSK. Das Restrisiko nach Umsetzung der Massnahmen muss explizit bewertet werden.",
|
||||
},
|
||||
{
|
||||
"id": "tom_encryption",
|
||||
@@ -145,7 +145,7 @@ DSFA_CHECKLIST = [
|
||||
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).",
|
||||
"hint": "Art. 32(1)(a) DSGVO nennt Verschluesselung ausdruecklich als Massnahme. Dokumentieren Sie konkret: TLS 1.2+ fuer Transport, AES-256 fuer Speicherung, ggf. E2E-Verschluesselung. Bei Social Media: Weisen Sie auf HTTPS-Erzwingung der Plattform hin.",
|
||||
},
|
||||
{
|
||||
"id": "tom_pseudonymization",
|
||||
@@ -156,7 +156,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Art. 25(1) DSGVO (Privacy by Design) nennt Pseudonymisierung als Leitbeispiel. Unterscheiden Sie korrekt: Pseudonymisierung (Zuordnung noch moeglich, DSGVO gilt) vs. Anonymisierung (kein Personenbezug mehr, DSGVO gilt nicht). Bei Insights: Aggregation genuegt oft als Anonymisierung.",
|
||||
},
|
||||
{
|
||||
"id": "tom_access_control",
|
||||
@@ -168,7 +168,7 @@ DSFA_CHECKLIST = [
|
||||
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).",
|
||||
"hint": "Dokumentieren Sie ein Berechtigungskonzept nach dem Need-to-know-Prinzip (Art. 32(1)(b) DSGVO). Bei Social Media: Wer hat Admin-Zugriff auf die Fanpage? Wie oft werden Zugriffsrechte geprueft? Mehrstufige Rollenkonzepte (Admin, Editor, Analyst) empfohlen.",
|
||||
},
|
||||
{
|
||||
"id": "tom_logging",
|
||||
@@ -179,7 +179,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Protokollierung dient der Nachweispflicht nach Art. 5(2) DSGVO (Accountability). Dokumentieren Sie: Was wird geloggt (Zugriffe, Aenderungen, Loeschungen), wie lange werden Logs aufbewahrt, wer hat Zugriff auf die Logs. Achtung: Logs selbst sind personenbezogene Daten.",
|
||||
},
|
||||
|
||||
# ── L1: Landesbehoerden ───────────────────────────────────────────
|
||||
@@ -194,7 +194,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Die DSK hat eine Positivliste (Blacklist) nach Art. 35(4) DSGVO veroeffentlicht, die DSFA-pflichtige Verarbeitungen auflistet. Zusaetzlich hat jedes Bundesland eigene LfDI-Empfehlungen — z.B. der LfDI BaWue zu Social-Media-Fanpages. Pruefen und zitieren Sie die fuer Sie zustaendige Behoerde.",
|
||||
},
|
||||
|
||||
# ── L1: Einbeziehung DSB ──────────────────────────────────────────
|
||||
@@ -209,7 +209,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Art. 35(2) DSGVO: 'Der Verantwortliche holt bei der Durchfuehrung einer DSFA den Rat des DSB ein.' Die Nichtbeteiligung des DSB ist ein eigener Verstoss (Art. 83(4)(a) DSGVO). Dokumentieren Sie Datum, Form und Ergebnis der Konsultation.",
|
||||
},
|
||||
{
|
||||
"id": "dsb_opinion_documented",
|
||||
@@ -221,7 +221,7 @@ DSFA_CHECKLIST = [
|
||||
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.",
|
||||
"hint": "Die DSB-Stellungnahme sollte enthalten: Bewertung der Risiken, Empfehlung zu Massnahmen, Einschaetzung ob Restrisiko akzeptabel ist. Falls der DSB Bedenken aeussert und die Verarbeitung dennoch erfolgt, ist dies nach Art. 39(1)(c) DSGVO besonders zu dokumentieren.",
|
||||
},
|
||||
|
||||
# ── L1: Dokumentation ─────────────────────────────────────────────
|
||||
@@ -238,7 +238,7 @@ DSFA_CHECKLIST = [
|
||||
r"(?:gering|mittel|hoch).*(?:einzustufen|zu\s+bewerten)",
|
||||
],
|
||||
"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.",
|
||||
"hint": "Dokumentieren Sie das Ergebnis eindeutig: Ist das Restrisiko nach Umsetzung der Massnahmen tragbar? Falls das Restrisiko 'hoch' bleibt, ist vor Beginn der Verarbeitung die Aufsichtsbehoerde nach Art. 36 DSGVO (vorherige Konsultation) zu befragen.",
|
||||
},
|
||||
{
|
||||
"id": "review_cycle",
|
||||
@@ -250,6 +250,6 @@ DSFA_CHECKLIST = [
|
||||
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).",
|
||||
"hint": "Art. 35(11) DSGVO: Die DSFA ist regelmaessig zu ueberpruefen. Best Practice: Jaehrliche Review + anlassbezogen bei wesentlichen Aenderungen (neue Plattform, geaenderte AGB der Plattform, neue Rechtsprechung). Legen Sie einen konkreten naechsten Prueftermin fest.",
|
||||
},
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user