# cfg_skill_type 技能→课程类型映射表

> 生成时间：2026-02-03

## 表信息

| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | cfg_skill_type |
| 主键 | skill_type_id |
| 数据来源 | 手工维护/seed脚本 |
| 说明 | 将skill_id映射到课程类型（基础课/附加课），避免依赖skill_name文本匹配 |

## 字段说明

| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | skill_type_id | SERIAL | NO | PK | 映射ID（自增） |
| 2 | skill_id | BIGINT | NO | UK | 技能ID（来自dwd_assistant_service_log.skill_id） |
| 3 | skill_name | VARCHAR(50) | YES | | 技能名称（仅用于展示和校验） |
| 4 | course_type_code | VARCHAR(10) | NO | | 课程类型代码。**枚举值**: BASE（基础课）, BONUS（附加课）, ROOM（包厢课） |
| 5 | course_type_name | VARCHAR(20) | NO | | 课程类型名称 |
| 6 | is_active | BOOLEAN | NO | | 是否启用 |
| 7 | description | TEXT | YES | | 说明 |
| 8 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 9 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |

## 技能映射示例

| skill_id | skill_name | 课程类型代码 | 课程类型名称 |
|----------|------------|--------------|--------------|
| 2790683529513797 | 基础课 | BASE | 基础课 |
| 2790683529513798 | 附加课 | BONUS | 附加课 |
| 3039912271463941 | 包厢课 | ROOM | 包厢课 |

## 使用说明

**取值方式**

```sql
-- 将服务记录分类为基础课/附加课
SELECT 
    asl.*,
    COALESCE(st.course_type_code, 'BASE') AS course_type_code,
    COALESCE(st.course_type_name, '基础课') AS course_type_name
FROM dwd.dwd_assistant_service_log asl
LEFT JOIN dws.cfg_skill_type st 
    ON asl.skill_id = st.skill_id
    AND st.is_active = TRUE;

-- 按课程类型汇总小时数
SELECT 
    COALESCE(st.course_type_code, 'BASE') AS course_type,
    SUM(asl.income_seconds) / 3600.0 AS total_hours
FROM dwd.dwd_assistant_service_log asl
LEFT JOIN dws.cfg_skill_type st ON asl.skill_id = st.skill_id
GROUP BY COALESCE(st.course_type_code, 'BASE');
```

**说明**
- 基础课（陪打/PD）: 按等级定价，客户支付98-138元/小时
- 附加课（超休/CX）: 固定客户支付190元/小时
- 包厢课: 单独统计（基础课口径，统一按138元/小时计价）
