fix: 统一mock流水可识别身份证来源
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# Mock 流水 `cretNo` 身份池统一修复记录
|
||||
|
||||
## 本次调整
|
||||
|
||||
- 目标:让 `lsfx-mock-server` 生成的所有流水都只使用当前库可识别的身份证号。
|
||||
- 范围:
|
||||
- 命中样本流水
|
||||
- 随机噪声流水
|
||||
|
||||
## 修改内容
|
||||
|
||||
### 1. 统一身份证池常量
|
||||
|
||||
- 文件:`lsfx-mock-server/services/statement_rule_samples.py`
|
||||
- 新增 `IDENTITY_CARD_POOL`
|
||||
- 当前统一使用以下 4 个身份证号:
|
||||
- `330101198801010011`
|
||||
- `330101199001010022`
|
||||
- `330101198802020033`
|
||||
- `330101199202020044`
|
||||
|
||||
### 2. 噪声流水不再使用旧固定证件号
|
||||
|
||||
- 文件:`lsfx-mock-server/services/statement_service.py`
|
||||
- 原实现:随机噪声流水固定使用 `230902199012261247`
|
||||
- 新实现:随机噪声流水改为从 `IDENTITY_CARD_POOL` 中稳定抽取
|
||||
|
||||
## 测试验证
|
||||
|
||||
- 新增断言:`tests/test_statement_service.py`
|
||||
- 校验全量生成流水中的 `cretNo` 集合必须为可识别身份证子集
|
||||
|
||||
- 执行命令:
|
||||
|
||||
```bash
|
||||
PYTHONPATH=. python3 -m pytest tests/test_statement_service.py -q
|
||||
PYTHONPATH=. python3 -m pytest tests -q
|
||||
```
|
||||
|
||||
- 结果:
|
||||
- `8 passed`
|
||||
- `32 passed`
|
||||
|
||||
## 结果
|
||||
|
||||
- 现在 Mock 返回的命中样本和随机噪声,均不会再出现旧的无效身份证号。
|
||||
- 后端打标联调时,所有流水都能通过现库已有员工/家属身份池参与规则匹配。
|
||||
@@ -0,0 +1,74 @@
|
||||
# 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` 均为 `SUCCESS` 且 `hit_count=0`。
|
||||
|
||||
## 根因定位
|
||||
|
||||
### 1. 项目 42 现有流水使用了库中不存在的身份证号
|
||||
|
||||
- `ccdi_bank_statement` 中 `project_id=42` 的全部 4133 条流水都使用同一个 `cret_no=230902199012261247`。
|
||||
- 该证件号在 `ccdi_base_staff.id_card` 与 `ccdi_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_INCOME`:2029
|
||||
- `LARGE_TRANSFER`:521
|
||||
- `ANNUAL_TURNOVER`:1
|
||||
- `CUMULATIVE_INCOME`:1
|
||||
|
||||
## 结论
|
||||
|
||||
- 本次 `project_id=42` 无命中的直接原因,是流水中的 `cret_no` 无法关联到员工/家属身份。
|
||||
- 修正为现库存在的身份证后,按当前默认系统参数可立即命中规则。
|
||||
- Mock 流水层也已同步校准,后续新生成数据不再继续复用这组无效证件号。
|
||||
Reference in New Issue
Block a user