lzf_0626
f37fd922a1
fix(seed): 演示预警的状态口径与代码对齐,并补 closed_at
## 结论:risk_action_service 没问题,我先前是误判
esolve(完成结案)写全了 status="已结案" + closed_at + handle_result(risk_action_service.py:105-107),
exclude 同样(:67-71)。我报的"结案没写 closed_at"看到的那条 ALDEMO0003
其实是**种子预置样本**,不是我以为的自己创建的那条 —— 我的冒烟脚本用
ALDEMO{时分秒} 命名,**撞上了种子的 ALDEMO0001-0003**,"已存在则跳过"把创建挡掉,
随后处置全 409,串起来就像"结案没写时间"。
真正的问题在种子数据,两处:
1) **状态口径与代码不一致**:ALDEMO0003 写成 status="已关闭",而
isk_action_service 里**没有任何动作会产生这个状态**(状态机只有
待处理 / 调查中 / 已排除 / 已结案)。演示时会被当成系统行为,排查时又查不到出处。
按它的 close_reason 语义(低风险 + 已核验为正常交易),它就是**关闭误报** → 改为"已排除"。
2) **终态缺 closed_at**:那条有 close_reason 却没有 closed_at,自相矛盾;
而且
isk_repository 按 closed_at 统计"当日结案",缺了它会被漏掉。
INSERT 补上该列,样本用 closed_at_offset_minutes 给值。
## 顺带修掉冒烟脚本的撞号
预警编号前缀 ALDEMO → E2E,注释里写明原因 —— 免得下次又操作到种子样本、
还把现象当成新 bug。
## 验证
- ALDEMO0003 现为 status=已排除 + closed_at 有值
- 库里所有终态预警(已排除/已结案)都带 closed_at;进行中的(调查中)不带 —— 口径一致
- 自己创建的两条走 resolve 后 status=已结案 且 closed_at/handle_result 都有值
- 冒烟重跑:40/40 通过,新造预警编号 E2E134351,处置闭环三段全 PASS
门禁:ruff 通过 / mypy 250 文件 0 错 / 单元+契约 1381 passed 2 skipped。
2026-09-13 21:44:08 +08:00
..
2026-09-12 12:10:10 +08:00
2026-09-12 14:57:17 +08:00
2026-09-10 20:33:13 +08:00
2026-09-11 16:57:47 +08:00
2026-09-11 17:26:18 +08:00
2026-09-13 19:47:10 +08:00
2026-09-12 14:40:53 +08:00
2026-09-10 22:29:23 +08:00
2026-09-10 22:42:17 +08:00
2026-09-12 12:20:01 +08:00
2026-09-12 12:57:16 +08:00
2026-09-12 15:21:34 +08:00
2026-09-12 14:43:05 +08:00
2026-09-10 20:15:09 +08:00
2026-09-12 15:21:34 +08:00
2026-09-10 20:29:12 +08:00
2026-09-11 16:57:47 +08:00
2026-09-11 10:13:48 +08:00
2026-09-13 21:44:08 +08:00
2026-09-13 19:39:16 +08:00
2026-09-10 17:11:52 +08:00
2026-09-11 16:57:47 +08:00
2026-09-11 16:57:47 +08:00
2026-09-10 18:14:03 +08:00
2026-09-12 15:37:36 +08:00
2026-09-12 12:09:55 +08:00
2026-09-12 15:21:34 +08:00
2026-09-12 14:43:05 +08:00
2026-09-11 12:47:01 +08:00
2026-09-11 14:46:40 +08:00
2026-09-11 21:03:58 +08:00
2026-09-11 21:03:58 +08:00
2026-09-09 21:55:37 +08:00
2026-09-12 12:20:01 +08:00
2026-09-10 20:22:53 +08:00
2026-09-10 22:34:20 +08:00
2026-09-12 10:34:28 +08:00
2026-09-11 16:57:47 +08:00
2026-09-11 16:57:47 +08:00
2026-09-12 10:45:40 +08:00
2026-09-09 21:55:37 +08:00
2026-09-09 21:55:37 +08:00
2026-09-13 16:20:39 +08:00
2026-09-11 20:30:27 +08:00
2026-09-11 14:24:45 +08:00
2026-09-11 16:51:52 +08:00
2026-09-11 16:51:52 +08:00
2026-09-11 14:19:05 +08:00
2026-09-11 16:28:19 +08:00
2026-09-12 14:40:53 +08:00
2026-09-13 19:17:56 +08:00
2026-09-13 18:54:09 +08:00
2026-09-11 10:13:48 +08:00
2026-09-11 19:51:44 +08:00
2026-09-11 16:40:15 +08:00
2026-09-11 14:46:40 +08:00
2026-09-10 21:36:23 +08:00
2026-09-10 21:55:03 +08:00
2026-09-11 15:25:45 +08:00
2026-09-11 15:25:45 +08:00
2026-09-11 17:26:18 +08:00
2026-09-11 16:57:47 +08:00
2026-09-12 10:34:28 +08:00
2026-09-11 14:46:40 +08:00
2026-09-11 14:46:40 +08:00
2026-09-12 14:43:05 +08:00
2026-09-13 21:44:08 +08:00
2026-09-13 15:56:54 +08:00
2026-09-13 16:19:54 +08:00
2026-09-12 14:43:05 +08:00
2026-09-11 14:46:40 +08:00
2026-09-12 10:45:40 +08:00
2026-09-11 16:57:47 +08:00
2026-09-12 12:10:10 +08:00
2026-09-11 19:51:51 +08:00
2026-09-13 21:14:13 +08:00
2026-09-11 21:03:58 +08:00
2026-09-11 13:05:33 +08:00
2026-09-11 10:27:29 +08:00
2026-09-11 16:57:47 +08:00