Files
breakpilot-compliance/zeroclaw/docs/ground-truth-ihk-konstanz.md
T
Benjamin Admin fa4fd87102
Build + Deploy / build-admin-compliance (push) Successful in 9s
Build + Deploy / build-backend-compliance (push) Successful in 8s
Build + Deploy / build-ai-sdk (push) Successful in 42s
Build + Deploy / build-developer-portal (push) Successful in 8s
Build + Deploy / build-tts (push) Successful in 7s
Build + Deploy / build-document-crawler (push) Successful in 7s
Build + Deploy / build-dsms-gateway (push) Successful in 8s
Build + Deploy / build-dsms-node (push) Successful in 8s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 18s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m57s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 49s
CI / test-python-backend (push) Successful in 42s
CI / test-python-document-crawler (push) Successful in 28s
CI / test-python-dsms-gateway (push) Successful in 23s
CI / validate-canonical-controls (push) Successful in 15s
Build + Deploy / trigger-orca (push) Successful in 2m24s
fix: 7 regex bugs from IHK Konstanz ground truth analysis
Fixes based on manual verification of all 30 failed checks:
1. Cookie table: recognize "folgende cookies" + column headers as text
2. Cookie names: add JSESSIONID, cookieinfo, et_id, BT_* patterns
3. Essential justified: match "sitzung zuordnen", "betrieb der website"
4. Social bookmarks: recognize as 2-click alternative
5. DSFA plural: "kanaelen" now matches alongside "kanal"
6. Section splitter: skip-headings no longer lose subsequent text
   (Risikoabwaegung section was cut from DSFA, losing risk scores)
7. Cookie legal basis: accept Art. 6(1)(f) in cookie context

Reduces false positives from 7 to ~1-2 for IHK Konstanz test case.
Ground truth table: zeroclaw/docs/ground-truth-ihk-konstanz.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 14:51:09 +02:00

180 lines
15 KiB
Markdown

# Ground Truth: IHK Konstanz DSI-Pruefung
**URL:** https://www.ihk.de/konstanz/servicemarken/ueber-uns/downloads/datenschutzinformationen-zum-internetangebot-4163288
**Datum:** 2026-05-07
**Text:** 6353 Woerter, 50000 Zeichen
---
## 1. DSI Hauptdokument (Art. 13 DSGVO)
### L1 Checks (9/9 bestanden)
| Check | Tool-Ergebnis | Korrekt? | Beleg im Text |
|-------|--------------|----------|---------------|
| Verantwortlicher | PASS | Ja | Z.17-23: "Name und Kontaktdaten des Verantwortlichen — IHK Hochrhein Bodensee, Reichenaustr. 21, D-78467 Konstanz" |
| DSB | PASS | Ja | Z.36-44: "Kontaktdaten der/des behoerdlichen Datenschutzbeauftragten — SuedWest Datenschutz" |
| Zwecke | PASS | Ja | Z.49: "Zweck und Rechtsgrundlage der Verarbeitung" |
| Rechtsgrundlage | PASS | Ja | Z.72: "Art. 6 Abs. 1 f) DSGVO", Z.112: "Art. 6 Abs.1 lit.b)", Z.138: "Art. 6 Abs. 1 lit. a)" |
| Empfaenger | PASS | Ja | Z.118-123: "personenbezogenen Daten werden uebermittelt an: Buchhaltung, Dritte, Auftragsverarbeiter" |
| Drittlandtransfer | PASS | Ja | Z.369: "Google verarbeitet Ihre personenbezogenen Daten auch in den USA" |
| Speicherdauer | PASS | Ja | Z.81: "nach spaetestens 7 Tagen", Z.126: "nach zehn Jahren" |
| Betroffenenrechte | PASS | Ja | Z.395: "Art. 15, Art. 16, Art. 17, Art. 18, Art. 20, Art. 77" |
| Beschwerderecht | PASS | Ja | Z.11: "Landesdatenschutzgesetz Baden-Wuerttemberg" |
**Bewertung L1: 9/9 — alle korrekt**
### L2 Checks (18/22 bestanden)
| Check | Tool | Korrekt? | Begruendung |
|-------|------|----------|-------------|
| Anschrift (PLZ+Ort) | PASS | **Ja** | Z.21: "D-78467 Konstanz" |
| E-Mail Verantwortlicher | PASS | **Ja** | Z.22: "info@konstanz.ihk.de" |
| Telefon Verantwortlicher | PASS | **Ja** | Z.23: "+49(0)7531-2860-100" |
| DSB Kontakt | PASS | **Ja** | Z.44: "datenschutz@konstanz.ihk.de" |
| Konkrete Zwecke | PASS | **Ja** | Z.101-108: Kontaktaufnahme, Newsletter, Veranstaltungen, Beratung, Ausbildung |
| Art. 6(1)(a) Einwilligung | PASS | **Ja** | Z.138: "Art. 6 Abs. 1 lit. a) DSGVO" |
| Art. 6(1)(b) Vertrag | PASS | **Ja** | Z.112: "Art. 6 Abs.1 lit.b)" |
| Art. 6(1)(f) Berecht. Interesse | PASS | **Ja** | Z.72: "Art. 6 Abs. 1 f) DSGVO" |
| **Interessenabwaegung** | **FAIL** | **Teilweise korrekt** | Z.72: "In den uebrigen genannten Zwecken liegt auch unser berechtigtes Interesse" — es wird das Interesse BENANNT, aber keine explizite ABWAEGUNG dokumentiert. Die IHK nennt ihr Interesse, dokumentiert aber nicht warum es ueberwiegt. **Finding ist inhaltlich korrekt, aber Hint sollte praeziser sein.** |
| Empfaenger-Kategorien | PASS | **Ja** | Z.123: "Scandienstleister, Hoster und sonstige IT-Dienstleister sowie externe Administratoren" |
| Auftragsverarbeiter | PASS | **Ja** | Z.123: "Auftragsverarbeiter, die mit der Organisation beauftragt wurden" |
| **Transfermechanismus** | **FAIL** | **Korrekt** | Z.369 erwaehnt "EU-US Privacy Shield" — aber Privacy Shield ist seit 2020 ungueltig (Schrems II). Es wird KEIN gueltiger Mechanismus (SCC oder DPF) genannt. **True Positive.** Hint korrekt. |
| Konkrete Zeitangaben | PASS | **Ja** | Z.81: "7 Tagen", Z.126: "zehn Jahren", Z.345: "90 Tagen" |
| **Loeschkonzept** | **FAIL** | **Teilweise korrekt** | Z.78: "Daten werden geloescht, sobald sie fuer die Erreichung des Zweckes nicht mehr erforderlich sind" — das ist ein Loeschgrundsatz, aber kein formales Loeschkonzept. Z.126 nennt Fristen. Kein Verweis auf internes Loeschkonzept. **Grenzfall — Finding akzeptabel, Hint passt.** |
| Art. 15 Auskunft | PASS | **Ja** | Z.395: "Auskunftsrecht gem. Art. 15 DSGVO" |
| Art. 16 Berichtigung | PASS | **Ja** | Z.395: "Recht auf Berichtigung gem. Art. 16 DSGVO" |
| Art. 17 Loeschung | PASS | **Ja** | Z.395: "Recht auf Loeschung gem. Art. 17 DSGVO" |
| Art. 18 Einschraenkung | PASS | **Ja** | Z.395: "Recht auf Einschraenkung der Verarbeitung gem. Art. 18 DSGVO" |
| Art. 20 Portabilitaet | PASS | **Ja** | Z.395: "Recht auf Datenuebertragbarkeit gem. Art. 20 DSGVO" |
| Art. 21 Widerspruch | PASS | **Ja** | Z.366: "Ihnen steht ein Widerspruchsrecht zu" |
| **Art. 22 Profiling** | **FAIL** | **Korrekt** | Kein Hinweis auf Art. 22 im gesamten DSI-Text. Es wird weder Profiling erwaehnt noch explizit ausgeschlossen. **True Positive.** Hint korrekt — empfiehlt "Es findet keine automatisierte Entscheidungsfindung statt." |
| Aufsichtsbehoerde benannt | PASS | **Ja** | Z.11: "Landesdatenschutzgesetz Baden-Wuerttemberg" — implizit LfDI BW. |
**Bewertung L2: 18/22 korrekt. 4 Fails, davon 3 True Positives, 1 Grenzfall (Loeschkonzept).**
---
## 2. Cookie-Sektion
### L1 Checks (5/6)
| Check | Tool | Korrekt? | Begruendung |
|-------|------|----------|-------------|
| Arten der Cookies | PASS | **Ja** | Z.161: "transiente Cookies, persistente Cookies, Third-Party Cookies" |
| Zwecke der Cookies | PASS | **Ja** | Z.158: "Cookies ein, um unsere Website nutzerfreundlicher zu gestalten" |
| Speicherdauer | PASS | **Ja** | Z.164-165: "Session-Cookies werden geloescht", Tabelle mit Speicherdauern |
| Drittanbieter | PASS | **Ja** | Z.161: "Third-Party Cookies (von Drittanbietern)" |
| Widerspruch | PASS | **Ja** | Z.166: "Browser-Einstellung entsprechend Ihren Wuenschen konfigurieren" |
| **Cookie-Tabelle** | **FAIL** | **FALSE POSITIVE** | Z.170-289: Es gibt eine **vollstaendige Cookie-Tabelle** mit Spalten "Typen, Name, Funktion, Speicherdauer"! Die Regex erkennt sie nicht weil das Format (Zeilenumbrueche statt Pipe-Trennzeichen) nicht matched. **Bug im Regex — False Positive.** |
### L2 Checks (2/9)
| Check | Tool | Korrekt? | Begruendung |
|-------|------|----------|-------------|
| **Cookie-Namen** | **FAIL** | **FALSE POSITIVE** | Z.198-282: Tabelle listet konkret: Cookieinfo_click, JSESSIONID, SHOPHK_Sessio, IHK24_PROD-xxxxx, Cntcookie, et_id, BT_ctst, BT_pdc, BT_sdc, noWS, isSdEnabl. Regex sucht _ga/_gid/PHPSESSID — keine IHK-spezifischen Namen. **Bug: Regex zu spezifisch.** |
| **Essential begruendet** | **FAIL** | **FALSE POSITIVE** | Z.164: "Session-Cookies... gemeinsamen Sitzung zuordnen", Z.198-200: "Das Cookie steuert die Anzeige des Hinweises zur Cookie-Nutzung". Essentiell-Cookies sind begruendet. **Regex matcht nicht weil "technisch erforderlich" nicht woertlich vorkommt.** |
| **Anbieter benannt** | **FAIL** | **Korrekt** | eTracker wird erwaehnt (Z.311ff), aber nicht direkt in der Cookie-Sektion selbst als Anbieter pro Cookie. **True Positive — Anbieter fehlen in der Tabelle.** |
| **Analytics benannt** | **FAIL** | **Teilweise FP** | eTracker wird in Z.311-348 ausfuehrlich beschrieben! Aber Regex sucht "google analytics|matomo|etracker" — und "etracker" IS in the pattern. **Muss pruefen ob die Cookie-Sektion den etracker Text enthaelt.** Die Cookie-Sektion endet bei Z.294 mit "nach oben", dann kommt "Dienste von Drittanbietern". eTracker ist in DIESER Sektion, nicht im Cookie-Abschnitt. **Grenzfall — Text ist auf der Seite, aber in einem anderen Abschnitt.** |
| **Marketing benannt** | **FAIL** | **Korrekt** | Keine Marketing-Tools (Meta Pixel, Google Ads etc.) erwaehnt. **True Positive.** |
| Speicherdauern | PASS | **Ja** | Z.199: "1 Jahr", Z.205: "nach Schliessen Ihres Browsers", Z.219: "< 12 Stunden" |
| **Rechtsgrundlage** | **FAIL** | **FALSE POSITIVE** | Z.294: "Rechtsgrundlage des Art. 6 Abs. 1 lit. f DSGVO" — steht direkt nach der Cookie-Tabelle! Aber §25 TDDDG fehlt (veraltet, TDDDG gab es bei Erstellung noch nicht). **Grenzfall — Art. 6 ist da, TDDDG fehlt.** |
| **Consent-Tool** | **FAIL** | **Korrekt** | Kein Cookie-Banner oder Consent-Management-Tool erwaehnt. **True Positive.** |
| Browser-Einstellungen | PASS | **Ja** | Z.166: "Browser-Einstellung entsprechend Ihren Wuenschen konfigurieren" |
**Bewertung Cookies: 3 False Positives (Cookie-Tabelle, Cookie-Namen, Essential begruendet), 2 Grenzfaelle, 2 True Positives.**
---
## 3. Social Media Sektion
### L1 Checks (8/10)
| Check | Tool | Korrekt? | Begruendung |
|-------|------|----------|-------------|
| Gemeinsam Verantwortliche | PASS | **Ja** | Z.395: "gemeinsam mit dem Betreiber... im Sinne des Art. 26 DSGVO verantwortlich" |
| **Vereinbarung Art. 26** | **FAIL** | **Korrekt** | Keine konkrete Vereinbarung (Page Controller Addendum etc.) erwaehnt. **True Positive.** |
| Anlaufstelle | PASS | **Ja** | Z.395: "koennen Sie grundsaetzlich sowohl gegenueber uns als auch gegenueber dem Betreiber... geltend machen" |
| Verarbeitungsaufteilung | PASS | **Ja** | Z.389-395: beschreibt wer was verarbeitet |
| Datenkategorien | PASS | **Ja** | Z.392: "Verarbeitung Ihrer personenbezogenen Daten" |
| Plattformen | PASS | **Ja** | Z.423: "Facebook, LinkedIn, Instagram, Youtube" |
| Drittlandtransfer | PASS | **Ja** | Z.401: "Risiken durch die Verarbeitung in sog. Drittstaaten" |
| **Rechtsgrundlage** | **FAIL** | **Korrekt** | Kein Art. 6 in der Social-Media-Sektion. **True Positive.** |
| Betroffenenrechte | PASS | **Ja** | Z.395: "Art. 15, Art. 16, Art. 17, Art. 18, Art. 20" |
| Social Bookmarks | PASS | **Ja** | Z.404: "Es werden keine Social Media Plugins gesetzt, sondern sogenannte Social Bookmarks" |
### L2 Checks (1/7)
| Check | Tool | Korrekt? | Begruendung |
|-------|------|----------|-------------|
| **Facebook/Meta benannt** | **FAIL** | **Teilweise FP** | Z.389: "Facebook" wird erwaehnt, aber nicht als "Meta Platforms Ireland Limited". Regex sucht "meta platforms" oder "facebook ireland". **Grenzfall — Facebook wird genannt, aber nicht mit offizieller Firmenbezeichnung.** |
| Kontakt beide | PASS | **Ja** | Z.395: "sowohl gegenueber uns als auch gegenueber dem Betreiber" |
| **Plattform-DSE-Links** | **FAIL** | **Korrekt** | Keine Links zu den Datenschutzerklaerungen der Social-Media-Plattformen in dieser Sektion. **True Positive.** |
| **SCC fuer US-Transfer** | **FAIL** | **Korrekt** | Keine SCC erwaehnt. **True Positive.** |
| **DPF fuer US-Transfer** | **FAIL** | **Korrekt** | Kein Data Privacy Framework erwaehnt. **True Positive.** |
| **Opt-Out Social** | **FAIL** | **Korrekt** | Keine konkrete Opt-Out-Moeglichkeit fuer Social-Media-Tracking. **True Positive.** |
| **2-Klick-Loesung** | **FAIL** | **Teilweise FP** | Z.404: "Es werden keine Social Media Plugins gesetzt, sondern sogenannte Social Bookmarks" — das IST die datenschutzfreundliche Technik. Regex sucht "zwei klick|shariff|erst bei klick". **Bug: "Social Bookmarks" ist eine valide Alternative, wird aber nicht erkannt.** |
**Bewertung Social Media: 1 False Positive (2-Klick), 1 Grenzfall (Meta-Name), 5 True Positives.**
---
## 4. DSFA Sektion
### L1 Checks (5/8)
| Check | Tool | Korrekt? | Begruendung |
|-------|------|----------|-------------|
| Schwellwertanalyse | PASS | **Ja** | Z.757: "Art. 35 Abs. 1 der Europaeischen Datenschutzgrundverordnung" |
| Beschreibung | PASS | **Ja** | Z.760: "Social Media-Angebot... besteht aus den Kanaelen Facebook, Twitter, Xing, LinkedIn, Instagram, YouTube" |
| Notwendigkeit | PASS | **Ja** | Z.760: "nur sehr geringen Umfangs der eigenen Datenverarbeitung" |
| Risikobewertung | PASS | **Ja** | Z.818-821: "Risikobewertung... Kriterien der Schadensschwere und der Eintrittswahrscheinlichkeit... gering bis mittel" |
| **Abhilfemassnahmen** | **FAIL** | **Teilweise FP** | Z.775-778: "Aufklaerung ueber die jeweilige Datenschutzerklaerung", Z.827-830: "verschiedene Einstellungen... Browserverlauf loeschen, Cookies deaktivieren, Standortfreigabe", Z.830: "redaktionelle Betreuung ein Eingreifen". Es GIBT Massnahmen, aber keine klassischen TOMs (Verschluesselung etc.). **Grenzfall — Massnahmen sind da, aber nicht als TOM formuliert.** |
| LfDI-Richtlinie | PASS | **Ja** | Z.757: "Richtlinie des Landes-Datenschutzbeauftragten (LfDI)" |
| **Einbeziehung DSB** | **FAIL** | **Korrekt** | Kein Hinweis auf Beteiligung/Konsultation des DSB bei der DSFA. **True Positive.** |
| **Dokumentation** | **FAIL** | **Teilweise FP** | Z.832-834: "4.) Ergebnis:" — das IST die Dokumentation des Ergebnisses! Regex sucht "dokument|ergebnis|bericht" + "dsfa|folgenabschaetzung". "Ergebnis" allein matcht nicht. **Grenzfall — Ergebnissektion existiert, aber Regex zu streng.** |
### L2 Checks (0/4)
| Check | Tool | Korrekt? | Begruendung |
|-------|------|----------|-------------|
| **Verarbeitungsvorgang benannt** | **FAIL** | **Teilweise FP** | Z.760: "Social Media-Angebot der IHK Hochrhein-Bodensee besteht aus den Kanaelen Facebook, Twitter, Xing, LinkedIn, Instagram, YouTube" — DAS ist der Verarbeitungsvorgang. Regex sucht "betrieb|nutzung|verwaltung... seite|profil|kanal". "Kanaelen" vs "kanal" — Plural-Mismatch. **Bug: Regex erkennt Plural nicht.** |
| **Rechtsgrundlage DSFA** | **FAIL** | **Korrekt** | Keine Rechtsgrundlage (Art. 6) in der DSFA-Sektion. **True Positive.** |
| **Eintrittswahrscheinlichkeit** | **FAIL** | **FALSE POSITIVE** | Z.820: "Eintrittswahrscheinlichkeit" steht woertlich im Text! Aber die DSFA-Sektion wird als separates Sub-Dokument geprueft. Der Text ist vermutlich beim Section-Split abgeschnitten. **Bug: Section-Split schneidet zu frueh ab, oder Regex-Match scheitert an Kontext.** |
| **Schwere bewertet** | **FAIL** | **FALSE POSITIVE** | Z.820: "Schadensschwere und der Eintrittswahrscheinlichkeit" + Z.821: "gering bis mittel". **Gleicher Bug wie oben — Text ist da, wird nicht gefunden.** |
**Bewertung DSFA: 2 False Positives (Wahrscheinlichkeit + Schwere), 2 Grenzfaelle, 1 True Positive, 1 Regex-Bug (Plural).**
---
## Zusammenfassung
### Gesamtstatistik
| Kategorie | Anzahl | Anteil |
|-----------|--------|--------|
| **Korrekte True Positives** (echt fehlend) | 15 | 50% |
| **Korrekte True Negatives** (echt bestanden) | ~95 | — |
| **False Positives** (faelschlich als fehlend) | 7 | 23% |
| **Grenzfaelle** (argumentierbar) | 8 | 27% |
| **False Negatives** (faelschlich bestanden) | 0 | 0% |
### Regex-Bugs die gefixt werden muessen
| Bug | Datei | Problem | Fix |
|-----|-------|---------|-----|
| Cookie-Tabelle nicht erkannt | cookie_checks.py | Format mit Zeilenumbruechen statt Pipe/Tab | Regex auf "typen.*name.*funktion" oder aehnliches erweitern |
| Cookie-Namen zu spezifisch | cookie_checks.py | Nur _ga/_gid/PHPSESSID, nicht JSESSIONID/Cookieinfo | Weitere gaengige Namen oder generisches Pattern |
| Essential-Begruendung | cookie_checks.py | "technisch erforderlich" zu streng | Auch "fuer den Betrieb", "sitzung zuordnen" matchen |
| Social Bookmarks als 2-Klick | social_media_checks.py | "Social Bookmarks" nicht erkannt | Pattern erweitern um "social bookmark" |
| DSFA Plural "Kanaelen" | dsfa_checks.py | "kanal" matcht nicht "kanaelen" | `kanal|kan(?:ae\|ä)le` |
| DSFA Section-Split | agent_doc_check_routes.py | Risikobewertung wird abgeschnitten | Section-Split-Grenze pruefen |
| Cookie Rechtsgrundlage | cookie_checks.py | Art. 6(1)(f) ist da, aber Regex will §25 TDDDG | Auch Art. 6 ohne TDDDG akzeptieren |
### Hints die angepasst werden sollten
| Check | Aktueller Hint | Verbesserung |
|-------|---------------|-------------|
| Interessenabwaegung | "...muss dokumentiert werden warum Ihr Interesse ueberwiegt" | Praeziser: "Bei Berufung auf Art. 6(1)(f) muss eine nachvollziehbare Abwaegung zwischen Ihrem Interesse und den Rechten der Betroffenen dokumentiert werden — nicht nur das Interesse selbst nennen." |
| Loeschkonzept | "...Verweis auf internes Loeschkonzept" | "Neben Speicherfristen sollte beschrieben werden, WIE Daten geloescht werden (Prozess, Automatisierung, Verantwortlichkeit) — nicht nur WANN." |