# 双员工夫妻家庭专项核查实施记录

- 保存路径：`docs/reports/implementation/2026-05-26-double-staff-spouse-family-special-check.md`
- 实施日期：2026-05-26
- 变更范围：后端专项核查家庭资产负债聚合 SQL 与对应 Mapper SQL 结构测试

## 修改内容

1. 调整 `CcdiProjectSpecialCheckMapper.xml` 的配偶识别口径：
   - 支持 `本人 -> 配偶` 的直接关系。
   - 支持 `配偶员工 -> 本人` 的反向推导，覆盖只维护单向配偶关系但双方都是员工的情况。
   - 增加 `spouse_is_staff` 标识，配偶为员工时收入优先取 `ccdi_base_staff.annual_income`。

2. 调整家庭资产、负债与缺少信息口径：
   - 双员工夫妻家庭中，本人资产取 `family_id = 本人身份证号 AND person_id = 本人身份证号`。
   - 配偶为员工时，配偶资产取 `family_id = 配偶身份证号 AND person_id = 配偶身份证号`。
   - 配偶不是员工时，配偶资产仍取 `family_id = 本人身份证号 AND person_id = 配偶身份证号`。
   - 负债继续按本人和配偶证件号从 `ccdi_debts_info` 汇总。
   - 配偶为员工时，任一公司员工成员缺少本人资产或本人负债记录，风险结果按“缺少信息”处理。

3. 调整详情明细展示查询：
   - 资产明细按 `spouse_is_staff` 选择员工本人资产或亲属资产，避免把员工配偶作为亲属资产重复计入。
   - 资产持有人和负债归属人名称优先取员工主档，非员工配偶再从亲属关系中取名，避免双向配偶关系导致明细行重复。

4. 补充 Mapper SQL 结构测试断言：
   - 校验双向配偶识别、员工配偶收入来源、员工配偶资产归属、员工配偶负债缺失判断和明细查询参数传递。

## 影响范围

- 接口路径和返回结构不变：
  - `GET /ccdi/project/special-check/family-asset-liability/list`
  - `GET /ccdi/project/special-check/family-asset-liability/detail`
- 前端页面无需调整，仍按员工展示列表。
- 不新增数据库表和字段。

## 验证结果

1. 主代码编译：
   - 命令：`mvn -DskipTests compile`
   - 目录：`ccdi-project`
   - 结果：通过。

2. Mapper XML 格式校验：
   - 命令：`xmllint --noout ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectSpecialCheckMapper.xml`
   - 结果：通过。

3. 本次变更空白检查：
   - 命令：`git diff --check -- ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectSpecialCheckMapper.xml ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectSpecialCheckMapperListSqlTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectSpecialCheckMapperDetailSqlTest.java`
   - 结果：通过。

4. 双员工夫妻 Mapper 关键口径文本校验：
   - 命令：Ruby 读取 Mapper XML 并检查反向配偶、员工配偶收入、员工配偶资产、员工配偶负债和明细参数关键片段。
   - 结果：通过，输出 `double-staff spouse mapper checks passed`。

5. 专项 JUnit：
   - 命令：`mvn test -Dtest=CcdiProjectSpecialCheckMapperListSqlTest,CcdiProjectSpecialCheckMapperDetailSqlTest`
   - 结果：未完成执行。当前模块测试编译阶段被既有无关测试错误阻断，错误集中在 `CcdiBankStatementTest` 与 `CcdiFileUploadServiceImplTest` 中旧接口签名不匹配，本次未修改这些文件。
