"""Obligation-Taxonomie-Registry — versioniertes Artefakt bis zur DB-Owner-Tabelle (Legal Obligation Layer v1, docs-src/development/legal_obligation_layer_v1.md). Hält Metadaten auf OBLIGATION-Ebene, die (noch) keine eigene DB-Tabelle haben. `decision_method_required`: Obligations, deren Erkennung Keyword/Embedding NACHWEISLICH nicht zuverlässig leistet (kompakte/synonymreiche Offenlegung) und die CONTENT/LLM brauchen. Empirisch belegt am TeamViewer-Recall-Defekt: 0/22 recipients+international_transfer Controls trafen, obwohl die Pflicht erfüllt war („…außerhalb EU/EWR … Standardvertragsklauseln/Schutzmaßnahmen"); Embedding cos 0.49–0.57 < 0.62, teils falscher Chunk → kein Schwellen-Fix, sondern LLM-Klasse. Wirkung: der Shadow zählt ein FAILED solcher Obligations NICHT als „echte Lücke", sondern als RECALL_LIMITED (Prüfer kann sie mit aktueller Methode nicht verifizieren). """ OBLIGATION_META: dict[str, dict] = { "recipients_disclosed": {"decision_method_required": "LLM"}, "third_country_transfer_disclosed": {"decision_method_required": "LLM"}, "safeguards_disclosed": {"decision_method_required": "LLM"}, "safeguards_accessible": {"decision_method_required": "LLM"}, } def requires_llm(obligation_id: str) -> bool: """True, wenn diese Obligation CONTENT/LLM braucht (Keyword/Embedding-Recall belegt unzureichend).""" return OBLIGATION_META.get(obligation_id, {}).get("decision_method_required") == "LLM"