diff --git a/backend-compliance/compliance/api/agent_doc_check_critical.py b/backend-compliance/compliance/api/agent_doc_check_critical.py index b4def9b0..89c38824 100644 --- a/backend-compliance/compliance/api/agent_doc_check_critical.py +++ b/backend-compliance/compliance/api/agent_doc_check_critical.py @@ -184,45 +184,66 @@ def build_critical_findings_html( scorecard: dict | None, results: list, ) -> str: - """Render der Critical-Findings-Box. Leerer String wenn keine Issues.""" + """Render der Audit-Zusammenfassung fuer die Geschaeftsfuehrung. + + P89: Co-Pilot-Tonalitaet statt Panik-Rot. + - Sachlich blau statt alarmistisch rot + - "Themen die besprochen werden sollten" statt "VERSTOESSE" + - Realistische Zeitschaetzung (4-8 Wochen) + - Buessgeld-Risiko in separater, dezenter Section ganz unten + - Konfidenz-Hinweis "False-Positives moeglich" + """ issues = _detect_critical_issues(banner_result, scorecard, results) if not issues: return "" items = [] - for i in issues: + for idx, i in enumerate(issues, 1): + # P87-Vorbereitung: keine HIGH-Badges mehr — wir nummerieren stattdessen items.append( - f'
' - 'Die folgenden Verstoesse sind durch Tool-Analyse belegt und ' - 'erfordern Sofortmassnahmen. Bussgeldrahmen nach Art. 83 DSGVO: ' - 'bis 4% des weltweiten Jahresumsatzes.
' + 'background:#f0f9ff;border:1px solid #bfdbfe;border-radius:10px">' + '' + 'Wir haben Datenschutzerklaerung, Cookie-Banner, Impressum und ' + 'eingebundene Anbieter technisch analysiert. Die folgenden Punkte ' + 'sollten in den naechsten Wochen geklaert werden — typische ' + 'Umsetzungsdauer 4-8 Wochen (DSB-Review → Marketing-Agentur ' + '→ Entwicklung → Freigabe). Detaillierte technische ' + 'Analyse mit weiteren Findings finden Sie unten.
' + "".join(items) + + '{summary}. ' - 'Gruppiert nach Empfaengerkategorie (Art. 30(1)(d) DSGVO). Innerhalb ' - 'jeder Gruppe nach Compliance-Score sortiert. Bei eigenen ' - 'Verarbeitungen (INTERNAL/GROUP) werden Opt-Out und Privacy-Link ' + 'Vorschlag fuer das Verarbeitungsverzeichnis (Art. 30 DSGVO)', + # P91: Co-Pilot-Tonalitaet — Wahrscheinlichkeit statt Garantie, + # Empfehlung statt "Verstoss-Liste". + f'
' + f'Wir haben {n_total} Verarbeitungen aus dem ' + f'Cookie-Banner abgeleitet, mit unserer globalen Anbieter-Bibliothek ' + f'abgeglichen und nach Empfaengerkategorie (Art. 30(1)(d) DSGVO) ' + f'gruppiert. Bei einer Reduktion der eingebundenen Anbieter, dem ' + f'Wechsel zu europaeischen Alternativen und konsequenter Pruefung ' + f'der tatsaechlich benoetigten Cookies ist eine Reduktion des ' + f'Tracking-Footprints sowie Lizenz-Einsparungen wahrscheinlich. ' + f'Eine fundierte Bewertung erfordert die Abstimmung mit dem ' + f'Datenschutzbeauftragten.
' + f'' + f'{summary}. Innerhalb jeder Gruppe nach Verbesserungspotenzial ' + f'sortiert. Bei eigenen Verarbeitungen (INTERNAL/GROUP) sind ' + f'Opt-Out und Privacy-Link ' 'NICHT als Pflicht gewertet — der Widerruf erfolgt ueber das ' - 'Cookie-Banner, Privacy ist in der Haupt-DSI dokumentiert.
', + 'nicht erforderlich (Widerruf ueber Banner, Privacy in der ' + 'Haupt-Datenschutzerklaerung dokumentiert).', pattern_notice, ] diff --git a/consent-tester/services/banner_dom_walkers.py b/consent-tester/services/banner_dom_walkers.py index e0c1400f..d9b1eea2 100644 --- a/consent-tester/services/banner_dom_walkers.py +++ b/consent-tester/services/banner_dom_walkers.py @@ -30,6 +30,38 @@ SHADOW_BANNER_WALKER_JS = """() => { for (const k of LEGAL_KW.dse) if (t.includes(k)) return 'dse'; return null; } + // P76: EXTENDED — scan ANY clickable element by label, not just + // or named web-components. Mercedes uses small secondary + // buttons below the main 3 actions: "Datenschutzerklaerung" + "Impressum" + // as