from ..models import PageContext, Channel, RiskLevel SEVERITY = {RiskLevel.low: 1, RiskLevel.medium: 2, RiskLevel.high: 3, RiskLevel.blocked: 4} BLOCKED_TERMS = ["kill yourself", "dox"] HEALTH_ESCALATION_TERMS = ["chest pain", "suicidal", "overdose", "can't breathe", "cant breathe", "stroke", "911", "emergency", "urgent medical"] CIVIC_HIGH_RISK_TERMS = ["where do i vote", "am i registered", "absentee ballot", "mail ballot", "polling place", "opponent committed", "fraud", "illegal", "deepfake"] def max_risk(*levels: RiskLevel) -> RiskLevel: return max(levels, key=lambda r: SEVERITY[r]) def classify_risk(page_context: PageContext, channel: Channel, text: str | None, is_public: bool) -> RiskLevel: body = (text or "").lower() if any(term in body for term in BLOCKED_TERMS): return RiskLevel.blocked if page_context == PageContext.healthcare: if any(term in body for term in HEALTH_ESCALATION_TERMS): return RiskLevel.high if any(term in body for term in ["medication", "diagnosis", "patient", "symptoms"]): return RiskLevel.high if page_context == PageContext.civic: if any(term in body for term in CIVIC_HIGH_RISK_TERMS): return RiskLevel.high if is_public and channel == Channel.comment: return RiskLevel.medium if is_public and channel in {Channel.comment, Channel.page_post}: return RiskLevel.medium return RiskLevel.low def requires_human_approval(page_context: PageContext, channel: Channel, risk_level: RiskLevel, is_public: bool) -> bool: if risk_level in {RiskLevel.medium, RiskLevel.high, RiskLevel.blocked}: return True if page_context == PageContext.civic and is_public: return True if channel in {Channel.comment, Channel.page_post}: return True return False