From 8d6959e8b2f331b8677e23a02710cd32e7da49d5 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Tue, 5 May 2026 17:45:02 +0200 Subject: [PATCH] fix: Expand Art. 13 patterns for generic matching across all websites MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Complaint (Art. 13(2)(d)): + 'recht auf beschwerde', 'art. 77', 'beschwerde...wenden/einlegen', 'zuständige behörde' — IHK uses 'Recht auf Beschwerde gem. Art. 77' Legal basis (Art. 13(1)(c)): + 'gemäß Art.', '§ X IHKG/BDSG/LDSG/BBiG/TDDDG', 'einwilligung gem', 'verarbeitung auf grundlage' — catches statutory references Third country (Art. 13(1)(f)): + 'Übermittlung ausserhalb', 'EWR/EEA', 'Data Privacy Framework' Retention (Art. 13(2)(a)): + 'Dauer der Speicherung', 'Aufbewahrungsdauer/-pflicht/-zeit', 'gesetzliche Aufbewahrung' — common German DSE headings All patterns are generic, not IHK-specific. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../services/dsi_document_checker.py | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/backend-compliance/compliance/services/dsi_document_checker.py b/backend-compliance/compliance/services/dsi_document_checker.py index 4a90806..4d96544 100644 --- a/backend-compliance/compliance/services/dsi_document_checker.py +++ b/backend-compliance/compliance/services/dsi_document_checker.py @@ -60,7 +60,12 @@ ART13_CHECKLIST = [ r"rechtsgrundlage", r"art\.\s*6\s*(?:abs|absatz)?\s*\.?\s*1", r"legal\s+basis", r"berechtigtes\s+interesse", r"auf\s+grundlage\s+(?:von|des|der)\s+(?:art|§)", - r"lit\.\s*[a-f]\)", + r"lit\.\s*[a-f][\s\)]", + r"auf\s+(?:der\s+)?grundlage\s+(?:von\s+)?art", + r"gem(?:ae|ä)(?:ss|ß)\s+art", # gemäß Art. + r"(?:verarbeitung|erhebung).*(?:auf\s+grundlage|gem)", + r"§\s*\d+\s+(?:abs|ihkg|bdsg|ldsg|bbig|tdddg)", + r"einwilligung\s+gem", ], "severity": "HIGH", }, @@ -83,6 +88,9 @@ ART13_CHECKLIST = [ r"drittland", r"dritt\s*staat", r"drittl(?:ae|ä)nder", r"third\s+countr", r"angemessenheitsbeschluss", r"standard\s*vertragsklausel", r"scc", + r"(?:ueber|über)mittlung.*(?:ausserhalb|außerhalb)", + r"(?:europ(?:ae|ä)ischen\s+wirtschaftsraum|ewr|eea)", + r"privacy\s+shield", r"data\s+privacy\s+framework", ], "severity": "MEDIUM", }, @@ -91,11 +99,14 @@ ART13_CHECKLIST = [ "label": "Speicherdauer (Art. 13(2)(a))", "patterns": [ r"speicherdauer", r"aufbewahrungsfrist", - r"(?:wie\s+lange|dauer)\s+(?:werden|gespeichert)", + r"(?:wie\s+lange|dauer)\s+(?:der\s+)?(?:werden|gespeicher|speicherung)", r"retention\s+period", r"l(?:oe|ö)sch(?:ung|frist|konzept)", r"wie\s+lange\s+werden\s+die\s+daten\s+aufbewahrt", r"daten\s+werden\s+gel(?:oe|ö)scht", - r"(?:\d+\s+(?:tage|monate|jahre)|nach\s+\d+)", + r"(?:\d+\s+(?:tage|monate|jahre)|nach\s+\d+\s+(?:tag|monat|jahr))", + r"dauer\s+der\s+speicherung", + r"aufbewahrung(?:sdauer|spflicht|szeit)", + r"gesetzliche.*aufbewahrung", ], "severity": "HIGH", }, @@ -120,6 +131,9 @@ ART13_CHECKLIST = [ r"beschwerderecht", r"aufsichtsbeh(?:oe|ö)rde", r"right\s+to\s+lodge\s+a\s+complaint", r"supervisory\s+authority", r"datenschutzbeh(?:oe|ö)rde", + r"recht\s+auf\s+beschwerde", r"art\.\s*77", + r"beschwerde.*(?:wenden|einlegen|erheben)", + r"(?:zuständige|competent)\s+(?:behörde|beh(?:oe|ö)rde|authority)", ], "severity": "MEDIUM", },