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:
@@ -96,6 +96,58 @@ Alle betroffenen Dateien haben:
|
|||||||
- `Review-Datum: 2026-07-01` im Header
|
- `Review-Datum: 2026-07-01` im Header
|
||||||
- `logger.warning("... HARDCODED rules ...")` bei Nutzung
|
- `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
|
## Memory-Datei
|
||||||
|
|
||||||
Details: `/Users/benjaminadmin/.claude/projects/-Users-benjaminadmin-Projekte-breakpilot-lehrer/memory/hardcoded_knowledge_debt.md`
|
Details: `/Users/benjaminadmin/.claude/projects/-Users-benjaminadmin-Projekte-breakpilot-lehrer/memory/hardcoded_knowledge_debt.md`
|
||||||
|
|||||||
Reference in New Issue
Block a user