import datetime as _dt import uuid from dataclasses import dataclass, field from typing import Any, Dict, List, Optional CANCER_RISK_TEMPLATE_COLUMNS: List[str] = [ "record_id", "chemical_name", "casrn", "route", "exposure_value", "exposure_unit", "body_weight_kg", "csf_value", "csf_unit", "iur_value", "air_conc_value", "air_conc_unit", "source_reference", ] def default_run_id(prefix: str = "run") -> str: ts = _dt.datetime.utcnow().strftime("%Y%m%d_%H%M%S") return f"{prefix}_{ts}_{uuid.uuid4().hex[:8]}" @dataclass class RegulatoryClause: clause_id: str framework: str title: str description: str required_fields: List[str] = field(default_factory=list) required_evidence_terms: List[str] = field(default_factory=list) acceptance_rule: str = "all_required_fields" applicability: Dict[str, Any] = field(default_factory=dict) source_reference: str = "" @dataclass class ClauseEvaluation: clause_id: str framework: str status: str fields_present: List[str] = field(default_factory=list) missing_fields: List[str] = field(default_factory=list) evidence_hits: List[str] = field(default_factory=list) prompt: str = "" reason: str = "" RISK_TIER_THRESHOLDS = { "low": 1e-6, "moderate": 1e-4, } def classify_risk_tier(value: Optional[float]) -> str: if value is None: return "unknown" if value < RISK_TIER_THRESHOLDS["low"]: return "de_minimis" if value <= RISK_TIER_THRESHOLDS["moderate"]: return "monitor" return "high_priority"