因公付款费用模块数据模型关系
一、模块概述
因公付款服务(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"
}