fix(kpi): suggest 保留历史默认口径 middle_best — 修复未知编码被误判为 higher_better(C_REBATE_RATE/BH_SALES_10 建议退化) (project-20260911-threshold-fix)
This commit is contained in:
@@ -185,6 +185,34 @@ class TestSuggestFormat:
|
||||
for level in ("green", "yellow", "red"):
|
||||
assert is_valid_threshold(s2[level]["label"]), s2[level]["label"]
|
||||
|
||||
def test_kpi_type_default_preserves_legacy_middle_best(self):
|
||||
"""_kpi_type 默认分支必须保持历史语义 = middle_best(原实现的 else 分支)。"""
|
||||
from app.api.thresholds import _kpi_type
|
||||
|
||||
class K:
|
||||
def __init__(self, code):
|
||||
self.kpi_code = code
|
||||
|
||||
assert _kpi_type(K("SALES_TOTAL")) == "higher_better"
|
||||
assert _kpi_type(K("COST_CONTROL_RATE")) == "lower_better"
|
||||
assert _kpi_type(K("C_REBATE_RATE")) == "middle_best" # 渠补率:历史为适中型
|
||||
assert _kpi_type(K("BH_SALES_10")) == "middle_best" # 销售-任富海:历史为适中型
|
||||
assert _kpi_type(K("MADE_UP_CODE")) == "middle_best" # 未知编码 → 默认适中型
|
||||
|
||||
def test_c_rebate_rate_suggestion_is_middle_best_range(self):
|
||||
"""回归:C_REBATE_RATE 建议仍走适中型区间口径(不得退化为更高的单边界)。"""
|
||||
from app.api.thresholds import _kpi_type, build_suggestion
|
||||
|
||||
class K:
|
||||
kpi_code = "C_REBATE_RATE"
|
||||
|
||||
t = _kpi_type(K())
|
||||
s = build_suggestion(t, 80.0, tolerance=27.67)
|
||||
assert t == "middle_best"
|
||||
assert s["green"]["label"] == "52.33~107.67"
|
||||
assert is_valid_threshold(s["yellow"]["label"])
|
||||
assert is_valid_threshold(s["red"]["label"])
|
||||
|
||||
def test_middle_best_zero_tolerance_guard(self):
|
||||
"""容忍度退化时不得生成 A~A 之类不可用表达式"""
|
||||
s = build_suggestion("middle_best", 0.0, tolerance=0.0)
|
||||
|
||||
Reference in New Issue
Block a user