"""B22 wiring — Cross-Domain-Legal-Doc-Detector.""" from __future__ import annotations import html import logging from compliance.services.cross_domain_doc_check import check_cross_domain_docs logger = logging.getLogger(__name__) def run_b22(state: dict) -> None: new = check_cross_domain_docs(state) if not new: return extras = state.get("extra_findings") or [] extras.extend(new) state["extra_findings"] = extras state["cross_domain_doc_html"] = _render(new) logger.info("B22 cross-domain: %d finding(s)", len(new)) def _render(findings: list[dict]) -> str: cards = [] for f in findings: sev = (f.get("severity") or "").upper() color = ("#dc2626" if sev == "HIGH" else "#f59e0b" if sev == "MEDIUM" else "#64748b") cards.append( f"
" f"
" f"{sev} · {html.escape(f.get('check_id') or '')}
" f"
" f"{html.escape(f.get('title') or '')}
" f"
" f"{html.escape(f.get('norm') or '')}
" f"
" f"{html.escape(f.get('evidence') or '')}
" f"
" f"→ Empfehlung: " f"{html.escape(f.get('recommended_action') or '')}
" "
" ) return ( "
" f"

" f"🌐 Vertragsdoc auf Fremd-Domain ({len(findings)} Fall(e))" "

" "

" "Vertragsrelevante Dokumente liegen auf einer anderen Second-Level-" "Domain als die Site. AVV-Pflicht + URL-Stabilitäts-Risiko." "

" + "".join(cards) + "
" )