;; SatGuard Risk Calculator
(define-constant err-nf (err u300))
(define-constant RL-LOW u1)
(define-constant RL-MED u2)
(define-constant RL-HI u3)
(define-constant RL-CRIT u4)
(define-read-only (calc-risk-score (pid uint))
(let ((pool (contract-call? .insurance-pool get-pool pid)))
(match pool
p (let ((tf (get tf p)) (mx (get mx p)) (cc (get cc p))
(ratio (if (> tf u0) (/ (* mx u100) tf) u100)))
(ok {score: ratio,level: (if (<= ratio u30) RL-LOW (if (<= ratio u60) RL-MED (if (<= ratio u85) RL-HI RL-CRIT)))}))
(err u300))))
(define-read-only (get-risk-level (pid uint))
(let ((rs (unwrap! (calc-risk-score pid) (err u300))))
(ok (get level rs))))
(define-read-only (get-risk-label (level uint))
(ok (if (is-eq level RL-LOW) "low"
(if (is-eq level RL-MED) "medium"
(if (is-eq level RL-HI) "high" "critical")))))