feat: Fix DSFA dedup + expand all checklists to 56 total checks
Fixes: - 'Risikoabwaegung' is sub-section of DSFA → added to SKIP_HEADINGS - 'Social Media' standalone heading → recognized as social_media DSE - Removed 'risikobew' from DSFA pattern (was too broad) Expanded checklists: - Widerruf: 4→7 checks (+Empfaenger, kein Grund, §312k Button) - AGB: 4→9 checks (+Zahlung, Lieferung, Gewaehrleistung, Kuendigung, Datenschutz) - Social Media: +1 (Social Bookmarks) - DSFA: +1 (LFDI Richtlinie) Total: 47→56 Regex-Checks across 7 document types: DSI=9, Cookie=5, Social Media=10, DSFA=8, Impressum=6, Widerruf=7, AGB=9 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -148,19 +148,43 @@ WIDERRUF_CHECKLIST = [
|
||||
{"id": "form", "label": "Form des Widerrufs",
|
||||
"patterns": [r"widerrufsformular", r"muster.?widerruf", r"withdrawal\s+form", r"formular"]},
|
||||
{"id": "consequences", "label": "Folgen des Widerrufs",
|
||||
"patterns": [r"folgen\s+des\s+widerrufs", r"consequences\s+of\s+withdrawal", r"rueckerstattung"]},
|
||||
"patterns": [r"folgen\s+des\s+widerrufs", r"consequences\s+of\s+withdrawal", r"r(?:ue|ü)ckerstattung"]},
|
||||
{"id": "recipient", "label": "Empfaenger des Widerrufs (Name + Anschrift)",
|
||||
"patterns": [r"widerruf.*(?:richten|senden|erkl(?:ae|ä)ren)\s+(?:an|gegenueber|gegenüber)",
|
||||
r"(?:name|firma|anschrift).*widerruf", r"widerruf.*(?:per|via|an)"]},
|
||||
{"id": "no_reason", "label": "Hinweis: kein Grund erforderlich",
|
||||
"patterns": [r"ohne\s+(?:angabe|nennung).*(?:grund|gr(?:ue|ü)nde)",
|
||||
r"(?:kein|keine).*(?:begruendung|begründung|grund).*(?:erforderlich|noetig|nötig)"]},
|
||||
{"id": "digital_button", "label": "Online-Kuendigungsbutton (§312k BGB)",
|
||||
"patterns": [r"k(?:ue|ü)ndigungsbutton", r"§\s*312k", r"online.*k(?:ue|ü)ndig",
|
||||
r"k(?:ue|ü)ndigung.*(?:button|link|formular|online)"]},
|
||||
]
|
||||
|
||||
# AGB minimal requirements
|
||||
# AGB requirements (§305ff BGB)
|
||||
AGB_CHECKLIST = [
|
||||
{"id": "scope", "label": "Geltungsbereich",
|
||||
"patterns": [r"geltungsbereich", r"geltung", r"scope", r"diese\s+(?:agb|bedingungen)\s+gelten"]},
|
||||
{"id": "contract", "label": "Vertragsschluss",
|
||||
"patterns": [r"vertragsschluss", r"zustandekommen", r"contract\s+formation", r"angebot\s+und\s+annahme"]},
|
||||
{"id": "liability", "label": "Haftung",
|
||||
{"id": "liability", "label": "Haftung / Haftungsbeschraenkung",
|
||||
"patterns": [r"haftung", r"liability", r"schadensersatz", r"haftungsbeschr(?:ae|ä)nkung"]},
|
||||
{"id": "jurisdiction", "label": "Gerichtsstand / Anwendbares Recht",
|
||||
"patterns": [r"gerichtsstand", r"anwendbares\s+recht", r"jurisdiction", r"governing\s+law"]},
|
||||
{"id": "payment", "label": "Zahlungsbedingungen",
|
||||
"patterns": [r"zahlungsbedingung", r"payment\s+terms", r"(?:preis|kosten|entgelt|vergütung)",
|
||||
r"zahlungsweise", r"rechnungsstellung"]},
|
||||
{"id": "delivery", "label": "Lieferung / Leistungserbringung",
|
||||
"patterns": [r"lieferung", r"leistungserbringung", r"delivery", r"lieferfrist",
|
||||
r"bereitstellung", r"(?:zugang|zugriff).*(?:dienst|leistung)"]},
|
||||
{"id": "warranty", "label": "Gewaehrleistung / Maengelrechte",
|
||||
"patterns": [r"gew(?:ae|ä)hrleistung", r"m(?:ae|ä)ngelrecht", r"warranty", r"sachm(?:ae|ä)ngel",
|
||||
r"gew(?:ae|ä)hrleistungsfrist"]},
|
||||
{"id": "termination", "label": "Kuendigung / Vertragsbeendigung",
|
||||
"patterns": [r"k(?:ue|ü)ndigung", r"vertragsbeendigung", r"termination",
|
||||
r"laufzeit.*(?:vertrag|abo)", r"k(?:ue|ü)ndigungsfrist"]},
|
||||
{"id": "data_protection", "label": "Datenschutzhinweis in AGB",
|
||||
"patterns": [r"datenschutz.*(?:agb|bedingung)", r"(?:agb|bedingung).*datenschutz",
|
||||
r"personenbezogen.*daten.*(?:agb|vertrag)", r"dsgvo.*(?:agb|vertrag)"]},
|
||||
]
|
||||
|
||||
# §5 TMG / §18 MStV Impressum requirements
|
||||
|
||||
Reference in New Issue
Block a user