"""B14 wiring — Conflicting-Retention-Detector. Hängt sich an `state["extra_findings"]` an und rendert einen V2-Block (`retention_conflict_html`). """ from __future__ import annotations import html import logging from compliance.services.retention_conflict_check import ( check_retention_conflicts, ) logger = logging.getLogger(__name__) def run_b14(state: dict) -> None: new = check_retention_conflicts(state) if not new: return extras = state.get("extra_findings") or [] extras.extend(new) state["extra_findings"] = extras state["retention_conflict_html"] = _render(new) logger.info("B14 retention-conflict: %d finding(s)", len(new)) def _render(findings: list[dict]) -> str: cards = [] for f in findings: sev = (f.get("severity") or "").upper() color = "#f59e0b" if sev == "MEDIUM" else "#dc2626" vals = f.get("values_days") or [] vals_html = "" if vals: vals_html = ( "