feat: Add actionable hints to all 138 compliance checks
Build + Deploy / build-admin-compliance (push) Successful in 1m40s
Build + Deploy / build-backend-compliance (push) Successful in 7s
Build + Deploy / build-ai-sdk (push) Successful in 35s
Build + Deploy / build-developer-portal (push) Successful in 8s
Build + Deploy / build-tts (push) Successful in 7s
Build + Deploy / build-document-crawler (push) Successful in 8s
Build + Deploy / build-dsms-gateway (push) Successful in 7s
Build + Deploy / build-dsms-node (push) Successful in 8s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 16s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m50s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 40s
CI / test-python-backend (push) Successful in 37s
CI / test-python-document-crawler (push) Successful in 25s
CI / test-python-dsms-gateway (push) Successful in 23s
CI / validate-canonical-controls (push) Successful in 15s
Build + Deploy / trigger-orca (push) Successful in 2m28s
Build + Deploy / build-admin-compliance (push) Successful in 1m40s
Build + Deploy / build-backend-compliance (push) Successful in 7s
Build + Deploy / build-ai-sdk (push) Successful in 35s
Build + Deploy / build-developer-portal (push) Successful in 8s
Build + Deploy / build-tts (push) Successful in 7s
Build + Deploy / build-document-crawler (push) Successful in 8s
Build + Deploy / build-dsms-gateway (push) Successful in 7s
Build + Deploy / build-dsms-node (push) Successful in 8s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 16s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m50s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 40s
CI / test-python-backend (push) Successful in 37s
CI / test-python-document-crawler (push) Successful in 25s
CI / test-python-dsms-gateway (push) Successful in 23s
CI / validate-canonical-controls (push) Successful in 15s
Build + Deploy / trigger-orca (push) Successful in 2m28s
Each check now has a "hint" field explaining what is missing and what the customer should do to fix it. Hints are shown in the frontend below failed checks in red text. Examples: - "Bei Verarbeitung auf Basis von Art. 6(1)(f) muss dokumentiert werden, warum Ihr berechtigtes Interesse die Rechte der Betroffenen ueberwiegt." - "Die ladungsfaehige Anschrift fehlt. Erforderlich: Strasse, Hausnummer, PLZ und Ort." Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -19,6 +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.",
|
||||
},
|
||||
|
||||
# ── L1: Beschreibung der Verarbeitungsvorgaenge ───────────────────
|
||||
@@ -33,6 +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.",
|
||||
},
|
||||
{
|
||||
"id": "processing_named",
|
||||
@@ -43,6 +45,7 @@ DSFA_CHECKLIST = [
|
||||
r"(?:verarbeitung|erhebung|speicherung)\s+(?:von|der)\s+(?:nutzerdaten|personenbezogen|besucher|mitglieder)",
|
||||
],
|
||||
"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 ────────────────────
|
||||
@@ -58,6 +61,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.",
|
||||
},
|
||||
{
|
||||
"id": "legal_basis_dsfa",
|
||||
@@ -69,6 +73,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).",
|
||||
},
|
||||
|
||||
# ── L1: Risikobewertung ───────────────────────────────────────────
|
||||
@@ -85,6 +90,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.",
|
||||
},
|
||||
{
|
||||
"id": "risk_probability",
|
||||
@@ -96,6 +102,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).",
|
||||
},
|
||||
{
|
||||
"id": "risk_severity",
|
||||
@@ -107,6 +114,7 @@ DSFA_CHECKLIST = [
|
||||
r"(?:physisch|materiell|immateriell)\w*\s+(?:schaden|nachteil|beeintr(?:ae|ä)chtigung)",
|
||||
],
|
||||
"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 ─────────────────────────────────────────
|
||||
@@ -122,6 +130,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.",
|
||||
},
|
||||
{
|
||||
"id": "tom_encryption",
|
||||
@@ -132,6 +141,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).",
|
||||
},
|
||||
{
|
||||
"id": "tom_pseudonymization",
|
||||
@@ -142,6 +152,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.",
|
||||
},
|
||||
{
|
||||
"id": "tom_access_control",
|
||||
@@ -153,6 +164,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).",
|
||||
},
|
||||
{
|
||||
"id": "tom_logging",
|
||||
@@ -163,6 +175,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.",
|
||||
},
|
||||
|
||||
# ── L1: Landesbehoerden ───────────────────────────────────────────
|
||||
@@ -177,6 +190,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.",
|
||||
},
|
||||
|
||||
# ── L1: Einbeziehung DSB ──────────────────────────────────────────
|
||||
@@ -191,6 +205,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.",
|
||||
},
|
||||
{
|
||||
"id": "dsb_opinion_documented",
|
||||
@@ -202,6 +217,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.",
|
||||
},
|
||||
|
||||
# ── L1: Dokumentation ─────────────────────────────────────────────
|
||||
@@ -215,6 +231,7 @@ DSFA_CHECKLIST = [
|
||||
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",
|
||||
@@ -226,5 +243,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).",
|
||||
},
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user