from enum import StrEnum from app.modules.business.constants import RiskLevel class RiskSummaryKey(StrEnum): RISK_LEVEL = "risk_level" RISK_SCORE = "risk_score" OVERDUE_TASKS = "overdue_tasks" DELAYED_PROJECTS = "delayed_projects" OVER_BUDGET_PROJECTS = "over_budget_projects" FUND_RISKS = "fund_risks" SUPPLIER_RISKS = "supplier_risks" OPEN_EVENTS = "open_events" class RiskGenerationResultKey(StrEnum): CREATED = "created" UPDATED = "updated" SKIPPED = "skipped" ITEMS = "items" ACTION = "action" RISK_EVENT = "risk_event" class RiskGenerationAction(StrEnum): CREATED = "created" UPDATED = "updated" SKIPPED = "skipped" class RiskEventPayloadKey(StrEnum): CODE = "code" TITLE = "title" RISK_TYPE = "risk_type" RISK_LEVEL = "risk_level" STATUS = "status" SOURCE_DOMAIN = "source_domain" SOURCE_RECORD_ID = "source_record_id" PROJECT_CODE = "project_code" OWNER = "owner" DUE_DATE = "due_date" DETECTED_AT = "detected_at" DESCRIPTION = "description" MITIGATION = "mitigation" EVIDENCE = "evidence" RISK_SCORE_WEIGHTS = { RiskSummaryKey.OVERDUE_TASKS: 1, RiskSummaryKey.DELAYED_PROJECTS: 3, RiskSummaryKey.OVER_BUDGET_PROJECTS: 4, RiskSummaryKey.FUND_RISKS: 5, RiskSummaryKey.SUPPLIER_RISKS: 3, RiskSummaryKey.OPEN_EVENTS: 2, } RISK_LEVEL_HIGH_THRESHOLD = 15 RISK_LEVEL_MEDIUM_THRESHOLD = 5 def risk_level_for_score(score: int) -> RiskLevel: if score >= RISK_LEVEL_HIGH_THRESHOLD: return RiskLevel.HIGH if score >= RISK_LEVEL_MEDIUM_THRESHOLD: return RiskLevel.MEDIUM return RiskLevel.LOW