|
|
@@ -0,0 +1,310 @@
|
|
|
+# 报销系统数据模型设计(V1)
|
|
|
+
|
|
|
+## 1. 设计范围
|
|
|
+
|
|
|
+- 严格对应已确认需求:
|
|
|
+ - 费用项目管理(一级/二级)
|
|
|
+ - 公共工作流配置(备用金、报销)
|
|
|
+ - 备用金申请/审批/发放
|
|
|
+ - 报销申请/审批/发放或冲抵备用金
|
|
|
+ - 申请人/审批人/总经理查询视图
|
|
|
+- 表名前缀统一为 `bx_`
|
|
|
+- 字段规范尽量沿用现有 CRM(创建人、创建时间、更新人、更新时间、删除标记、租户等)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 2. 核心表清单
|
|
|
+
|
|
|
+1. `bx_expense_category`:费用项目(支持一级/二级)
|
|
|
+2. `bx_workflow_def`:工作流定义(业务维度)
|
|
|
+3. `bx_workflow_node`:工作流节点(顺序审批)
|
|
|
+4. `bx_advance_request`:备用金申请单
|
|
|
+5. `bx_reimburse_request`:报销申请单
|
|
|
+6. `bx_approval_record`:审批记录(两类单据共用)
|
|
|
+7. `bx_payment_record`:发放/支付记录(两类单据共用)
|
|
|
+8. `bx_offset_record`:报销冲抵备用金关联记录
|
|
|
+9. `bx_file_ref`:附件关联表(两类单据及支付截图)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3. 表结构设计
|
|
|
+
|
|
|
+## 3.1 费用项目:`bx_expense_category`
|
|
|
+
|
|
|
+用途:维护一级/二级费用项目树。
|
|
|
+
|
|
|
+关键字段:
|
|
|
+- `id` bigint PK
|
|
|
+- `tenant_id` varchar(20)
|
|
|
+- `parent_id` bigint(0 表示一级)
|
|
|
+- `category_code` varchar(64)
|
|
|
+- `category_name` varchar(128)
|
|
|
+- `level_no` tinyint(1/2)
|
|
|
+- `status` char(1)(0启用 1停用)
|
|
|
+- `sort_no` int
|
|
|
+- `remark` varchar(500)
|
|
|
+- `del_flag` char(1)
|
|
|
+- `create_by` bigint
|
|
|
+- `create_time` datetime(3)
|
|
|
+- `update_by` bigint
|
|
|
+- `update_time` datetime(3)
|
|
|
+
|
|
|
+索引建议:
|
|
|
+- `idx_bx_exp_cat_parent(parent_id)`
|
|
|
+- `uk_bx_exp_cat_code_tenant(tenant_id, category_code)`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3.2 工作流定义:`bx_workflow_def`
|
|
|
+
|
|
|
+用途:配置“备用金/报销”两类业务的审批流程主信息。
|
|
|
+
|
|
|
+关键字段:
|
|
|
+- `id` bigint PK
|
|
|
+- `tenant_id` varchar(20)
|
|
|
+- `biz_type` varchar(32)(`advance` / `reimburse`)
|
|
|
+- `flow_name` varchar(128)
|
|
|
+- `status` char(1)(0启用 1停用)
|
|
|
+- `version_no` int
|
|
|
+- `remark` varchar(500)
|
|
|
+- `del_flag` char(1)
|
|
|
+- `create_by` bigint
|
|
|
+- `create_time` datetime(3)
|
|
|
+- `update_by` bigint
|
|
|
+- `update_time` datetime(3)
|
|
|
+
|
|
|
+约束建议:
|
|
|
+- 同一租户同一业务仅允许一个启用版本(逻辑控制)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3.3 工作流节点:`bx_workflow_node`
|
|
|
+
|
|
|
+用途:顺序审批节点定义,支持节点选人。
|
|
|
+
|
|
|
+关键字段:
|
|
|
+- `id` bigint PK
|
|
|
+- `tenant_id` varchar(20)
|
|
|
+- `flow_def_id` bigint FK -> `bx_workflow_def.id`
|
|
|
+- `node_no` int(顺序号)
|
|
|
+- `node_name` varchar(128)
|
|
|
+- `approver_user_id` bigint(固定审批人)
|
|
|
+- `required_flag` char(1)(默认1)
|
|
|
+- `remark` varchar(500)
|
|
|
+- `del_flag` char(1)
|
|
|
+- `create_by` bigint
|
|
|
+- `create_time` datetime(3)
|
|
|
+- `update_by` bigint
|
|
|
+- `update_time` datetime(3)
|
|
|
+
|
|
|
+索引建议:
|
|
|
+- `idx_bx_flow_node_def(flow_def_id, node_no)`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3.4 备用金申请单:`bx_advance_request`
|
|
|
+
|
|
|
+用途:员工发起备用金申请,审批通过后进入发放。
|
|
|
+
|
|
|
+关键字段:
|
|
|
+- `id` bigint PK
|
|
|
+- `tenant_id` varchar(20)
|
|
|
+- `request_no` varchar(64)
|
|
|
+- `applicant_user_id` bigint
|
|
|
+- `dept_id` bigint
|
|
|
+- `amount` decimal(16,2)
|
|
|
+- `reason` varchar(500)
|
|
|
+- `purpose` varchar(500)
|
|
|
+- `status` varchar(32)
|
|
|
+ - `draft` / `submitted` / `approving` / `approved` / `rejected` / `paid`
|
|
|
+- `current_node_no` int
|
|
|
+- `current_approver_user_id` bigint
|
|
|
+- `paid_flag` char(1)(0未发放 1已发放)
|
|
|
+- `paid_time` datetime(3)
|
|
|
+- `remark` varchar(500)
|
|
|
+- `del_flag` char(1)
|
|
|
+- `create_by` bigint
|
|
|
+- `create_time` datetime(3)
|
|
|
+- `update_by` bigint
|
|
|
+- `update_time` datetime(3)
|
|
|
+
|
|
|
+索引建议:
|
|
|
+- `uk_bx_adv_req_no(request_no)`
|
|
|
+- `idx_bx_adv_req_applicant(applicant_user_id, create_time)`
|
|
|
+- `idx_bx_adv_req_status(status, current_approver_user_id)`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3.5 报销申请单:`bx_reimburse_request`
|
|
|
+
|
|
|
+用途:员工提交报销单,审批通过后可“已发放”或“冲抵备用金”。
|
|
|
+
|
|
|
+关键字段:
|
|
|
+- `id` bigint PK
|
|
|
+- `tenant_id` varchar(20)
|
|
|
+- `request_no` varchar(64)
|
|
|
+- `applicant_user_id` bigint
|
|
|
+- `dept_id` bigint
|
|
|
+- `expense_category_id` bigint FK -> `bx_expense_category.id`(二级项目)
|
|
|
+- `amount` decimal(16,2)
|
|
|
+- `invoice_amount` decimal(16,2)
|
|
|
+- `description` varchar(500)
|
|
|
+- `status` varchar(32)
|
|
|
+ - `draft` / `submitted` / `approving` / `approved` / `rejected` / `paid` / `offset_done`
|
|
|
+- `current_node_no` int
|
|
|
+- `current_approver_user_id` bigint
|
|
|
+- `settle_type` varchar(32)(`pay` / `offset`)
|
|
|
+- `settled_flag` char(1)(0未处理 1已处理)
|
|
|
+- `settled_time` datetime(3)
|
|
|
+- `remark` varchar(500)
|
|
|
+- `del_flag` char(1)
|
|
|
+- `create_by` bigint
|
|
|
+- `create_time` datetime(3)
|
|
|
+- `update_by` bigint
|
|
|
+- `update_time` datetime(3)
|
|
|
+
|
|
|
+索引建议:
|
|
|
+- `uk_bx_reim_req_no(request_no)`
|
|
|
+- `idx_bx_reim_req_applicant(applicant_user_id, create_time)`
|
|
|
+- `idx_bx_reim_req_status(status, current_approver_user_id)`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3.6 审批记录:`bx_approval_record`
|
|
|
+
|
|
|
+用途:记录每个单据在每个节点的审批动作。
|
|
|
+
|
|
|
+关键字段:
|
|
|
+- `id` bigint PK
|
|
|
+- `tenant_id` varchar(20)
|
|
|
+- `biz_type` varchar(32)(`advance` / `reimburse`)
|
|
|
+- `biz_id` bigint(对应申请单ID)
|
|
|
+- `flow_def_id` bigint
|
|
|
+- `node_no` int
|
|
|
+- `node_name` varchar(128)
|
|
|
+- `approver_user_id` bigint
|
|
|
+- `action` varchar(32)(`submit` / `approve` / `reject`)
|
|
|
+- `action_time` datetime(3)
|
|
|
+- `opinion` varchar(500)
|
|
|
+- `create_by` bigint
|
|
|
+- `create_time` datetime(3)
|
|
|
+
|
|
|
+索引建议:
|
|
|
+- `idx_bx_appr_biz(biz_type, biz_id, node_no)`
|
|
|
+- `idx_bx_appr_todo(approver_user_id, action_time)`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3.7 发放记录:`bx_payment_record`
|
|
|
+
|
|
|
+用途:记录备用金发放与报销支付动作及截图。
|
|
|
+
|
|
|
+关键字段:
|
|
|
+- `id` bigint PK
|
|
|
+- `tenant_id` varchar(20)
|
|
|
+- `biz_type` varchar(32)(`advance` / `reimburse`)
|
|
|
+- `biz_id` bigint
|
|
|
+- `pay_amount` decimal(16,2)
|
|
|
+- `operator_user_id` bigint
|
|
|
+- `pay_time` datetime(3)
|
|
|
+- `voucher_file_id` bigint(发放/支付截图文件ID)
|
|
|
+- `remark` varchar(500)
|
|
|
+- `create_by` bigint
|
|
|
+- `create_time` datetime(3)
|
|
|
+
|
|
|
+索引建议:
|
|
|
+- `idx_bx_pay_biz(biz_type, biz_id)`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3.8 冲抵记录:`bx_offset_record`
|
|
|
+
|
|
|
+用途:记录“报销单冲抵备用金”的关联与金额。
|
|
|
+
|
|
|
+关键字段:
|
|
|
+- `id` bigint PK
|
|
|
+- `tenant_id` varchar(20)
|
|
|
+- `reimburse_id` bigint FK -> `bx_reimburse_request.id`
|
|
|
+- `advance_id` bigint FK -> `bx_advance_request.id`
|
|
|
+- `offset_amount` decimal(16,2)
|
|
|
+- `operator_user_id` bigint
|
|
|
+- `offset_time` datetime(3)
|
|
|
+- `remark` varchar(500)
|
|
|
+- `create_by` bigint
|
|
|
+- `create_time` datetime(3)
|
|
|
+
|
|
|
+索引建议:
|
|
|
+- `idx_bx_offset_reim(reimburse_id)`
|
|
|
+- `idx_bx_offset_adv(advance_id)`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3.9 附件关联:`bx_file_ref`
|
|
|
+
|
|
|
+用途:统一管理申请单附件、发票、发放截图等关联关系。
|
|
|
+
|
|
|
+关键字段:
|
|
|
+- `id` bigint PK
|
|
|
+- `tenant_id` varchar(20)
|
|
|
+- `biz_type` varchar(32)(`advance` / `reimburse` / `payment`)
|
|
|
+- `biz_id` bigint
|
|
|
+- `file_id` bigint(关联现有文件存储表主键)
|
|
|
+- `file_role` varchar(32)(`attachment` / `invoice` / `payment_voucher`)
|
|
|
+- `create_by` bigint
|
|
|
+- `create_time` datetime(3)
|
|
|
+
|
|
|
+索引建议:
|
|
|
+- `idx_bx_file_ref_biz(biz_type, biz_id)`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 4. 状态流转(最小闭环)
|
|
|
+
|
|
|
+## 4.1 备用金
|
|
|
+
|
|
|
+- 草稿 `draft`
|
|
|
+- 提交 `submitted`
|
|
|
+- 审批中 `approving`
|
|
|
+- 审批通过 `approved` / 驳回 `rejected`
|
|
|
+- 发放后 `paid`
|
|
|
+
|
|
|
+## 4.2 报销
|
|
|
+
|
|
|
+- 草稿 `draft`
|
|
|
+- 提交 `submitted`
|
|
|
+- 审批中 `approving`
|
|
|
+- 审批通过 `approved` / 驳回 `rejected`
|
|
|
+- 结算为支付 `paid` 或 冲抵完成 `offset_done`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 5. 关键关系说明
|
|
|
+
|
|
|
+- `bx_workflow_def(1) -> bx_workflow_node(N)`
|
|
|
+- `bx_advance_request(1) -> bx_approval_record(N)`(`biz_type=advance`)
|
|
|
+- `bx_reimburse_request(1) -> bx_approval_record(N)`(`biz_type=reimburse`)
|
|
|
+- `bx_advance_request(1) -> bx_payment_record(N)`(`biz_type=advance`)
|
|
|
+- `bx_reimburse_request(1) -> bx_payment_record(N)`(`biz_type=reimburse`)
|
|
|
+- `bx_reimburse_request(1) -> bx_offset_record(N)`
|
|
|
+- `bx_advance_request(1) -> bx_offset_record(N)`
|
|
|
+- 两类申请单均可通过 `bx_file_ref` 关联多附件
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 6. 统计口径(按现需求)
|
|
|
+
|
|
|
+- 备用金统计:
|
|
|
+ - 申请总额、审批通过总额、已发放总额
|
|
|
+ - 被冲抵总额(来自 `bx_offset_record`)
|
|
|
+ - 剩余金额 = 已发放总额 - 被冲抵总额
|
|
|
+- 报销统计:
|
|
|
+ - 申请总额、审批通过总额
|
|
|
+ - 已支付总额、冲抵总额
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 7. 本稿边界
|
|
|
+
|
|
|
+- 不包含会签、条件分支、抄送等复杂流程模型。
|
|
|
+- 不包含移动端、消息中心、预算控制等扩展能力。
|
|
|
+- 仅服务当前确认需求与首期研发落地。
|