# cfg_bonus_rules 奖金规则配置表

> 生成时间：2026-02-03

## 表信息

| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | cfg_bonus_rules |
| 主键 | rule_id |
| 数据来源 | 手工维护/seed脚本 |
| 说明 | 奖金规则配置（冲刺奖金为历史口径，Top3排名奖金为现行口径） |

## 字段说明

| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | rule_id | SERIAL | NO | PK | 规则ID（自增） |
| 2 | rule_type | VARCHAR(20) | NO | | 规则类型。**枚举值**: SPRINT（冲刺奖金，历史口径）, TOP_RANK（Top排名奖金） |
| 3 | rule_code | VARCHAR(30) | NO | | 规则代码。**枚举值**: TOP_1, TOP_2, TOP_3（SPRINT_*为历史规则） |
| 4 | rule_name | VARCHAR(50) | NO | | 规则名称 |
| 5 | threshold_hours | NUMERIC(10,2) | YES | | 小时数阈值（冲刺奖金用） |
| 6 | rank_position | INTEGER | YES | | 排名位置（Top奖金用） |
| 7 | bonus_amount | NUMERIC(12,2) | NO | | 奖金金额（元） |
| 8 | is_cumulative | BOOLEAN | NO | | 是否可累计（冲刺奖金为FALSE，取最高档） |
| 9 | priority | INTEGER | NO | | 优先级（数字越大优先级越高） |
| 10 | effective_from | DATE | NO | | 生效起始日期（含） |
| 11 | effective_to | DATE | NO | | 生效截止日期（含） |
| 12 | description | TEXT | YES | | 说明 |
| 13 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 14 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |

## 奖金规则示例

### 冲刺奖金（历史口径，至2026-02-28，不累计取最高档）
| 规则代码 | 小时阈值 | 奖金金额 | 优先级 |
|----------|----------|----------|--------|
| SPRINT_190 | 190小时 | 300元 | 1 |
| SPRINT_220 | 220小时 | 800元 | 2 |

### Top3排名奖金（2026-03-01起，独立发放）
| 规则代码 | 排名 | 奖金金额 |
|----------|------|----------|
| TOP_1 | 第1名 | 1000元 |
| TOP_2 | 第2名 | 600元 |
| TOP_3 | 第3名 | 400元 |

## 使用说明

**取值方式**

```sql
-- 获取冲刺奖金（取最高档）
SELECT * FROM dws.cfg_bonus_rules
WHERE rule_type = 'SPRINT'
  AND threshold_hours <= 200  -- 实际小时数
  AND effective_from <= '2026-02-28'
  AND effective_to >= '2026-02-28'
ORDER BY priority DESC
LIMIT 1;

-- 获取Top3排名奖金
SELECT * FROM dws.cfg_bonus_rules
WHERE rule_type = 'TOP_RANK'
  AND rank_position = 1  -- 排名
  AND effective_from <= '2026-03-01'
  AND effective_to >= '2026-03-01';
```

**排名口径说明**
- Top3排名按有效业绩小时数（effective_hours）降序排列
- 如遇并列则都算（如2个第一，则记为2个第一，下一个是第三）
