Source Code

;; 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")))))

Functions (3)

FunctionAccessArgs
calc-risk-scoreread-onlypid: uint
get-risk-levelread-onlypid: uint
get-risk-labelread-onlylevel: uint