# 财务看板排行口径与部门人员占比 TODO

## 调研

- [x] 盘点财务看板后端聚合、前端服务、页面布局和测试现状。[CONCEPT: 背景与问题] 证据：已检查 `FinanceDashboardService`、`analytics.js`、`useOverviewView.js`、`OverviewView.vue`、`test_finance_dashboard_service.py`。

## 契约

- [x] 扩展 `department_range` 支持 `本月 / 本季度 / 本年 / 全部`。[CONCEPT: 功能能力] 证据：`FinanceDashboardService._resolve_ranking_scope` 和 `departmentRangeOptions` 已更新。
- [x] 响应体新增 `department_employee_mix`，部门排行新增 `employeeCount`。[CONCEPT: 方案设计] 证据：`FinanceDashboardRead`、`_department_ranking`、`_department_employee_mix` 已更新。

## 后端

- [x] 修改财务看板服务的排行时间范围解析，统一驱动部门排行、个人排行、高额单据和人员占比。[CONCEPT: 方案设计] 证据：`ranking_claims` 同时供四类排行/图表使用。
- [x] 新增部门人员报销占比聚合逻辑。[CONCEPT: 算法与公式] 证据：新增 `_department_employee_mix`，按部门和人员聚合金额并返回饼图数据。
- [x] 更新快照缓存兼容新增字段。[CONCEPT: 接口] 证据：`SNAPSHOT_SCHEMA_VERSION = "finance-dashboard-ranking-v2"` 已加入快照缓存 key。

## 前端

- [x] 更新前端服务归一化和筛选选项。[CONCEPT: 前端] 证据：`analytics.js` 支持 `departmentEmployeeMix`，`metrics.js` 选项为本月/本季度/本年/全部。
- [x] 调整财务看板底部布局，新增部门人员报销占比饼图。[CONCEPT: 前端] 证据：`OverviewView.vue` 的 `top-claim-split` 左侧接入 `DonutChart`。
- [x] 部门排行和个人排行展示人员数、单据数等辅助信息，并占满卡片空间。[CONCEPT: 前端] 证据：`BarChart.vue` 支持 `meta`，排行卡片跨度改为 6 栅格。

## 测试

- [x] 补充后端定向测试，覆盖排行时间口径、人员数和部门人员占比。[CONCEPT: 测试方案] 证据：`test_finance_dashboard_ranking_range_supports_year_and_all_scope` 已新增。
- [x] 补充前端源码测试，覆盖筛选器和新增图表字段。[CONCEPT: 测试方案] 证据：新增 `web/tests/finance-dashboard-ranking.test.mjs`。
- [x] 在 `x-financial-main` 容器内运行后端定向测试，超时不超过 60s。[CONCEPT: 测试方案] 证据：`pytest -q server/tests/test_finance_dashboard_service.py`，4 passed。
- [x] 运行前端定向测试或构建验证。[CONCEPT: 测试方案] 证据：`node web/tests/finance-dashboard-ranking.test.mjs`，3 passed；`npm.cmd --prefix web run build` 通过。

## 验收

- [x] 调用财务看板接口验证 `department_range=全部` 返回新增字段。[CONCEPT: 指标与验收] 证据：接口返回 `has_department_employee_mix=true`、`department_employee_mix_count=6`、部门排行含 `employeeCount=67`。
- [x] 更新本 TODO 的完成证据。[CONCEPT: 指标与验收] 证据：本文件已补充每项完成证据。
- [ ] 提交并推送本次功能改动，避免纳入无关脏工作区变更。[CONCEPT: 风险与开放问题] 阻塞：工作区已有大量未提交改动，且本次相关后端文件依赖未跟踪的财务看板快照/常量文件，直接提交会混入既有改动，单独提交又可能缺依赖。
