# DWD 主表（非 Ex）表格说明书



- 来源：`etl_billiards/database/schema_dwd_doc.sql`

- 范围：仅包含“主表”（表名不含 `_Ex`/`_EX` 的 `CREATE TABLE`）；扩展字段见同名 `_Ex` 表

- 目的：二次数据清洗/建模的字段口径、来源与可连接关系参考

- 关联（推断）列规则：仅按“字段名 = 其他表主键字段名”推断可 join 关系；DWD 未声明外键，需结合业务确认



## 表清单



| 表名 | 类型 | 主键 | 表说明 |

|---|---|---|---|

| `dim_assistant` | 维度 | assistant_id | DWD 维度表：dim_assistant。ODS 来源表：billiards_ods.assistant_accounts_master（对应 JSON：assistant_accounts_master.json；分析：assistant_accounts_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dim_goods_category` | 维度 | category_id | DWD 维度表：dim_goods_category。ODS 来源表：billiards_ods.stock_goods_category_tree（对应 JSON：stock_goods_category_tree.json；分析：stock_goods_category_tree-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dim_groupbuy_package` | 维度 | groupbuy_package_id | DWD 维度表：dim_groupbuy_package。ODS 来源表：billiards_ods.group_buy_packages（对应 JSON：group_buy_packages.json；分析：group_buy_packages-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dim_member` | 维度 | member_id | DWD 维度表：dim_member。ODS 来源表：billiards_ods.member_profiles（对应 JSON：member_profiles.json；分析：member_profiles-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dim_member_card_account` | 维度 | member_card_id | DWD 维度表：dim_member_card_account。ODS 来源表：billiards_ods.member_stored_value_cards（对应 JSON：member_stored_value_cards.json；分析：member_stored_value_cards-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dim_site` | 维度 | site_id | DWD 维度表：dim_site。ODS 来源表：billiards_ods.table_fee_transactions（对应 JSON：table_fee_transactions.json；分析：table_fee_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dim_store_goods` | 维度 | site_goods_id | DWD 维度表：dim_store_goods。ODS 来源表：billiards_ods.store_goods_master（对应 JSON：store_goods_master.json；分析：store_goods_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dim_table` | 维度 | table_id | DWD 维度表：dim_table。ODS 来源表：billiards_ods.site_tables_master（对应 JSON：site_tables_master.json；分析：site_tables_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dim_tenant_goods` | 维度 | tenant_goods_id | DWD 维度表：dim_tenant_goods。ODS 来源表：billiards_ods.tenant_goods_master（对应 JSON：tenant_goods_master.json；分析：tenant_goods_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_assistant_service_log` | 事实/明细 | assistant_service_id | DWD 明细事实表：dwd_assistant_service_log。ODS 来源表：billiards_ods.assistant_service_records（对应 JSON：assistant_service_records.json；分析：assistant_service_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_assistant_trash_event` | 事实/明细 | assistant_trash_event_id | DWD 明细事实表：dwd_assistant_trash_event。ODS 来源表：billiards_ods.assistant_cancellation_records（对应 JSON：assistant_cancellation_records.json；分析：assistant_cancellation_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_groupbuy_redemption` | 事实/明细 | redemption_id | DWD 明细事实表：dwd_groupbuy_redemption。ODS 来源表：billiards_ods.group_buy_redemption_records（对应 JSON：group_buy_redemption_records.json；分析：group_buy_redemption_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_member_balance_change` | 事实/明细 | balance_change_id | DWD 明细事实表：dwd_member_balance_change。ODS 来源表：billiards_ods.member_balance_changes（对应 JSON：member_balance_changes.json；分析：member_balance_changes-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_payment` | 事实/明细 | payment_id | DWD 明细事实表：dwd_payment。ODS 来源表：billiards_ods.payment_transactions（对应 JSON：payment_transactions.json；分析：payment_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_platform_coupon_redemption` | 事实/明细 | platform_coupon_redemption_id | DWD 明细事实表：dwd_platform_coupon_redemption。ODS 来源表：billiards_ods.platform_coupon_redemption_records（对应 JSON：platform_coupon_redemption_records.json；分析：platform_coupon_redemption_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_recharge_order` | 事实/明细 | recharge_order_id | DWD 明细事实表：dwd_recharge_order。ODS 来源表：billiards_ods.recharge_settlements（对应 JSON：recharge_settlements.json；分析：recharge_settlements-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_refund` | 事实/明细 | refund_id | DWD 明细事实表：dwd_refund。ODS 来源表：billiards_ods.refund_transactions（对应 JSON：refund_transactions.json；分析：refund_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_settlement_head` | 事实/明细 | order_settle_id | DWD 明细事实表：dwd_settlement_head。ODS 来源表：billiards_ods.settlement_records（对应 JSON：settlement_records.json；分析：settlement_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_store_goods_sale` | 事实/明细 | store_goods_sale_id | DWD 明细事实表：dwd_store_goods_sale。ODS 来源表：billiards_ods.store_goods_sales_records（对应 JSON：store_goods_sales_records.json；分析：store_goods_sales_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_table_fee_adjust` | 事实/明细 | table_fee_adjust_id | DWD 明细事实表：dwd_table_fee_adjust。ODS 来源表：billiards_ods.table_fee_discount_records（对应 JSON：table_fee_discount_records.json；分析：table_fee_discount_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |

| `dwd_table_fee_log` | 事实/明细 | table_fee_log_id | DWD 明细事实表：dwd_table_fee_log。ODS 来源表：billiards_ods.table_fee_transactions（对应 JSON：table_fee_transactions.json；分析：table_fee_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。 |



## `dim_assistant`



- 表说明：DWD 维度表：dim_assistant。ODS 来源表：billiards_ods.assistant_accounts_master（对应 JSON：assistant_accounts_master.json；分析：assistant_accounts_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：assistant_id

- 类型：维度



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `assistant_id` | BIGINT | Y |  | 助教账号主键 ID，在“助教流水.json”中对应 site_assistant_id。；用途：所有与助教相关的事实表（助教流水、助教排班等）都会通过这个 ID 关联到该维表；用于跨表关联与去重。 | assistant_accounts_master - id。 | assistant_accounts_master.json - data.assistantInfos - id。 |

| `user_id` | BIGINT |  |  | 预留给“人事系统员工 ID”的字段，目前未接入或未启用；用于跨表关联与去重。 | assistant_accounts_master - staff_id。 | assistant_accounts_master.json - data.assistantInfos - staff_id。 |

| `assistant_no` | TEXT |  |  | 助教工号 / 编号，便于业务侧识别。；关联：在“助教流水.json”中有 assistantNo，与此字段对应。 | assistant_accounts_master - assistant_no。 | assistant_accounts_master.json - data.assistantInfos - assistant_no。 |

| `real_name` | TEXT |  |  | 助教真实姓名，如“何海婷”“梁婷婷”等。；关联：在“助教流水.json”的 assistantName 与此一致。 | assistant_accounts_master - real_name。 | assistant_accounts_master.json - data.assistantInfos - real_name。 |

| `nickname` | TEXT |  |  | 助教在前台展示的昵称，如“佳怡”“周周”“球球”等。 | assistant_accounts_master - nickname。 | assistant_accounts_master.json - data.assistantInfos - nickname。 |

| `mobile` | TEXT |  |  | 助教手机号，用于登录绑定、通知、钉钉同步等。 | assistant_accounts_master - mobile。 | assistant_accounts_master.json - data.assistantInfos - mobile。 |

| `tenant_id` | BIGINT |  |  | 品牌/租户 ID，对应“非球科技”系统中该商户的唯一标识；用途：多租户数据隔离与按租户汇总。 | assistant_accounts_master - tenant_id。 | assistant_accounts_master.json - data.assistantInfos - tenant_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID，对应本次数据的这家球房（朗朗桌球）。；关联：与其它 JSON（台费流水、库存、销售等）中的 site_id 一致；用途：门店维度分组、计营业额、与门店档案关联。 | assistant_accounts_master - site_id。 | assistant_accounts_master.json - data.assistantInfos - site_id。 |

| `team_id` | BIGINT |  |  | 助教所属团队 ID。；关联：在“助教流水.json”中 assistant_team_id 与此一致；用于跨表关联与去重。 | assistant_accounts_master - team_id。 | assistant_accounts_master.json - data.assistantInfos - team_id。 |

| `team_name` | TEXT |  |  | 团队名称，展示用，和 team_id 一一对应。 | assistant_accounts_master - team_name。 | assistant_accounts_master.json - data.assistantInfos - team_name。 |

| `level` | INTEGER |  |  | 8：助教管理/管理员（和流水里的 "助教管理" 对应）；关联：在“助教流水.json”里以 assistant_level+levelName 体现。 | assistant_accounts_master - level。 | assistant_accounts_master.json - data.assistantInfos - level。 |

| `entry_time` | TIMESTAMPTZ |  |  | 入职时间。 | assistant_accounts_master - entry_time。 | assistant_accounts_master.json - data.assistantInfos - entry_time。 |

| `resign_time` | TIMESTAMPTZ |  |  | 离职日期；使用“远未来日期（大于2200年）”作为“未离职”的占位。 | assistant_accounts_master - resign_time。 | assistant_accounts_master.json - data.assistantInfos - resign_time。 |

| `leave_status` | INTEGER |  |  | 业务状态/类型字段，是否离职的状态，0在职，1离职。 | assistant_accounts_master - leave_status。 | assistant_accounts_master.json - data.assistantInfos - leave_status。 |

| `assistant_status` | INTEGER |  |  | 账号启用状态：。 | assistant_accounts_master - assistant_status。 | assistant_accounts_master.json - data.assistantInfos - assistant_status。 |

| `SCD2_start_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本生效起始时间，用于历史追踪。 |  |  |

| `SCD2_end_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本失效时间（默认 9999-12-31 表示当前版本），用于历史追踪。 |  |  |

| `SCD2_is_current` | INT |  |  | 维度慢变(SCD2)当前版本标记（1=当前），用于筛选最新维度记录。 |  |  |

| `SCD2_version` | INT |  |  | 维度慢变(SCD2)版本号（自增），用于区分历史版本。 |  |  |



## `dim_goods_category`



- 表说明：DWD 维度表：dim_goods_category。ODS 来源表：billiards_ods.stock_goods_category_tree（对应 JSON：stock_goods_category_tree.json；分析：stock_goods_category_tree-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：category_id

- 类型：维度



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `category_id` | BIGINT | Y |  | 分类节点主键 ID（在商品分类维度中的唯一标识）；用于跨表关联与去重。 | stock_goods_category_tree - id。 | stock_goods_category_tree.json - data.goodsCategoryList - id。 |

| `tenant_id` | BIGINT |  |  | 租户 ID（品牌/商户 ID）；用途：多租户数据隔离与按租户汇总。 | stock_goods_category_tree - tenant_id。 | stock_goods_category_tree.json - data.goodsCategoryList - tenant_id。 |

| `category_name` | VARCHAR(50) |  |  | 分类名称（实际业务分类名称）。 | stock_goods_category_tree - category_name。 | stock_goods_category_tree.json - data.goodsCategoryList - category_name。 |

| `alias_name` | VARCHAR(50) |  |  | 预留的“别名”字段，可用于：。 | stock_goods_category_tree - alias_name。 | stock_goods_category_tree.json - data.goodsCategoryList - alias_name。 |

| `parent_category_id` | BIGINT |  |  | 父级分类 ID；用于跨表关联与去重。 | stock_goods_category_tree - pid。 | stock_goods_category_tree.json - data.goodsCategoryList - pid。 |

| `business_name` | VARCHAR(50) |  |  | 业务大类名称。 | stock_goods_category_tree - business_name。 | stock_goods_category_tree.json - data.goodsCategoryList - business_name。 |

| `tenant_goods_business_id` | BIGINT |  |  | 业务大类 ID；用于跨表关联与去重。 | stock_goods_category_tree - tenant_goods_business_id。 | stock_goods_category_tree.json - data.goodsCategoryList - tenant_goods_business_id。 |

| `category_level` | INTEGER |  |  | 业务明细字段，用于补充该记录的业务属性。 | stock_goods_category_tree - CASE WHEN pid = 0 THEN 1 ELSE 2 END。 | stock_goods_category_tree.json - data.goodsCategoryList - CASE WHEN pid = 0 THEN 1 ELSE 2 END。 |

| `is_leaf` | INTEGER |  |  | 业务状态/类型字段，用于过滤、分类与统计口径区分。 | stock_goods_category_tree - CASE WHEN categoryboxes IS NULL OR jsonb_array_length(categoryboxes)=0 THEN 1 ELSE 0 END。 | stock_goods_category_tree.json - data.goodsCategoryList - CASE WHEN categoryboxes IS NULL OR jsonb_array_length(categoryboxes)=0 THEN 1 ELSE 0 END。 |

| `open_salesman` | INTEGER |  |  | 是否启用“营业员”或“导购提成”相关的功能开关。 | stock_goods_category_tree - open_salesman。 | stock_goods_category_tree.json - data.goodsCategoryList - open_salesman。 |

| `sort_order` | INTEGER |  |  | 分类的排序序号，用于前端展示顺序的控制。 | stock_goods_category_tree - sort。 | stock_goods_category_tree.json - data.goodsCategoryList - sort。 |

| `is_warehousing` | INTEGER |  |  | 是否“走库存 / 参与仓储管理”：。 | stock_goods_category_tree - is_warehousing。 | stock_goods_category_tree.json - data.goodsCategoryList - is_warehousing。 |

| `SCD2_start_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本生效起始时间，用于历史追踪。 |  |  |

| `SCD2_end_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本失效时间（默认 9999-12-31 表示当前版本），用于历史追踪。 |  |  |

| `SCD2_is_current` | INT |  |  | 维度慢变(SCD2)当前版本标记（1=当前），用于筛选最新维度记录。 |  |  |

| `SCD2_version` | INT |  |  | 维度慢变(SCD2)版本号（自增），用于区分历史版本。 |  |  |



## `dim_groupbuy_package`



- 表说明：DWD 维度表：dim_groupbuy_package。ODS 来源表：billiards_ods.group_buy_packages（对应 JSON：group_buy_packages.json；分析：group_buy_packages-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：groupbuy_package_id

- 类型：维度



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `groupbuy_package_id` | BIGINT | Y |  | 门店侧套餐 ID，本文件内部的主键。；关联：平台验券记录表中常见 group_package_id 字段，通常会指向这里的 id，即：平台券核销记录指向哪一个团购套餐配置；用于跨表关联与去重。 | group_buy_packages - id。 | group_buy_packages.json - data.packageCouponList - id。 |

| `tenant_id` | BIGINT |  |  | 租户 ID（品牌/商户 ID）；用途：多租户数据隔离与按租户汇总。 | group_buy_packages - tenant_id。 | group_buy_packages.json - data.packageCouponList - tenant_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID；用途：门店维度分组、计营业额、与门店档案关联。 | group_buy_packages - site_id。 | group_buy_packages.json - data.packageCouponList - site_id。 |

| `package_name` | VARCHAR(200) |  |  | 团购套餐名称，用于前台展示和核销界面。 | group_buy_packages - package_name。 | group_buy_packages.json - data.packageCouponList - package_name。 |

| `package_template_id` | BIGINT |  |  | “上层套餐 ID” 或“总部/系统级套餐 ID”；用于跨表关联与去重。 | group_buy_packages - package_id。 | group_buy_packages.json - data.packageCouponList - package_id。 |

| `selling_price` | NUMERIC(10,2) |  |  | 语义上应该是“团购售卖价”（顾客在平台购买券时的成交价格）。 | group_buy_packages - selling_price。 | group_buy_packages.json - data.packageCouponList - selling_price。 |

| `coupon_face_value` | NUMERIC(10,2) |  |  | 券面值或内部结算面值，表示该套餐在门店侧对应的金额额度。 | group_buy_packages - coupon_money。 | group_buy_packages.json - data.packageCouponList - coupon_money。 |

| `duration_seconds` | INTEGER |  |  | 套餐内包含的时长（秒）。 | group_buy_packages - duration。 | group_buy_packages.json - data.packageCouponList - duration。 |

| `start_time` | TIMESTAMPTZ |  |  | 套餐开始生效的日期时间。 | group_buy_packages - start_time。 | group_buy_packages.json - data.packageCouponList - start_time。 |

| `end_time` | TIMESTAMPTZ |  |  | 套餐失效的日期时间（到这个时间点后不可使用）。 | group_buy_packages - end_time。 | group_buy_packages.json - data.packageCouponList - end_time。 |

| `table_area_name` | VARCHAR(100) |  |  | 套餐适用的“门店台区名称”，用于显示和筛选。 | group_buy_packages - table_area_name。 | group_buy_packages.json - data.packageCouponList - table_area_name。 |

| `is_enabled` | INTEGER |  |  | 启用状态。 | group_buy_packages - is_enabled。 | group_buy_packages.json - data.packageCouponList - is_enabled。 |

| `is_delete` | INTEGER |  |  | 逻辑删除标志；软删除/作废标记，分析通常需过滤为有效记录。 | group_buy_packages - is_delete。 | group_buy_packages.json - data.packageCouponList - is_delete。 |

| `create_time` | TIMESTAMPTZ |  |  | 该套餐在系统中创建的时间；记录源系统创建时间，用于增量同步和口径对齐。 | group_buy_packages - create_time。 | group_buy_packages.json - data.packageCouponList - create_time。 |

| `tenant_table_area_id_list` | VARCHAR(512) |  |  | 实际代表“台区集合 ID”或“租户台区配置 ID”，用来限制套餐可用的台区范围。 | group_buy_packages - tenant_table_area_id_list。 | group_buy_packages.json - data.packageCouponList - tenant_table_area_id_list。 |

| `card_type_ids` | VARCHAR(255) |  |  | 原意是“适用会员卡类型 ID 列表”，例如某套餐只允许某几种会员卡使用，可以在此配置。 | group_buy_packages - card_type_ids。 | group_buy_packages.json - data.packageCouponList - card_type_ids。 |

| `SCD2_start_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本生效起始时间，用于历史追踪。 |  |  |

| `SCD2_end_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本失效时间（默认 9999-12-31 表示当前版本），用于历史追踪。 |  |  |

| `SCD2_is_current` | INT |  |  | 维度慢变(SCD2)当前版本标记（1=当前），用于筛选最新维度记录。 |  |  |

| `SCD2_version` | INT |  |  | 维度慢变(SCD2)版本号（自增），用于区分历史版本。 |  |  |



## `dim_member`



- 表说明：DWD 维度表：dim_member。ODS 来源表：billiards_ods.member_profiles（对应 JSON：member_profiles.json；分析：member_profiles-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：member_id

- 类型：维度



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `member_id` | BIGINT | Y |  | 这是“租户内会员账户”的主键 ID；用于跨表关联与去重。 | member_profiles - id。 | member_profiles.json - data.tenantMemberInfos - id。 |

| `system_member_id` | BIGINT |  |  | 这是“系统级会员 ID”，在全平台唯一，用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上；用于跨表关联与去重。 | member_profiles - system_member_id。 | member_profiles.json - data.tenantMemberInfos - system_member_id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID；用途：多租户数据隔离与按租户汇总。 | member_profiles - tenant_id。 | member_profiles.json - data.tenantMemberInfos - tenant_id。 |

| `register_site_id` | BIGINT |  |  | 会员的注册门店 ID；用于跨表关联与去重。 | member_profiles - register_site_id。 | member_profiles.json - data.tenantMemberInfos - register_site_id。 |

| `mobile` | TEXT |  |  | 会员绑定的手机号码；手机号码，用于账户/会员识别、查询与联系。 | member_profiles - mobile。 | member_profiles.json - data.tenantMemberInfos - mobile。 |

| `nickname` | TEXT |  |  | 会员在当前租户下的显示名称（可以是姓名，也可以是昵称）。 | member_profiles - nickname。 | member_profiles.json - data.tenantMemberInfos - nickname。 |

| `member_card_grade_code` | BIGINT |  |  | 业务明细字段，用于补充该记录的业务属性。 | member_profiles - member_card_grade_code。 | member_profiles.json - data.tenantMemberInfos - member_card_grade_code。 |

| `member_card_grade_name` | TEXT |  |  | 这是“会员卡种类/等级”的定义字段。 | member_profiles - member_card_grade_name。 | member_profiles.json - data.tenantMemberInfos - member_card_grade_name。 |

| `create_time` | TIMESTAMPTZ |  |  | 会员账户的创建时间（即这条档案/这张卡在系统中被创建的时间）；记录源系统创建时间，用于增量同步和口径对齐。 | member_profiles - create_time。 | member_profiles.json - data.tenantMemberInfos - create_time。 |

| `update_time` | TIMESTAMPTZ |  |  | 记录源系统更新时间，用于增量同步与变更追踪。 | member_profiles - update_time。 | member_profiles.json - data.tenantMemberInfos - update_time。 |

| `SCD2_start_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本生效起始时间，用于历史追踪。 |  |  |

| `SCD2_end_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本失效时间（默认 9999-12-31 表示当前版本），用于历史追踪。 |  |  |

| `SCD2_is_current` | INT |  |  | 维度慢变(SCD2)当前版本标记（1=当前），用于筛选最新维度记录。 |  |  |

| `SCD2_version` | INT |  |  | 维度慢变(SCD2)版本号（自增），用于区分历史版本。 |  |  |



## `dim_member_card_account`



- 表说明：DWD 维度表：dim_member_card_account。ODS 来源表：billiards_ods.member_stored_value_cards（对应 JSON：member_stored_value_cards.json；分析：member_stored_value_cards-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：member_card_id

- 类型：维度



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `member_card_id` | BIGINT | Y |  | 会员卡 ID（源系统唯一标识），用于跨表关联、去重与维度汇总。 | member_stored_value_cards - id。 | member_stored_value_cards.json - data.tenantMemberCards - id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID，与其他 JSON 中 tenant_id 一致；用途：多租户数据隔离与按租户汇总。 | member_stored_value_cards - tenant_id。 | member_stored_value_cards.json - data.tenantMemberCards - tenant_id。 |

| `register_site_id` | BIGINT |  |  | 卡首次办理的门店 ID；用于跨表关联与去重。 | member_stored_value_cards - register_site_id。 | member_stored_value_cards.json - data.tenantMemberCards - register_site_id。 |

| `tenant_member_id` | BIGINT |  |  | 当前商户（品牌/租户）中会员的主键 ID；用于跨表关联与去重。 | member_stored_value_cards - tenant_member_id。 | member_stored_value_cards.json - data.tenantMemberCards - tenant_member_id。 |

| `system_member_id` | BIGINT |  |  | 系统级会员 ID（跨门店统一主键）；用于跨表关联与去重。 | member_stored_value_cards - system_member_id。 | member_stored_value_cards.json - data.tenantMemberCards - system_member_id。 |

| `card_type_id` | BIGINT |  |  | 卡种 ID（定义“这是哪一种卡”）；用于跨表关联与去重。 | member_stored_value_cards - card_type_id。 | member_stored_value_cards.json - data.tenantMemberCards - card_type_id。 |

| `member_card_grade_code` | BIGINT |  |  | 卡等级/卡类代码，和下面两个名称字段一一对应。 | member_stored_value_cards - member_card_grade_code。 | member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code。 |

| `member_card_grade_code_name` | TEXT |  |  | 卡等级/卡类名称。 | member_stored_value_cards - member_card_grade_code_name。 | member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code_name。 |

| `member_card_type_name` | TEXT |  |  | 卡类型名称，实际与 member_card_grade_code_name 一致。 | member_stored_value_cards - member_card_type_name。 | member_stored_value_cards.json - data.tenantMemberCards - member_card_type_name。 |

| `member_name` | TEXT |  |  | 持卡会员姓名快照。 | member_stored_value_cards - member_name。 | member_stored_value_cards.json - data.tenantMemberCards - member_name。 |

| `member_mobile` | TEXT |  |  | 持卡会员手机号快照；手机号码，用于账户/会员识别、查询与联系。 | member_stored_value_cards - member_mobile。 | member_stored_value_cards.json - data.tenantMemberCards - member_mobile。 |

| `balance` | NUMERIC(18,2) |  |  | 当前卡内余额（主要针对储值卡、部分券卡）。 | member_stored_value_cards - balance。 | member_stored_value_cards.json - data.tenantMemberCards - balance。 |

| `start_time` | TIMESTAMPTZ |  |  | 卡片生效开始时间（有效期起始）。 | member_stored_value_cards - start_time。 | member_stored_value_cards.json - data.tenantMemberCards - start_time。 |

| `end_time` | TIMESTAMPTZ |  |  | 卡片有效期结束时间。 | member_stored_value_cards - end_time。 | member_stored_value_cards.json - data.tenantMemberCards - end_time。 |

| `last_consume_time` | TIMESTAMPTZ |  |  | 最近一次消费时间。 | member_stored_value_cards - last_consume_time。 | member_stored_value_cards.json - data.tenantMemberCards - last_consume_time。 |

| `status` | INTEGER |  |  | 1：正常可用。 | member_stored_value_cards - status。 | member_stored_value_cards.json - data.tenantMemberCards - status。 |

| `is_delete` | INTEGER |  |  | 逻辑删除标志；软删除/作废标记，分析通常需过滤为有效记录。 | member_stored_value_cards - is_delete。 | member_stored_value_cards.json - data.tenantMemberCards - is_delete。 |

| `SCD2_start_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本生效起始时间，用于历史追踪。 |  |  |

| `SCD2_end_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本失效时间（默认 9999-12-31 表示当前版本），用于历史追踪。 |  |  |

| `SCD2_is_current` | INT |  |  | 维度慢变(SCD2)当前版本标记（1=当前），用于筛选最新维度记录。 |  |  |

| `SCD2_version` | INT |  |  | 维度慢变(SCD2)版本号（自增），用于区分历史版本。 |  |  |



## `dim_site`



- 表说明：DWD 维度表：dim_site。ODS 来源表：billiards_ods.table_fee_transactions（对应 JSON：table_fee_transactions.json；分析：table_fee_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：site_id

- 类型：维度



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `site_id` | BIGINT | Y |  | 门店 ID，本次数据全部来自同一门店（朗朗桌球）。；关联：与 siteProfile.id 一致；用途：门店维度分组、计营业额、与门店档案关联。 | table_fee_transactions - site_id。 | table_fee_transactions.json - data.siteTableUseDetailsList - site_id。 |

| `org_id` | BIGINT |  |  | 组织/机构 ID，用于组织维度归属和管理聚合。 | table_fee_transactions - siteProfile.org_id。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - org_id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID。本文件所有记录都属于同一租户。；关联：与所有其它 JSON 中的 tenant_id 一致，用于跨表做“商户维度”的过滤。 | table_fee_transactions - siteProfile.tenant_id。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_id。 |

| `shop_name` | TEXT |  |  | 名称字段，用于展示、检索与分组。 | table_fee_transactions - siteProfile.shop_name。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_name。 |

| `site_label` | TEXT |  |  | 业务明细字段，用于补充该记录的业务属性。 | table_fee_transactions - siteProfile.site_label。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_label。 |

| `full_address` | TEXT |  |  | 业务明细字段，用于补充该记录的业务属性。 | table_fee_transactions - siteProfile.full_address。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - full_address。 |

| `address` | TEXT |  |  | 业务明细字段，用于补充该记录的业务属性。 | table_fee_transactions - siteProfile.address。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - address。 |

| `longitude` | NUMERIC(10,6) |  |  | 业务明细字段，用于补充该记录的业务属性。 | table_fee_transactions - siteProfile.longitude。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - longitude（派生：CAST(longitude AS numeric)）。 |

| `latitude` | NUMERIC(10,6) |  |  | 业务明细字段，用于补充该记录的业务属性。 | table_fee_transactions - siteProfile.latitude。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - latitude（派生：CAST(latitude AS numeric)）。 |

| `tenant_site_region_id` | BIGINT |  |  | 租户/品牌门店区域 ID（源系统唯一标识），用于跨表关联、去重与维度汇总。 | table_fee_transactions - siteProfile.tenant_site_region_id。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_site_region_id。 |

| `business_tel` | TEXT |  |  | 业务明细字段，用于补充该记录的业务属性。 | table_fee_transactions - siteProfile.business_tel。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - business_tel。 |

| `site_type` | INTEGER |  |  | 业务状态/类型字段，用于过滤、分类与统计口径区分。 | table_fee_transactions - siteProfile.site_type。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_type。 |

| `shop_status` | INTEGER |  |  | 业务状态/类型字段，用于过滤、分类与统计口径区分。 | table_fee_transactions - siteProfile.shop_status。 | table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_status。 |

| `SCD2_start_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本生效起始时间，用于历史追踪。 |  |  |

| `SCD2_end_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本失效时间（默认 9999-12-31 表示当前版本），用于历史追踪。 |  |  |

| `SCD2_is_current` | INT |  |  | 维度慢变(SCD2)当前版本标记（1=当前），用于筛选最新维度记录。 |  |  |

| `SCD2_version` | INT |  |  | 维度慢变(SCD2)版本号（自增），用于区分历史版本。 |  |  |



## `dim_store_goods`



- 表说明：DWD 维度表：dim_store_goods。ODS 来源表：billiards_ods.store_goods_master（对应 JSON：store_goods_master.json；分析：store_goods_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：site_goods_id

- 类型：维度



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `site_goods_id` | BIGINT | Y |  | 门店商品 ID，门店维度的商品主键；用于跨表关联与去重。 | store_goods_master - id。 | store_goods_master.json - data.orderGoodsList - id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID。同一品牌下多个门店共享一个 tenant_id；用途：多租户数据隔离与按租户汇总。 | store_goods_master - tenant_id。 | store_goods_master.json - data.orderGoodsList - tenant_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID；用途：门店维度分组、计营业额、与门店档案关联。 | store_goods_master - site_id。 | store_goods_master.json - data.orderGoodsList - site_id。 |

| `tenant_goods_id` | BIGINT |  | dim_tenant_goods(tenant_goods_id) | 租户/品牌维度的商品 ID，相当于“全局商品 ID”；用于跨表关联与去重。 | store_goods_master - tenant_goods_id。 | store_goods_master.json - data.orderGoodsList - tenant_goods_id。 |

| `goods_name` | TEXT |  |  | 商品名称，例如“合味道泡面”“地道肠”“麻将房茶位费”等。 | store_goods_master - goods_name。 | store_goods_master.json - data.orderGoodsList - goods_name。 |

| `goods_category_id` | BIGINT |  |  | 商品一级分类 ID；用于跨表关联与去重。 | store_goods_master - goods_category_id。 | store_goods_master.json - data.orderGoodsList - goods_category_id。 |

| `goods_second_category_id` | BIGINT |  |  | 商品二级分类 ID；用于跨表关联与去重。 | store_goods_master - goods_second_category_id。 | store_goods_master.json - data.orderGoodsList - goods_second_category_id。 |

| `category_level1_name` | TEXT |  |  | 一级分类名称，如“零食”“酒水”“服务费”等。 | store_goods_master - oneCategoryName。 | store_goods_master.json - data.orderGoodsList - oneCategoryName。 |

| `category_level2_name` | TEXT |  |  | 二级分类名称，如“面”“洋酒”“纸巾”等。 | store_goods_master - twoCategoryName。 | store_goods_master.json - data.orderGoodsList - twoCategoryName。 |

| `batch_stock_qty` | INTEGER |  |  | 当前可用库存数量（以 unit 为单位）。 | store_goods_master - stock。 | store_goods_master.json - data.orderGoodsList - stock。 |

| `sale_qty` | INTEGER |  |  | 在当前统计口径下的销售数量（总销量，单位同 unit）。 | store_goods_master - sale_num。 | store_goods_master.json - data.orderGoodsList - sale_num。 |

| `total_sales_qty` | INTEGER |  |  | 累计销售数量。 | store_goods_master - total_sales。 | store_goods_master.json - data.orderGoodsList - total_sales。 |

| `sale_price` | NUMERIC(18,2) |  |  | 商品标准销售价（挂牌价），单位为元。 | store_goods_master - sale_price。 | store_goods_master.json - data.orderGoodsList - sale_price。 |

| `created_at` | TIMESTAMPTZ |  |  | 门店商品档案创建时间（商品在门店建立档案的时间点）。 | store_goods_master - create_time。 | store_goods_master.json - data.orderGoodsList - create_time。 |

| `updated_at` | TIMESTAMPTZ |  |  | 最后一次修改该商品档案的时间（包括价格调整、状态变更等）。 | store_goods_master - update_time。 | store_goods_master.json - data.orderGoodsList - update_time。 |

| `avg_monthly_sales` | NUMERIC(18,4) |  |  | 平均月销量（件/月），根据某个统计周期内的销售数据折算而来。 | store_goods_master - average_monthly_sales。 | store_goods_master.json - data.orderGoodsList - average_monthly_sales。 |

| `goods_state` | INTEGER |  |  | 业务状态/类型字段，用于过滤、分类与统计口径区分。 | store_goods_master - goods_state。 | store_goods_master.json - data.orderGoodsList - goods_state。 |

| `enable_status` | INTEGER |  |  | 1：启用。；用途：控制商品档案是否参与任何业务（库存、销售等）。 | store_goods_master - enable_status。 | store_goods_master.json - data.orderGoodsList - enable_status。 |

| `send_state` | INTEGER |  |  | 1：可销售/可下单。 | store_goods_master - send_state。 | store_goods_master.json - data.orderGoodsList - send_state。 |

| `is_delete` | INTEGER |  |  | 逻辑删除标志；软删除/作废标记，分析通常需过滤为有效记录。 | store_goods_master - is_delete。 | store_goods_master.json - data.orderGoodsList - is_delete。 |

| `SCD2_start_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本生效起始时间，用于历史追踪。 |  |  |

| `SCD2_end_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本失效时间（默认 9999-12-31 表示当前版本），用于历史追踪。 |  |  |

| `SCD2_is_current` | INT |  |  | 维度慢变(SCD2)当前版本标记（1=当前），用于筛选最新维度记录。 |  |  |

| `SCD2_version` | INT |  |  | 维度慢变(SCD2)版本号（自增），用于区分历史版本。 |  |  |



## `dim_table`



- 表说明：DWD 维度表：dim_table。ODS 来源表：billiards_ods.site_tables_master（对应 JSON：site_tables_master.json；分析：site_tables_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：table_id

- 类型：维度



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `table_id` | BIGINT | Y |  | 台桌主键 ID。；用途：这是“台”的全系统唯一标识，是各类流水表引用的核心外键。；关联：与 台费流水.json 中的 site_table_id 一致；用于跨表关联与去重。 | site_tables_master - id。 | site_tables_master.json - data.siteTables - id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID。；关联：与各个流水表、siteProfile.id 一致，本数据全部属于“朗朗桌球”这一家门店；用途：门店维度分组、计营业额、与门店档案关联。 | site_tables_master - site_id。 | site_tables_master.json - data.siteTables - site_id。 |

| `table_name` | TEXT |  |  | 台号/台名称，用于前台操作界面展示，也出现在小票和各种流水中的 ledger_name 或 tableName 字段。 | site_tables_master - table_name。 | site_tables_master.json - data.siteTables - table_name。 |

| `site_table_area_id` | BIGINT |  |  | 门店维度的“台桌区域 ID”；用于跨表关联与去重。 | site_tables_master - site_table_area_id。 | site_tables_master.json - data.siteTables - site_table_area_id。 |

| `site_table_area_name` | TEXT |  |  | 区域名称，用于前台展示和区域维度管理。 | site_tables_master - areaName。 | site_tables_master.json - data.siteTables - areaName。 |

| `tenant_table_area_id` | BIGINT |  |  | 门店维度的“台桌区域 ID”；用于跨表关联与去重。 | site_tables_master - site_table_area_id。 | site_tables_master.json - data.siteTables - site_table_area_id。 |

| `table_price` | NUMERIC(18,2) |  |  | 设计上应为“台的基础单价”字段（例如按小时或按局单价）。 | site_tables_master - table_price。 | site_tables_master.json - data.siteTables - table_price。 |

| `SCD2_start_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本生效起始时间，用于历史追踪。 |  |  |

| `SCD2_end_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本失效时间（默认 9999-12-31 表示当前版本），用于历史追踪。 |  |  |

| `SCD2_is_current` | INT |  |  | 维度慢变(SCD2)当前版本标记（1=当前），用于筛选最新维度记录。 |  |  |

| `SCD2_version` | INT |  |  | 维度慢变(SCD2)版本号（自增），用于区分历史版本。 |  |  |



## `dim_tenant_goods`



- 表说明：DWD 维度表：dim_tenant_goods。ODS 来源表：billiards_ods.tenant_goods_master（对应 JSON：tenant_goods_master.json；分析：tenant_goods_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：tenant_goods_id

- 类型：维度



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `tenant_goods_id` | BIGINT | Y |  | 商品档案主键 ID，唯一标识一条商品。；用途：作为其他业务表（销售明细、库存流水、门店商品表等）的外键，通常以 tenant_goods_id 或类似字段出现；用于跨表关联与去重。 | tenant_goods_master - id。 | tenant_goods_master.json - data.tenantGoodsList - id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID。；用途：和其它 JSON 中的 tenant_id / tenantId 一致，用于区分不同商户（本次数据只包含同一租户）。 | tenant_goods_master - tenant_id。 | tenant_goods_master.json - data.tenantGoodsList - tenant_id。 |

| `supplier_id` | BIGINT |  |  | 供应商 ID，用于关联到供应商档案。 | tenant_goods_master - supplier_id。 | tenant_goods_master.json - data.tenantGoodsList - supplier_id。 |

| `category_name` | VARCHAR(64) |  |  | 商品一级分类名称（业务可读）。 | tenant_goods_master - categoryName。 | tenant_goods_master.json - data.tenantGoodsList - categoryName。 |

| `goods_category_id` | BIGINT |  |  | 商品一级分类 ID；用于跨表关联与去重。 | tenant_goods_master - goods_category_id。 | tenant_goods_master.json - data.tenantGoodsList - goods_category_id。 |

| `goods_second_category_id` | BIGINT |  |  | 商品二级分类 ID；用于跨表关联与去重。 | tenant_goods_master - goods_second_category_id。 | tenant_goods_master.json - data.tenantGoodsList - goods_second_category_id。 |

| `goods_name` | VARCHAR(128) |  |  | 商品名称（前台展示名称）。 | tenant_goods_master - goods_name。 | tenant_goods_master.json - data.tenantGoodsList - goods_name。 |

| `goods_number` | VARCHAR(64) |  |  | 商品内部编码（自定义货号/系统货号）。 | tenant_goods_master - goods_number。 | tenant_goods_master.json - data.tenantGoodsList - goods_number。 |

| `unit` | VARCHAR(16) |  |  | 计量单位。 | tenant_goods_master - unit。 | tenant_goods_master.json - data.tenantGoodsList - unit。 |

| `market_price` | NUMERIC(18,2) |  |  | 商品标价 / 售价（标准销售单价）。 | tenant_goods_master - market_price。 | tenant_goods_master.json - data.tenantGoodsList - market_price。 |

| `goods_state` | INTEGER |  |  | 商品状态（上架/下架等）。 | tenant_goods_master - goods_state。 | tenant_goods_master.json - data.tenantGoodsList - goods_state。 |

| `create_time` | TIMESTAMPTZ |  |  | 商品档案创建时间；记录源系统创建时间，用于增量同步和口径对齐。 | tenant_goods_master - create_time。 | tenant_goods_master.json - data.tenantGoodsList - create_time。 |

| `update_time` | TIMESTAMPTZ |  |  | 商品档案最近一次修改时间；记录源系统更新时间，用于增量同步与变更追踪。 | tenant_goods_master - update_time。 | tenant_goods_master.json - data.tenantGoodsList - update_time。 |

| `is_delete` | INTEGER |  |  | 逻辑删除标志；软删除/作废标记，分析通常需过滤为有效记录。 | tenant_goods_master - is_delete。 | tenant_goods_master.json - data.tenantGoodsList - is_delete。 |

| `SCD2_start_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本生效起始时间，用于历史追踪。 |  |  |

| `SCD2_end_time` | TIMESTAMPTZ |  |  | 维度慢变(SCD2)版本失效时间（默认 9999-12-31 表示当前版本），用于历史追踪。 |  |  |

| `SCD2_is_current` | INT |  |  | 维度慢变(SCD2)当前版本标记（1=当前），用于筛选最新维度记录。 |  |  |

| `SCD2_version` | INT |  |  | 维度慢变(SCD2)版本号（自增），用于区分历史版本。 |  |  |



## `dwd_assistant_service_log`



- 表说明：DWD 明细事实表：dwd_assistant_service_log。ODS 来源表：billiards_ods.assistant_service_records（对应 JSON：assistant_service_records.json；分析：assistant_service_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：assistant_service_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `assistant_service_id` | BIGINT | Y |  | 本条助教流水记录的主键 ID（流水唯一标识）。；用途：在系统内部唯一定位这一条助教服务记录；用于跨表关联与去重。 | assistant_service_records - id。 | assistant_service_records.json - data.orderAssistantDetails - id。 |

| `order_trade_no` | BIGINT |  |  | 订单交易号，整个订单层面的编号。；关联：与台费流水、门店销售记录、团购套餐流水等表中的同名字段是一致的，用于把 同一笔订单下的各类消费明细（台费/商品/助教/套餐）串起来。 | assistant_service_records - order_trade_no。 | assistant_service_records.json - data.orderAssistantDetails - order_trade_no。 |

| `order_settle_id` | BIGINT |  | dwd_settlement_head(order_settle_id) | 订单结算 ID，相当于“结账单号”的内部主键。；关联：与小票详情中的 orderSettleId 对应；用于跨表关联与去重。 | assistant_service_records - order_settle_id。 | assistant_service_records.json - data.orderAssistantDetails - order_settle_id。 |

| `order_pay_id` | BIGINT |  |  | 关联到“支付记录”的主键 ID。；用途：可以和支付记录中的 id / relate_id 等字段对应，找到这条助教服务对应的支付流水；用于跨表关联与去重。 | assistant_service_records - order_pay_id。 | assistant_service_records.json - data.orderAssistantDetails - order_pay_id。 |

| `order_assistant_id` | BIGINT |  |  | 订单中“助教项目明细”的内部 ID。；用途：如果订单里有多条助教项目（比如换助教、多个时间段），此字段唯一标识这一条助教明细；用于跨表关联与去重。 | assistant_service_records - order_assistant_id。 | assistant_service_records.json - data.orderAssistantDetails - order_assistant_id。 |

| `order_assistant_type` | INTEGER |  |  | 1：常规助教服务（主课/基础课）。 | assistant_service_records - order_assistant_type。 | assistant_service_records.json - data.orderAssistantDetails - order_assistant_type。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID；你这份数据中是固定值（同一个商户）。；关联：全库所有表都有，作为“商户维度”的过滤键；用途：多租户数据隔离与按租户汇总。 | assistant_service_records - tenant_id。 | assistant_service_records.json - data.orderAssistantDetails - tenant_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID，本数据中指“朗朗桌球”这一家门店。；关联：与其他所有 JSON 中的 site_id 一致，用于判断记录属于哪家门店。 | assistant_service_records - site_id。 | assistant_service_records.json - data.orderAssistantDetails - site_id。 |

| `site_table_id` | BIGINT |  |  | 球台 ID。；关联：对应台桌列表中的 id 字段，表示具体是哪一张桌；用于跨表关联与去重。 | assistant_service_records - site_table_id。 | assistant_service_records.json - data.orderAssistantDetails - site_table_id。 |

| `tenant_member_id` | BIGINT |  |  | 商户维度会员 ID（门店/品牌内的会员主键）。；关联：**会员档案（tenantMemberInfos）**中的 id = 此处的 tenant_member_id；用于跨表关联与去重。 | assistant_service_records - tenant_member_id。 | assistant_service_records.json - data.orderAssistantDetails - tenant_member_id。 |

| `system_member_id` | BIGINT |  |  | 系统级会员 ID（全集团统一 ID）。；关联：会员档案中的 system_member_id 字段；用于跨表关联与去重。 | assistant_service_records - system_member_id。 | assistant_service_records.json - data.orderAssistantDetails - system_member_id。 |

| `assistant_no` | VARCHAR(64) |  |  | 助教编号，例如 "27"。；关联：在助教账号表里也有 assistant_no 字段，对应工号/编号。 | assistant_service_records - assistantNo。 | assistant_service_records.json - data.orderAssistantDetails - assistantNo。 |

| `nickname` | VARCHAR(64) |  |  | 助教对外昵称，如“佳怡”“周周”“球球”等。；关联：在很多小票、商品名里，会把 “编号-昵称” 组合使用（如 ledger_name = "2-佳怡"）。 | assistant_service_records - nickname。 | assistant_service_records.json - data.orderAssistantDetails - nickname。 |

| `site_assistant_id` | BIGINT |  |  | 订单中“助教项目明细”的内部 ID。；用途：如果订单里有多条助教项目（比如换助教、多个时间段），此字段唯一标识这一条助教明细；用于跨表关联与去重。 | assistant_service_records - order_assistant_id。 | assistant_service_records.json - data.orderAssistantDetails - order_assistant_id。 |

| `user_id` | BIGINT |  |  | 助教对应的“用户账号 ID”（系统级用户）。；关联：在助教账号表中有同名字段 user_id，与这里完全一致；用于跨表关联与去重。 | assistant_service_records - user_id。 | assistant_service_records.json - data.orderAssistantDetails - user_id。 |

| `assistant_team_id` | BIGINT |  |  | 助教所属团队 ID。；关联：在助教账号表中有 team_id 字段，对应相同值；用于跨表关联与去重。 | assistant_service_records - assistant_team_id。 | assistant_service_records.json - data.orderAssistantDetails - assistant_team_id。 |

| `person_org_id` | BIGINT |  |  | 助教所属“人事组织/部门 ID”。；关联：在助教账号表中同样存在 person_org_id 字段，值完全一致；用于跨表关联与去重。 | assistant_service_records - person_org_id。 | assistant_service_records.json - data.orderAssistantDetails - person_org_id。 |

| `assistant_level` | INTEGER |  |  | 业务明细字段，用于补充该记录的业务属性。 | assistant_service_records - assistant_level。 | assistant_service_records.json - data.orderAssistantDetails - assistant_level。 |

| `level_name` | VARCHAR(64) |  |  | 助教等级名称，与 assistant_level 一一对应（初级/中级/高级/助教管理）。 | assistant_service_records - levelName。 | assistant_service_records.json - data.orderAssistantDetails - levelName。 |

| `skill_id` | BIGINT |  |  | 助教服务“课程/技能”ID。；关联：应对应某个“课程/技能配置表”的主键（你这次导出里没见那个表）；用于跨表关联与去重。 | assistant_service_records - skill_id。 | assistant_service_records.json - data.orderAssistantDetails - skill_id。 |

| `skill_name` | VARCHAR(64) |  |  | 当前这条助教服务所对应的“课程/技能名称”。 | assistant_service_records - skillName。 | assistant_service_records.json - data.orderAssistantDetails - skillName。 |

| `ledger_unit_price` | NUMERIC(10,2) |  |  | 助教服务 标准单价（通常是标价：每小时、每节课的单价）。 | assistant_service_records - ledger_unit_price。 | assistant_service_records.json - data.orderAssistantDetails - ledger_unit_price。 |

| `ledger_amount` | NUMERIC(10,2) |  |  | 按标准单价计算出来的应收金额（近似 = ledger_unit_price × income_seconds / 3600）。 | assistant_service_records - ledger_amount。 | assistant_service_records.json - data.orderAssistantDetails - ledger_amount。 |

| `projected_income` | NUMERIC(10,2) |  |  | 实际结算计入门店的金额（已经考虑折扣、卡权益、券等后的结果）。 | assistant_service_records - projected_income。 | assistant_service_records.json - data.orderAssistantDetails - projected_income。 |

| `coupon_deduct_money` | NUMERIC(10,2) |  |  | 由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额。 | assistant_service_records - coupon_deduct_money。 | assistant_service_records.json - data.orderAssistantDetails - coupon_deduct_money。 |

| `income_seconds` | INTEGER |  |  | 计费秒数 / 应计收入对应的时间。 | assistant_service_records - income_seconds。 | assistant_service_records.json - data.orderAssistantDetails - income_seconds。 |

| `real_use_seconds` | INTEGER |  |  | 实际使用时长（秒）。 | assistant_service_records - real_use_seconds。 | assistant_service_records.json - data.orderAssistantDetails - real_use_seconds。 |

| `add_clock` | INTEGER |  |  | 加钟秒数，即在原有预约/服务基础上临时追加的时长。 | assistant_service_records - add_clock。 | assistant_service_records.json - data.orderAssistantDetails - add_clock。 |

| `create_time` | TIMESTAMPTZ |  |  | 这条助教流水记录创建时间（一般接近结算/下单时间）；记录源系统创建时间，用于增量同步和口径对齐。 | assistant_service_records - create_time。 | assistant_service_records.json - data.orderAssistantDetails - create_time。 |

| `start_use_time` | TIMESTAMPTZ |  |  | 助教实际开始服务时间。 | assistant_service_records - start_use_time。 | assistant_service_records.json - data.orderAssistantDetails - start_use_time。 |

| `last_use_time` | TIMESTAMPTZ |  |  | 最后一次使用（实际服务）时间。 | assistant_service_records - last_use_time。 | assistant_service_records.json - data.orderAssistantDetails - last_use_time。 |

| `is_delete` | INTEGER |  |  | 逻辑删除标志。；注意：这份助教流水里没有直接出现“顾客姓名”字段，只通过这两个 ID 与会员档案、储值卡等表关联；软删除/作废标记，分析通常需过滤为有效记录。 | assistant_service_records - is_delete。 | assistant_service_records.json - data.orderAssistantDetails - is_delete。 |



## `dwd_assistant_trash_event`



- 表说明：DWD 明细事实表：dwd_assistant_trash_event。ODS 来源表：billiards_ods.assistant_cancellation_records（对应 JSON：assistant_cancellation_records.json；分析：assistant_cancellation_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：assistant_trash_event_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `assistant_trash_event_id` | BIGINT | Y |  | 助教trashevent ID（源系统唯一标识），用于跨表关联、去重与维度汇总。 | assistant_cancellation_records - id。 | assistant_cancellation_records.json - data.abolitionAssistants - id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID，即该废除记录所在门店。；关联：与 siteProfile.id 一致；用途：门店维度分组、计营业额、与门店档案关联。 | assistant_cancellation_records - siteId。 | assistant_cancellation_records.json - data.abolitionAssistants - siteId。 |

| `table_id` | BIGINT |  | dim_table(table_id) | 球台/桌子的 ID。；关联：对应 “台桌列表.json” 中的 id 字段；用于跨表关联与去重。 | assistant_cancellation_records - tableId。 | assistant_cancellation_records.json - data.abolitionAssistants - tableId。 |

| `table_area_id` | BIGINT |  |  | 台桌所在区域 ID。；关联：应对应“区域配置表”的主键（本次导出未包含该表）；用于跨表关联与去重。 | assistant_cancellation_records - tableAreaId。 | assistant_cancellation_records.json - data.abolitionAssistants - tableAreaId。 |

| `assistant_no` | VARCHAR(32) |  |  | 助教姓名/对外展示名称。；注意：这是被废除的那位助教，不是顾客姓名。 | assistant_cancellation_records - assistantName。 | assistant_cancellation_records.json - data.abolitionAssistants - assistantName。 |

| `assistant_name` | VARCHAR(64) |  |  | 助教姓名/对外展示名称。；注意：这是被废除的那位助教，不是顾客姓名。 | assistant_cancellation_records - assistantName。 | assistant_cancellation_records.json - data.abolitionAssistants - assistantName。 |

| `charge_minutes_raw` | INTEGER |  |  | “已发生的计费时长（分钟）”，即这次助教服务在被废除前已经累计了多少分钟。 | assistant_cancellation_records - pdChargeMinutes。 | assistant_cancellation_records.json - data.abolitionAssistants - pdChargeMinutes。 |

| `abolish_amount` | NUMERIC(18,2) |  |  | 与“助教废除”关联的金额字段。字面上是“助教废除金额”。 | assistant_cancellation_records - assistantAbolishAmount。 | assistant_cancellation_records.json - data.abolitionAssistants - assistantAbolishAmount。 |

| `trash_reason` | VARCHAR(255) |  |  | 用于记录“废除原因”的文本描述，例如“顾客临时有事取消”“录入错误”“更换助教”等。 | assistant_cancellation_records - trashReason。 | assistant_cancellation_records.json - data.abolitionAssistants - trashReason。 |

| `create_time` | TIMESTAMPTZ |  |  | 这条“助教废除记录”被创建的时间，即系统正式记录“废除”操作的时刻；记录源系统创建时间，用于增量同步和口径对齐。 | assistant_cancellation_records - createTime。 | assistant_cancellation_records.json - data.abolitionAssistants - createTime。 |



## `dwd_groupbuy_redemption`



- 表说明：DWD 明细事实表：dwd_groupbuy_redemption。ODS 来源表：billiards_ods.group_buy_redemption_records（对应 JSON：group_buy_redemption_records.json；分析：group_buy_redemption_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：redemption_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `redemption_id` | BIGINT | Y |  | 本条“团购套餐流水”记录的 主键 ID。；用途：唯一标识一条券使用到台费上的记录；用于跨表关联与去重。 | group_buy_redemption_records - id。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID；用途：多租户数据隔离与按租户汇总。 | group_buy_redemption_records - tenant_id。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID，与其它 JSON 中一致。；关联：与“团购套餐定义”、“助教流水”、“台费流水”、“门店销售记录”等文件中的 site_id 完全一致，用于统一按门店过滤。 | group_buy_redemption_records - site_id。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - site_id。 |

| `table_id` | BIGINT |  | dim_table(table_id) | 球台 ID。；关联：对应“台桌列表”表中的 id 字段；用于跨表关联与去重。 | group_buy_redemption_records - table_id。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - table_id。 |

| `tenant_table_area_id` | BIGINT |  |  | 租户级台区分组 ID，表示当前使用券的台桌所属的区域组合。；关联：与“团购套餐定义”中的 tenant_table_area_id_list 对应（那边是字符串形态，这里是数值形态），表明该券只能在某些台区组合上使用；用于跨表关联与去重。 | group_buy_redemption_records - tenant_table_area_id。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_table_area_id。 |

| `table_charge_seconds` | INTEGER |  |  | 本次结算中该球台总计计费的秒数（整台的台费计费时间）。 | group_buy_redemption_records - table_charge_seconds。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - table_charge_seconds。 |

| `order_trade_no` | BIGINT |  |  | 订单交易号，和其它消费明细（台费、商品、助教、团购）共用的订单主键。；关联：与“小票详情”、“台费流水”、“助教流水”等的 order_trade_no 一致，用于将同一笔结账中的所有子项目关联起来。 | group_buy_redemption_records - order_trade_no。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - order_trade_no。 |

| `order_settle_id` | BIGINT |  | dwd_settlement_head(order_settle_id) | 结算单 ID（小票结账主键）。；关联：与“小票详情”中的 orderSettleId 相对应；用于跨表关联与去重。 | group_buy_redemption_records - order_settle_id。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - order_settle_id。 |

| `order_coupon_id` | BIGINT |  |  | 订单中“券使用记录”的 ID；用于跨表关联与去重。 | group_buy_redemption_records - order_coupon_id。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_id。 |

| `coupon_origin_id` | BIGINT |  |  | 平台/上游系统中的券记录主键 ID，“券来源 ID”；用于跨表关联与去重。 | group_buy_redemption_records - coupon_origin_id。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_origin_id。 |

| `promotion_activity_id` | BIGINT |  |  | 团购/促销活动 ID；用于跨表关联与去重。 | group_buy_redemption_records - promotion_activity_id。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_activity_id。 |

| `promotion_coupon_id` | BIGINT |  |  | 团购套餐定义 ID。；关联：与 20251110_043255_团购套餐.json 中的 id 字段一一对应，即：；用于跨表关联与去重。 | group_buy_redemption_records - promotion_coupon_id。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_coupon_id。 |

| `order_coupon_channel` | INTEGER |  |  | 券渠道类型，例如：。 | group_buy_redemption_records - order_coupon_channel。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_channel。 |

| `ledger_unit_price` | NUMERIC(18,2) |  |  | 对应台费的标准单价，单位元/小时（从数值来看是类似29.9/小时这种定价）。；用途：配合 ledger_count 用于计算这一条券在台费层面对应的金额（理论上应接近 = 单价 × 秒数/3600）。 | group_buy_redemption_records - ledger_unit_price。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_unit_price。 |

| `ledger_count` | INTEGER |  |  | 按此次优惠实际计算的“核销秒数”。 | group_buy_redemption_records - ledger_count。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_count。 |

| `ledger_amount` | NUMERIC(18,2) |  |  | 本次券实际冲抵台费的金额。 | group_buy_redemption_records - ledger_amount。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_amount。 |

| `coupon_money` | NUMERIC(18,2) |  |  | 本次核销时，这张券在门店侧对应的金额额度（“可抵扣金额”）。 | group_buy_redemption_records - coupon_money。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_money。 |

| `promotion_seconds` | INTEGER |  |  | 团购套餐定义的“标准时长”（券本身标称的可用时长）。 | group_buy_redemption_records - promotion_seconds。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_seconds。 |

| `coupon_code` | VARCHAR(64) |  |  | 团购券券码，核销时扫描/录入的字符串。；关联：与平台验券记录表中的 coupon_code 完全一致，通过该字段可以串起“平台 → 核销 → 台费流水”全链路。 | group_buy_redemption_records - coupon_code。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_code。 |

| `is_single_order` | INTEGER |  |  | 是否单独作为一条订单行。 | group_buy_redemption_records - is_single_order。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - is_single_order。 |

| `is_delete` | INTEGER |  |  | 逻辑删除标志：；软删除/作废标记，分析通常需过滤为有效记录。 | group_buy_redemption_records - is_delete。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - is_delete。 |

| `ledger_name` | VARCHAR(128) |  |  | 台费侧关联的“团购项目名称”（记账名）。 | group_buy_redemption_records - ledger_name。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_name。 |

| `create_time` | TIMESTAMPTZ |  |  | 本条团购套餐使用流水创建时间（即券核销时间，或与结账时间接近）；记录源系统创建时间，用于增量同步和口径对齐。 | group_buy_redemption_records - create_time。 | group_buy_redemption_records.json - data.siteTableUseDetailsList - create_time。 |



## `dwd_member_balance_change`



- 表说明：DWD 明细事实表：dwd_member_balance_change。ODS 来源表：billiards_ods.member_balance_changes（对应 JSON：member_balance_changes.json；分析：member_balance_changes-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：balance_change_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `balance_change_id` | BIGINT | Y |  | 余额变更记录的主键 ID，唯一标识这一条“账户余额变化事件”；用于跨表关联与去重。 | member_balance_changes - id。 | member_balance_changes.json - data.tenantMemberCardLogs - id。 |

| `tenant_id` | BIGINT |  |  | 租户/商户 ID，本数据中是固定值（同一品牌/商户）；用途：多租户数据隔离与按租户汇总。 | member_balance_changes - tenant_id。 | member_balance_changes.json - data.tenantMemberCardLogs - tenant_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 非 0：记录所属的具体门店 ID（与其他 JSON 内的 site_id 一致）。；关联：可与门店档案（siteProfile.id）对应；用途：门店维度分组、计营业额、与门店档案关联。 | member_balance_changes - site_id。 | member_balance_changes.json - data.tenantMemberCardLogs - site_id。 |

| `register_site_id` | BIGINT |  |  | 会员卡的“注册门店 ID”，即办卡所在门店；用于跨表关联与去重。 | member_balance_changes - register_site_id。 | member_balance_changes.json - data.tenantMemberCardLogs - register_site_id。 |

| `tenant_member_id` | BIGINT |  |  | 商户维度的会员 ID（租户内会员主键）。；用途：在本表与会员档案之间形成外键关系： 余额变更记录.tenant_member_id = 会员档案.id；关联：对应“会员档案（20251110_043209_…）”中的 id 字段，即同一个租户下的会员主键；用于跨表关联与去重。 | member_balance_changes - tenant_member_id。 | member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_id。 |

| `system_member_id` | BIGINT |  |  | 系统级（全局）会员 ID。；关联：对应会员档案中的 system_member_id 字段；用于跨表关联与去重。 | member_balance_changes - system_member_id。 | member_balance_changes.json - data.tenantMemberCardLogs - system_member_id。 |

| `tenant_member_card_id` | BIGINT |  |  | 会员卡账户 ID，在租户内唯一标识某张卡。；用途：一名会员可以有多张卡（储值卡、台费卡、酒水卡、活动券等），tenant_member_card_id 指明这条余额变更是针对哪一张卡。；关联：对应“会员档案/储值卡列表”中的 id（卡账户 ID）；用于跨表关联与去重。 | member_balance_changes - tenant_member_card_id。 | member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_card_id。 |

| `card_type_id` | BIGINT |  |  | 卡种类型 ID，用于区分不同卡种。 | member_balance_changes - card_type_id。 | member_balance_changes.json - data.tenantMemberCardLogs - card_type_id。 |

| `card_type_name` | VARCHAR(32) |  |  | 卡种名称，与 card_type_id 一一对应，是一个 卡种枚举名称。 | member_balance_changes - memberCardTypeName。 | member_balance_changes.json - data.tenantMemberCardLogs - memberCardTypeName。 |

| `member_name` | VARCHAR(64) |  |  | 会员姓名或称呼（非昵称字段）。 | member_balance_changes - memberName。 | member_balance_changes.json - data.tenantMemberCardLogs - memberName。 |

| `member_mobile` | VARCHAR(20) |  |  | 会员手机号；手机号码，用于账户/会员识别、查询与联系。 | member_balance_changes - memberMobile。 | member_balance_changes.json - data.tenantMemberCardLogs - memberMobile。 |

| `balance_before` | NUMERIC(18,2) |  |  | 本次变动前，该卡账户的余额（元）。 | member_balance_changes - before。 | member_balance_changes.json - data.tenantMemberCardLogs - before。 |

| `change_amount` | NUMERIC(18,2) |  |  | 本次变动的金额（元），正数表示增加，负数表示减少。 | member_balance_changes - account_data。 | member_balance_changes.json - data.tenantMemberCardLogs - account_data。 |

| `balance_after` | NUMERIC(18,2) |  |  | 本次变动后，该卡账户的余额（元）。 | member_balance_changes - after。 | member_balance_changes.json - data.tenantMemberCardLogs - after。 |

| `from_type` | INTEGER |  |  | 1：日常消费扣款。 | member_balance_changes - from_type。 | member_balance_changes.json - data.tenantMemberCardLogs - from_type。 |

| `payment_method` | INTEGER |  |  | 业务状态/类型字段，用于过滤、分类与统计口径区分。 | member_balance_changes - payment_method。 | member_balance_changes.json - data.tenantMemberCardLogs - payment_method。 |

| `change_time` | TIMESTAMPTZ |  |  | 本条余额变更记录的创建时间，通常接近交易发生时间。 | member_balance_changes - create_time。 | member_balance_changes.json - data.tenantMemberCardLogs - create_time。 |

| `is_delete` | INTEGER |  |  | 逻辑删除标记：；软删除/作废标记，分析通常需过滤为有效记录。 | member_balance_changes - is_delete。 | member_balance_changes.json - data.tenantMemberCardLogs - is_delete。 |

| `remark` | VARCHAR(255) |  |  | 当为空时，说明这条变动没有额外备注说明。 | member_balance_changes - remark。 | member_balance_changes.json - data.tenantMemberCardLogs - remark。 |



## `dwd_payment`



- 表说明：DWD 明细事实表：dwd_payment。ODS 来源表：billiards_ods.payment_transactions（对应 JSON：payment_transactions.json；分析：payment_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：payment_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `payment_id` | BIGINT | Y |  | 支付流水记录的主键 ID。；用途：在“支付记录”这个表内部，唯一标识一条支付流水（包括金额为 0 的记录）；用于跨表关联与去重。 | payment_transactions - id。 | payment_transactions.json - $ - id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 支付记录所属的门店 ID；用途：门店维度分组、计营业额、与门店档案关联。 | payment_transactions - site_id。 | payment_transactions.json - $ - site_id。 |

| `relate_type` | INTEGER |  |  | 表示“这条支付记录关联的业务类型”。 | payment_transactions - relate_type。 | payment_transactions.json - $ - relate_type。 |

| `relate_id` | BIGINT |  |  | 关联业务记录的主键 ID（按 relate_type 不同指向不同表）；用于跨表关联与去重。 | payment_transactions - relate_id。 | payment_transactions.json - $ - relate_id。 |

| `pay_amount` | NUMERIC(18,2) |  |  | 本条支付流水的“支付金额”，单位为元。 | payment_transactions - pay_amount。 | payment_transactions.json - $ - pay_amount。 |

| `pay_status` | INTEGER |  |  | 支付状态枚举字段。 | payment_transactions - pay_status。 | payment_transactions.json - $ - pay_status。 |

| `payment_method` | INTEGER |  |  | 支付方式枚举，例如微信、支付宝、现金、银行卡、储值卡等某一种。 | payment_transactions - payment_method。 | payment_transactions.json - $ - payment_method。 |

| `online_pay_channel` | INTEGER |  |  | 线上支付渠道枚举，例如：。 | payment_transactions - online_pay_channel。 | payment_transactions.json - $ - online_pay_channel。 |

| `create_time` | TIMESTAMPTZ |  |  | 支付记录创建时间，通常与发起支付请求的时间一致（创建支付流水的时间戳）；记录源系统创建时间，用于增量同步和口径对齐。 | payment_transactions - create_time。 | payment_transactions.json - $ - create_time。 |

| `pay_time` | TIMESTAMPTZ |  |  | 实际支付完成时间（支付状态变为成功的时间戳）。 | payment_transactions - pay_time。 | payment_transactions.json - $ - pay_time。 |

| `pay_date` | DATE |  |  | 业务明细字段，用于补充该记录的业务属性。 | payment_transactions - pay_time（派生：DATE(pay_time)）。 | payment_transactions.json - $ - pay_time（派生：DATE(pay_time)）。 |



## `dwd_platform_coupon_redemption`



- 表说明：DWD 明细事实表：dwd_platform_coupon_redemption。ODS 来源表：billiards_ods.platform_coupon_redemption_records（对应 JSON：platform_coupon_redemption_records.json；分析：platform_coupon_redemption_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：platform_coupon_redemption_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `platform_coupon_redemption_id` | BIGINT | Y |  | 本条平台验券记录在本系统内的主键 ID；用于跨表关联与去重。 | platform_coupon_redemption_records - id。 | platform_coupon_redemption_records.json - $ - id。 |

| `tenant_id` | BIGINT |  |  | 商户/租户 ID（品牌级别）。；关联：与其他所有 JSON 中的 tenant_id 一致，用于区分不同品牌/商户的数据域。 | platform_coupon_redemption_records - tenant_id。 | platform_coupon_redemption_records.json - $ - tenant_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID。；关联：对应 siteProfile.id；用途：门店维度分组、计营业额、与门店档案关联。 | platform_coupon_redemption_records - site_id。 | platform_coupon_redemption_records.json - $ - site_id。 |

| `coupon_code` | VARCHAR(64) |  |  | 券码，顾客出示的团购券密码/编号。 | platform_coupon_redemption_records - coupon_code。 | platform_coupon_redemption_records.json - $ - coupon_code。 |

| `coupon_channel` | INTEGER |  |  | 券来源渠道（第三方平台渠道编号）。 | platform_coupon_redemption_records - coupon_channel。 | platform_coupon_redemption_records.json - $ - coupon_channel。 |

| `coupon_name` | VARCHAR(200) |  |  | 团购券产品名称（即第三方平台上向顾客展示的名称）。 | platform_coupon_redemption_records - coupon_name。 | platform_coupon_redemption_records.json - $ - coupon_name。 |

| `sale_price` | NUMERIC(10,2) |  |  | 顾客在第三方平台上实际支付的价格（团购售价）。 | platform_coupon_redemption_records - sale_price。 | platform_coupon_redemption_records.json - $ - sale_price。 |

| `coupon_money` | NUMERIC(10,2) |  |  | 券面值 / 套餐价值（系统层面的“可抵扣金额或对应套餐价值”）。 | platform_coupon_redemption_records - coupon_money。 | platform_coupon_redemption_records.json - $ - coupon_money。 |

| `coupon_free_time` | INTEGER |  |  | 券附带的“免费时长”字段（例如送多少分钟台费）。 | platform_coupon_redemption_records - coupon_free_time。 | platform_coupon_redemption_records.json - $ - coupon_free_time。 |

| `channel_deal_id` | BIGINT |  |  | 渠道侧 dealId / 产品 ID，一般是第三方平台给该团购商品定义的主键；用于跨表关联与去重。 | platform_coupon_redemption_records - channel_deal_id。 | platform_coupon_redemption_records.json - $ - channel_deal_id。 |

| `deal_id` | BIGINT |  |  | 另一个层次的团购产品 ID；用于跨表关联与去重。 | platform_coupon_redemption_records - deal_id。 | platform_coupon_redemption_records.json - $ - deal_id。 |

| `group_package_id` | BIGINT |  |  | group套餐 ID（源系统唯一标识），用于跨表关联、去重与维度汇总。 | platform_coupon_redemption_records - group_package_id。 | platform_coupon_redemption_records.json - $ - group_package_id。 |

| `site_order_id` | BIGINT |  |  | 门店内部的订单 ID（平台券核销时对应的店内订单）。；关联：与台费流水、门店销售记录、助教流水等中出现的订单 ID 字段对应，用于把“平台券核销记录”挂到一笔本地订单上。 | platform_coupon_redemption_records - site_order_id。 | platform_coupon_redemption_records.json - $ - site_order_id。 |

| `table_id` | BIGINT |  | dim_table(table_id) | 使用券的球台 ID。；关联：与“台桌列表”中的 id 对应；用于跨表关联与去重。 | platform_coupon_redemption_records - table_id。 | platform_coupon_redemption_records.json - $ - table_id。 |

| `certificate_id` | VARCHAR(64) |  |  | 平台侧的凭证 ID（通常由第三方团购平台生成的券实例 ID）；用于跨表关联与去重。 | platform_coupon_redemption_records - certificate_id。 | platform_coupon_redemption_records.json - $ - certificate_id。 |

| `verify_id` | VARCHAR(64) |  |  | 平台核销记录 ID（某些平台会为每一次核销生成一个唯一 ID）；用于跨表关联与去重。 | platform_coupon_redemption_records - verify_id。 | platform_coupon_redemption_records.json - $ - verify_id。 |

| `use_status` | INTEGER |  |  | 1：已使用 / 已核销（正常消耗）。 | platform_coupon_redemption_records - use_status。 | platform_coupon_redemption_records.json - $ - use_status。 |

| `is_delete` | INTEGER |  |  | 0：未删除；用途：把平台验券记录挂到本门店的一条订单上；软删除/作废标记，分析通常需过滤为有效记录。 | platform_coupon_redemption_records - is_delete。 | platform_coupon_redemption_records.json - $ - is_delete。 |

| `create_time` | TIMESTAMPTZ |  |  | 验券记录在本系统中创建的时间（记录入库时间）；记录源系统创建时间，用于增量同步和口径对齐。 | platform_coupon_redemption_records - create_time。 | platform_coupon_redemption_records.json - $ - create_time。 |

| `consume_time` | TIMESTAMPTZ |  |  | 券被核销/使用的业务时间。 | platform_coupon_redemption_records - consume_time。 | platform_coupon_redemption_records.json - $ - consume_time。 |



## `dwd_recharge_order`



- 表说明：DWD 明细事实表：dwd_recharge_order。ODS 来源表：billiards_ods.recharge_settlements（对应 JSON：recharge_settlements.json；分析：recharge_settlements-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：recharge_order_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `recharge_order_id` | BIGINT | Y |  | 门店 ID；用于跨表关联与去重。 | recharge_settlements - id。 | recharge_settlements.json - $ - id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID，和 siteProfile.tenant_id 一致；用途：多租户数据隔离与按租户汇总。 | recharge_settlements - tenantid。 | recharge_settlements.json - $ - tenantid。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID，和 siteProfile.id 一致；用途：门店维度分组、计营业额、与门店档案关联。 | recharge_settlements - siteid。 | recharge_settlements.json - $ - siteid。 |

| `member_id` | BIGINT |  | dim_member(member_id) | 会员档案的主键 ID。；关联：对应“会员档案.json”中 tenantMemberInfos 的 id 字段（部分成员能直接匹配）；用于跨表关联与去重。 | recharge_settlements - memberid。 | recharge_settlements.json - $ - memberid。 |

| `member_name_snapshot` | TEXT |  |  | 会员名称/昵称快照。 | recharge_settlements - membername。 | recharge_settlements.json - $ - membername。 |

| `member_phone_snapshot` | TEXT |  |  | 会员手机号快照，用于查找和展示。 | recharge_settlements - memberphone。 | recharge_settlements.json - $ - memberphone。 |

| `tenant_member_card_id` | BIGINT |  |  | 会员卡实例 ID（某张具体卡）；用于跨表关联与去重。 | recharge_settlements - tenantmembercardid。 | recharge_settlements.json - $ - tenantmembercardid。 |

| `member_card_type_name` | TEXT |  |  | 本次充值针对的会员卡类型名称。 | recharge_settlements - membercardtypename。 | recharge_settlements.json - $ - membercardtypename。 |

| `settle_relate_id` | BIGINT |  |  | 关联的“结算单/业务单”ID；用于跨表关联与去重。 | recharge_settlements - settlerelateid。 | recharge_settlements.json - $ - settlerelateid。 |

| `settle_type` | INTEGER |  |  | 业务状态/类型字段，用于过滤、分类与统计口径区分。 | recharge_settlements - settletype。 | recharge_settlements.json - $ - settletype。 |

| `settle_name` | TEXT |  |  | 业务类型名称，用于前端展示。 | recharge_settlements - settlename。 | recharge_settlements.json - $ - settlename。 |

| `is_first` | INTEGER |  |  | 业务状态/类型字段，用于过滤、分类与统计口径区分。 | recharge_settlements - isfirst。 | recharge_settlements.json - $ - isfirst。 |

| `pay_amount` | NUMERIC(18,2) |  |  | 本次记录对应的充值金额（含正负）。 | recharge_settlements - payamount。 | recharge_settlements.json - $ - payamount。 |

| `refund_amount` | NUMERIC(18,2) |  |  | 针对本条充值订单所做的退款金额（通常为正数）。 | recharge_settlements - refundamount。 | recharge_settlements.json - $ - refundamount。 |

| `point_amount` | NUMERIC(18,2) |  |  | 计入会员账户的“储值金额”或“积分型金额”。 | recharge_settlements - pointamount。 | recharge_settlements.json - $ - pointamount。 |

| `cash_amount` | NUMERIC(18,2) |  |  | 现金收款金额。 | recharge_settlements - cashamount。 | recharge_settlements.json - $ - cashamount。 |

| `payment_method` | INTEGER |  |  | 支付方式编码。 | recharge_settlements - paymentmethod。 | recharge_settlements.json - $ - paymentmethod。 |

| `create_time` | TIMESTAMPTZ |  |  | 充值记录创建时间，一般即收银完成时间；记录源系统创建时间，用于增量同步和口径对齐。 | recharge_settlements - createtime。 | recharge_settlements.json - $ - createtime。 |

| `pay_time` | TIMESTAMPTZ |  |  | 支付完成时间。 | recharge_settlements - paytime。 | recharge_settlements.json - $ - paytime。 |



## `dwd_refund`



- 表说明：DWD 明细事实表：dwd_refund。ODS 来源表：billiards_ods.refund_transactions（对应 JSON：refund_transactions.json；分析：refund_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：refund_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `refund_id` | BIGINT | Y |  | 本条 退款流水 的唯一 ID。；用途：作为退款记录表主键，内部检索用；用于跨表关联与去重。 | refund_transactions - id。 | refund_transactions.json - $ - id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID，全系统维度标识该商户。；用途：作为所有门店数据的“租户分区键”；用途：多租户数据隔离与按租户汇总。 | refund_transactions - tenant_id。 | refund_transactions.json - $ - tenant_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID。；用途：关联其他数据表中同一门店的数据；用途：门店维度分组、计营业额、与门店档案关联。 | refund_transactions - site_id。 | refund_transactions.json - $ - site_id。 |

| `relate_type` | INTEGER |  |  | 本退款对应的“业务类型”。 | refund_transactions - relate_type。 | refund_transactions.json - $ - relate_type。 |

| `relate_id` | BIGINT |  |  | 本次退款关联的业务 ID；用于跨表关联与去重。 | refund_transactions - relate_id。 | refund_transactions.json - $ - relate_id。 |

| `pay_amount` | NUMERIC(18,2) |  |  | 本次退款的 资金变动金额。 | refund_transactions - pay_amount。 | refund_transactions.json - $ - pay_amount。 |

| `channel_fee` | NUMERIC(18,2) |  |  | 第三方支付渠道对本次退款收取的手续费。 | refund_transactions - channel_fee。 | refund_transactions.json - $ - channel_fee。 |

| `pay_time` | TIMESTAMPTZ |  |  | 退款在支付渠道层面实际发生的时间。 | refund_transactions - pay_time。 | refund_transactions.json - $ - pay_time。 |

| `create_time` | TIMESTAMPTZ |  |  | 本条退款流水在系统内创建时间；记录源系统创建时间，用于增量同步和口径对齐。 | refund_transactions - create_time。 | refund_transactions.json - $ - create_time。 |

| `payment_method` | INTEGER |  |  | 支付/退款的 方式类型：。 | refund_transactions - payment_method。 | refund_transactions.json - $ - payment_method。 |

| `member_id` | BIGINT |  | dim_member(member_id) | 租户内部的会员 ID（对应会员档案中的某个主键）；用于跨表关联与去重。 | refund_transactions - member_id。 | refund_transactions.json - $ - member_id。 |

| `member_card_id` | BIGINT |  | dim_member_card_account(member_card_id) | 关联的会员卡账户 ID（对应“储值卡列表”或“会员档案”中的某一张卡）；用于跨表关联与去重。 | refund_transactions - member_card_id。 | refund_transactions.json - $ - member_card_id。 |



## `dwd_settlement_head`



- 表说明：DWD 明细事实表：dwd_settlement_head。ODS 来源表：billiards_ods.settlement_records（对应 JSON：settlement_records.json；分析：settlement_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：order_settle_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `order_settle_id` | BIGINT | Y |  | 结账记录主键 ID（订单结算 ID）。；关联：与台费流水（siteTableUseDetailsList）中的 order_settle_id 一致；用于跨表关联与去重。 | settlement_records - id。 | settlement_records.json - $ - id。 |

| `tenant_id` | BIGINT |  |  | 租户/商户 ID（品牌维度）；用途：多租户数据隔离与按租户汇总。 | settlement_records - tenantid。 | settlement_records.json - $ - tenantid。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID。；关联：与其他所有 JSON 中的 site_id 对应；用途：门店维度分组、计营业额、与门店档案关联。 | settlement_records - siteid。 | settlement_records.json - $ - siteid。 |

| `site_name` | VARCHAR(100) |  |  | 门店名称，冗余展示字段。 | settlement_records - sitename。 | settlement_records.json - $ - sitename。 |

| `table_id` | BIGINT |  | dim_table(table_id) | 本次结账对应的桌台 ID。；关联：对应台桌维表或台费流水中的 site_table_id；用于跨表关联与去重。 | settlement_records - tableid。 | settlement_records.json - $ - tableid。 |

| `settle_name` | VARCHAR(100) |  |  | 结账对象名称，一般是“区域 + 桌号”的组合。 | settlement_records - settlename。 | settlement_records.json - $ - settlename。 |

| `order_trade_no` | BIGINT |  |  | 关联订单的“交易号”（order_trade_no）。；关联：与台费流水（order_trade_no）、助教流水（order_trade_no）中的该字段完全一致。 | settlement_records - settlerelateid。 | settlement_records.json - $ - settlerelateid。 |

| `create_time` | TIMESTAMPTZ |  |  | 结账记录创建时间，一般对应收银端点“确认结账”的时间；记录源系统创建时间，用于增量同步和口径对齐。 | settlement_records - createtime。 | settlement_records.json - $ - createtime。 |

| `pay_time` | TIMESTAMPTZ |  |  | 实际支付完成时间。通常晚于 createTime（比如多支付场景）。 | settlement_records - paytime。 | settlement_records.json - $ - paytime。 |

| `settle_type` | INTEGER |  |  | 代表结账类型，比如：。 | settlement_records - settletype。 | settlement_records.json - $ - settletype。 |

| `revoke_order_id` | BIGINT |  |  | 若当前记录是“被撤销的单”，则记录对应的“撤销单 ID”；或反过来记录“原单 ID”；用于跨表关联与去重。 | settlement_records - revokeorderid。 | settlement_records.json - $ - revokeorderid。 |

| `member_id` | BIGINT |  | dim_member(member_id) | 会员主键 ID。；关联：与“会员卡列表（tenantMemberCards）”中的 tenant_member_id 一致；用于跨表关联与去重。 | settlement_records - memberid。 | settlement_records.json - $ - memberid。 |

| `member_name` | VARCHAR(100) |  |  | 会员姓名快照。 | settlement_records - membername。 | settlement_records.json - $ - membername。 |

| `member_phone` | VARCHAR(50) |  |  | 会员手机号快照；手机号码，用于账户/会员识别、查询与联系。 | settlement_records - memberphone。 | settlement_records.json - $ - memberphone。 |

| `member_card_account_id` | BIGINT |  |  | 会员卡账户 ID（与 memberId、会员卡表的 id 之间存在映射）；用于跨表关联与去重。 | settlement_records - tenantmembercardid。 | settlement_records.json - $ - tenantmembercardid。 |

| `member_card_type_name` | VARCHAR(100) |  |  | 会员卡类型名称，如“储值卡”“次卡”“活动抵用券”等。 | settlement_records - membercardtypename。 | settlement_records.json - $ - membercardtypename。 |

| `is_bind_member` | BOOLEAN |  |  | 本次结账是否绑定了会员。 | settlement_records - isbindmember。 | settlement_records.json - $ - isbindmember。 |

| `member_discount_amount` | NUMERIC(18,2) |  |  | 会员折扣产生的优惠金额（元）。 | settlement_records - memberdiscountamount。 | settlement_records.json - $ - memberdiscountamount。 |

| `consume_money` | NUMERIC(18,2) |  |  | 本次结账消费总额（不考虑支付方式/优惠结构的前后顺序，单纯汇总项目金额）。 | settlement_records - consumemoney。 | settlement_records.json - $ - consumemoney。 |

| `table_charge_money` | NUMERIC(18,2) |  |  | 台费（桌台计费部分）的金额。 | settlement_records - tablechargemoney。 | settlement_records.json - $ - tablechargemoney。 |

| `goods_money` | NUMERIC(18,2) |  |  | 商品销售金额（原始商品金额）。 | settlement_records - goodsmoney。 | settlement_records.json - $ - goodsmoney。 |

| `real_goods_money` | NUMERIC(18,2) |  |  | 商品实际计入金额（可能已扣除某些折扣、促销）。 | settlement_records - realgoodsmoney。 | settlement_records.json - $ - realgoodsmoney。 |

| `assistant_pd_money` | NUMERIC(18,2) |  |  | 助教“排钟/上课”应计金额（原价）。；关联：与 助教流水.json 中对应订单的 ledger_amount 一致（应收金额）。 | settlement_records - assistantpdmoney。 | settlement_records.json - $ - assistantpdmoney。 |

| `assistant_cx_money` | NUMERIC(18,2) |  |  | 助教“次课/套餐/持续课”等另一类助教项目的金额。 | settlement_records - assistantcxmoney。 | settlement_records.json - $ - assistantcxmoney。 |

| `adjust_amount` | NUMERIC(18,2) |  |  | 人工调价金额（总和），包括整单减免、特殊调整等。 | settlement_records - adjustamount。 | settlement_records.json - $ - adjustamount。 |

| `pay_amount` | NUMERIC(18,2) |  |  | 本次结账“实付金额”（顾客实际支付的总金额），不包括券面值、积分等非现金部分。 | settlement_records - payamount。 | settlement_records.json - $ - payamount。 |

| `balance_amount` | NUMERIC(18,2) |  |  | 从会员余额账户扣除的金额（储值卡余额消费）。 | settlement_records - balanceamount。 | settlement_records.json - $ - balanceamount。 |

| `recharge_card_amount` | NUMERIC(18,2) |  |  | 与“充值卡”相关的支付额，可能表示本次使用充值卡抵扣的金额。 | settlement_records - rechargecardamount。 | settlement_records.json - $ - rechargecardamount。 |

| `gift_card_amount` | NUMERIC(18,2) |  |  | 礼品卡/代金卡的支付金额。 | settlement_records - giftcardamount。 | settlement_records.json - $ - giftcardamount。 |

| `coupon_amount` | NUMERIC(18,2) |  |  | 本单实际由优惠券（代金券/团购券等）抵扣的金额。 | settlement_records - couponamount。 | settlement_records.json - $ - couponamount。 |

| `rounding_amount` | NUMERIC(18,2) |  |  | 抹零金额/舍入差值。如四舍五入或按角、分抹零产生的调整。 | settlement_records - roundingamount。 | settlement_records.json - $ - roundingamount。 |

| `point_amount` | NUMERIC(18,2) |  |  | 代表与积分相关的一个金额或数量指标。结合字段命名，可能有两种用途：。 | settlement_records - pointamount。 | settlement_records.json - $ - pointamount。 |



## `dwd_store_goods_sale`



- 表说明：DWD 明细事实表：dwd_store_goods_sale。ODS 来源表：billiards_ods.store_goods_sales_records（对应 JSON：store_goods_sales_records.json；分析：store_goods_sales_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：store_goods_sale_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `store_goods_sale_id` | BIGINT | Y |  | 本条「门店销售流水」记录的主键 ID；用于跨表关联与去重。 | store_goods_sales_records - id。 | store_goods_sales_records.json - data.orderGoodsLedgers - id。 |

| `order_trade_no` | BIGINT |  |  | 订单交易号（业务单号）。 | store_goods_sales_records - order_trade_no。 | store_goods_sales_records.json - data.orderGoodsLedgers - order_trade_no。 |

| `order_settle_id` | BIGINT |  | dwd_settlement_head(order_settle_id) | 订单结算 ID（结账单主键）；用于跨表关联与去重。 | store_goods_sales_records - order_settle_id。 | store_goods_sales_records.json - data.orderGoodsLedgers - order_settle_id。 |

| `order_pay_id` | BIGINT |  |  | 关联支付记录的 ID；用于跨表关联与去重。 | store_goods_sales_records - order_pay_id。 | store_goods_sales_records.json - data.orderGoodsLedgers - order_pay_id。 |

| `order_goods_id` | BIGINT |  |  | 订单商品明细 ID（订单内部的商品行主键）；用于跨表关联与去重。 | store_goods_sales_records - order_goods_id。 | store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID（系统主键）；用途：门店维度分组、计营业额、与门店档案关联。 | store_goods_sales_records - site_id。 | store_goods_sales_records.json - data.orderGoodsLedgers - site_id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID；用途：多租户数据隔离与按租户汇总。 | store_goods_sales_records - tenant_id。 | store_goods_sales_records.json - data.orderGoodsLedgers - tenant_id。 |

| `site_goods_id` | BIGINT |  | dim_store_goods(site_goods_id) | 门店商品 ID；用于跨表关联与去重。 | store_goods_sales_records - site_goods_id。 | store_goods_sales_records.json - data.orderGoodsLedgers - site_goods_id。 |

| `tenant_goods_id` | BIGINT |  | dim_tenant_goods(tenant_goods_id) | 租户（品牌）级商品 ID（全局商品 ID）；用于跨表关联与去重。 | store_goods_sales_records - tenant_goods_id。 | store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_id。 |

| `tenant_goods_category_id` | BIGINT |  |  | 租户级商品一级分类 ID；用于跨表关联与去重。 | store_goods_sales_records - tenant_goods_category_id。 | store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_category_id。 |

| `tenant_goods_business_id` | BIGINT |  |  | 租户级商品「业务大类」ID（例如“零食类”“酒水类”等更高维度）；用于跨表关联与去重。 | store_goods_sales_records - tenant_goods_business_id。 | store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_business_id。 |

| `site_table_id` | BIGINT |  |  | 球台 ID；用于跨表关联与去重。 | store_goods_sales_records - site_table_id。 | store_goods_sales_records.json - data.orderGoodsLedgers - site_table_id。 |

| `ledger_name` | VARCHAR(200) |  |  | 销售项目名称（商品名称），例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等。 | store_goods_sales_records - ledger_name。 | store_goods_sales_records.json - data.orderGoodsLedgers - ledger_name。 |

| `ledger_group_name` | VARCHAR(100) |  |  | 销售项目所属的「门店内部分组名称」，类似前台菜单分组或大类标签。 | store_goods_sales_records - ledger_group_name。 | store_goods_sales_records.json - data.orderGoodsLedgers - ledger_group_name。 |

| `ledger_unit_price` | NUMERIC(18,2) |  |  | 商品在该次销售中的「结算单价」（元/单位）。 | store_goods_sales_records - ledger_unit_price。 | store_goods_sales_records.json - data.orderGoodsLedgers - ledger_unit_price。 |

| `ledger_count` | INTEGER |  |  | 销售数量（以 unit 为单位，unit 字段在门店商品档案中）。 | store_goods_sales_records - ledger_count。 | store_goods_sales_records.json - data.orderGoodsLedgers - ledger_count。 |

| `ledger_amount` | NUMERIC(18,2) |  |  | 原始应收金额，公式上接近 ledger_unit_price × ledger_count。 | store_goods_sales_records - ledger_amount。 | store_goods_sales_records.json - data.orderGoodsLedgers - ledger_amount。 |

| `discount_price` | NUMERIC(18,2) |  |  | 本条销售明细的「价格优惠金额」，即原价部分被减免掉的金额。 | store_goods_sales_records - discount_money。 | store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。 |

| `real_goods_money` | NUMERIC(18,2) |  |  | 商品实际入账金额（考虑折扣、可能还会考虑其它抵扣后的实际销售金额）。 | store_goods_sales_records - real_goods_money。 | store_goods_sales_records.json - data.orderGoodsLedgers - real_goods_money。 |

| `cost_money` | NUMERIC(18,2) |  |  | 本条销售对应的成本金额（以元计）。 | store_goods_sales_records - cost_money。 | store_goods_sales_records.json - data.orderGoodsLedgers - cost_money。 |

| `ledger_status` | INTEGER |  |  | 销售流水状态。 | store_goods_sales_records - ledger_status。 | store_goods_sales_records.json - data.orderGoodsLedgers - ledger_status。 |

| `is_delete` | INTEGER |  |  | 逻辑删除标志；软删除/作废标记，分析通常需过滤为有效记录。 | store_goods_sales_records - is_delete。 | store_goods_sales_records.json - data.orderGoodsLedgers - is_delete。 |

| `create_time` | TIMESTAMPTZ |  |  | 销售记录创建时间，通常就是结账时间或录入时间；记录源系统创建时间，用于增量同步和口径对齐。 | store_goods_sales_records - create_time。 | store_goods_sales_records.json - data.orderGoodsLedgers - create_time。 |



## `dwd_table_fee_adjust`



- 表说明：DWD 明细事实表：dwd_table_fee_adjust。ODS 来源表：billiards_ods.table_fee_discount_records（对应 JSON：table_fee_discount_records.json；分析：table_fee_discount_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：table_fee_adjust_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `table_fee_adjust_id` | BIGINT | Y |  | 台费打折 / 调整流水主键 ID。；用途：在“台费调账表”中唯一标识一条折扣/调账操作；用于跨表关联与去重。 | table_fee_discount_records - id。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - id。 |

| `order_trade_no` | BIGINT |  |  | 订单交易号。；关联：与 台费流水.json、助教流水.json、小票详情.json 中的同名字段一致，用于把这一条“台费调整”挂接到某笔订单上。 | table_fee_discount_records - order_trade_no。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - order_trade_no。 |

| `order_settle_id` | BIGINT |  | dwd_settlement_head(order_settle_id) | 结算单/小票 ID。；关联：与“小票详情.json”中的 orderSettleId 对应；用于跨表关联与去重。 | table_fee_discount_records - order_settle_id。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - order_settle_id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID。；用途：标识记录属于哪一个商户（同一个“非球科技”租户）；用途：多租户数据隔离与按租户汇总。 | table_fee_discount_records - tenant_id。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID，本批数据全部为同一家门店（朗朗桌球）。；关联：与 siteProfile.id 一致；用途：门店维度分组、计营业额、与门店档案关联。 | table_fee_discount_records - site_id。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - site_id。 |

| `table_id` | BIGINT |  | dim_table(table_id) | 台桌 ID。；关联：与 台费流水.json 中的 site_table_id 一致；用于跨表关联与去重。 | table_fee_discount_records - site_table_id。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - site_table_id。 |

| `table_area_id` | BIGINT |  |  | 租户维度的“台桌区域 ID”。；关联：与台桌区域配置表对应，帮助从区域维度分析打折分布（结构上可用）；用于跨表关联与去重。 | table_fee_discount_records - tenant_table_area_id。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_table_area_id。 |

| `table_area_name` | VARCHAR(64) |  |  | 名称字段，用于展示、检索与分组。 | table_fee_discount_records - tableprofile.table_area_name。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - tableprofile.table_area_name。 |

| `tenant_table_area_id` | BIGINT |  |  | 租户维度的“台桌区域 ID”。；关联：与台桌区域配置表对应，帮助从区域维度分析打折分布（结构上可用）；用于跨表关联与去重。 | table_fee_discount_records - tenant_table_area_id。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_table_area_id。 |

| `ledger_amount` | NUMERIC(18,2) |  |  | 通过与 台费流水.json 做对比，可以明确：。 | table_fee_discount_records - ledger_amount。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_amount。 |

| `ledger_status` | INTEGER |  |  | 业务状态/类型字段，用于过滤、分类与统计口径区分。 | table_fee_discount_records - ledger_status。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_status。 |

| `is_delete` | INTEGER |  |  | 逻辑删除标志：；软删除/作废标记，分析通常需过滤为有效记录。 | table_fee_discount_records - is_delete。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - is_delete。 |

| `adjust_time` | TIMESTAMPTZ |  |  | 台费调整记录的创建时间，即打折操作被执行的时间戳。 | table_fee_discount_records - create_time。 | table_fee_discount_records.json - data.taiFeeAdjustInfos - create_time。 |



## `dwd_table_fee_log`



- 表说明：DWD 明细事实表：dwd_table_fee_log。ODS 来源表：billiards_ods.table_fee_transactions（对应 JSON：table_fee_transactions.json；分析：table_fee_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。

- 主键：table_fee_log_id

- 类型：事实/明细



| 字段 | 类型 | 主键 | 关联（推断） | 字段用途（说明） | ODS来源 | JSON字段 |

|---|---|---:|---|---|---|---|

| `table_fee_log_id` | BIGINT | Y |  | 台费流水记录主键（事实表主键）；用于跨表关联与去重。 | table_fee_transactions - id。 | table_fee_transactions.json - data.siteTableUseDetailsList - id。 |

| `order_trade_no` | BIGINT |  |  | 订单交易号，是整笔订单的主编号。；关联：与其它 JSON（如 助教流水、小票详情、门店销售记录）中的同名字段一致，用于把 同一订单下的台费、助教、商品等多条明细串联。 | table_fee_transactions - order_trade_no。 | table_fee_transactions.json - data.siteTableUseDetailsList - order_trade_no。 |

| `order_settle_id` | BIGINT |  | dwd_settlement_head(order_settle_id) | 结算单号/结账 ID，对应一次结账操作。；关联：与“小票详情.json”中的 orderSettleId 对应；用于跨表关联与去重。 | table_fee_transactions - order_settle_id。 | table_fee_transactions.json - data.siteTableUseDetailsList - order_settle_id。 |

| `order_pay_id` | BIGINT |  |  | 订单支付记录 ID。；关联：对应“支付记录.json”中的 id 或 relate_id（视模型而定），用于追踪这条台费最终对应哪一条支付流水。 | table_fee_transactions - order_pay_id。 | table_fee_transactions.json - data.siteTableUseDetailsList - order_pay_id。 |

| `tenant_id` | BIGINT |  |  | 租户/品牌 ID。本文件所有记录都属于同一租户。；关联：与所有其它 JSON 中的 tenant_id 一致，用于跨表做“商户维度”的过滤。 | table_fee_transactions - tenant_id。 | table_fee_transactions.json - data.siteTableUseDetailsList - tenant_id。 |

| `site_id` | BIGINT |  | dim_site(site_id) | 门店 ID，本次数据全部来自同一门店（朗朗桌球）。；关联：与 siteProfile.id 一致；用途：门店维度分组、计营业额、与门店档案关联。 | table_fee_transactions - site_id。 | table_fee_transactions.json - data.siteTableUseDetailsList - site_id。 |

| `site_table_id` | BIGINT |  |  | 球台 ID。；关联：对应“台桌列表”中的 id（当前导出文件中有一类与之对应的台桌配置表）；用于跨表关联与去重。 | table_fee_transactions - site_table_id。 | table_fee_transactions.json - data.siteTableUseDetailsList - site_table_id。 |

| `site_table_area_id` | BIGINT |  |  | 门店内“台桌区域” ID（站在门店物理布局的角度）。；关联：对应“门店台桌区域配置表”的主键；用于跨表关联与去重。 | table_fee_transactions - site_table_area_id。 | table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_id。 |

| `site_table_area_name` | VARCHAR(64) |  |  | 台桌区域的名称，用于门店表现和区域统计。 | table_fee_transactions - site_table_area_name。 | table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_name。 |

| `tenant_table_area_id` | BIGINT |  |  | 租户维度的台桌区域 ID（品牌层面的同一类区域）。；关联：对应租户层面的“区域维表”，支持多门店共享同一套区域配置；用于跨表关联与去重。 | table_fee_transactions - tenant_table_area_id。 | table_fee_transactions.json - data.siteTableUseDetailsList - tenant_table_area_id。 |

| `member_id` | BIGINT |  | dim_member(member_id) | 门店/租户内的会员 ID。；关联：与“会员档案.json（tenantMemberInfos）”内的 id 对应（有部分 ID 完全匹配，部分会员可能不在当前导出页）；用于跨表关联与去重。 | table_fee_transactions - member_id。 | table_fee_transactions.json - data.siteTableUseDetailsList - member_id。 |

| `ledger_name` | VARCHAR(64) |  |  | 台号名称，实际展示给员工/顾客看的桌台编号。 | table_fee_transactions - ledger_name。 | table_fee_transactions.json - data.siteTableUseDetailsList - ledger_name。 |

| `ledger_unit_price` | NUMERIC(18,2) |  |  | 台费结算时设置的 每小时单价/计费单价。 | table_fee_transactions - ledger_unit_price。 | table_fee_transactions.json - data.siteTableUseDetailsList - ledger_unit_price。 |

| `ledger_count` | INTEGER |  |  | 台账记录的计费秒数，计费用秒数（应收时长）。 | table_fee_transactions - ledger_count。 | table_fee_transactions.json - data.siteTableUseDetailsList - ledger_count。 |

| `ledger_amount` | NUMERIC(18,2) |  |  | 按单价与计费时长计算出的原始应收台费金额。 | table_fee_transactions - ledger_amount。 | table_fee_transactions.json - data.siteTableUseDetailsList - ledger_amount。 |

| `real_table_charge_money` | NUMERIC(18,2) |  |  | 台费中实际向顾客收取的金额（现金/实付维度，未含券方承担或内部调账的那一部分）。 | table_fee_transactions - real_table_charge_money。 | table_fee_transactions.json - data.siteTableUseDetailsList - real_table_charge_money。 |

| `coupon_promotion_amount` | NUMERIC(18,2) |  |  | 由优惠券/活动/团购（平台/门店促销）承担的优惠金额，直接抵扣在台费上。 | table_fee_transactions - coupon_promotion_amount。 | table_fee_transactions.json - data.siteTableUseDetailsList - coupon_promotion_amount。 |

| `member_discount_amount` | NUMERIC(18,2) |  |  | 由会员权益产生的优惠金额，例如会员折扣、会员价等。 | table_fee_transactions - member_discount_amount。 | table_fee_transactions.json - data.siteTableUseDetailsList - member_discount_amount。 |

| `adjust_amount` | NUMERIC(18,2) |  |  | 调整金额/调账金额，用于将台费金额转移或冲减到其它项目，或手工调整。 | table_fee_transactions - adjust_amount。 | table_fee_transactions.json - data.siteTableUseDetailsList - adjust_amount。 |

| `real_table_use_seconds` | INTEGER |  |  | 实际使用的总秒数（系统真实统计的使用时长）。 | table_fee_transactions - real_table_use_seconds。 | table_fee_transactions.json - data.siteTableUseDetailsList - real_table_use_seconds。 |

| `add_clock_seconds` | INTEGER |  |  | 加钟秒数，在原有使用基础上追加的时长。 | table_fee_transactions - add_clock_seconds。 | table_fee_transactions.json - data.siteTableUseDetailsList - add_clock_seconds。 |

| `start_use_time` | TIMESTAMPTZ |  |  | 台开始使用的时间（实际开台时间）。 | table_fee_transactions - start_use_time。 | table_fee_transactions.json - data.siteTableUseDetailsList - start_use_time。 |

| `ledger_end_time` | TIMESTAMPTZ |  |  | 台账上的计费结束时间。 | table_fee_transactions - ledger_end_time。 | table_fee_transactions.json - data.siteTableUseDetailsList - ledger_end_time。 |

| `create_time` | TIMESTAMPTZ |  |  | 这条台费流水记录的创建时间，通常接近结账时间；记录源系统创建时间，用于增量同步和口径对齐。 | table_fee_transactions - create_time。 | table_fee_transactions.json - data.siteTableUseDetailsList - create_time。 |

| `ledger_status` | INTEGER |  |  | 1：正常已结算台费。 | table_fee_transactions - ledger_status。 | table_fee_transactions.json - data.siteTableUseDetailsList - ledger_status。 |

| `is_single_order` | INTEGER |  |  | 1：该台费记录对应的是一个独立计费单元（单独结算的桌费）。 | table_fee_transactions - is_single_order。 | table_fee_transactions.json - data.siteTableUseDetailsList - is_single_order。 |

| `is_delete` | INTEGER |  |  | 逻辑删除标志：；软删除/作废标记，分析通常需过滤为有效记录。 | table_fee_transactions - is_delete。 | table_fee_transactions.json - data.siteTableUseDetailsList - is_delete。 |



---

生成时间：2025-12-15 19:35:55

