docs: add keyword-based checker problem to migration instruction

mandatory_content_checker.py keywords break with alternative formulations.
Solution: LLM-based check per mandatory field (9 calls, parallelizable).
For other session to implement alongside Dict→Control migration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-04-29 18:18:45 +02:00
parent fff47cc52e
commit 891fc5bea0
@@ -96,6 +96,58 @@ Alle betroffenen Dateien haben:
- `Review-Datum: 2026-07-01` im Header
- `logger.warning("... HARDCODED rules ...")` bei Nutzung
## Zusaetzliches Problem: Keyword-basierte Pflichtinhalte-Pruefung
### Problem (identifiziert beim IHK Konstanz Test, 2026-04-29)
Der `mandatory_content_checker.py` prueft ob DSE-Pflichtangaben vorhanden sind
per Keyword-Matching: `"zweck" in text.lower()`. Das bricht wenn:
- Andere Formulierung: "Verarbeitungszwecke" statt "Zwecke"
- Andere Sprache: Englische DSE auf deutscher Website
- Umschreibung: "Wozu wir Ihre Daten nutzen" statt "Zwecke"
Gleiches Problem bei `ECOMMERCE_INDICATORS` in der gleichen Datei — hartkodierte
Shop-Erkennung die neue Shop-Systeme nicht kennt.
### Betroffene Stellen
| Datei | Dict/Liste | Zeilen |
|-------|-----------|--------|
| `mandatory_content_checker.py` | `MANDATORY_DSE_CONTENT` keywords (9 Felder) | ~60 LOC |
| `mandatory_content_checker.py` | `MANDATORY_IMPRESSUM_CONTENT` keywords (5 Felder) | ~30 LOC |
| `mandatory_content_checker.py` | `ECOMMERCE_INDICATORS` | ~10 LOC |
### Loesung: LLM-basierte Pflichtinhalte-Pruefung
Statt hartkodierter Keywords → Qwen fragen:
```python
# VORHER (hartkodiert, bricht bei neuer Formulierung):
found = any(kw in text_lower for kw in ["zweck", "purpose", "verarbeitungszweck"])
# NACHHER (LLM-basiert, sprachunabhaengig):
prompt = f"""
Pruefe ob der folgende Text Angaben zu den Zwecken der Datenverarbeitung
enthaelt (Art. 13 Abs. 1 lit. c DSGVO).
Antworte NUR mit: JA (mit kurzem Zitat) oder NEIN.
Text: {dse_text[:2000]}
"""
result = await query_qwen(prompt)
found = result.startswith("JA")
```
### Aufwand
- 9 Pflichtfelder × 1 LLM-Call = 9 Calls (parallelisierbar)
- ~100 LOC Umbau
- Fallback auf Keywords wenn LLM nicht verfuegbar
### Prioritaet
MITTEL — die erweiterten Keywords funktionieren fuer 90% der Faelle.
LLM-Pruefung ist robuster aber langsamer (~30s statt <1s).
## Memory-Datei
Details: `/Users/benjaminadmin/.claude/projects/-Users-benjaminadmin-Projekte-breakpilot-lehrer/memory/hardcoded_knowledge_debt.md`