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

3.9 KiB
Raw Blame History

数据库状态字段审查

审查范围

  • 容器:x-financial-main
  • 数据库:当前运行时 PostgreSQL
  • 字段范围:所有 statusstageapprovalstate 相关列
  • 审查方式:只读查询 information_schema 与各表状态值分布

总体结论

  • 当前数据库没有 status_codestate_codestage_code 这类数字状态码字段。
  • 所有匹配到的状态字段类型都是 character varying
  • 非业务运行态表,例如 agent 运行、工具调用、预算池、风险观察,主要使用英文机器码。
  • 报销主表 expense_claims 是当前最需要修复的表:status 使用英文码,approval_stage 同时混入英文码和中文节点名。

报销主表现状

expense_claims 当前共 498 条。

按单据类型拆分:

  • 申请类单据2 条,阶段为 审批完成直属领导审批
  • 普通报销单1 条,阶段为 待提交
  • 半年模拟报销单495 条,主要问题都集中在这里。

expense_claims.status 当前值:

  • paid212
  • approved98
  • pending_payment67
  • finance_review43
  • submitted41
  • returned17
  • rejected13
  • draft7

expense_claims.approval_stage 当前值:

  • payment279
  • completed97
  • finance_review43
  • manager_review40
  • supplement17
  • rejected13
  • draft6
  • 审批完成1
  • 待提交1
  • 直属领导审批1

问题判断

现在不是单纯中文显示问题,而是字段职责混乱:

  • status 被当作流程机器状态使用。
  • approval_stage 既被当作流程节点,也被历史模拟数据写成英文状态码。
  • 单据中心和审批权限逻辑依赖 submitted + 中文审批阶段
  • 旧模拟数据中的 finance_review/manager_review/payment/completed 会导致审核、归档、报销单分类偏差。

建议契约

短期先采用当前代码最接近的契约:

  • status:稳定机器码,继续使用英文枚举。
  • approval_stage:当前流程节点,统一使用中文节点名。
  • 前端和接口展示层:只展示中文标签,不直接暴露机器码。

中期如要数字状态码,需要单独迁移:

  • 增加 status_codeapproval_stage_code 或独立状态字典表。
  • 保留现有字符串字段作为兼容层,避免一次性改动所有查询、权限、看板和智能体逻辑。
  • 完成迁移后再逐步让业务代码改读数字码。

报销主表修复映射

建议先只修 expense_claims 的模拟数据和历史异常阶段:

  • status=finance_reviewstatus=submittedapproval_stage=财务审批
  • approval_stage=manager_review直属领导审批
  • approval_stage=budget_review预算管理者审批
  • approval_stage=finance_review财务审批
  • status=pending_paymentapproval_stage=待付款
  • status=paidapproval_stage=已付款
  • status=approved 且为报销单 → approval_stage=归档入账
  • status=approved 且为申请单 → approval_stage=审批完成
  • status=returnedapproval_stage=待补充
  • status=rejectedapproval_stage=已驳回
  • status=draftapproval_stage=待提交

后续动作

  • 已完成:只读审查数据库状态字段。
  • 已完成:模拟数据修复脚本支持 dry-run 和中文阶段归一化。
  • 已完成:新增报销状态注册表,统一状态码、标签、阶段别名与历史值归一化。
  • 已完成:新增只读审计脚本 audit_expense_claim_statuses.py,用于修复前后核对状态一致性。
  • 已验证:当前 498 张单据中 495 张模拟报销单需要归一化,集中在 paymentcompletedfinance_reviewmanager_review 等历史阶段值。
  • 待确认:执行模拟数据修复脚本 --apply --refresh-profiles
  • 待确认:执行 mock 附件脚本 --apply
  • 待开发:如确认要数字状态码,新增状态字典/状态码迁移方案。