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