- 重构 finance_dashboard 口径计算,新增模拟公司画像数据生成与筛选 - 引入 expense_claim_status_registry 统一报销状态流转 - 完善报销草稿流程、Item Sync 与本体解析器 - 优化总览页趋势图、分页组件与请求进度步骤 - 增强报销申请快速预览、本体工具与详情展示 - 新增半年报销模拟数据种子脚本与状态审计工具 - 补充财务看板、报销状态注册与模拟数据测试覆盖
3.9 KiB
3.9 KiB
数据库状态字段审查
审查范围
- 容器:
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:212approved:98pending_payment:67finance_review:43submitted:41returned:17rejected:13draft:7
expense_claims.approval_stage 当前值:
payment:279completed:97finance_review:43manager_review:40supplement:17rejected:13draft: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。 - 待开发:如确认要数字状态码,新增状态字典/状态码迁移方案。