lzf_0626
b241059c2a
fix(risk): 合并预警的嵌套证据在研判入口摊平,RW-003 不再一律降级
docs/25 P2。核实后比报告描述的更麻烦一点:合并后的 evidence_snapshot 只留
product_id 与 merged_alerts,**各条规则原有的证据键被塞进了嵌套结构**
(risk_scan_service._merge_same_transaction_alerts:398-404)。而各研判函数读的是
**顶层键**(snapshot.get("ratio") 之类),于是合并过的预警一律读不到证据、降级成
"缺证据无法复核" —— 合并本来是为了少几条噪音,结果把这些预警的研判全废了。
修法:在**研判入口统一摊平**,而不是让每条规则各自去认嵌套结构。
- 新增 _flatten_merged_evidence(detail):顶层已有的键优先(来自 priority_score 最高的
主预警),再按顺序补入各子条目 evidence 里的键;merged_alerts 本身保留,
可追溯性不受影响;非合并结构原样返回。
- 列表级(_assess_list_rule)与详情级(_assess_detail_rule)两个入口都调用它,
所有规则(RW-003/007/012/015/018)一并受益。
新增 tests/unit/service/test_risk_judgement_merged_evidence.py(5 条):非合并结构原样返回、
嵌套键被抬到顶层、冲突时顶层优先、多子条目全部抬平,以及**报告症状的回归** ——
对比"没有 ratio"与"ratio 藏在 merged_alerts 里"两种输入,摊平后 RW-003 的研判结果
不再相同(原先两者都会降级成同一句话)。
ruff / mypy(136 文件) / 637 unit+contract 全绿。
2026-09-11 13:49:57 +08:00
..
2026-09-10 21:03:44 +08:00
2026-09-09 21:55:37 +08:00
2026-09-10 15:55:54 +08:00
2026-09-11 13:49:57 +08:00
2026-09-09 21:55:37 +08:00