expense模块数据模型关系.md 8.2 KB

因公付款费用模块数据模型关系

一、模块概述

因公付款服务(Expense)包含三个核心子模块:

模块 中文名称 说明
Institution 费控制度 企业制定的费用控制规则主体
Rule 使用规则 控制每笔交易的限额、时段等约束
Quota 额度管理 给员工发放的预算额度

二、模型关系图

Enterprise (企业)
    │
    ├── Institution (费控制度) ──────────────────────────┐
    │       │                                            │
    │       ├── 1:N ──→ Rule (使用规则)                   │
    │       │                                            │
    │       └── 1:N ──→ Quota (额度) ────────────────────┤
    │                                                   │
    └── Employee (员工) ──────────────────────────────────┘
            │
            └── 1:N ──→ Quota (额度)

三、详细关系说明

3.1 Institution (费控制度)

定位:费控系统的核心,是制定规则和发放额度的基础。

字段 类型 说明
institution_id string 制度唯一标识
enterprise_id string 所属企业ID
name string 制度名称
expense_type enum 费用类型(通用/餐饮/交通/酒店/娱乐/办公)
status enum 状态(已创建/已生效/已失效)
effective string 是否启用(1启用/0停用)
effective_start_date datetime 生效开始时间
effective_end_date datetime 生效结束时间
consult_mode enum 费控咨询模式(0支付宝内部/1外部服务商)

层级关系

  • 一个企业可以创建多个费控制度
  • 一个制度属于一个企业

3.2 Rule (使用规则)

定位:规定某类交易的具体约束条件,如单笔限额、日限额、月限额、使用时段等。

字段 类型 说明
rule_id string 规则唯一标识
institution_id string 所属制度ID
name string 规则名称
max_amount decimal 单笔最大限额
min_amount decimal 单笔最小限额
max_day_amount decimal 日限额
max_month_amount decimal 月限额
valid_from datetime 有效期开始
valid_to datetime 有效期结束
merchant_pid string 限定商户PID
week_days array 可用星期(1-7周一至周日)
time_ranges array 可用时间段

层级关系

  • 一个制度可以创建多条使用规则
  • 一条规则从属于一个制度

3.3 Quota (额度管理)

定位:给员工发放的预算额度,记录额度使用情况。

字段 类型 说明
quota_id string 额度唯一标识
employee_id string 员工ID
institution_id string 所属制度ID
enterprise_id string 所属企业ID
target_type enum 额度维度(INSTITUTION制度维度/EXPENSE_TYPE费用类型维度)
target_id string 维度目标ID
quota_type enum 额度类型(CAP余额/COUPON点券/COUNT次卡)
total_amount decimal 总额度
available_amount decimal 可用额度
frozen_amount decimal 冻结额度
status enum 状态(正常/冻结/已用完/已过期)
valid_from datetime 有效期开始
valid_to datetime 有效期结束
share_mode enum 转增模式(0不可转增/1可转增)

层级关系

  • 一个员工可以拥有多个额度
  • 一个制度可以包含多个额度
  • 一条额度从属于一个员工和一个制度

四、模块关联矩阵

关联 来源 → 目标 关系类型 说明
Enterprise → Institution 1:N 一个企业可拥有多个制度 通过 enterprise_id 关联
Institution → Rule 1:N 一个制度可有多个规则 通过 institution_id 关联
Institution → Quota 1:N 一个制度可发放多个额度 通过 institution_id 关联
Employee → Quota 1:N 一个员工可拥有多个额度 通过 employee_id 关联
Quota → Institution N:1 多个额度可属于同一制度 通过 institution_id 关联

五、业务流程

5.1 创建费控制度流程

1. 管理员在企业下创建费控制度
   └── Institution (状态: INSTITUTION_CREATE)

2. 配置制度的使用规则
   └── Rule (关联 institution_id)

3. 给员工发放额度
   └── Quota (关联 employee_id + institution_id)

4. 制度生效
   └── Institution (状态: INSTITUTION_EFFECTIVE)

5.2 员工使用额度流程

1. 员工发起支付请求
2. 系统校验:
   ├── 校验员工额度是否充足 (Quota)
   ├── 校验交易是否符合规则约束 (Rule)
   │   ├── 单笔限额
   │   ├── 日限额
   │   ├── 月限额
   │   ├── 时间段限制
   │   ├── 星期限制
   │   └── 商户限制
   └── 校验制度是否有效 (Institution)
3. 支付成功 → 扣减可用额度 (Quota.available_amount)

六、前端页面关联

6.1 页面跳转关系

企业列表 (Enterprise)
    │
    ├── [员工管理] ──→ 员工列表 (Employee)
    │                    │
    │                    └── [额度管理] ──→ 额度列表 (Quota)
    │
    └── [费控制度] ──→ 制度列表 (Institution)
                          │
                          ├── [使用规则] ──→ 规则列表 (Rule)
                          │
                          └── [适用范围] ──→ 成员管理弹窗

6.2 URL 参数传递

源页面 操作 目标页面 参数
企业列表 点击"费控制度" 制度列表 enterprise_id
制度列表 点击"使用规则" 规则列表 institution_id
员工列表 点击"额度管理" 额度列表 employee_id

七、枚举值汇总

Institution 枚举

枚举类 中文含义
expense_type GENERAL 通用
DINING 餐饮
TRAFFIC 交通
HOTEL 酒店
ENTERTAINMENT 娱乐
OFFICE 办公
status INSTITUTION_CREATE 已创建
INSTITUTION_EFFECTIVE 已生效
INSTITUTION_INVALID 已失效
consult_mode 0 支付宝内部计算
1 咨询外部服务商

Rule 枚举

枚举类 中文含义
week_days 1-7 周一至周日

Quota 枚举

枚举类 中文含义
target_type INSTITUTION 制度维度
EXPENSE_TYPE 费用类型维度
quota_type CAP 余额
COUPON 点券
COUNT 次卡
status QUOTA_ACTIVE 正常
QUOTA_FROZEN 冻结
QUOTA_EXHAUSTED 已用完
QUOTA_EXPIRED 已过期
share_mode 0 不可转增
1 可转增

八、数据示例

Institution 示例

{
  "institution_id": "INST20240001",
  "enterprise_id": "ENT20240001",
  "name": "2024年度差旅费控制度",
  "expense_type": "TRAFFIC",
  "status": "INSTITUTION_EFFECTIVE",
  "effective": "1",
  "effective_start_date": "2024-01-01 00:00:00",
  "effective_end_date": "2024-12-31 23:59:59"
}

Rule 示例

{
  "rule_id": "RULE20240001",
  "institution_id": "INST20240001",
  "name": "机票预订规则",
  "max_amount": 5000.00,
  "min_amount": 100.00,
  "max_day_amount": 10000.00,
  "max_month_amount": 50000.00,
  "week_days": [1, 2, 3, 4, 5],
  "time_ranges": [{"start_time": "08:00:00", "end_time": "20:00:00"}]
}

Quota 示例

{
  "quota_id": "QUOTA20240001",
  "employee_id": "EMP20240001",
  "institution_id": "INST20240001",
  "enterprise_id": "ENT20240001",
  "target_type": "INSTITUTION",
  "quota_type": "CAP",
  "total_amount": 100000.00,
  "available_amount": 85000.00,
  "frozen_amount": 5000.00,
  "status": "QUOTA_ACTIVE",
  "valid_from": "2024-01-01 00:00:00",
  "valid_to": "2024-12-31 23:59:59"
}