docs: add Phase 5 (Payment/Marketing checks) + Phase 6 (auto-corrections)
- Payment: Stripe, PayPal, Klarna (Art. 22 Bonitaetspruefung!), Adyen, Mollie - Marketing: GA, Meta Pixel, TikTok, Hotjar, Clarity, Newsletter-Anbieter - Each service: DSE mention check, consent check, third-country check - Pre-launch mode: agent generates ready-to-insert DSE text blocks via Qwen - Correction types: missing service, wrong legal basis, outdated entry Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -484,6 +484,291 @@ Tracking: Google Analytics (G-03F834EHLM), Didomi CMP
|
|||||||
→ Impressum-Finding: 404 auf /impressum/ (§5 TMG Verstoss)
|
→ Impressum-Finding: 404 auf /impressum/ (§5 TMG Verstoss)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Phase 5: Branchenspezifische Pruefmodule
|
||||||
|
|
||||||
|
### 5a: Zahlungsanbieter (PCI-DSS + DSGVO)
|
||||||
|
|
||||||
|
Pruefung der korrekten Einbindung von Payment-Anbietern:
|
||||||
|
|
||||||
|
```
|
||||||
|
Erkennungsmuster → Pruefpunkte
|
||||||
|
|
||||||
|
Stripe (js.stripe.com)
|
||||||
|
✓ Wird Stripe.js korrekt ueber stripe.com geladen (nicht self-hosted)?
|
||||||
|
✓ Ist "Payment" oder "Zahlung" in der DSE mit Stripe erwaehnt?
|
||||||
|
✓ Rechtsgrundlage: Art. 6(1)(b) Vertragserfuellung angegeben?
|
||||||
|
✓ SCCs oder DPF fuer USA-Transfer dokumentiert?
|
||||||
|
✗ Werden Kreditkartendaten an eigenen Server gesendet (PCI-Verstoss)?
|
||||||
|
|
||||||
|
PayPal (paypal.com/sdk)
|
||||||
|
✓ PayPal in DSE erwaehnt?
|
||||||
|
✓ Rechtsgrundlage angegeben?
|
||||||
|
✓ Hinweis auf PayPal-eigene DSE verlinkt?
|
||||||
|
|
||||||
|
Adyen (adyen.com)
|
||||||
|
✓ EU-Anbieter (NL) — kein Drittlandtransfer
|
||||||
|
✓ In DSE erwaehnt?
|
||||||
|
|
||||||
|
Mollie (mollie.com)
|
||||||
|
✓ EU-Anbieter (NL) — kein Drittlandtransfer
|
||||||
|
✓ In DSE erwaehnt?
|
||||||
|
|
||||||
|
Klarna (klarna.com)
|
||||||
|
✓ EU-Anbieter (SE) — kein Drittlandtransfer
|
||||||
|
✓ Bonitaetspruefung erwaehnt? (Art. 22 DSGVO — automatisierte Entscheidung!)
|
||||||
|
✓ SCHUFA/Auskunftei-Hinweis vorhanden?
|
||||||
|
```
|
||||||
|
|
||||||
|
**Besonderer Check:** Wenn ein Payment-Anbieter Bonitaetspruefungen durchfuehrt
|
||||||
|
(Klarna, PayPal, Ratenzahlung), MUSS Art. 22 DSGVO in der DSE erwaehnt werden
|
||||||
|
(automatisierte Einzelentscheidung). Das ist ein haeufig uebersehener Verstoss.
|
||||||
|
|
||||||
|
### 5b: Marketing & Tracking (ePrivacy + DSGVO)
|
||||||
|
|
||||||
|
Systematische Pruefung aller Marketing-/Tracking-Einbindungen:
|
||||||
|
|
||||||
|
```
|
||||||
|
Kategorie: Webanalyse
|
||||||
|
──────────────────────
|
||||||
|
Google Analytics → Einwilligung PFLICHT, DSE-Eintrag, IP-Anonymisierung pruefen
|
||||||
|
Matomo (Cloud) → Einwilligung empfohlen, DSE-Eintrag
|
||||||
|
Matomo (Self-Host) → Keine Einwilligung noetig wenn cookieless, DSE-Eintrag
|
||||||
|
Plausible/Pirsch → Keine Einwilligung noetig (cookieless, EU), DSE-Eintrag
|
||||||
|
|
||||||
|
Kategorie: Werbenetzwerke
|
||||||
|
─────────────────────────
|
||||||
|
Google Ads/AdSense → Einwilligung PFLICHT, DSE-Eintrag, Drittlandtransfer
|
||||||
|
Meta/Facebook Pixel → Einwilligung PFLICHT, DSE-Eintrag, Drittlandtransfer
|
||||||
|
TikTok Pixel → Einwilligung PFLICHT, DSE-Eintrag, Drittlandtransfer (China!)
|
||||||
|
Pinterest Tag → Einwilligung PFLICHT, DSE-Eintrag, Drittlandtransfer
|
||||||
|
LinkedIn Insight → Einwilligung PFLICHT, DSE-Eintrag, Drittlandtransfer
|
||||||
|
Twitter/X Pixel → Einwilligung PFLICHT, DSE-Eintrag, Drittlandtransfer
|
||||||
|
Criteo → Einwilligung PFLICHT, DSE-Eintrag (FR/EU aber Tracking)
|
||||||
|
|
||||||
|
Kategorie: Remarketing / Retargeting
|
||||||
|
─────────────────────────────────────
|
||||||
|
Google Remarketing → Einwilligung PFLICHT, eigene DSE-Sektion empfohlen
|
||||||
|
Facebook Custom Audiences → Einwilligung PFLICHT, Hochladen von Kundenlisten pruefen
|
||||||
|
|
||||||
|
Kategorie: Heatmaps & Session Recording
|
||||||
|
────────────────────────────────────────
|
||||||
|
Hotjar → Einwilligung PFLICHT (zeichnet Nutzerverhalten auf!)
|
||||||
|
Microsoft Clarity → Einwilligung PFLICHT (Session Replay!)
|
||||||
|
FullStory → Einwilligung PFLICHT, DSE-Eintrag, Drittlandtransfer
|
||||||
|
Mouseflow → Einwilligung PFLICHT, DSE-Eintrag
|
||||||
|
|
||||||
|
Kategorie: A/B Testing
|
||||||
|
───────────────────────
|
||||||
|
Google Optimize → Eingestellt, aber Legacy-Code pruefen
|
||||||
|
Optimizely → Einwilligung je nach Implementierung
|
||||||
|
VWO → Einwilligung wenn Cookies gesetzt werden
|
||||||
|
|
||||||
|
Kategorie: Newsletter / E-Mail Marketing
|
||||||
|
─────────────────────────────────────────
|
||||||
|
Mailchimp → Drittlandtransfer (USA), SCCs pruefen
|
||||||
|
Brevo (ehem. Sendinblue) → EU (FR) — OK
|
||||||
|
CleverReach → EU (DE) — OK
|
||||||
|
ActiveCampaign → USA, Drittlandtransfer
|
||||||
|
HubSpot → USA, Drittlandtransfer
|
||||||
|
Rapidmail → EU (DE) — OK
|
||||||
|
```
|
||||||
|
|
||||||
|
### Prueflogik pro Marketing-Dienst
|
||||||
|
|
||||||
|
```python
|
||||||
|
def check_marketing_service(service: DetectedService, dse_text: str) -> list[Finding]:
|
||||||
|
findings = []
|
||||||
|
registry = THIRD_PARTY_REGISTRY[service.id]
|
||||||
|
|
||||||
|
# 1. In DSE erwaehnt?
|
||||||
|
if not service_mentioned_in_dse(service, dse_text):
|
||||||
|
findings.append(Finding(
|
||||||
|
severity="HIGH",
|
||||||
|
code=f"MARKETING-{service.id}-NOT-IN-DSE",
|
||||||
|
text=f"{service.name} ist auf der Website eingebunden aber nicht in der "
|
||||||
|
f"Datenschutzerklaerung erwaehnt (Art. 13 DSGVO Verstoss)."
|
||||||
|
))
|
||||||
|
|
||||||
|
# 2. Einwilligung vorhanden?
|
||||||
|
if registry["requires_consent"] and not consent_banner_detected:
|
||||||
|
findings.append(Finding(
|
||||||
|
severity="HIGH",
|
||||||
|
code=f"MARKETING-{service.id}-NO-CONSENT",
|
||||||
|
text=f"{service.name} erfordert eine Einwilligung vor Aktivierung "
|
||||||
|
f"(§25 TDDDG). Kein funktionierender Consent-Banner erkannt."
|
||||||
|
))
|
||||||
|
|
||||||
|
# 3. Drittlandtransfer?
|
||||||
|
if not registry["eu_adequate"]:
|
||||||
|
if not sccs_mentioned_in_dse(service, dse_text):
|
||||||
|
findings.append(Finding(
|
||||||
|
severity="MEDIUM",
|
||||||
|
code=f"TRANSFER-{service.id}-NO-SCCS",
|
||||||
|
text=f"{service.name} ({registry['country']}) — Drittlandtransfer "
|
||||||
|
f"ohne dokumentierte Schutzmaßnahme ({registry['legal_ref']})."
|
||||||
|
))
|
||||||
|
|
||||||
|
return findings
|
||||||
|
```
|
||||||
|
|
||||||
|
## Phase 6: Automatische Korrekturvorschlaege (Pre-Launch Modus)
|
||||||
|
|
||||||
|
Im **internen Pruefmodus** (pre_launch) erstellt der Agent bei JEDER Abweichung
|
||||||
|
einen konkreten, einbaufertigen Korrekturvorschlag:
|
||||||
|
|
||||||
|
### Korrekturtypen
|
||||||
|
|
||||||
|
**Typ 1: DSE-Textbaustein (Dienstleister fehlt in DSE)**
|
||||||
|
|
||||||
|
Wenn ein Dienstleister auf der Website erkannt wird aber nicht in der DSE steht,
|
||||||
|
generiert der Agent einen fertigen Textbaustein:
|
||||||
|
|
||||||
|
```
|
||||||
|
ABWEICHUNG: Google Analytics (G-03F834EHLM) eingebunden, nicht in DSE dokumentiert.
|
||||||
|
|
||||||
|
KORREKTURVORSCHLAG (einbaufertig):
|
||||||
|
──────────────────────────────────
|
||||||
|
Webanalyse
|
||||||
|
|
||||||
|
Wir nutzen Google Analytics, einen Webanalysedienst der Google Ireland Limited
|
||||||
|
(Gordon House, Barrow Street, Dublin 4, Irland). Google Analytics verwendet Cookies,
|
||||||
|
die eine Analyse der Benutzung der Website ermoeglichen.
|
||||||
|
|
||||||
|
Rechtsgrundlage: Art. 6 Abs. 1 lit. a DSGVO (Einwilligung).
|
||||||
|
|
||||||
|
Die durch Cookies erzeugten Informationen werden in der Regel an einen Server von
|
||||||
|
Google in den USA uebertragen. Wir haben mit Google einen Auftragsverarbeitungsvertrag
|
||||||
|
abgeschlossen. Die Uebermittlung in die USA wird auf Standardvertragsklauseln
|
||||||
|
der EU-Kommission gestuetzt.
|
||||||
|
|
||||||
|
Sie koennen die Speicherung der Cookies durch eine entsprechende Einstellung Ihrer
|
||||||
|
Browser-Software verhindern. Sie koennen darueber hinaus die Erfassung der durch
|
||||||
|
das Cookie erzeugten und auf Ihre Nutzung der Website bezogenen Daten an Google
|
||||||
|
sowie die Verarbeitung dieser Daten durch Google verhindern, indem Sie das unter
|
||||||
|
dem folgenden Link verfuegbare Browser-Add-On herunterladen und installieren:
|
||||||
|
https://tools.google.com/dlpage/gaoptout
|
||||||
|
|
||||||
|
Weitere Informationen: https://policies.google.com/privacy
|
||||||
|
──────────────────────────────────
|
||||||
|
|
||||||
|
EINFUEGEN NACH: Abschnitt "Cookies" oder "Webanalyse"
|
||||||
|
PRIORITAET: Hoch — vor Veroeffentlichung korrigieren
|
||||||
|
```
|
||||||
|
|
||||||
|
**Typ 2: Rechtsgrundlage fehlt/falsch**
|
||||||
|
|
||||||
|
```
|
||||||
|
ABWEICHUNG: Klarna als Zahlungsanbieter genannt, aber kein Hinweis auf
|
||||||
|
automatisierte Bonitaetspruefung (Art. 22 DSGVO).
|
||||||
|
|
||||||
|
KORREKTURVORSCHLAG:
|
||||||
|
──────────────────
|
||||||
|
Ergaenzen Sie im Abschnitt "Zahlungsabwicklung":
|
||||||
|
|
||||||
|
"Bei Auswahl der Zahlungsart 'Rechnung' oder 'Ratenzahlung' ueber Klarna
|
||||||
|
wird eine automatisierte Bonitaetspruefung durchgefuehrt. Klarna uebermittelt
|
||||||
|
hierzu Ihre Angaben an Wirtschaftsauskunfteien (z.B. SCHUFA). Rechtsgrundlage
|
||||||
|
ist Art. 6 Abs. 1 lit. b DSGVO (Vertragserfuellung). Sie haben gemaess
|
||||||
|
Art. 22 Abs. 3 DSGVO das Recht, Ihren Standpunkt darzulegen und die
|
||||||
|
Entscheidung anzufechten."
|
||||||
|
──────────────────
|
||||||
|
```
|
||||||
|
|
||||||
|
**Typ 3: Dienst nicht mehr eingebunden (Aufraeumen)**
|
||||||
|
|
||||||
|
```
|
||||||
|
ABWEICHUNG: "Facebook Pixel" in DSE Abschnitt 4.2 erwaehnt, aber auf der
|
||||||
|
Website nicht mehr eingebunden.
|
||||||
|
|
||||||
|
KORREKTURVORSCHLAG:
|
||||||
|
──────────────────
|
||||||
|
Entfernen Sie den Absatz zu Facebook Pixel in Abschnitt 4.2 oder
|
||||||
|
kennzeichnen Sie ihn als "nicht mehr aktiv". Veraltete Eintraege in der
|
||||||
|
DSE sind zwar kein Rechtsverstoß, koennen aber bei einer Pruefung durch
|
||||||
|
die Aufsichtsbehoerde Fragen aufwerfen.
|
||||||
|
──────────────────
|
||||||
|
PRIORITAET: Niedrig — bei naechster DSE-Aktualisierung bereinigen
|
||||||
|
```
|
||||||
|
|
||||||
|
### Implementierung der Korrekturvorschlaege
|
||||||
|
|
||||||
|
```python
|
||||||
|
async def generate_correction(
|
||||||
|
service: DetectedService,
|
||||||
|
finding_type: str, # "missing_in_dse", "wrong_legal_basis", "outdated"
|
||||||
|
dse_text: str,
|
||||||
|
mode: str,
|
||||||
|
) -> str:
|
||||||
|
"""Generiere einbaufertigen Korrekturvorschlag via Qwen."""
|
||||||
|
if mode != "pre_launch":
|
||||||
|
return "" # Nur im internen Modus
|
||||||
|
|
||||||
|
prompt = f"""
|
||||||
|
/no_think
|
||||||
|
Du bist ein Datenschutzexperte. Erstelle einen einbaufertigen Textbaustein
|
||||||
|
fuer eine deutsche Datenschutzerklaerung.
|
||||||
|
|
||||||
|
Dienstleister: {service.name}
|
||||||
|
Anbieter: {service.provider}
|
||||||
|
Land: {service.country}
|
||||||
|
Zweck: {service.purpose}
|
||||||
|
Finding: {finding_type}
|
||||||
|
|
||||||
|
Der Textbaustein muss enthalten:
|
||||||
|
1. Ueberschrift (z.B. "Webanalyse" oder "Zahlungsabwicklung")
|
||||||
|
2. Name und Sitz des Anbieters
|
||||||
|
3. Zweck der Verarbeitung
|
||||||
|
4. Rechtsgrundlage (korrekt nach DSGVO)
|
||||||
|
5. Drittlandtransfer-Hinweis wenn nicht EU
|
||||||
|
6. Widerspruchsmoeglichkeit
|
||||||
|
|
||||||
|
Antworte NUR mit dem fertigen Textbaustein, ohne Erklaerung.
|
||||||
|
"""
|
||||||
|
# LLM-Call via SDK
|
||||||
|
response = await sdk_llm_chat(prompt)
|
||||||
|
return response
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ergebnis-Format im Agent-Output
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"findings": [...],
|
||||||
|
"corrections": [
|
||||||
|
{
|
||||||
|
"finding_code": "MARKETING-google_analytics-NOT-IN-DSE",
|
||||||
|
"type": "missing_in_dse",
|
||||||
|
"service": "Google Analytics",
|
||||||
|
"priority": "high",
|
||||||
|
"insert_after": "Abschnitt Cookies / Webanalyse",
|
||||||
|
"correction_text": "Webanalyse\n\nWir nutzen Google Analytics...",
|
||||||
|
"legal_refs": ["Art. 13 DSGVO", "Art. 44-49 DSGVO", "§25 TDDDG"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Frontend: Korrekturvorschlaege anzeigen
|
||||||
|
|
||||||
|
Im Pre-Launch-Modus zeigt das Frontend fuer jedes Finding einen aufklappbaren
|
||||||
|
Korrekturvorschlag mit Copy-Button:
|
||||||
|
|
||||||
|
```
|
||||||
|
[!] Google Analytics eingebunden, nicht in DSE
|
||||||
|
Prioritaet: Hoch | Art. 13 DSGVO
|
||||||
|
|
||||||
|
▼ Korrekturvorschlag anzeigen
|
||||||
|
┌─────────────────────────────────────────┐
|
||||||
|
│ Webanalyse │
|
||||||
|
│ │
|
||||||
|
│ Wir nutzen Google Analytics, einen │
|
||||||
|
│ Webanalysedienst der Google Ireland │
|
||||||
|
│ Limited... │
|
||||||
|
│ [📋] │
|
||||||
|
└─────────────────────────────────────────┘
|
||||||
|
Einfuegen nach: Abschnitt "Cookies"
|
||||||
|
```
|
||||||
|
|
||||||
## Risiken
|
## Risiken
|
||||||
|
|
||||||
| Risiko | Mitigation |
|
| Risiko | Mitigation |
|
||||||
@@ -492,6 +777,9 @@ Tracking: Google Analytics (G-03F834EHLM), Didomi CMP
|
|||||||
| LLM-Kosten bei vielen Controls | Caching + nur high-severity Controls |
|
| LLM-Kosten bei vielen Controls | Caching + nur high-severity Controls |
|
||||||
| Datenbank-Migration auf Production | `ADD COLUMN IF NOT EXISTS` ist non-blocking |
|
| Datenbank-Migration auf Production | `ADD COLUMN IF NOT EXISTS` ist non-blocking |
|
||||||
| 166k Controls ohne relevance_conditions | Default `{}` = kein Filter = bisheriges Verhalten |
|
| 166k Controls ohne relevance_conditions | Default `{}` = kein Filter = bisheriges Verhalten |
|
||||||
|
| Qwen-generierte Textbausteine rechtlich falsch | Review-Pflicht: "Vom KI-Assistenten erstellt, Pruefung durch DSB empfohlen" |
|
||||||
|
| Website-Scan zu langsam (10 Seiten fetchen) | Parallel fetchen, max 5s Timeout pro Seite, max 10 Seiten |
|
||||||
|
| Payment-Einbindung nicht im HTML sichtbar | Follow-Up: "Welche Zahlungsanbieter nutzen Sie?" |
|
||||||
|
|
||||||
## Testfaelle
|
## Testfaelle
|
||||||
|
|
||||||
@@ -499,3 +787,7 @@ Tracking: Google Analytics (G-03F834EHLM), Didomi CMP
|
|||||||
2. **Chatbot-Anbieter:** C_TRANSPARENCY SOLL empfohlen werden (KI explizit erwaehnt)
|
2. **Chatbot-Anbieter:** C_TRANSPARENCY SOLL empfohlen werden (KI explizit erwaehnt)
|
||||||
3. **Arztpraxis-Website:** C_DSFA_REQUIRED SOLL empfohlen werden (Gesundheitsdaten)
|
3. **Arztpraxis-Website:** C_DSFA_REQUIRED SOLL empfohlen werden (Gesundheitsdaten)
|
||||||
4. **Blog ohne Tracking:** Nur minimale Controls (Impressum, Datenschutzerklaerung)
|
4. **Blog ohne Tracking:** Nur minimale Controls (Impressum, Datenschutzerklaerung)
|
||||||
|
5. **Shop mit Klarna:** Art. 22 DSGVO Finding wenn Bonitaetspruefung nicht in DSE
|
||||||
|
6. **Website mit Google Fonts:** LG Muenchen I Finding + Korrekturvorschlag "lokal einbinden"
|
||||||
|
7. **Pre-Launch DSE-Entwurf:** Korrekturvorschlaege fuer fehlende Dienstleister-Eintraege
|
||||||
|
8. **Opodo Soll-Ist:** jsdelivr CDN eingebunden aber nicht in DSE → Finding + Textbaustein
|
||||||
|
|||||||
Reference in New Issue
Block a user