13-26-statistics-data-consistency-validation.md 9.3 KB

Story 13.26: 统计模块数据一致性验证与回归测试

Status: done

元数据

  • Epic: Epic 13 - 跨端数据同步测试
  • 状态: done
  • 优先级: P1 (数据准确性验证)
  • 故事点: 3
  • 依赖: Story 13.24 和 13.25 完成

用户故事

作为系统质量保证人员, 我希望对统计模块进行全面的数据一致性验证和回归测试, 以确保所有修复后的统计方法使用统一的统计口径,数据准确可靠。

背景

为什么要验证: 经过 Story 13.23、13.24、13.25 的修复,统计模块已从使用 disabled_person.jobStatus 统一改为使用 order_person.work_status。需要进行全面的验证确保:

  1. 所有统计方法使用相同的统计口径
  2. 各统计图表之间数据保持一致
  3. 与首页仪表板数据保持一致
  4. 没有引入新的 bug

验证范围:

  • 统计模块所有 8 个统计方法
  • 企业小程序数据统计页所有图表
  • 首页仪表板相关数据

验收标准

AC 1: 所有统计方法使用统一统计口径

Given 统计模块代码审查 When 检查所有统计方法 Then 所有方法应使用 order_person.work_status = 'working' 过滤在职人员 And 不应再有任何方法使用 disabled_person.jobStatus = 1

AC 2: 分布图总人数一致性验证

Given 企业小程序数据统计页 When 查看各分布图(残疾类型、性别、年龄、户籍) Then 各分布图的总人数应相同 And 应与首页仪表板在职人数一致

AC 3: 在职状态分布图验证

Given 企业小程序数据统计页 When 查看在职状态分布图 Then 应显示所有 work_status 状态 And 各状态人数之和应等于总人数 And "在职"状态人数应与首页仪表板一致

AC 4: 薪资统计验证

Given 企业小程序数据统计页 When 查看薪资分布和平均薪资 Then 薪资分布总人数应与首页仪表板一致 And 平均薪资应基于在职人员计算

AC 5: 在职率统计验证

Given 企业小程序数据统计页 When 查看在职率统计 Then 在职率计算应基于正确的在职人数 And 在职人数应与首页仪表板一致

AC 6: API 响应数据一致性

Given 调用所有统计 API When 比较返回的数据 Then 各 API 返回的总人数应一致 And 与首页 overview API 返回的在职人数一致

AC 7: E2E 测试全面通过

Given 所有修复完成 When 运行数据统计页 E2E 测试套件 Then 所有测试应该通过 And 没有数据不一致的警告

AC 8: 代码审查通过

Given 统计模块代码 When 进行代码审查 Then 应通过所有代码审查检查 And 不应存在 HIGH 或 MEDIUM 优先级的问题

任务

任务 0: 代码审查 - 统计口径一致性

  • 审查 statistics.service.ts 所有 8 个统计方法
  • 确认所有方法使用 order_person.work_status = 'working'
  • 确认没有残留的 disabled_person.jobStatus = 1 引用
  • 检查查询逻辑正确性

任务 1: 数据一致性验证 - API 层面

  • 调用所有统计 API 获取返回数据
  • 验证各 API 返回的总人数一致
  • 验证与首页 /company/overview API 在职人数一致
  • 记录任何不一致的情况

任务 2: 数据一致性验证 - UI 层面

  • 使用 Playwright MCP 访问企业小程序数据统计页
  • 验证各分布图总人数一致
  • 验证与首页仪表板在职人数一致
  • 截图记录验证结果

任务 3: 单元测试验证

  • 运行统计模块所有单元测试
  • 验证所有测试通过
  • 检查测试覆盖率
  • 修复任何测试失败

任务 4: E2E 测试验证

  • 运行数据统计页 E2E 测试套件
  • 验证所有测试通过
  • 检查测试日志中是否有数据不一致警告
  • 修复任何测试失败

任务 5: 边界情况测试

  • 测试空数据场景(企业无在职人员)
  • 测试单条数据场景(企业只有 1 个在职人员)
  • 测试大量数据场景(企业有大量在职人员)
  • 验证边界情况下数据一致性

任务 6: 性能验证

  • 检查各统计 API 响应时间
  • 对比修复前后的性能差异
  • 确认没有性能退化

任务 7: 文档更新

  • 更新 API 文档(如需要)
  • 更新统计方法注释
  • 记录数据口径变更(如需要)

任务 8: 创建验证报告

  • 汇总所有验证结果
  • 记录发现的问题和解决方案
  • 确认所有验收标准通过

Dev Notes

相关文件

  • 验证文件: allin-packages/statistics-module/src/services/statistics.service.ts
  • 测试文件: allin-packages/statistics-module/test/statistics.service.spec.ts
  • E2E 测试: web/tests/e2e/mini-enterprise/statistics-page.spec.ts

统计方法清单

方法名 API 路由 说明 修复状态
getEmploymentCount /statistics/employment-count 在职人数统计 ✅ Story 13.23
getDisabilityTypeDistribution /statistics/disability-type-distribution 残疾类型分布 ⏳ Story 13.24
getGenderDistribution /statistics/gender-distribution 性别分布 ⏳ Story 13.24
getAgeDistribution /statistics/age-distribution 年龄分布 ⏳ Story 13.24
getHouseholdDistribution /statistics/household-distribution 户籍分布 ⏳ Story 13.24
getSalaryDistribution /statistics/salary-distribution 薪资分布 ⏳ Story 13.24
getJobStatusDistribution /statistics/job-status-distribution 在职状态分布 ⏳ Story 13.25
getEmploymentRate /statistics/employment-rate 在职率统计 ⏳ Story 13.24
getAverageSalary /statistics/average-salary 平均薪资统计 ✅ 无需修复

数据一致性检查清单

API 层面验证

  • /statistics/employment-count 返回的 count
  • /statistics/disability-type-distribution 返回的 total
  • /statistics/gender-distribution 返回的 total
  • /statistics/age-distribution 返回的 total
  • /statistics/household-distribution 返回的 total
  • /statistics/salary-distribution 返回的 total
  • /statistics/job-status-distribution 返回的 total
  • /company/overview 返回的在职人数

所有以上数值应该相等。

UI 层面验证

使用 Playwright MCP 验证:

  • 首页仪表板"在职人数"卡片
  • 数据统计页"残疾类型分布图"总人数
  • 数据统计页"性别分布图"总人数
  • 数据统计页"年龄分布图"总人数
  • 数据统计页"户籍分布图"总人数
  • 数据统计页"薪资分布图"总人数
  • 数据统计页"在职状态分布图"总人数

验证命令

单元测试

cd allin-packages/statistics-module
pnpm test

E2E 测试

cd web
pnpm test:e2e:chromium statistics-page

Playwright MCP 手动验证

  1. 登录企业小程序
  2. 访问首页仪表板,记录"在职人数"
  3. 访问数据统计页,查看各分布图总人数
  4. 验证所有数值一致

验证报告模板

# 统计模块数据一致性验证报告

## 验证日期
2026-01-XX

## 验证范围
- 统计方法: 8 个
- API 端点: 8 个
- UI 图表: 7 个

## 验证结果

### 代码审查
- [ ] 所有方法使用统一的统计口径
- [ ] 没有残留的旧代码引用
- [ ] 查询逻辑正确

### API 数据一致性
| API | Total/Count | 与首页一致 |
|-----|-------------|------------|
| employment-count | X | ✅/❌ |
| disability-type-distribution | X | ✅/❌ |
| ... | ... | ... |

### UI 数据一致性
| 图表 | Total | 与首页一致 |
|------|-------|------------|
| 残疾类型分布 | X | ✅/❌ |
| 性别分布 | X | ✅/❌ |
| ... | ... | ... |

### 测试结果
- 单元测试: X/X 通过
- E2E 测试: X/X 通过

### 发现的问题
1. ...
2. ...

### 结论
✅ 所有验证通过 / ⚠️ 存在问题需要修复

References

相关文档

相关代码

  • allin-packages/statistics-module/src/services/statistics.service.ts - 统计服务实现
  • allin-packages/statistics-module/src/routes/statistics.routes.ts - 统计 API 路由
  • allin-packages/mini-enterprise-module/src/pages/statistics.tsx - 前端统计页面

Dev Agent Record

Agent Model Used

Claude (d8d-model)

Debug Log References

N/A

Completion Notes List

  • Story 创建于 2026-01-18
  • 依赖于 Story 13.24 和 13.25
  • 目标是全面验证数据一致性

File List

相关文件:

  • allin-packages/statistics-module/src/services/statistics.service.ts (代码审查)
  • allin-packages/statistics-module/test/statistics.service.spec.ts (单元测试)
  • web/tests/e2e/mini-enterprise/statistics-page.spec.ts (E2E 测试)

Change Log

  • 2026-01-18: 创建 Story,全面验证统计模块数据一致性