Files
X-Financial/document/development/财务看板口径重构与画像模拟/STATUS_AUDIT.md

100 lines
3.9 KiB
Markdown
Raw Normal View History

# 数据库状态字段审查
## 审查范围
- 容器:`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`
- 待开发:如确认要数字状态码,新增状态字典/状态码迁移方案。