- 重构 finance_dashboard 口径计算,新增模拟公司画像数据生成与筛选 - 引入 expense_claim_status_registry 统一报销状态流转 - 完善报销草稿流程、Item Sync 与本体解析器 - 优化总览页趋势图、分页组件与请求进度步骤 - 增强报销申请快速预览、本体工具与详情展示 - 新增半年报销模拟数据种子脚本与状态审计工具 - 补充财务看板、报销状态注册与模拟数据测试覆盖
100 lines
3.9 KiB
Markdown
100 lines
3.9 KiB
Markdown
# 数据库状态字段审查
|
||
|
||
## 审查范围
|
||
|
||
- 容器:`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`。
|
||
- 待开发:如确认要数字状态码,新增状态字典/状态码迁移方案。
|