d0e3621192
Mail Render V2 (compliance/services/mail_render_v2/) — 11-Modul-Subpackage
das einen einheitlichen Audit-Mail-Output erzeugt mit:
- Header + KPI-Kacheln (Score / Findings / Docs / Vendors)
- TOC + Sprung-Links
- 3-Bucket-Trennung: Kritische Befunde / Manuelle Prüfung / Interne Reminder
- Cookie-Inventar (Name·Vendor·Kategorie·Speicherdauer·Löschfrist·Sitzland·Quelle·Status)
- Sofortmaßnahmen-Aggregator ("Sitzland ergänzen für 11 Cookies")
- 24 Legacy-Wrappers — alle alten build_*_html in V2-Sections
- Scope-Filter: FIN/GOV/MED/INS/EDU/LEG aus Berichten wenn nicht relevant
- Hint/Action-Dedup: keine doppelten Sätze pro Card mehr
Aktiviert via env MAIL_RENDER_V2=true (Default: legacy renderer).
5 neue deterministische Findings als Phase D-2b/B4/B5/B6/B7/B8:
B4 vendor_consistency_check — Cross-Doc-Provider-Widerspruch
(Elli: DSE nennt Vertex AI für Chatbot, /de/cookies nennt Iadvize → HIGH).
6 Service-Types: chatbot/analytics/tag_manager/pixel/cdn/cmp.
B5 ai_act_transparency_check — AI Act Art. 50 Transparenzpflicht
(Elli: Vertex AI vorhanden ohne Pre-Chat-Disclosure → HIGH).
Plus B5-Erweiterung: Rechtsgrundlage Art-6-Abs-1-lit-f bei AI → MED
(Einwilligung empfehlen).
B6 cross_doc_dpo_check — DPO in DSE genannt, nicht im Impressum (LOW).
B7 doc_staleness_check — Datum-Extraktion aus DSE/AGB/Nutzungsbedingungen.
Cap: AGB/NB 3y, DSE 2y. Älter → MEDIUM (Elli NB Stand 2018 → HIGH).
B8 cmp_fingerprint_check — Banner detected, aber CMP-Provider generic
(kein Usercentrics/OneTrust/Cookiebot/etc → MED).
B3-Erweiterung detect_intra_doc_contradictions — Widersprüchliche
Speicherdauer im SELBEN Doc (Elli: Logfile 7d vs 30d → HIGH).
LLM-Plausibility-Phase (Phase D-2b, finding_plausibility_check.py):
- Läuft AFTER MC pipeline, BEFORE D3 render
- Prompt mit Beispiel-IDs + 3-Phase-Mapping: exact-ID / position-fallback /
fuzzy-tail-match
- Stempelt llm_title / llm_severity / llm_recommendation / llm_drop auf
jeden FAIL CheckItem
- V2-Render zeigt "🤖 LLM-Plausibility:" Box pro Finding wenn gestempelt
- KNOWN ISSUE: qwen3:30b-a3b liefert oft empty content auf format='json' +
8000-char-excerpt prompts. Pipeline läuft mit stamped=0 weiter. Task #16.
Coverage gegen Elli Ground Truth (zeroclaw/docs/ground-truth/elli_eco_2026-06-06.json,
13 expected findings via WebFetch-Agent-Crawl):
- 4/4 HIGH-Findings ✓ (COOKIE-CONSENT-UX-001 + WIDERRUFSBELEHRUNG-001 +
VENDOR-CONSISTENCY-001 + AI-ACT-TRANSPARENCY-001)
- 4/6 MEDIUM ✓
- 2/3 LOW ✓
- Total: 10/13 = 77% (Sprung von 4/13 = 31%)
Restliche 3 Gaps als Task #17: IMPRESSUM-001 (multi-entity USt-IdNr),
TRANSFER-001 (Vendor-Mechanismus DPF/SCC), TH-RETENTION-002 (AI-Retention
pro Datenkategorie).
V2-Mail-Preview in Mailpit: 'v2all@local.test' Subject '[V2 ALL] ELLI'.
Backend healthy, B1+B3+B4+B5+B6+B7+B8 alle live im Orchestrator.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
426 lines
24 KiB
JSON
426 lines
24 KiB
JSON
{
|
||
"site": "elli.eco",
|
||
"crawled_at": "2026-06-06",
|
||
"crawler": "BreakPilot-Compliance Ground-Truth crawl via WebFetch",
|
||
"notes_on_url_structure": [
|
||
"Canonical privacy policy lives at /de/datenschutz (NOT /de/datenschutzerklaerung — that path 404s).",
|
||
"Canonical cookie page lives at /de/cookies (NOT /de/cookie-richtlinie — that path 404s).",
|
||
"Canonical terms page lives at /de/nutzungsbedingungen (NOT /de/agb — that path 404s).",
|
||
"Withdrawal page: /de/widerruf and /de/widerrufsbelehrung BOTH 404. No standalone Widerrufsbelehrung discovered on the public-facing footer.",
|
||
"Footer has a 'Datenschutz-Einstellungen' label, but /de/datenschutz-einstellungen 404s as a URL — the link is a JS-triggered CMP-reopen, not a page. This is relevant for the reachability finding.",
|
||
"/de/ (with trailing slash) returns HTTP 303 redirect; homepage canonical is /de/startseite."
|
||
],
|
||
"docs": {
|
||
"home": {
|
||
"url": "https://www.elli.eco/de/startseite",
|
||
"exists": true,
|
||
"status": 200,
|
||
"word_count_approx": 1300,
|
||
"key_data": {
|
||
"cookie_banner_on_entry": true,
|
||
"cmp_provider_visible": "not explicitly identifiable from rendered markup (no Usercentrics/OneTrust/Cookiebot/TrustArc fingerprint exposed to crawler)",
|
||
"consent_banner_button_labels": ["ablehnen", "akzeptieren"],
|
||
"ai_chatbot_widget_visible": false,
|
||
"ai_chatbot_disclosure_near_widget": null,
|
||
"footer_links": [
|
||
"Impressum",
|
||
"Datenschutz",
|
||
"EU Data Act",
|
||
"Datenschutz-Einstellungen",
|
||
"Nutzungsbedingungen",
|
||
"Cookies",
|
||
"Barrierefreiheit",
|
||
"Karriere",
|
||
"Newsroom",
|
||
"Mission Statement",
|
||
"Hinweisgebersystem",
|
||
"Kontakt",
|
||
"Ladetarife",
|
||
"Volkswagen Naturstrom",
|
||
"FAQ für Privatkunden",
|
||
"Fleet Charging",
|
||
"Wallbox",
|
||
"Flexpole - Schnellladesäule",
|
||
"Charging Site Management",
|
||
"Downloads",
|
||
"Partner FAQs"
|
||
]
|
||
}
|
||
},
|
||
"impressum": {
|
||
"url": "https://www.elli.eco/de/impressum",
|
||
"exists": true,
|
||
"status": 200,
|
||
"word_count_approx": 160,
|
||
"key_data": {
|
||
"entities_listed": [
|
||
{
|
||
"legal_name": "Volkswagen Group Charging GmbH",
|
||
"address": "Karl-Liebknecht-Str. 32, 10178 Berlin",
|
||
"register_court": "Amtsgericht Charlottenburg",
|
||
"hrb": "HRB 208967 B",
|
||
"vat_id": null,
|
||
"managing_directors": ["Giovanni Palazzo (CEO)", "Mark Möller (CTO)", "Dr. Tobias Canz (CFO)", "Anja Christmann (CHRO)"],
|
||
"phone": "00800 3554 1111",
|
||
"email": "info@elli.eco",
|
||
"content_responsible_mstv_section_18": "Giovanni Palazzo, Karl-Liebknecht-Str. 32, 10178 Berlin"
|
||
},
|
||
{
|
||
"legal_name": "Elli Mobility GmbH",
|
||
"address": "Karl-Liebknecht-Str. 32, 10178 Berlin",
|
||
"register_court": "Amtsgericht Charlottenburg",
|
||
"hrb": "HRB 274616 B",
|
||
"vat_id": "DE814424009",
|
||
"managing_directors": ["Joschi Jennermann", "Sebastian Steffen"],
|
||
"phone": "00800 – 00002030",
|
||
"email": "ellimobility@elli.eco",
|
||
"content_responsible_mstv_section_18": "Joschi Jennermann und Sebastian Steffen, Karl-Liebknecht-Str. 32, 10178 Berlin"
|
||
}
|
||
],
|
||
"dpo_named_in_impressum": false,
|
||
"dpo_contact_in_impressum": null,
|
||
"vat_id_for_vw_group_charging": null,
|
||
"completeness_section_5_tmg": "PARTIAL — VW Group Charging GmbH entry lacks a USt-IdNr."
|
||
}
|
||
},
|
||
"dse": {
|
||
"url": "https://www.elli.eco/de/datenschutz",
|
||
"exists": true,
|
||
"status": 200,
|
||
"word_count_approx": 18500,
|
||
"alt_paths_tried": {
|
||
"/de/datenschutzerklaerung": "404",
|
||
"/de/datenschutzerklaerung#cookies": "404"
|
||
},
|
||
"key_data": {
|
||
"controller": [
|
||
{"name": "Volkswagen Group Charging GmbH", "address": "Karl-Liebknecht-Str. 32, 10178 Berlin", "hrb": "HRB 208967 B"},
|
||
{"name": "Elli Mobility GmbH", "address": "Karl-Liebknecht-Str. 32, 10178 Berlin", "hrb": "HRB 274616 B"}
|
||
],
|
||
"dsb_named": true,
|
||
"dsb_contact": {
|
||
"address": "Mollstraße 1, 10178 Berlin",
|
||
"email": "privacy@elli.eco",
|
||
"note": "DPO disclosed inside the DSE, NOT in the Impressum (separate finding)."
|
||
},
|
||
"retention_claims": [
|
||
{"sentence": "Log files: nach 7 Tagen gelöscht", "days": 7, "subject": "log_files_v1"},
|
||
{"sentence": "Log files: IP addresses and access data retained for 30 days", "days": 30, "subject": "log_files_v2", "note": "Inconsistent with the 7-day claim — TWO different retention values appear in the policy."},
|
||
{"sentence": "Kontaktanfragen: 6 Monate nach der Beantwortung Ihrer Anfrage", "months": 6, "subject": "contact_inquiries"},
|
||
{"sentence": "Google Analytics: 14 Monate nach der Bereitstellung der Daten", "months": 14, "subject": "google_analytics_user_id"},
|
||
{"sentence": "Chatbot: Die Speicherdauer der Daten beträgt grundsätzlich 6 Monate", "months": 6, "subject": "chatbot_vertex_ai"},
|
||
{"sentence": "B2B-Registrierung (unvollständig): sechs Monate lang", "months": 6, "subject": "b2b_registration_incomplete"},
|
||
{"sentence": "Kundenzufriedenheitsumfragen: nach fünf Jahren gelöscht", "years": 5, "subject": "customer_satisfaction_surveys"},
|
||
{"sentence": "Pseudonymisierte Produktdaten: nach 5 Jahren", "years": 5, "subject": "pseudonymised_product_data"},
|
||
{"sentence": "Bewerbungen (abgelehnt): 6 Monate nach Bekanntgabe der Entscheidung", "months": 6, "subject": "job_applications_rejected"},
|
||
{"sentence": "Facebook IP-Adressen: nach 90 Tagen gelöscht", "days": 90, "subject": "facebook_ip"},
|
||
{"sentence": "Telefonaufzeichnungen (QS): 30 Tage", "days": 30, "subject": "call_recordings_qa"},
|
||
{"sentence": "Pseudonymisierte Aufzeichnungen: 3 Jahre oder gemäß gesetzlicher Aufbewahrungspflicht", "years": 3, "subject": "call_recordings_pseudonymised"},
|
||
{"sentence": "Newsletter: bis zum Widerruf der Einwilligung", "days": null, "subject": "newsletter"},
|
||
{"sentence": "Produktregistrierung: bis zum Widerruf der Einwilligung", "days": null, "subject": "product_registration"}
|
||
],
|
||
"vendors_mentioned": [
|
||
"Google Analytics",
|
||
"Google Tag Manager",
|
||
"Google Ads / DoubleClick Floodlight",
|
||
"YouTube Analytics",
|
||
"Google Vertex AI",
|
||
"Google Forms",
|
||
"Meta (Facebook Pixel / Ads Manager)",
|
||
"Instagram Insights",
|
||
"LinkedIn Campaign Manager",
|
||
"LinkedIn Insight Tag",
|
||
"Hotjar",
|
||
"Leadinfo",
|
||
"Salesforce",
|
||
"Webflow",
|
||
"Adyen",
|
||
"CRIF GmbH",
|
||
"Arvato Distribution GmbH",
|
||
"HERE Global B.V.",
|
||
"Stadia Maps",
|
||
"Iadvize"
|
||
],
|
||
"third_country_transfers": [
|
||
{"vendor": "Google Analytics", "country": "US", "mechanism": "Data Privacy Framework (DPF)"},
|
||
{"vendor": "Google Ads / Conversion Tracking", "country": "US", "mechanism": "DPF"},
|
||
{"vendor": "YouTube", "country": "US", "mechanism": "DPF"},
|
||
{"vendor": "Meta (Facebook/Instagram)", "country": "US", "mechanism": "DPF"},
|
||
{"vendor": "Salesforce", "country": "US", "mechanism": "Standard Contractual Clauses (SCCs)"},
|
||
{"vendor": "Webflow", "country": "US", "mechanism": "SCCs (implied — vendor seated in San Francisco)"}
|
||
],
|
||
"ai_chatbot": {
|
||
"present": true,
|
||
"provider": "Google Vertex AI",
|
||
"processor": "Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland",
|
||
"retention_claim": "6 Monate",
|
||
"literal_quote": "Im Rahmen der Nutzung des Chatbots werden lediglich IT- und pseudonymisierte Nutzungsdaten verarbeitet... Die Speicherdauer der Daten beträgt grundsätzlich 6 Monate.",
|
||
"legal_basis": "Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse)",
|
||
"consent_collected_pre_interaction": false,
|
||
"ai_act_disclosure_in_chat_ui": "unknown — not observable on /de/startseite because the chatbot widget was NOT rendered to the crawler. Live UI may differ."
|
||
},
|
||
"legal_basis_per_tool": {
|
||
"log_files": "Art. 6 Abs. 1 lit. f DSGVO",
|
||
"contact_form": "Art. 6 Abs. 1 lit. b + lit. f DSGVO",
|
||
"test_project_enrollment": "Art. 6 Abs. 1 lit. a DSGVO",
|
||
"webshop_orders": "Art. 6 Abs. 1 lit. b DSGVO",
|
||
"payment_adyen": "Art. 6 Abs. 1 lit. b DSGVO",
|
||
"chatbot_vertex_ai": "Art. 6 Abs. 1 lit. f DSGVO",
|
||
"newsletter": "Art. 6 Abs. 1 lit. a DSGVO",
|
||
"satisfaction_surveys": "Art. 6 Abs. 1 lit. f DSGVO",
|
||
"technical_cookies": "Art. 6 Abs. 1 lit. f DSGVO",
|
||
"non_technical_cookies": "Art. 6 Abs. 1 lit. a DSGVO",
|
||
"google_analytics": "Art. 6 Abs. 1 lit. a DSGVO",
|
||
"social_media_tracking": "Art. 6 Abs. 1 lit. f DSGVO",
|
||
"job_applications": "Art. 6 Abs. 1 lit. b DSGVO"
|
||
},
|
||
"cookie_categories_in_dse": [
|
||
"Technisch notwendige Cookies",
|
||
"Technisch nicht erforderliche Cookies (Komfort: Consent, Sprache, Warenkorb, LocalStorage)",
|
||
"Analyse-Cookies (Google Analytics)",
|
||
"Tracking / Remarketing (Google Ads, LinkedIn, Facebook, Instagram, YouTube)"
|
||
]
|
||
}
|
||
},
|
||
"agb": {
|
||
"url": "https://www.elli.eco/de/nutzungsbedingungen",
|
||
"exists": true,
|
||
"status": 200,
|
||
"word_count_approx": 520,
|
||
"alt_paths_tried": {
|
||
"/de/agb": "404",
|
||
"/de/agb/": "404",
|
||
"/de/agb-privatkunden": "404"
|
||
},
|
||
"key_data": {
|
||
"title": "Allgemeine Nutzungsbedingungen",
|
||
"stand": "Dezember 2018",
|
||
"contracting_party": "Volkswagen Group Charging GmbH",
|
||
"key_sections": ["Haftungsausschlüsse", "Drittinhalte / Verlinkung", "Urheber- und Markenrecht", "Untersagte Nutzung", "Streitbeilegung (Ablehnung Verbraucherschlichtung mit Ausnahme Energieliefervertrag)"],
|
||
"references_to_data_protection": false,
|
||
"references_to_ai_or_automated_decisions": false,
|
||
"withdrawal_rights_mentioned": false,
|
||
"staleness_finding": "Stand 'Dezember 2018' — 7,5 Jahre alt; mehrere DSGVO-Praxisrunden + AI Act + DSA seither erlassen."
|
||
}
|
||
},
|
||
"widerruf": {
|
||
"url_canonical_attempted": "https://www.elli.eco/de/widerrufsbelehrung",
|
||
"exists": false,
|
||
"status": 404,
|
||
"alt_paths_tried": {
|
||
"/de/widerruf": "404",
|
||
"/de/widerrufsbelehrung-privatkunden": "404"
|
||
},
|
||
"reason": "Keine eigenständige Widerrufsbelehrung als Public Page auf der DE-Domain auffindbar. Footer enthält KEINEN Widerruf-Link. Möglich, dass die Widerrufsbelehrung ausschließlich im Shop-Checkout-Flow / PDF erscheint — aus reiner Site-Crawler-Sicht jedoch NICHT verlinkt.",
|
||
"compliance_implication": "Bei B2C-Webshop (Ladetarife, Wallbox, Volkswagen Naturstrom) gem. § 312d BGB + Art. 246a EGBGB MUSS die Widerrufsbelehrung dauerhaft + leicht zugänglich sein. Fehlende Footer-Verlinkung = Verstoßindiz."
|
||
},
|
||
"cookie_richtlinie": {
|
||
"url_canonical_attempted": "https://www.elli.eco/de/cookie-richtlinie",
|
||
"exists": false,
|
||
"status": 404,
|
||
"alt_path_found": "https://www.elli.eco/de/cookies",
|
||
"reason": "Pfad /de/cookie-richtlinie 404. Stattdessen existiert /de/cookies (Status 200) — Footer-Label lautet 'Cookies', nicht 'Cookie-Richtlinie'."
|
||
},
|
||
"cookies_page": {
|
||
"url": "https://www.elli.eco/de/cookies",
|
||
"exists": true,
|
||
"status": 200,
|
||
"key_data": {
|
||
"categories": ["Session-Cookies", "Permanente / Protokoll-Cookies", "Drittanbieter-Cookies"],
|
||
"cookie_table_excerpt": [
|
||
{"name": "cookie_consent", "type": "Protokoll", "duration": "3 Monate"},
|
||
{"name": "_ga", "vendor": "Google Analytics", "duration": "24 Monate"},
|
||
{"name": "_gid", "vendor": "Google Analytics", "duration": "24 Stunden"},
|
||
{"name": "_gat", "vendor": "Google Analytics", "duration": "10 Minuten"},
|
||
{"name": "_hjid / _hjClosedSurveyInvites / _hjDonePolls", "vendor": "Hotjar", "duration": "365 Tage"},
|
||
{"name": "fr / fp / _fbp / _fbc", "vendor": "Facebook", "duration": "90 Tage bis 2 Jahre"},
|
||
{"name": "sessionStorage chatbot items", "vendor": "Iadvize?", "duration": "Sitzung"}
|
||
],
|
||
"vendors_on_cookies_page": ["Google Analytics", "Hotjar", "Facebook", "Iadvize"],
|
||
"vertex_ai_disclosed_here": false,
|
||
"consistency_with_dse": "INCONSISTENT — Cookies-Seite nennt Iadvize als Chat-Provider; DSE nennt Google Vertex AI als Chatbot-Provider. Doppelte / widersprüchliche Chat-Stack-Aussage."
|
||
}
|
||
}
|
||
},
|
||
"expected_findings": [
|
||
{
|
||
"id": "COOKIE-CONSENT-UX-001",
|
||
"severity": "HIGH",
|
||
"title": "Mobile-Footer-Reachability für Consent-Reopen unzureichend",
|
||
"art_dsgvo": "Art. 7 Abs. 3 DSGVO (Widerruf der Einwilligung so einfach wie Erteilung)",
|
||
"art_ttdsg": "§ 25 TTDSG / TDDDG",
|
||
"evidence": "Footer enthält 'Datenschutz-Einstellungen' als Label, aber /de/datenschutz-einstellungen 404 → Link ist JS-getriggertes CMP-Reopen. Auf mobiler Ansicht / bei JS-Blockern oder Crawl-Sicht nicht funktional. Zusätzlich öffnet 'Cookies'-Link eine statische Seite, KEIN Consent-Reopen.",
|
||
"expected_pass": false
|
||
},
|
||
{
|
||
"id": "COOKIE-CONSENT-UX-002",
|
||
"severity": "MEDIUM",
|
||
"title": "Consent-Banner-Button-Symmetrie zwar ok ('ablehnen' vs 'akzeptieren'), aber CMP-Provider nicht offen erkennbar",
|
||
"evidence": "Beide Buttons sichtbar gleichrangig in Markup. CMP-Fingerprint (Usercentrics/OneTrust/Cookiebot) nicht extrahierbar → Transparenz über eingesetzten CMP fehlt in DSE-Cookies-Sektion.",
|
||
"expected_pass": "PARTIAL"
|
||
},
|
||
{
|
||
"id": "TH-RETENTION-001",
|
||
"severity": "MEDIUM",
|
||
"title": "Widersprüchliche Speicherdauer für Log-Files in DSE",
|
||
"evidence": "Privacy Policy nennt einmal '7 Tage' und einmal '30 Tage' Logfile-Retention. Eine der beiden ist falsch oder veraltet.",
|
||
"expected_pass": false
|
||
},
|
||
{
|
||
"id": "TH-RETENTION-002",
|
||
"severity": "LOW",
|
||
"title": "Chatbot-Retention '6 Monate grundsätzlich' ohne Differenzierung nach Kategorie",
|
||
"evidence": "Vertex-AI-Chatbot speichert 'IT- und pseudonymisierte Nutzungsdaten' pauschal 6 Monate. Keine Abstufung nach Datenkategorie (Prompt/Output/Metadaten).",
|
||
"expected_pass": "PARTIAL"
|
||
},
|
||
{
|
||
"id": "VENDOR-CONSISTENCY-001",
|
||
"severity": "HIGH",
|
||
"title": "Chatbot-Provider widersprüchlich zwischen Cookies-Seite und DSE",
|
||
"evidence": "/de/cookies nennt Iadvize als Chat-Provider; /de/datenschutz nennt Google Vertex AI. Entweder doppelter Stack ohne Offenlegung beider Verarbeiter, oder veraltete Cookies-Seite. Verstoß gegen Transparenzgebot Art. 13 DSGVO.",
|
||
"expected_pass": false
|
||
},
|
||
{
|
||
"id": "AI-ACT-TRANSPARENCY-001",
|
||
"severity": "HIGH",
|
||
"title": "AI-Act Art. 50 Transparenzpflicht für Chatbot nicht erkennbar erfüllt",
|
||
"evidence": "Chatbot nutzt Google Vertex AI (LLM). Art. 50 Abs. 1 AI Act verlangt, dass Endnutzer informiert werden, dass sie mit einem KI-System interagieren. In DSE erwähnt, aber im Chat-UI Pre-Interaction-Hinweis NICHT verifizierbar (Widget nicht aktiv im Crawl).",
|
||
"expected_pass": "UNKNOWN-LIKELY-FAIL"
|
||
},
|
||
{
|
||
"id": "AI-ACT-RISK-001",
|
||
"severity": "MEDIUM",
|
||
"title": "Rechtsgrundlage Vertex-AI-Chatbot = berechtigtes Interesse statt Einwilligung",
|
||
"evidence": "Art. 6 Abs. 1 lit. f angegeben. Bei Vertex-AI-Verarbeitung mit potenzieller US-Transfer-Komponente + Profiling-Ähnlichkeit der LLM-Logging-Daten ist berechtigtes Interesse fragwürdig. Einwilligung (lit. a) wäre sauberer.",
|
||
"expected_pass": false
|
||
},
|
||
{
|
||
"id": "IMPRESSUM-001",
|
||
"severity": "MEDIUM",
|
||
"title": "USt-IdNr. fehlt bei VW Group Charging GmbH im Impressum",
|
||
"evidence": "Nur Elli Mobility GmbH listet 'DE814424009'. VW Group Charging GmbH ohne USt-IdNr. — § 5 Abs. 1 Nr. 6 TMG fordert Angabe, sofern vorhanden.",
|
||
"expected_pass": false
|
||
},
|
||
{
|
||
"id": "IMPRESSUM-002",
|
||
"severity": "LOW",
|
||
"title": "DPO nicht im Impressum genannt",
|
||
"evidence": "DPO Mollstr. 1 / privacy@elli.eco erscheint nur in DSE. Best Practice (nicht zwingend Pflicht): DPO-Verlinkung auch im Impressum.",
|
||
"expected_pass": "BEST-PRACTICE"
|
||
},
|
||
{
|
||
"id": "WIDERRUFSBELEHRUNG-001",
|
||
"severity": "HIGH",
|
||
"title": "Keine Widerrufsbelehrung im Footer / Public-Pfad auffindbar",
|
||
"evidence": "Pfade /de/widerruf, /de/widerrufsbelehrung, /de/widerrufsbelehrung-privatkunden alle 404. Footer enthält keinen Widerrufslink. Bei B2C-Shop-Komponenten (Wallbox, Naturstrom) verstößt das gegen § 312d BGB i.V.m. Art. 246a EGBGB (dauerhaft + leicht zugänglich).",
|
||
"expected_pass": false
|
||
},
|
||
{
|
||
"id": "TERMS-STALENESS-001",
|
||
"severity": "MEDIUM",
|
||
"title": "Allgemeine Nutzungsbedingungen Stand Dezember 2018",
|
||
"evidence": "Über 7 Jahre alt; weder DSA noch AI Act referenziert; KI-Chatbot existiert ohne Erwähnung in den Nutzungsbedingungen.",
|
||
"expected_pass": false
|
||
},
|
||
{
|
||
"id": "TRANSFER-001",
|
||
"severity": "MEDIUM",
|
||
"title": "DPF + SCCs gemischt — Mechanismus pro Vendor nicht durchgängig benannt",
|
||
"evidence": "Google/Meta auf DPF; Salesforce auf SCCs; Webflow als US-Sitz erwähnt aber Mechanismus implizit. Detailgrad pro Vendor uneinheitlich.",
|
||
"expected_pass": "PARTIAL"
|
||
},
|
||
{
|
||
"id": "URL-STRUCTURE-001",
|
||
"severity": "LOW",
|
||
"title": "Pfad-Inkonsistenz Footer-Label ↔ URL-Slug",
|
||
"evidence": "'Cookie-Richtlinie' (404) erwartet, real existiert /de/cookies. 'AGB' (404) erwartet, real existiert /de/nutzungsbedingungen. Externe Verlinkungen / Bookmarks brechen.",
|
||
"expected_pass": "PARTIAL"
|
||
}
|
||
],
|
||
"expected_vendors_in_dse": [
|
||
{"name": "Google Analytics", "country": "US", "ai_act_relevance": "none direct; profiling via _ga/_gid"},
|
||
{"name": "Google Tag Manager", "country": "US", "ai_act_relevance": "none"},
|
||
{"name": "Google Ads / DoubleClick Floodlight", "country": "US", "ai_act_relevance": "none"},
|
||
{"name": "Google Vertex AI", "country": "EU-frontend / US-fallback nicht ausgeschlossen", "ai_act_relevance": "HIGH — GPAI / LLM-System gem. AI Act Art. 50 + 51, Transparenzpflicht"},
|
||
{"name": "YouTube Analytics", "country": "US", "ai_act_relevance": "none"},
|
||
{"name": "Google Forms", "country": "US", "ai_act_relevance": "none"},
|
||
{"name": "Meta (Facebook Pixel)", "country": "US", "ai_act_relevance": "Profiling-relevant"},
|
||
{"name": "Instagram Insights", "country": "US", "ai_act_relevance": "none"},
|
||
{"name": "LinkedIn Insight Tag", "country": "US/IE", "ai_act_relevance": "none"},
|
||
{"name": "Hotjar", "country": "MT/EU", "ai_act_relevance": "Session-Replay → potenzielle Profiling-Komponente"},
|
||
{"name": "Leadinfo", "country": "DE/NL", "ai_act_relevance": "B2B-Identifikation, nicht AI"},
|
||
{"name": "Salesforce", "country": "US", "ai_act_relevance": "Einstein-Features wenn aktiv → AI-Bewertung nötig"},
|
||
{"name": "Webflow", "country": "US", "ai_act_relevance": "CMS, keine AI"},
|
||
{"name": "Adyen", "country": "NL", "ai_act_relevance": "Fraud-Scoring potenziell relevant"},
|
||
{"name": "CRIF GmbH", "country": "DE", "ai_act_relevance": "Bonitäts-Scoring → automatisierte Entscheidung Art. 22 DSGVO!"},
|
||
{"name": "Arvato Distribution GmbH", "country": "DE", "ai_act_relevance": "none"},
|
||
{"name": "HERE Global B.V.", "country": "NL", "ai_act_relevance": "none"},
|
||
{"name": "Stadia Maps", "country": "US", "ai_act_relevance": "none"},
|
||
{"name": "Iadvize", "country": "FR", "ai_act_relevance": "Live-Chat — wenn AI-Routing aktiv: AI-Act relevant; Konflikt mit Vertex AI Angabe"}
|
||
],
|
||
"expected_cookie_categories": [
|
||
"Technisch notwendige Cookies",
|
||
"Komfort-Cookies (Sprache, Warenkorb, Consent)",
|
||
"Statistik / Analyse (Google Analytics, Hotjar)",
|
||
"Marketing / Tracking (Google Ads, Meta, LinkedIn, YouTube, Instagram, Facebook Pixel)"
|
||
],
|
||
"expected_critical_issues": [
|
||
"Mobile Reachability: Footer hat KEINEN harten 'Cookie-Einstellungen öffnen' Pfad — 'Datenschutz-Einstellungen' ist nur JS-Trigger ohne URL-Fallback; 'Cookies' verlinkt nur statische Seite.",
|
||
"AI Assistant: DSE nennt Google Vertex AI mit 6 Monaten Retention + Rechtsgrundlage Art. 6 Abs. 1 lit. f — KEINE Einwilligung pre-interaction, AI-Act Art. 50 Disclosure im Chat-UI nicht verifiziert.",
|
||
"Vendor-Stack-Widerspruch: Cookies-Seite sagt Iadvize, DSE sagt Vertex AI — entweder doppelter Stack ohne saubere Trennung oder veraltete Cookies-Seite.",
|
||
"Widerrufsbelehrung als eigenständige Seite nicht im Footer — bei B2C-Komponenten regelwidrig.",
|
||
"Nutzungsbedingungen Stand Dezember 2018 — fast 8 Jahre alt; weder AI Act noch DSA reflektiert.",
|
||
"Logfile-Retention widersprüchlich (7 vs 30 Tage) in derselben DSE.",
|
||
"VW Group Charging GmbH ohne USt-IdNr. im Impressum (TMG § 5 Abs. 1 Nr. 6).",
|
||
"DPO nur in DSE, nicht im Impressum (best practice gap).",
|
||
"Footer-Label 'Cookie-Richtlinie' / 'AGB' erwartet → reale Slugs sind /de/cookies + /de/nutzungsbedingungen; externe Bookmarks brechen, SEO-Verlust für Standardsuchen."
|
||
],
|
||
"ai_chatbot_analysis": {
|
||
"name_in_ui": "AI Assistant (vermutet; Widget im Crawl nicht aktiv gerendert)",
|
||
"provider_disclosed_in_dse": "Google Vertex AI (Google Ireland Limited als Auftragsverarbeiter)",
|
||
"alt_provider_disclosed_in_cookies_page": "Iadvize (widersprüchlich)",
|
||
"retention_claim_in_dse": "6 Monate (grundsätzlich)",
|
||
"legal_basis_in_dse": "Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse) — nicht Einwilligung",
|
||
"user_warning_before_input": "Nicht im Crawl beobachtbar — Pre-Interaction-Disclosure-Status: UNKNOWN. Im Web-Frontend bei Live-Test zu prüfen.",
|
||
"ai_act_article_50_compliance": "WAHRSCHEINLICH UNZUREICHEND — Hinweis nur in DSE statt am Interaction-Point.",
|
||
"transparency_score": "5/10 — Provider + Retention transparent, aber Rechtsgrundlage schwach, Pre-Chat-Disclosure fehlt, Vendor-Widerspruch zur Cookies-Seite."
|
||
},
|
||
"footer_reachability_analysis": {
|
||
"has_consent_reopen_link": false,
|
||
"has_consent_reopen_label": true,
|
||
"label_text": "Datenschutz-Einstellungen",
|
||
"label_behaviour": "JS-Trigger ohne eigene URL — /de/datenschutz-einstellungen 404",
|
||
"footer_links_relevant": [
|
||
"Datenschutz (→ /de/datenschutz, statisch)",
|
||
"Datenschutz-Einstellungen (→ JS-CMP-Reopen, kein URL-Fallback)",
|
||
"Cookies (→ /de/cookies, statisch, KEIN Reopen)",
|
||
"Impressum (→ /de/impressum)",
|
||
"Nutzungsbedingungen (→ /de/nutzungsbedingungen)"
|
||
],
|
||
"footer_widerruf_link_present": false,
|
||
"browser_deflection_text": "Keine Hinweistexte beobachtet — Banner-Buttons rein 'ablehnen' / 'akzeptieren' ohne Hinweis, dass Widerruf später möglich ist.",
|
||
"art_7_abs_3_compliance": "FAIL — Widerruf nicht 'so einfach wie Erteilung'; abhängig von JavaScript + Auffinden eines Footer-Labels in deutschsprachigem Fachjargon. Mobile Reachability schwach.",
|
||
"ttdsg_section_25_compliance": "PARTIAL FAIL — Consent-Erteilung über Banner, Widerruf-Mechanismus fragil."
|
||
},
|
||
"summary_for_breakpilot_audit_comparison": {
|
||
"total_pages_crawled_200": 5,
|
||
"total_pages_404": 4,
|
||
"key_url_corrections_needed_by_audit_tool": {
|
||
"datenschutzerklaerung_should_resolve_to": "/de/datenschutz",
|
||
"agb_should_resolve_to": "/de/nutzungsbedingungen",
|
||
"cookie-richtlinie_should_resolve_to": "/de/cookies",
|
||
"widerrufsbelehrung": "not found anywhere on public footer — flag as finding"
|
||
},
|
||
"high_severity_findings_count": 4,
|
||
"medium_severity_findings_count": 6,
|
||
"low_severity_findings_count": 3,
|
||
"must_detect_to_pass_benchmark": [
|
||
"COOKIE-CONSENT-UX-001",
|
||
"VENDOR-CONSISTENCY-001",
|
||
"AI-ACT-TRANSPARENCY-001",
|
||
"WIDERRUFSBELEHRUNG-001",
|
||
"TH-RETENTION-001"
|
||
]
|
||
}
|
||
}
|