feat(cookie+routing): Storage-Typ-Filter + legal_notice capture-only

#3 Storage-Filter: cookie-check exponiert per-Cookie-Speichertyp
(storage_inventory.per_cookie); CookieResultView bekommt Filter-Chips
(Cookie/Local Storage/Framework …) + eine Speicher-Spalte, Anbieter ohne
passenden Treffer werden ausgeblendet, KPI zeigt gefilterte Zahl.

A-Routing: legal_notice ist jetzt ein kanonischer Doc-Type. Eigene
Discovery-Regel (legal-disclaimer/rechtlicher-hinweis) VOR impressum →
die Disclaimer-Seite wird nicht mehr als Impressum substituiert (Ursache,
dass die Cross-Doc-Reconciliation nie zündete). capture-only: als
doc_entry für B persistiert, aber nicht einzeln gescort (keine 0%-Noise,
da ohne eigene Checkliste). Im Scan-Form als Option auswählbar.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-06-11 20:45:18 +02:00
parent 0f6cdc93fd
commit 97e39579d5
8 changed files with 137 additions and 11 deletions
@@ -31,10 +31,18 @@ _compliance_check_jobs: dict[str, dict] = {}
# a separate page. We check 'DSB benannt' as a sub-check of the DSE.
_ALL_DOC_TYPES = [
"dse", "impressum", "social_media", "cookie",
"agb", "nutzungsbedingungen", "widerruf",
"agb", "nutzungsbedingungen", "widerruf", "legal_notice",
]
# Capture-only doc types: erfasst + als doc_entry persistiert (für die
# Cross-Doc-Reconciliation B), aber NICHT einzeln gescort. Sie haben keine
# eigene Checkliste/MCs → _check_single würde nur eine irreführende 0%-Zeile
# erzeugen. 'legal_notice' (Footer-„Rechtlicher Hinweis"/Disclaimer) trägt oft
# VSBG/ODR-Aussagen, die Impressum-Pflichten erfüllen → wertvoll für B.
_CAPTURE_ONLY = {"legal_notice"}
# Human-readable labels per doc_type. Used in the report + emails.
_DOC_TYPE_LABELS = {
"dse": "Datenschutzerklaerung",
@@ -77,8 +85,14 @@ _DISCOVERY_RULES: list[tuple[str, tuple[str, ...]]] = [
"allgemeine-nutzungsbedingungen")),
("dsb", ("datenschutzbeauftragt", "data-protection-officer",
"dpo-contact", "/dsb")),
# A: 'legal-disclaimer' (Footer-„Rechtlicher Hinweis") VOR impressum, damit
# die Disclaimer-Seite NICHT mehr als Impressum substituiert wird (war die
# Ursache, dass die Cross-Doc-Reconciliation nie zündete).
("legal_notice", ("legal-disclaimer", "legal-disclaimer-pool",
"rechtlicher-hinweis", "rechtliche-hinweise",
"haftungsausschluss")),
("impressum", ("impressum", "imprint", "legal-notice", "site-notice",
"anbieterkennzeichnung", "legal-disclaimer-pool")),
"anbieterkennzeichnung")),
("dse", ("data-privacy", "datenschutz", "data-protection",
"privacy-policy", "privacy-notice", "dsgvo",
"data_privacy", "datenschutzinformation")),