feat: All 138 hints rewritten as expert-level legal guidance
CI / loc-budget (push) Failing after 18s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
Build + Deploy / build-admin-compliance (push) Successful in 9s
Build + Deploy / build-backend-compliance (push) Successful in 10s
Build + Deploy / build-ai-sdk (push) Successful in 9s
Build + Deploy / build-developer-portal (push) Successful in 8s
Build + Deploy / build-tts (push) Successful in 8s
Build + Deploy / build-document-crawler (push) Successful in 8s
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 / nodejs-build (push) Successful in 3m22s
CI / dep-audit (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (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 43s
CI / test-python-document-crawler (push) Successful in 32s
CI / test-python-dsms-gateway (push) Successful in 26s
CI / validate-canonical-controls (push) Successful in 18s
Build + Deploy / trigger-orca (push) Successful in 2m10s

Every hint now reads like a mini-consultation from a data protection
lawyer — with specific legal references, court rulings, and common
mistakes. Examples:

- EuGH C-210/16 (Fanpage), C-298/17 (Kontaktpflicht), C-311/18 (Schrems II)
- BGH I ZR 228/03 (ladungsfaehige Anschrift), XI ZR 388/10 (AGB)
- EDSA Guidelines 2/2019 (lit. b misuse), WP 248 Rev.01 (DSFA)
- DSK-Orientierungshilfe, CNIL-Leitlinien, SDM, BSI-IT-Grundschutz
- §25 TDDDG, §38 BDSG, §309 BGB, §312k BGB, Art. 246a EGBGB

This is the core value proposition: no lawyer can deliver this level
of specific, actionable compliance feedback in 60 seconds.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-07 17:13:37 +02:00
parent a2f8366171
commit e50f3dfbee
7 changed files with 135 additions and 135 deletions
@@ -16,7 +16,7 @@ IMPRESSUM_CHECKLIST = [
r"firma", r"unternehmen",
],
"severity": "HIGH",
"hint": "Der vollstaendige Name des Unternehmens oder der Person muss im Impressum stehen (z.B. 'Musterfirma GmbH'). Bei Einzelunternehmen genuegt der vollstaendige Vor- und Nachname.",
"hint": "§5(1) Nr.1 TMG: Vollstaendiger Firmenname MIT Rechtsform (z.B. 'Muster GmbH', nicht nur 'Muster'). Bei Einzelunternehmen: Vor- und Nachname plus ggf. Geschaeftsbezeichnung. Haeufiger Abmahngrund: Nur Markenname ohne juristische Person.",
},
# ── L1: Anschrift ─────────────────────────────────────────────────
@@ -29,7 +29,7 @@ IMPRESSUM_CHECKLIST = [
r"d-\d{5}", r"\d{5}\s+\w+",
],
"severity": "HIGH",
"hint": "Eine vollstaendige ladungsfaehige Anschrift (Strasse, Hausnummer, PLZ, Ort) muss im Impressum angegeben werden. Ein Postfach genuegt nicht.",
"hint": "§5(1) Nr.1 TMG verlangt eine ladungsfaehige Anschrift fuer Klagezustellungen. Postfach, c/o-Adresse oder nur Ortsangabe genuegen laut BGH (I ZR 228/03) nicht. Erforderlich: Strasse + Hausnummer + PLZ + Ort.",
},
{
"id": "address_zip_city",
@@ -39,7 +39,7 @@ IMPRESSUM_CHECKLIST = [
r"(?:d[\-\s]?)?\d{5}\s+[a-z\u00c0-\u017e]\w{2,}",
],
"severity": "MEDIUM",
"hint": "Die Anschrift muss eine fuenfstellige Postleitzahl und den Ortsnamen enthalten (z.B. '10115 Berlin').",
"hint": "Ohne PLZ und Ort ist die Anschrift nicht ladungsfaehig und damit unvollstaendig i.S.d. §5 TMG. Haeufiger Fehler: Nur Strasse und Hausnummer ohne PLZ/Ort, oder PLZ ohne Ortsangabe.",
},
{
"id": "address_street_number",
@@ -50,7 +50,7 @@ IMPRESSUM_CHECKLIST = [
r"\w+\s+(?:str|stra(?:ss|ß)e|weg|platz|allee)\s*\.?\s*\d+",
],
"severity": "MEDIUM",
"hint": "Bitte den Strassennamen und die Hausnummer angeben (z.B. 'Musterstrasse 12'). Ohne Hausnummer ist die Anschrift nicht ladungsfaehig.",
"hint": "Strasse + Hausnummer fehlen oder sind unvollstaendig. Ohne Hausnummer keine Zustellbarkeit — das ist ein klassischer Abmahngrund bei Impressumspruefungen nach §5 TMG. Auch 'Am Markt' ohne Nummer genuegt nicht.",
},
# ── L1: Kontaktdaten ──────────────────────────────────────────────
@@ -63,7 +63,7 @@ IMPRESSUM_CHECKLIST = [
r"\+?\d[\d\s/\-]{8,}",
],
"severity": "HIGH",
"hint": "Das Impressum muss mindestens eine E-Mail-Adresse und eine Telefonnummer enthalten, damit Nutzer schnell Kontakt aufnehmen koennen.",
"hint": "§5(1) Nr.2 TMG verlangt Angaben fuer 'schnelle elektronische Kontaktaufnahme und unmittelbare Kommunikation': E-Mail ist Pflicht. EuGH (C-298/17): Telefon nicht zwingend, aber ein zweiter unmittelbarer Kanal (Telefon, Fax oder Chat) ist erforderlich.",
},
{
"id": "contact_email_format",
@@ -73,7 +73,7 @@ IMPRESSUM_CHECKLIST = [
r"[a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,}",
],
"severity": "MEDIUM",
"hint": "Die E-Mail-Adresse muss in einem gueltigen Format vorliegen (z.B. 'info@beispiel.de'). Bitte pruefen Sie, ob ein '@'-Zeichen und eine Domain vorhanden sind.",
"hint": "E-Mail-Adresse fehlt oder ist nicht als solche erkennbar. Ein reines Kontaktformular genuegt laut OLG Hamm (4 U 59/20) NICHT als Ersatz — die E-Mail-Adresse muss direkt im Impressum als Text sichtbar sein.",
},
{
"id": "contact_phone_format",
@@ -85,7 +85,7 @@ IMPRESSUM_CHECKLIST = [
r"0\d{2,4}\s*[/\-\s]\s*\d{4,}",
],
"severity": "MEDIUM",
"hint": "Bitte eine Telefonnummer mit Vorwahl angeben (z.B. '+49 30 12345678' oder '030 / 12345678'). Ein reines Kontaktformular reicht nicht aus.",
"hint": "Telefonnummer mit Vorwahl angeben (z.B. '+49 30 12345678'). Falls kein Telefon: Ein alternativer unmittelbarer Kommunikationskanal (Chat, Messenger) ist laut EuGH (C-298/17) noetig — Kontaktformular allein genuegt nicht.",
},
# ── L1: Handelsregister ───────────────────────────────────────────
@@ -98,7 +98,7 @@ IMPRESSUM_CHECKLIST = [
r"register.*(?:nr|nummer)",
],
"severity": "MEDIUM",
"hint": "Falls das Unternehmen im Handelsregister eingetragen ist, muessen Registergericht und Registernummer angegeben werden (z.B. 'Amtsgericht Muenchen, HRB 12345').",
"hint": "§5(1) Nr.4 TMG: Bei Eintragung im Handels-, Vereins-, Partnerschafts- oder Genossenschaftsregister muessen Registergericht UND Registernummer angegeben werden. Haeufiger Fehler: GmbH ohne HR-Angabe — das ist abmahnfaehig.",
},
{
"id": "register_court",
@@ -109,7 +109,7 @@ IMPRESSUM_CHECKLIST = [
r"ag\s+[A-Z\u00c0-\u017e]\w+",
],
"severity": "LOW",
"hint": "Bitte das zustaendige Registergericht benennen (z.B. 'Amtsgericht Muenchen'). Die alleinige Angabe der Registernummer ohne Gericht ist unvollstaendig.",
"hint": "Registernummer ohne Registergericht ist unvollstaendig i.S.d. §5(1) Nr.4 TMG. Korrekt: 'Amtsgericht Muenchen, HRB 12345'. Das Gericht am Sitz der Gesellschaft ist zustaendig — pruefen Sie den aktuellen HR-Auszug.",
},
{
"id": "register_number",
@@ -119,7 +119,7 @@ IMPRESSUM_CHECKLIST = [
r"(?:hrb|hra)\s*\d+",
],
"severity": "LOW",
"hint": "Die Registernummer muss mit dem Praefix HRB oder HRA und der zugehoerigen Nummer angegeben werden (z.B. 'HRB 12345').",
"hint": "Registernummer im Format 'HRB 12345' (Kapitalgesellschaften) oder 'HRA 12345' (Personengesellschaften) angeben. Haeufiger Fehler: Steuernummer statt Registernummer — die Steuernummer ersetzt nicht die HR-Angabe nach §5(1) Nr.4 TMG.",
},
# ── L1: USt-IdNr ──────────────────────────────────────────────────
@@ -132,7 +132,7 @@ IMPRESSUM_CHECKLIST = [
r"vat.*id", r"de\s*\d{9}",
],
"severity": "MEDIUM",
"hint": "Falls eine Umsatzsteuer-Identifikationsnummer vorhanden ist, muss diese im Impressum angegeben werden. Die Steuernummer allein genuegt nicht als Ersatz.",
"hint": "§5(1) Nr.6 TMG: Die USt-IdNr. muss angegeben werden, sofern vorhanden. Haeufiger Fehler: Steuernummer (z.B. '123/456/78901') statt USt-IdNr. (DE123456789) — die Steuernummer ist KEIN Ersatz und sollte aus Datenschutzgruenden nicht im Impressum stehen.",
},
{
"id": "vat_de_format",
@@ -142,7 +142,7 @@ IMPRESSUM_CHECKLIST = [
r"de\s*\d{9}",
],
"severity": "LOW",
"hint": "Die USt-IdNr. muss im Format 'DE' gefolgt von 9 Ziffern angegeben werden (z.B. 'DE123456789'). Bitte pruefen Sie, ob die Nummer vollstaendig ist.",
"hint": "Deutsche USt-IdNr.: Laendercode 'DE' + exakt 9 Ziffern (z.B. DE123456789). Haeufiger Fehler: Nur 8 Ziffern, fehlender Laendercode, oder Verwechslung mit Wirtschafts-ID. Validierung: https://evatr.bff-online.de/",
},
# ── L1: Vertretungsberechtigte ────────────────────────────────────
@@ -155,7 +155,7 @@ IMPRESSUM_CHECKLIST = [
r"vorstand", r"inhaber",
],
"severity": "MEDIUM",
"hint": "Bei juristischen Personen (GmbH, AG etc.) muss die vertretungsberechtigte Person namentlich genannt werden (z.B. 'Geschaeftsfuehrer: Max Mustermann').",
"hint": "§5(1) Nr.1 TMG: Bei juristischen Personen (GmbH, AG, UG, eG) muss der/die Vertretungsberechtigte(n) namentlich benannt werden. Haeufiger Fehler: Nur 'Geschaeftsfuehrung' ohne Personenname — das genuegt nicht, Vor- und Nachname sind Pflicht.",
},
{
"id": "representative_person",
@@ -166,7 +166,7 @@ IMPRESSUM_CHECKLIST = [
r"(?:vertreten\s+durch|repr(?:ae|ä)sentiert)\s*:?\s*[A-Z\u00c0-\u017e]",
],
"severity": "LOW",
"hint": "Bitte den vollstaendigen Vor- und Nachnamen der vertretungsberechtigten Person angeben (z.B. 'Geschaeftsfuehrer: Max Mustermann'). Eine reine Funktionsbezeichnung reicht nicht.",
"hint": "Voller Vor- und Nachname mit Funktionsbezeichnung erforderlich (z.B. 'Geschaeftsfuehrer: Max Mustermann'). Bei mehreren Geschaeftsfuehrern alle nennen. Haeufiger Fehler: Nur Nachname oder nur 'Die Geschaeftsfuehrung' ohne Namen.",
},
# ── Neue L1: Redaktionell Verantwortlicher ────────────────────────
@@ -180,7 +180,7 @@ IMPRESSUM_CHECKLIST = [
r"§\s*18\s+m(?:edien)?st(?:aat)?v",
],
"severity": "LOW",
"hint": "Wenn die Website journalistisch-redaktionelle Inhalte enthaelt, muss ein inhaltlich Verantwortlicher mit Name und Anschrift benannt werden (§18 MStV, 'V.i.S.d.P.').",
"hint": "§18(2) MStV: Bei journalistisch-redaktionellen Inhalten (Blog, Ratgeber, News) muss ein V.i.S.d.P. mit Name und Anschrift benannt werden. Gilt auch fuer Unternehmensblogs. Haeufiger Fehler: V.i.S.d.P. fehlt bei Seiten mit Ratgeber-/Blogartikeln.",
},
# ── Neue L1: Streitbeilegung ──────────────────────────────────────
@@ -196,6 +196,6 @@ IMPRESSUM_CHECKLIST = [
r"alternative\s+streitbeilegung",
],
"severity": "LOW",
"hint": "Online-Haendler muessen einen Link zur EU-Streitbeilegungsplattform (https://ec.europa.eu/consumers/odr) angeben und erklaeren, ob sie zur Teilnahme an Streitbeilegungsverfahren bereit oder verpflichtet sind.",
"hint": "Art. 14(1) ODR-VO + §36 VSBG: Online-Haendler muessen den ODR-Link (https://ec.europa.eu/consumers/odr) als klickbaren Hyperlink einbinden UND erklaeren, ob sie zur Streitbeilegung bereit/verpflichtet sind. Fehlender Link ist abmahnfaehig (LG Bochum, 14 O 21/16).",
},
]