# project_id=50 银行流水未命中规则逐条追因记录

## 目标

- 针对 `project_id=50` 最新一次流水打标结果，逐条追查未命中的 `12` 条规则原因。
- 本次只做数据库与源码核验，不改动业务代码与数据。

## 核验范围

- 任务表：`ccdi_bank_tag_task`
- 结果表：`ccdi_bank_statement_tag_result`
- 规则表：`ccdi_bank_tag_rule`
- 主数据：`ccdi_base_staff`、`ccdi_staff_fmy_relation`
- 明细表：`ccdi_bank_statement`
- 源码口径：`ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml`

## 项目概况

- `project_id=50` 最新标签任务为 `id=48`
- 任务状态：`SUCCESS`
- `success_rule_count=33`
- `failed_rule_count=0`
- `hit_count=2094`
- 实际产生命中结果的规则共 `21` 条，因此仍有 `12` 条规则未命中
- 项目流水共 `198` 条，仅涉及 `1` 名员工和 `2` 名家属：
  - 员工：`499172200511062290 / 马娜`
  - 家属：`320101200103037981 / 孙秀霞 / 配偶 / 年收入 152000`
  - 家属：`320101198908317982 / 王德华 / 父亲 / 年收入 57000`

## 12 条未命中规则与原因

### 1. `ABNORMAL_CUSTOMER_TRANSACTION`

- 当前 Mapper SQL 仍是 `where 1 = 0` 的占位实现。
- 直接原因不是 `project_id=50` 的样本不足，而是规则尚未落地真实 SQL。

### 2. `INTEREST_PAYMENT_BY_OTHERS`

- 当前 Mapper SQL 仍是 `where 1 = 0` 的占位实现。
- 该规则当前版本不会返回任何对象结果。

### 3. `MONTHLY_FIXED_INCOME`

- 项目 `50` 员工本人近 `12` 个月满足“月流入总额 > 5000”的月份其实有 `10` 个月，并非月份数量不足。
- 但这些月份金额波动极大：
  - 常规月份多在 `7225.83 ~ 22924.28`
  - `2026-03` 因多笔大额对公流入，单月达到 `113218600.98`
- 按现有 SQL，命中前提除了 `>= 6` 个月，还要求 `STDDEV(monthAmount) / AVG(monthAmount) <= 0.3`。
- 该员工实际离散系数约为 `2.9962`，远高于阈值，最终卡在“固定收入稳定性”这一层。

### 4. `SPECIAL_AMOUNT_TRANSACTION`

- 项目 `50` 中不存在金额为 `520` 或 `1314` 的员工本人特殊金额流水。
- 现有最接近的样本是：
  - `bank_statement_id=72174`
  - `2026-03-14 08:00:00`
  - 对手方 `兰溪特别金额结算中心`
  - 摘要 `特殊金额转账`
  - 支出金额 `88888.88`
- 现行 SQL 只接受 `520`、`1314` 两类固定金额，因此这条是“样本金额与真实规则枚举不一致”。

### 5. `FIXED_COUNTERPARTY_TRANSFER`

- 当前阈值为季度区间 `[3000, 15000]`。
- 样本中原本用于模拟“稳定兼职收入”的对手方 `兰溪远航信息服务有限公司`：
  - `2025-Q4` 累计 `7200`，落在区间内
  - `2026-Q1` 因 `2026-01`、`2026-02`、`2026-03` 各有一笔 `7200`，季度累计变成 `21600`，超过上限 `15000`
- 因此它自己就无法满足“同一对手至少 2 个季度都落在区间内”。
- 同时，项目 `50` 还存在多组噪声对手方也误落在区间内并跨季度重复，如：
  - `小店`：`2025-Q2/Q3/Q4`
  - `京东`：`2025-Q2/2026-Q1`
  - `微信支付`：`2025-Q2/2026-Q1`
  - `支付宝`：`2025-Q2/2025-Q4`
  - `淘宝`：`2025-Q2/2026-Q1`
  - `银行转账`：`2025-Q4/2026-Q1`
- 外层 SQL 还要求同一员工满足条件的固定对手数 `< 3`，而该员工实际达到 `6` 个，因此最终卡在对象收口条件。

### 6. `LOW_INCOME_RELATIVE_LARGE_TRANSACTION`

- 项目 `50` 家属流水总量并不低：
  - `王德华` 累计交易额 `820405.18`
  - `孙秀霞` 累计交易额 `319656.22`
- 但规则要求关系人年收入为空、为 `0`，或折算月收入 `< 3000`。
- 项目 `50` 的两个家属收入分别为：
  - `王德华` 年收入 `57000`，折算月收入 `4750`
  - `孙秀霞` 年收入 `152000`，折算月收入约 `12666.67`
- 因此没有任何一名家属能进入“低收入关系人”候选集，阻断点在家庭关系表收入口径，而不是流水金额不足。

### 7. `CROSS_BORDER_AMT`

- 当前 Mapper SQL 仍是 `where 1 = 0` 的占位实现。
- 该规则当前版本不会返回任何明细结果。

### 8. `SUSPICIOUS_INCOME_KEYWORD`

- 项目 `50` 存在多笔“看起来像兼职/合作收入”的流入样本，例如：
  - `月度稳定兼职收入`
  - `年度合作收入`
  - `经营往来收入`
  - `项目回款收入`
  - `业务合作收入`
  - `咨询返现收入`
- 但现行 SQL 的关键词集合只覆盖：
  - `代发、工资、分红、红利、奖金、薪酬、薪金、补贴、年终奖、年金、加班费、劳务费、劳务外包、提成、劳务派遣、绩效、酬劳、批量代付`
- 不包含 `兼职、收入、返现、回款、合作、经营、咨询` 等词。
- 因此项目 `50` 不是没有疑似样本，而是当前关键词词表无法识别这些摘要。

### 9. `WITHDRAW_AMT`

- 当前 Mapper SQL 仍是 `where 1 = 0` 的占位实现。
- 该规则当前版本不会返回任何对象结果。

### 10. `INCOME_ASSET_MISMATCH`

- 当前 Mapper SQL 仍是 `where 1 = 0` 的占位实现。
- 该规则当前版本不会返回任何明细结果。

### 11. `SALARY_UNUSED`

- 项目 `50` 共有两笔工资入账样本：
  - `2026-02-10 09:00:00`，证件号 `320101198908317982`，金额 `9800`
  - `2026-03-14 09:00:00`，证件号 `499172200511062290`，金额 `12000`
- 其中第一笔落在家属 `王德华` 证件号上，现行 SQL 从 `ccdi_base_staff` 内连接开始，只统计员工本人，因此这笔在连接层被排除。
- 员工本人这笔 `2026-03-14 09:00:00` 的工资入账后，`30` 天内存在 `5` 笔非代扣支出，包含：
  - `工资到账后快速转出 10800`
  - `手机银行转账 12000000`
  - `个人购汇 126000`
  - `证券大额转托管转出 560000`
  - `证券大额交易买入 880000`
- 因此这条规则一部分样本卡在员工连接，另一部分样本卡在“30 天内无非代扣支出”的 `not exists` 条件。

### 12. `PROXY_ACCOUNT_OPERATION`

- 当前 Mapper SQL 仍是 `where 1 = 0` 的占位实现。
- 该规则当前版本不会返回任何对象结果。

## 结论

- `project_id=50` 的 `12` 条未命中规则中，有 `6` 条属于当前版本仍未落地的占位 SQL：
  - `ABNORMAL_CUSTOMER_TRANSACTION`
  - `INTEREST_PAYMENT_BY_OTHERS`
  - `CROSS_BORDER_AMT`
  - `WITHDRAW_AMT`
  - `INCOME_ASSET_MISMATCH`
  - `PROXY_ACCOUNT_OPERATION`
- 另外 `6` 条属于真实 SQL 已执行，但项目 `50` 的样本或主数据口径不满足现行实现：
  - `MONTHLY_FIXED_INCOME`：月度波动过大，离散系数超标
  - `SPECIAL_AMOUNT_TRANSACTION`：只有 `88888.88`，没有 `520/1314`
  - `FIXED_COUNTERPARTY_TRANSFER`：目标样本季度累计超上限，且噪声对手方过多
  - `LOW_INCOME_RELATIVE_LARGE_TRANSACTION`：家属收入都高于低收入阈值
  - `SUSPICIOUS_INCOME_KEYWORD`：摘要词不在现行关键词集合内
  - `SALARY_UNUSED`：家属工资样本被员工连接排除，员工本人工资后 30 天内已有非代扣支出
