# 实施计划：DWD 业务全景梳理

## 概述

将 DWD 业务全景梳理的设计方案转化为可执行的任务序列。任务按两阶段组织：基础层（文档1：表结构总览）→ 全景层（文档2~5），数据验证贯穿全程。属性测试使用 Python + hypothesis，放置在 `tests/` 目录。

## Tasks

- [x] 1. 阶段一：DWD 表结构与字段语义总览（文档1）
  - [x] 1.1 枚举 DWD 全部表并按业务域分组
    - 查询 `test_etl_feiqiu.dwd` 的 `information_schema.tables` 获取全部表名
    - 按 7 个业务域（结算、台桌、助教、会员、团购、商品、库存）分组
    - 查询每张表的行数和时间范围，确认数据状态
    - 创建 `docs/reports/dwd-table-structure-overview.md` 文件骨架（含模板元素：标题、元数据块、目录、正文、附录）
    - _Requirements: 1.1, 7.1, 7.2, 7.3_

  - [x] 1.2 结算域表梳理（dwd_settlement_head/ex, dwd_payment, dwd_refund/ex）
    - 对每张表执行单表智能聚焦分析：information_schema 获取列信息 → 字段分类筛选（空字段/ETL字段/透明字段/业务关键字段）→ 业务关键字段倒推验证
    - 金额字段执行深度验证：值域分布（MIN/MAX/AVG/中位数/NULL占比）+ 交叉验证
    - 枚举字段执行 DISTINCT + 频次分布
    - 对比现有 BD 手册标注偏差
    - 将结果写入文档1的结算域章节
    - _Requirements: 1.1, 1.2, 1.3, 1.4, 1.5, 1.8, 6.1, 6.6_

  - [x] 1.3 台桌域表梳理（dim_table/ex, dwd_table_fee_log/ex, dwd_table_fee_adjust/ex）
    - 同 1.2 的分析流程
    - 重点验证台费计价相关字段、台费调整的触发条件
    - 标注 dim_table 的 SCD2 字段
    - _Requirements: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 6.1, 6.6_

  - [x] 1.4 助教域表梳理（dim_assistant/ex, dwd_assistant_service_log/ex）
    - 同 1.2 的分析流程
    - 重点验证助教服务类型枚举、`_ex.is_trash` 作废标记的业务含义
    - 标注 dim_assistant 的 SCD2 字段
    - 注意：`dwd_assistant_trash_event` 已于 2026-02-22 DROP，作废判断改用 `dwd_assistant_service_log_ex.is_trash`
    - _Requirements: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 6.1, 6.6_

  - [x] 1.5 会员域表梳理（dim_member/ex, dim_member_card_account/ex, dwd_member_balance_change/ex, dwd_recharge_order/ex）
    - 同 1.2 的分析流程
    - 重点验证储值卡本金/赠送金额分账、余额变动类型枚举
    - 标注 dim_member 和 dim_member_card_account 的 SCD2 字段
    - _Requirements: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 6.1, 6.6_

  - [x] 1.6 团购域表梳理（dim_groupbuy_package/ex, dwd_groupbuy_redemption/ex, dwd_platform_coupon_redemption/ex）
    - 同 1.2 的分析流程
    - 重点验证团购三层价格体系（sale_price / pl_coupon_sale_amount / coupon_amount）
    - 标注 dim_groupbuy_package 的 SCD2 字段
    - _Requirements: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 6.1, 6.6_

  - [x] 1.7 商品域与库存域表梳理（dim_tenant_goods/ex, dim_store_goods/ex, dim_goods_category, dwd_store_goods_sale/ex, dwd_goods_stock_summary, dwd_goods_stock_movement）
    - 同 1.2 的分析流程
    - 重点验证商品分类树结构、租户商品与门店商品的关系
    - 标注维度表的 SCD2 字段（dim_goods_category 无扩展表）
    - _Requirements: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 6.1, 6.6_

  - [x] 1.8 完善文档1：跨表关联关系汇总与文档收尾
    - 汇总所有表的主键、外键关联、关联类型（1:1, 1:N）
    - 补充 Mermaid ER 图展示跨域关联
    - 补充附录：空字段汇总、验证 SQL 汇总
    - 添加文档间引用链接（相对路径格式）
    - 确认文档模板完整性（标题、元数据块、目录、正文、附录）
    - _Requirements: 1.5, 6.4, 7.3, 7.4, 7.5_

- [x] 2. 检查点 - 文档1 完成确认
  - 确认文档1（`docs/reports/dwd-table-structure-overview.md`）已覆盖全部 42 张表（含新发现的 dim_staff/dim_staff_ex）
  - 确认每张表的业务关键字段均已通过测试库数据验证
  - 确认偏差记录完整（point_amount 等偏差已标注）
  - 第9章门店维度有占位符待后续补充，不阻塞全景文档

- [x] 3. 阶段二A：业务全景文档（文档2）
  - [x] 3.1 创建文档2骨架并梳理消费产生链路
    - 创建 `docs/reports/dwd-business-panorama.md`，使用全景文档通用模板
    - 描述从开台到结算的完整业务流程，标注每个环节涉及的 DWD 表和关键字段
    - 以 Mermaid 流程图展示从开台到结算的完整数据流向
    - 基于文档1的字段语义，引用而非重复描述
    - _Requirements: 2.1, 2.7, 6.4, 7.3_

  - [x] 3.2 梳理各消费类目的产生机制
    - 台费（含多台桌合并）：计价规则、台桌类型与单价关系、计时方式
    - 台费折扣（dwd_table_fee_adjust）：触发条件和计算方式
    - 商品消费：商品销售流水的记录方式
    - 助教服务（陪打/超休）：服务类型和计费方式
    - 灯控电费：记录方式
    - 每个环节提供至少一个测试库真实数据样例
    - _Requirements: 2.2, 2.3, 2.6_

  - [x] 3.3 梳理优惠与团购机制
    - 平台团购券（美团/抖音）核销流程
    - 会员折扣计算方式
    - 台费调整（adjust_amount）的业务场景
    - 团购券三层价格体系（sale_price / pl_coupon_sale_amount / coupon_amount），标注每层价格对应的 DWD 表和字段
    - 每个环节提供测试库数据样例
    - _Requirements: 2.4, 2.5, 2.6_

  - [x] 3.4 文档2收尾：附录与引用
    - 补充附录（验证 SQL、数据样例）
    - 添加文档间引用链接
    - 确认文档模板完整性
    - _Requirements: 7.3, 7.4, 7.5_

- [x] 4. 阶段二B：账务全景文档（文档3）
  - [x] 4.1 创建文档3骨架并梳理支付渠道
    - 创建 `docs/reports/dwd-accounting-panorama.md`，使用全景文档通用模板
    - 描述所有支付渠道及其在 DWD 层的记录方式（线上收款、现金、储值卡余额、平台团购券）
    - 描述 dwd_payment 与 dwd_settlement_head 的关联方式
    - 描述 payment_method 枚举值与实际支付渠道的对应关系
    - 描述支付方式推断逻辑（因 settlement_head_ex.payment_method 全部为 0 不可用）
    - _Requirements: 3.1, 3.2, 3.6, 6.4, 7.3_

  - [x] 4.2 梳理会员储值卡体系与退款流程
    - 充值流程（dwd_recharge_order）
    - 余额变动记录（dwd_member_balance_change）
    - 本金/赠送金额分账逻辑
    - 退款流程：结算退款、充值退款、转账退款的触发场景和 DWD 记录方式
    - _Requirements: 3.3, 3.4_

  - [x] 4.3 梳理对账公式与 consume_money 口径
    - 列出所有已验证的对账公式（F1~F6、R1~R3、RF1~RF2、B1~B4）
    - 对每个公式在 test_etl_feiqiu 全量数据上执行验证，标注成立率和例外情况
    - 描述 consume_money 字段的三种历史口径（A/B/C）及时间线，标注当前生效口径
    - _Requirements: 3.5, 3.7, 6.2_

  - [x] 4.4 文档3收尾：附录与引用
    - 补充附录（验证 SQL、对账公式验证结果）
    - 添加文档间引用链接
    - 确认文档模板完整性
    - _Requirements: 7.3, 7.4, 7.5_

- [x] 5. 检查点 - 文档2和文档3完成确认
  - 确认文档2覆盖全部消费类目和优惠机制（台费/商品/助教/灯控/团购券/会员折扣）
  - 确认文档3覆盖全部支付渠道和对账公式（F1/F2/B1-B3/consume_money三种口径）
  - 确认所有关键结论标注了验证状态
  - 确认文档3覆盖全部支付渠道和对账公式
  - 确认所有关键结论标注了验证状态
  - Ensure all tests pass, ask the user if questions arise.

- [x] 6. 阶段二C：财务全景文档（文档4）
  - [x] 6.1 创建文档4骨架并梳理收入构成
    - 创建 `docs/reports/dwd-financial-panorama.md`，使用全景文档通用模板
    - 按收入来源分类描述门店收入构成：台费收入、商品收入、助教服务收入、充值收入
    - 描述每种收入来源对应的 DWD 表、关键金额字段、从 DWD 到 DWS 的聚合路径
    - _Requirements: 4.1, 4.2, 6.4, 7.3_

  - [x] 6.2 梳理团购收入确认与储值卡资金流向
    - 团购券场景收入确认逻辑：门店实际收入 = pl_coupon_sale_amount，差额为门店补贴
    - 储值卡充值资金流向：充值收款 → 余额入账（本金+赠送）→ 消费扣款 → 退款
    - 标注每个环节的 DWD 表和金额字段
    - _Requirements: 4.3, 4.4_

  - [x] 6.3 构建对账矩阵与数据质量评估
    - 按支付渠道构建对账矩阵：每种支付渠道涉及的 DWD 表和字段、跨表校验公式
    - 标注已知数据质量问题和对账例外（助教券支付缺口、商品消费未覆盖等）
    - 给出影响范围的量化评估
    - _Requirements: 4.5, 4.6_

  - [x] 6.4 文档4收尾：附录与引用
    - 补充附录（验证 SQL、对账矩阵详细数据）
    - 添加文档间引用链接（引用文档2的消费构成、文档3的支付渠道）
    - 确认文档模板完整性
    - _Requirements: 7.3, 7.4, 7.5_

- [x] 7. 阶段二D：维度表与主数据全景（文档5）
  - [x] 7.1 创建文档5骨架并梳理门店与台桌维度
    - 创建 `docs/reports/dwd-dimension-panorama.md`，使用全景文档通用模板
    - 梳理 dim_site/ex：门店维度结构、SCD2 字段、与事实表的关联
    - 梳理 dim_table/ex：台桌维度结构、台桌类型枚举、与台费流水的关联
    - _Requirements: 5.1, 5.2, 6.4, 7.3_

  - [x] 7.2 梳理会员体系与助教维度
    - 会员档案（dim_member/ex）：会员等级/标签记录方式
    - 储值卡账户（dim_member_card_account/ex）：账户类型、余额字段
    - 助教维度（dim_assistant/ex）：助教类型、服务能力
    - 描述维度表与事实表的关联方式，标注关联字段和基数
    - _Requirements: 5.2, 5.3_

  - [x] 7.3 梳理商品体系与团购维度
    - 商品分类树（dim_goods_category）：分类层级结构
    - 租户商品（dim_tenant_goods/ex）与门店商品（dim_store_goods/ex）的关系
    - 库存相关表（dwd_goods_stock_summary, dwd_goods_stock_movement）的结构
    - 团购套餐维度（dim_groupbuy_package/ex）：套餐与券种关系、价格体系
    - _Requirements: 5.4, 5.5_

  - [x] 7.4 文档5收尾：Mermaid ER 图与附录
    - 补充 Mermaid ER 图展示全部维度表与事实表的关联关系
    - 补充附录（验证 SQL、SCD2 字段汇总）
    - 添加文档间引用链接
    - 确认文档模板完整性
    - _Requirements: 5.1, 5.2, 7.3, 7.4, 7.5_

- [x] 8. 检查点 - 全部5份文档完成确认
  - 确认 5 份文档均已创建在 `docs/reports/` 目录下
  - 确认文档间引用链接格式正确（相对路径）且目标文件存在
  - 确认每份文档包含完整模板元素（标题、元数据块、目录、正文、附录）
  - Ensure all tests pass, ask the user if questions arise.

- [x] 9. 属性测试与示例测试
  - [x] 9.1 创建属性测试文件骨架与公共工具
    - 创建 `tests/test_dwd_panorama_properties.py`
    - 实现公共工具函数：读取文档内容、解析 markdown 结构、提取表名、提取链接
    - 配置 hypothesis settings（min_examples=100）
    - 使用 `load_dotenv` 加载根 `.env`，通过 `TEST_DB_DSN` 连接测试库
    - _Requirements: 6.1_

  - [x] 9.2 编写 Property 1: DWD 表覆盖完整性
    - **Property 1: DWD 表覆盖完整性**
    - 查询 information_schema.tables 获取 DWD schema 全部表名
    - 解析 5 份文档提取提及的表名
    - 验证覆盖率 = 100%
    - **Validates: Requirements 1.1, 5.1**

  - [x] 9.3 编写 Property 2: 主键标注准确性
    - **Property 2: 主键标注准确性**
    - 对随机采样的表，查询 information_schema.table_constraints + key_column_usage 获取实际主键
    - 解析文档1中该表的主键标注
    - 验证一致性
    - **Validates: Requirements 1.5**

  - [x] 9.4 编写 Property 3: 业务环节数据佐证
    - **Property 3: 业务环节数据佐证**
    - 解析业务全景文档（文档2）的每个业务环节段落
    - 验证每个段落包含至少一个代码块或数据表格
    - **Validates: Requirements 2.6**

  - [x] 9.5 编写 Property 4: 对账公式验证一致性
    - **Property 4: 对账公式验证一致性**
    - 提取账务全景文档（文档3）中的对账公式和标注的成立率
    - 重新执行验证 SQL，比对成立率
    - **Validates: Requirements 3.5, 6.2**

  - [x] 9.6 编写 Property 5: 文档元数据完整性
    - **Property 5: 文档元数据完整性**
    - 对每份全景文档，检查开头是否包含：数据来源（test_etl_feiqiu）、验证日期、数据时间范围
    - **Validates: Requirements 6.4**

  - [x] 9.7 编写 Property 6: 文档输出路径正确性
    - **Property 6: 文档输出路径正确性**
    - 验证所有产出文件位于 `docs/reports/` 目录下
    - **Validates: Requirements 7.1**

  - [x] 9.8 编写 Property 7: 文档模板一致性
    - **Property 7: 文档模板一致性**
    - 对每份文档，检查是否包含标题、元数据块、目录、正文、附录
    - **Validates: Requirements 7.3**

  - [x] 9.9 编写 Property 8: 内部链接格式
    - **Property 8: 内部链接格式**
    - 正则提取所有 markdown 内部链接
    - 验证使用相对路径格式（以 `./` 或 `../` 开头）且目标文件存在
    - **Validates: Requirements 7.5**

  - [x] 9.10 编写示例测试
    - 创建 `tests/test_dwd_panorama_examples.py`
    - SCD2 字段标注检查：dim_member 文档中包含 scd2_start_time 等字段
    - 消费类目覆盖检查：业务全景文档包含"台费"、"商品消费"、"助教服务"、"灯控电费"
    - 团购三层价格检查：文档包含 sale_price、pl_coupon_sale_amount、coupon_amount
    - Mermaid 流程图检查：业务全景文档包含 mermaid 代码块
    - consume_money 三种口径检查：文档包含口径 A、B、C
    - 对账矩阵检查：财务全景文档包含矩阵格式表格
    - 5 份文档产出检查：docs/reports/ 下存在 5 个指定文件名
    - 每份文档 Mermaid 图表检查
    - 无数据表标注检查（边界条件）
    - _Requirements: 1.6, 1.7, 2.2, 2.5, 2.7, 3.5, 3.7, 4.5, 7.2, 7.4_

- [x] 10. 最终检查点 - 全部完成确认
  - 运行全部属性测试：`cd C:\Project\NeoZQYY && pytest tests/test_dwd_panorama_properties.py -v`
  - 运行全部示例测试：`cd C:\Project\NeoZQYY && pytest tests/test_dwd_panorama_examples.py -v`
  - 确认 5 份文档内容完整、验证状态标注齐全
  - Ensure all tests pass, ask the user if questions arise.

## Notes

- 标记 `*` 的任务为可选，可跳过以加速 MVP
- 每个任务引用了具体的需求编号，确保可追溯
- 检查点任务确保增量验证
- 属性测试验证文档的结构正确性，示例测试验证具体内容覆盖
- 所有数据库查询必须使用测试库 `test_etl_feiqiu`，通过 `TEST_DB_DSN` 连接
- 文档1是其他4份文档的基础，必须先完成阶段一再进入阶段二
