Files
group_fqcd_jr/tools
lzf_0626 2c5fe9cdef 把风控扫描演示数据接进一键准备(第 12 步),并让编排支持给步骤传参
## 改动(`tools/seed_demo_data.py`)

1. **`STEPS` 增加第四个字段「额外命令行参数」**。这不是可有可无的装饰:
   `seed_risk_demo_data.py` **不带参数时只打印计划、不连数据库**(默认是干跑模式),
   不给它传 `--apply` 的话,接进编排只会打印一句"确认无误后使用 --apply 正式写入"
   然后退出码 0 —— **看起来像成功,实际什么都没准备**。这类"假成功"最难查,
   所以参数必须能传得进去。
2. **新增第 12 步「风控扫描演示数据」**,带 `--apply --dry-run-scan`:先写入上游
   业务数据,再跑一次规则干跑并把结果回滚。净效果是「写入上游数据 + 顺带验证
   5 个场景都真的命中预期规则」。
3. `run_step` / `--list` / 主循环相应支持第四项;执行时把参数**打印出来**,
   这样手跑时一眼能看出这一步到底会不会落库。

## 为什么放第 12 步,而不是插在「风控预警样本」旁边

避免**改动后续步骤的编号**。文档与肌肉记忆里已经有 `--only 4,10`、`--from 4`
这类用法,插队会让它们全部错位。而且它本身是独立号段(客户 12001-12005、
产品 159991-159995),放最后不影响任何既有步骤。

## 第 6 步与第 12 步不是重复(docstring 已写明)

- 第 6 步 `seed_risk_alert_demo_data.py`:**直接摆好**三条现成预警,
  保证风控页面一打开就有东西可看;
- 第 12 步 `seed_risk_demo_data.py`:**只造上游**,刻意不写 `fin_risk_alert`,
  让风控扫描器按规则生成 —— 演示覆盖的是**规则 → 证据 → 通知**完整链路,
  而不是"预先摆好的假预警"。

## 实测

- `--list` -> **12 步**,第 12 步末尾显示 `[--apply --dry-run-scan]`
- `--only 12 --dry-run` -> 只打印、不执行(并且打印出了参数)
- `--only 12` -> **真跑通**,退出码 0:

      [12/12] 风控扫描演示数据  用时 3.8s  退出码 0
      [命中] 客户 12001:RW-003 (高)
      [命中] 客户 12002:RW-007 (高)
      [命中] 客户 12003:RW-007 (中)
      [命中] 客户 12004:RW-012 (高)
      [命中] 客户 12005:RW-015、RW-018 (低)

- `ruff check tools/seed_demo_data.py` -> All checks passed
2026-09-14 20:50:55 +08:00
..
2026-09-11 17:26:18 +08:00