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

100 lines
3.9 KiB
Markdown
Raw 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.
# 数据库状态字段审查
## 审查范围
- 容器:`x-financial-main`
- 数据库:当前运行时 PostgreSQL
- 字段范围:所有 `status``stage``approval``state` 相关列
- 审查方式:只读查询 `information_schema` 与各表状态值分布
## 总体结论
- 当前数据库没有 `status_code``state_code``stage_code` 这类数字状态码字段。
- 所有匹配到的状态字段类型都是 `character varying`
- 非业务运行态表,例如 agent 运行、工具调用、预算池、风险观察,主要使用英文机器码。
- 报销主表 `expense_claims` 是当前最需要修复的表:`status` 使用英文码,`approval_stage` 同时混入英文码和中文节点名。
## 报销主表现状
`expense_claims` 当前共 498 条。
按单据类型拆分:
- 申请类单据2 条,阶段为 `审批完成``直属领导审批`
- 普通报销单1 条,阶段为 `待提交`
- 半年模拟报销单495 条,主要问题都集中在这里。
`expense_claims.status` 当前值:
- `paid`212
- `approved`98
- `pending_payment`67
- `finance_review`43
- `submitted`41
- `returned`17
- `rejected`13
- `draft`7
`expense_claims.approval_stage` 当前值:
- `payment`279
- `completed`97
- `finance_review`43
- `manager_review`40
- `supplement`17
- `rejected`13
- `draft`6
- `审批完成`1
- `待提交`1
- `直属领导审批`1
## 问题判断
现在不是单纯中文显示问题,而是字段职责混乱:
- `status` 被当作流程机器状态使用。
- `approval_stage` 既被当作流程节点,也被历史模拟数据写成英文状态码。
- 单据中心和审批权限逻辑依赖 `submitted + 中文审批阶段`
- 旧模拟数据中的 `finance_review/manager_review/payment/completed` 会导致审核、归档、报销单分类偏差。
## 建议契约
短期先采用当前代码最接近的契约:
- `status`:稳定机器码,继续使用英文枚举。
- `approval_stage`:当前流程节点,统一使用中文节点名。
- 前端和接口展示层:只展示中文标签,不直接暴露机器码。
中期如要数字状态码,需要单独迁移:
- 增加 `status_code``approval_stage_code` 或独立状态字典表。
- 保留现有字符串字段作为兼容层,避免一次性改动所有查询、权限、看板和智能体逻辑。
- 完成迁移后再逐步让业务代码改读数字码。
## 报销主表修复映射
建议先只修 `expense_claims` 的模拟数据和历史异常阶段:
- `status=finance_review``status=submitted``approval_stage=财务审批`
- `approval_stage=manager_review``直属领导审批`
- `approval_stage=budget_review``预算管理者审批`
- `approval_stage=finance_review``财务审批`
- `status=pending_payment``approval_stage=待付款`
- `status=paid``approval_stage=已付款`
- `status=approved` 且为报销单 → `approval_stage=归档入账`
- `status=approved` 且为申请单 → `approval_stage=审批完成`
- `status=returned``approval_stage=待补充`
- `status=rejected``approval_stage=已驳回`
- `status=draft``approval_stage=待提交`
## 后续动作
- 已完成:只读审查数据库状态字段。
- 已完成:模拟数据修复脚本支持 dry-run 和中文阶段归一化。
- 已完成:新增报销状态注册表,统一状态码、标签、阶段别名与历史值归一化。
- 已完成:新增只读审计脚本 `audit_expense_claim_statuses.py`,用于修复前后核对状态一致性。
- 已验证:当前 498 张单据中 495 张模拟报销单需要归一化,集中在 `payment``completed``finance_review``manager_review` 等历史阶段值。
- 待确认:执行模拟数据修复脚本 `--apply --refresh-profiles`
- 待确认:执行 mock 附件脚本 `--apply`
- 待开发:如确认要数字状态码,新增状态字典/状态码迁移方案。