# 变更审计记录：补录 cfg_skill_type 缺失的 3 条课程类型配置

| 字段 | 值 |
|------|-----|
| 日期 | 2026-03-24 10:52:42 |
| Prompt-ID | P20260324-102813 |
| Session-ID | fa35450b |
| Session 路径 | docs/audit/session_logs/2026-03/24/44_fa35450b_102358 |

## 操作摘要

用户反馈千千助教绑定的客户"梅"被标记为高优先召回（WBI display_score=9.42），但实际 5 天前还到店消费。排查发现 `dws.cfg_skill_type` 配置表缺失 3 条飞球系统原始课程类型的 skill_id，导致 WBI 到店判定（settle_type=3 + BONUS EXISTS 检查）中 JOIN 失败，这些到店记录被漏掉。修复方式为 INSERT 3 条缺失记录，已在测试库验证通过。

## 变更原因

`dwd.dwd_assistant_service_log` 中存在 5525 条记录引用了不在 `cfg_skill_type` 中的 skill_id（2790683529513797、2790683529513798、3039912271463941），导致：
- WBI/NCI 到店判定漏掉这些到店记录（settle_type=3 的商城订单需 BONUS EXISTS 检查，JOIN 失败则判定为"未到店"）
- 会员"梅"实际 5 天前到店，但 WBI 显示 16 天未到店，display_score 虚高至 9.42
- 共影响 113 名会员、3766 条服务记录

## 影响范围

### 数据库（ETL 库 `dws.cfg_skill_type`）
新增 3 条记录：

| skill_id | skill_name | course_type_code | 说明 |
|----------|-----------|-----------------|------|
| 2790683529513797 | 基础课 | BASE | 飞球系统原始课程类型 |
| 2790683529513798 | 附加课 | BONUS | 飞球系统原始课程类型 |
| 3039912271463941 | 包厢课 | BASE | 飞球系统原始课程类型 |

### 下游影响
| 消费方 | 影响 |
|--------|------|
| WBI/NCI 到店判定 | 修复后 settle_type=3 订单可正确匹配 BONUS 服务记录 |
| 助教服务统计 | 修复后这 3 种课程类型的服务记录被正确统计 |
| 助教工资计算 | 基础课/附加课计价逻辑可正确区分 |
| 关系指数（RS/MS/ML） | 到店记录补全后指数计算更准确 |

### 需要后续操作
- ⚠️ 需要重跑 WBI/NCI 指数任务以更新 display_score（113 名会员受影响）

## 文件变更清单

| 文件 | 变更类型 | 说明 |
|------|----------|------|
| `db/etl_feiqiu/migrations/2026-03-24_add_missing_cfg_skill_type.sql` | 新增 | 迁移脚本：INSERT 3 条记录到 dws.cfg_skill_type |
| `apps/etl/connectors/feiqiu/docs/database/DWS/config/BD_manual_cfg_skill_type.md` | 新增 | BD 手册：cfg_skill_type 表结构与业务口径文档 |


## DDL/迁移检查

- 迁移脚本：`db/etl_feiqiu/migrations/2026-03-24_add_missing_cfg_skill_type.sql`
- 执行状态：✅ 已在测试库 `test_etl_feiqiu` 执行并验证通过
- ⚠️ DDL 基线待合并（`compliance.has_ddl_baseline = false`）

## 回滚方式

```sql
DELETE FROM dws.cfg_skill_type
WHERE skill_id IN (2790683529513797, 2790683529513798, 3039912271463941);
```

## 验证 SQL

```sql
-- 1. 确认 3 条记录已插入
SELECT skill_id, skill_name, course_type_code, is_active
FROM dws.cfg_skill_type
WHERE skill_id IN (2790683529513797, 2790683529513798, 3039912271463941);
-- 预期：3 行

-- 2. 确认全表完整性（应返回 6 行，无 NULL 的 course_type_code）
SELECT skill_id, skill_name, course_type_code, is_active
FROM dws.cfg_skill_type ORDER BY skill_id;

-- 3. 验证受影响会员数
SELECT COUNT(DISTINCT asl.tenant_member_id)
FROM dwd.dwd_assistant_service_log asl
JOIN dws.cfg_skill_type st ON asl.skill_id = st.skill_id
WHERE asl.skill_id IN (2790683529513797, 2790683529513798, 3039912271463941)
  AND asl.is_delete = 0;
-- 预期：> 0（实际约 113）
```

## 改动注解

### `db/etl_feiqiu/migrations/2026-03-24_add_missing_cfg_skill_type.sql`
- 变更类型：新增
- 原始原因：`dws.cfg_skill_type` 缺失 3 条飞球系统原始课程类型的 skill_id，导致 WBI 到店判定 JOIN 失败，113 名会员的到店记录被漏掉
- 思路分析：使用 `INSERT ... ON CONFLICT (skill_id) DO NOTHING` 保证幂等性；将 skill_id 2790683529513797（基础课）和 3039912271463941（包厢课）映射为 BASE，2790683529513798（附加课）映射为 BONUS，与现有种子数据的分类逻辑一致
- 修改结果：3 条记录补录后，WBI/NCI 到店判定可正确识别这些课程类型的服务记录，重跑指数任务后 display_score 将回归正常

### `apps/etl/connectors/feiqiu/docs/database/DWS/config/BD_manual_cfg_skill_type.md`
- 变更类型：新增
- 原始原因：cfg_skill_type 表此前无 BD 手册文档，不符合数据库文档规范
- 思路分析：按 BD 手册标准模板编写，包含表信息、字段说明、当前数据快照、业务口径、下游依赖、维护注意事项
- 修改结果：补全了 cfg_skill_type 的完整文档，后续维护者可快速了解该配置表的用途和维护要点
