Files
ccdi/docs/reports/implementation/2026-03-18-project42-large-transaction-hit-fix-record.md

2.6 KiB
Raw Blame History

project_id=42 大额交易无命中修复记录

问题现象

  • project_id=42 的银行流水共 4133 条。
  • 项目配置为 config_type=default,当前大额交易默认参数已降到:
    • SINGLE_TRANSACTION_AMOUNT=100
    • CUMULATIVE_TRANSACTION_AMOUNT=1000
    • ANNUAL_TURNOVER=5000
    • LARGE_CASH_DEPOSIT=5000
    • FREQUENT_CASH_DEPOSIT=2
    • FREQUENT_TRANSFER=100
  • 但自动打标任务 id=11/12/13 均为 SUCCESShit_count=0

根因定位

1. 项目 42 现有流水使用了库中不存在的身份证号

  • ccdi_bank_statementproject_id=42 的全部 4133 条流水都使用同一个 cret_no=230902199012261247
  • 该证件号在 ccdi_base_staff.id_cardccdi_staff_fmy_relation.relation_cert_no 中均不存在。
  • 当前大额交易模型多条 SQL 都依赖:
    • staff.id_card = bs.cret_no
    • relation.relation_cert_no = bs.cret_no
  • 因此即使金额超过阈值,也会在身份关联层被整体过滤掉。

2. Mock 流水服务与既有设计不一致

  • lsfx-mock-server/services/statement_service.py 原先仍以随机流水为主,并固定输出不存在于当前库的 cretNo
  • 仓库内已有大额交易样本设计与对应测试口径,但运行链路没有稳定复用可识别身份池。

本次处理

代码修复

  • 校准 lsfx-mock-server 的大额交易样本生成与 StatementService 集成。
  • 保持主体名称 / 本方账号绑定逻辑不变,继续复用同一 logId 的主绑定。
  • 补充并校准 lsfx-mock-server/tests/test_statement_service.py 断言,使其与现有样本口径一致。

数据修正

  • project_id=42 现有流水中的旧证件号批量修正为当前库真实存在的员工身份证:
    • 230902199012261247 -> 330101198802020033
  • 影响行数:4133

触发重算

  • 通过后端接口 /ccdi/project/tags/rebuild 手动提交重算。
  • 最新任务:
    • id=14
    • trigger_type=MANUAL
    • status=SUCCESS
    • hit_count=2559

验证结果

Mock 测试

  • 命令:
    • PYTHONPATH=. python3 -m pytest tests -q
  • 结果:
    • 31 passed

项目 42 命中结果

  • SINGLE_LARGE_INCOME2029
  • LARGE_TRANSFER521
  • ANNUAL_TURNOVER1
  • CUMULATIVE_INCOME1

结论

  • 本次 project_id=42 无命中的直接原因,是流水中的 cret_no 无法关联到员工/家属身份。
  • 修正为现库存在的身份证后,按当前默认系统参数可立即命中规则。
  • Mock 流水层也已同步校准,后续新生成数据不再继续复用这组无效证件号。