File size: 1,514 Bytes
4b415b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import math
import json

def _in_range(val, min_v, max_v):
    return (val is None) or (min_v <= val <= max_v)

def assert_valid(data: dict, global_policy_path: str):
    with open(global_policy_path, "r", encoding="utf-8") as f:
        policy = json.load(f)

    ranges = policy["numeric_ranges"]
    # Very lightweight checks; the output must contain numeric deltas in the text strings.
    # Here, we simply ensure required numeric fields in cost/capacity are non-negative,
    # and clinical sections contain unit tokens.
    cost = data.get("cost", {})
    for k in ["startup_per_client", "ongoing_per_client", "total_per_client", "total_for_n"]:
        v = cost.get(k)
        if v is None or v < 0:
            raise ValueError(f"UnitValidator: cost.{k} must be >= 0")

    cap = data.get("capacity", {})
    if cap.get("total_clients", 0) < 0:
        raise ValueError("UnitValidator: capacity.total_clients must be >= 0")

    # Check presence of unit tokens in clinical text
    clin = data.get("clinical_benefits", {})
    di = (clin.get("diabetes_group") or "").lower()
    ndi = (clin.get("non_diabetes_group") or "").lower()
    must_tokens = ["%", "mmhg", "kg/m²"]
    if not any(tok in di for tok in must_tokens):
        raise ValueError("UnitValidator: diabetes_group must include units (%, mmHg, kg/m² where applicable).")
    if not any(tok in ndi for tok in must_tokens):
        raise ValueError("UnitValidator: non_diabetes_group must include units (%, mmHg, kg/m² where applicable).")