;; SatGuard Premium Engine
(define-constant err-owner (err u320))
(define-constant err-nf (err u321))
(define-constant err-amt (err u322))
(define-data-var admin principal tx-sender)
(define-map rates {tier: uint} {bps: uint}) ;; basis points per tier
(define-read-only (get-rate (tier uint)) (default-to {bps: u100} (map-get? rates {tier: tier})))
(define-public (set-rate (tier uint) (bps uint))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (<= tier u4) err-amt)
(asserts! (> bps u0) err-amt)
(map-set rates {tier: tier} {bps: bps})
(print {e: "rate-set",tier: tier,bps: bps})
(ok true)))
(define-read-only (calc-premium (pid uint) (amt uint))
(let ((pt (contract-call? .sg-risk-tiers get-pool-tier pid)))
(match pt
tier-data (let ((r (get-rate (get tier tier-data))))
(ok (/ (* amt (get bps r)) u10000)))
(ok (/ (* amt u100) u10000))))) ;; default 1%
(define-read-only (calc-annual-premium (pid uint) (amt uint))
(let ((monthly (unwrap! (calc-premium pid amt) (err u321))))
(ok (* monthly u12))))