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
|