Files
X-Financial/document/development/财务看板口径重构与画像模拟/CONCEPT.md
caoxiaozhu 0c74b4ab4a feat: 财务看板口径重构与半年模拟数据及报销状态注册表
- 重构 finance_dashboard 口径计算,新增模拟公司画像数据生成与筛选
- 引入 expense_claim_status_registry 统一报销状态流转
- 完善报销草稿流程、Item Sync 与本体解析器
- 优化总览页趋势图、分页组件与请求进度步骤
- 增强报销申请快速预览、本体工具与详情展示
- 新增半年报销模拟数据种子脚本与状态审计工具
- 补充财务看板、报销状态注册与模拟数据测试覆盖
2026-06-02 16:22:59 +08:00

168 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 财务看板口径重构与画像模拟概念文档
## 功能一句话
把财务看板从“审批过程展示”调整为“财务费用经营分析”,并让半年模拟数据自然形成部门、预算、风险和员工画像。
## 背景与问题
当前财务看板存在三类偏差:
- 费用结构里直接展示 `travel_application` 等技术枚举,业务用户无法理解,且申请类口径不应混入报销费用结构。
- 风险异常分布缺少完整中文映射,`missing_material``budget_pressure` 等风险信号以英文或半翻译方式泄露到页面。
- 趋势图和底部卡片仍围绕审批量、审批时长展开,不符合财务看板的核心诉求。
半年模拟数据也需要服务于看板分析,不能只堆单据。它必须能支撑多部门费用排行、预算消耗、风险分布和员工画像。
## 目标
- 费用结构只展示费用科目中文名称,申请类技术值不裸露。
- 风险异常分布统一中文化,并覆盖预算压力、材料缺失、预算超支等常见信号。
- 趋势图改为每日报销数量和每日报销金额。
- “审批瓶颈”改为财务关注项,展示预算、待付款、材料待补、风险金额等财务指标。
- 部门排行按费用金额统计,而不是只看待处理审批金额。
- 模拟数据在写入后可生成员工行为画像快照,画像与报销单据、预算压力和风险观察一致。
## 非目标
- 不重做财务看板整体视觉框架。
- 不新增一套独立画像算法。
- 不修改生产环境数据;所有批量修复只作用于 `SIM2026``SIM-EXP-2026``SIM-BUD-2026` 等模拟前缀数据。
## 用户与场景
- 财务经理:查看半年费用趋势、部门费用结构、预算执行和风险异常。
- 部门负责人:理解本部门费用消耗和预算压力。
- 审批人:查看员工画像时,能看到基于半年模拟数据形成的费用和流程质量画像。
- 系统演示人员:用 100 人规模的模拟数据演示端到端效果。
## 功能能力
### 费用结构
输入为当前时间范围内有效报销单。
输出为费用科目金额占比:
- 排除草稿、退回、驳回、删除等非有效支出状态。
- `travel_application` 等申请类值不直接展示;若历史数据仍存在,则归一为“差旅费”或从费用结构中排除申请类虚拟项。
- 所有展示名称必须是中文。
### 风险异常分布
输入为风险观察和报销单风险标记。
输出为中文风险类型分布:
- `missing_material`:材料不完整
- `budget_pressure`:预算压力偏高
- `budget_overrun`:预算超支
- `duplicate_invoice`:重复发票
- `split_billing`:拆分报销
- `amount_outlier`:金额异常
未知枚举用“风险观察”兜底,不能把英文下划线文案直接展示给用户。
### 每日报销趋势
趋势图按天返回:
- `claimCount`:每日有效报销单数量
- `claimAmount`:每日有效报销金额
前端使用柱线组合图展示,左轴为单量,右轴为金额。
### 财务关注项
替代原“审批瓶颈”:
- 预算超支:超支预算池数量和金额。
- 预算预警:预算使用率接近上限的池数量。
- 材料待补:材料不完整风险数量。
- 风险金额:当前范围内风险单据金额。
- 待付款:已审批待付款金额。
### 员工画像
模拟数据写入后触发现有 `EmployeeBehaviorProfileService`
- 生成 30、90、180 天画像快照。
- 画像类型沿用费用支出、流程质量、AI 使用和审批行为。
- 不伪造画像结果,只用模拟报销单、审批记录和风险数据驱动算法。
## 方案设计
### 后端
-`FinanceDashboardService` 中新增费用类型与风险信号归一化方法。
-`_trend` 改为统计每日有效报销数量和金额,同时保留旧字段兼容前端灰度。
-`_department_ranking` 改为按有效费用金额统计。
-`_bottlenecks` 的返回语义改为财务关注项,字段名暂保留,降低接口破坏面。
- 模拟数据脚本增加画像刷新入口,调用现有画像服务生成快照。
### 前端
- `TrendChart` 文案改为“报销单量”和“报销金额”。
- `OverviewView` 标题改为:
- 报销数量与金额趋势
- 部门报销排行(费用金额)
- 财务关注项
- 底部列表继续复用现有紧凑卡片样式,不引入新视觉体系。
### 数据
- 部门分布按业务权重分配,避免只有市场部或技术部。
- 近 10 日和本月窗口保证各核心部门都有可见费用。
- 风险样本覆盖材料缺失、预算压力、重复发票、金额异常等类型。
- 预算台账与报销单金额一致,能体现预警和超支。
## 算法与公式
费用金额:
$$
amount_d = \sum_{c \in C_d} claimAmount(c)
$$
其中 \(C_d\) 为某日有效状态报销单集合。
部门费用排行:
$$
deptSpend_i = \sum_{c \in C_i} claimAmount(c)
$$
预算使用率:
$$
usageRate = \frac{reservedAmount + consumedAmount}{totalAmount} \times 100\%
$$
风险金额:
$$
riskAmount = \sum_{c \in C, hasRisk(c)=true} claimAmount(c)
$$
## 测试方案
- 后端单元测试:验证费用类型中文化、风险信号中文化、趋势字段、部门排行和财务关注项。
- 容器接口测试:在 `x-financial-main:/app` 调用 `/api/v1/analytics/finance-dashboard`
- 前端构建:使用项目现有 `npm.cmd` 构建路径。
- 数据脚本 dry-run确认模拟修复仅作用于 `SIM` 前缀数据。
- 画像验证:确认 `employee_behavior_profile_snapshots` 生成模拟员工的快照。
## 指标与验收
- 财务看板接口不再返回 `travel_application``missing material``budget pressure` 等裸英文展示名。
- 趋势字段包含 `claimCount``claimAmount`,前端标题不再出现“审批趋势”。
- 部门排行至少覆盖 6 个核心部门的有效费用金额。
- 财务关注项不再显示审批节点或平均处理时长。
- 半年模拟数据可生成 100 人规模下的员工画像快照。
## 风险与开放问题
- 历史非模拟数据可能仍有 `待补充` 部门,当前方案只保证模拟数据合理,不强行修复历史数据。
- 批量修复模拟数据涉及数据库更新和重建模拟预算台账,执行 `--apply` 前需要用户明确确认。
- 前端浏览器验证若环境不稳定,可降级为接口 JSON、构建和容器内测试证据。