From 4a7e09bbb0883fa1a6f3e65ff72d9f78af848db7 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Tue, 12 May 2026 14:02:25 +0200 Subject: [PATCH] fix(impressum): regex [A-Z] never matches on lowercased text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All patterns matched against text_lower but used [A-Z] character class. Changed to [a-zA-Z] so patterns like "geschäftsführung: dr. oliver" are found. Also added "Pflicht"/"Detail" labels to the two progress bars to clarify what 100% vs 8% means. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../app/sdk/agent/_components/ChecklistView.tsx | 10 ++++++---- .../services/doc_checks/impressum_checks.py | 12 ++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/admin-compliance/app/sdk/agent/_components/ChecklistView.tsx b/admin-compliance/app/sdk/agent/_components/ChecklistView.tsx index 7326cc7..014dc8f 100644 --- a/admin-compliance/app/sdk/agent/_components/ChecklistView.tsx +++ b/admin-compliance/app/sdk/agent/_components/ChecklistView.tsx @@ -145,8 +145,9 @@ export function ChecklistView({ results }: { results: DocResult[] }) { Fehler ) : (
-
-
+
+ Pflicht +
{pct}%
{l2Active.length > 0 && ( -
-
+
+ Detail +
{cpct}% diff --git a/backend-compliance/compliance/services/doc_checks/impressum_checks.py b/backend-compliance/compliance/services/doc_checks/impressum_checks.py index 2a5793c..a5ddced 100644 --- a/backend-compliance/compliance/services/doc_checks/impressum_checks.py +++ b/backend-compliance/compliance/services/doc_checks/impressum_checks.py @@ -111,8 +111,8 @@ IMPRESSUM_CHECKLIST = [ "label": "Registergericht benannt (Amtsgericht X)", "level": 2, "parent": "register", "patterns": [ - r"(?:amtsgericht|registergericht)\s+[A-Z\u00c0-\u017e]\w+", - r"\bag\s+[A-Z\u00c0-\u017e]\w+", + r"(?:amtsgericht|registergericht)\s+[a-zA-Z\u00c0-\u017e]\w+", + r"\bag\s+[a-zA-Z\u00c0-\u017e]\w+", r"(?:handelsregister|register)\s+(?:ag|amtsgericht)\s+\w+", ], "severity": "LOW", @@ -170,9 +170,9 @@ IMPRESSUM_CHECKLIST = [ "label": "Name der vertretungsberechtigten Person", "level": 2, "parent": "representative", "patterns": [ - r"(?:gesch(?:ae|ä)ftsf(?:ue|ü)hr\w*|vorstand|inhaber)\s*:?\s*[A-Z\u00c0-\u017e]", - r"(?:vertreten\s+durch|repr(?:ae|ä)sentiert)\s*:?\s*[A-Z\u00c0-\u017e]", - r"(?:gesch(?:ae|ä)ftsf(?:ue|ü)hrung)\s*:?\s*(?:dr\.?\s+|prof\.?\s+)?[A-Z\u00c0-\u017e]", + r"(?:gesch(?:ae|ä)ftsf(?:ue|ü)hr\w*|vorstand|inhaber)\s*:?\s*[a-zA-Z\u00c0-\u017e]", + r"(?:vertreten\s+durch|repr(?:ae|ä)sentiert)\s*:?\s*[a-zA-Z\u00c0-\u017e]", + r"(?:gesch(?:ae|ä)ftsf(?:ue|ü)hrung)\s*:?\s*(?:dr\.?\s+|prof\.?\s+)?[a-zA-Z\u00c0-\u017e]", ], "severity": "LOW", "hint": "Voller Vor- und Nachname mit Funktionsbezeichnung erforderlich (z.B. 'Geschaeftsfuehrung: Dr. Max Mustermann').", @@ -288,7 +288,7 @@ IMPRESSUM_CHECKLIST = [ "level": 1, "parent": None, "patterns": [ r"berufshaftpflicht|haftpflichtversicherung|pflichtversicherung", - r"(?:versicherer|versicherung)\s*:?\s*[A-Z\u00c0-\u017e]", + r"(?:versicherer|versicherung)\s*:?\s*[a-zA-Z\u00c0-\u017e]", r"deckungssumme|versicherungsschutz|geltungsbereich", ], "severity": "INFO",