# 风险明细员工负面征信设计文档

**日期**: 2026-03-28  
**模块**: 项目详情 - 结果总览 - 风险明细  
**作者**: Codex  
**状态**: 已确认

## 1. 背景

当前项目详情页的 `结果总览 -> 风险明细` 中，已经具备：

- 上方 `涉疑交易明细` 真实列表
- 下方 `异常账户人员信息` 占位区块

同时，系统内已经存在独立的征信维护能力：

- 负面信息表：`ccdi_credit_negative_info`
- 维护页面：`/ccdi/creditInfo`

但风险明细区域还没有把“项目内员工”的负面征信信息展示出来。当前需求是在 `涉疑交易明细` 下方新增一个员工负面征信区块，用于展示当前项目结果总览口径内员工的负面征信信息。

## 2. 目标

- 在风险明细卡片内新增 `员工负面征信信息` 区块
- 展示当前项目结果总览口径内员工的负面征信信息
- 只展示负面征信信息，不混入负债明细
- 保持最短路径实现，不跳转、不展开、不引入额外摘要卡片

## 3. 范围

### 3.1 包含范围

- 结果总览 `风险明细` 区域新增员工负面征信列表
- 结果总览专用后端分页查询接口
- 项目员工范围与负面征信表的聚合查询 SQL
- 前端列表展示、分页与空态

### 3.2 不包含范围

- 不改造现有征信维护页面
- 不接入负债明细
- 不做行内展开、详情弹窗、跳转项目分析
- 不新增项目外员工查询逻辑
- 不增加原型外统计卡片、筛选器或导出能力

## 4. 已确认口径

### 4.1 区块位置

- 新区块放在 `涉疑交易明细` 下方
- 保持在同一个 `风险明细` 卡片内
- 不放到 `项目分析` 弹窗或其他页签中

### 4.2 员工范围

- 员工集合沿用结果总览当前口径
- 以 `ccdi_project_overview_employee_result` 中当前项目员工为准
- 不扩大到项目配置中的全部目标员工
- 不收窄为仅涉疑交易涉及员工

### 4.3 展示形态

- 直接表格展示
- 一行一个员工
- 不做展开
- 负面信息全部字段直接放在列表中

### 4.4 数据范围

- 只展示 `ccdi_credit_negative_info` 负面信息
- 不展示 `ccdi_debts_info` 负债明细
- 只保留当前项目员工中“存在负面征信记录”的员工
- 没有负面征信记录的员工不展示空行

## 5. 方案对比

### 方案 A：风险明细内新增独立负面征信表格区块

- 在 `RiskDetailSection.vue` 中新增第二个真实业务表格
- 后端新增项目维度专用查询接口
- 前端直接展示负面信息全部字段

优点：

- 与需求位置完全一致
- 阅读路径最短
- 语义清晰，不污染全局征信维护页面

缺点：

- 需要新增一条结果总览专用查询链路

### 方案 B：主表摘要 + 展开查看负面信息

- 主表先展示员工摘要
- 点击后再展开负面明细

优点：

- 页面更轻

缺点：

- 与“所有字段直接放列表里”的确认结果不一致
- 增加额外交互层级

### 方案 C：接入项目分析弹窗中的征信摘要页签

- 不在风险明细新增区块
- 改为真实化 `项目分析 -> 征信摘要`

优点：

- 与人员分析语义更统一

缺点：

- 不符合“放在涉疑交易明细下面”的位置要求
- 用户路径变长

## 6. 最终方案

采用 **方案 A：在风险明细内新增独立员工负面征信表格区块**。

选择原因：

- 完全符合用户确认的位置与交互要求
- 最短路径满足业务目标
- 只需要补一条项目维度查询接口，不需要推翻现有征信维护链路

## 7. 前端设计

## 7.1 页面位置

页面位置固定在：

- `ruoyi-ui/src/views/ccdiProject/components/detail/RiskDetailSection.vue`

结构顺序调整为：

1. `涉疑交易明细`
2. `员工负面征信信息`
3. `异常账户人员信息`

## 7.2 区块标题

- 区块标题：`员工负面征信信息`
- 区块副标题：`展示当前项目员工的负面征信信息`

## 7.3 表格字段

列表字段固定为：

1. `员工姓名`
2. `身份证号`
3. `最近征信查询日期`
4. `民事案件笔数`
5. `民事案件金额`
6. `强制执行笔数`
7. `强制执行金额`
8. `行政处罚笔数`
9. `行政处罚金额`

以上字段全部来源于 `ccdi_credit_negative_info` 的现有业务字段，不新增派生字段。

## 7.4 展示规则

- 一行一个员工
- 金额列右对齐
- 日期列固定宽度
- 身份证号支持表格常规溢出处理
- 不提供展开、详情按钮、导出按钮

## 7.5 空态与分页

- 仅当列表为空时显示空态
- 空态文案：`当前项目暂无员工负面征信信息`
- 支持分页
- 分页交互与上方涉疑交易列表独立

## 8. 后端设计

## 8.1 接口设计

在结果总览控制器下新增专用接口：

### 1. 查询员工负面征信信息

- 路径：`GET /ccdi/project/overview/employee-credit-negative`
- 入参：
  - `projectId`
  - `pageNum`
  - `pageSize`
- 出参：
  - `rows`
  - `total`

本次不新增导出接口。

## 8.2 查询口径

查询分两层组织：

### 第一层：项目员工范围

员工范围直接取自结果总览员工结果表：

- 表：`ccdi_project_overview_employee_result`
- 条件：`project_id = 当前项目`

该层只负责限定当前项目员工集合。

### 第二层：负面征信命中

将项目员工集合与 `ccdi_credit_negative_info` 做关联：

- 关联键：`staff_id_card = person_id`
- 只保留匹配到负面征信记录的员工

展示字段取值规则：

- `员工姓名`：优先取 `ccdi_credit_negative_info.person_name`
- 若负面征信姓名为空，可回退 `ccdi_project_overview_employee_result.staff_name`
- 其余负面字段直接取 `ccdi_credit_negative_info` 对应列

## 8.3 排序规则

固定排序：

1. `query_date` 倒序
2. `person_id` 升序

不增加前端自定义排序条件。

## 8.4 职责边界

- 不复用 `/ccdi/creditInfo/list`
- 不把项目口径硬塞进征信维护模块的现有接口
- 结果总览接口只负责“项目内员工负面征信展示”
- 征信维护接口继续负责“全局征信对象维护”

## 9. 数据流

整体链路如下：

`RiskDetailSection.vue -> projectOverview API -> CcdiProjectOverviewController -> CcdiProjectOverviewService -> CcdiProjectOverviewMapper -> ccdi_project_overview_employee_result + ccdi_credit_negative_info`

职责说明：

- 前端只负责区块展示与分页
- Controller 负责暴露结果总览专用接口
- Service 负责项目存在性校验、分页组装
- Mapper 负责项目员工范围与负面征信表聚合查询

## 10. 测试设计

### 10.1 前端测试

- 风险明细中新增 `员工负面征信信息` 区块
- 列表字段顺序与设计一致
- 空列表时展示指定空态文案
- 分页与上方涉疑交易列表互不干扰

### 10.2 后端测试

- 项目内员工存在负面征信记录时可正常查询
- 项目内员工无负面征信记录时不返回空记录
- 项目外员工负面征信记录不会混入结果
- 查询结果不包含负债明细字段
- 排序按 `query_date desc, person_id asc`

## 11. 实施边界

本次只覆盖结果总览风险明细中的员工负面征信展示：

- 不改征信维护菜单与权限
- 不改征信上传与覆盖写入逻辑
- 不新增负面征信统计卡片
- 不新增项目分析页签真实化改造

## 12. 后续动作

待用户审阅本设计文档后，按仓库约定继续输出两份实施计划：

- `docs/plans/backend/` 后端实施计划
- `docs/plans/frontend/` 前端实施计划
