Hermes CI Fix
4c6fb85cf5
fix(kpi): 阈值红黄绿读写/填写规则修复 — 统一解析器+红灯优先+建议可解析+前端校验+存量修正 (project-20260911-threshold-fix)
① 新建 app/utils/threshold_parser.py 统一解析/判定(单一事实源):
- 支持负数(>=-100000)、闭区间 A~B、多条件 C1|C2;空串=未设置
- 判定顺序 red→green→yellow:红灯优先(消除宽黄灯遮蔽红灯),
green 先于 yellow(green 是主条件,yellow 是更宽兜底带)
② kpis.py / alert_generator.py 双实现收敛到统一解析器(消除重复维护)
③ thresholds.py suggest 输出可解析表达式(原黄色/适中型生成 `52.33~107.67`、`偏离55%` 等
区间/文字 → 用户点"自动建议"填入后静默失效;另修复大数目标生成 1.6e+06 科学计数法)
④ KPIDetail.vue 三个阈值输入加 placeholder/tooltip/帮助文案 + 保存前格式校验(非法即拒)
⑤ 存量 4 个不可解析表达式修正(id=46 C_REBATE_RATE / id=327 BH_SALES_10),
改前 mysqldump 备份 backend/scripts/backups/kpi_definitions.bak-20260911.sql +
threshold_rows_before_20260911.json(可回滚);不可解析 5→0
⑥ 单测 97 条 + 红黄绿判定回归 367 判定点(旧→新差异 14 条,含差异说明)
2026-09-11 17:25:24 +08:00
..
2026-05-28 17:32:22 +08:00
2026-08-31 07:44:00 +08:00
2026-09-07 10:22:24 +08:00
2026-08-31 09:07:54 +08:00
2026-09-10 09:56:50 +08:00
2026-08-23 17:43:39 +08:00
2026-05-28 17:32:22 +08:00
2026-07-29 18:25:08 +08:00
2026-08-28 00:31:31 +08:00
2026-08-11 11:34:14 +08:00
2026-08-23 18:20:29 +08:00
2026-08-30 19:16:19 +08:00
2026-09-03 18:08:27 +08:00
2026-08-28 00:31:31 +08:00
2026-09-07 10:22:24 +08:00
2026-09-03 18:08:27 +08:00
2026-08-11 11:29:39 +08:00
2026-07-12 17:46:08 +08:00
2026-09-07 11:01:56 +08:00
2026-08-28 18:03:47 +08:00
2026-09-11 17:13:07 +08:00
2026-09-06 16:57:03 +08:00
2026-09-03 01:34:13 +08:00
2026-09-07 10:22:24 +08:00
2026-07-12 17:46:08 +08:00
2026-09-08 15:57:47 +08:00
2026-08-26 07:51:39 +08:00
2026-08-31 10:14:22 +08:00
2026-09-08 11:19:38 +08:00
2026-08-28 18:03:47 +08:00
2026-07-12 17:46:08 +08:00
2026-07-22 12:58:04 +08:00
2026-07-19 10:07:46 +08:00
2026-08-23 18:20:29 +08:00
2026-08-11 11:29:39 +08:00
2026-09-03 23:09:58 +08:00
2026-09-03 23:00:15 +08:00
2026-08-27 15:51:19 +08:00
2026-08-21 16:28:23 +08:00
2026-09-11 17:25:24 +08:00
2026-07-22 18:22:48 +08:00
2026-09-08 20:24:44 +08:00
2026-05-28 17:32:22 +08:00
2026-08-26 23:45:20 +08:00
2026-08-21 16:49:11 +08:00
2026-08-27 12:50:30 +08:00
2026-08-27 10:59:56 +08:00
2026-05-28 17:32:22 +08:00
2026-05-28 17:32:22 +08:00
2026-08-26 22:38:37 +08:00
2026-08-25 00:25:11 +08:00
2026-08-31 10:14:22 +08:00
2026-07-12 17:46:08 +08:00
2026-07-21 23:41:40 +08:00
2026-08-11 11:32:30 +08:00
2026-08-10 23:40:31 +08:00
2026-08-07 17:42:26 +08:00
2026-09-11 17:25:24 +08:00
2026-05-28 17:32:22 +08:00
2026-08-28 18:03:47 +08:00
2026-08-30 19:16:19 +08:00
2026-09-08 20:11:59 +08:00
2026-08-28 18:03:47 +08:00