File size: 3,198 Bytes
0e6887b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
"""目标储存条件解析测试(命名条件 / ICH Zone / 冷链条件 + 标准值补齐标注)。

覆盖修复点:用户以「加速条件 / 中间条件 / 长期条件 / Zone Ⅳb / 冷藏 / 冷冻」等
**名称**指定目标条件而未写温湿度数字时,系统应按 ICH 标准值补齐温湿度,并标注
其为标准值(不静默注入);显式温湿度数字应优先采用。
"""

from skills.stability.skill import (
    _condition_type_from_goal,
    _target_condition_from_goal,
    _zone_type_from_goal,
)


def test_accelerated_named_condition_fills_standard_temp_rh():
    cond = _target_condition_from_goal("预测加速试验条件下1个月时的降解产物水平")
    assert cond is not None
    assert cond["condition_type"] == "accelerated"
    assert cond["temp_c"] == 40.0
    assert cond["rh"] == 75.0
    assert cond["temp_is_standard"] is True
    assert cond["rh_is_standard"] is True


def test_intermediate_named_condition():
    cond = _target_condition_from_goal("中间条件下的稳定性预测")
    assert cond["condition_type"] == "intermediate"
    assert cond["temp_c"] == 30.0
    assert cond["rh"] == 65.0


def test_longterm_defaults_zone_ii():
    cond = _target_condition_from_goal("长期试验条件下预测36个月货架期")
    assert cond["condition_type"] == "longterm"
    assert cond["temp_c"] == 25.0
    assert cond["rh"] == 60.0


def test_explicit_numbers_take_precedence_over_standard():
    cond = _target_condition_from_goal("预测 25℃,60%RH 条件下 48 个月")
    assert cond["temp_c"] == 25.0
    assert cond["rh"] == 60.0
    # 显式给出数字 → 不应标为标准补齐值。
    assert cond["temp_is_standard"] is False
    assert cond["rh_is_standard"] is False


def test_zone_ivb_mapping():
    assert _zone_type_from_goal("Zone Ⅳb 长期条件") == "zone_ivb"
    cond = _target_condition_from_goal("Zone Ⅳb 长期条件预测")
    assert cond["temp_c"] == 30.0
    assert cond["rh"] == 75.0


def test_zone_arabic_numerals():
    assert _zone_type_from_goal("zone 2 long-term") == "zone_ii"
    assert _zone_type_from_goal("Zone 4a") == "zone_iva"
    assert _zone_type_from_goal("zone 3") == "zone_iii"
    assert _zone_type_from_goal("zone 1") == "zone_i"


def test_refrigerated_condition_no_rh():
    cond = _target_condition_from_goal("冷藏条件下(2-8℃)保存的稳定性")
    assert cond["condition_type"] == "refrigerated"
    assert cond["temp_c"] == 5.0
    # 冷链通常不控相对湿度。
    assert cond["rh"] is None


def test_frozen_condition():
    cond = _target_condition_from_goal("冷冻 -20℃ 保存预测")
    assert cond["condition_type"] == "frozen"
    assert cond["temp_c"] == -20.0
    assert cond["rh"] is None


def test_deep_frozen_condition():
    cond = _target_condition_from_goal("-70℃ 深冷保存")
    assert cond["condition_type"] == "deep_frozen"
    assert cond["temp_c"] == -70.0


def test_negative_temp_classified_as_frozen():
    assert _condition_type_from_goal("在 -18 度保存", -18.0) == "frozen"


def test_no_condition_returns_none():
    assert _target_condition_from_goal("请梳理各批次质量属性") is None