"""REFERENCE-Pruefer (verification_method=REFERENCE, decision_method=LINK_RESOLVER). Ist ein klarer Verweis auf ein anderes Pflichtdokument vorhanden (+ optional: loest der Link auf)? Deterministisch. Bsp: 'Details in unserer Datenschutzerklaerung'. KEIN LLM, kein juristisches Urteil. (Validiert an AGB data_protection: 7/7.) Die tatsaechliche HTTP-Aufloesung des Links ist ein optionaler Runtime-Schritt (online), nicht Teil dieser deterministischen Text-Pruefung — die URL wird hier nur extrahiert und in `detail['link']` zurueckgegeben. """ from __future__ import annotations import re from .base import CheckResult, ControlSpec, DocContext, VerificationMethod _URL = re.compile(r"https?://[^\s)\]]+", re.I) class ReferenceChecker: verification_method = VerificationMethod.REFERENCE async def check(self, ctrl: ControlSpec, doc: DocContext) -> CheckResult: text = doc.text or "" pats = ctrl.patterns or [] if not pats or not text: return CheckResult(present=False, source="reference") for p in pats: m = re.search(p, text, re.I) if m: window = text[max(0, m.start() - 40): m.end() + 200] url = _URL.search(window) or _URL.search(text) link = url.group(0) if url else None return CheckResult( present=True, evidence=" ".join(m.group(0).split())[:120], confidence=1.0, source="reference", detail={"link": link}, ) return CheckResult(present=False, source="reference")