; onBack: () => v
{mcName}
{mcId} — {totalControls} Atomic Controls
+ {/* Zuordnung: Use Cases + Verifikation + Quell-Regulierung */}
+ {(mapping.use_cases?.length || mapping.verification_method || mapping.regulations?.length) ? (
+
+ {(mapping.use_cases || []).map(u => (
+
+ {useCaseLabel(u.use_case)}{u.is_primary ? ' ★' : ''}
+
+ ))}
+ {mapping.verification_method && (
+
+ Nachweis: {mcVerificationLabel(mapping.verification_method)}
+
+ )}
+ {(mapping.regulations || []).slice(0, 4).map(r => (
+
+ {r.source_regulation}{r.is_primary ? ' ★' : ''}
+
+ ))}
+
+ ) : null}
+
{/* Phase badges */}
{uniquePhases.map(p => (
diff --git a/backend-compliance/compliance/data/use_case_registry.py b/backend-compliance/compliance/data/use_case_registry.py
index 46bdb0dd..80bdffc5 100644
--- a/backend-compliance/compliance/data/use_case_registry.py
+++ b/backend-compliance/compliance/data/use_case_registry.py
@@ -55,6 +55,11 @@ _USE_CASES: tuple[UseCase, ...] = (
doc_types=("impressum",), scope_tokens=("impressum",),
categories=("compliance",),
keyword_tokens=("impressum", "anbieterkennzeichnung")),
+ UseCase("telekommunikation", "Telekommunikation (TKG)", "product",
+ regulations=("TKG",),
+ verification_methods=("document", "it_process"),
+ categories=("compliance", "governance"),
+ keyword_tokens=("telekommunikation", "tkg")),
UseCase("dse", "Datenschutzerklärung", "document",
regulations=("DSGVO",),
verification_methods=("document",),
@@ -270,12 +275,18 @@ _REGULATION_RULES: tuple[tuple[str, str], ...] = (
# Website / Telemedien / Recht (User-Domaene)
("tdddg", "cookie_banner"),
("eprivacy", "cookie_banner"),
- ("telemedien", "impressum"),
- ("telekommunikationsgesetz", "impressum"),
- ("tkg", "impressum"),
+ # Telemediengesetz (das echte Impressumsrecht) VOR der "telemedien"-
+ # Leitlinien-Regel — longest-first, sonst faengt "telemedien" es ab.
+ ("telemediengesetz", "impressum"),
+ # "DSK OH Telemedien" ist eine Datenschutz-Leitlinie, kein Impressumsrecht.
+ ("telemedien", "dse"),
+ # TKG / AT-TKG sind Telekommunikationsrecht, NICHT Website-Impressum.
+ ("telekommunikationsgesetz", "telekommunikation"),
+ ("tkg", "telekommunikation"),
("tmg", "impressum"),
("mediengesetz", "impressum"),
- ("gewerbeordnung", "impressum"),
+ # Gewerbeordnung ist Gewerbe-/Handelsrecht, kein Impressum.
+ ("gewerbeordnung", "handelsrecht"),
("e-commerce", "agb"),
("digitale-inhalte", "agb"),
("konsumentenschutz", "verbraucherschutz"),
diff --git a/backend-compliance/scripts/classify_mc_use_cases.py b/backend-compliance/scripts/classify_mc_use_cases.py
index 2ee85690..66a74531 100644
--- a/backend-compliance/scripts/classify_mc_use_cases.py
+++ b/backend-compliance/scripts/classify_mc_use_cases.py
@@ -125,7 +125,7 @@ async def run_seed(conn, limit: int = 0) -> dict:
await conn.execute(
"""INSERT INTO compliance.mc_use_case_sync_state
(registry_hash, stage, total_mappings, mcs_classified)
- VALUES ($1,'seed_source_regulation',$2,$3)""",
+ VALUES ($1,'seed_regulation',$2,$3)""",
reg.registry_hash(), total, n_mc)
return {"mcs_mapped": n_mc, "regulation_rows": n_reg,
"use_case_rows": n_uc, "verification_rows": n_v}
diff --git a/backend-compliance/tests/test_use_case_registry.py b/backend-compliance/tests/test_use_case_registry.py
index 09c05fe4..6d4f5e7c 100644
--- a/backend-compliance/tests/test_use_case_registry.py
+++ b/backend-compliance/tests/test_use_case_registry.py
@@ -122,7 +122,8 @@ def test_regulation_mapper_known():
"Cyber Resilience Act (CRA)": "cra",
"DSGVO (EU) 2016/679": "dse",
"EDPB Facial Recognition": "dse", # Leitlinie → Datenschutz
- "TKG": "impressum",
+ "TKG": "telekommunikation", # Telekom-Recht, NICHT Impressum
+ "TMG": "impressum", # echtes Impressumsrecht
"TDDDG": "cookie_banner",
"Markets in Crypto-Assets (MiCA)": "mica",
"BGB": "agb",
@@ -131,6 +132,19 @@ def test_regulation_mapper_known():
assert reg.use_case_for_regulation(reg_str) == expected, reg_str
+def test_regulation_mapper_impressum_misroutes_fixed():
+ # Phase A: Telekom-/Datenschutz-/Gewerbe-Gesetze duerfen NICHT mehr als
+ # Impressum durchgehen (Korpus enthaelt kein echtes Impressumsrecht ausser
+ # TMG/MStV). Siehe Audit 2026-06-09.
+ assert reg.use_case_for_regulation("Telekommunikationsgesetz Oesterreich") \
+ == "telekommunikation"
+ assert reg.use_case_for_regulation("DSK OH Telemedien") == "dse"
+ assert reg.use_case_for_regulation("Gewerbeordnung (GewO)") == "handelsrecht"
+ # Die echten Impressum-Quellen bleiben Impressum:
+ assert reg.use_case_for_regulation("TMG") == "impressum"
+ assert reg.use_case_for_regulation("AT Mediengesetz") == "impressum"
+
+
def test_regulation_mapper_abgb_before_bgb():
# 'ABGB' enthaelt 'bgb' — die abgb-Regel MUSS zuerst greifen.
assert reg.use_case_for_regulation("AT ABGB") == "handelsrecht"