# 变更审计记录：TASK 3 项目标签计算逻辑 — 文档与配置同步

| 字段 | 值 |
|------|-----|
| 日期 | 2026-03-07 17:02:33 |
| Prompt-ID | P20260307-165212 |
| Session-ID | 36d5ee1e |
| Session 路径 | docs/audit/session_logs/2026-03/07/52_ecd0acde_155859/main_05_36d5ee1e.md |

## 操作摘要

完成 TASK 3（项目标签计算逻辑）的剩余文档和配置同步工作。本次 session 新增 `MemberProjectTagTask`（客户项目标签 ETL 任务），并将其注册到任务注册表和 DWS `__init__.py` 导出列表。前序 session 已创建 `AssistantProjectTagTask`（助教项目标签）及两张目标表的 DDL、BD 手册、维护任务配置和 ETL 文档。

## 风险评估

低风险。本次 session 的实际代码变更仅涉及：
- 新增 1 个 ETL 任务文件（`member_project_tag_task.py`）
- 2 个注册/导出文件的追加（`task_registry.py`、`__init__.py`）
- 不影响现有业务逻辑，不涉及数据库 DDL 执行

## 本次对话文件变更

### 新增文件
- `apps/etl/connectors/feiqiu/tasks/dws/member_project_tag_task.py` — 客户项目标签 ETL 任务

### 修改文件
- `apps/etl/connectors/feiqiu/orchestration/task_registry.py` — 注册 `MemberProjectTagTask`
- `apps/etl/connectors/feiqiu/tasks/dws/__init__.py` — 导出 `MemberProjectTagTask`

## 合规检查

| 检查项 | 状态 |
|--------|------|
| 文档同步 | ✅ `dws_tasks.md` 已包含 DWS_MEMBER_PROJECT_TAG 和 DWS_ASSISTANT_PROJECT_TAG 详细说明 |
| BD 手册 | ✅ 已有 `BD_manual_dws_assistant_project_tag.md` 和 `BD_manual_dws_member_project_tag.md` |
| DDL 基线 | ⚠️ DDL 基线待合并（`etl_feiqiu__dws.sql` 已追加但 `has_ddl_baseline` 标记为 false） |
| 迁移 SQL | ✅ 无新增迁移需验证（`new_migration_sql` 为空） |
| OpenAPI Spec | ✅ 无接口变更 |

## 改动注解

### `apps/etl/connectors/feiqiu/tasks/dws/member_project_tag_task.py`
- 变更类型：新增
- 原始原因：TASK 3 要求为客户维度计算项目标签（BILLIARD/SNOOKER/MAHJONG/KTV），与已有的助教项目标签（`AssistantProjectTagTask`）对称
- 思路分析：继承 `BaseDwsTask`，复用 `TimeWindow` 枚举和 `get_area_category()` 分类逻辑。客户看板仅需 2 个时间窗口（LAST_30_DAYS / LAST_60_DAYS），阈值 25%。数据链路：`dwd_table_fee_log` → JOIN `dim_table` → 按 `category_code` 汇总 → 计算占比 → 写入 `dws_member_project_tag`
- 修改结果：新增 `DWS_MEMBER_PROJECT_TAG` 任务，可通过调度系统执行，全量删除重建策略（按 site_id）

### `apps/etl/connectors/feiqiu/orchestration/task_registry.py`
- 变更类型：修改
- 原始原因：新任务 `MemberProjectTagTask` 需要注册到全局任务注册表才能被调度系统发现
- 思路分析：在 DWS 层任务导入块中追加 `MemberProjectTagTask` 的 import，并在注册逻辑中添加对应条目
- 修改结果：`default_registry` 现包含 `DWS_MEMBER_PROJECT_TAG`，可通过 CLI `--tasks DWS_MEMBER_PROJECT_TAG` 调用

### `apps/etl/connectors/feiqiu/tasks/dws/__init__.py`
- 变更类型：修改
- 原始原因：Python 包的 `__init__.py` 需要导出新增的 `MemberProjectTagTask` 类，供 `task_registry.py` 和其他模块导入
- 思路分析：在现有 DWS 任务导入列表中追加 `from .member_project_tag_task import MemberProjectTagTask`，并更新 `__all__`
- 修改结果：`from tasks.dws import MemberProjectTagTask` 可正常工作
