File size: 1,472 Bytes
877add7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
35
36
37
38
39
40
41
42
43
44
45
from app.common.enums import ActionType, DecisionMode, DoseBucket
from app.common.types import PolyGuardAction
from app.env.env_core import PolyGuardEnv
from app.env.verifier import verify_action_legality


def test_abrupt_stop_requires_taper() -> None:
    env = PolyGuardEnv()
    env.reset(seed=42, difficulty="easy")
    action = PolyGuardAction(
        mode=DecisionMode.REGIMEN_OPT,
        action_type=ActionType.STOP_DRUG,
        target_drug="benzodiazepine_like",
        replacement_drug=None,
        dose_bucket=DoseBucket.NA,
        taper_days=None,
        monitoring_plan=None,
        candidate_id="cand_99",
        confidence=0.8,
        rationale_brief="stop",
    )
    report = verify_action_legality(env.state, action)
    assert report.legal is False
    assert "abrupt_stop_requires_taper" in report.violations


def test_monitoring_action_requires_plan() -> None:
    env = PolyGuardEnv()
    env.reset(seed=42, difficulty="medium")
    action = PolyGuardAction(
        mode=DecisionMode.DOSE_OPT,
        action_type=ActionType.ORDER_MONITORING_AND_WAIT,
        target_drug=None,
        replacement_drug=None,
        dose_bucket=DoseBucket.NA,
        taper_days=None,
        monitoring_plan=None,
        candidate_id="cand_08",
        confidence=0.7,
        rationale_brief="wait",
    )
    report = verify_action_legality(env.state, action)
    assert report.legal is False
    assert "invalid_monitoring_gap" in report.violations