修复all模式月固定收入规则命中隔离问题

This commit is contained in:
wkc
2026-03-25 10:28:08 +08:00
parent 5eea3c66ff
commit 071c02192d
4 changed files with 268 additions and 10 deletions

View File

@@ -81,7 +81,51 @@
- all 模式下噪声收敛为安全支出噪声
- 接口链路能返回 5 条目标规则对应的关键样本
## 4. 验证命令
## 4. 二次修正
### 4.1 发现的问题
在真实后端联调时,前 4 条规则已经命中,但 `MONTHLY_FIXED_INCOME` 仍未命中。
排查结论:
- 问题不在 SQL也不在 `7200 > 5000` 阈值
- 根因是 `all` 模式下每个 `logId` 都复制整套规则样本
- 同一员工文件内同时混入了:
- `FIXED_COUNTERPARTY_TRANSFER` 的季度转入
- `SUSPICIOUS_INCOME_KEYWORD` 的大额收入
- 多条大额交易/现金存款/结汇类正向入账样本
- 这些样本都会被 `MONTHLY_FIXED_INCOME` 的 SQL 汇总到员工月收入中,导致月数和波动率口径被污染
### 4.2 修正方案
修改文件:
- [file_service.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/services/file_service.py)
- [test_file_service.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/tests/test_file_service.py)
- [test_statement_service.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/tests/test_statement_service.py)
调整内容:
- 新增项目内 `all` 模式规则重平衡逻辑
- 当同一项目只有 1 个文件时,保留原始 all 模式规则计划,不额外覆盖
- 当同一项目存在 2 个及以上文件时:
- 第 1 个文件切换为 `MONTHLY_FIXED_INCOME` 隔离档
- 从隔离档中剔除会污染非工资月流入聚合的正向入账规则:
- `SINGLE_LARGE_INCOME`
- `CUMULATIVE_INCOME`
- `ANNUAL_TURNOVER`
- `LARGE_CASH_DEPOSIT`
- `FREQUENT_CASH_DEPOSIT`
- `SUSPICIOUS_INCOME_KEYWORD`
- `FOREX_SELL_AMT`
- `FIXED_COUNTERPARTY_TRANSFER`
- 其余文件继续承载完整 all 模式规则计划
- 新增两条红绿测试:
- all 模式多文件下必须出现“月固定收入隔离档”
- 隔离档生成的员工非工资月收入必须稳定为 6 个月 `7200.0`
## 5. 验证命令
执行命令:
@@ -92,10 +136,52 @@ python3 -m pytest tests/test_file_service.py tests/test_statement_service.py tes
验证结果:
- `49 passed`
- `51 passed`
- `0 failed`
## 5. 前端影响
## 6. 真实链路复验
复验环境:
- 后端:`http://localhost:62318`
- Mock`python3 main.py --rule-hit-mode all`
- 复验项目:`project_id = 54`
复验步骤:
1. 调用 `/ccdi/project` 新建项目 `all命中复验-20260325-102625`
2. 调用 `/ccdi/file-upload/pull-bank-info` 拉取 3 个身份证号的流水
3. 等待 `ccdi_file_upload_record` 全部进入 `parsed_success`
4. 确认 `ccdi_bank_tag_task` 最新任务状态为 `SUCCESS`
5. 查询 `ccdi_bank_statement_tag_result` 核验 5 条目标规则
复验结果:
- `SPECIAL_AMOUNT_TRANSACTION``3`
- `MONTHLY_FIXED_INCOME``1`
- `SUSPICIOUS_INCOME_KEYWORD``2`
- `FIXED_COUNTERPARTY_TRANSFER``2`
- `LOW_INCOME_RELATIVE_LARGE_TRANSACTION``3`
关键命中样例:
- `MONTHLY_FIXED_INCOME`
- `近12个月有 6 个月固定收入超过阈值,月均收入 7200.00 元`
- `SPECIAL_AMOUNT_TRANSACTION`
- `与非配偶/子女交易出现特殊金额 1314.00 元`
- `SUSPICIOUS_INCOME_KEYWORD`
- `摘要命中收入关键词,摘要“劳务费发放”`
- `FIXED_COUNTERPARTY_TRANSFER`
- `固定对手“兰溪零工服务有限公司”在 4 个季度累计转入位于区间 [3000, 15000] 元`
- `LOW_INCOME_RELATIVE_LARGE_TRANSACTION`
- `低收入关系人累计交易 ... 元,命中关系人数 1 人`
结论:
- 这 5 条目标规则在真实后端链路中均已命中
- `MONTHLY_FIXED_INCOME` 的遗漏问题已通过 all 模式多文件重平衡修复
## 7. 前端影响
本次未修改 `ruoyi-ui`
@@ -105,11 +191,6 @@ python3 -m pytest tests/test_file_service.py tests/test_statement_service.py tes
- 本轮实现仅影响 Mock 样本和关联表基线
- 前端无需适配代码
## 6. 未完成项
## 8. 未完成项
本次完成了 Mock 侧单元测试和接口级集成测试,但未在本记录中执行真实后端联调与数据库结果核验:
- 未实际启动本地后端并拉取流水
- 未实际查询 `ccdi_bank_statement_tag_result`
如果后续需要闭环到项目库结果,应再补一次真实联调记录。
本次范围内无新增未完成项。