调整专项核查详情展示并补充家庭资产负债测试数据

This commit is contained in:
wkc
2026-03-24 21:34:38 +08:00
parent eaea112831
commit adb6b00ed0
19 changed files with 816 additions and 34 deletions

View File

@@ -0,0 +1,84 @@
# 专项核查家庭资产负债测试数据实施计划
> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.
>
> 按仓库 `AGENTS.md` 约定,本次在当前会话直接执行,不启用 subagent。
**Goal:**`project_id = 51` 的“员工家庭资产负债专项核查”补充一组可重复执行的测试数据,覆盖正常、风险、高风险和缺失信息等典型情况。
**Architecture:** 复用现有测试项目 `51`,直接向 `ccdi_base_staff``ccdi_staff_fmy_relation``ccdi_asset_info``ccdi_debts_info``ccdi_bank_statement_tag_result` 补充专项核查专用样本,不新增新的项目、流水文件或前端入口。测试数据脚本采用“先删后插”的幂等方式,确保重复执行不会堆积脏数据,并通过与专项核查 SQL 同口径的查询完成验证。
**Tech Stack:** MySQL 8、仓库脚本 `bin/mysql_utf8_exec.sh`、专项核查 Mapper SQL、Markdown 实施与验证文档
---
### Task 1: 设计覆盖场景与金额口径
**Files:**
- Modify: `docs/plans/misc/2026-03-24-special-check-family-asset-liability-test-data-implementation.md`
- Create: `sql/migration/2026-03-24-add-special-check-family-asset-liability-test-data.sql`
- [x] **Step 1: 明确测试项目与入围方式**
复用 `project_id = 51`,通过 `ccdi_bank_statement_tag_result.object_type = 'STAFF_ID_CARD'` + `object_key = 员工身份证号` 的对象命中方式将新增员工纳入专项核查范围。
- [x] **Step 2: 设计 6 类样本**
1. 正常边界:`收入 + 负债 = 资产 * 1.5`
2. 风险边界:`收入 + 负债 = 资产 * 3`
3. 高风险:`收入 + 负债 > 资产 * 3`
4. 缺少本人负债:本人无负债记录,但家庭仍有配偶负债
5. 缺少本人资产:本人无资产记录,但家庭仍有配偶资产
6. 单身完整:无配偶,但本人资产与负债完整
- [x] **Step 3: 固化金额口径**
所有资产均使用 `current_value`,所有负债均使用 `principal_balance`,缺失判断严格沿用专项核查现有逻辑:
- 本人资产记录数为 `0` 时输出 `MISSING_INFO`
- 本人负债记录数为 `0` 时输出 `MISSING_INFO`
### Task 2: 编写幂等测试数据脚本
**Files:**
- Create: `sql/migration/2026-03-24-add-special-check-family-asset-liability-test-data.sql`
- [x] **Step 1: 先清理专用样本数据**
删除本次样本对应的员工、配偶关系、资产、负债和项目命中记录,确保脚本可重复执行。
- [x] **Step 2: 插入专项核查员工与配偶关系**
新增 6 名专项核查专用员工,其中 5 名带配偶关系,并补充本人/配偶年收入。
- [x] **Step 3: 插入资产与负债明细**
按场景写入本人与配偶资产、负债,确保边界值和缺失值可直接命中现有风险判断。
- [x] **Step 4: 插入项目命中记录**
`ccdi_bank_statement_tag_result` 写入对象命中数据,使样本员工进入 `project_id = 51` 的专项核查范围。
### Task 3: 执行脚本并验证结果
**Files:**
- Modify: `docs/reports/implementation/2026-03-24-special-check-family-asset-liability-test-data-record.md`
- Create: `docs/tests/records/2026-03-24-special-check-family-asset-liability-test-data-verification.md`
- [x] **Step 1: 执行脚本**
Run: `bin/mysql_utf8_exec.sh sql/migration/2026-03-24-add-special-check-family-asset-liability-test-data.sql`
Expected: 无报错返回,事务成功提交。
- [x] **Step 2: 查询列表结果**
按专项核查同口径 SQL 查询 `project_id = 51` 下名称为 `专项核查%` 的员工,验证金额汇总和风险等级是否符合预期。
- [x] **Step 3: 查询缺失信息详情**
验证“缺少本人负债样本”“缺少本人资产样本”的详情缺失标记是否分别返回 `missingSelfDebtInfo = 1``missingSelfAssetInfo = 1`
- [x] **Step 4: 补实施与验证记录**
将脚本路径、覆盖场景、执行结果与验证摘要沉淀到实施记录和验证文档中。

View File

@@ -0,0 +1,25 @@
# 专项核查详情卡片顺序调整实施记录
## 基本信息
- 日期2026-03-24
- 范围:专项核查查看详情区域卡片顺序
- 类型:前端展示调整
## 修改内容
1. 调整 `ruoyi-ui/src/views/ccdiProject/components/detail/FamilyAssetLiabilityDetail.vue` 中详情卡片顺序。
2. 卡片顺序由“收入明细、资产明细、负债明细”调整为“收入明细、负债明细、资产明细”。
3. 未修改卡片中的字段内容、日期格式化逻辑和响应式样式,仅调整展示顺序。
## 测试与验证
- 执行:`node tests/unit/special-check-detail-layout.test.js`
- 执行:`node tests/unit/special-check-detail-date-display.test.js`
- 执行:`node tests/unit/special-check-family-table.test.js`
- 执行:`node tests/unit/special-check-detail-expand.test.js`
- 结果:通过
## 影响说明
- 仅影响专项核查详情区域三张卡片的展示顺序,不影响接口返回、字段取值和展开交互。

View File

@@ -0,0 +1,25 @@
# 专项核查详情日期时间展示优化实施记录
## 基本信息
- 日期2026-03-24
- 范围:专项核查列表中“查看详情”展开区域
- 类型:前端展示优化
## 修改内容
1. 调整 `ruoyi-ui/src/views/ccdiProject/components/detail/FamilyAssetLiabilityDetail.vue` 中资产明细、负债明细的日期列展示方式。
2. 新增 `formatDetailDateTime` 方法,统一格式化详情中的 `valuationDate``queryDate`
3. 当日期值包含非零时间时,展示 `yyyy-MM-dd HH:mm:ss`;当时间为 `00:00:00` 时,仅展示 `yyyy-MM-dd`,避免出现无意义的零点时间。
4. 空值或不可解析值统一展示为 `-`
## 测试与验证
- 执行:`node tests/unit/special-check-detail-date-display.test.js`
- 执行:`node tests/unit/special-check-detail-layout.test.js`
- 执行:`node tests/unit/special-check-detail-expand.test.js`
- 结果:通过
## 影响说明
- 仅影响专项核查详情展开区的日期显示,不涉及接口、后端逻辑和数据结构调整。

View File

@@ -0,0 +1,94 @@
# 2026-03-24 专项核查页员工家庭资产负债专项核查测试数据实施记录
## 本次新增文件
- SQL 脚本
- `sql/migration/2026-03-24-add-special-check-family-asset-liability-test-data.sql`
- 计划文档
- `docs/plans/misc/2026-03-24-special-check-family-asset-liability-test-data-implementation.md`
## 数据落点
- `ccdi_base_staff`
- 新增 6 名专项核查专用员工
- `ccdi_staff_fmy_relation`
- 新增 5 条配偶关系,补充配偶收入
- `ccdi_asset_info`
- 新增资产明细,覆盖本人资产、配偶资产、单身资产
- `ccdi_debts_info`
- 新增负债明细,覆盖本人负债、配偶负债、单身负债
- `ccdi_bank_statement_tag_result`
-`project_id = 51` 新增对象命中记录,使样本员工进入专项核查范围
## 覆盖场景
### 1. 正常边界
- 员工:`专项核查正常边界样本`
- 目标:验证 `comparisonAmount = totalAsset * 1.5` 时命中 `NORMAL / 正常`
- 设计值:
- 家庭总收入:`300000.00`
- 家庭总资产:`1000000.00`
- 家庭总负债:`1200000.00`
### 2. 风险边界
- 员工:`专项核查风险边界样本`
- 目标:验证 `comparisonAmount = totalAsset * 3` 时命中 `RISK / 存在风险`
- 设计值:
- 家庭总收入:`300000.00`
- 家庭总资产:`500000.00`
- 家庭总负债:`1200000.00`
### 3. 高风险
- 员工:`专项核查高风险样本`
- 目标:验证 `comparisonAmount > totalAsset * 3` 时命中 `HIGH / 高风险`
- 设计值:
- 家庭总收入:`240000.00`
- 家庭总资产:`500000.00`
- 家庭总负债:`1400100.00`
### 4. 缺少本人负债
- 员工:`专项核查缺少负债样本`
- 目标:验证本人无负债记录时优先输出 `MISSING_INFO / 缺少信息`
- 设计值:
- 家庭总收入:`300000.00`
- 家庭总资产:`800000.00`
- 家庭总负债:`200000.00`
### 5. 缺少本人资产
- 员工:`专项核查缺少资产样本`
- 目标:验证本人无资产记录时优先输出 `MISSING_INFO / 缺少信息`
- 设计值:
- 家庭总收入:`350000.00`
- 家庭总资产:`600000.00`
- 家庭总负债:`400000.00`
### 6. 单身完整
- 员工:`专项核查单身完整样本`
- 目标:验证无配偶情况下仍可正常汇总本人资产与负债
- 设计值:
- 家庭总收入:`180000.00`
- 家庭总资产:`400000.00`
- 家庭总负债:`300000.00`
## 脚本策略
- 使用固定 `staff_id` 与身份证号作为专用测试样本主键
- 先删除后插入,确保脚本支持重复执行
- 不创建新的项目或路由,不改动现有专项核查逻辑
- 复用已有项目 `51`,避免引入额外项目初始化成本
## 执行与验证
- 执行脚本:
- `bin/mysql_utf8_exec.sh sql/migration/2026-03-24-add-special-check-family-asset-liability-test-data.sql`
- 验证记录:
- `docs/tests/records/2026-03-24-special-check-family-asset-liability-test-data-verification.md`
- 验证结论:
- 6 名专用样本均已进入 `project_id = 51` 的专项核查范围
- 正常边界、风险边界、高风险、缺少本人负债、缺少本人资产、单身完整 6 类场景均已命中预期结果

View File

@@ -0,0 +1,23 @@
# 专项排查图谱占位卡片前端实施记录
## 改动日期
2026-03-24
## 改动范围
- `ruoyi-ui/src/views/ccdiProject/components/detail/SpecialCheck.vue`
- `docs/tests/scripts/check-special-check-graph-placeholder.js`
## 实施内容
1. 在专项排查页面的“专项核查”区域下方新增一张静态占位卡片。
2. 卡片用于预留后续图谱外链入口,当前展示标题、说明文案、占位状态和禁用按钮。
3. 保持现有页面结构不变,不新增接口、不调整路由、不影响已有家庭资产负债专项核查卡片。
4. 新增轻量校验脚本,用于检查占位卡片关键结构与文案是否存在。
5. 根据页面占位展示需要,将图谱占位卡片的最小高度调整为 `500px`,增强视觉占位效果。
## 结果说明
- 专项排查页面现在包含“员工家庭资产负债专项核查”和“图谱外链展示”两张卡片。
- 图谱卡片当前仅作为占位入口,后续接入真实外链时可直接在现有卡片基础上扩展。

View File

@@ -0,0 +1,24 @@
# 专项核查汇总展示顺序调整实施记录
## 基本信息
- 日期2026-03-24
- 范围:专项核查列表汇总列展示顺序
- 类型:前端展示调整
## 修改内容
1. 调整 `ruoyi-ui/src/views/ccdiProject/components/detail/FamilyAssetLiabilitySection.vue` 中专项核查列表汇总列顺序。
2. 汇总字段展示顺序由“家庭总年收入、家庭总资产、家庭总负债”调整为“家庭总年收入、家庭总负债、家庭总资产”。
3. 未修改接口返回字段、排序逻辑和详情展开逻辑,仅调整前端表格列位置。
## 测试与验证
- 执行:`node tests/unit/special-check-family-table.test.js`
- 执行:`node tests/unit/special-check-detail-expand.test.js`
- 执行:`node tests/unit/special-check-detail-date-display.test.js`
- 结果:通过
## 影响说明
- 仅影响专项核查列表汇总列的前端展示顺序,不影响数据内容和后端接口。

View File

@@ -0,0 +1,66 @@
# 2026-03-24 专项核查页员工家庭资产负债专项核查测试数据验证记录
## 执行命令
```bash
bin/mysql_utf8_exec.sh sql/migration/2026-03-24-add-special-check-family-asset-liability-test-data.sql
```
## 执行结果
- 执行时间2026-03-24 20:58:39 +0800
- 执行结果:`PASS`
- 说明:脚本执行无报错,事务成功提交
## 列表口径验证
### 验证 SQL
```sql
SELECT
bs.name AS staff_name,
COALESCE(bs.annual_income, 0) + COALESCE(spouse.spouse_income, 0) AS total_income,
COALESCE(asset.total_asset, 0) AS total_asset,
COALESCE(debt.total_debt, 0) AS total_debt,
COALESCE(bs.annual_income, 0) + COALESCE(spouse.spouse_income, 0) + COALESCE(debt.total_debt, 0) AS comparison_amount,
CASE
WHEN COALESCE(asset.self_asset_count, 0) = 0 OR COALESCE(debt.self_debt_count, 0) = 0 THEN 'MISSING_INFO'
WHEN COALESCE(bs.annual_income, 0) + COALESCE(spouse.spouse_income, 0) + COALESCE(debt.total_debt, 0) <= COALESCE(asset.total_asset, 0) * 1.5 THEN 'NORMAL'
WHEN COALESCE(bs.annual_income, 0) + COALESCE(spouse.spouse_income, 0) + COALESCE(debt.total_debt, 0) <= COALESCE(asset.total_asset, 0) * 3 THEN 'RISK'
ELSE 'HIGH'
END AS risk_level_code
FROM ccdi_base_staff bs
...
WHERE bs.name LIKE '专项核查%'
ORDER BY bs.staff_id;
```
### 验证结果
| 员工 | 家庭总收入 | 家庭总资产 | 家庭总负债 | 对比金额 | 风险结果 |
|------|------------|------------|------------|----------|----------|
| 专项核查正常边界样本 | 300000.00 | 1000000.00 | 1200000.00 | 1500000.00 | NORMAL |
| 专项核查风险边界样本 | 300000.00 | 500000.00 | 1200000.00 | 1500000.00 | RISK |
| 专项核查高风险样本 | 240000.00 | 500000.00 | 1400100.00 | 1640100.00 | HIGH |
| 专项核查缺少负债样本 | 300000.00 | 800000.00 | 200000.00 | 500000.00 | MISSING_INFO |
| 专项核查缺少资产样本 | 350000.00 | 600000.00 | 400000.00 | 750000.00 | MISSING_INFO |
| 专项核查单身完整样本 | 180000.00 | 400000.00 | 300000.00 | 480000.00 | NORMAL |
## 缺失标记验证
### 验证结果
| 员工 | missing_self_asset_info | missing_self_debt_info | self_total_asset | self_total_debt |
|------|-------------------------|------------------------|------------------|-----------------|
| 专项核查缺少负债样本 | 0 | 1 | 450000.00 | 0.00 |
| 专项核查缺少资产样本 | 1 | 0 | 0.00 | 250000.00 |
## 项目入围验证
- `project_id = 51` 下新增专项核查样本命中数:`6`
- 说明6 名专用员工均已进入专项核查范围
## 结论
- 新增测试数据已覆盖正常边界、风险边界、高风险、缺少本人负债、缺少本人资产、单身完整 6 类情况
- 当前专项核查风险判断口径与缺失标记口径均能被这组样本稳定命中

View File

@@ -0,0 +1,38 @@
# 专项排查图谱占位卡片前端验证记录
## 验证日期
2026-03-24
## 验证内容
### 1. 轻量校验脚本红绿验证
- 首次执行命令:
```bash
node docs/tests/scripts/check-special-check-graph-placeholder.js
```
- 初始结果:失败
- 失败原因:`SpecialCheck.vue` 中缺少图谱占位卡片的关键结构与文案
- 修改后再次执行命令:
```bash
node docs/tests/scripts/check-special-check-graph-placeholder.js
```
- 结果:通过
- 追加校验:脚本已覆盖 `min-height: 500px` 的高度断言
### 2. 前端构建验证
- 执行命令:
```bash
cd ruoyi-ui && npm run build:prod
```
- 结果:通过
- 备注构建输出存在既有的资源体积告警asset size limit / entrypoint size limit未出现与本次改动相关的编译错误

View File

@@ -0,0 +1,31 @@
const fs = require("fs");
const path = require("path");
const componentPath = path.resolve(
__dirname,
"../../../ruoyi-ui/src/views/ccdiProject/components/detail/SpecialCheck.vue"
);
const componentContent = fs.readFileSync(componentPath, "utf8");
const requiredSnippets = [
'class="graph-placeholder-card"',
"图谱外链展示",
"用于后续接入外链图谱页面",
"待接入",
"min-height: 500px",
];
const missingSnippets = requiredSnippets.filter(
(snippet) => !componentContent.includes(snippet)
);
if (missingSnippets.length) {
console.error("专项核查图谱占位卡片校验失败,缺少以下内容:");
missingSnippets.forEach((snippet) => {
console.error(`- ${snippet}`);
});
process.exit(1);
}
console.log("专项核查图谱占位卡片校验通过");