# 银行流水真实规则第二期后端实施记录

## 第二期规则范围
- `LOW_INCOME_RELATIVE_LARGE_TRANSACTION`
- `MULTI_PARTY_GAMBLING_TRANSFER`
- `MONTHLY_FIXED_INCOME`
- `FIXED_COUNTERPARTY_TRANSFER`
- `HOUSE_REGISTRATION_MISMATCH`
- `PROPERTY_FEE_REGISTRATION_MISMATCH`
- `TAX_ASSET_REGISTRATION_MISMATCH`
- `SUPPLIER_CONCENTRATION`
- `SALARY_QUICK_TRANSFER`
- `SALARY_UNUSED`

## 修改内容
- 补齐第二期规则参数映射与阈值透传
- 替换第二期 3 条资产比对明细规则占位 SQL
- 替换第二期 7 条对象聚合规则占位 SQL
- 对齐第二期规则元数据脚本、实施记录与验证记录

## 参数与分发调整
- 在 `BankTagRuleConfigResolver` 中补齐第二期阈值规则参数映射：
  - `MULTI_PARTY_GAMBLING_TRANSFER -> MULTI_PARTY_AMT_MIN, MULTI_PARTY_AMT_MAX`
  - `MONTHLY_FIXED_INCOME -> MONTHLY_FIXED_INCOME`
  - `FIXED_COUNTERPARTY_TRANSFER -> FIXED_COUNTERPARTY_TRANSFER_MIN, FIXED_COUNTERPARTY_TRANSFER_MAX`
- 明确以下规则为无阈值规则，继续返回空参数集：
  - `LOW_INCOME_RELATIVE_LARGE_TRANSACTION`
  - `SUPPLIER_CONCENTRATION`
  - `HOUSE_REGISTRATION_MISMATCH`
  - `PROPERTY_FEE_REGISTRATION_MISMATCH`
  - `TAX_ASSET_REGISTRATION_MISMATCH`
  - `SALARY_QUICK_TRANSFER`
  - `SALARY_UNUSED`
- 在 `CcdiBankTagServiceImpl` 中为第二期 3 条阈值型对象规则改为显式透传解析后的阈值，避免继续走占位分支。

## 资产比对真实 SQL
- 在 `CcdiBankTagAnalysisMapper.xml` 中将以下 3 条明细规则替换为真实 SQL：
  - `HOUSE_REGISTRATION_MISMATCH`
  - `PROPERTY_FEE_REGISTRATION_MISMATCH`
  - `TAX_ASSET_REGISTRATION_MISMATCH`
- 三条规则统一基于 `ccdi_asset_info` 校验员工及关系人当前资产登记情况，并继续输出 `bankStatementId/groupId/logId/reasonDetail`。
- 房产登记口径统一使用当前项目数据中的实际枚举值：
  - `asset_main_type = '房产'`
  - `asset_sub_type = '住宅'`
  - `asset_status = '正常'`

## 对象聚合真实 SQL
- 在 `CcdiBankTagAnalysisMapper.xml` 中将以下 7 条对象规则替换为真实 SQL：
  - `LOW_INCOME_RELATIVE_LARGE_TRANSACTION`
  - `MULTI_PARTY_GAMBLING_TRANSFER`
  - `MONTHLY_FIXED_INCOME`
  - `FIXED_COUNTERPARTY_TRANSFER`
  - `SUPPLIER_CONCENTRATION`
  - `SALARY_QUICK_TRANSFER`
  - `SALARY_UNUSED`
- 对象型规则统一按员工维度收口，返回 `objectType = 'STAFF_ID_CARD'`、`objectKey = 员工身份证号`，与结果表唯一键保持一致。
- 各规则口径落地如下：
  - `LOW_INCOME_RELATIVE_LARGE_TRANSACTION`：基于关系人年收入折算月收入，筛出无收入或月收入低于 3000 元且累计交易超 10 万元的员工。
  - `MULTI_PARTY_GAMBLING_TRANSFER`：按员工同日交易聚合，要求金额落在配置区间、交易笔数超过 2 笔且对手方至少 2 个。
  - `MONTHLY_FIXED_INCOME`：统计近 12 个月非工资稳定转入，满足月收入阈值、命中月数不少于 6 个月且波动率受控。
  - `FIXED_COUNTERPARTY_TRANSFER`：统计近 12 个月固定对手方按季度转入，季度金额落在配置区间且持续出现。
  - `SUPPLIER_CONCENTRATION`：基于采购交易表计算员工负责采购中单一供应商占比是否超过 70%。
  - `SALARY_QUICK_TRANSFER`：识别工资入账后 24 小时内快速转出超过 80% 的员工。
  - `SALARY_UNUSED`：识别工资入账后剔除代扣项目，连续 30 天无消费或转账支出的员工。

## 元数据脚本调整
- 在 `sql/2026-03-16-bank-tagging.sql` 中将第二期已落地规则的 `remark` 从占位描述更新为真实规则说明。
- `FIXED_COUNTERPARTY_TRANSFER.indicator_code` 调整为 `NULL`，避免继续保留不准确的单指标编码。
- 修正 `SALARY_UNUSED` 的业务口径文本乱码问题。
- 同步将 `TAX_ASSET_REGISTRATION_MISMATCH` 的业务口径更新为当前真实 SQL 已执行的房产登记校验表述。

## 与第一期衔接关系
- 第一期已完成的 9 条规则保持不变，本次不回退第一期参数映射、明细规则与对象规则实现。
- 第二期实现后，当前 19 条已落地真实规则共用同一套任务执行、结果落表、风险人数刷新与概览统计链路。
- 本次回归继续覆盖项目概览相关测试，确认第二期改动未影响已有风险概览接口结构与 SQL。

## 全量收口结论
- 第二期 10 条规则已全部替换为真实后端实现，不再依赖 `where 1 = 0` 占位 SQL。
- 第二期规则参数编码、规则编码、脚本元数据均保持全大写约定。
- 当前银行流水真实规则第一期与第二期后端范围已全部接入现有项目级打标主链路。
