# 飞球连接器 — 数据流结构分析报告

> 生成时间：2026-02-19 19:04:40 CST
> 分析范围：飞球（feiqiu）连接器，共 23 张 ODS 表
> 数据来源：API JSON 采样 + PostgreSQL ODS/DWD 表结构 + 三层字段映射 + BD_manual 业务文档

## 1. 总览

| # | ODS 表名 | 业务描述 | 采样记录数 | API JSON 字段数 | ODS 列数 | DWD 目标表 | DWD 总列数 |
|---|---------|---------|-----------|---------------|---------|-----------|-----------|
| 1 | `assistant_accounts_master` | 助教账号档案 | 69 | 62 | 67 | dim_assistant, dim_assistant_ex | 67 |
| 2 | `settlement_records` | 结账记录 | 200 | 92 | 71 | dwd_settlement_head, dwd_settlement_head_ex | 67 |
| 3 | `table_fee_transactions` | 台费计费流水 | 200 | 67 | 47 | dim_site, dim_site_ex, dwd_table_fee_log, dwd_table_fee_log_ex | 84 |
| 4 | `assistant_service_records` | 助教服务流水 | 200 | 91 | 71 | dwd_assistant_service_log, dwd_assistant_service_log_ex | 64 |
| 5 | `assistant_cancellation_records` | 助教废除记录 | 78 | 38 | 19 | dwd_assistant_trash_event, dwd_assistant_trash_event_ex | 14 |
| 6 | `store_goods_sales_records` | 门店商品销售流水 | 200 | 51 | 56 | dwd_store_goods_sale, dwd_store_goods_sale_ex | 52 |
| 7 | `payment_transactions` | 支付流水 | 200 | 36 | 17 | dwd_payment | 12 |
| 8 | `refund_transactions` | 退款流水 | 30 | 57 | 37 | dwd_refund, dwd_refund_ex | 32 |
| 9 | `platform_coupon_redemption_records` | 平台/团购券核销 | 200 | 51 | 31 | dwd_platform_coupon_redemption, dwd_platform_coupon_redemption_ex | 26 |
| 10 | `member_profiles` | 会员档案 | 200 | 20 | 25 | dim_member, dim_member_ex | 30 |
| 11 | `member_stored_value_cards` | 会员储值卡 | 200 | 71 | 80 | dim_member_card_account, dim_member_card_account_ex | 84 |
| 12 | `member_balance_changes` | 会员余额变动 | 200 | 28 | 33 | dwd_member_balance_change, dwd_member_balance_change_ex | 29 |
| 13 | `recharge_settlements` | 充值结算 | 197 | 92 | 71 | dwd_recharge_order, dwd_recharge_order_ex | 67 |
| 14 | `group_buy_packages` | 团购套餐定义 | 18 | 40 | 43 | dim_groupbuy_package, dim_groupbuy_package_ex | 47 |
| 15 | `group_buy_redemption_records` | 团购套餐核销 | 200 | 52 | 57 | dwd_groupbuy_redemption, dwd_groupbuy_redemption_ex | 53 |
| 16 | `goods_stock_summary` | 库存汇总 | 173 | 14 | 19 | — | 0 |
| 17 | `goods_stock_movements` | 库存变化记录 | 200 | 19 | 24 | — | 0 |
| 18 | `site_tables_master` | 台桌维表 | 74 | 26 | 31 | dim_table, dim_table_ex | 22 |
| 19 | `stock_goods_category_tree` | 库存商品分类树 | 9 | 20 | 16 | dim_goods_category | 16 |
| 20 | `store_goods_master` | 门店商品档案 | 173 | 53 | 52 | dim_store_goods, dim_store_goods_ex | 56 |
| 21 | `table_fee_discount_records` | 台费折扣/调账 | 200 | 55 | 33 | dwd_table_fee_adjust, dwd_table_fee_adjust_ex | 29 |
| 22 | `tenant_goods_master` | 租户商品档案 | 174 | 32 | 37 | dim_tenant_goods, dim_tenant_goods_ex | 41 |
| 23 | `settlement_ticket_details` | 结账小票详情（按 orderSettleId 逐条获取，不走常规分页） | 0 | 0 | 43 | — | 0 |
| | **合计** | | **3395** | **1067** | **980** | | **892** |

### 1.1 API↔ODS↔DWD 字段对比差异

以下汇总各表在三层之间的字段差异（点击数字跳转至分表详情）：

| ODS 表名 | API→ODS 未映射 | ODS 无 JSON 源 | ODS→DWD 未映射 | DWD 无 ODS 源 | 主要差异原因 |
|---------|--------------|--------------|--------------|-------------|------------|
| `assistant_accounts_master` | 0 | 0 | [4](#diff-assistant-accounts-master) | [8](#diff-assistant-accounts-master) | SCD2/派生列 8 个 |
| `settlement_records` | [25](#diff-settlement-records) | 0 | 0 | 0 | 嵌套对象 25 个 |
| `table_fee_transactions` | [24](#diff-table-fee-transactions) | [1](#diff-table-fee-transactions) | [1](#diff-table-fee-transactions) | [8](#diff-table-fee-transactions) | 嵌套对象 24 个；SCD2/派生列 8 个 |
| `assistant_service_records` | [24](#diff-assistant-service-records) | [1](#diff-assistant-service-records) | [4](#diff-assistant-service-records) | 0 | 嵌套对象 24 个 |
| `assistant_cancellation_records` | [24](#diff-assistant-cancellation-records) | [1](#diff-assistant-cancellation-records) | [2](#diff-assistant-cancellation-records) | 0 | 嵌套对象 24 个 |
| `store_goods_sales_records` | 0 | 0 | [1](#diff-store-goods-sales-records) | 0 | — |
| `payment_transactions` | [24](#diff-payment-transactions) | [1](#diff-payment-transactions) | [1](#diff-payment-transactions) | 0 | 嵌套对象 24 个 |
| `refund_transactions` | [24](#diff-refund-transactions) | [1](#diff-refund-transactions) | [1](#diff-refund-transactions) | 0 | 嵌套对象 24 个 |
| `platform_coupon_redemption_records` | [24](#diff-platform-coupon-redemption-records) | [1](#diff-platform-coupon-redemption-records) | [1](#diff-platform-coupon-redemption-records) | 0 | 嵌套对象 24 个 |
| `member_profiles` | 0 | 0 | 0 | [9](#diff-member-profiles) | SCD2/派生列 9 个 |
| `member_stored_value_cards` | 0 | [4](#diff-member-stored-value-cards) | 0 | [8](#diff-member-stored-value-cards) | SCD2/派生列 8 个 |
| `member_balance_changes` | 0 | 0 | [1](#diff-member-balance-changes) | [1](#diff-member-balance-changes) | SCD2/派生列 1 个 |
| `recharge_settlements` | [25](#diff-recharge-settlements) | 0 | [5](#diff-recharge-settlements) | [5](#diff-recharge-settlements) | 嵌套对象 25 个；SCD2/派生列 5 个 |
| `group_buy_packages` | [2](#diff-group-buy-packages) | 0 | 0 | [8](#diff-group-buy-packages) | 平层未映射 2 个；SCD2/派生列 8 个 |
| `group_buy_redemption_records` | 0 | 0 | 0 | 0 | — |
| `goods_stock_summary` | 0 | 0 | [14](#diff-goods-stock-summary) | 0 | — |
| `goods_stock_movements` | 0 | 0 | [19](#diff-goods-stock-movements) | 0 | — |
| `site_tables_master` | 0 | [1](#diff-site-tables-master) | [14](#diff-site-tables-master) | [8](#diff-site-tables-master) | SCD2/派生列 8 个 |
| `stock_goods_category_tree` | 0 | [1](#diff-stock-goods-category-tree) | [1](#diff-stock-goods-category-tree) | [4](#diff-stock-goods-category-tree) | SCD2/派生列 4 个 |
| `store_goods_master` | [5](#diff-store-goods-master) | 0 | [2](#diff-store-goods-master) | [8](#diff-store-goods-master) | 嵌套对象 4 个；平层未映射 1 个；SCD2/派生列 8 个 |
| `table_fee_discount_records` | [25](#diff-table-fee-discount-records) | [2](#diff-table-fee-discount-records) | [2](#diff-table-fee-discount-records) | 0 | 嵌套对象 25 个 |
| `tenant_goods_master` | 0 | 0 | [1](#diff-tenant-goods-master) | [8](#diff-tenant-goods-master) | SCD2/派生列 8 个 |
| `settlement_ticket_details` | 0 | [38](#diff-settlement-ticket-details) | [38](#diff-settlement-ticket-details) | 0 | — |

<a id="diff-assistant-accounts-master"></a>

#### 1.1.1 assistant_accounts_master 字段差异明细

**ODS→DWD 未映射** — 4 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`system_role_id`](#ods-assistant-accounts-master)** | 关联实体 ID（外键） | 中 | 标识类 ID 字段，用于关联/定位相关实体 | **⚠️ 无 DWD 目标** |
| 2 | **[`job_num`](#ods-assistant-accounts-master)** | 待分析（ODS层字段） | 低 | 备用工号字段，目前未在该门店启用 | **⚠️ 无 DWD 目标** |
| 3 | **[`cx_unit_price`](#ods-assistant-accounts-master)** | 金额/价格相关 | 中 | 促销时段的单价，本门店未在账号表层面设置 | **⚠️ 无 DWD 目标** |
| 4 | **[`pd_unit_price`](#ods-assistant-accounts-master)** | 金额/价格相关 | 中 | 某种标准单价（例如“普通时段单价”），这里未在账号上配置（实际单价在助教商... | **⚠️ 无 DWD 目标** |

**DWD 无 ODS 源** — 8 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dim_assistant | **[`scd2_start_time`](#dwd-dim-assistant)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本生效时间 | **⚠️ 无 ODS 源** |
| 2 | dim_assistant | **[`scd2_end_time`](#dwd-dim-assistant)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本失效时间 | **⚠️ 无 ODS 源** |
| 3 | dim_assistant | **[`scd2_is_current`](#dwd-dim-assistant)** | SCD2 缓慢变化维度元数据 | 高 | 当前版本标记 | **⚠️ 无 ODS 源** |
| 4 | dim_assistant | **[`scd2_version`](#dwd-dim-assistant)** | SCD2 缓慢变化维度元数据 | 高 | 版本号 | **⚠️ 无 ODS 源** |
| 5 | dim_assistant_ex | **[`scd2_start_time`](#dwd-dim-assistant-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 6 | dim_assistant_ex | **[`scd2_end_time`](#dwd-dim-assistant-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 7 | dim_assistant_ex | **[`scd2_is_current`](#dwd-dim-assistant-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 8 | dim_assistant_ex | **[`scd2_version`](#dwd-dim-assistant-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |

<a id="diff-settlement-records"></a>

#### 1.1.2 settlement_records 字段差异明细

<details><summary>API→ODS 未映射（嵌套对象）— 25 个</summary>

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | [`siteProfile.org_id`](#api-settlement-records) | 关联实体 ID（外键） | 中 | `0` |  | 📦 嵌套 |
| 2 | [`siteProfile.shop_name`](#api-settlement-records) | 门店名称 | 高 |  |  | 📦 嵌套 |
| 3 | [`siteProfile.avatar`](#api-settlement-records) | 头像/图片 URL | 中 |  |  | 📦 嵌套 |
| 4 | [`siteProfile.business_tel`](#api-settlement-records) | 联系电话 | 中 |  |  | 📦 嵌套 |
| 5 | [`siteProfile.full_address`](#api-settlement-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 6 | [`siteProfile.address`](#api-settlement-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 7 | [`siteProfile.longitude`](#api-settlement-records) | 待分析（API层字段） | 低 | `0.0` |  | 📦 嵌套 |
| 8 | [`siteProfile.latitude`](#api-settlement-records) | 待分析（API层字段） | 低 | `0.0` |  | 📦 嵌套 |
| 9 | [`siteProfile.tenant_site_region_id`](#api-settlement-records) | 关联实体 ID（外键） | 中 | `0` |  | 📦 嵌套 |
| 10 | [`siteProfile.tenant_id`](#api-settlement-records) | 关联实体 ID（外键） | 中 | `0` |  | 📦 嵌套 |
| 11 | [`siteProfile.auto_light`](#api-settlement-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 12 | [`siteProfile.attendance_distance`](#api-settlement-records) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 13 | [`siteProfile.wifi_name`](#api-settlement-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 14 | [`siteProfile.wifi_password`](#api-settlement-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 15 | [`siteProfile.customer_service_qrcode`](#api-settlement-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 16 | [`siteProfile.customer_service_wechat`](#api-settlement-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 17 | [`siteProfile.fixed_pay_qrCode`](#api-settlement-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 18 | [`siteProfile.prod_env`](#api-settlement-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 19 | [`siteProfile.light_status`](#api-settlement-records) | 状态码 | 中 | `1` |  | 📦 嵌套 |
| 20 | [`siteProfile.light_type`](#api-settlement-records) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 21 | [`siteProfile.site_type`](#api-settlement-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 22 | [`siteProfile.light_token`](#api-settlement-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 23 | [`siteProfile.site_label`](#api-settlement-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 24 | [`siteProfile.attendance_enabled`](#api-settlement-records) | 启用/禁用开关 | 中 | `1` |  | 📦 嵌套 |
| 25 | [`siteProfile.shop_status`](#api-settlement-records) | 状态码 | 中 | `1` |  | 📦 嵌套 |

</details>

<a id="diff-table-fee-transactions"></a>

#### 1.1.3 table_fee_transactions 字段差异明细

<details><summary>API→ODS 未映射（嵌套对象）— 24 个</summary>

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | [`siteProfile.org_id`](#api-table-fee-transactions) | 关联实体 ID（外键） | 中 | `2790684179467077` |  | 📦 嵌套 |
| 2 | [`siteProfile.shop_name`](#api-table-fee-transactions) | 门店名称 | 高 | `朗朗桌球` |  | 📦 嵌套 |
| 3 | [`siteProfile.avatar`](#api-table-fee-transactions) | 头像/图片 URL | 中 | `https://oss.ficoo.vip/admin...` |  | 📦 嵌套 |
| 4 | [`siteProfile.business_tel`](#api-table-fee-transactions) | 联系电话 | 中 | `13316068642` |  | 📦 嵌套 |
| 5 | [`siteProfile.full_address`](#api-table-fee-transactions) | 待分析（API层字段） | 低 | `广东省广州市天河区丽阳街12号` |  | 📦 嵌套 |
| 6 | [`siteProfile.address`](#api-table-fee-transactions) | 待分析（API层字段） | 低 | `广东省广州市天河区天园街道朗朗桌球` |  | 📦 嵌套 |
| 7 | [`siteProfile.longitude`](#api-table-fee-transactions) | 待分析（API层字段） | 低 | `113.360321` |  | 📦 嵌套 |
| 8 | [`siteProfile.latitude`](#api-table-fee-transactions) | 待分析（API层字段） | 低 | `23.133629` |  | 📦 嵌套 |
| 9 | [`siteProfile.tenant_site_region_id`](#api-table-fee-transactions) | 关联实体 ID（外键） | 中 | `156440100` |  | 📦 嵌套 |
| 10 | [`siteProfile.auto_light`](#api-table-fee-transactions) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 11 | [`siteProfile.attendance_distance`](#api-table-fee-transactions) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 12 | [`siteProfile.wifi_name`](#api-table-fee-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 13 | [`siteProfile.wifi_password`](#api-table-fee-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 14 | [`siteProfile.customer_service_qrcode`](#api-table-fee-transactions) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 15 | [`siteProfile.customer_service_wechat`](#api-table-fee-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 16 | [`siteProfile.fixed_pay_qrCode`](#api-table-fee-transactions) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 17 | [`siteProfile.prod_env`](#api-table-fee-transactions) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 18 | [`siteProfile.light_status`](#api-table-fee-transactions) | 状态码 | 中 | `1` |  | 📦 嵌套 |
| 19 | [`siteProfile.light_type`](#api-table-fee-transactions) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 20 | [`siteProfile.site_type`](#api-table-fee-transactions) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 21 | [`siteProfile.light_token`](#api-table-fee-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 22 | [`siteProfile.site_label`](#api-table-fee-transactions) | 待分析（API层字段） | 低 | `A` |  | 📦 嵌套 |
| 23 | [`siteProfile.attendance_enabled`](#api-table-fee-transactions) | 启用/禁用开关 | 中 | `1` |  | 📦 嵌套 |
| 24 | [`siteProfile.shop_status`](#api-table-fee-transactions) | 状态码 | 中 | `1` |  | 📦 嵌套 |

</details>

**ODS 无 JSON 源** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-table-fee-transactions)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |

**ODS→DWD 未映射** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-table-fee-transactions)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |

**DWD 无 ODS 源** — 8 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dim_site | **[`scd2_start_time`](#dwd-dim-site)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本生效时间 | **⚠️ 无 ODS 源** |
| 2 | dim_site | **[`scd2_end_time`](#dwd-dim-site)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本失效时间 | **⚠️ 无 ODS 源** |
| 3 | dim_site | **[`scd2_is_current`](#dwd-dim-site)** | SCD2 缓慢变化维度元数据 | 高 | 当前版本标记 | **⚠️ 无 ODS 源** |
| 4 | dim_site | **[`scd2_version`](#dwd-dim-site)** | SCD2 缓慢变化维度元数据 | 高 | 版本号 | **⚠️ 无 ODS 源** |
| 5 | dim_site_ex | **[`scd2_start_time`](#dwd-dim-site-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 6 | dim_site_ex | **[`scd2_end_time`](#dwd-dim-site-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 7 | dim_site_ex | **[`scd2_is_current`](#dwd-dim-site-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 8 | dim_site_ex | **[`scd2_version`](#dwd-dim-site-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |

<a id="diff-assistant-service-records"></a>

#### 1.1.4 assistant_service_records 字段差异明细

<details><summary>API→ODS 未映射（嵌套对象）— 24 个</summary>

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | [`siteProfile.org_id`](#api-assistant-service-records) | 关联实体 ID（外键） | 中 | `2790684179467077` |  | 📦 嵌套 |
| 2 | [`siteProfile.shop_name`](#api-assistant-service-records) | 门店名称 | 高 | `朗朗桌球` |  | 📦 嵌套 |
| 3 | [`siteProfile.avatar`](#api-assistant-service-records) | 头像/图片 URL | 中 | `https://oss.ficoo.vip/admin...` |  | 📦 嵌套 |
| 4 | [`siteProfile.business_tel`](#api-assistant-service-records) | 联系电话 | 中 | `13316068642` |  | 📦 嵌套 |
| 5 | [`siteProfile.full_address`](#api-assistant-service-records) | 待分析（API层字段） | 低 | `广东省广州市天河区丽阳街12号` |  | 📦 嵌套 |
| 6 | [`siteProfile.address`](#api-assistant-service-records) | 待分析（API层字段） | 低 | `广东省广州市天河区天园街道朗朗桌球` |  | 📦 嵌套 |
| 7 | [`siteProfile.longitude`](#api-assistant-service-records) | 待分析（API层字段） | 低 | `113.360321` |  | 📦 嵌套 |
| 8 | [`siteProfile.latitude`](#api-assistant-service-records) | 待分析（API层字段） | 低 | `23.133629` |  | 📦 嵌套 |
| 9 | [`siteProfile.tenant_site_region_id`](#api-assistant-service-records) | 关联实体 ID（外键） | 中 | `156440100` |  | 📦 嵌套 |
| 10 | [`siteProfile.auto_light`](#api-assistant-service-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 11 | [`siteProfile.attendance_distance`](#api-assistant-service-records) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 12 | [`siteProfile.wifi_name`](#api-assistant-service-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 13 | [`siteProfile.wifi_password`](#api-assistant-service-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 14 | [`siteProfile.customer_service_qrcode`](#api-assistant-service-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 15 | [`siteProfile.customer_service_wechat`](#api-assistant-service-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 16 | [`siteProfile.fixed_pay_qrCode`](#api-assistant-service-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 17 | [`siteProfile.prod_env`](#api-assistant-service-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 18 | [`siteProfile.light_status`](#api-assistant-service-records) | 状态码 | 中 | `1` |  | 📦 嵌套 |
| 19 | [`siteProfile.light_type`](#api-assistant-service-records) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 20 | [`siteProfile.site_type`](#api-assistant-service-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 21 | [`siteProfile.light_token`](#api-assistant-service-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 22 | [`siteProfile.site_label`](#api-assistant-service-records) | 待分析（API层字段） | 低 | `A` |  | 📦 嵌套 |
| 23 | [`siteProfile.attendance_enabled`](#api-assistant-service-records) | 启用/禁用开关 | 中 | `1` |  | 📦 嵌套 |
| 24 | [`siteProfile.shop_status`](#api-assistant-service-records) | 状态码 | 中 | `1` |  | 📦 嵌套 |

</details>

**ODS 无 JSON 源** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-assistant-service-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |

**ODS→DWD 未映射** — 4 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-assistant-service-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 2 | **[`site_assistant_id`](#ods-assistant-service-records)** | 关联实体 ID（外键） | 中 | 门店维度的助教 ID | **⚠️ 无 DWD 目标** |
| 3 | **[`operator_id`](#ods-assistant-service-records)** | 关联实体 ID（外键） | 中 | 操作员 ID（录入/结算这条助教服务的员工） | **⚠️ 无 DWD 目标** |
| 4 | **[`operator_name`](#ods-assistant-service-records)** | 待分析（ODS层字段） | 低 | 操作员姓名，与 operator_id 一起使用，便于直接阅读 | **⚠️ 无 DWD 目标** |

<a id="diff-assistant-cancellation-records"></a>

#### 1.1.5 assistant_cancellation_records 字段差异明细

<details><summary>API→ODS 未映射（嵌套对象）— 24 个</summary>

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | [`siteProfile.org_id`](#api-assistant-cancellation-records) | 关联实体 ID（外键） | 中 | `2790684179467077` |  | 📦 嵌套 |
| 2 | [`siteProfile.shop_name`](#api-assistant-cancellation-records) | 门店名称 | 高 | `朗朗桌球` |  | 📦 嵌套 |
| 3 | [`siteProfile.avatar`](#api-assistant-cancellation-records) | 头像/图片 URL | 中 | `https://oss.ficoo.vip/admin...` |  | 📦 嵌套 |
| 4 | [`siteProfile.business_tel`](#api-assistant-cancellation-records) | 联系电话 | 中 | `13316068642` |  | 📦 嵌套 |
| 5 | [`siteProfile.full_address`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 | `广东省广州市天河区丽阳街12号` |  | 📦 嵌套 |
| 6 | [`siteProfile.address`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 | `广东省广州市天河区天园街道朗朗桌球` |  | 📦 嵌套 |
| 7 | [`siteProfile.longitude`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 | `113.360321` |  | 📦 嵌套 |
| 8 | [`siteProfile.latitude`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 | `23.133629` |  | 📦 嵌套 |
| 9 | [`siteProfile.tenant_site_region_id`](#api-assistant-cancellation-records) | 关联实体 ID（外键） | 中 | `156440100` |  | 📦 嵌套 |
| 10 | [`siteProfile.auto_light`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 11 | [`siteProfile.attendance_distance`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 12 | [`siteProfile.wifi_name`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 13 | [`siteProfile.wifi_password`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 14 | [`siteProfile.customer_service_qrcode`](#api-assistant-cancellation-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 15 | [`siteProfile.customer_service_wechat`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 16 | [`siteProfile.fixed_pay_qrCode`](#api-assistant-cancellation-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 17 | [`siteProfile.prod_env`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 18 | [`siteProfile.light_status`](#api-assistant-cancellation-records) | 状态码 | 中 | `1` |  | 📦 嵌套 |
| 19 | [`siteProfile.light_type`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 20 | [`siteProfile.site_type`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 21 | [`siteProfile.light_token`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 22 | [`siteProfile.site_label`](#api-assistant-cancellation-records) | 待分析（API层字段） | 低 | `A` |  | 📦 嵌套 |
| 23 | [`siteProfile.attendance_enabled`](#api-assistant-cancellation-records) | 启用/禁用开关 | 中 | `1` |  | 📦 嵌套 |
| 24 | [`siteProfile.shop_status`](#api-assistant-cancellation-records) | 状态码 | 中 | `1` |  | 📦 嵌套 |

</details>

**ODS 无 JSON 源** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-assistant-cancellation-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |

**ODS→DWD 未映射** — 2 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-assistant-cancellation-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 2 | **[`assistanton`](#ods-assistant-cancellation-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |

<a id="diff-store-goods-sales-records"></a>

#### 1.1.6 store_goods_sales_records 字段差异明细

**ODS→DWD 未映射** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`discount_price`](#ods-store-goods-sales-records)** | 金额/价格相关 | 中 | 折后单价（元/单位） | **⚠️ 无 DWD 目标** |

<a id="diff-payment-transactions"></a>

#### 1.1.7 payment_transactions 字段差异明细

<details><summary>API→ODS 未映射（嵌套对象）— 24 个</summary>

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | [`siteProfile.org_id`](#api-payment-transactions) | 关联实体 ID（外键） | 中 | `2790684179467077` |  | 📦 嵌套 |
| 2 | [`siteProfile.shop_name`](#api-payment-transactions) | 门店名称 | 高 | `朗朗桌球` |  | 📦 嵌套 |
| 3 | [`siteProfile.avatar`](#api-payment-transactions) | 头像/图片 URL | 中 | `https://oss.ficoo.vip/admin...` |  | 📦 嵌套 |
| 4 | [`siteProfile.business_tel`](#api-payment-transactions) | 联系电话 | 中 | `13316068642` |  | 📦 嵌套 |
| 5 | [`siteProfile.full_address`](#api-payment-transactions) | 待分析（API层字段） | 低 | `广东省广州市天河区丽阳街12号` |  | 📦 嵌套 |
| 6 | [`siteProfile.address`](#api-payment-transactions) | 待分析（API层字段） | 低 | `广东省广州市天河区天园街道朗朗桌球` |  | 📦 嵌套 |
| 7 | [`siteProfile.longitude`](#api-payment-transactions) | 待分析（API层字段） | 低 | `113.360321` |  | 📦 嵌套 |
| 8 | [`siteProfile.latitude`](#api-payment-transactions) | 待分析（API层字段） | 低 | `23.133629` |  | 📦 嵌套 |
| 9 | [`siteProfile.tenant_site_region_id`](#api-payment-transactions) | 关联实体 ID（外键） | 中 | `156440100` |  | 📦 嵌套 |
| 10 | [`siteProfile.auto_light`](#api-payment-transactions) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 11 | [`siteProfile.attendance_distance`](#api-payment-transactions) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 12 | [`siteProfile.wifi_name`](#api-payment-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 13 | [`siteProfile.wifi_password`](#api-payment-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 14 | [`siteProfile.customer_service_qrcode`](#api-payment-transactions) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 15 | [`siteProfile.customer_service_wechat`](#api-payment-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 16 | [`siteProfile.fixed_pay_qrCode`](#api-payment-transactions) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 17 | [`siteProfile.prod_env`](#api-payment-transactions) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 18 | [`siteProfile.light_status`](#api-payment-transactions) | 状态码 | 中 | `2` |  | 📦 嵌套 |
| 19 | [`siteProfile.light_type`](#api-payment-transactions) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 20 | [`siteProfile.site_type`](#api-payment-transactions) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 21 | [`siteProfile.light_token`](#api-payment-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 22 | [`siteProfile.site_label`](#api-payment-transactions) | 待分析（API层字段） | 低 | `A` |  | 📦 嵌套 |
| 23 | [`siteProfile.attendance_enabled`](#api-payment-transactions) | 启用/禁用开关 | 中 | `1` |  | 📦 嵌套 |
| 24 | [`siteProfile.shop_status`](#api-payment-transactions) | 状态码 | 中 | `1` |  | 📦 嵌套 |

</details>

**ODS 无 JSON 源** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-payment-transactions)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |

**ODS→DWD 未映射** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-payment-transactions)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |

<a id="diff-refund-transactions"></a>

#### 1.1.8 refund_transactions 字段差异明细

<details><summary>API→ODS 未映射（嵌套对象）— 24 个</summary>

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | [`siteProfile.org_id`](#api-refund-transactions) | 关联实体 ID（外键） | 中 | `2790684179467077` |  | 📦 嵌套 |
| 2 | [`siteProfile.shop_name`](#api-refund-transactions) | 门店名称 | 高 | `朗朗桌球` |  | 📦 嵌套 |
| 3 | [`siteProfile.avatar`](#api-refund-transactions) | 头像/图片 URL | 中 | `https://oss.ficoo.vip/admin...` |  | 📦 嵌套 |
| 4 | [`siteProfile.business_tel`](#api-refund-transactions) | 联系电话 | 中 | `13316068642` |  | 📦 嵌套 |
| 5 | [`siteProfile.full_address`](#api-refund-transactions) | 待分析（API层字段） | 低 | `广东省广州市天河区丽阳街12号` |  | 📦 嵌套 |
| 6 | [`siteProfile.address`](#api-refund-transactions) | 待分析（API层字段） | 低 | `广东省广州市天河区天园街道朗朗桌球` |  | 📦 嵌套 |
| 7 | [`siteProfile.longitude`](#api-refund-transactions) | 待分析（API层字段） | 低 | `113.360321` |  | 📦 嵌套 |
| 8 | [`siteProfile.latitude`](#api-refund-transactions) | 待分析（API层字段） | 低 | `23.133629` |  | 📦 嵌套 |
| 9 | [`siteProfile.tenant_site_region_id`](#api-refund-transactions) | 关联实体 ID（外键） | 中 | `156440100` |  | 📦 嵌套 |
| 10 | [`siteProfile.auto_light`](#api-refund-transactions) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 11 | [`siteProfile.attendance_distance`](#api-refund-transactions) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 12 | [`siteProfile.wifi_name`](#api-refund-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 13 | [`siteProfile.wifi_password`](#api-refund-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 14 | [`siteProfile.customer_service_qrcode`](#api-refund-transactions) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 15 | [`siteProfile.customer_service_wechat`](#api-refund-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 16 | [`siteProfile.fixed_pay_qrCode`](#api-refund-transactions) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 17 | [`siteProfile.prod_env`](#api-refund-transactions) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 18 | [`siteProfile.light_status`](#api-refund-transactions) | 状态码 | 中 | `2` |  | 📦 嵌套 |
| 19 | [`siteProfile.light_type`](#api-refund-transactions) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 20 | [`siteProfile.site_type`](#api-refund-transactions) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 21 | [`siteProfile.light_token`](#api-refund-transactions) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 22 | [`siteProfile.site_label`](#api-refund-transactions) | 待分析（API层字段） | 低 | `A` |  | 📦 嵌套 |
| 23 | [`siteProfile.attendance_enabled`](#api-refund-transactions) | 启用/禁用开关 | 中 | `1` |  | 📦 嵌套 |
| 24 | [`siteProfile.shop_status`](#api-refund-transactions) | 状态码 | 中 | `1` |  | 📦 嵌套 |

</details>

**ODS 无 JSON 源** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-refund-transactions)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |

**ODS→DWD 未映射** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-refund-transactions)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |

<a id="diff-platform-coupon-redemption-records"></a>

#### 1.1.9 platform_coupon_redemption_records 字段差异明细

<details><summary>API→ODS 未映射（嵌套对象）— 24 个</summary>

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | [`siteProfile.org_id`](#api-platform-coupon-redemption-records) | 关联实体 ID（外键） | 中 | `2790684179467077` |  | 📦 嵌套 |
| 2 | [`siteProfile.shop_name`](#api-platform-coupon-redemption-records) | 门店名称 | 高 | `朗朗桌球` |  | 📦 嵌套 |
| 3 | [`siteProfile.avatar`](#api-platform-coupon-redemption-records) | 头像/图片 URL | 中 | `https://oss.ficoo.vip/admin...` |  | 📦 嵌套 |
| 4 | [`siteProfile.business_tel`](#api-platform-coupon-redemption-records) | 联系电话 | 中 | `13316068642` |  | 📦 嵌套 |
| 5 | [`siteProfile.full_address`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 | `广东省广州市天河区丽阳街12号` |  | 📦 嵌套 |
| 6 | [`siteProfile.address`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 | `广东省广州市天河区天园街道朗朗桌球` |  | 📦 嵌套 |
| 7 | [`siteProfile.longitude`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 | `113.360321` |  | 📦 嵌套 |
| 8 | [`siteProfile.latitude`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 | `23.133629` |  | 📦 嵌套 |
| 9 | [`siteProfile.tenant_site_region_id`](#api-platform-coupon-redemption-records) | 关联实体 ID（外键） | 中 | `156440100` |  | 📦 嵌套 |
| 10 | [`siteProfile.auto_light`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 11 | [`siteProfile.attendance_distance`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 12 | [`siteProfile.wifi_name`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 13 | [`siteProfile.wifi_password`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 14 | [`siteProfile.customer_service_qrcode`](#api-platform-coupon-redemption-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 15 | [`siteProfile.customer_service_wechat`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 16 | [`siteProfile.fixed_pay_qrCode`](#api-platform-coupon-redemption-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 17 | [`siteProfile.prod_env`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 18 | [`siteProfile.light_status`](#api-platform-coupon-redemption-records) | 状态码 | 中 | `2` |  | 📦 嵌套 |
| 19 | [`siteProfile.light_type`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 20 | [`siteProfile.site_type`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 21 | [`siteProfile.light_token`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 22 | [`siteProfile.site_label`](#api-platform-coupon-redemption-records) | 待分析（API层字段） | 低 | `A` |  | 📦 嵌套 |
| 23 | [`siteProfile.attendance_enabled`](#api-platform-coupon-redemption-records) | 启用/禁用开关 | 中 | `1` |  | 📦 嵌套 |
| 24 | [`siteProfile.shop_status`](#api-platform-coupon-redemption-records) | 状态码 | 中 | `1` |  | 📦 嵌套 |

</details>

**ODS 无 JSON 源** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-platform-coupon-redemption-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |

**ODS→DWD 未映射** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-platform-coupon-redemption-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |

<a id="diff-member-profiles"></a>

#### 1.1.10 member_profiles 字段差异明细

**DWD 无 ODS 源** — 9 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dim_member | **[`update_time`](#dwd-dim-member)** | 记录更新时间 | 高 | 更新时间 | **⚠️ 无 ODS 源** |
| 2 | dim_member | **[`scd2_start_time`](#dwd-dim-member)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本生效时间 | **⚠️ 无 ODS 源** |
| 3 | dim_member | **[`scd2_end_time`](#dwd-dim-member)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本失效时间 | **⚠️ 无 ODS 源** |
| 4 | dim_member | **[`scd2_is_current`](#dwd-dim-member)** | SCD2 缓慢变化维度元数据 | 高 | 当前版本标记 | **⚠️ 无 ODS 源** |
| 5 | dim_member | **[`scd2_version`](#dwd-dim-member)** | SCD2 缓慢变化维度元数据 | 高 | 版本号 | **⚠️ 无 ODS 源** |
| 6 | dim_member_ex | **[`scd2_start_time`](#dwd-dim-member-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 7 | dim_member_ex | **[`scd2_end_time`](#dwd-dim-member-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 8 | dim_member_ex | **[`scd2_is_current`](#dwd-dim-member-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 9 | dim_member_ex | **[`scd2_version`](#dwd-dim-member-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |

<a id="diff-member-stored-value-cards"></a>

#### 1.1.11 member_stored_value_cards 字段差异明细

**ODS 无 JSON 源** — 4 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`goodscategoryid`](#ods-member-stored-value-cards)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 2 | **[`tableareaid`](#ods-member-stored-value-cards)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 3 | **[`pdassisnatlevel`](#ods-member-stored-value-cards)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 4 | **[`cxassisnatlevel`](#ods-member-stored-value-cards)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |

**DWD 无 ODS 源** — 8 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dim_member_card_account | **[`scd2_start_time`](#dwd-dim-member-card-account)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本生效时间 | **⚠️ 无 ODS 源** |
| 2 | dim_member_card_account | **[`scd2_end_time`](#dwd-dim-member-card-account)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本失效时间 | **⚠️ 无 ODS 源** |
| 3 | dim_member_card_account | **[`scd2_is_current`](#dwd-dim-member-card-account)** | SCD2 缓慢变化维度元数据 | 高 | 当前版本标记 | **⚠️ 无 ODS 源** |
| 4 | dim_member_card_account | **[`scd2_version`](#dwd-dim-member-card-account)** | SCD2 缓慢变化维度元数据 | 高 | 版本号 | **⚠️ 无 ODS 源** |
| 5 | dim_member_card_account_ex | **[`scd2_start_time`](#dwd-dim-member-card-account-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 6 | dim_member_card_account_ex | **[`scd2_end_time`](#dwd-dim-member-card-account-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 7 | dim_member_card_account_ex | **[`scd2_is_current`](#dwd-dim-member-card-account-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 8 | dim_member_card_account_ex | **[`scd2_version`](#dwd-dim-member-card-account-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |

<a id="diff-member-balance-changes"></a>

#### 1.1.12 member_balance_changes 字段差异明细

**ODS→DWD 未映射** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`relate_id`](#ods-member-balance-changes)** | 关联实体 ID（外键） | 中 | 例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ... | **⚠️ 无 DWD 目标** |

**DWD 无 ODS 源** — 1 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dwd_member_balance_change | **[`principal_change_amount`](#dwd-dwd-member-balance-change)** | 金额/价格相关 | 中 | 本金变动金额（正=增加，负=减少） | **⚠️ 无 ODS 源** |

<a id="diff-recharge-settlements"></a>

#### 1.1.13 recharge_settlements 字段差异明细

<details><summary>API→ODS 未映射（嵌套对象）— 25 个</summary>

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | [`siteProfile.org_id`](#api-recharge-settlements) | 关联实体 ID（外键） | 中 | `2790684179467077` |  | 📦 嵌套 |
| 2 | [`siteProfile.shop_name`](#api-recharge-settlements) | 门店名称 | 高 | `朗朗桌球` |  | 📦 嵌套 |
| 3 | [`siteProfile.avatar`](#api-recharge-settlements) | 头像/图片 URL | 中 | `https://oss.ficoo.vip/admin...` |  | 📦 嵌套 |
| 4 | [`siteProfile.business_tel`](#api-recharge-settlements) | 联系电话 | 中 | `13316068642` |  | 📦 嵌套 |
| 5 | [`siteProfile.full_address`](#api-recharge-settlements) | 待分析（API层字段） | 低 | `广东省广州市天河区丽阳街12号` |  | 📦 嵌套 |
| 6 | [`siteProfile.address`](#api-recharge-settlements) | 待分析（API层字段） | 低 | `广东省广州市天河区天园街道朗朗桌球` |  | 📦 嵌套 |
| 7 | [`siteProfile.longitude`](#api-recharge-settlements) | 待分析（API层字段） | 低 | `113.360321` |  | 📦 嵌套 |
| 8 | [`siteProfile.latitude`](#api-recharge-settlements) | 待分析（API层字段） | 低 | `23.133629` |  | 📦 嵌套 |
| 9 | [`siteProfile.tenant_site_region_id`](#api-recharge-settlements) | 关联实体 ID（外键） | 中 | `156440100` |  | 📦 嵌套 |
| 10 | [`siteProfile.tenant_id`](#api-recharge-settlements) | 关联实体 ID（外键） | 中 | `2790683160709957` |  | 📦 嵌套 |
| 11 | [`siteProfile.auto_light`](#api-recharge-settlements) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 12 | [`siteProfile.attendance_distance`](#api-recharge-settlements) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 13 | [`siteProfile.wifi_name`](#api-recharge-settlements) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 14 | [`siteProfile.wifi_password`](#api-recharge-settlements) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 15 | [`siteProfile.customer_service_qrcode`](#api-recharge-settlements) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 16 | [`siteProfile.customer_service_wechat`](#api-recharge-settlements) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 17 | [`siteProfile.fixed_pay_qrCode`](#api-recharge-settlements) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 18 | [`siteProfile.prod_env`](#api-recharge-settlements) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 19 | [`siteProfile.light_status`](#api-recharge-settlements) | 状态码 | 中 | `1` |  | 📦 嵌套 |
| 20 | [`siteProfile.light_type`](#api-recharge-settlements) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 21 | [`siteProfile.site_type`](#api-recharge-settlements) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 22 | [`siteProfile.light_token`](#api-recharge-settlements) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 23 | [`siteProfile.site_label`](#api-recharge-settlements) | 待分析（API层字段） | 低 | `A` |  | 📦 嵌套 |
| 24 | [`siteProfile.attendance_enabled`](#api-recharge-settlements) | 启用/禁用开关 | 中 | `1` |  | 📦 嵌套 |
| 25 | [`siteProfile.shop_status`](#api-recharge-settlements) | 状态码 | 中 | `1` |  | 📦 嵌套 |

</details>

**ODS→DWD 未映射** — 5 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`electricityadjustmoney`](#ods-recharge-settlements)** | 金额/价格相关 | 中 | 电费调整金额 | **⚠️ 无 DWD 目标** |
| 2 | **[`electricitymoney`](#ods-recharge-settlements)** | 金额/价格相关 | 中 | 电费金额 | **⚠️ 无 DWD 目标** |
| 3 | **[`mervousalesamount`](#ods-recharge-settlements)** | 金额/价格相关 | 中 | 商户券销售额 | **⚠️ 无 DWD 目标** |
| 4 | **[`plcouponsaleamount`](#ods-recharge-settlements)** | 金额/价格相关 | 中 | 平台券销售额 | **⚠️ 无 DWD 目标** |
| 5 | **[`realelectricitymoney`](#ods-recharge-settlements)** | 金额/价格相关 | 中 | 实际电费金额 | **⚠️ 无 DWD 目标** |

**DWD 无 ODS 源** — 5 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dwd_recharge_order | **[`pl_coupon_sale_amount`](#dwd-dwd-recharge-order)** | 金额/价格相关 | 中 | 平台券销售金额 | **⚠️ 无 ODS 源** |
| 2 | dwd_recharge_order | **[`mervou_sales_amount`](#dwd-dwd-recharge-order)** | 金额/价格相关 | 中 | 美团/大众点评等平台销售金额 | **⚠️ 无 ODS 源** |
| 3 | dwd_recharge_order | **[`electricity_money`](#dwd-dwd-recharge-order)** | 金额/价格相关 | 中 | 电费金额 | **⚠️ 无 ODS 源** |
| 4 | dwd_recharge_order | **[`real_electricity_money`](#dwd-dwd-recharge-order)** | 金额/价格相关 | 中 | 实际电费金额 | **⚠️ 无 ODS 源** |
| 5 | dwd_recharge_order | **[`electricity_adjust_money`](#dwd-dwd-recharge-order)** | 金额/价格相关 | 中 | 电费调整金额 | **⚠️ 无 ODS 源** |

<a id="diff-group-buy-packages"></a>

#### 1.1.14 group_buy_packages 字段差异明细

**API→ODS 未映射（平层）** — 2 个

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | **[`tenantTableAreaIdList[]`](#api-group-buy-packages)** | 待分析（API层字段） | 低 | `2791960001957765`, `2791961347968901`, `2791961060364165`, `2791961709907845`, `2791960521691013` |  | **⚠️ 未映射** |
| 2 | **[`tableAreaNameList[]`](#api-group-buy-packages)** | 待分析（API层字段） | 低 | `A区`, `斯诺克区`, `VIP包厢`, `K包`, `B区` |  | **⚠️ 未映射** |

**DWD 无 ODS 源** — 8 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dim_groupbuy_package | **[`scd2_start_time`](#dwd-dim-groupbuy-package)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本生效时间 | **⚠️ 无 ODS 源** |
| 2 | dim_groupbuy_package | **[`scd2_end_time`](#dwd-dim-groupbuy-package)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本失效时间 | **⚠️ 无 ODS 源** |
| 3 | dim_groupbuy_package | **[`scd2_is_current`](#dwd-dim-groupbuy-package)** | SCD2 缓慢变化维度元数据 | 高 | 当前版本标记 | **⚠️ 无 ODS 源** |
| 4 | dim_groupbuy_package | **[`scd2_version`](#dwd-dim-groupbuy-package)** | SCD2 缓慢变化维度元数据 | 高 | 版本号 | **⚠️ 无 ODS 源** |
| 5 | dim_groupbuy_package_ex | **[`scd2_start_time`](#dwd-dim-groupbuy-package-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 6 | dim_groupbuy_package_ex | **[`scd2_end_time`](#dwd-dim-groupbuy-package-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 7 | dim_groupbuy_package_ex | **[`scd2_is_current`](#dwd-dim-groupbuy-package-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 8 | dim_groupbuy_package_ex | **[`scd2_version`](#dwd-dim-groupbuy-package-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |

<a id="diff-goods-stock-summary"></a>

#### 1.1.15 goods_stock_summary 字段差异明细

**ODS→DWD 未映射** — 14 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`sitegoodsid`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 2 | **[`goodsname`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 3 | **[`goodsunit`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 4 | **[`goodscategoryid`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 5 | **[`goodscategorysecondid`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 6 | **[`categoryname`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 7 | **[`rangestartstock`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 8 | **[`rangeendstock`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 9 | **[`rangein`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 10 | **[`rangeout`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 11 | **[`rangesale`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 12 | **[`rangesalemoney`](#ods-goods-stock-summary)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 13 | **[`rangeinventory`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 14 | **[`currentstock`](#ods-goods-stock-summary)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |

<a id="diff-goods-stock-movements"></a>

#### 1.1.16 goods_stock_movements 字段差异明细

**ODS→DWD 未映射** — 19 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`sitegoodsstockid`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 2 | **[`tenantid`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 3 | **[`siteid`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 4 | **[`sitegoodsid`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 5 | **[`goodsname`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 6 | **[`goodscategoryid`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 7 | **[`goodssecondcategoryid`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 8 | **[`unit`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | 库存计量单位 | **⚠️ 无 DWD 目标** |
| 9 | **[`price`](#ods-goods-stock-movements)** | 金额/价格相关 | 中 | 商品单价（单位金额） | **⚠️ 无 DWD 目标** |
| 10 | **[`stocktype`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 11 | **[`changenum`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 12 | **[`startnum`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 13 | **[`endnum`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 14 | **[`changenuma`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 15 | **[`startnuma`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 16 | **[`endnuma`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 17 | **[`remark`](#ods-goods-stock-movements)** | 备注/说明文本 | 中 | 备注信息，用于手工记录本次变更的特殊原因说明（例如“盘点差异调整”“报损”） | **⚠️ 无 DWD 目标** |
| 18 | **[`operatorname`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 19 | **[`createtime`](#ods-goods-stock-movements)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |

<a id="diff-site-tables-master"></a>

#### 1.1.17 site_tables_master 字段差异明细

**ODS 无 JSON 源** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`appletQrCodeUrl`](#ods-site-tables-master)** | 链接/二维码 | 中 | （待补充） | **⚠️ 无 JSON 源** |

**ODS→DWD 未映射** — 14 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`sitename`](#ods-site-tables-master)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 2 | **[`appletQrCodeUrl`](#ods-site-tables-master)** | 链接/二维码 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 3 | **[`audit_status`](#ods-site-tables-master)** | 状态码 | 中 | 当前值：全部为 2 | **⚠️ 无 DWD 目标** |
| 4 | **[`charge_free`](#ods-site-tables-master)** | 待分析（ODS层字段） | 低 | 当前值：全部为 0 | **⚠️ 无 DWD 目标** |
| 5 | **[`create_time`](#ods-site-tables-master)** | 记录创建时间 | 高 | 台桌配置的创建时间或最近一次创建/复制时间 | **⚠️ 无 DWD 目标** |
| 6 | **[`delay_lights_time`](#ods-site-tables-master)** | 时间戳字段 | 中 | 台灯熄灭延迟时间（单位多半是秒或分钟），用于结账后延时关灯 | **⚠️ 无 DWD 目标** |
| 7 | **[`is_rest_area`](#ods-site-tables-master)** | 布尔标志位 | 中 | 当前值：全部为 0 | **⚠️ 无 DWD 目标** |
| 8 | **[`light_status`](#ods-site-tables-master)** | 状态码 | 中 | 来自 JSON 导出的原始字段，用于保留业务取值 | **⚠️ 无 DWD 目标** |
| 9 | **[`only_allow_groupon`](#ods-site-tables-master)** | 待分析（ODS层字段） | 低 | 小程序二维码 URL | **⚠️ 无 DWD 目标** |
| 10 | **[`order_delay_time`](#ods-site-tables-master)** | 时间戳字段 | 中 | 订单层面允许的“自动延时时长”（例如到点后自动延长多少时间继续计费） | **⚠️ 无 DWD 目标** |
| 11 | **[`self_table`](#ods-site-tables-master)** | 待分析（ODS层字段） | 低 | 当前值：全部为 1 | **⚠️ 无 DWD 目标** |
| 12 | **[`tablestatusname`](#ods-site-tables-master)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 13 | **[`temporary_light_second`](#ods-site-tables-master)** | 待分析（ODS层字段） | 低 | 临时点灯时长（秒），例如手动临时开灯一段时间 | **⚠️ 无 DWD 目标** |
| 14 | **[`virtual_table`](#ods-site-tables-master)** | 待分析（ODS层字段） | 低 | 当前值：全部为 0 | **⚠️ 无 DWD 目标** |

**DWD 无 ODS 源** — 8 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dim_table | **[`scd2_start_time`](#dwd-dim-table)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本生效时间 | **⚠️ 无 ODS 源** |
| 2 | dim_table | **[`scd2_end_time`](#dwd-dim-table)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本失效时间 | **⚠️ 无 ODS 源** |
| 3 | dim_table | **[`scd2_is_current`](#dwd-dim-table)** | SCD2 缓慢变化维度元数据 | 高 | 当前版本标记 | **⚠️ 无 ODS 源** |
| 4 | dim_table | **[`scd2_version`](#dwd-dim-table)** | SCD2 缓慢变化维度元数据 | 高 | 版本号 | **⚠️ 无 ODS 源** |
| 5 | dim_table_ex | **[`scd2_start_time`](#dwd-dim-table-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 6 | dim_table_ex | **[`scd2_end_time`](#dwd-dim-table-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 7 | dim_table_ex | **[`scd2_is_current`](#dwd-dim-table-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 8 | dim_table_ex | **[`scd2_version`](#dwd-dim-table-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |

<a id="diff-stock-goods-category-tree"></a>

#### 1.1.18 stock_goods_category_tree 字段差异明细

**ODS 无 JSON 源** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`categoryboxes`](#ods-stock-goods-category-tree)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |

**ODS→DWD 未映射** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`categoryboxes`](#ods-stock-goods-category-tree)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |

**DWD 无 ODS 源** — 4 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dim_goods_category | **[`scd2_start_time`](#dwd-dim-goods-category)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本生效时间 | **⚠️ 无 ODS 源** |
| 2 | dim_goods_category | **[`scd2_end_time`](#dwd-dim-goods-category)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本失效时间 | **⚠️ 无 ODS 源** |
| 3 | dim_goods_category | **[`scd2_is_current`](#dwd-dim-goods-category)** | SCD2 缓慢变化维度元数据 | 高 | 当前版本标记 | **⚠️ 无 ODS 源** |
| 4 | dim_goods_category | **[`scd2_version`](#dwd-dim-goods-category)** | SCD2 缓慢变化维度元数据 | 高 | 版本号 | **⚠️ 无 ODS 源** |

<a id="diff-store-goods-master"></a>

#### 1.1.19 store_goods_master 字段差异明细

**API→ODS 未映射（平层）** — 1 个

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | **[`time_slot_sale`](#api-store-goods-master)** | 待分析（API层字段） | 低 | `2` |  | **⚠️ 未映射** |

<details><summary>API→ODS 未映射（嵌套对象）— 4 个</summary>

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | [`goodsStockWarningInfo.site_goods_id`](#api-store-goods-master) | 关联实体 ID（外键） | 中 | `0` |  | 📦 嵌套 |
| 2 | [`goodsStockWarningInfo.sales_day`](#api-store-goods-master) | 待分析（API层字段） | 低 | `0.0` |  | 📦 嵌套 |
| 3 | [`goodsStockWarningInfo.warning_day_max`](#api-store-goods-master) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 4 | [`goodsStockWarningInfo.warning_day_min`](#api-store-goods-master) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |

</details>

**ODS→DWD 未映射** — 2 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`batch_stock_quantity`](#ods-store-goods-master)** | 待分析（ODS层字段） | 低 | 当前“批次”的库存数量（主单位） | **⚠️ 无 DWD 目标** |
| 2 | **[`provisional_total_cost`](#ods-store-goods-master)** | 金额/价格相关 | 中 | 暂估总成本，单位为元 | **⚠️ 无 DWD 目标** |

**DWD 无 ODS 源** — 8 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dim_store_goods | **[`scd2_start_time`](#dwd-dim-store-goods)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本生效时间 | **⚠️ 无 ODS 源** |
| 2 | dim_store_goods | **[`scd2_end_time`](#dwd-dim-store-goods)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本失效时间 | **⚠️ 无 ODS 源** |
| 3 | dim_store_goods | **[`scd2_is_current`](#dwd-dim-store-goods)** | SCD2 缓慢变化维度元数据 | 高 | 当前版本标记 | **⚠️ 无 ODS 源** |
| 4 | dim_store_goods | **[`scd2_version`](#dwd-dim-store-goods)** | SCD2 缓慢变化维度元数据 | 高 | 版本号 | **⚠️ 无 ODS 源** |
| 5 | dim_store_goods_ex | **[`scd2_start_time`](#dwd-dim-store-goods-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 6 | dim_store_goods_ex | **[`scd2_end_time`](#dwd-dim-store-goods-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 7 | dim_store_goods_ex | **[`scd2_is_current`](#dwd-dim-store-goods-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 8 | dim_store_goods_ex | **[`scd2_version`](#dwd-dim-store-goods-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |

<a id="diff-table-fee-discount-records"></a>

#### 1.1.20 table_fee_discount_records 字段差异明细

<details><summary>API→ODS 未映射（嵌套对象）— 25 个</summary>

| # | JSON 字段 | 推测用途 | 置信度 | 示例值 | 说明 | 状态 |
|---|----------|---------|-------|-------|------|------|
| 1 | [`tableProfile.ewelink_client_id`](#api-table-fee-discount-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 2 | [`siteProfile.org_id`](#api-table-fee-discount-records) | 关联实体 ID（外键） | 中 | `2790684179467077` |  | 📦 嵌套 |
| 3 | [`siteProfile.shop_name`](#api-table-fee-discount-records) | 门店名称 | 高 | `朗朗桌球` |  | 📦 嵌套 |
| 4 | [`siteProfile.avatar`](#api-table-fee-discount-records) | 头像/图片 URL | 中 | `https://oss.ficoo.vip/admin...` |  | 📦 嵌套 |
| 5 | [`siteProfile.business_tel`](#api-table-fee-discount-records) | 联系电话 | 中 | `13316068642` |  | 📦 嵌套 |
| 6 | [`siteProfile.full_address`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 | `广东省广州市天河区丽阳街12号` |  | 📦 嵌套 |
| 7 | [`siteProfile.address`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 | `广东省广州市天河区天园街道朗朗桌球` |  | 📦 嵌套 |
| 8 | [`siteProfile.longitude`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 | `113.360321` |  | 📦 嵌套 |
| 9 | [`siteProfile.latitude`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 | `23.133629` |  | 📦 嵌套 |
| 10 | [`siteProfile.tenant_site_region_id`](#api-table-fee-discount-records) | 关联实体 ID（外键） | 中 | `156440100` |  | 📦 嵌套 |
| 11 | [`siteProfile.auto_light`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 12 | [`siteProfile.attendance_distance`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 13 | [`siteProfile.wifi_name`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 14 | [`siteProfile.wifi_password`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 15 | [`siteProfile.customer_service_qrcode`](#api-table-fee-discount-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 16 | [`siteProfile.customer_service_wechat`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 17 | [`siteProfile.fixed_pay_qrCode`](#api-table-fee-discount-records) | 链接/二维码 | 中 |  |  | 📦 嵌套 |
| 18 | [`siteProfile.prod_env`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 19 | [`siteProfile.light_status`](#api-table-fee-discount-records) | 状态码 | 中 | `2` |  | 📦 嵌套 |
| 20 | [`siteProfile.light_type`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 | `0` |  | 📦 嵌套 |
| 21 | [`siteProfile.site_type`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 | `1` |  | 📦 嵌套 |
| 22 | [`siteProfile.light_token`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 |  |  | 📦 嵌套 |
| 23 | [`siteProfile.site_label`](#api-table-fee-discount-records) | 待分析（API层字段） | 低 | `A` |  | 📦 嵌套 |
| 24 | [`siteProfile.attendance_enabled`](#api-table-fee-discount-records) | 启用/禁用开关 | 中 | `1` |  | 📦 嵌套 |
| 25 | [`siteProfile.shop_status`](#api-table-fee-discount-records) | 状态码 | 中 | `1` |  | 📦 嵌套 |

</details>

**ODS 无 JSON 源** — 2 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-table-fee-discount-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 2 | **[`tableprofile`](#ods-table-fee-discount-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |

**ODS→DWD 未映射** — 2 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`siteprofile`](#ods-table-fee-discount-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 2 | **[`tableprofile`](#ods-table-fee-discount-records)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |

<a id="diff-tenant-goods-master"></a>

#### 1.1.21 tenant_goods_master 字段差异明细

**ODS→DWD 未映射** — 1 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`commoditycode`](#ods-tenant-goods-master)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |

**DWD 无 ODS 源** — 8 个

| # | DWD 表 | DWD 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|-------|---------|-------|------|------|
| 1 | dim_tenant_goods | **[`scd2_start_time`](#dwd-dim-tenant-goods)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本生效时间 | **⚠️ 无 ODS 源** |
| 2 | dim_tenant_goods | **[`scd2_end_time`](#dwd-dim-tenant-goods)** | SCD2 缓慢变化维度元数据 | 高 | SCD2 版本失效时间 | **⚠️ 无 ODS 源** |
| 3 | dim_tenant_goods | **[`scd2_is_current`](#dwd-dim-tenant-goods)** | SCD2 缓慢变化维度元数据 | 高 | 当前版本标记 | **⚠️ 无 ODS 源** |
| 4 | dim_tenant_goods | **[`scd2_version`](#dwd-dim-tenant-goods)** | SCD2 缓慢变化维度元数据 | 高 | 版本号 | **⚠️ 无 ODS 源** |
| 5 | dim_tenant_goods_ex | **[`scd2_start_time`](#dwd-dim-tenant-goods-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 6 | dim_tenant_goods_ex | **[`scd2_end_time`](#dwd-dim-tenant-goods-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 7 | dim_tenant_goods_ex | **[`scd2_is_current`](#dwd-dim-tenant-goods-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |
| 8 | dim_tenant_goods_ex | **[`scd2_version`](#dwd-dim-tenant-goods-ex)** | SCD2 缓慢变化维度元数据 | 高 |  | **⚠️ 无 ODS 源** |

<a id="diff-settlement-ticket-details"></a>

#### 1.1.22 settlement_ticket_details 字段差异明细

**ODS 无 JSON 源** — 38 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`ordersettleid`](#ods-settlement-ticket-details)** | 排序/序号 | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 2 | **[`actualpayment`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 3 | **[`adjustamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 4 | **[`assistantmanualdiscount`](#ods-settlement-ticket-details)** | 优惠/退款相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 5 | **[`balanceamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 6 | **[`cashiername`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 7 | **[`consumemoney`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 8 | **[`couponamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 9 | **[`deliveryaddress`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 10 | **[`deliveryfee`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 11 | **[`ledgeramount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 12 | **[`memberdeductamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 13 | **[`memberofferamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 14 | **[`onlinereturnamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 15 | **[`orderremark`](#ods-settlement-ticket-details)** | 排序/序号 | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 16 | **[`ordersettlenumber`](#ods-settlement-ticket-details)** | 排序/序号 | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 17 | **[`paymemberbalance`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 18 | **[`paytime`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 19 | **[`paymentmethod`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 20 | **[`pointdiscountcost`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 21 | **[`pointdiscountprice`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 22 | **[`prepaymoney`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 23 | **[`refundamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 24 | **[`returngoodsamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 25 | **[`rewardname`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 26 | **[`settletype`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 27 | **[`siteaddress`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 28 | **[`sitebusinesstel`](#ods-settlement-ticket-details)** | 联系电话 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 29 | **[`siteid`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 30 | **[`sitename`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 31 | **[`tenantid`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 32 | **[`tenantname`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 33 | **[`ticketcustomcontent`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 34 | **[`ticketremark`](#ods-settlement-ticket-details)** | 备注/说明文本 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 35 | **[`vouchermoney`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 JSON 源** |
| 36 | **[`memberprofile`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 37 | **[`orderitem`](#ods-settlement-ticket-details)** | 排序/序号 | 低 | （待补充） | **⚠️ 无 JSON 源** |
| 38 | **[`tenantmembercardlogs`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 JSON 源** |

**ODS→DWD 未映射** — 38 个

| # | ODS 列 | 推测用途 | 置信度 | 说明 | 状态 |
|---|-------|---------|-------|------|------|
| 1 | **[`ordersettleid`](#ods-settlement-ticket-details)** | 排序/序号 | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 2 | **[`actualpayment`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 3 | **[`adjustamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 4 | **[`assistantmanualdiscount`](#ods-settlement-ticket-details)** | 优惠/退款相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 5 | **[`balanceamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 6 | **[`cashiername`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 7 | **[`consumemoney`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 8 | **[`couponamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 9 | **[`deliveryaddress`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 10 | **[`deliveryfee`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 11 | **[`ledgeramount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 12 | **[`memberdeductamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 13 | **[`memberofferamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 14 | **[`onlinereturnamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 15 | **[`orderremark`](#ods-settlement-ticket-details)** | 排序/序号 | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 16 | **[`ordersettlenumber`](#ods-settlement-ticket-details)** | 排序/序号 | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 17 | **[`paymemberbalance`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 18 | **[`paytime`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 19 | **[`paymentmethod`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 20 | **[`pointdiscountcost`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 21 | **[`pointdiscountprice`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 22 | **[`prepaymoney`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 23 | **[`refundamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 24 | **[`returngoodsamount`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 25 | **[`rewardname`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 26 | **[`settletype`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 27 | **[`siteaddress`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 28 | **[`sitebusinesstel`](#ods-settlement-ticket-details)** | 联系电话 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 29 | **[`siteid`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 30 | **[`sitename`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 31 | **[`tenantid`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 32 | **[`tenantname`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 33 | **[`ticketcustomcontent`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 34 | **[`ticketremark`](#ods-settlement-ticket-details)** | 备注/说明文本 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 35 | **[`vouchermoney`](#ods-settlement-ticket-details)** | 金额/价格相关 | 中 | （待补充） | **⚠️ 无 DWD 目标** |
| 36 | **[`memberprofile`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 37 | **[`orderitem`](#ods-settlement-ticket-details)** | 排序/序号 | 低 | （待补充） | **⚠️ 无 DWD 目标** |
| 38 | **[`tenantmembercardlogs`](#ods-settlement-ticket-details)** | 待分析（ODS层字段） | 低 | （待补充） | **⚠️ 无 DWD 目标** |


## 2. 全局统计

### 2.1 JSON→ODS 映射覆盖

- JSON 字段总数：1067
- 已映射到 ODS 列：841（78.8%）
- 仅存于 payload：226（21.2%）

### 2.2 ODS→DWD 映射覆盖

- DWD 列总数：892

### 2.3 各表 JSON→ODS 映射覆盖率

| ODS 表名 | 业务描述 | JSON 字段数 | 已映射 | 仅 payload | 覆盖率 |
|---------|---------|-----------|-------|-----------|-------|
| `assistant_accounts_master` | 助教账号档案 | 62 | 62 | 0 | 100.0% |
| `store_goods_sales_records` | 门店商品销售流水 | 51 | 51 | 0 | 100.0% |
| `member_profiles` | 会员档案 | 20 | 20 | 0 | 100.0% |
| `member_stored_value_cards` | 会员储值卡 | 71 | 71 | 0 | 100.0% |
| `member_balance_changes` | 会员余额变动 | 28 | 28 | 0 | 100.0% |
| `group_buy_redemption_records` | 团购套餐核销 | 52 | 52 | 0 | 100.0% |
| `goods_stock_summary` | 库存汇总 | 14 | 14 | 0 | 100.0% |
| `goods_stock_movements` | 库存变化记录 | 19 | 19 | 0 | 100.0% |
| `site_tables_master` | 台桌维表 | 26 | 26 | 0 | 100.0% |
| `stock_goods_category_tree` | 库存商品分类树 | 20 | 20 | 0 | 100.0% |
| `tenant_goods_master` | 租户商品档案 | 32 | 32 | 0 | 100.0% |
| `group_buy_packages` | 团购套餐定义 | 40 | 38 | 2 | 95.0% |
| `store_goods_master` | 门店商品档案 | 53 | 48 | 5 | 90.6% |
| `assistant_service_records` | 助教服务流水 | 91 | 67 | 24 | 73.6% |
| `settlement_records` | 结账记录 | 92 | 67 | 25 | 72.8% |
| `recharge_settlements` | 充值结算 | 92 | 67 | 25 | 72.8% |
| `table_fee_transactions` | 台费计费流水 | 67 | 43 | 24 | 64.2% |
| `refund_transactions` | 退款流水 | 57 | 33 | 24 | 57.9% |
| `table_fee_discount_records` | 台费折扣/调账 | 55 | 30 | 25 | 54.5% |
| `platform_coupon_redemption_records` | 平台/团购券核销 | 51 | 27 | 24 | 52.9% |
| `assistant_cancellation_records` | 助教废除记录 | 38 | 14 | 24 | 36.8% |
| `payment_transactions` | 支付流水 | 36 | 12 | 24 | 33.3% |
| `settlement_ticket_details` | 结账小票详情（按 orderSettleId 逐条获取，不走常规分页） | 0 | 0 | 0 | — |

## 3. 逐表详情

### 3.1 assistant_accounts_master（助教账号档案）

- 任务代码：`ODS_ASSISTANT_ACCOUNT`
- 采样记录数：69
- API JSON 字段数：62
- ODS 列数：67
- DWD 目标表：dim_assistant, dim_assistant_ex

<a id="api-assistant-accounts-master"></a>

#### API 源字段 — assistant_accounts_master [🔗 ODS](#ods-assistant-accounts-master)

已映射 62/62，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `job_num` | string | [`job_num`](#ods-assistant-accounts-master) | 备用工号字段，目前未在该门店启用 |  |
| 2 | `shop_name` | string | [`shop_name`](#ods-assistant-accounts-master) | 门店名称，冗余字段，用于展示 | 示例: `朗朗桌球` |
| 3 | `group_id` | integer | [`group_id`](#ods-assistant-accounts-master) | 上层“分组 ID”预留字段（例如集团/事业部），本门店未使用 | 示例: `0` |
| 4 | `group_name` | string | [`group_name`](#ods-assistant-accounts-master) | group_id 对应的名称，目前为空 |  |
| 5 | `staff_profile_id` | integer | [`staff_profile_id`](#ods-assistant-accounts-master) | 人事档案 ID，与第三方 HR 系统或内部员工档案集成使用，当前未启用 | 示例: `0` |
| 6 | `ding_talk_synced` | integer | [`ding_talk_synced`](#ods-assistant-accounts-master) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `1` |
| 7 | `entry_type` | integer | [`entry_type`](#ods-assistant-accounts-master) | 来自 JSON 导出的原始字段，用于保留业务取值 | 枚举值: `1`, `3` |
| 8 | `team_name` | string | [`team_name`](#ods-assistant-accounts-master) | 团队名称，展示用，和 team_id 一一对应 | 枚举值: `2组`, `1组` |
| 9 | `entry_sign_status` | integer | [`entry_sign_status`](#ods-assistant-accounts-master) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `0` |
| 10 | `resign_sign_status` | integer | [`resign_sign_status`](#ods-assistant-accounts-master) | 离职协议签署状态，类似上面 | 示例: `0` |
| 11 | `system_role_id` | integer | [`system_role_id`](#ods-assistant-accounts-master) | 标识类 ID 字段，用于关联/定位相关实体 | 示例: `10` |
| 12 | `criticism_status` | integer | [`criticism_status`](#ods-assistant-accounts-master) | 1 × 49 | 枚举值: `1`, `2` |
| 13 | `salary_grant_enabled` | integer | [`salary_grant_enabled`](#ods-assistant-accounts-master) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `2` |
| 14 | `leave_status` | integer | [`leave_status`](#ods-assistant-accounts-master) | 0 × 21 | 枚举值: `0`, `1` |
| 15 | `id` | integer | [`id`](#ods-assistant-accounts-master) | 助教账号主键 ID，在“助教流水.json”中对应 site_assistant_id | 枚举值: `3067857612671685`, `3058170108874053`, `3056644876634181`, `3053833422211141`, `3053834039789701`, `3045477940824517`, `3027024317123653`, `3022685829761989` |
| 16 | `allow_cx` | integer | [`allow_cx`](#ods-assistant-accounts-master) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `1` |
| 17 | `assistant_no` | string | [`assistant_no`](#ods-assistant-accounts-master) | 助教工号 / 编号，便于业务侧识别 | 枚举值: `13`, `38`, `8`, `41`, `40`, `27`, `28`, `33` |
| 18 | `assistant_status` | integer | [`assistant_status`](#ods-assistant-accounts-master) | 1 × 48 | 示例: `1` |
| 19 | `avatar` | string | [`avatar`](#ods-assistant-accounts-master) | 助教头像地址 | 枚举值: `https://oss.ficoo.vip/cbb/userAvatar/1769426176673/176942617`, `https://oss.ficoo.vip/cbb/userAvatar/1768822727212/176882272`, `https://oss.ficoo.vip/cbb/userAvatar/1768831143754/176883114`, `https://oss.ficoo.vip/cbb/userAvatar/1768556565021/176855656`, `https://oss.ficoo.vip/cbb/userAvatar/1768556665960/176855666`, `https://oss.ficoo.vip/cbb/userAvatar/1768048632753/176804863`, `https://oss.ficoo.vip/maUiImages/images/defaultAvatar.png`, `https://oss.ficoo.vip/cbb/userAvatar/1764929477604/176492947` |
| 20 | `birth_date` | string | [`birth_date`](#ods-assistant-accounts-master) | 助教出生日期 | 枚举值: `0001-01-01 00:00:00`, `2025-11-01 00:00:00`, `2007-01-14 00:00:00`, `2003-11-01 00:00:00`, `2001-04-08 00:00:00`, `2004-08-16 00:00:00` |
| 21 | `charge_way` | integer | [`charge_way`](#ods-assistant-accounts-master) | 2 代表当前门店为“计时收费”，其他值（1、3 等）可能对应按局、按课时等，当前未出现 | 示例: `2` |
| 22 | `create_time` | string | [`create_time`](#ods-assistant-accounts-master) | 账号创建时间 | 枚举值: `2026-01-26 15:26:11`, `2026-01-19 19:11:32`, `2026-01-18 17:20:00`, `2026-01-16 17:40:02`, `2026-01-16 17:40:40`, `2026-01-10 20:00:24`, `2025-12-28 19:08:24`, `2025-12-25 17:35:04` |
| 23 | `cx_unit_price` | number | [`cx_unit_price`](#ods-assistant-accounts-master) | 促销时段的单价，本门店未在账号表层面设置 | 示例: `0.0` |
| 24 | `end_time` | string | [`end_time`](#ods-assistant-accounts-master) | 当前配置生效的结束日期（例如一个周期性的排班/合同周期） | 出现率 96%；枚举值: `2026-02-01 08:00:00`, `2026-01-01 08:00:00`, `2025-12-01 08:00:00`, `2025-11-01 08:00:00`, `2025-10-01 08:00:00`, `2025-09-01 08:00:00`, `2025-08-01 08:00:00` |
| 25 | `entry_time` | string | [`entry_time`](#ods-assistant-accounts-master) | 入职时间 | 枚举值: `2026-01-26 08:00:00`, `2026-01-19 08:00:00`, `2026-01-18 08:00:00`, `2026-01-16 08:00:00`, `2026-01-10 08:00:00`, `2025-12-28 08:00:00`, `2025-12-25 08:00:00`, `2025-12-24 08:00:00` |
| 26 | `gender` | integer | [`gender`](#ods-assistant-accounts-master) | 0 × 40 | 枚举值: `0`, `2` |
| 27 | `height` | number | [`height`](#ods-assistant-accounts-master) | 身高（单位：厘米） | 枚举值: `0.0`, `158.0`, `162.0`, `163.0`, `166.0`, `167.0`, `165.0`, `170.0` |
| 28 | `introduce` | string | [`introduce`](#ods-assistant-accounts-master) | 个人简介文案，预留给助教自我介绍使用 |  |
| 29 | `is_delete` | integer | [`is_delete`](#ods-assistant-accounts-master) | 逻辑删除标记（0=否，1=是） | 示例: `0` |
| 30 | `is_guaranteed` | integer | [`is_guaranteed`](#ods-assistant-accounts-master) | 布尔/开关字段，用于表示权限、可用性或状态开关 | 示例: `1` |
| 31 | `is_team_leader` | integer | [`is_team_leader`](#ods-assistant-accounts-master) | 布尔/开关字段，用于表示权限、可用性或状态开关 | 示例: `0` |
| 32 | `last_table_id` | integer | [`last_table_id`](#ods-assistant-accounts-master) | 该助教最近一次服务的球台 ID | 示例: `0` |
| 33 | `last_table_name` | string | [`last_table_name`](#ods-assistant-accounts-master) | 最近服务球台名称（展示用） |  |
| 34 | `last_update_name` | string | [`last_update_name`](#ods-assistant-accounts-master) | 最近修改该账号配置的管理员名称 | 出现率 62%；枚举值: `教练:夏滋岸`, `管理员：郑丽珊`, `助教管理员:amy`, `教练:周蒙`, `助教管理员:黄月柳` |
| 35 | `level` | integer | [`level`](#ods-assistant-accounts-master) | 10 × 24 | 枚举值: `10`, `20`, `40`, `30`, `8` |
| 36 | `light_equipment_id` | string | [`light_equipment_id`](#ods-assistant-accounts-master) | 灯控设备 ID，如果开启“助教开台自动控制灯”，会通过该字段关联到灯控硬件 |  |
| 37 | `light_status` | integer | [`light_status`](#ods-assistant-accounts-master) | 灯光控制状态，如 1=启用控制、2=不启用 或相反 | 示例: `2` |
| 38 | `mobile` | string | [`mobile`](#ods-assistant-accounts-master) | 助教手机号，用于登录绑定、通知、钉钉同步等 | 枚举值: `17606621482`, `13537431206`, `13527970519`, `17819747429`, `19521138382`, `18613137001`, `15918443696`, `19866705026` |
| 39 | `nickname` | string | [`nickname`](#ods-assistant-accounts-master) | 助教在前台展示的昵称，如“佳怡”“周周”“球球”等 | 枚举值: `渔渔`, `菲菲`, `吱吱`, `yy`, `凤梨`, `小琳`, `布丁`, `嘉嘉` |
| 40 | `online_status` | integer | [`online_status`](#ods-assistant-accounts-master) | 在线状态 | 示例: `1` |
| 41 | `order_trade_no` | integer | [`order_trade_no`](#ods-assistant-accounts-master) | 该助教最近一次关联的订单号，用于快速跳转或回溯最近服务行为 | 示例: `0` |
| 42 | `pd_unit_price` | number | [`pd_unit_price`](#ods-assistant-accounts-master) | 某种标准单价（例如“普通时段单价”），这里未在账号上配置（实际单价在助教商品或套餐配置中） | 示例: `0.0` |
| 43 | `person_org_id` | integer | [`person_org_id`](#ods-assistant-accounts-master) | 人事组织 ID，通常表示“某某门店-助教部-某小组”等层级组织 | 枚举值: `3067857612573381`, `3058170108775749`, `3056644876519493`, `3053833421785157`, `3053834039609477`, `3045477940726213`, `3027024317008965`, `3022685829663685` |
| 44 | `real_name` | string | [`real_name`](#ods-assistant-accounts-master) | 助教真实姓名，如“何海婷”“梁婷婷”等 | 枚举值: `李思怡`, `袁菲菲`, `曹金梅`, `陈研`, `黄凤丽`, `习燕琳`, `杨婧`, `王嘉琪` |
| 45 | `resign_time` | string | [`resign_time`](#ods-assistant-accounts-master) | 离职日期 | 枚举值: `2226-01-26 15:26:11`, `2026-01-23 08:00:00`, `2226-01-18 17:20:00`, `2226-01-16 17:40:02`, `2226-01-16 17:40:40`, `2226-01-10 20:00:24`, `2026-01-01 08:00:00`, `2025-12-27 08:00:00` |
| 46 | `serial_number` | integer | [`serial_number`](#ods-assistant-accounts-master) | 系统内部生成的序列号或排序标识，用于全局排序或迁移 | 枚举值: `5130`, `4955`, `5018`, `5134`, `5153`, `4726`, `4327`, `4325` |
| 47 | `show_sort` | integer | [`show_sort`](#ods-assistant-accounts-master) | 前台展示排序权重，值越小/越大对应不同的排序策略（当前看起来与 assistant_no 有一定对应关系） | 枚举值: `13`, `38`, `8`, `41`, `40`, `27`, `28`, `33` |
| 48 | `show_status` | integer | [`show_status`](#ods-assistant-accounts-master) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `1` |
| 49 | `site_id` | integer | [`site_id`](#ods-assistant-accounts-master) | 门店 ID，对应本次数据的这家球房（朗朗桌球） | 示例: `2790685415443269` |
| 50 | `site_light_cfg_id` | integer | [`site_light_cfg_id`](#ods-assistant-accounts-master) | 门店灯控配置 ID，本门店未在助教账号维度启用 | 示例: `0` |
| 51 | `staff_id` | integer | [`staff_id`](#ods-assistant-accounts-master) | 预留给“人事系统员工 ID”的字段，目前未接入或未启用 | 示例: `0` |
| 52 | `start_time` | string | [`start_time`](#ods-assistant-accounts-master) | 当前配置生效的开始日期 | 出现率 96%；枚举值: `2026-01-01 08:00:00`, `2025-12-01 08:00:00`, `2025-11-01 08:00:00`, `2025-10-01 08:00:00`, `2025-09-01 08:00:00`, `2025-08-01 08:00:00`, `2025-07-01 08:00:00` |
| 53 | `team_id` | integer | [`team_id`](#ods-assistant-accounts-master) | 助教所属团队 ID | 枚举值: `2959085810992645`, `2792011585884037` |
| 54 | `tenant_id` | integer | [`tenant_id`](#ods-assistant-accounts-master) | 品牌/租户 ID，对应“非球科技”系统中该商户的唯一标识 | 示例: `2790683160709957` |
| 55 | `update_time` | string | [`update_time`](#ods-assistant-accounts-master) | 账号最近一次被修改的时间（例如修改等级、昵称等） | 枚举值: `2026-01-28 21:32:15`, `2026-01-23 17:39:41`, `2026-01-26 19:47:04`, `2026-01-30 00:54:45`, `2026-01-30 00:54:41`, `2026-01-01 15:33:02`, `2026-01-01 15:33:31`, `2026-01-01 15:33:18` |
| 56 | `user_id` | integer | [`user_id`](#ods-assistant-accounts-master) | 系统级“用户账号 ID”，通常对应登录账号 | 枚举值: `3067857612163781`, `3058170108300613`, `3056644876077125`, `3053833420064837`, `3053834038954117`, `3045477940300229`, `3027024316582981`, `3022685829237701` |
| 57 | `video_introduction_url` | string | [`video_introduction_url`](#ods-assistant-accounts-master) | 助教个人视频介绍地址 | 枚举值: `https://oss.ficoo.vip/cbb/userVideo/1764149549870/1764149549`, `https://oss.ficoo.vip/cbb/userVideo/1753096246308/1753096246` |
| 58 | `weight` | number | [`weight`](#ods-assistant-accounts-master) | 体重（单位：公斤） | 枚举值: `0.0`, `106.0`, `102.0`, `100.0`, `90.0`, `55.0` |
| 59 | `work_status` | integer | [`work_status`](#ods-assistant-accounts-master) | 当 leave_status = 0 时，work_status = 1 | 枚举值: `1`, `2` |
| 60 | `assistant_grade` | number | [`assistant_grade`](#ods-assistant-accounts-master) | 助教综合评分（员工维度的平均分 snapshot），当前尚未启用评分 | 示例: `0.0` |
| 61 | `sum_grade` | number | [`sum_grade`](#ods-assistant-accounts-master) | 评分总和，用于计算平均分（assistant_grade = sum_grade / get_grade_time... | 示例: `0.0` |
| 62 | `get_grade_times` | integer | [`get_grade_times`](#ods-assistant-accounts-master) | 累计被评分次数 | 示例: `0` |

<a id="ods-assistant-accounts-master"></a>

#### ODS 表结构 — ods.assistant_accounts_master [🔗 API](#api-assistant-accounts-master)

共 67 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`id`](#api-assistant-accounts-master) | [`dim_assistant.assistant_id`](#dwd-dim-assistant), [`dim_assistant_ex.assistant_id`](#dwd-dim-assistant-ex) | 助教账号主键 ID，在“助教流水.json”中对应 site_assistant_id |
| 2 | `tenant_id` | bigint | [`tenant_id`](#api-assistant-accounts-master) | [`dim_assistant.tenant_id`](#dwd-dim-assistant) | 品牌/租户 ID，对应“非球科技”系统中该商户的唯一标识 |
| 3 | `site_id` | bigint | [`site_id`](#api-assistant-accounts-master) | [`dim_assistant.site_id`](#dwd-dim-assistant) | 门店 ID，对应本次数据的这家球房（朗朗桌球） |
| 4 | `assistant_no` | text | [`assistant_no`](#api-assistant-accounts-master) | [`dim_assistant.assistant_no`](#dwd-dim-assistant) | 助教工号 / 编号，便于业务侧识别 |
| 5 | `nickname` | text | [`nickname`](#api-assistant-accounts-master) | [`dim_assistant.nickname`](#dwd-dim-assistant) | 助教在前台展示的昵称，如“佳怡”“周周”“球球”等 |
| 6 | `real_name` | text | [`real_name`](#api-assistant-accounts-master) | [`dim_assistant.real_name`](#dwd-dim-assistant) | 助教真实姓名，如“何海婷”“梁婷婷”等 |
| 7 | `mobile` | text | [`mobile`](#api-assistant-accounts-master) | [`dim_assistant.mobile`](#dwd-dim-assistant) | 助教手机号，用于登录绑定、通知、钉钉同步等 |
| 8 | `team_id` | bigint | [`team_id`](#api-assistant-accounts-master) | [`dim_assistant.team_id`](#dwd-dim-assistant) | 助教所属团队 ID |
| 9 | `team_name` | text | [`team_name`](#api-assistant-accounts-master) | [`dim_assistant.team_name`](#dwd-dim-assistant) | 团队名称，展示用，和 team_id 一一对应 |
| 10 | `user_id` | bigint | [`user_id`](#api-assistant-accounts-master) | [`dim_assistant.user_id`](#dwd-dim-assistant) | 系统级“用户账号 ID”，通常对应登录账号 |
| 11 | `level` | text | [`level`](#api-assistant-accounts-master) | [`dim_assistant.level`](#dwd-dim-assistant) | 10 × 24 |
| 12 | `assistant_status` | integer | [`assistant_status`](#api-assistant-accounts-master) | [`dim_assistant.assistant_status`](#dwd-dim-assistant) | 1 × 48 |
| 13 | `work_status` | integer | [`work_status`](#api-assistant-accounts-master) | [`dim_assistant_ex.work_status`](#dwd-dim-assistant-ex) | 当 leave_status = 0 时，work_status = 1 |
| 14 | `leave_status` | integer | [`leave_status`](#api-assistant-accounts-master) | [`dim_assistant.leave_status`](#dwd-dim-assistant) | 0 × 21 |
| 15 | `entry_time` | timestamp without time zone | [`entry_time`](#api-assistant-accounts-master) | [`dim_assistant.entry_time`](#dwd-dim-assistant) | 入职时间 |
| 16 | `resign_time` | timestamp without time zone | [`resign_time`](#api-assistant-accounts-master) | [`dim_assistant.resign_time`](#dwd-dim-assistant) | 离职日期 |
| 17 | `start_time` | timestamp without time zone | [`start_time`](#api-assistant-accounts-master) | [`dim_assistant_ex.start_time`](#dwd-dim-assistant-ex) | 当前配置生效的开始日期 |
| 18 | `end_time` | timestamp without time zone | [`end_time`](#api-assistant-accounts-master) | [`dim_assistant_ex.end_time`](#dwd-dim-assistant-ex) | 当前配置生效的结束日期（例如一个周期性的排班/合同周期） |
| 19 | `create_time` | timestamp without time zone | [`create_time`](#api-assistant-accounts-master) | [`dim_assistant_ex.create_time`](#dwd-dim-assistant-ex) | 账号创建时间 |
| 20 | `update_time` | timestamp without time zone | [`update_time`](#api-assistant-accounts-master) | [`dim_assistant_ex.update_time`](#dwd-dim-assistant-ex) | 账号最近一次被修改的时间（例如修改等级、昵称等） |
| 21 | `order_trade_no` | text | [`order_trade_no`](#api-assistant-accounts-master) | [`dim_assistant_ex.order_trade_no`](#dwd-dim-assistant-ex) | 该助教最近一次关联的订单号，用于快速跳转或回溯最近服务行为 |
| 22 | `staff_id` | bigint | [`staff_id`](#api-assistant-accounts-master) | [`dim_assistant_ex.staff_id`](#dwd-dim-assistant-ex) | 预留给“人事系统员工 ID”的字段，目前未接入或未启用 |
| 23 | `staff_profile_id` | bigint | [`staff_profile_id`](#api-assistant-accounts-master) | [`dim_assistant_ex.staff_profile_id`](#dwd-dim-assistant-ex) | 人事档案 ID，与第三方 HR 系统或内部员工档案集成使用，当前未启用 |
| 24 | `system_role_id` | bigint | [`system_role_id`](#api-assistant-accounts-master) | — | 标识类 ID 字段，用于关联/定位相关实体 |
| 25 | `avatar` | text | [`avatar`](#api-assistant-accounts-master) | [`dim_assistant_ex.avatar`](#dwd-dim-assistant-ex) | 助教头像地址 |
| 26 | `birth_date` | timestamp without time zone | [`birth_date`](#api-assistant-accounts-master) | [`dim_assistant_ex.birth_date`](#dwd-dim-assistant-ex) | 助教出生日期 |
| 27 | `gender` | integer | [`gender`](#api-assistant-accounts-master) | [`dim_assistant_ex.gender`](#dwd-dim-assistant-ex) | 0 × 40 |
| 28 | `height` | numeric | [`height`](#api-assistant-accounts-master) | [`dim_assistant_ex.height`](#dwd-dim-assistant-ex) | 身高（单位：厘米） |
| 29 | `weight` | numeric | [`weight`](#api-assistant-accounts-master) | [`dim_assistant_ex.weight`](#dwd-dim-assistant-ex) | 体重（单位：公斤） |
| 30 | `job_num` | text | [`job_num`](#api-assistant-accounts-master) | — | 备用工号字段，目前未在该门店启用 |
| 31 | `show_status` | integer | [`show_status`](#api-assistant-accounts-master) | [`dim_assistant_ex.show_status`](#dwd-dim-assistant-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 32 | `show_sort` | integer | [`show_sort`](#api-assistant-accounts-master) | [`dim_assistant_ex.show_sort`](#dwd-dim-assistant-ex) | 前台展示排序权重，值越小/越大对应不同的排序策略（当前看起来与 assistant_no 有一定对应关系） |
| 33 | `sum_grade` | numeric | [`sum_grade`](#api-assistant-accounts-master) | [`dim_assistant_ex.sum_grade`](#dwd-dim-assistant-ex) | 评分总和，用于计算平均分（assistant_grade = sum_grade / get_grade_time... |
| 34 | `assistant_grade` | numeric | [`assistant_grade`](#api-assistant-accounts-master) | [`dim_assistant_ex.assistant_grade`](#dwd-dim-assistant-ex) | 助教综合评分（员工维度的平均分 snapshot），当前尚未启用评分 |
| 35 | `get_grade_times` | integer | [`get_grade_times`](#api-assistant-accounts-master) | [`dim_assistant_ex.get_grade_times`](#dwd-dim-assistant-ex) | 累计被评分次数 |
| 36 | `introduce` | text | [`introduce`](#api-assistant-accounts-master) | [`dim_assistant_ex.introduce`](#dwd-dim-assistant-ex) | 个人简介文案，预留给助教自我介绍使用 |
| 37 | `video_introduction_url` | text | [`video_introduction_url`](#api-assistant-accounts-master) | [`dim_assistant_ex.video_introduction_url`](#dwd-dim-assistant-ex) | 助教个人视频介绍地址 |
| 38 | `group_id` | bigint | [`group_id`](#api-assistant-accounts-master) | [`dim_assistant_ex.group_id`](#dwd-dim-assistant-ex) | 上层“分组 ID”预留字段（例如集团/事业部），本门店未使用 |
| 39 | `group_name` | text | [`group_name`](#api-assistant-accounts-master) | [`dim_assistant_ex.group_name`](#dwd-dim-assistant-ex) | group_id 对应的名称，目前为空 |
| 40 | `shop_name` | text | [`shop_name`](#api-assistant-accounts-master) | [`dim_assistant_ex.shop_name`](#dwd-dim-assistant-ex) | 门店名称，冗余字段，用于展示 |
| 41 | `charge_way` | integer | [`charge_way`](#api-assistant-accounts-master) | [`dim_assistant_ex.charge_way`](#dwd-dim-assistant-ex) | 2 代表当前门店为“计时收费”，其他值（1、3 等）可能对应按局、按课时等，当前未出现 |
| 42 | `entry_type` | integer | [`entry_type`](#api-assistant-accounts-master) | [`dim_assistant_ex.entry_type`](#dwd-dim-assistant-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 43 | `allow_cx` | integer | [`allow_cx`](#api-assistant-accounts-master) | [`dim_assistant_ex.allow_cx`](#dwd-dim-assistant-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 44 | `is_guaranteed` | integer | [`is_guaranteed`](#api-assistant-accounts-master) | [`dim_assistant_ex.is_guaranteed`](#dwd-dim-assistant-ex) | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| 45 | `salary_grant_enabled` | integer | [`salary_grant_enabled`](#api-assistant-accounts-master) | [`dim_assistant_ex.salary_grant_enabled`](#dwd-dim-assistant-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 46 | `light_status` | integer | [`light_status`](#api-assistant-accounts-master) | [`dim_assistant_ex.light_status`](#dwd-dim-assistant-ex) | 灯光控制状态，如 1=启用控制、2=不启用 或相反 |
| 47 | `online_status` | integer | [`online_status`](#api-assistant-accounts-master) | [`dim_assistant_ex.online_status`](#dwd-dim-assistant-ex) | 在线状态 |
| 48 | `is_delete` | integer | [`is_delete`](#api-assistant-accounts-master) | [`dim_assistant_ex.is_delete`](#dwd-dim-assistant-ex) | 逻辑删除标记（0=否，1=是） |
| 49 | `cx_unit_price` | numeric | [`cx_unit_price`](#api-assistant-accounts-master) | — | 促销时段的单价，本门店未在账号表层面设置 |
| 50 | `pd_unit_price` | numeric | [`pd_unit_price`](#api-assistant-accounts-master) | — | 某种标准单价（例如“普通时段单价”），这里未在账号上配置（实际单价在助教商品或套餐配置中） |
| 51 | `last_table_id` | bigint | [`last_table_id`](#api-assistant-accounts-master) | [`dim_assistant_ex.last_table_id`](#dwd-dim-assistant-ex) | 该助教最近一次服务的球台 ID |
| 52 | `last_table_name` | text | [`last_table_name`](#api-assistant-accounts-master) | [`dim_assistant_ex.last_table_name`](#dwd-dim-assistant-ex) | 最近服务球台名称（展示用） |
| 53 | `person_org_id` | bigint | [`person_org_id`](#api-assistant-accounts-master) | [`dim_assistant_ex.person_org_id`](#dwd-dim-assistant-ex) | 人事组织 ID，通常表示“某某门店-助教部-某小组”等层级组织 |
| 54 | `serial_number` | bigint | [`serial_number`](#api-assistant-accounts-master) | [`dim_assistant_ex.serial_number`](#dwd-dim-assistant-ex) | 系统内部生成的序列号或排序标识，用于全局排序或迁移 |
| 55 | `is_team_leader` | integer | [`is_team_leader`](#api-assistant-accounts-master) | [`dim_assistant_ex.is_team_leader`](#dwd-dim-assistant-ex) | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| 56 | `criticism_status` | integer | [`criticism_status`](#api-assistant-accounts-master) | [`dim_assistant_ex.criticism_status`](#dwd-dim-assistant-ex) | 1 × 49 |
| 57 | `last_update_name` | text | [`last_update_name`](#api-assistant-accounts-master) | [`dim_assistant_ex.last_update_name`](#dwd-dim-assistant-ex) | 最近修改该账号配置的管理员名称 |
| 58 | `ding_talk_synced` | integer | [`ding_talk_synced`](#api-assistant-accounts-master) | [`dim_assistant_ex.ding_talk_synced`](#dwd-dim-assistant-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 59 | `site_light_cfg_id` | bigint | [`site_light_cfg_id`](#api-assistant-accounts-master) | [`dim_assistant_ex.site_light_cfg_id`](#dwd-dim-assistant-ex) | 门店灯控配置 ID，本门店未在助教账号维度启用 |
| 60 | `light_equipment_id` | text | [`light_equipment_id`](#api-assistant-accounts-master) | [`dim_assistant_ex.light_equipment_id`](#dwd-dim-assistant-ex) | 灯控设备 ID，如果开启“助教开台自动控制灯”，会通过该字段关联到灯控硬件 |
| 61 | `entry_sign_status` | integer | [`entry_sign_status`](#api-assistant-accounts-master) | [`dim_assistant_ex.entry_sign_status`](#dwd-dim-assistant-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 62 | `resign_sign_status` | integer | [`resign_sign_status`](#api-assistant-accounts-master) | [`dim_assistant_ex.resign_sign_status`](#dwd-dim-assistant-ex) | 离职协议签署状态，类似上面 |
| 63 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 64 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 65 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 66 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 67 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dim-assistant"></a>

#### DWD 表结构 — dwd.dim_assistant [🔗 ODS](#ods-assistant-accounts-master)

共 19 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `assistant_id` | bigint | [`id`](#ods-assistant-accounts-master) | 直接 | 助教唯一标识 ID |
| 2 | `user_id` | bigint | [`user_id`](#ods-assistant-accounts-master) | 直接 | 关联用户 ID（当前数据全为 0，**[作用待确认]**） |
| 3 | `assistant_no` | text | [`assistant_no`](#ods-assistant-accounts-master) | 直接 | 助教工号，如 "11"、"27" |
| 4 | `real_name` | text | [`real_name`](#ods-assistant-accounts-master) | 直接 | 真实姓名，如 "梁婷婷"、"周佳怡" |
| 5 | `nickname` | text | [`nickname`](#ods-assistant-accounts-master) | 直接 | 昵称/花名，如 "柚子"、"周周"、"Amy" |
| 6 | `mobile` | text | [`mobile`](#ods-assistant-accounts-master) | 直接 | 手机号码 |
| 7 | `tenant_id` | bigint | [`tenant_id`](#ods-assistant-accounts-master) | 直接 | 租户 ID（当前值: 2790683160709957） |
| 8 | `site_id` | bigint | [`site_id`](#ods-assistant-accounts-master) | 直接 | 门店 ID → dim_site（当前值: 2790685415443269） |
| 9 | `team_id` | bigint | [`team_id`](#ods-assistant-accounts-master) | 直接 | 团队 ID |
| 10 | `team_name` | text | [`team_name`](#ods-assistant-accounts-master) | 直接 | 团队名称。**枚举值**: "1组"(对应 team_id = 2792011585884037), "2组"(对... |
| 11 | `level` | integer | [`level`](#ods-assistant-accounts-master) | 直接 | 助教等级。**枚举值**: 8 = 助教管理, 10 = 初级, 20 = 中级, 30 = 高级, 40 =专家 |
| 12 | `entry_time` | timestamp with time zone | [`entry_time`](#ods-assistant-accounts-master) | 直接 | 入职时间 |
| 13 | `resign_time` | timestamp with time zone | [`resign_time`](#ods-assistant-accounts-master) | 直接 | 离职时间（远未来日期如 2225-xx-xx 表示在职） |
| 14 | `leave_status` | integer | [`leave_status`](#ods-assistant-accounts-master) | 直接 | 在职状态。**枚举值**: 0 = 在职, 1 = 已离职 |
| 15 | `assistant_status` | integer | [`assistant_status`](#ods-assistant-accounts-master) | 直接 | 观察者状态。**枚举值**: 1 = 为非观察者, 2 = 为观察者。 |
| 16 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 版本生效时间 |
| 17 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 版本失效时间 |
| 18 | `scd2_is_current` | integer | — | SCD2 | 当前版本标记 |
| 19 | `scd2_version` | integer | — | SCD2 | 版本号 |

<a id="dwd-dim-assistant-ex"></a>

#### DWD 表结构 — dwd.dim_assistant_ex [🔗 ODS](#ods-assistant-accounts-master)

共 48 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `assistant_id` | bigint | [`id`](#ods-assistant-accounts-master) | 直接 | 字段重命名 |
| 2 | `gender` | integer | [`gender`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 3 | `birth_date` | timestamp with time zone | [`birth_date`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 4 | `avatar` | text | [`avatar`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 5 | `introduce` | text | [`introduce`](#ods-assistant-accounts-master) | 直接 | 维度字段，用于补充维度属性 |
| 6 | `video_introduction_url` | text | [`video_introduction_url`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 7 | `height` | numeric | [`height`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 8 | `weight` | numeric | [`weight`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 9 | `shop_name` | text | [`shop_name`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 10 | `group_id` | bigint | [`group_id`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 11 | `group_name` | text | [`group_name`](#ods-assistant-accounts-master) | 直接 | 名称字段，用于展示与辅助识别 |
| 12 | `person_org_id` | bigint | [`person_org_id`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 13 | `staff_id` | bigint | [`staff_id`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 14 | `staff_profile_id` | bigint | [`staff_profile_id`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 15 | `assistant_grade` | double precision | [`assistant_grade`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 16 | `sum_grade` | double precision | [`sum_grade`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 17 | `get_grade_times` | integer | [`get_grade_times`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 18 | `charge_way` | integer | [`charge_way`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 19 | `allow_cx` | integer | [`allow_cx`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 20 | `is_guaranteed` | integer | [`is_guaranteed`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 21 | `salary_grant_enabled` | integer | [`salary_grant_enabled`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 22 | `entry_type` | integer | [`entry_type`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 23 | `entry_sign_status` | integer | [`entry_sign_status`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 24 | `resign_sign_status` | integer | [`resign_sign_status`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 25 | `work_status` | integer | [`work_status`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 26 | `show_status` | integer | [`show_status`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 27 | `show_sort` | integer | [`show_sort`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 28 | `online_status` | integer | [`online_status`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 29 | `is_delete` | integer | [`is_delete`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 30 | `criticism_status` | integer | [`criticism_status`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 31 | `create_time` | timestamp with time zone | [`create_time`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 32 | `update_time` | timestamp with time zone | [`update_time`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 33 | `start_time` | timestamp with time zone | [`start_time`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 34 | `end_time` | timestamp with time zone | [`end_time`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 35 | `last_table_id` | bigint | [`last_table_id`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 36 | `last_table_name` | text | [`last_table_name`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 37 | `last_update_name` | text | [`last_update_name`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 38 | `order_trade_no` | bigint | [`order_trade_no`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 39 | `ding_talk_synced` | integer | [`ding_talk_synced`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 40 | `site_light_cfg_id` | bigint | [`site_light_cfg_id`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 41 | `light_equipment_id` | text | [`light_equipment_id`](#ods-assistant-accounts-master) | 直接 | 标识类 ID 字段，用于关联/定位相关实体 |
| 42 | `light_status` | integer | [`light_status`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 43 | `is_team_leader` | integer | [`is_team_leader`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 44 | `serial_number` | bigint | [`serial_number`](#ods-assistant-accounts-master) | 直接 | 同名直传 |
| 45 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 46 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 47 | `scd2_is_current` | integer | — | SCD2 | SCD2 元数据 |
| 48 | `scd2_version` | integer | — | SCD2 | SCD2 元数据 |

### 3.2 settlement_records（结账记录）

- 任务代码：`ODS_SETTLEMENT_RECORDS`
- 采样记录数：200
- API JSON 字段数：92
- ODS 列数：71
- DWD 目标表：dwd_settlement_head, dwd_settlement_head_ex

<a id="api-settlement-records"></a>

#### API 源字段 — settlement_records [🔗 ODS](#ods-settlement-records)

已映射 67/92，覆盖率 72.8%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `siteProfile.id` | integer | [`id`](#ods-settlement-records) | 结账记录主键 ID（订单结算 ID） | 📦 嵌套对象；示例: `0` |
| 2 | `siteProfile.org_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 3 | `siteProfile.shop_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 4 | `siteProfile.avatar` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 5 | `siteProfile.business_tel` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 6 | `siteProfile.full_address` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 7 | `siteProfile.address` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 8 | `siteProfile.longitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0.0` |
| 9 | `siteProfile.latitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0.0` |
| 10 | `siteProfile.tenant_site_region_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 11 | `siteProfile.tenant_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 12 | `siteProfile.auto_light` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 13 | `siteProfile.attendance_distance` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 14 | `siteProfile.wifi_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 15 | `siteProfile.wifi_password` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 16 | `siteProfile.customer_service_qrcode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 17 | `siteProfile.customer_service_wechat` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 18 | `siteProfile.fixed_pay_qrCode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 19 | `siteProfile.prod_env` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 20 | `siteProfile.light_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 21 | `siteProfile.light_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 22 | `siteProfile.site_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 23 | `siteProfile.light_token` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 24 | `siteProfile.site_label` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 25 | `siteProfile.attendance_enabled` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 26 | `siteProfile.shop_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 27 | `settleList.id` | integer | [`id`](#ods-settlement-records) | 结账记录主键 ID（订单结算 ID） | 枚举值: `3093864077166789`, `3093859276196037`, `3093855537596549`, `3093843703564549`, `3093804233967877`, `3093800338802821`, `3093793847478597`, `3093774959741061` |
| 28 | `settleList.tenantId` | integer | [`tenantid`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `2790683160709957` |
| 29 | `settleList.siteId` | integer | [`siteid`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `2790685415443269` |
| 30 | `settleList.siteName` | string | [`sitename`](#ods-settlement-records) | 名称字段，用于展示与辅助识别 | 大小写匹配；示例: `朗朗桌球` |
| 31 | `settleList.balanceAmount` | number | [`balanceamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0.0`, `232.0`, `125.0`, `18.0`, `300.0`, `4285.55`, `43.61`, `132.0` |
| 32 | `settleList.cardAmount` | number | [`cardamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 33 | `settleList.cashAmount` | number | [`cashamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0.0`, `5.0` |
| 34 | `settleList.couponAmount` | number | [`couponamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0.0`, `96.0`, `48.0`, `68.0`, `44.2`, `136.0`, `113.66`, `116.0` |
| 35 | `settleList.createTime` | string | [`createtime`](#ods-settlement-records) | 时间字段，用于记录业务时间点/发生时间 | 大小写匹配；枚举值: `2026-02-14 00:21:19`, `2026-02-14 00:16:26`, `2026-02-14 00:12:38`, `2026-02-14 00:00:36`, `2026-02-13 23:20:27`, `2026-02-13 23:16:29`, `2026-02-13 23:09:53`, `2026-02-13 22:50:40` |
| 36 | `settleList.memberId` | integer | [`memberid`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `0`, `2799207359858437`, `2799207406946053`, `2799210153232133`, `2799207522600709`, `2799207117129477`, `2799207133021957`, `2849995548625861` |
| 37 | `settleList.memberName` | string | [`membername`](#ods-settlement-records) | 名称字段，用于展示与辅助识别 | 大小写匹配 |
| 38 | `settleList.tenantMemberCardId` | integer | [`tenantmembercardid`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `0` |
| 39 | `settleList.memberCardTypeName` | string | [`membercardtypename`](#ods-settlement-records) | 名称字段，用于展示与辅助识别 | 大小写匹配 |
| 40 | `settleList.memberPhone` | string | [`memberphone`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配 |
| 41 | `settleList.tableId` | integer | [`tableid`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `0`, `2793003506815045`, `2793001904918661`, `2793022937911365`, `2793020260044869`, `2793001695301765`, `2791964216463493`, `2793002980429893` |
| 42 | `settleList.consumeMoney` | number | [`consumemoney`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `10.0`, `135.9`, `78.26`, `395.84`, `107.9`, `68.26`, `64.46`, `809.43` |
| 43 | `settleList.onlineAmount` | number | [`onlineamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 44 | `settleList.operatorId` | integer | [`operatorid`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `2790687322443013` |
| 45 | `settleList.operatorName` | string | [`operatorname`](#ods-settlement-records) | 名称字段，用于展示与辅助识别 | 大小写匹配；示例: `收银员:郑丽珊` |
| 46 | `settleList.revokeOrderId` | integer | [`revokeorderid`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `0` |
| 47 | `settleList.revokeOrderName` | string | [`revokeordername`](#ods-settlement-records) | 名称字段，用于展示与辅助识别 | 大小写匹配 |
| 48 | `settleList.revokeTime` | string | [`revoketime`](#ods-settlement-records) | 时间字段，用于记录业务时间点/发生时间 | 大小写匹配；示例: `0001-01-01 00:00:00` |
| 49 | `settleList.payAmount` | number | [`payamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `7.0`, `0.0`, `10.0`, `684.0`, `5.0`, `43.0`, `49.0`, `2.0` |
| 50 | `settleList.pointAmount` | number | [`pointamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `7.0`, `0.0`, `10.0`, `684.0`, `5.0`, `43.0`, `49.0`, `2.0` |
| 51 | `settleList.refundAmount` | number | [`refundamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 52 | `settleList.settleName` | string | [`settlename`](#ods-settlement-records) | 名称字段，用于展示与辅助识别 | 大小写匹配；枚举值: `商城订单`, `A区 A15`, `A区 A4`, `TV台 TV`, `斯诺克区 S4`, `A区 A3`, `A区 A1`, `A区 A9` |
| 53 | `settleList.settleRelateId` | integer | [`settlerelateid`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `3093864074381509`, `3093740766775621`, `3093784062036101`, `3093701555882181`, `3093729955563653`, `3093681905567877`, `3093730735376517`, `3093720617519301` |
| 54 | `settleList.settleStatus` | integer | [`settlestatus`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `2` |
| 55 | `settleList.settleType` | integer | [`settletype`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `3`, `1` |
| 56 | `settleList.payTime` | string | [`paytime`](#ods-settlement-records) | 时间字段，用于记录业务时间点/发生时间 | 大小写匹配；枚举值: `2026-02-14 00:21:21`, `2026-02-14 00:16:27`, `2026-02-14 00:12:40`, `2026-02-14 00:01:01`, `2026-02-13 23:20:28`, `2026-02-13 23:16:30`, `2026-02-13 23:09:55`, `2026-02-13 22:50:42` |
| 57 | `settleList.roundingAmount` | number | [`roundingamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0.0`, `0.45`, `0.72`, `0.33`, `0.71`, `0.86`, `0.03`, `0.56` |
| 58 | `settleList.paymentMethod` | integer | [`paymentmethod`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `0` |
| 59 | `settleList.adjustAmount` | number | [`adjustamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0.0`, `125.88`, `66.14`, `64.0`, `34.0`, `1282.22`, `92.66`, `249.16` |
| 60 | `settleList.assistantCxMoney` | number | [`assistantcxmoney`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 61 | `settleList.assistantPdMoney` | number | [`assistantpdmoney`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0.0`, `646.32`, `546.6`, `408.9`, `127.45` |
| 62 | `settleList.couponSaleAmount` | number | [`couponsaleamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 63 | `settleList.plCouponSaleAmount` | number | [`plcouponsaleamount`](#ods-settlement-records) | 平台券销售额 | 大小写匹配；枚举值: `0.0`, `39.9`, `20.26`, `79.8`, `69.9`, `59.9`, `119.7`, `40.52` |
| 64 | `settleList.merVouSalesAmount` | number | [`mervousalesamount`](#ods-settlement-records) | 商户券销售额 | 大小写匹配；示例: `0.0` |
| 65 | `settleList.memberDiscountAmount` | number | [`memberdiscountamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0.0`, `163.84`, `134.3`, `286.6`, `681.58` |
| 66 | `settleList.tableChargeMoney` | number | [`tablechargemoney`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0.0`, `96.0`, `48.0`, `163.84`, `68.0`, `44.2`, `629.43`, `136.0` |
| 67 | `settleList.goodsMoney` | number | [`goodsmoney`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `10.0`, `0.0`, `232.0`, `180.0`, `5.0`, `125.0`, `18.0`, `2.0` |
| 68 | `settleList.realGoodsMoney` | number | [`realgoodsmoney`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `7.0`, `0.0`, `10.0`, `232.0`, `180.0`, `5.0`, `125.0`, `18.0` |
| 69 | `settleList.serviceMoney` | number | [`servicemoney`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 70 | `settleList.prepayMoney` | number | [`prepaymoney`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0.0`, `300.0` |
| 71 | `settleList.salesManName` | string | [`salesmanname`](#ods-settlement-records) | 名称字段，用于展示与辅助识别 | 大小写匹配 |
| 72 | `settleList.orderRemark` | string | [`orderremark`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `五折` |
| 73 | `settleList.salesManUserId` | integer | [`salesmanuserid`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `0` |
| 74 | `settleList.canBeRevoked` | boolean | [`canberevoked`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `False` |
| 75 | `settleList.pointDiscountPrice` | number | [`pointdiscountprice`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 76 | `settleList.pointDiscountCost` | number | [`pointdiscountcost`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 77 | `settleList.activityDiscount` | number | [`activitydiscount`](#ods-settlement-records) | 数量/时长字段，用于统计与计量 | 大小写匹配；示例: `0.0` |
| 78 | `settleList.serialNumber` | integer | [`serialnumber`](#ods-settlement-records) | 数量/时长字段，用于统计与计量 | 大小写匹配；示例: `0` |
| 79 | `settleList.assistantManualDiscount` | number | [`assistantmanualdiscount`](#ods-settlement-records) | 数量/时长字段，用于统计与计量 | 大小写匹配；示例: `0.0` |
| 80 | `settleList.allCouponDiscount` | number | [`allcoupondiscount`](#ods-settlement-records) | 数量/时长字段，用于统计与计量 | 大小写匹配；示例: `0.0` |
| 81 | `settleList.goodsPromotionMoney` | number | [`goodspromotionmoney`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 82 | `settleList.assistantPromotionMoney` | number | [`assistantpromotionmoney`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 83 | `settleList.isUseCoupon` | boolean | [`isusecoupon`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `False` |
| 84 | `settleList.isUseDiscount` | boolean | [`isusediscount`](#ods-settlement-records) | 数量/时长字段，用于统计与计量 | 大小写匹配；示例: `False` |
| 85 | `settleList.isActivity` | boolean | [`isactivity`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `False` |
| 86 | `settleList.isBindMember` | boolean | [`isbindmember`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `False` |
| 87 | `settleList.isFirst` | integer | [`isfirst`](#ods-settlement-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `0` |
| 88 | `settleList.rechargeCardAmount` | integer | [`rechargecardamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0`, `232.0`, `300.0`, `4285.55`, `43.61`, `132.0`, `71.07`, `58.0` |
| 89 | `settleList.giftCardAmount` | integer | [`giftcardamount`](#ods-settlement-records) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0`, `125.0`, `18.0`, `26.0`, `219.23`, `24.0` |
| 90 | `settleList.electricityMoney` | number | [`electricitymoney`](#ods-settlement-records) | 电费金额 | 大小写匹配；示例: `0.0` |
| 91 | `settleList.realElectricityMoney` | number | [`realelectricitymoney`](#ods-settlement-records) | 实际电费金额 | 大小写匹配；示例: `0.0` |
| 92 | `settleList.electricityAdjustMoney` | number | [`electricityadjustmoney`](#ods-settlement-records) | 电费调整金额 | 大小写匹配；示例: `0.0` |

<a id="ods-settlement-records"></a>

#### ODS 表结构 — ods.settlement_records [🔗 API](#api-settlement-records)

共 71 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`siteProfile.id`](#api-settlement-records) | [`dwd_settlement_head.order_settle_id`](#dwd-dwd-settlement-head), [`dwd_settlement_head_ex.order_settle_id`](#dwd-dwd-settlement-head-ex) | 结账记录主键 ID（订单结算 ID） |
| 2 | `tenantid` | bigint | [`settleList.tenantId`](#api-settlement-records) | [`dwd_settlement_head.tenant_id`](#dwd-dwd-settlement-head) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 3 | `siteid` | bigint | [`settleList.siteId`](#api-settlement-records) | [`dwd_settlement_head.site_id`](#dwd-dwd-settlement-head) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 4 | `sitename` | text | [`settleList.siteName`](#api-settlement-records) | [`dwd_settlement_head.site_name`](#dwd-dwd-settlement-head) | 名称字段，用于展示与辅助识别 |
| 5 | `balanceamount` | numeric | [`settleList.balanceAmount`](#api-settlement-records) | [`dwd_settlement_head.balance_amount`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 6 | `cardamount` | numeric | [`settleList.cardAmount`](#api-settlement-records) | [`dwd_settlement_head_ex.card_amount`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 7 | `cashamount` | numeric | [`settleList.cashAmount`](#api-settlement-records) | [`dwd_settlement_head_ex.cash_amount`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 8 | `couponamount` | numeric | [`settleList.couponAmount`](#api-settlement-records) | [`dwd_settlement_head.coupon_amount`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 9 | `createtime` | timestamp with time zone | [`settleList.createTime`](#api-settlement-records) | [`dwd_settlement_head.create_time`](#dwd-dwd-settlement-head) | 时间字段，用于记录业务时间点/发生时间 |
| 10 | `memberid` | bigint | [`settleList.memberId`](#api-settlement-records) | [`dwd_settlement_head.member_id`](#dwd-dwd-settlement-head) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 11 | `membername` | text | [`settleList.memberName`](#api-settlement-records) | [`dwd_settlement_head.member_name`](#dwd-dwd-settlement-head) | 名称字段，用于展示与辅助识别 |
| 12 | `tenantmembercardid` | bigint | [`settleList.tenantMemberCardId`](#api-settlement-records) | [`dwd_settlement_head.member_card_account_id`](#dwd-dwd-settlement-head) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 13 | `membercardtypename` | text | [`settleList.memberCardTypeName`](#api-settlement-records) | [`dwd_settlement_head.member_card_type_name`](#dwd-dwd-settlement-head) | 名称字段，用于展示与辅助识别 |
| 14 | `memberphone` | text | [`settleList.memberPhone`](#api-settlement-records) | [`dwd_settlement_head.member_phone`](#dwd-dwd-settlement-head) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 15 | `tableid` | bigint | [`settleList.tableId`](#api-settlement-records) | [`dwd_settlement_head.table_id`](#dwd-dwd-settlement-head) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 16 | `consumemoney` | numeric | [`settleList.consumeMoney`](#api-settlement-records) | [`dwd_settlement_head.consume_money`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 17 | `onlineamount` | numeric | [`settleList.onlineAmount`](#api-settlement-records) | [`dwd_settlement_head_ex.online_amount`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 18 | `operatorid` | bigint | [`settleList.operatorId`](#api-settlement-records) | [`dwd_settlement_head_ex.operator_id`](#dwd-dwd-settlement-head-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 19 | `operatorname` | text | [`settleList.operatorName`](#api-settlement-records) | [`dwd_settlement_head_ex.operator_name`](#dwd-dwd-settlement-head-ex) | 名称字段，用于展示与辅助识别 |
| 20 | `revokeorderid` | bigint | [`settleList.revokeOrderId`](#api-settlement-records) | [`dwd_settlement_head.revoke_order_id`](#dwd-dwd-settlement-head) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 21 | `revokeordername` | text | [`settleList.revokeOrderName`](#api-settlement-records) | [`dwd_settlement_head_ex.revoke_order_name`](#dwd-dwd-settlement-head-ex) | 名称字段，用于展示与辅助识别 |
| 22 | `revoketime` | timestamp with time zone | [`settleList.revokeTime`](#api-settlement-records) | [`dwd_settlement_head_ex.revoke_time`](#dwd-dwd-settlement-head-ex) | 时间字段，用于记录业务时间点/发生时间 |
| 23 | `payamount` | numeric | [`settleList.payAmount`](#api-settlement-records) | [`dwd_settlement_head.pay_amount`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 24 | `pointamount` | numeric | [`settleList.pointAmount`](#api-settlement-records) | [`dwd_settlement_head.point_amount`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 25 | `refundamount` | numeric | [`settleList.refundAmount`](#api-settlement-records) | [`dwd_settlement_head_ex.refund_amount`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 26 | `settlename` | text | [`settleList.settleName`](#api-settlement-records) | [`dwd_settlement_head.settle_name`](#dwd-dwd-settlement-head) | 名称字段，用于展示与辅助识别 |
| 27 | `settlerelateid` | bigint | [`settleList.settleRelateId`](#api-settlement-records) | [`dwd_settlement_head.order_trade_no`](#dwd-dwd-settlement-head) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 28 | `settlestatus` | integer | [`settleList.settleStatus`](#api-settlement-records) | [`dwd_settlement_head_ex.settle_status`](#dwd-dwd-settlement-head-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 29 | `settletype` | integer | [`settleList.settleType`](#api-settlement-records) | [`dwd_settlement_head.settle_type`](#dwd-dwd-settlement-head) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 30 | `paytime` | timestamp with time zone | [`settleList.payTime`](#api-settlement-records) | [`dwd_settlement_head.pay_time`](#dwd-dwd-settlement-head) | 时间字段，用于记录业务时间点/发生时间 |
| 31 | `roundingamount` | numeric | [`settleList.roundingAmount`](#api-settlement-records) | [`dwd_settlement_head.rounding_amount`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 32 | `paymentmethod` | integer | [`settleList.paymentMethod`](#api-settlement-records) | [`dwd_settlement_head_ex.payment_method`](#dwd-dwd-settlement-head-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 33 | `adjustamount` | numeric | [`settleList.adjustAmount`](#api-settlement-records) | [`dwd_settlement_head.adjust_amount`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 34 | `assistantcxmoney` | numeric | [`settleList.assistantCxMoney`](#api-settlement-records) | [`dwd_settlement_head.assistant_cx_money`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 35 | `assistantpdmoney` | numeric | [`settleList.assistantPdMoney`](#api-settlement-records) | [`dwd_settlement_head.assistant_pd_money`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 36 | `couponsaleamount` | numeric | [`settleList.couponSaleAmount`](#api-settlement-records) | [`dwd_settlement_head_ex.coupon_sale_amount`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 37 | `memberdiscountamount` | numeric | [`settleList.memberDiscountAmount`](#api-settlement-records) | [`dwd_settlement_head.member_discount_amount`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 38 | `tablechargemoney` | numeric | [`settleList.tableChargeMoney`](#api-settlement-records) | [`dwd_settlement_head.table_charge_money`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 39 | `goodsmoney` | numeric | [`settleList.goodsMoney`](#api-settlement-records) | [`dwd_settlement_head.goods_money`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 40 | `realgoodsmoney` | numeric | [`settleList.realGoodsMoney`](#api-settlement-records) | [`dwd_settlement_head.real_goods_money`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 41 | `servicemoney` | numeric | [`settleList.serviceMoney`](#api-settlement-records) | [`dwd_settlement_head_ex.service_money`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 42 | `prepaymoney` | numeric | [`settleList.prepayMoney`](#api-settlement-records) | [`dwd_settlement_head_ex.prepay_money`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 43 | `salesmanname` | text | [`settleList.salesManName`](#api-settlement-records) | [`dwd_settlement_head_ex.salesman_name`](#dwd-dwd-settlement-head-ex) | 名称字段，用于展示与辅助识别 |
| 44 | `orderremark` | text | [`settleList.orderRemark`](#api-settlement-records) | [`dwd_settlement_head_ex.order_remark`](#dwd-dwd-settlement-head-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 45 | `salesmanuserid` | bigint | [`settleList.salesManUserId`](#api-settlement-records) | [`dwd_settlement_head_ex.salesman_user_id`](#dwd-dwd-settlement-head-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 46 | `canberevoked` | boolean | [`settleList.canBeRevoked`](#api-settlement-records) | [`dwd_settlement_head_ex.can_be_revoked`](#dwd-dwd-settlement-head-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 47 | `pointdiscountprice` | numeric | [`settleList.pointDiscountPrice`](#api-settlement-records) | [`dwd_settlement_head_ex.point_discount_price`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 48 | `pointdiscountcost` | numeric | [`settleList.pointDiscountCost`](#api-settlement-records) | [`dwd_settlement_head_ex.point_discount_cost`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 49 | `activitydiscount` | numeric | [`settleList.activityDiscount`](#api-settlement-records) | [`dwd_settlement_head_ex.activity_discount`](#dwd-dwd-settlement-head-ex) | 数量/时长字段，用于统计与计量 |
| 50 | `serialnumber` | bigint | [`settleList.serialNumber`](#api-settlement-records) | [`dwd_settlement_head_ex.serial_number`](#dwd-dwd-settlement-head-ex) | 数量/时长字段，用于统计与计量 |
| 51 | `assistantmanualdiscount` | numeric | [`settleList.assistantManualDiscount`](#api-settlement-records) | [`dwd_settlement_head_ex.assistant_manual_discount`](#dwd-dwd-settlement-head-ex) | 数量/时长字段，用于统计与计量 |
| 52 | `allcoupondiscount` | numeric | [`settleList.allCouponDiscount`](#api-settlement-records) | [`dwd_settlement_head_ex.all_coupon_discount`](#dwd-dwd-settlement-head-ex) | 数量/时长字段，用于统计与计量 |
| 53 | `goodspromotionmoney` | numeric | [`settleList.goodsPromotionMoney`](#api-settlement-records) | [`dwd_settlement_head_ex.goods_promotion_money`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 54 | `assistantpromotionmoney` | numeric | [`settleList.assistantPromotionMoney`](#api-settlement-records) | [`dwd_settlement_head_ex.assistant_promotion_money`](#dwd-dwd-settlement-head-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 55 | `isusecoupon` | boolean | [`settleList.isUseCoupon`](#api-settlement-records) | [`dwd_settlement_head_ex.is_use_coupon`](#dwd-dwd-settlement-head-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 56 | `isusediscount` | boolean | [`settleList.isUseDiscount`](#api-settlement-records) | [`dwd_settlement_head_ex.is_use_discount`](#dwd-dwd-settlement-head-ex) | 数量/时长字段，用于统计与计量 |
| 57 | `isactivity` | boolean | [`settleList.isActivity`](#api-settlement-records) | [`dwd_settlement_head_ex.is_activity`](#dwd-dwd-settlement-head-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 58 | `isbindmember` | boolean | [`settleList.isBindMember`](#api-settlement-records) | [`dwd_settlement_head.is_bind_member`](#dwd-dwd-settlement-head) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 59 | `isfirst` | integer | [`settleList.isFirst`](#api-settlement-records) | [`dwd_settlement_head_ex.is_first_order`](#dwd-dwd-settlement-head-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 60 | `rechargecardamount` | numeric | [`settleList.rechargeCardAmount`](#api-settlement-records) | [`dwd_settlement_head.recharge_card_amount`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 61 | `giftcardamount` | numeric | [`settleList.giftCardAmount`](#api-settlement-records) | [`dwd_settlement_head.gift_card_amount`](#dwd-dwd-settlement-head) | 金额字段，用于计费/结算/分摊等金额计算 |
| 62 | `electricityadjustmoney` | numeric | [`settleList.electricityAdjustMoney`](#api-settlement-records) | [`dwd_settlement_head.electricity_adjust_money`](#dwd-dwd-settlement-head) | 电费调整金额 |
| 63 | `electricitymoney` | numeric | [`settleList.electricityMoney`](#api-settlement-records) | [`dwd_settlement_head.electricity_money`](#dwd-dwd-settlement-head) | 电费金额 |
| 64 | `mervousalesamount` | numeric | [`settleList.merVouSalesAmount`](#api-settlement-records) | [`dwd_settlement_head.mervou_sales_amount`](#dwd-dwd-settlement-head) | 商户券销售额 |
| 65 | `plcouponsaleamount` | numeric | [`settleList.plCouponSaleAmount`](#api-settlement-records) | [`dwd_settlement_head.pl_coupon_sale_amount`](#dwd-dwd-settlement-head) | 平台券销售额 |
| 66 | `realelectricitymoney` | numeric | [`settleList.realElectricityMoney`](#api-settlement-records) | [`dwd_settlement_head.real_electricity_money`](#dwd-dwd-settlement-head) | 实际电费金额 |
| 67 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 68 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 69 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 70 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 71 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dwd-settlement-head"></a>

#### DWD 表结构 — dwd.dwd_settlement_head [🔗 ODS](#ods-settlement-records)

共 37 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `order_settle_id` | bigint | [`id`](#ods-settlement-records) | 直接 | 结账单 ID |
| 2 | `tenant_id` | bigint | [`tenantid`](#ods-settlement-records) | 直接 | 租户 ID |
| 3 | `site_id` | bigint | [`siteid`](#ods-settlement-records) | 直接 | 门店 ID → dim_site |
| 4 | `site_name` | character varying | [`sitename`](#ods-settlement-records) | 直接 | 门店名称。**当前值**: "朗朗桌球" |
| 5 | `table_id` | bigint | [`tableid`](#ods-settlement-records) | 直接 | 台桌 ID → dim_table（0=非台桌订单，如商城订单） |
| 6 | `settle_name` | character varying | [`settlename`](#ods-settlement-records) | 直接 | 结账名称。**样本值**: "商城订单", "A区 A3", "A区 A4", "斯诺克区 S1" |
| 7 | `order_trade_no` | bigint | [`settlerelateid`](#ods-settlement-records) | 直接 | 订单号 |
| 8 | `create_time` | timestamp with time zone | [`createtime`](#ods-settlement-records) | 直接 | 创建时间 |
| 9 | `pay_time` | timestamp with time zone | [`paytime`](#ods-settlement-records) | 直接 | 支付时间 |
| 10 | `settle_type` | integer | [`settletype`](#ods-settlement-records) | 直接 | 结账类型。**枚举值**: 1=台桌结账, 3=商城订单, 6=退货订单, 7=退款订单 |
| 11 | `revoke_order_id` | bigint | [`revokeorderid`](#ods-settlement-records) | 直接 | 撤销订单 ID（当前数据全为 0） |
| 12 | `member_id` | bigint | [`memberid`](#ods-settlement-records) | 直接 | 会员 ID → dim_member（0=散客，占比约 82.8%） |
| 13 | `member_name` | character varying | [`membername`](#ods-settlement-records) | 直接 | 会员名称 |
| 14 | `member_phone` | character varying | [`memberphone`](#ods-settlement-records) | 直接 | 会员电话 |
| 15 | `member_card_account_id` | bigint | [`tenantmembercardid`](#ods-settlement-records) | 直接 | 会员卡账户 ID（当前数据全为 0） |
| 16 | `member_card_type_name` | character varying | [`membercardtypename`](#ods-settlement-records) | 直接 | 卡类型名称（当前数据全为空） |
| 17 | `is_bind_member` | boolean | [`isbindmember`](#ods-settlement-records) | 直接 | 是否绑定会员。**枚举值**: False=否 |
| 18 | `member_discount_amount` | numeric | [`memberdiscountamount`](#ods-settlement-records) | 直接 | 会员折扣金额 |
| 19 | `consume_money` | numeric | [`consumemoney`](#ods-settlement-records) | 直接 | 消费总金额（元） |
| 20 | `table_charge_money` | numeric | [`tablechargemoney`](#ods-settlement-records) | 直接 | 台费金额 |
| 21 | `goods_money` | numeric | [`goodsmoney`](#ods-settlement-records) | 直接 | 商品金额 |
| 22 | `real_goods_money` | numeric | [`realgoodsmoney`](#ods-settlement-records) | 直接 | 实收商品金额 |
| 23 | `assistant_pd_money` | numeric | [`assistantpdmoney`](#ods-settlement-records) | 直接 | 助教陪打费用 |
| 24 | `assistant_cx_money` | numeric | [`assistantcxmoney`](#ods-settlement-records) | 直接 | 助教超休费用 |
| 25 | `adjust_amount` | numeric | [`adjustamount`](#ods-settlement-records) | 直接 | 调整金额 |
| 26 | `pay_amount` | numeric | [`payamount`](#ods-settlement-records) | 直接 | 实付金额 |
| 27 | `balance_amount` | numeric | [`balanceamount`](#ods-settlement-records) | 直接 | 余额支付金额 |
| 28 | `recharge_card_amount` | numeric | [`rechargecardamount`](#ods-settlement-records) | 直接 | 储值卡支付金额 |
| 29 | `gift_card_amount` | numeric | [`giftcardamount`](#ods-settlement-records) | 直接 | 礼品卡支付金额 |
| 30 | `coupon_amount` | numeric | [`couponamount`](#ods-settlement-records) | 直接 | 券抵扣金额 |
| 31 | `rounding_amount` | numeric | [`roundingamount`](#ods-settlement-records) | 直接 | 抹零金额 |
| 32 | `point_amount` | numeric | [`pointamount`](#ods-settlement-records) | 直接 | 积分抵扣等值金额 |
| 33 | `electricity_money` | numeric | [`electricitymoney`](#ods-settlement-records) | 直接 | 电费金额 |
| 34 | `real_electricity_money` | numeric | [`realelectricitymoney`](#ods-settlement-records) | 直接 | 实际电费金额 |
| 35 | `electricity_adjust_money` | numeric | [`electricityadjustmoney`](#ods-settlement-records) | 直接 | 电费调整金额 |
| 36 | `pl_coupon_sale_amount` | numeric | [`plcouponsaleamount`](#ods-settlement-records) | 直接 | 平台券销售额 |
| 37 | `mervou_sales_amount` | numeric | [`mervousalesamount`](#ods-settlement-records) | 直接 | 商户券销售额 |

<a id="dwd-dwd-settlement-head-ex"></a>

#### DWD 表结构 — dwd.dwd_settlement_head_ex [🔗 ODS](#ods-settlement-records)

共 30 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `order_settle_id` | bigint | [`id`](#ods-settlement-records) | 直接 | 字段重命名 |
| 2 | `serial_number` | integer | [`serialnumber`](#ods-settlement-records) | 直接 | 字段重命名 |
| 3 | `settle_status` | integer | [`settlestatus`](#ods-settlement-records) | 直接 | 字段重命名 |
| 4 | `can_be_revoked` | boolean | [`canberevoked`](#ods-settlement-records) | → boolean | 字段重命名 |
| 5 | `revoke_order_name` | character varying | [`revokeordername`](#ods-settlement-records) | 直接 | 字段重命名 |
| 6 | `revoke_time` | timestamp with time zone | [`revoketime`](#ods-settlement-records) | 直接 | 字段重命名 |
| 7 | `is_first_order` | boolean | [`isfirst`](#ods-settlement-records) | → boolean | 字段重命名 |
| 8 | `service_money` | numeric | [`servicemoney`](#ods-settlement-records) | 直接 | 字段重命名 |
| 9 | `cash_amount` | numeric | [`cashamount`](#ods-settlement-records) | 直接 | 字段重命名 |
| 10 | `card_amount` | numeric | [`cardamount`](#ods-settlement-records) | 直接 | 字段重命名 |
| 11 | `online_amount` | numeric | [`onlineamount`](#ods-settlement-records) | 直接 | 字段重命名 |
| 12 | `refund_amount` | numeric | [`refundamount`](#ods-settlement-records) | 直接 | 字段重命名 |
| 13 | `prepay_money` | numeric | [`prepaymoney`](#ods-settlement-records) | 直接 | 字段重命名 |
| 14 | `payment_method` | integer | [`paymentmethod`](#ods-settlement-records) | 直接 | 字段重命名 |
| 15 | `coupon_sale_amount` | numeric | [`couponsaleamount`](#ods-settlement-records) | 直接 | 字段重命名 |
| 16 | `all_coupon_discount` | numeric | [`allcoupondiscount`](#ods-settlement-records) | 直接 | 字段重命名 |
| 17 | `goods_promotion_money` | numeric | [`goodspromotionmoney`](#ods-settlement-records) | 直接 | 字段重命名 |
| 18 | `assistant_promotion_money` | numeric | [`assistantpromotionmoney`](#ods-settlement-records) | 直接 | 字段重命名 |
| 19 | `activity_discount` | numeric | [`activitydiscount`](#ods-settlement-records) | 直接 | 字段重命名 |
| 20 | `assistant_manual_discount` | numeric | [`assistantmanualdiscount`](#ods-settlement-records) | 直接 | 字段重命名 |
| 21 | `point_discount_price` | numeric | [`pointdiscountprice`](#ods-settlement-records) | 直接 | 字段重命名 |
| 22 | `point_discount_cost` | numeric | [`pointdiscountcost`](#ods-settlement-records) | 直接 | 字段重命名 |
| 23 | `is_use_coupon` | boolean | [`isusecoupon`](#ods-settlement-records) | → boolean | 字段重命名 |
| 24 | `is_use_discount` | boolean | [`isusediscount`](#ods-settlement-records) | → boolean | 字段重命名 |
| 25 | `is_activity` | boolean | [`isactivity`](#ods-settlement-records) | → boolean | 字段重命名 |
| 26 | `operator_name` | character varying | [`operatorname`](#ods-settlement-records) | 直接 | 字段重命名 |
| 27 | `salesman_name` | character varying | [`salesmanname`](#ods-settlement-records) | 直接 | 字段重命名 |
| 28 | `order_remark` | character varying | [`orderremark`](#ods-settlement-records) | 直接 | 字段重命名 |
| 29 | `operator_id` | bigint | [`operatorid`](#ods-settlement-records) | 直接 | 字段重命名 |
| 30 | `salesman_user_id` | bigint | [`salesmanuserid`](#ods-settlement-records) | 直接 | 字段重命名 |

### 3.3 table_fee_transactions（台费计费流水）

- 任务代码：`ODS_TABLE_USE`
- 采样记录数：200
- API JSON 字段数：67
- ODS 列数：47
- DWD 目标表：dim_site, dim_site_ex, dwd_table_fee_log, dwd_table_fee_log_ex

<a id="api-table-fee-transactions"></a>

#### API 源字段 — table_fee_transactions [🔗 ODS](#ods-table-fee-transactions)

已映射 43/67，覆盖率 64.2%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `siteProfile.id` | integer | [`id`](#ods-table-fee-transactions) | 台费流水记录主键（事实表主键） | 📦 嵌套对象；示例: `2790685415443269` |
| 2 | `siteProfile.org_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2790684179467077` |
| 3 | `siteProfile.shop_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `朗朗桌球` |
| 4 | `siteProfile.avatar` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `https://oss.ficoo.vip/admin...` |
| 5 | `siteProfile.business_tel` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `13316068642` |
| 6 | `siteProfile.full_address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区丽阳街12号` |
| 7 | `siteProfile.address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区天园街道朗朗桌球` |
| 8 | `siteProfile.longitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `113.360321` |
| 9 | `siteProfile.latitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `23.133629` |
| 10 | `siteProfile.tenant_site_region_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `156440100` |
| 11 | `siteProfile.tenant_id` | integer | [`tenant_id`](#ods-table-fee-transactions) | 租户/品牌 ID | 📦 嵌套对象；示例: `2790683160709957` |
| 12 | `siteProfile.auto_light` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 13 | `siteProfile.attendance_distance` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 14 | `siteProfile.wifi_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 15 | `siteProfile.wifi_password` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 16 | `siteProfile.customer_service_qrcode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 17 | `siteProfile.customer_service_wechat` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 18 | `siteProfile.fixed_pay_qrCode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 19 | `siteProfile.prod_env` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 20 | `siteProfile.light_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 21 | `siteProfile.light_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 22 | `siteProfile.site_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 23 | `siteProfile.light_token` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 24 | `siteProfile.site_label` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `A` |
| 25 | `siteProfile.attendance_enabled` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 26 | `siteProfile.shop_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 27 | `id` | integer | [`id`](#ods-table-fee-transactions) | 台费流水记录主键（事实表主键） | 枚举值: `3093859291416901`, `3093855576901893`, `3093844120701253`, `3093804251023685`, `3093800356989125`, `3093793885112581`, `3093774985185413`, `3093761347356805` |
| 28 | `add_clock_seconds` | integer | [`add_clock_seconds`](#ods-table-fee-transactions) | 加钟秒数，在原有使用基础上追加的时长 | 枚举值: `0`, `1200`, `1800` |
| 29 | `activity_discount_amount` | number | [`activity_discount_amount`](#ods-table-fee-transactions) | 活动折扣金额 | 示例: `0.0` |
| 30 | `adjust_amount` | number | [`adjust_amount`](#ods-table-fee-transactions) | 调整金额/调账金额，用于将台费金额转移或冲减到其它项目，或手工调整 | 枚举值: `0.0`, `125.88`, `66.14`, `64.0`, `34.0`, `1191.01`, `91.21`, `92.66` |
| 31 | `coupon_promotion_amount` | number | [`coupon_promotion_amount`](#ods-table-fee-transactions) | 由优惠券/活动/团购（平台/门店促销）承担的优惠金额，直接抵扣在台费上 | 枚举值: `96.0`, `48.0`, `0.0`, `68.0`, `44.2`, `136.0`, `113.66`, `116.0` |
| 32 | `create_time` | string | [`create_time`](#ods-table-fee-transactions) | 这条台费流水记录的创建时间，通常接近结账时间 | 枚举值: `2026-02-14 00:16:27`, `2026-02-14 00:12:40`, `2026-02-14 00:01:01`, `2026-02-13 23:20:28`, `2026-02-13 23:16:30`, `2026-02-13 23:09:55`, `2026-02-13 22:50:42`, `2026-02-13 22:36:49` |
| 33 | `fee_total` | number | [`fee_total`](#ods-table-fee-transactions) | 各种附加费用（如管理费、服务费）合计值 | 示例: `0.0` |
| 34 | `is_delete` | integer | [`is_delete`](#ods-table-fee-transactions) | 逻辑删除标记（0=否，1=是） | 示例: `0` |
| 35 | `is_single_order` | integer | [`is_single_order`](#ods-table-fee-transactions) | 布尔/开关字段，用于表示权限、可用性或状态开关 | 枚举值: `1`, `0` |
| 36 | `last_use_time` | string | [`last_use_time`](#ods-table-fee-transactions) | 最后使用/操作时间 | 枚举值: `2026-02-14 00:15:53`, `2026-02-13 23:59:55`, `2026-02-14 00:00:33`, `2026-02-13 23:04:53`, `2026-02-13 23:16:00`, `2026-02-13 23:05:40`, `2026-02-13 22:50:38`, `2026-02-13 22:35:21` |
| 37 | `ledger_amount` | number | [`ledger_amount`](#ods-table-fee-transactions) | 按单价与计费时长计算出的原始应收台费金额 | 枚举值: `96.0`, `48.0`, `163.84`, `68.0`, `44.2`, `629.43`, `136.0`, `113.66` |
| 38 | `ledger_count` | integer | [`ledger_count`](#ods-table-fee-transactions) | 台账记录的计费秒数，计费用秒数（应收时长） | 枚举值: `7200`, `3600`, `8674`, `3315`, `12053`, `7055`, `3171`, `3650` |
| 39 | `ledger_end_time` | string | [`ledger_end_time`](#ods-table-fee-transactions) | 台账上的计费结束时间 | 枚举值: `2026-02-14 00:15:53`, `2026-02-13 23:59:55`, `2026-02-14 00:00:33`, `2026-02-13 23:04:53`, `2026-02-13 23:16:00`, `2026-02-13 23:05:40`, `2026-02-13 22:50:38`, `2026-02-13 22:35:21` |
| 40 | `ledger_name` | string | [`ledger_name`](#ods-table-fee-transactions) | 台号名称，实际展示给员工/顾客看的桌台编号 | 枚举值: `A15`, `A4`, `TV`, `S4`, `A3`, `A1`, `A9`, `A17` |
| 41 | `ledger_start_time` | string | [`ledger_start_time`](#ods-table-fee-transactions) | 台账上的计费起始时间 | 枚举值: `2026-02-13 22:15:53`, `2026-02-13 22:59:55`, `2026-02-13 21:35:59`, `2026-02-13 22:04:53`, `2026-02-13 21:16:00`, `2026-02-13 22:05:40`, `2026-02-13 21:55:23`, `2026-02-13 20:35:21` |
| 42 | `ledger_status` | integer | [`ledger_status`](#ods-table-fee-transactions) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `1` |
| 43 | `ledger_unit_price` | number | [`ledger_unit_price`](#ods-table-fee-transactions) | 台费结算时设置的 每小时单价/计费单价 | 枚举值: `48.0`, `68.0`, `188.0`, `58.0`, `398.0`, `98.0`, `158.0`, `100.0` |
| 44 | `member_discount_amount` | number | [`member_discount_amount`](#ods-table-fee-transactions) | 由会员权益产生的优惠金额，例如会员折扣、会员价等 | 枚举值: `0.0`, `163.84`, `134.3`, `286.6`, `681.58`, `158.74` |
| 45 | `member_id` | integer | [`member_id`](#ods-table-fee-transactions) | 门店/租户内的会员 ID | 枚举值: `0`, `2799207359858437`, `2799207406946053`, `2799207522600709`, `2799207117129477`, `2799207133021957`, `2849995548625861`, `2799212845565701` |
| 46 | `mgmt_fee` | number | [`mgmt_fee`](#ods-table-fee-transactions) | 管理费字段，用于未来支持“台费附加管理费/服务费”的功能 | 示例: `0.0` |
| 47 | `operator_id` | integer | [`operator_id`](#ods-table-fee-transactions) | 操作员 ID，负责开台/结账的员工账号 ID | 示例: `2790687322443013` |
| 48 | `operator_name` | string | [`operator_name`](#ods-table-fee-transactions) | 操作员姓名（冗余字段），便于直接阅读，不必再联表员工档案 | 示例: `收银员:郑丽珊` |
| 49 | `order_consumption_type` | integer | [`order_consumption_type`](#ods-table-fee-transactions) | 订单消费类型 | 枚举值: `3`, `2`, `1` |
| 50 | `order_pay_id` | integer | [`order_pay_id`](#ods-table-fee-transactions) | 订单支付记录 ID | 示例: `0` |
| 51 | `order_settle_id` | integer | [`order_settle_id`](#ods-table-fee-transactions) | 结算单号/结账 ID，对应一次结账操作 | 枚举值: `3093859276196037`, `3093855537596549`, `3093843703564549`, `3093804233967877`, `3093800338802821`, `3093793847478597`, `3093774959741061`, `3093761316341957` |
| 52 | `order_trade_no` | integer | [`order_trade_no`](#ods-table-fee-transactions) | 订单交易号，是整笔订单的主编号 | 枚举值: `3093740766775621`, `3093784062036101`, `3093701555882181`, `3093729955563653`, `3093681905567877`, `3093730735376517`, `3093720617519301`, `3093641948924229` |
| 53 | `real_table_charge_money` | number | [`real_table_charge_money`](#ods-table-fee-transactions) | 台费中实际向顾客收取的金额（现金/实付维度，未含券方承担或内部调账的那一部分） | 枚举值: `0.0`, `503.55`, `42.28`, `48.67`, `24.29`, `66.14`, `49.97`, `24.44` |
| 54 | `real_table_use_seconds` | integer | [`real_table_use_seconds`](#ods-table-fee-transactions) | 实际使用的总秒数（系统真实统计的使用时长） | 枚举值: `7200`, `3600`, `8674`, `3315`, `12053`, `7055`, `3171`, `3651` |
| 55 | `real_service_money` | number | [`real_service_money`](#ods-table-fee-transactions) | 实际服务费金额 | 示例: `0.0` |
| 56 | `salesman_name` | string | [`salesman_name`](#ods-table-fee-transactions) | 业务员/营业员姓名，如果台费有单独提成员工，这里记录归属人 |  |
| 57 | `salesman_org_id` | integer | [`salesman_org_id`](#ods-table-fee-transactions) | 营业员所属机构/部门 ID | 示例: `0` |
| 58 | `salesman_user_id` | integer | [`salesman_user_id`](#ods-table-fee-transactions) | 营业员的用户 ID（与 salesman_name 搭配） | 示例: `0` |
| 59 | `service_money` | number | [`service_money`](#ods-table-fee-transactions) | 门店用于记录“服务费/成本/分成金额”的字段，类似助教流水里的 service_money | 示例: `0.0` |
| 60 | `site_id` | integer | [`site_id`](#ods-table-fee-transactions) | 门店 ID，本次数据全部来自同一门店（朗朗桌球） | 示例: `2790685415443269` |
| 61 | `site_table_area_id` | integer | [`site_table_area_id`](#ods-table-fee-transactions) | 门店内“台桌区域” ID（站在门店物理布局的角度） | 枚举值: `2791963794329671`, `2791963864273029`, `2791963836207173`, `2791963855982661`, `2791963807682693`, `2791963816579205`, `2791963887030341`, `2956246442462533` |
| 62 | `site_table_area_name` | string | [`site_table_area_name`](#ods-table-fee-transactions) | 台桌区域的名称，用于门店表现和区域统计 | 枚举值: `A区`, `TV台`, `斯诺克区`, `K包`, `B区`, `C区`, `麻将房`, `发财` |
| 63 | `site_table_id` | integer | [`site_table_id`](#ods-table-fee-transactions) | 球台 ID | 枚举值: `2793003506815045`, `2793001904918661`, `2793022937911365`, `2793020260044869`, `2793001695301765`, `2791964216463493`, `2793002980429893`, `2793003705192517` |
| 64 | `start_use_time` | string | [`start_use_time`](#ods-table-fee-transactions) | 台开始使用的时间（实际开台时间） | 枚举值: `2026-02-13 22:15:53`, `2026-02-13 22:59:55`, `2026-02-13 21:35:59`, `2026-02-13 22:04:53`, `2026-02-13 21:16:00`, `2026-02-13 22:05:40`, `2026-02-13 21:55:23`, `2026-02-13 20:35:21` |
| 65 | `tenant_id` | integer | [`tenant_id`](#ods-table-fee-transactions) | 租户/品牌 ID | 示例: `2790683160709957` |
| 66 | `tenant_table_area_id` | integer | [`tenant_table_area_id`](#ods-table-fee-transactions) | 租户维度的台桌区域 ID（品牌层面的同一类区域） | 枚举值: `2791960001957765`, `2791962068946821`, `2791961347968901`, `2791961709907845`, `2791960521691013`, `2791960850435973`, `2791962314215301`, `2956244810877893` |
| 67 | `used_card_amount` | number | [`used_card_amount`](#ods-table-fee-transactions) | 由储值卡、次卡等“卡内余额”抵扣的金额 | 示例: `0.0` |

<a id="ods-table-fee-transactions"></a>

#### ODS 表结构 — ods.table_fee_transactions [🔗 API](#api-table-fee-transactions)

共 47 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`siteProfile.id`](#api-table-fee-transactions) | [`dwd_table_fee_log.table_fee_log_id`](#dwd-dwd-table-fee-log), [`dwd_table_fee_log_ex.table_fee_log_id`](#dwd-dwd-table-fee-log-ex) | 台费流水记录主键（事实表主键） |
| 2 | `tenant_id` | bigint | [`siteProfile.tenant_id`](#api-table-fee-transactions) | [`dwd_table_fee_log.tenant_id`](#dwd-dwd-table-fee-log) | 租户/品牌 ID |
| 3 | `site_id` | bigint | [`site_id`](#api-table-fee-transactions) | [`dim_site.site_id`](#dwd-dim-site), [`dim_site_ex.site_id`](#dwd-dim-site-ex), [`dwd_table_fee_log.site_id`](#dwd-dwd-table-fee-log) | 门店 ID，本次数据全部来自同一门店（朗朗桌球） |
| 4 | `siteprofile` | jsonb | — | — | （待补充） |
| 5 | `site_table_id` | bigint | [`site_table_id`](#api-table-fee-transactions) | [`dwd_table_fee_log.site_table_id`](#dwd-dwd-table-fee-log) | 球台 ID |
| 6 | `site_table_area_id` | bigint | [`site_table_area_id`](#api-table-fee-transactions) | [`dwd_table_fee_log.site_table_area_id`](#dwd-dwd-table-fee-log) | 门店内“台桌区域” ID（站在门店物理布局的角度） |
| 7 | `site_table_area_name` | text | [`site_table_area_name`](#api-table-fee-transactions) | [`dwd_table_fee_log.site_table_area_name`](#dwd-dwd-table-fee-log) | 台桌区域的名称，用于门店表现和区域统计 |
| 8 | `tenant_table_area_id` | bigint | [`tenant_table_area_id`](#api-table-fee-transactions) | [`dwd_table_fee_log.tenant_table_area_id`](#dwd-dwd-table-fee-log) | 租户维度的台桌区域 ID（品牌层面的同一类区域） |
| 9 | `order_trade_no` | text | [`order_trade_no`](#api-table-fee-transactions) | [`dwd_table_fee_log.order_trade_no`](#dwd-dwd-table-fee-log) | 订单交易号，是整笔订单的主编号 |
| 10 | `order_pay_id` | bigint | [`order_pay_id`](#api-table-fee-transactions) | [`dwd_table_fee_log.order_pay_id`](#dwd-dwd-table-fee-log) | 订单支付记录 ID |
| 11 | `order_settle_id` | bigint | [`order_settle_id`](#api-table-fee-transactions) | [`dwd_table_fee_log.order_settle_id`](#dwd-dwd-table-fee-log) | 结算单号/结账 ID，对应一次结账操作 |
| 12 | `ledger_name` | text | [`ledger_name`](#api-table-fee-transactions) | [`dwd_table_fee_log.ledger_name`](#dwd-dwd-table-fee-log) | 台号名称，实际展示给员工/顾客看的桌台编号 |
| 13 | `ledger_amount` | numeric | [`ledger_amount`](#api-table-fee-transactions) | [`dwd_table_fee_log.ledger_amount`](#dwd-dwd-table-fee-log) | 按单价与计费时长计算出的原始应收台费金额 |
| 14 | `ledger_count` | numeric | [`ledger_count`](#api-table-fee-transactions) | [`dwd_table_fee_log.ledger_count`](#dwd-dwd-table-fee-log) | 台账记录的计费秒数，计费用秒数（应收时长） |
| 15 | `ledger_unit_price` | numeric | [`ledger_unit_price`](#api-table-fee-transactions) | [`dwd_table_fee_log.ledger_unit_price`](#dwd-dwd-table-fee-log) | 台费结算时设置的 每小时单价/计费单价 |
| 16 | `ledger_status` | integer | [`ledger_status`](#api-table-fee-transactions) | [`dwd_table_fee_log.ledger_status`](#dwd-dwd-table-fee-log) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 17 | `ledger_start_time` | timestamp without time zone | [`ledger_start_time`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.ledger_start_time`](#dwd-dwd-table-fee-log-ex) | 台账上的计费起始时间 |
| 18 | `ledger_end_time` | timestamp without time zone | [`ledger_end_time`](#api-table-fee-transactions) | [`dwd_table_fee_log.ledger_end_time`](#dwd-dwd-table-fee-log) | 台账上的计费结束时间 |
| 19 | `start_use_time` | timestamp without time zone | [`start_use_time`](#api-table-fee-transactions) | [`dwd_table_fee_log.start_use_time`](#dwd-dwd-table-fee-log) | 台开始使用的时间（实际开台时间） |
| 20 | `last_use_time` | timestamp without time zone | [`last_use_time`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.last_use_time`](#dwd-dwd-table-fee-log-ex) | 最后使用/操作时间 |
| 21 | `real_table_use_seconds` | integer | [`real_table_use_seconds`](#api-table-fee-transactions) | [`dwd_table_fee_log.real_table_use_seconds`](#dwd-dwd-table-fee-log) | 实际使用的总秒数（系统真实统计的使用时长） |
| 22 | `real_table_charge_money` | numeric | [`real_table_charge_money`](#api-table-fee-transactions) | [`dwd_table_fee_log.real_table_charge_money`](#dwd-dwd-table-fee-log) | 台费中实际向顾客收取的金额（现金/实付维度，未含券方承担或内部调账的那一部分） |
| 23 | `add_clock_seconds` | integer | [`add_clock_seconds`](#api-table-fee-transactions) | [`dwd_table_fee_log.add_clock_seconds`](#dwd-dwd-table-fee-log) | 加钟秒数，在原有使用基础上追加的时长 |
| 24 | `adjust_amount` | numeric | [`adjust_amount`](#api-table-fee-transactions) | [`dwd_table_fee_log.adjust_amount`](#dwd-dwd-table-fee-log) | 调整金额/调账金额，用于将台费金额转移或冲减到其它项目，或手工调整 |
| 25 | `coupon_promotion_amount` | numeric | [`coupon_promotion_amount`](#api-table-fee-transactions) | [`dwd_table_fee_log.coupon_promotion_amount`](#dwd-dwd-table-fee-log) | 由优惠券/活动/团购（平台/门店促销）承担的优惠金额，直接抵扣在台费上 |
| 26 | `member_discount_amount` | numeric | [`member_discount_amount`](#api-table-fee-transactions) | [`dwd_table_fee_log.member_discount_amount`](#dwd-dwd-table-fee-log) | 由会员权益产生的优惠金额，例如会员折扣、会员价等 |
| 27 | `used_card_amount` | numeric | [`used_card_amount`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.used_card_amount`](#dwd-dwd-table-fee-log-ex) | 由储值卡、次卡等“卡内余额”抵扣的金额 |
| 28 | `mgmt_fee` | numeric | [`mgmt_fee`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.mgmt_fee`](#dwd-dwd-table-fee-log-ex) | 管理费字段，用于未来支持“台费附加管理费/服务费”的功能 |
| 29 | `service_money` | numeric | [`service_money`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.service_money`](#dwd-dwd-table-fee-log-ex) | 门店用于记录“服务费/成本/分成金额”的字段，类似助教流水里的 service_money |
| 30 | `fee_total` | numeric | [`fee_total`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.fee_total`](#dwd-dwd-table-fee-log-ex) | 各种附加费用（如管理费、服务费）合计值 |
| 31 | `is_single_order` | integer | [`is_single_order`](#api-table-fee-transactions) | [`dwd_table_fee_log.is_single_order`](#dwd-dwd-table-fee-log) | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| 32 | `is_delete` | integer | [`is_delete`](#api-table-fee-transactions) | [`dwd_table_fee_log.is_delete`](#dwd-dwd-table-fee-log) | 逻辑删除标记（0=否，1=是） |
| 33 | `member_id` | bigint | [`member_id`](#api-table-fee-transactions) | [`dwd_table_fee_log.member_id`](#dwd-dwd-table-fee-log) | 门店/租户内的会员 ID |
| 34 | `operator_id` | bigint | [`operator_id`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.operator_id`](#dwd-dwd-table-fee-log-ex) | 操作员 ID，负责开台/结账的员工账号 ID |
| 35 | `operator_name` | text | [`operator_name`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.operator_name`](#dwd-dwd-table-fee-log-ex) | 操作员姓名（冗余字段），便于直接阅读，不必再联表员工档案 |
| 36 | `salesman_name` | text | [`salesman_name`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.salesman_name`](#dwd-dwd-table-fee-log-ex) | 业务员/营业员姓名，如果台费有单独提成员工，这里记录归属人 |
| 37 | `salesman_org_id` | bigint | [`salesman_org_id`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.salesman_org_id`](#dwd-dwd-table-fee-log-ex) | 营业员所属机构/部门 ID |
| 38 | `salesman_user_id` | bigint | [`salesman_user_id`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.salesman_user_id`](#dwd-dwd-table-fee-log-ex) | 营业员的用户 ID（与 salesman_name 搭配） |
| 39 | `create_time` | timestamp without time zone | [`create_time`](#api-table-fee-transactions) | [`dwd_table_fee_log.create_time`](#dwd-dwd-table-fee-log) | 这条台费流水记录的创建时间，通常接近结账时间 |
| 40 | `activity_discount_amount` | numeric | [`activity_discount_amount`](#api-table-fee-transactions) | [`dwd_table_fee_log.activity_discount_amount`](#dwd-dwd-table-fee-log) | 活动折扣金额 |
| 41 | `order_consumption_type` | integer | [`order_consumption_type`](#api-table-fee-transactions) | [`dwd_table_fee_log_ex.order_consumption_type`](#dwd-dwd-table-fee-log-ex) | 订单消费类型 |
| 42 | `real_service_money` | numeric | [`real_service_money`](#api-table-fee-transactions) | [`dwd_table_fee_log.real_service_money`](#dwd-dwd-table-fee-log) | 实际服务费金额 |
| 43 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |
| 44 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 45 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 46 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 47 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |

<a id="dwd-dim-site"></a>

#### DWD 表结构 — dwd.dim_site [🔗 ODS](#ods-table-fee-transactions)

共 17 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `site_id` | bigint | [`site_id`](#ods-table-fee-transactions) | 直接 | 门店 ID |
| 2 | `org_id` | bigint | [`siteprofile->>'org_id'`](#ods-table-fee-transactions) | 直接 | 组织机构 ID |
| 3 | `tenant_id` | bigint | [`siteprofile->>'tenant_id'`](#ods-table-fee-transactions) | 直接 | 租户 ID（当前值: 2790683160709957） |
| 4 | `shop_name` | text | [`siteprofile->>'shop_name'`](#ods-table-fee-transactions) | 直接 | 门店名称。**当前值**: "朗朗桌球" |
| 5 | `site_label` | text | [`siteprofile->>'site_label'`](#ods-table-fee-transactions) | 直接 | 门店标签。**当前值**: "A" |
| 6 | `full_address` | text | [`siteprofile->>'full_address'`](#ods-table-fee-transactions) | 直接 | 详细地址。**当前值**: "广东省广州市天河区丽阳街12号" |
| 7 | `address` | text | [`siteprofile->>'address'`](#ods-table-fee-transactions) | 直接 | 地址描述。**当前值**: "广东省广州市天河区天园街道朗朗桌球" |
| 8 | `longitude` | numeric | [`siteprofile->>'longitude'`](#ods-table-fee-transactions) | → numeric | 经度。**当前值**: 113.360321 |
| 9 | `latitude` | numeric | [`siteprofile->>'latitude'`](#ods-table-fee-transactions) | → numeric | 纬度。**当前值**: 23.133629 |
| 10 | `tenant_site_region_id` | bigint | [`siteprofile->>'tenant_site_region_id'`](#ods-table-fee-transactions) | 直接 | 区域 ID。**当前值**: 156440100 |
| 11 | `business_tel` | text | [`siteprofile->>'business_tel'`](#ods-table-fee-transactions) | 直接 | 联系电话。**当前值**: "13316068642" |
| 12 | `site_type` | integer | [`siteprofile->>'site_type'`](#ods-table-fee-transactions) | 直接 | 门店类型。**枚举值**: 1(1)=**[待确认]** |
| 13 | `shop_status` | integer | [`siteprofile->>'shop_status'`](#ods-table-fee-transactions) | 直接 | 营业状态。**枚举值**: 1(1)=营业中 **[待确认]** |
| 14 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 版本生效时间 |
| 15 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 版本失效时间 |
| 16 | `scd2_is_current` | integer | — | SCD2 | 当前版本标记 |
| 17 | `scd2_version` | integer | — | SCD2 | 版本号 |

<a id="dwd-dim-site-ex"></a>

#### DWD 表结构 — dwd.dim_site_ex [🔗 ODS](#ods-table-fee-transactions)

共 25 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `site_id` | bigint | [`site_id`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 2 | `avatar` | text | [`siteprofile->>'avatar'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 3 | `address` | text | [`siteprofile->>'address'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 4 | `longitude` | numeric | [`siteprofile->>'longitude'`](#ods-table-fee-transactions) | → numeric | JSONB 提取 |
| 5 | `latitude` | numeric | [`siteprofile->>'latitude'`](#ods-table-fee-transactions) | → numeric | JSONB 提取 |
| 6 | `tenant_site_region_id` | bigint | [`siteprofile->>'tenant_site_region_id'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 7 | `auto_light` | integer | [`siteprofile->>'auto_light'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 8 | `light_status` | integer | [`siteprofile->>'light_status'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 9 | `light_type` | integer | [`siteprofile->>'light_type'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 10 | `light_token` | text | [`siteprofile->>'light_token'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 11 | `site_type` | integer | [`siteprofile->>'site_type'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 12 | `site_label` | text | [`siteprofile->>'site_label'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 13 | `attendance_enabled` | integer | [`siteprofile->>'attendance_enabled'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 14 | `attendance_distance` | integer | [`siteprofile->>'attendance_distance'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 15 | `customer_service_qrcode` | text | [`siteprofile->>'customer_service_qrcode'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 16 | `customer_service_wechat` | text | [`siteprofile->>'customer_service_wechat'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 17 | `fixed_pay_qrcode` | text | [`siteprofile->>'fixed_pay_qrCode'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 18 | `prod_env` | text | [`siteprofile->>'prod_env'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 19 | `shop_status` | integer | [`siteprofile->>'shop_status'`](#ods-table-fee-transactions) | 直接 | JSONB 提取 |
| 20 | `create_time` | timestamp with time zone | [`siteprofile->>'create_time'`](#ods-table-fee-transactions) | → timestamptz | JSONB 提取 |
| 21 | `update_time` | timestamp with time zone | [`siteprofile->>'update_time'`](#ods-table-fee-transactions) | → timestamptz | JSONB 提取 |
| 22 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 23 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 24 | `scd2_is_current` | integer | — | SCD2 | SCD2 元数据 |
| 25 | `scd2_version` | integer | — | SCD2 | SCD2 元数据 |

<a id="dwd-dwd-table-fee-log"></a>

#### DWD 表结构 — dwd.dwd_table_fee_log [🔗 ODS](#ods-table-fee-transactions)

共 29 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `table_fee_log_id` | bigint | [`id`](#ods-table-fee-transactions) | 直接 | 台费流水 ID |
| 2 | `order_trade_no` | bigint | [`order_trade_no`](#ods-table-fee-transactions) | 直接 | 订单号 |
| 3 | `order_settle_id` | bigint | [`order_settle_id`](#ods-table-fee-transactions) | 直接 | 结账单 ID → dwd_settlement_head |
| 4 | `order_pay_id` | bigint | [`order_pay_id`](#ods-table-fee-transactions) | 直接 | 支付单 ID（当前数据全为 0） |
| 5 | `tenant_id` | bigint | [`tenant_id`](#ods-table-fee-transactions) | 直接 | 租户 ID |
| 6 | `site_id` | bigint | [`site_id`](#ods-table-fee-transactions) | 直接 | 门店 ID |
| 7 | `site_table_id` | bigint | [`site_table_id`](#ods-table-fee-transactions) | 直接 | 台桌 ID → dim_table |
| 8 | `site_table_area_id` | bigint | [`site_table_area_id`](#ods-table-fee-transactions) | 直接 | 台区 ID |
| 9 | `site_table_area_name` | character varying | [`site_table_area_name`](#ods-table-fee-transactions) | 直接 | 台区名称。**枚举值**: "A区", "B区", "斯诺克区", "麻将房", "C区", "补时长", "VI... |
| 10 | `tenant_table_area_id` | bigint | [`tenant_table_area_id`](#ods-table-fee-transactions) | 直接 | 租户级台区 ID |
| 11 | `member_id` | bigint | [`member_id`](#ods-table-fee-transactions) | 直接 | 会员 ID（0=散客，占比约 82.4%） |
| 12 | `ledger_name` | character varying | [`ledger_name`](#ods-table-fee-transactions) | 直接 | 台桌名称。**样本值**: "A3", "A5", "A4", "S1", "B5", "M3" 等 |
| 13 | `ledger_unit_price` | numeric | [`ledger_unit_price`](#ods-table-fee-transactions) | 直接 | 单价（元/小时），如 48.00/58.00/68.00 |
| 14 | `ledger_count` | integer | [`ledger_count`](#ods-table-fee-transactions) | 直接 | 计费时长（秒）。**样本值**: 3600=1h, 7200=2h, 10800=3h 等 |
| 15 | `ledger_amount` | numeric | [`ledger_amount`](#ods-table-fee-transactions) | 直接 | 计费金额（元） |
| 16 | `real_table_charge_money` | numeric | [`real_table_charge_money`](#ods-table-fee-transactions) | 直接 | 实收台费金额 |
| 17 | `coupon_promotion_amount` | numeric | [`coupon_promotion_amount`](#ods-table-fee-transactions) | 直接 | 券促销金额 |
| 18 | `member_discount_amount` | numeric | [`member_discount_amount`](#ods-table-fee-transactions) | 直接 | 会员折扣金额 |
| 19 | `adjust_amount` | numeric | [`adjust_amount`](#ods-table-fee-transactions) | 直接 | 调整金额 |
| 20 | `real_table_use_seconds` | integer | [`real_table_use_seconds`](#ods-table-fee-transactions) | 直接 | 实际使用时长（秒） |
| 21 | `add_clock_seconds` | integer | [`add_clock_seconds`](#ods-table-fee-transactions) | 直接 | 加时时长（秒），大多为 0 |
| 22 | `start_use_time` | timestamp with time zone | [`start_use_time`](#ods-table-fee-transactions) | 直接 | 开台时间 |
| 23 | `ledger_end_time` | timestamp with time zone | [`ledger_end_time`](#ods-table-fee-transactions) | 直接 | 结账时间 |
| 24 | `create_time` | timestamp with time zone | [`create_time`](#ods-table-fee-transactions) | 直接 | 记录创建时间 |
| 25 | `ledger_status` | integer | [`ledger_status`](#ods-table-fee-transactions) | 直接 | 账本状态。**枚举值**: 1=已结算 |
| 26 | `is_single_order` | integer | [`is_single_order`](#ods-table-fee-transactions) | 直接 | 是否独立订单。**枚举值**: 0=合并订单, 1=独立订单 |
| 27 | `is_delete` | integer | [`is_delete`](#ods-table-fee-transactions) | 直接 | 删除标记。**枚举值**: 0=未删除 |
| 28 | `activity_discount_amount` | numeric | [`activity_discount_amount`](#ods-table-fee-transactions) | 直接 | 活动折扣金额 |
| 29 | `real_service_money` | numeric | [`real_service_money`](#ods-table-fee-transactions) | 直接 | 实际服务费金额 |

<a id="dwd-dwd-table-fee-log-ex"></a>

#### DWD 表结构 — dwd.dwd_table_fee_log_ex [🔗 ODS](#ods-table-fee-transactions)

共 13 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `table_fee_log_id` | bigint | [`id`](#ods-table-fee-transactions) | 直接 | 字段重命名 |
| 2 | `operator_name` | character varying | [`operator_name`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 3 | `salesman_name` | character varying | [`salesman_name`](#ods-table-fee-transactions) | 直接 | 名称字段，用于展示与辅助识别 |
| 4 | `used_card_amount` | numeric | [`used_card_amount`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 5 | `service_money` | numeric | [`service_money`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 6 | `mgmt_fee` | numeric | [`mgmt_fee`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 7 | `fee_total` | numeric | [`fee_total`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 8 | `ledger_start_time` | timestamp with time zone | [`ledger_start_time`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 9 | `last_use_time` | timestamp with time zone | [`last_use_time`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 10 | `operator_id` | bigint | [`operator_id`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 11 | `salesman_user_id` | bigint | [`salesman_user_id`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 12 | `salesman_org_id` | bigint | [`salesman_org_id`](#ods-table-fee-transactions) | 直接 | 同名直传 |
| 13 | `order_consumption_type` | integer | [`order_consumption_type`](#ods-table-fee-transactions) | 直接 |  |

### 3.4 assistant_service_records（助教服务流水）

- 任务代码：`ODS_ASSISTANT_LEDGER`
- 采样记录数：200
- API JSON 字段数：91
- ODS 列数：71
- DWD 目标表：dwd_assistant_service_log, dwd_assistant_service_log_ex

<a id="api-assistant-service-records"></a>

#### API 源字段 — assistant_service_records [🔗 ODS](#ods-assistant-service-records)

已映射 67/91，覆盖率 73.6%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `assistantNo` | string | [`assistantno`](#ods-assistant-service-records) | （待补充） | 大小写匹配；枚举值: `15`, `21`, `1`, `2`, `11`, `37`, `9`, `4` |
| 2 | `nickname` | string | [`nickname`](#ods-assistant-service-records) | 助教对外昵称，如“佳怡”“周周”“球球”等 | 枚举值: `七七`, `年糕`, `小燕`, `佳怡`, `千千`, `阿清`, `球球`, `璇子` |
| 3 | `levelName` | string | [`levelname`](#ods-assistant-service-records) | 名称字段，用于展示与辅助识别 | 大小写匹配；枚举值: `中级`, `初级`, `星级`, `高级` |
| 4 | `assistantTeamName` | string | [`assistantteamname`](#ods-assistant-service-records) | 助教团队名称 | 大小写匹配；枚举值: `1组`, `2组` |
| 5 | `assistantName` | string | [`assistantname`](#ods-assistant-service-records) | （待补充） | 大小写匹配；枚举值: `邹绮`, `李艳`, `李小燕`, `陈嘉怡`, `张芳梅`, `梁坚锖`, `胡敏`, `谭璇` |
| 6 | `tableName` | string | [`tablename`](#ods-assistant-service-records) | 名称字段，用于展示与辅助识别 | 大小写匹配；枚举值: `发财`, `666`, `C5`, `S1`, `TV`, `VIP5`, `M5`, `A1` |
| 7 | `siteProfile.id` | integer | [`id`](#ods-assistant-service-records) | 本条助教流水记录的主键 ID（流水唯一标识） | 📦 嵌套对象；示例: `2790685415443269` |
| 8 | `siteProfile.org_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2790684179467077` |
| 9 | `siteProfile.shop_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `朗朗桌球` |
| 10 | `siteProfile.avatar` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `https://oss.ficoo.vip/admin...` |
| 11 | `siteProfile.business_tel` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `13316068642` |
| 12 | `siteProfile.full_address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区丽阳街12号` |
| 13 | `siteProfile.address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区天园街道朗朗桌球` |
| 14 | `siteProfile.longitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `113.360321` |
| 15 | `siteProfile.latitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `23.133629` |
| 16 | `siteProfile.tenant_site_region_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `156440100` |
| 17 | `siteProfile.tenant_id` | integer | [`tenant_id`](#ods-assistant-service-records) | 租户/品牌 ID | 📦 嵌套对象；示例: `2790683160709957` |
| 18 | `siteProfile.auto_light` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 19 | `siteProfile.attendance_distance` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 20 | `siteProfile.wifi_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 21 | `siteProfile.wifi_password` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 22 | `siteProfile.customer_service_qrcode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 23 | `siteProfile.customer_service_wechat` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 24 | `siteProfile.fixed_pay_qrCode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 25 | `siteProfile.prod_env` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 26 | `siteProfile.light_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 27 | `siteProfile.light_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 28 | `siteProfile.site_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 29 | `siteProfile.light_token` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 30 | `siteProfile.site_label` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `A` |
| 31 | `siteProfile.attendance_enabled` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 32 | `siteProfile.shop_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 33 | `skillName` | string | [`skillname`](#ods-assistant-service-records) | 名称字段，用于展示与辅助识别 | 大小写匹配；枚举值: `基础课`, `附加课`, `包厢课` |
| 34 | `id` | integer | [`id`](#ods-assistant-service-records) | 本条助教流水记录的主键 ID（流水唯一标识） | 枚举值: `3092712427276485`, `3091323705821317`, `3091115886692677`, `3090827615127877`, `3090739976226949`, `3090257805610309`, `3090257805102405`, `3089721510071749` |
| 35 | `order_trade_no` | integer | [`order_trade_no`](#ods-assistant-service-records) | 订单交易号，整个订单层面的编号 | 枚举值: `3092230766020741`, `3091018769713413`, `3090862690715909`, `3090742856632581`, `3090601961359621`, `3089320298319045`, `3089223699680453`, `3089415923404101` |
| 36 | `site_id` | integer | [`site_id`](#ods-assistant-service-records) | 门店 ID，本数据中指“朗朗桌球”这一家门店 | 示例: `2790685415443269` |
| 37 | `tenant_id` | integer | [`tenant_id`](#ods-assistant-service-records) | 租户/品牌 ID | 示例: `2790683160709957` |
| 38 | `operator_id` | integer | [`operator_id`](#ods-assistant-service-records) | 操作员 ID（录入/结算这条助教服务的员工） | 示例: `2790687322443013` |
| 39 | `operator_name` | string | [`operator_name`](#ods-assistant-service-records) | 操作员姓名，与 operator_id 一起使用，便于直接阅读 | 示例: `收银员:郑丽珊` |
| 40 | `order_settle_id` | integer | [`order_settle_id`](#ods-assistant-service-records) | 订单结算 ID，相当于“结账单号”的内部主键 | 枚举值: `3092711340902597`, `3091323600603397`, `3091115820353733`, `3090827566926085`, `3090739928746117`, `3090257727786373`, `3089721241816261`, `3089689788959941` |
| 41 | `ledger_name` | string | [`ledger_name`](#ods-assistant-service-records) | 名称字段，用于展示与辅助识别 | 枚举值: `15-七七`, `21-年糕`, `1-小燕`, `2-佳怡`, `11-千千`, `37-阿清`, `9-球球`, `4-璇子` |
| 42 | `ledger_group_name` | string | [`ledger_group_name`](#ods-assistant-service-records) | 助教项目所属的“计费分组/套餐分组名称”，例如某种助教套餐或业务组名称 |  |
| 43 | `ledger_unit_price` | number | [`ledger_unit_price`](#ods-assistant-service-records) | 助教服务 标准单价（通常是标价：每小时、每节课的单价） | 枚举值: `108.0`, `98.0`, `138.0`, `190.0`, `118.0` |
| 44 | `ledger_count` | integer | [`ledger_count`](#ods-assistant-service-records) | 台账记录的计时总秒数 | 枚举值: `21544`, `18220`, `15021`, `4682`, `7717`, `47652`, `4774`, `1224` |
| 45 | `ledger_amount` | number | [`ledger_amount`](#ods-assistant-service-records) | 按标准单价计算出来的应收金额（近似 = ledger_unit_price × income_seconds / ... | 枚举值: `646.32`, `546.6`, `408.9`, `127.45`, `210.07`, `1429.56`, `129.96`, `33.32` |
| 46 | `order_pay_id` | integer | [`order_pay_id`](#ods-assistant-service-records) | 关联到“支付记录”的主键 ID | 示例: `0` |
| 47 | `create_time` | string | [`create_time`](#ods-assistant-service-records) | 这条助教流水记录创建时间（一般接近结算/下单时间） | 枚举值: `2026-02-13 04:49:48`, `2026-02-12 05:17:07`, `2026-02-12 01:45:43`, `2026-02-11 20:52:28`, `2026-02-11 19:23:19`, `2026-02-11 11:12:50`, `2026-02-11 02:07:17`, `2026-02-11 01:35:18` |
| 48 | `is_delete` | integer | [`is_delete`](#ods-assistant-service-records) | 逻辑删除标志 | 示例: `0` |
| 49 | `assistant_team_id` | integer | [`assistant_team_id`](#ods-assistant-service-records) | 助教所属团队 ID | 枚举值: `2792011585884037`, `2959085810992645` |
| 50 | `assistant_level` | integer | [`assistant_level`](#ods-assistant-service-records) | 助教等级名称，与 assistant_level 一一对应（初级/中级/高级/助教管理） | 枚举值: `20`, `10`, `40`, `30` |
| 51 | `ledger_start_time` | string | [`ledger_start_time`](#ods-assistant-service-records) | 台账层面记录的开始时间 | 枚举值: `2026-02-12 21:15:08`, `2026-02-12 00:07:00`, `2026-02-11 21:30:41`, `2026-02-11 19:32:32`, `2026-02-11 17:14:22`, `2026-02-10 20:58:18`, `2026-02-10 18:38:59`, `2026-02-10 21:44:36` |
| 52 | `ledger_end_time` | string | [`ledger_end_time`](#ods-assistant-service-records) | 台账层面的结束时间 | 枚举值: `2026-02-13 03:14:14`, `2026-02-12 05:10:40`, `2026-02-12 01:41:02`, `2026-02-11 20:50:34`, `2026-02-11 19:22:59`, `2026-02-11 10:12:32`, `2026-02-10 19:58:33`, `2026-02-10 22:05:00` |
| 53 | `is_single_order` | integer | [`is_single_order`](#ods-assistant-service-records) | 布尔/开关字段，用于表示权限、可用性或状态开关 | 示例: `1` |
| 54 | `order_assistant_id` | integer | [`order_assistant_id`](#ods-assistant-service-records) | 订单中“助教项目明细”的内部 ID | 枚举值: `3092265482209605`, `3091018857580869`, `3090865193781509`, `3090749033924741`, `3090613220428101`, `3089417770093893`, `3089280814894277`, `3089463294922117` |
| 55 | `site_assistant_id` | integer | [`site_assistant_id`](#ods-assistant-service-records) | 门店维度的助教 ID | 枚举值: `2793493699088517`, `2861304461364293`, `2964673443302213`, `2793530479530053`, `2964640248745157`, `2964641017858885`, `2840060593686213`, `2793532503855173` |
| 56 | `order_assistant_type` | integer | [`order_assistant_type`](#ods-assistant-service-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 枚举值: `1`, `2` |
| 57 | `ledger_status` | integer | [`ledger_status`](#ods-assistant-service-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `1` |
| 58 | `site_table_id` | integer | [`site_table_id`](#ods-assistant-service-records) | 球台 ID | 枚举值: `2956248279567557`, `2793020955840645`, `2793017278582917`, `2793020259897413`, `2793022937911365`, `2793018776735877`, `2793023960731717`, `2791964216463493` |
| 59 | `projected_income` | number | [`projected_income`](#ods-assistant-service-records) | 实际结算计入门店的金额（已经考虑折扣、卡权益、券等后的结果） | 枚举值: `538.5`, `454.5`, `333.33`, `104.0`, `170.67`, `1191.0`, `105.33`, `26.67` |
| 60 | `is_not_responding` | integer | [`is_not_responding`](#ods-assistant-service-records) | 布尔/开关字段，用于表示权限、可用性或状态开关 | 示例: `0` |
| 61 | `income_seconds` | integer | [`income_seconds`](#ods-assistant-service-records) | 计费秒数 / 应计收入对应的时间 | 枚举值: `21540`, `18180`, `15000`, `4680`, `7680`, `47640`, `4740`, `1200` |
| 62 | `user_id` | integer | [`user_id`](#ods-assistant-service-records) | 助教对应的“用户账号 ID”（系统级用户） | 枚举值: `2793493698596997`, `2861304460905541`, `2643377426450373`, `2793530479054917`, `2964640248253637`, `2964641017334597`, `2840060593211077`, `2793532503380037` |
| 63 | `trash_applicant_id` | integer | [`trash_applicant_id`](#ods-assistant-service-records) | 提出废除申请的员工 ID（通常是操作员/管理员） | 示例: `0` |
| 64 | `trash_applicant_name` | string | [`trash_applicant_name`](#ods-assistant-service-records) | 废除申请人姓名 |  |
| 65 | `is_trash` | integer | [`is_trash`](#ods-assistant-service-records) | 布尔/开关字段，用于表示权限、可用性或状态开关 | 示例: `0` |
| 66 | `trash_reason` | string | [`trash_reason`](#ods-assistant-service-records) | 废除原因（文本说明），例如“顾客取消”“录入错误”等 |  |
| 67 | `real_use_seconds` | integer | [`real_use_seconds`](#ods-assistant-service-records) | 实际使用时长（秒） | 枚举值: `21544`, `18220`, `15021`, `4683`, `7718`, `47652`, `4774`, `1224` |
| 68 | `real_service_money` | number | [`real_service_money`](#ods-assistant-service-records) | 实际服务费金额 | 示例: `0.0` |
| 69 | `add_clock` | integer | [`add_clock`](#ods-assistant-service-records) | 加钟秒数，即在原有预约/服务基础上临时追加的时长 | 枚举值: `0`, `2820`, `13380`, `14400` |
| 70 | `returns_clock` | integer | [`returns_clock`](#ods-assistant-service-records) | 退钟秒数（取消加钟或提前结束退回的时间） | 示例: `0` |
| 71 | `is_confirm` | integer | [`is_confirm`](#ods-assistant-service-records) | 布尔/开关字段，用于表示权限、可用性或状态开关 | 示例: `2` |
| 72 | `member_discount_amount` | number | [`member_discount_amount`](#ods-assistant-service-records) | 由会员卡折扣产生的优惠金额 | 示例: `0.0` |
| 73 | `manual_discount_amount` | number | [`manual_discount_amount`](#ods-assistant-service-records) | 收银员手动给予的减免金额（人工改价） | 示例: `0.0` |
| 74 | `service_money` | number | [`service_money`](#ods-assistant-service-records) | 用于记录与助教结算的金额（平台预留的“成本/分成”字段） | 示例: `0.0` |
| 75 | `person_org_id` | integer | [`person_org_id`](#ods-assistant-service-records) | 助教所属“人事组织/部门 ID” | 枚举值: `2793493698990213`, `2861304461265989`, `2964673443203909`, `2793530479431749`, `2964640248630469`, `2964641017760581`, `2840060593587909`, `2793532503756869` |
| 76 | `last_use_time` | string | [`last_use_time`](#ods-assistant-service-records) | 最后一次使用（实际服务）时间 | 枚举值: `2026-02-13 03:14:14`, `2026-02-12 05:10:40`, `2026-02-12 01:41:02`, `2026-02-11 20:50:35`, `2026-02-11 19:23:00`, `2026-02-11 10:12:32`, `2026-02-10 19:58:33`, `2026-02-10 22:05:00` |
| 77 | `salesman_name` | string | [`salesman_name`](#ods-assistant-service-records) | 关联的“营业员/销售员姓名”，用于提成归属 |  |
| 78 | `salesman_user_id` | integer | [`salesman_user_id`](#ods-assistant-service-records) | 营业员用户 ID | 示例: `0` |
| 79 | `salesman_org_id` | integer | [`salesman_org_id`](#ods-assistant-service-records) | 营业员所属组织/部门 ID | 示例: `0` |
| 80 | `coupon_deduct_money` | number | [`coupon_deduct_money`](#ods-assistant-service-records) | 由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额 | 示例: `0.0` |
| 81 | `skill_id` | integer | [`skill_id`](#ods-assistant-service-records) | 助教服务“课程/技能”ID | 枚举值: `2790683529513797`, `2790683529513798`, `3039912271463941` |
| 82 | `start_use_time` | string | [`start_use_time`](#ods-assistant-service-records) | 助教实际开始服务时间 | 枚举值: `2026-02-12 21:15:08`, `2026-02-12 00:07:00`, `2026-02-11 21:30:41`, `2026-02-11 19:32:32`, `2026-02-11 17:14:22`, `2026-02-10 20:58:18`, `2026-02-10 18:38:59`, `2026-02-10 21:44:36` |
| 83 | `tenant_member_id` | integer | [`tenant_member_id`](#ods-assistant-service-records) | 商户维度会员 ID（门店/品牌内的会员主键） | 枚举值: `2799207522600709`, `2799207359858437`, `2799207363643141`, `0`, `2969257129938053`, `3048238811858693`, `2799207124305669`, `2799207406946053` |
| 84 | `system_member_id` | integer | [`system_member_id`](#ods-assistant-service-records) | 系统级会员 ID（全集团统一 ID） | 枚举值: `2799207521568517`, `2799207358777093`, `2485293902352645`, `0`, `2644610908900421`, `3048238810220293`, `2799207123224325`, `2799207405995781` |
| 85 | `skill_grade` | integer | [`skill_grade`](#ods-assistant-service-records) | 顾客对“技能表现”的评分（整数或打分等级） | 示例: `0` |
| 86 | `service_grade` | integer | [`service_grade`](#ods-assistant-service-records) | 顾客对“服务态度”的评分 | 示例: `0` |
| 87 | `composite_grade` | number | [`composite_grade`](#ods-assistant-service-records) | 综合评分（例如技能+服务加权后的平均分），当前数据没有实际评分 | 示例: `0.0` |
| 88 | `sum_grade` | number | [`sum_grade`](#ods-assistant-service-records) | 累计评分总和（可能用于计算平均分），当前为 0 | 示例: `0.0` |
| 89 | `get_grade_times` | integer | [`get_grade_times`](#ods-assistant-service-records) | 该条记录对应的评价次数（或该助教被评价次数快照） | 示例: `0` |
| 90 | `grade_status` | integer | [`grade_status`](#ods-assistant-service-records) | 1 = 未评价/正常 | 示例: `1` |
| 91 | `composite_grade_time` | string | [`composite_grade_time`](#ods-assistant-service-records) | 助教服务所在的球台名称（如 "A17"、"S1"） | 示例: `0001-01-01 00:00:00` |

<a id="ods-assistant-service-records"></a>

#### ODS 表结构 — ods.assistant_service_records [🔗 API](#api-assistant-service-records)

共 71 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`siteProfile.id`](#api-assistant-service-records) | [`dwd_assistant_service_log.assistant_service_id`](#dwd-dwd-assistant-service-log), [`dwd_assistant_service_log_ex.assistant_service_id`](#dwd-dwd-assistant-service-log-ex) | 本条助教流水记录的主键 ID（流水唯一标识） |
| 2 | `tenant_id` | bigint | [`siteProfile.tenant_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.tenant_id`](#dwd-dwd-assistant-service-log) | 租户/品牌 ID |
| 3 | `site_id` | bigint | [`site_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.site_id`](#dwd-dwd-assistant-service-log) | 门店 ID，本数据中指“朗朗桌球”这一家门店 |
| 4 | `siteprofile` | jsonb | — | — | （待补充） |
| 5 | `site_table_id` | bigint | [`site_table_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.site_table_id`](#dwd-dwd-assistant-service-log) | 球台 ID |
| 6 | `order_settle_id` | bigint | [`order_settle_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.order_settle_id`](#dwd-dwd-assistant-service-log) | 订单结算 ID，相当于“结账单号”的内部主键 |
| 7 | `order_trade_no` | text | [`order_trade_no`](#api-assistant-service-records) | [`dwd_assistant_service_log.order_trade_no`](#dwd-dwd-assistant-service-log) | 订单交易号，整个订单层面的编号 |
| 8 | `order_pay_id` | bigint | [`order_pay_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.order_pay_id`](#dwd-dwd-assistant-service-log) | 关联到“支付记录”的主键 ID |
| 9 | `order_assistant_id` | bigint | [`order_assistant_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.order_assistant_id`](#dwd-dwd-assistant-service-log), [`dwd_assistant_service_log.site_assistant_id`](#dwd-dwd-assistant-service-log) | 订单中“助教项目明细”的内部 ID |
| 10 | `order_assistant_type` | integer | [`order_assistant_type`](#api-assistant-service-records) | [`dwd_assistant_service_log.order_assistant_type`](#dwd-dwd-assistant-service-log) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 11 | `assistantname` | text | [`assistantName`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.assistant_name`](#dwd-dwd-assistant-service-log-ex) | （待补充） |
| 12 | `assistantno` | text | [`assistantNo`](#api-assistant-service-records) | [`dwd_assistant_service_log.assistant_no`](#dwd-dwd-assistant-service-log) | （待补充） |
| 13 | `assistant_level` | text | [`assistant_level`](#api-assistant-service-records) | [`dwd_assistant_service_log.assistant_level`](#dwd-dwd-assistant-service-log) | 助教等级名称，与 assistant_level 一一对应（初级/中级/高级/助教管理） |
| 14 | `levelname` | text | [`levelName`](#api-assistant-service-records) | [`dwd_assistant_service_log.level_name`](#dwd-dwd-assistant-service-log) | 名称字段，用于展示与辅助识别 |
| 15 | `site_assistant_id` | bigint | [`site_assistant_id`](#api-assistant-service-records) | — | 门店维度的助教 ID |
| 16 | `skill_id` | bigint | [`skill_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.skill_id`](#dwd-dwd-assistant-service-log) | 助教服务“课程/技能”ID |
| 17 | `skillname` | text | [`skillName`](#api-assistant-service-records) | [`dwd_assistant_service_log.skill_name`](#dwd-dwd-assistant-service-log) | 名称字段，用于展示与辅助识别 |
| 18 | `system_member_id` | bigint | [`system_member_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.system_member_id`](#dwd-dwd-assistant-service-log) | 系统级会员 ID（全集团统一 ID） |
| 19 | `tablename` | text | [`tableName`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.table_name`](#dwd-dwd-assistant-service-log-ex) | 名称字段，用于展示与辅助识别 |
| 20 | `tenant_member_id` | bigint | [`tenant_member_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.tenant_member_id`](#dwd-dwd-assistant-service-log) | 商户维度会员 ID（门店/品牌内的会员主键） |
| 21 | `user_id` | bigint | [`user_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.user_id`](#dwd-dwd-assistant-service-log) | 助教对应的“用户账号 ID”（系统级用户） |
| 22 | `assistant_team_id` | bigint | [`assistant_team_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.assistant_team_id`](#dwd-dwd-assistant-service-log) | 助教所属团队 ID |
| 23 | `nickname` | text | [`nickname`](#api-assistant-service-records) | [`dwd_assistant_service_log.nickname`](#dwd-dwd-assistant-service-log) | 助教对外昵称，如“佳怡”“周周”“球球”等 |
| 24 | `ledger_name` | text | [`ledger_name`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.ledger_name`](#dwd-dwd-assistant-service-log-ex) | 名称字段，用于展示与辅助识别 |
| 25 | `ledger_group_name` | text | [`ledger_group_name`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.ledger_group_name`](#dwd-dwd-assistant-service-log-ex) | 助教项目所属的“计费分组/套餐分组名称”，例如某种助教套餐或业务组名称 |
| 26 | `ledger_amount` | numeric | [`ledger_amount`](#api-assistant-service-records) | [`dwd_assistant_service_log.ledger_amount`](#dwd-dwd-assistant-service-log) | 按标准单价计算出来的应收金额（近似 = ledger_unit_price × income_seconds / ... |
| 27 | `ledger_count` | numeric | [`ledger_count`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.ledger_count`](#dwd-dwd-assistant-service-log-ex) | 台账记录的计时总秒数 |
| 28 | `ledger_unit_price` | numeric | [`ledger_unit_price`](#api-assistant-service-records) | [`dwd_assistant_service_log.ledger_unit_price`](#dwd-dwd-assistant-service-log) | 助教服务 标准单价（通常是标价：每小时、每节课的单价） |
| 29 | `ledger_status` | integer | [`ledger_status`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.ledger_status`](#dwd-dwd-assistant-service-log-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 30 | `ledger_start_time` | timestamp without time zone | [`ledger_start_time`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.ledger_start_time`](#dwd-dwd-assistant-service-log-ex) | 台账层面记录的开始时间 |
| 31 | `ledger_end_time` | timestamp without time zone | [`ledger_end_time`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.ledger_end_time`](#dwd-dwd-assistant-service-log-ex) | 台账层面的结束时间 |
| 32 | `manual_discount_amount` | numeric | [`manual_discount_amount`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.manual_discount_amount`](#dwd-dwd-assistant-service-log-ex) | 收银员手动给予的减免金额（人工改价） |
| 33 | `member_discount_amount` | numeric | [`member_discount_amount`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.member_discount_amount`](#dwd-dwd-assistant-service-log-ex) | 由会员卡折扣产生的优惠金额 |
| 34 | `coupon_deduct_money` | numeric | [`coupon_deduct_money`](#api-assistant-service-records) | [`dwd_assistant_service_log.coupon_deduct_money`](#dwd-dwd-assistant-service-log) | 由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额 |
| 35 | `service_money` | numeric | [`service_money`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.service_money`](#dwd-dwd-assistant-service-log-ex) | 用于记录与助教结算的金额（平台预留的“成本/分成”字段） |
| 36 | `projected_income` | numeric | [`projected_income`](#api-assistant-service-records) | [`dwd_assistant_service_log.projected_income`](#dwd-dwd-assistant-service-log) | 实际结算计入门店的金额（已经考虑折扣、卡权益、券等后的结果） |
| 37 | `real_use_seconds` | integer | [`real_use_seconds`](#api-assistant-service-records) | [`dwd_assistant_service_log.real_use_seconds`](#dwd-dwd-assistant-service-log) | 实际使用时长（秒） |
| 38 | `income_seconds` | integer | [`income_seconds`](#api-assistant-service-records) | [`dwd_assistant_service_log.income_seconds`](#dwd-dwd-assistant-service-log) | 计费秒数 / 应计收入对应的时间 |
| 39 | `start_use_time` | timestamp without time zone | [`start_use_time`](#api-assistant-service-records) | [`dwd_assistant_service_log.start_use_time`](#dwd-dwd-assistant-service-log) | 助教实际开始服务时间 |
| 40 | `last_use_time` | timestamp without time zone | [`last_use_time`](#api-assistant-service-records) | [`dwd_assistant_service_log.last_use_time`](#dwd-dwd-assistant-service-log) | 最后一次使用（实际服务）时间 |
| 41 | `create_time` | timestamp without time zone | [`create_time`](#api-assistant-service-records) | [`dwd_assistant_service_log.create_time`](#dwd-dwd-assistant-service-log) | 这条助教流水记录创建时间（一般接近结算/下单时间） |
| 42 | `is_single_order` | integer | [`is_single_order`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.is_single_order`](#dwd-dwd-assistant-service-log-ex) | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| 43 | `is_delete` | integer | [`is_delete`](#api-assistant-service-records) | [`dwd_assistant_service_log.is_delete`](#dwd-dwd-assistant-service-log) | 逻辑删除标志 |
| 44 | `is_trash` | integer | [`is_trash`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.is_trash`](#dwd-dwd-assistant-service-log-ex) | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| 45 | `trash_reason` | text | [`trash_reason`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.trash_reason`](#dwd-dwd-assistant-service-log-ex) | 废除原因（文本说明），例如“顾客取消”“录入错误”等 |
| 46 | `trash_applicant_id` | bigint | [`trash_applicant_id`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.trash_applicant_id`](#dwd-dwd-assistant-service-log-ex) | 提出废除申请的员工 ID（通常是操作员/管理员） |
| 47 | `trash_applicant_name` | text | [`trash_applicant_name`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.trash_applicant_name`](#dwd-dwd-assistant-service-log-ex) | 废除申请人姓名 |
| 48 | `operator_id` | bigint | [`operator_id`](#api-assistant-service-records) | — | 操作员 ID（录入/结算这条助教服务的员工） |
| 49 | `operator_name` | text | [`operator_name`](#api-assistant-service-records) | — | 操作员姓名，与 operator_id 一起使用，便于直接阅读 |
| 50 | `salesman_name` | text | [`salesman_name`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.salesman_name`](#dwd-dwd-assistant-service-log-ex) | 关联的“营业员/销售员姓名”，用于提成归属 |
| 51 | `salesman_org_id` | bigint | [`salesman_org_id`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.salesman_org_id`](#dwd-dwd-assistant-service-log-ex) | 营业员所属组织/部门 ID |
| 52 | `salesman_user_id` | bigint | [`salesman_user_id`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.salesman_user_id`](#dwd-dwd-assistant-service-log-ex) | 营业员用户 ID |
| 53 | `person_org_id` | bigint | [`person_org_id`](#api-assistant-service-records) | [`dwd_assistant_service_log.person_org_id`](#dwd-dwd-assistant-service-log) | 助教所属“人事组织/部门 ID” |
| 54 | `add_clock` | integer | [`add_clock`](#api-assistant-service-records) | [`dwd_assistant_service_log.add_clock`](#dwd-dwd-assistant-service-log) | 加钟秒数，即在原有预约/服务基础上临时追加的时长 |
| 55 | `returns_clock` | integer | [`returns_clock`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.returns_clock`](#dwd-dwd-assistant-service-log-ex) | 退钟秒数（取消加钟或提前结束退回的时间） |
| 56 | `composite_grade` | numeric | [`composite_grade`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.composite_grade`](#dwd-dwd-assistant-service-log-ex) | 综合评分（例如技能+服务加权后的平均分），当前数据没有实际评分 |
| 57 | `composite_grade_time` | timestamp without time zone | [`composite_grade_time`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.composite_grade_time`](#dwd-dwd-assistant-service-log-ex) | 助教服务所在的球台名称（如 "A17"、"S1"） |
| 58 | `skill_grade` | numeric | [`skill_grade`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.skill_grade`](#dwd-dwd-assistant-service-log-ex) | 顾客对“技能表现”的评分（整数或打分等级） |
| 59 | `service_grade` | numeric | [`service_grade`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.service_grade`](#dwd-dwd-assistant-service-log-ex) | 顾客对“服务态度”的评分 |
| 60 | `sum_grade` | numeric | [`sum_grade`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.sum_grade`](#dwd-dwd-assistant-service-log-ex) | 累计评分总和（可能用于计算平均分），当前为 0 |
| 61 | `grade_status` | integer | [`grade_status`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.grade_status`](#dwd-dwd-assistant-service-log-ex) | 1 = 未评价/正常 |
| 62 | `get_grade_times` | integer | [`get_grade_times`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.get_grade_times`](#dwd-dwd-assistant-service-log-ex) | 该条记录对应的评价次数（或该助教被评价次数快照） |
| 63 | `is_not_responding` | integer | [`is_not_responding`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.is_not_responding`](#dwd-dwd-assistant-service-log-ex) | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| 64 | `is_confirm` | integer | [`is_confirm`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.is_confirm`](#dwd-dwd-assistant-service-log-ex) | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| 65 | `assistantteamname` | text | [`assistantTeamName`](#api-assistant-service-records) | [`dwd_assistant_service_log_ex.assistant_team_name`](#dwd-dwd-assistant-service-log-ex) | 助教团队名称 |
| 66 | `real_service_money` | numeric | [`real_service_money`](#api-assistant-service-records) | [`dwd_assistant_service_log.real_service_money`](#dwd-dwd-assistant-service-log) | 实际服务费金额 |
| 67 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |
| 68 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 69 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 70 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 71 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |

<a id="dwd-dwd-assistant-service-log"></a>

#### DWD 表结构 — dwd.dwd_assistant_service_log [🔗 ODS](#ods-assistant-service-records)

共 33 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `assistant_service_id` | bigint | [`id`](#ods-assistant-service-records) | 直接 | 服务流水 ID |
| 2 | `order_trade_no` | bigint | [`order_trade_no`](#ods-assistant-service-records) | 直接 | 订单号 → dwd_settlement_head |
| 3 | `order_settle_id` | bigint | [`order_settle_id`](#ods-assistant-service-records) | 直接 | 结账单 ID → dwd_settlement_head |
| 4 | `order_pay_id` | bigint | [`order_pay_id`](#ods-assistant-service-records) | 直接 | 支付单 ID（当前数据全为 0） |
| 5 | `order_assistant_id` | bigint | [`order_assistant_id`](#ods-assistant-service-records) | 直接 | 订单助教 ID |
| 6 | `order_assistant_type` | integer | [`order_assistant_type`](#ods-assistant-service-records) | 直接 | 服务类型。**枚举值**: 1=基础课 或 包厢课, 2=附加课/激励课 |
| 7 | `tenant_id` | bigint | [`tenant_id`](#ods-assistant-service-records) | 直接 | 租户 ID |
| 8 | `site_id` | bigint | [`site_id`](#ods-assistant-service-records) | 直接 | 门店 ID |
| 9 | `site_table_id` | bigint | [`site_table_id`](#ods-assistant-service-records) | 直接 | 台桌 ID → dim_table（0=非台桌服务） |
| 10 | `tenant_member_id` | bigint | [`tenant_member_id`](#ods-assistant-service-records) | 直接 | 会员 ID → dim_member（0=散客） |
| 11 | `system_member_id` | bigint | [`system_member_id`](#ods-assistant-service-records) | 直接 | 系统会员 ID（0=散客） |
| 12 | `assistant_no` | character varying | [`assistantno`](#ods-assistant-service-records) | 直接 | 助教工号。**样本值**: "2", "9"等 |
| 13 | `nickname` | character varying | [`nickname`](#ods-assistant-service-records) | 直接 | 助教昵称。**样本值**: "佳怡", "婉婉", "七七"等 |
| 14 | `site_assistant_id` | bigint | [`order_assistant_id`](#ods-assistant-service-records) | 直接 | 助教 ID → dim_assistant |
| 15 | `user_id` | bigint | [`user_id`](#ods-assistant-service-records) | 直接 | 助教用户 ID |
| 16 | `assistant_team_id` | bigint | [`assistant_team_id`](#ods-assistant-service-records) | 直接 | 助教团队 ID。**枚举值**: 2792011585884037=1组, 2959085810992645=2组 |
| 17 | `person_org_id` | bigint | [`person_org_id`](#ods-assistant-service-records) | 直接 | 人事组织 ID |
| 18 | `assistant_level` | integer | [`assistant_level`](#ods-assistant-service-records) | 直接 | 助教等级。**枚举值**: 8=助教管理, 10=初级, 20=中级, 30=高级, 40=星级 |
| 19 | `level_name` | character varying | [`levelname`](#ods-assistant-service-records) | 直接 | 等级名称。**枚举值**: "助教管理", "初级", "中级", "高级", "星级" |
| 20 | `skill_id` | bigint | [`skill_id`](#ods-assistant-service-records) | 直接 | 技能 ID  **枚举值**: 2790683529513797 = 基础课 , 2790683529513798... |
| 21 | `skill_name` | character varying | [`skillname`](#ods-assistant-service-records) | 直接 | 技能名称。 **枚举值**: "基础课","附加课","包厢课" |
| 22 | `ledger_unit_price` | numeric | [`ledger_unit_price`](#ods-assistant-service-records) | 直接 | 单价（元/小时），**样本值**: 98.00/108.00/190.00 等 |
| 23 | `ledger_amount` | numeric | [`ledger_amount`](#ods-assistant-service-records) | 直接 | 计费金额 |
| 24 | `projected_income` | numeric | [`projected_income`](#ods-assistant-service-records) | 直接 | 预估收入 |
| 25 | `coupon_deduct_money` | numeric | [`coupon_deduct_money`](#ods-assistant-service-records) | 直接 | 券抵扣金额 |
| 26 | `income_seconds` | integer | [`income_seconds`](#ods-assistant-service-records) | 直接 | 计费时长（秒）。常见值: 3600=1h, 7200=2h, 10800=3h |
| 27 | `real_use_seconds` | integer | [`real_use_seconds`](#ods-assistant-service-records) | 直接 | 实际使用时长（秒） |
| 28 | `add_clock` | integer | [`add_clock`](#ods-assistant-service-records) | 直接 | 加时时长（秒），大多为 0 |
| 29 | `create_time` | timestamp with time zone | [`create_time`](#ods-assistant-service-records) | 直接 | 创建时间 |
| 30 | `start_use_time` | timestamp with time zone | [`start_use_time`](#ods-assistant-service-records) | 直接 | 服务开始时间 |
| 31 | `last_use_time` | timestamp with time zone | [`last_use_time`](#ods-assistant-service-records) | 直接 | 服务结束时间 |
| 32 | `is_delete` | integer | [`is_delete`](#ods-assistant-service-records) | 直接 | 删除标记。**枚举值**: 0=未删除 |
| 33 | `real_service_money` | numeric | [`real_service_money`](#ods-assistant-service-records) | 直接 | 实际服务费金额 |

<a id="dwd-dwd-assistant-service-log-ex"></a>

#### DWD 表结构 — dwd.dwd_assistant_service_log_ex [🔗 ODS](#ods-assistant-service-records)

共 31 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `assistant_service_id` | bigint | [`id`](#ods-assistant-service-records) | 直接 | 字段重命名 |
| 2 | `table_name` | character varying | [`tablename`](#ods-assistant-service-records) | 直接 | 字段重命名 |
| 3 | `assistant_name` | character varying | [`assistantname`](#ods-assistant-service-records) | 直接 | 字段重命名 |
| 4 | `ledger_name` | character varying | [`ledger_name`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 5 | `ledger_group_name` | character varying | [`ledger_group_name`](#ods-assistant-service-records) | 直接 | 名称字段，用于展示与辅助识别 |
| 6 | `ledger_count` | integer | [`ledger_count`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 7 | `member_discount_amount` | numeric | [`member_discount_amount`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 8 | `manual_discount_amount` | numeric | [`manual_discount_amount`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 9 | `service_money` | numeric | [`service_money`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 10 | `returns_clock` | integer | [`returns_clock`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 11 | `ledger_start_time` | timestamp with time zone | [`ledger_start_time`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 12 | `ledger_end_time` | timestamp with time zone | [`ledger_end_time`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 13 | `ledger_status` | integer | [`ledger_status`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 14 | `is_confirm` | integer | [`is_confirm`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 15 | `is_single_order` | integer | [`is_single_order`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 16 | `is_not_responding` | integer | [`is_not_responding`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 17 | `is_trash` | integer | [`is_trash`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 18 | `trash_applicant_id` | bigint | [`trash_applicant_id`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 19 | `trash_applicant_name` | character varying | [`trash_applicant_name`](#ods-assistant-service-records) | 直接 | 名称字段，用于展示与辅助识别 |
| 20 | `trash_reason` | character varying | [`trash_reason`](#ods-assistant-service-records) | 直接 | 明细字段，用于记录事实取值 |
| 21 | `salesman_user_id` | bigint | [`salesman_user_id`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 22 | `salesman_name` | character varying | [`salesman_name`](#ods-assistant-service-records) | 直接 | 名称字段，用于展示与辅助识别 |
| 23 | `salesman_org_id` | bigint | [`salesman_org_id`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 24 | `skill_grade` | integer | [`skill_grade`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 25 | `service_grade` | integer | [`service_grade`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 26 | `composite_grade` | numeric | [`composite_grade`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 27 | `sum_grade` | numeric | [`sum_grade`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 28 | `get_grade_times` | integer | [`get_grade_times`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 29 | `grade_status` | integer | [`grade_status`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 30 | `composite_grade_time` | timestamp with time zone | [`composite_grade_time`](#ods-assistant-service-records) | 直接 | 同名直传 |
| 31 | `assistant_team_name` | text | [`assistantteamname`](#ods-assistant-service-records) | 直接 | 字段重命名 |

### 3.5 assistant_cancellation_records（助教废除记录）

- 任务代码：`ODS_ASSISTANT_ABOLISH`
- 采样记录数：78
- API JSON 字段数：38
- ODS 列数：19
- DWD 目标表：dwd_assistant_trash_event, dwd_assistant_trash_event_ex

<a id="api-assistant-cancellation-records"></a>

#### API 源字段 — assistant_cancellation_records [🔗 ODS](#ods-assistant-cancellation-records)

已映射 14/38，覆盖率 36.8%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `siteProfile.id` | integer | [`id`](#ods-assistant-cancellation-records) | 本表主键 ID，用于唯一标识一条记录 | 📦 嵌套对象；示例: `2790685415443269` |
| 2 | `siteProfile.org_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2790684179467077` |
| 3 | `siteProfile.shop_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `朗朗桌球` |
| 4 | `siteProfile.avatar` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `https://oss.ficoo.vip/admin...` |
| 5 | `siteProfile.business_tel` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `13316068642` |
| 6 | `siteProfile.full_address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区丽阳街12号` |
| 7 | `siteProfile.address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区天园街道朗朗桌球` |
| 8 | `siteProfile.longitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `113.360321` |
| 9 | `siteProfile.latitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `23.133629` |
| 10 | `siteProfile.tenant_site_region_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `156440100` |
| 11 | `siteProfile.tenant_id` | integer | [`tenant_id`](#ods-assistant-cancellation-records) | 租户ID | 📦 嵌套对象；示例: `2790683160709957` |
| 12 | `siteProfile.auto_light` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 13 | `siteProfile.attendance_distance` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 14 | `siteProfile.wifi_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 15 | `siteProfile.wifi_password` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 16 | `siteProfile.customer_service_qrcode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 17 | `siteProfile.customer_service_wechat` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 18 | `siteProfile.fixed_pay_qrCode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 19 | `siteProfile.prod_env` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 20 | `siteProfile.light_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 21 | `siteProfile.light_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 22 | `siteProfile.site_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 23 | `siteProfile.light_token` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 24 | `siteProfile.site_label` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `A` |
| 25 | `siteProfile.attendance_enabled` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 26 | `siteProfile.shop_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 27 | `createTime` | string | [`createtime`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配；枚举值: `2026-01-29 02:47:00`, `2026-01-28 02:19:55`, `2026-01-25 00:27:57`, `2026-01-22 08:15:32`, `2026-01-21 19:20:48`, `2026-01-18 03:55:40`, `2026-01-16 22:13:16`, `2026-01-15 19:40:27` |
| 28 | `id` | integer | [`id`](#ods-assistant-cancellation-records) | 本表主键 ID，用于唯一标识一条记录 | 枚举值: `3071358041819077`, `3069915840121925`, `3065559038266181`, `3061771962486341`, `3061771963567685`, `3061771962043973`, `3061771960880709`, `3061010362977861` |
| 29 | `siteId` | integer | [`siteid`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配；示例: `2790685415443269` |
| 30 | `tableAreaId` | integer | [`tableareaid`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配；枚举值: `2791963887030341`, `2956246442462533`, `2791963794329671`, `2791963816579205`, `2942056024575749`, `2791963855982661`, `2791963825803397`, `2791963836207173` |
| 31 | `tableId` | integer | [`tableid`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配；枚举值: `2793023960600645`, `2793023960682565`, `2793023960551493`, `2956248279567557`, `2793003806953541`, `2793017278632069`, `2942056832061125`, `2793022145302597` |
| 32 | `tableArea` | string | [`tablearea`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配；枚举值: `麻将房`, `发财`, `A区`, `C区`, `M7`, `K包`, `VIP包厢`, `斯诺克区` |
| 33 | `tableName` | string | [`tablename`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配；枚举值: `M2`, `M4`, `Ｍ1`, `发财`, `A18`, `C6`, `M7`, `888` |
| 34 | `assistantOn` | string | [`assistanton`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配；枚举值: `6`, `15`, `18`, `4`, `23`, `9`, `21`, `2` |
| 35 | `assistantName` | string | [`assistantname`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配；枚举值: `乔西`, `七七`, `涛涛`, `璇子`, `婉婉`, `球球`, `年糕`, `佳怡` |
| 36 | `pdChargeMinutes` | integer | [`pdchargeminutes`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配；枚举值: `3600`, `3390`, `0`, `10800`, `4959`, `27791`, `555`, `364` |
| 37 | `assistantAbolishAmount` | number | [`assistantabolishamount`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配；枚举值: `190.0`, `101.7`, `0.0`, `570.0`, `190.1`, `833.73`, `15.11`, `10.92` |
| 38 | `trashReason` | string | [`trashreason`](#ods-assistant-cancellation-records) | （待补充） | 大小写匹配 |

<a id="ods-assistant-cancellation-records"></a>

#### ODS 表结构 — ods.assistant_cancellation_records [🔗 API](#api-assistant-cancellation-records)

共 19 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`siteProfile.id`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event.assistant_trash_event_id`](#dwd-dwd-assistant-trash-event), [`dwd_assistant_trash_event_ex.assistant_trash_event_id`](#dwd-dwd-assistant-trash-event-ex) | 本表主键 ID，用于唯一标识一条记录 |
| 2 | `siteid` | bigint | [`siteId`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event.site_id`](#dwd-dwd-assistant-trash-event) | （待补充） |
| 3 | `siteprofile` | jsonb | — | — | （待补充） |
| 4 | `assistantname` | text | [`assistantName`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event.assistant_no`](#dwd-dwd-assistant-trash-event), [`dwd_assistant_trash_event.assistant_name`](#dwd-dwd-assistant-trash-event) | （待补充） |
| 5 | `assistantabolishamount` | numeric | [`assistantAbolishAmount`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event.abolish_amount`](#dwd-dwd-assistant-trash-event) | （待补充） |
| 6 | `assistanton` | integer | [`assistantOn`](#api-assistant-cancellation-records) | — | （待补充） |
| 7 | `pdchargeminutes` | integer | [`pdChargeMinutes`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event.charge_minutes_raw`](#dwd-dwd-assistant-trash-event) | （待补充） |
| 8 | `tableareaid` | bigint | [`tableAreaId`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event.table_area_id`](#dwd-dwd-assistant-trash-event) | （待补充） |
| 9 | `tablearea` | text | [`tableArea`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event_ex.table_area_name`](#dwd-dwd-assistant-trash-event-ex) | （待补充） |
| 10 | `tableid` | bigint | [`tableId`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event.table_id`](#dwd-dwd-assistant-trash-event) | （待补充） |
| 11 | `tablename` | text | [`tableName`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event_ex.table_name`](#dwd-dwd-assistant-trash-event-ex) | （待补充） |
| 12 | `trashreason` | text | [`trashReason`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event.trash_reason`](#dwd-dwd-assistant-trash-event) | （待补充） |
| 13 | `createtime` | timestamp without time zone | [`createTime`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event.create_time`](#dwd-dwd-assistant-trash-event) | （待补充） |
| 14 | `tenant_id` | bigint | [`siteProfile.tenant_id`](#api-assistant-cancellation-records) | [`dwd_assistant_trash_event.tenant_id`](#dwd-dwd-assistant-trash-event) | 租户ID |
| 15 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 16 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 17 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 18 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 19 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dwd-assistant-trash-event"></a>

#### DWD 表结构 — dwd.dwd_assistant_trash_event [🔗 ODS](#ods-assistant-cancellation-records)

共 11 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `assistant_trash_event_id` | bigint | [`id`](#ods-assistant-cancellation-records) | 直接 | 作废事件 ID |
| 2 | `site_id` | bigint | [`siteid`](#ods-assistant-cancellation-records) | 直接 | 门店 ID |
| 3 | `table_id` | bigint | [`tableid`](#ods-assistant-cancellation-records) | 直接 | 台桌 ID → dim_table |
| 4 | `table_area_id` | bigint | [`tableareaid`](#ods-assistant-cancellation-records) | 直接 | 台区 ID |
| 5 | `assistant_no` | character varying | [`assistantname`](#ods-assistant-cancellation-records) | 直接 | 助教工号/昵称。**样本值**: "七七", "乔西", "球球"等 |
| 6 | `assistant_name` | character varying | [`assistantname`](#ods-assistant-cancellation-records) | 直接 | 助教名称，与 assistant_no 相同 |
| 7 | `charge_minutes_raw` | integer | [`pdchargeminutes`](#ods-assistant-cancellation-records) | 直接 | 原计费时长（秒）。**样本值**: 0, 3600=1h, 10800=3h 等 |
| 8 | `abolish_amount` | numeric | [`assistantabolishamount`](#ods-assistant-cancellation-records) | 直接 | 作废金额（元）。**样本值**: 0.00, 190.00, 570.00 等 |
| 9 | `trash_reason` | character varying | [`trashreason`](#ods-assistant-cancellation-records) | 直接 | 作废原因（当前数据全为 NULL） |
| 10 | `create_time` | timestamp with time zone | [`createtime`](#ods-assistant-cancellation-records) | 直接 | 创建时间 |
| 11 | `tenant_id` | bigint | [`tenant_id`](#ods-assistant-cancellation-records) | 直接 | 租户 ID |

<a id="dwd-dwd-assistant-trash-event-ex"></a>

#### DWD 表结构 — dwd.dwd_assistant_trash_event_ex [🔗 ODS](#ods-assistant-cancellation-records)

共 3 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `assistant_trash_event_id` | bigint | [`id`](#ods-assistant-cancellation-records) | 直接 | 字段重命名 |
| 2 | `table_name` | character varying | [`tablename`](#ods-assistant-cancellation-records) | 直接 | 字段重命名 |
| 3 | `table_area_name` | character varying | [`tablearea`](#ods-assistant-cancellation-records) | 直接 | 字段重命名 |

### 3.6 store_goods_sales_records（门店商品销售流水）

- 任务代码：`ODS_STORE_GOODS_SALES`
- 采样记录数：200
- API JSON 字段数：51
- ODS 列数：56
- DWD 目标表：dwd_store_goods_sale, dwd_store_goods_sale_ex

<a id="api-store-goods-sales-records"></a>

#### API 源字段 — store_goods_sales_records [🔗 ODS](#ods-store-goods-sales-records)

已映射 51/51，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `siteId` | integer | [`siteid`](#ods-store-goods-sales-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `0` |
| 2 | `siteName` | string | [`sitename`](#ods-store-goods-sales-records) | 名称字段，用于展示与辅助识别 | 大小写匹配；示例: `朗朗桌球` |
| 3 | `orderGoodsId` | integer | [`ordergoodsid`](#ods-store-goods-sales-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `0` |
| 4 | `openSalesman` | integer | [`opensalesman`](#ods-store-goods-sales-records) | （待补充） | 大小写匹配；示例: `2` |
| 5 | `id` | integer | [`id`](#ods-store-goods-sales-records) | 本条「门店销售流水」记录的主键 ID | 枚举值: `3093864106133701`, `3093855577688325`, `3093844121422150`, `3093844121422149`, `3093844121405766`, `3093844121405765`, `3093844121389382`, `3093844121389381` |
| 6 | `cost_money` | number | [`cost_money`](#ods-store-goods-sales-records) | 本条销售对应的成本金额（以元计） | 枚举值: `0.0`, `0.13`, `0.04`, `0.63`, `0.01`, `0.02` |
| 7 | `coupon_deduct_money` | number | [`coupon_deduct_money`](#ods-store-goods-sales-records) | 被优惠券 / 团购券直接抵扣到这条商品明细上的金额 | 示例: `0.0` |
| 8 | `coupon_share_money` | number | [`coupon_share_money`](#ods-store-goods-sales-records) | 优惠券分摊金额 | 示例: `0.0` |
| 9 | `create_time` | string | [`create_time`](#ods-store-goods-sales-records) | 销售记录创建时间，通常就是结账时间或录入时间 | 枚举值: `2026-02-14 00:21:21`, `2026-02-14 00:12:40`, `2026-02-14 00:01:01`, `2026-02-13 21:56:07`, `2026-02-13 21:50:13`, `2026-02-13 20:43:53`, `2026-02-13 20:42:32`, `2026-02-13 20:35:39` |
| 10 | `discount_money` | number | [`discount_money`](#ods-store-goods-sales-records) | 本条销售明细的「价格优惠金额」，即原价部分被减免掉的金额 | 枚举值: `3.0`, `0.0`, `2.0`, `6.0`, `8.0`, `1.0` |
| 11 | `discount_price` | number | [`discount_price`](#ods-store-goods-sales-records) | 折后单价（元/单位） | 枚举值: `7.0`, `5.0`, `15.0`, `2.0`, `28.0`, `125.0`, `8.0`, `10.0` |
| 12 | `goods_remark` | string | [`goods_remark`](#ods-store-goods-sales-records) | 商品备注/口味说明/特殊说明 | 枚举值: `可乐`, `哇哈哈矿泉水`, `百威235毫升`, `打火机`, `软玉溪`, `东鹏特饮`, `普通扑克`, `雪碧` |
| 13 | `is_delete` | integer | [`is_delete`](#ods-store-goods-sales-records) | 逻辑删除标志 | 示例: `0` |
| 14 | `is_single_order` | integer | [`is_single_order`](#ods-store-goods-sales-records) | 是否单独订单标识 | 示例: `1` |
| 15 | `ledger_amount` | number | [`ledger_amount`](#ods-store-goods-sales-records) | 原始应收金额，公式上接近 ledger_unit_price × ledger_count | 枚举值: `10.0`, `5.0`, `90.0`, `2.0`, `28.0`, `7.0`, `180.0`, `125.0` |
| 16 | `ledger_count` | integer | [`ledger_count`](#ods-store-goods-sales-records) | 销售数量（以 unit 为单位，unit 字段在门店商品档案中） | 枚举值: `1`, `2`, `6`, `12`, `4`, `3`, `5` |
| 17 | `ledger_group_name` | string | [`ledger_group_name`](#ods-store-goods-sales-records) | 销售项目所属的「门店内部分组名称」，类似前台菜单分组或大类标签 | 枚举值: `酒水`, `其他`, `香烟`, `零食` |
| 18 | `ledger_name` | string | [`ledger_name`](#ods-store-goods-sales-records) | 销售项目名称（商品名称），例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等 | 枚举值: `哇米诺豆奶`, `可乐`, `哇哈哈矿泉水`, `百威235毫升`, `打火机`, `软玉溪`, `东鹏特饮`, `普通扑克` |
| 19 | `ledger_status` | integer | [`ledger_status`](#ods-store-goods-sales-records) | 销售流水状态 | 示例: `1` |
| 20 | `ledger_unit_price` | number | [`ledger_unit_price`](#ods-store-goods-sales-records) | 商品在该次销售中的「结算单价」（元/单位） | 枚举值: `10.0`, `5.0`, `15.0`, `2.0`, `28.0`, `7.0`, `125.0`, `8.0` |
| 21 | `member_coupon_id` | integer | [`member_coupon_id`](#ods-store-goods-sales-records) | 会员券 ID（比如会员专享优惠券） | 示例: `0` |
| 22 | `member_discount_amount` | number | [`member_discount_amount`](#ods-store-goods-sales-records) | 由会员身份（会员折扣）针对这一行商品产生的优惠金额 | 示例: `0.0` |
| 23 | `operator_id` | integer | [`operator_id`](#ods-store-goods-sales-records) | 操作员 ID（录入这笔销售的员工） | 示例: `2790687322443013` |
| 24 | `operator_name` | string | [`operator_name`](#ods-store-goods-sales-records) | 操作员姓名，文字冗余 | 示例: `收银员:郑丽珊` |
| 25 | `option_coupon_deduct_money` | number | [`option_coupon_deduct_money`](#ods-store-goods-sales-records) | 由优惠券抵扣“选项价格”的金额 | 示例: `0.0` |
| 26 | `option_member_discount_money` | number | [`option_member_discount_money`](#ods-store-goods-sales-records) | 由会员折扣作用在“选项价格”上的优惠金额 | 示例: `0.0` |
| 27 | `option_price` | number | [`option_price`](#ods-store-goods-sales-records) | 商品选项（规格/加料）的附加价格 | 示例: `0.0` |
| 28 | `option_value_name` | string | [`option_value_name`](#ods-store-goods-sales-records) | 商品选项名称（如规格、口味：大杯/小杯，不加冰等） |  |
| 29 | `order_coupon_id` | integer | [`order_coupon_id`](#ods-store-goods-sales-records) | 订单级优惠券 ID | 示例: `0` |
| 30 | `order_goods_id` | integer | [`order_goods_id`](#ods-store-goods-sales-records) | 订单商品明细 ID（订单内部的商品行主键） | 枚举值: `3093864075495621`, `3093793750862149`, `3093838483065157`, `3093746072144197`, `3093710576814405`, `3093707437050181`, `3093706719037573`, `3093703198656709` |
| 31 | `order_pay_id` | integer | [`order_pay_id`](#ods-store-goods-sales-records) | 关联支付记录的 ID | 示例: `0` |
| 32 | `order_settle_id` | integer | [`order_settle_id`](#ods-store-goods-sales-records) | 订单结算 ID（结账单主键） | 枚举值: `3093864077166789`, `3093855537596549`, `3093843703564549`, `3093721299536133`, `3093715499501701`, `3093650242373957`, `3093648911108293`, `3093642206103749` |
| 33 | `order_trade_no` | integer | [`order_trade_no`](#ods-store-goods-sales-records) | 订单交易号（业务单号） | 枚举值: `3093864074381509`, `3093784062036101`, `3093701555882181`, `3093324364122309`, `3093592572217541`, `3093650239260997`, `3093530699761989`, `3093642203187397` |
| 34 | `package_coupon_id` | integer | [`package_coupon_id`](#ods-store-goods-sales-records) | 套餐券 ID | 示例: `0` |
| 35 | `point_discount_money` | number | [`point_discount_money`](#ods-store-goods-sales-records) | 由积分抵扣的金额（顾客兑换积分抵现金额） | 示例: `0.0` |
| 36 | `point_discount_money_cost` | number | [`point_discount_money_cost`](#ods-store-goods-sales-records) | 积分抵扣对应的“成本金额”（后台核算用），例如按积分成本来计提费用 | 示例: `0.0` |
| 37 | `push_money` | number | [`push_money`](#ods-store-goods-sales-records) | 本条销售对应的提成金额（给营业员/促销员的提成） | 示例: `0.0` |
| 38 | `real_goods_money` | number | [`real_goods_money`](#ods-store-goods-sales-records) | 商品实际入账金额（考虑折扣、可能还会考虑其它抵扣后的实际销售金额） | 枚举值: `7.0`, `10.0`, `5.0`, `90.0`, `2.0`, `28.0`, `180.0`, `125.0` |
| 39 | `returns_number` | integer | [`returns_number`](#ods-store-goods-sales-records) | 退货数量（如果这条明细做了退货，会记录退货数量） | 示例: `0` |
| 40 | `sales_man_org_id` | integer | [`sales_man_org_id`](#ods-store-goods-sales-records) | 营业员所属组织/部门 ID | 示例: `0` |
| 41 | `sales_type` | integer | [`sales_type`](#ods-store-goods-sales-records) | 销售类型 | 示例: `1` |
| 42 | `salesman_name` | string | [`salesman_name`](#ods-store-goods-sales-records) | 营业员姓名（如果有为具体销售员记业绩，则在此填姓名） |  |
| 43 | `salesman_role_id` | integer | [`salesman_role_id`](#ods-store-goods-sales-records) | 营业员的系统角色 ID（例如某个角色代码表示“销售员”） | 示例: `0` |
| 44 | `salesman_user_id` | integer | [`salesman_user_id`](#ods-store-goods-sales-records) | 营业员用户 ID（系统账号 ID） | 示例: `0` |
| 45 | `site_goods_id` | integer | [`site_goods_id`](#ods-store-goods-sales-records) | 门店商品 ID | 枚举值: `3004536125639493`, `2793026183041093`, `2793026176012357`, `2793026185154629`, `2828836772432837`, `2793025862799429`, `2793026180501573`, `2794695801409669` |
| 46 | `site_id` | integer | [`site_id`](#ods-store-goods-sales-records) | 门店 ID（系统主键） | 示例: `2790685415443269` |
| 47 | `site_table_id` | integer | [`site_table_id`](#ods-store-goods-sales-records) | 球台 ID | 枚举值: `0`, `2793001904918661`, `2793022937911365`, `2793022145302597`, `2793020259897413`, `2793016660660357`, `2793003066429509`, `2793001695301765` |
| 48 | `tenant_goods_business_id` | integer | [`tenant_goods_business_id`](#ods-store-goods-sales-records) | 租户级商品「业务大类」ID（例如“零食类”“酒水类”等更高维度） | 枚举值: `2790683528317768`, `2793217599407941`, `2790683528317765`, `2791932037238661` |
| 49 | `tenant_goods_category_id` | integer | [`tenant_goods_category_id`](#ods-store-goods-sales-records) | 租户级商品一级分类 ID | 枚举值: `2790683528350540`, `2790683528350541`, `2793218343257925`, `2792063209623429`, `2793236829620037`, `2791948300259205` |
| 50 | `tenant_goods_id` | integer | [`tenant_goods_id`](#ods-store-goods-sales-records) | 租户（品牌）级商品 ID（全局商品 ID） | 枚举值: `3004531315313413`, `2792138158329733`, `2792115932417925`, `2792039804047237`, `2828836270377733`, `2792102047797125`, `2792126853369733`, `2793228842862405` |
| 51 | `tenant_id` | integer | [`tenant_id`](#ods-store-goods-sales-records) | 租户/品牌 ID | 示例: `2790683160709957` |

<a id="ods-store-goods-sales-records"></a>

#### ODS 表结构 — ods.store_goods_sales_records [🔗 API](#api-store-goods-sales-records)

共 56 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.store_goods_sale_id`](#dwd-dwd-store-goods-sale), [`dwd_store_goods_sale_ex.store_goods_sale_id`](#dwd-dwd-store-goods-sale-ex) | 本条「门店销售流水」记录的主键 ID |
| 2 | `tenant_id` | bigint | [`tenant_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.tenant_id`](#dwd-dwd-store-goods-sale) | 租户/品牌 ID |
| 3 | `site_id` | bigint | [`site_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.site_id`](#dwd-dwd-store-goods-sale) | 门店 ID（系统主键） |
| 4 | `siteid` | bigint | [`siteId`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.legacy_site_id`](#dwd-dwd-store-goods-sale-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 5 | `sitename` | text | [`siteName`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.site_name`](#dwd-dwd-store-goods-sale-ex) | 名称字段，用于展示与辅助识别 |
| 6 | `site_goods_id` | bigint | [`site_goods_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.site_goods_id`](#dwd-dwd-store-goods-sale) | 门店商品 ID |
| 7 | `tenant_goods_id` | bigint | [`tenant_goods_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.tenant_goods_id`](#dwd-dwd-store-goods-sale) | 租户（品牌）级商品 ID（全局商品 ID） |
| 8 | `order_settle_id` | bigint | [`order_settle_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.order_settle_id`](#dwd-dwd-store-goods-sale) | 订单结算 ID（结账单主键） |
| 9 | `order_trade_no` | text | [`order_trade_no`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.order_trade_no`](#dwd-dwd-store-goods-sale) | 订单交易号（业务单号） |
| 10 | `order_goods_id` | bigint | [`order_goods_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.order_goods_id`](#dwd-dwd-store-goods-sale) | 订单商品明细 ID（订单内部的商品行主键） |
| 11 | `ordergoodsid` | bigint | [`orderGoodsId`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.legacy_order_goods_id`](#dwd-dwd-store-goods-sale-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 12 | `order_pay_id` | bigint | [`order_pay_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.order_pay_id`](#dwd-dwd-store-goods-sale) | 关联支付记录的 ID |
| 13 | `order_coupon_id` | bigint | [`order_coupon_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.order_coupon_id`](#dwd-dwd-store-goods-sale-ex) | 订单级优惠券 ID |
| 14 | `ledger_name` | text | [`ledger_name`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.ledger_name`](#dwd-dwd-store-goods-sale) | 销售项目名称（商品名称），例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等 |
| 15 | `ledger_group_name` | text | [`ledger_group_name`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.ledger_group_name`](#dwd-dwd-store-goods-sale) | 销售项目所属的「门店内部分组名称」，类似前台菜单分组或大类标签 |
| 16 | `ledger_amount` | numeric | [`ledger_amount`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.ledger_amount`](#dwd-dwd-store-goods-sale) | 原始应收金额，公式上接近 ledger_unit_price × ledger_count |
| 17 | `ledger_count` | numeric | [`ledger_count`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.ledger_count`](#dwd-dwd-store-goods-sale) | 销售数量（以 unit 为单位，unit 字段在门店商品档案中） |
| 18 | `ledger_unit_price` | numeric | [`ledger_unit_price`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.ledger_unit_price`](#dwd-dwd-store-goods-sale) | 商品在该次销售中的「结算单价」（元/单位） |
| 19 | `ledger_status` | integer | [`ledger_status`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.ledger_status`](#dwd-dwd-store-goods-sale) | 销售流水状态 |
| 20 | `discount_money` | numeric | [`discount_money`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.discount_price`](#dwd-dwd-store-goods-sale), [`dwd_store_goods_sale_ex.discount_money`](#dwd-dwd-store-goods-sale-ex) | 本条销售明细的「价格优惠金额」，即原价部分被减免掉的金额 |
| 21 | `discount_price` | numeric | [`discount_price`](#api-store-goods-sales-records) | — | 折后单价（元/单位） |
| 22 | `coupon_deduct_money` | numeric | [`coupon_deduct_money`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.coupon_deduct_money`](#dwd-dwd-store-goods-sale-ex) | 被优惠券 / 团购券直接抵扣到这条商品明细上的金额 |
| 23 | `member_discount_amount` | numeric | [`member_discount_amount`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.member_discount_amount`](#dwd-dwd-store-goods-sale-ex) | 由会员身份（会员折扣）针对这一行商品产生的优惠金额 |
| 24 | `option_coupon_deduct_money` | numeric | [`option_coupon_deduct_money`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.option_coupon_deduct_money`](#dwd-dwd-store-goods-sale-ex) | 由优惠券抵扣“选项价格”的金额 |
| 25 | `option_member_discount_money` | numeric | [`option_member_discount_money`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.option_member_discount_money`](#dwd-dwd-store-goods-sale-ex) | 由会员折扣作用在“选项价格”上的优惠金额 |
| 26 | `point_discount_money` | numeric | [`point_discount_money`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.point_discount_money`](#dwd-dwd-store-goods-sale-ex) | 由积分抵扣的金额（顾客兑换积分抵现金额） |
| 27 | `point_discount_money_cost` | numeric | [`point_discount_money_cost`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.point_discount_money_cost`](#dwd-dwd-store-goods-sale-ex) | 积分抵扣对应的“成本金额”（后台核算用），例如按积分成本来计提费用 |
| 28 | `real_goods_money` | numeric | [`real_goods_money`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.real_goods_money`](#dwd-dwd-store-goods-sale) | 商品实际入账金额（考虑折扣、可能还会考虑其它抵扣后的实际销售金额） |
| 29 | `cost_money` | numeric | [`cost_money`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.cost_money`](#dwd-dwd-store-goods-sale) | 本条销售对应的成本金额（以元计） |
| 30 | `push_money` | numeric | [`push_money`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.push_money`](#dwd-dwd-store-goods-sale-ex) | 本条销售对应的提成金额（给营业员/促销员的提成） |
| 31 | `sales_type` | integer | [`sales_type`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.sales_type`](#dwd-dwd-store-goods-sale-ex) | 销售类型 |
| 32 | `is_single_order` | integer | [`is_single_order`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.is_single_order`](#dwd-dwd-store-goods-sale-ex) | 是否单独订单标识 |
| 33 | `is_delete` | integer | [`is_delete`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.is_delete`](#dwd-dwd-store-goods-sale) | 逻辑删除标志 |
| 34 | `goods_remark` | text | [`goods_remark`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.goods_remark`](#dwd-dwd-store-goods-sale-ex) | 商品备注/口味说明/特殊说明 |
| 35 | `option_price` | numeric | [`option_price`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.option_price`](#dwd-dwd-store-goods-sale-ex) | 商品选项（规格/加料）的附加价格 |
| 36 | `option_value_name` | text | [`option_value_name`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.option_value_name`](#dwd-dwd-store-goods-sale-ex) | 商品选项名称（如规格、口味：大杯/小杯，不加冰等） |
| 37 | `member_coupon_id` | bigint | [`member_coupon_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.member_coupon_id`](#dwd-dwd-store-goods-sale-ex) | 会员券 ID（比如会员专享优惠券） |
| 38 | `package_coupon_id` | bigint | [`package_coupon_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.package_coupon_id`](#dwd-dwd-store-goods-sale-ex) | 套餐券 ID |
| 39 | `sales_man_org_id` | bigint | [`sales_man_org_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.salesman_org_id`](#dwd-dwd-store-goods-sale-ex) | 营业员所属组织/部门 ID |
| 40 | `salesman_name` | text | [`salesman_name`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.salesman_name`](#dwd-dwd-store-goods-sale-ex) | 营业员姓名（如果有为具体销售员记业绩，则在此填姓名） |
| 41 | `salesman_role_id` | bigint | [`salesman_role_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.salesman_role_id`](#dwd-dwd-store-goods-sale-ex) | 营业员的系统角色 ID（例如某个角色代码表示“销售员”） |
| 42 | `salesman_user_id` | bigint | [`salesman_user_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.salesman_user_id`](#dwd-dwd-store-goods-sale-ex) | 营业员用户 ID（系统账号 ID） |
| 43 | `operator_id` | bigint | [`operator_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.operator_id`](#dwd-dwd-store-goods-sale-ex) | 操作员 ID（录入这笔销售的员工） |
| 44 | `operator_name` | text | [`operator_name`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.operator_name`](#dwd-dwd-store-goods-sale-ex) | 操作员姓名，文字冗余 |
| 45 | `opensalesman` | text | [`openSalesman`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.open_salesman_flag`](#dwd-dwd-store-goods-sale-ex) | （待补充） |
| 46 | `returns_number` | integer | [`returns_number`](#api-store-goods-sales-records) | [`dwd_store_goods_sale_ex.returns_number`](#dwd-dwd-store-goods-sale-ex) | 退货数量（如果这条明细做了退货，会记录退货数量） |
| 47 | `site_table_id` | bigint | [`site_table_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.site_table_id`](#dwd-dwd-store-goods-sale) | 球台 ID |
| 48 | `tenant_goods_business_id` | bigint | [`tenant_goods_business_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.tenant_goods_business_id`](#dwd-dwd-store-goods-sale) | 租户级商品「业务大类」ID（例如“零食类”“酒水类”等更高维度） |
| 49 | `tenant_goods_category_id` | bigint | [`tenant_goods_category_id`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.tenant_goods_category_id`](#dwd-dwd-store-goods-sale) | 租户级商品一级分类 ID |
| 50 | `create_time` | timestamp without time zone | [`create_time`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.create_time`](#dwd-dwd-store-goods-sale) | 销售记录创建时间，通常就是结账时间或录入时间 |
| 51 | `coupon_share_money` | numeric | [`coupon_share_money`](#api-store-goods-sales-records) | [`dwd_store_goods_sale.coupon_share_money`](#dwd-dwd-store-goods-sale) | 优惠券分摊金额 |
| 52 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |
| 53 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 54 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 55 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 56 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |

<a id="dwd-dwd-store-goods-sale"></a>

#### DWD 表结构 — dwd.dwd_store_goods_sale [🔗 ODS](#ods-store-goods-sales-records)

共 24 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `store_goods_sale_id` | bigint | [`id`](#ods-store-goods-sales-records) | 直接 | 销售流水 ID |
| 2 | `order_trade_no` | bigint | [`order_trade_no`](#ods-store-goods-sales-records) | 直接 | 订单号 |
| 3 | `order_settle_id` | bigint | [`order_settle_id`](#ods-store-goods-sales-records) | 直接 | 结账单 ID → dwd_settlement_head |
| 4 | `order_pay_id` | bigint | [`order_pay_id`](#ods-store-goods-sales-records) | 直接 | 支付单 ID（当前数据全为 0） |
| 5 | `order_goods_id` | bigint | [`order_goods_id`](#ods-store-goods-sales-records) | 直接 | 订单商品 ID（0=商城订单） |
| 6 | `site_id` | bigint | [`site_id`](#ods-store-goods-sales-records) | 直接 | 门店 ID |
| 7 | `tenant_id` | bigint | [`tenant_id`](#ods-store-goods-sales-records) | 直接 | 租户 ID |
| 8 | `site_goods_id` | bigint | [`site_goods_id`](#ods-store-goods-sales-records) | 直接 | 门店商品 ID → dim_store_goods |
| 9 | `tenant_goods_id` | bigint | [`tenant_goods_id`](#ods-store-goods-sales-records) | 直接 | 租户商品 ID → dim_tenant_goods |
| 10 | `tenant_goods_category_id` | bigint | [`tenant_goods_category_id`](#ods-store-goods-sales-records) | 直接 | 商品分类 ID |
| 11 | `tenant_goods_business_id` | bigint | [`tenant_goods_business_id`](#ods-store-goods-sales-records) | 直接 | 业务大类 ID |
| 12 | `site_table_id` | bigint | [`site_table_id`](#ods-store-goods-sales-records) | 直接 | 台桌 ID（0=商城订单，非台桌消费） |
| 13 | `ledger_name` | character varying | [`ledger_name`](#ods-store-goods-sales-records) | 直接 | 商品名称。**样本值**: "哇哈哈矿泉水", "东方树叶", "可乐" 等 |
| 14 | `ledger_group_name` | character varying | [`ledger_group_name`](#ods-store-goods-sales-records) | 直接 | 商品分类。**样本值**: "酒水", "零食", "香烟" 等 |
| 15 | `ledger_unit_price` | numeric | [`ledger_unit_price`](#ods-store-goods-sales-records) | 直接 | 单价（元） |
| 16 | `ledger_count` | integer | [`ledger_count`](#ods-store-goods-sales-records) | 直接 | 购买数量。**样本值**: 1, 2, 3, 4 等 |
| 17 | `ledger_amount` | numeric | [`ledger_amount`](#ods-store-goods-sales-records) | 直接 | 销售金额（元） |
| 18 | `discount_price` | numeric | [`discount_money`](#ods-store-goods-sales-records) | 直接 | 折扣金额 |
| 19 | `real_goods_money` | numeric | [`real_goods_money`](#ods-store-goods-sales-records) | 直接 | 实收金额 |
| 20 | `cost_money` | numeric | [`cost_money`](#ods-store-goods-sales-records) | 直接 | 成本金额 |
| 21 | `ledger_status` | integer | [`ledger_status`](#ods-store-goods-sales-records) | 直接 | 账本状态。**枚举值**: 1=已结算 |
| 22 | `is_delete` | integer | [`is_delete`](#ods-store-goods-sales-records) | 直接 | 删除标记。**枚举值**: 0=未删除 |
| 23 | `create_time` | timestamp with time zone | [`create_time`](#ods-store-goods-sales-records) | 直接 | 创建时间 |
| 24 | `coupon_share_money` | numeric | [`coupon_share_money`](#ods-store-goods-sales-records) | 直接 | 优惠券分摊金额 |

<a id="dwd-dwd-store-goods-sale-ex"></a>

#### DWD 表结构 — dwd.dwd_store_goods_sale_ex [🔗 ODS](#ods-store-goods-sales-records)

共 28 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `store_goods_sale_id` | bigint | [`id`](#ods-store-goods-sales-records) | 直接 | 字段重命名 |
| 2 | `legacy_order_goods_id` | bigint | [`ordergoodsid`](#ods-store-goods-sales-records) | 直接 | 字段重命名 |
| 3 | `site_name` | text | [`sitename`](#ods-store-goods-sales-records) | 直接 | 字段重命名 |
| 4 | `legacy_site_id` | bigint | [`siteid`](#ods-store-goods-sales-records) | 直接 | 字段重命名 |
| 5 | `goods_remark` | text | [`goods_remark`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 6 | `option_value_name` | text | [`option_value_name`](#ods-store-goods-sales-records) | 直接 | 名称字段，用于展示与辅助识别 |
| 7 | `operator_name` | text | [`operator_name`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 8 | `open_salesman_flag` | integer | [`opensalesman`](#ods-store-goods-sales-records) | → integer | 字段重命名 |
| 9 | `salesman_user_id` | bigint | [`salesman_user_id`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 10 | `salesman_name` | text | [`salesman_name`](#ods-store-goods-sales-records) | 直接 | 名称字段，用于展示与辅助识别 |
| 11 | `salesman_role_id` | bigint | [`salesman_role_id`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 12 | `salesman_org_id` | bigint | [`sales_man_org_id`](#ods-store-goods-sales-records) | 直接 | 字段重命名 |
| 13 | `discount_money` | numeric | [`discount_money`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 14 | `returns_number` | integer | [`returns_number`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 15 | `coupon_deduct_money` | numeric | [`coupon_deduct_money`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 16 | `member_discount_amount` | numeric | [`member_discount_amount`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 17 | `point_discount_money` | numeric | [`point_discount_money`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 18 | `point_discount_money_cost` | numeric | [`point_discount_money_cost`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 19 | `package_coupon_id` | bigint | [`package_coupon_id`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 20 | `order_coupon_id` | bigint | [`order_coupon_id`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 21 | `member_coupon_id` | bigint | [`member_coupon_id`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 22 | `option_price` | numeric | [`option_price`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 23 | `option_member_discount_money` | numeric | [`option_member_discount_money`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 24 | `option_coupon_deduct_money` | numeric | [`option_coupon_deduct_money`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 25 | `push_money` | numeric | [`push_money`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 26 | `is_single_order` | integer | [`is_single_order`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 27 | `sales_type` | integer | [`sales_type`](#ods-store-goods-sales-records) | 直接 | 同名直传 |
| 28 | `operator_id` | bigint | [`operator_id`](#ods-store-goods-sales-records) | 直接 | 同名直传 |

### 3.7 payment_transactions（支付流水）

- 任务代码：`ODS_PAYMENT`
- 采样记录数：200
- API JSON 字段数：36
- ODS 列数：17
- DWD 目标表：dwd_payment

<a id="api-payment-transactions"></a>

#### API 源字段 — payment_transactions [🔗 ODS](#ods-payment-transactions)

已映射 12/36，覆盖率 33.3%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `siteProfile.id` | integer | [`id`](#ods-payment-transactions) | 支付流水记录的主键 ID | 📦 嵌套对象；示例: `2790685415443269` |
| 2 | `siteProfile.org_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2790684179467077` |
| 3 | `siteProfile.shop_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `朗朗桌球` |
| 4 | `siteProfile.avatar` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `https://oss.ficoo.vip/admin...` |
| 5 | `siteProfile.business_tel` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `13316068642` |
| 6 | `siteProfile.full_address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区丽阳街12号` |
| 7 | `siteProfile.address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区天园街道朗朗桌球` |
| 8 | `siteProfile.longitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `113.360321` |
| 9 | `siteProfile.latitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `23.133629` |
| 10 | `siteProfile.tenant_site_region_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `156440100` |
| 11 | `siteProfile.tenant_id` | integer | [`tenant_id`](#ods-payment-transactions) | 租户ID | 📦 嵌套对象；示例: `2790683160709957` |
| 12 | `siteProfile.auto_light` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 13 | `siteProfile.attendance_distance` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 14 | `siteProfile.wifi_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 15 | `siteProfile.wifi_password` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 16 | `siteProfile.customer_service_qrcode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 17 | `siteProfile.customer_service_wechat` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 18 | `siteProfile.fixed_pay_qrCode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 19 | `siteProfile.prod_env` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 20 | `siteProfile.light_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2` |
| 21 | `siteProfile.light_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 22 | `siteProfile.site_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 23 | `siteProfile.light_token` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 24 | `siteProfile.site_label` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `A` |
| 25 | `siteProfile.attendance_enabled` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 26 | `siteProfile.shop_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 27 | `create_time` | string | [`create_time`](#ods-payment-transactions) | 支付记录创建时间，通常与发起支付请求的时间一致（创建支付流水的时间戳） | 枚举值: `2026-02-14 00:21:21`, `2026-02-14 00:16:27`, `2026-02-14 00:12:40`, `2026-02-14 00:01:01`, `2026-02-13 23:20:28`, `2026-02-13 23:16:30`, `2026-02-13 23:09:55`, `2026-02-13 22:50:41` |
| 28 | `pay_amount` | number | [`pay_amount`](#ods-payment-transactions) | 本条支付流水的“支付金额”，单位为元 | 枚举值: `7.0`, `0.0`, `10.0`, `684.0`, `5.0`, `43.0`, `49.0`, `2.0` |
| 29 | `pay_status` | integer | [`pay_status`](#ods-payment-transactions) | 支付状态枚举字段 | 示例: `2` |
| 30 | `pay_time` | string | [`pay_time`](#ods-payment-transactions) | 实际支付完成时间（支付状态变为成功的时间戳） | 枚举值: `2026-02-14 00:21:21`, `2026-02-14 00:16:27`, `2026-02-14 00:12:40`, `2026-02-14 00:01:01`, `2026-02-13 23:20:28`, `2026-02-13 23:16:30`, `2026-02-13 23:09:55`, `2026-02-13 22:50:42` |
| 31 | `online_pay_channel` | integer | [`online_pay_channel`](#ods-payment-transactions) | 每一笔结账单（settleList.id）对应一条支付记录（当前样本中是一条记录，relate_id 唯一） | 示例: `0` |
| 32 | `relate_type` | integer | [`relate_type`](#ods-payment-transactions) | 表示“这条支付记录关联的业务类型” | 枚举值: `2`, `1` |
| 33 | `relate_id` | integer | [`relate_id`](#ods-payment-transactions) | 关联业务记录的主键 ID（按 relate_type 不同指向不同表） | 枚举值: `3093864077166789`, `3093859276196037`, `3093855537596549`, `3093843703564549`, `3093804233967877`, `3093800338802821`, `3093793847478597`, `3093774959741061` |
| 34 | `site_id` | integer | [`site_id`](#ods-payment-transactions) | 支付记录所属的门店 ID | 示例: `2790685415443269` |
| 35 | `id` | integer | [`id`](#ods-payment-transactions) | 支付流水记录的主键 ID | 枚举值: `3093864103463109`, `3093859289221445`, `3093855574345989`, `3093844117801285`, `3093804248779077`, `3093800354400453`, `3093793882589445`, `3093774982547589` |
| 36 | `payment_method` | integer | [`payment_method`](#ods-payment-transactions) | 支付方式枚举，例如微信、支付宝、现金、银行卡、储值卡等某一种 | 枚举值: `4`, `2` |

<a id="ods-payment-transactions"></a>

#### ODS 表结构 — ods.payment_transactions [🔗 API](#api-payment-transactions)

共 17 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`siteProfile.id`](#api-payment-transactions) | [`dwd_payment.payment_id`](#dwd-dwd-payment) | 支付流水记录的主键 ID |
| 2 | `site_id` | bigint | [`site_id`](#api-payment-transactions) | [`dwd_payment.site_id`](#dwd-dwd-payment) | 支付记录所属的门店 ID |
| 3 | `siteprofile` | jsonb | — | — | （待补充） |
| 4 | `relate_type` | integer | [`relate_type`](#api-payment-transactions) | [`dwd_payment.relate_type`](#dwd-dwd-payment) | 表示“这条支付记录关联的业务类型” |
| 5 | `relate_id` | bigint | [`relate_id`](#api-payment-transactions) | [`dwd_payment.relate_id`](#dwd-dwd-payment) | 关联业务记录的主键 ID（按 relate_type 不同指向不同表） |
| 6 | `pay_amount` | numeric | [`pay_amount`](#api-payment-transactions) | [`dwd_payment.pay_amount`](#dwd-dwd-payment) | 本条支付流水的“支付金额”，单位为元 |
| 7 | `pay_status` | integer | [`pay_status`](#api-payment-transactions) | [`dwd_payment.pay_status`](#dwd-dwd-payment) | 支付状态枚举字段 |
| 8 | `pay_time` | timestamp without time zone | [`pay_time`](#api-payment-transactions) | [`dwd_payment.pay_time`](#dwd-dwd-payment), [`dwd_payment.pay_date`](#dwd-dwd-payment) | 实际支付完成时间（支付状态变为成功的时间戳） |
| 9 | `create_time` | timestamp without time zone | [`create_time`](#api-payment-transactions) | [`dwd_payment.create_time`](#dwd-dwd-payment) | 支付记录创建时间，通常与发起支付请求的时间一致（创建支付流水的时间戳） |
| 10 | `payment_method` | integer | [`payment_method`](#api-payment-transactions) | [`dwd_payment.payment_method`](#dwd-dwd-payment) | 支付方式枚举，例如微信、支付宝、现金、银行卡、储值卡等某一种 |
| 11 | `online_pay_channel` | integer | [`online_pay_channel`](#api-payment-transactions) | [`dwd_payment.online_pay_channel`](#dwd-dwd-payment) | 每一笔结账单（settleList.id）对应一条支付记录（当前样本中是一条记录，relate_id 唯一） |
| 12 | `tenant_id` | bigint | [`siteProfile.tenant_id`](#api-payment-transactions) | [`dwd_payment.tenant_id`](#dwd-dwd-payment) | 租户ID |
| 13 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 14 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 15 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 16 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 17 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dwd-payment"></a>

#### DWD 表结构 — dwd.dwd_payment [🔗 ODS](#ods-payment-transactions)

共 12 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `payment_id` | bigint | [`id`](#ods-payment-transactions) | 直接 | 支付流水 ID |
| 2 | `site_id` | bigint | [`site_id`](#ods-payment-transactions) | 直接 | 门店 ID |
| 3 | `relate_type` | integer | [`relate_type`](#ods-payment-transactions) | 直接 | 关联业务类型。**枚举值**: 1=预付, 2=结账, 5=充值, 6=线上商城 |
| 4 | `relate_id` | bigint | [`relate_id`](#ods-payment-transactions) | 直接 | 关联业务 ID |
| 5 | `pay_amount` | numeric | [`pay_amount`](#ods-payment-transactions) | 直接 | 支付金额（元） |
| 6 | `pay_status` | integer | [`pay_status`](#ods-payment-transactions) | 直接 | 支付状态。**枚举值**: 2=已支付 |
| 7 | `payment_method` | integer | [`payment_method`](#ods-payment-transactions) | 直接 | 支付方式。**枚举值**: 2=现金支付 , 4=离线支付 |
| 8 | `online_pay_channel` | integer | [`online_pay_channel`](#ods-payment-transactions) | 直接 | 在线支付渠道（当前数据全为 0） |
| 9 | `create_time` | timestamp with time zone | [`create_time`](#ods-payment-transactions) | 直接 | 创建时间 |
| 10 | `pay_time` | timestamp with time zone | [`pay_time`](#ods-payment-transactions) | 直接 | 支付时间 |
| 11 | `pay_date` | date | [`pay_time`](#ods-payment-transactions) | → date | 支付日期 |
| 12 | `tenant_id` | bigint | [`tenant_id`](#ods-payment-transactions) | 直接 | 租户 ID |

### 3.8 refund_transactions（退款流水）

- 任务代码：`ODS_REFUND`
- 采样记录数：30
- API JSON 字段数：57
- ODS 列数：37
- DWD 目标表：dwd_refund, dwd_refund_ex

<a id="api-refund-transactions"></a>

#### API 源字段 — refund_transactions [🔗 ODS](#ods-refund-transactions)

已映射 33/57，覆盖率 57.9%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `tenantName` | string | [`tenantname`](#ods-refund-transactions) | （待补充） | 大小写匹配；示例: `朗朗桌球` |
| 2 | `siteProfile.id` | integer | [`id`](#ods-refund-transactions) | 本条 退款流水 的唯一 ID | 📦 嵌套对象；示例: `2790685415443269` |
| 3 | `siteProfile.org_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2790684179467077` |
| 4 | `siteProfile.shop_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `朗朗桌球` |
| 5 | `siteProfile.avatar` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `https://oss.ficoo.vip/admin...` |
| 6 | `siteProfile.business_tel` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `13316068642` |
| 7 | `siteProfile.full_address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区丽阳街12号` |
| 8 | `siteProfile.address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区天园街道朗朗桌球` |
| 9 | `siteProfile.longitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `113.360321` |
| 10 | `siteProfile.latitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `23.133629` |
| 11 | `siteProfile.tenant_site_region_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `156440100` |
| 12 | `siteProfile.tenant_id` | integer | [`tenant_id`](#ods-refund-transactions) | 租户/品牌 ID，全系统维度标识该商户 | 📦 嵌套对象；示例: `2790683160709957` |
| 13 | `siteProfile.auto_light` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 14 | `siteProfile.attendance_distance` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 15 | `siteProfile.wifi_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 16 | `siteProfile.wifi_password` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 17 | `siteProfile.customer_service_qrcode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 18 | `siteProfile.customer_service_wechat` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 19 | `siteProfile.fixed_pay_qrCode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 20 | `siteProfile.prod_env` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 21 | `siteProfile.light_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2` |
| 22 | `siteProfile.light_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 23 | `siteProfile.site_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 24 | `siteProfile.light_token` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 25 | `siteProfile.site_label` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `A` |
| 26 | `siteProfile.attendance_enabled` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 27 | `siteProfile.shop_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 28 | `id` | integer | [`id`](#ods-refund-transactions) | 本条 退款流水 的唯一 ID | 枚举值: `3089577798995141`, `3085106065510021`, `3080691980947141`, `3076746573219397`, `3075315080365445`, `3072740947101125`, `3063816474921925`, `3062207845584517` |
| 29 | `site_id` | integer | [`site_id`](#ods-refund-transactions) | 门店 ID | 示例: `2790685415443269` |
| 30 | `tenant_id` | integer | [`tenant_id`](#ods-refund-transactions) | 租户/品牌 ID，全系统维度标识该商户 | 示例: `2790683160709957` |
| 31 | `pay_sn` | integer | [`pay_sn`](#ods-refund-transactions) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `0` |
| 32 | `pay_amount` | number | [`pay_amount`](#ods-refund-transactions) | 本次退款的 资金变动金额 | 枚举值: `-8.0`, `-1.5`, `-98.0`, `-50.0`, `-20.0`, `-10000.0`, `-5.0`, `-2.0` |
| 33 | `pay_status` | integer | [`pay_status`](#ods-refund-transactions) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `2` |
| 34 | `pay_time` | string | [`pay_time`](#ods-refund-transactions) | 退款在支付渠道层面实际发生的时间 | 枚举值: `2026-02-10 23:41:06`, `2026-02-07 19:52:13`, `2026-02-04 17:01:58`, `2026-02-01 22:08:30`, `2026-01-31 21:52:18`, `2026-01-30 02:13:46`, `2026-01-23 18:55:19`, `2026-01-22 15:38:56` |
| 35 | `create_time` | string | [`create_time`](#ods-refund-transactions) | 本条退款流水在系统内创建时间 | 枚举值: `2026-02-10 23:41:06`, `2026-02-07 19:52:13`, `2026-02-04 17:01:58`, `2026-02-01 22:08:30`, `2026-01-31 21:52:18`, `2026-01-30 02:13:46`, `2026-01-23 18:55:19`, `2026-01-22 15:38:56` |
| 36 | `relate_type` | integer | [`relate_type`](#ods-refund-transactions) | 本退款对应的“业务类型” | 枚举值: `1`, `5`, `2` |
| 37 | `relate_id` | integer | [`relate_id`](#ods-refund-transactions) | 本次退款关联的业务 ID | 枚举值: `3089548319804869`, `3085105740795590`, `3080690280517125`, `3076716749112965`, `3075314390828613`, `3072740722083269`, `3063630706494661`, `3062058292596165` |
| 38 | `is_revoke` | integer | [`is_revoke`](#ods-refund-transactions) | 布尔/开关字段，用于表示权限、可用性或状态开关 | 示例: `0` |
| 39 | `is_delete` | integer | [`is_delete`](#ods-refund-transactions) | 逻辑删除标志 | 示例: `0` |
| 40 | `online_pay_channel` | integer | [`online_pay_channel`](#ods-refund-transactions) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `0` |
| 41 | `payment_method` | integer | [`payment_method`](#ods-refund-transactions) | 来自 JSON 导出的原始字段，用于保留业务取值 | 枚举值: `4`, `2` |
| 42 | `balance_frozen_amount` | number | [`balance_frozen_amount`](#ods-refund-transactions) | 涉及会员储值卡退款时，暂时冻结的余额金额 | 示例: `0.0` |
| 43 | `card_frozen_amount` | number | [`card_frozen_amount`](#ods-refund-transactions) | 与上一个类似，偏向“某张卡的被冻结金额”，也与会员卡/储值账户相关 | 示例: `0.0` |
| 44 | `member_id` | integer | [`member_id`](#ods-refund-transactions) | 租户内部的会员 ID（对应会员档案中的某个主键） | 示例: `0` |
| 45 | `member_card_id` | integer | [`member_card_id`](#ods-refund-transactions) | 关联的会员卡账户 ID（对应“储值卡列表”或“会员档案”中的某一张卡） | 示例: `0` |
| 46 | `round_amount` | number | [`round_amount`](#ods-refund-transactions) | 舍入金额/抹零金额 | 示例: `0.0` |
| 47 | `online_pay_type` | integer | [`online_pay_type`](#ods-refund-transactions) | 当前：全部 0 | 示例: `0` |
| 48 | `action_type` | integer | [`action_type`](#ods-refund-transactions) | 当前：全部 2 | 示例: `2` |
| 49 | `refund_amount` | number | [`refund_amount`](#ods-refund-transactions) | 设计上本应显示“实际退款金额”（正数），与 pay_amount 配合使用 | 示例: `0.0` |
| 50 | `cashier_point_id` | integer | [`cashier_point_id`](#ods-refund-transactions) | 收银点 ID，例如前台 1、前台 2、自助机等 | 示例: `0` |
| 51 | `operator_id` | integer | [`operator_id`](#ods-refund-transactions) | 执行该退款操作的操作员 ID | 示例: `0` |
| 52 | `pay_terminal` | integer | [`pay_terminal`](#ods-refund-transactions) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `1` |
| 53 | `pay_config_id` | integer | [`pay_config_id`](#ods-refund-transactions) | 支付配置 ID，例如商户在“非球科技”内配置的某一条支付通道（某个微信商户号、银联通道）的主键 | 示例: `0` |
| 54 | `channel_payer_id` | string | [`channel_payer_id`](#ods-refund-transactions) | 支付渠道侧的 payer ID，例如微信 openid、银行卡号掩码等 |  |
| 55 | `channel_pay_no` | string | [`channel_pay_no`](#ods-refund-transactions) | 第三方支付平台的交易号（如微信支付单号、支付宝交易号等） |  |
| 56 | `check_status` | integer | [`check_status`](#ods-refund-transactions) | 当前：全部 1 | 示例: `1` |
| 57 | `channel_fee` | number | [`channel_fee`](#ods-refund-transactions) | 第三方支付渠道对本次退款收取的手续费 | 示例: `0.0` |

<a id="ods-refund-transactions"></a>

#### ODS 表结构 — ods.refund_transactions [🔗 API](#api-refund-transactions)

共 37 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`siteProfile.id`](#api-refund-transactions) | [`dwd_refund.refund_id`](#dwd-dwd-refund), [`dwd_refund_ex.refund_id`](#dwd-dwd-refund-ex) | 本条 退款流水 的唯一 ID |
| 2 | `tenant_id` | bigint | [`siteProfile.tenant_id`](#api-refund-transactions) | [`dwd_refund.tenant_id`](#dwd-dwd-refund) | 租户/品牌 ID，全系统维度标识该商户 |
| 3 | `tenantname` | text | [`tenantName`](#api-refund-transactions) | [`dwd_refund_ex.tenant_name`](#dwd-dwd-refund-ex) | （待补充） |
| 4 | `site_id` | bigint | [`site_id`](#api-refund-transactions) | [`dwd_refund.site_id`](#dwd-dwd-refund) | 门店 ID |
| 5 | `siteprofile` | jsonb | — | — | （待补充） |
| 6 | `relate_type` | integer | [`relate_type`](#api-refund-transactions) | [`dwd_refund.relate_type`](#dwd-dwd-refund) | 本退款对应的“业务类型” |
| 7 | `relate_id` | bigint | [`relate_id`](#api-refund-transactions) | [`dwd_refund.relate_id`](#dwd-dwd-refund) | 本次退款关联的业务 ID |
| 8 | `pay_sn` | text | [`pay_sn`](#api-refund-transactions) | [`dwd_refund_ex.pay_sn`](#dwd-dwd-refund-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 9 | `pay_amount` | numeric | [`pay_amount`](#api-refund-transactions) | [`dwd_refund.pay_amount`](#dwd-dwd-refund) | 本次退款的 资金变动金额 |
| 10 | `refund_amount` | numeric | [`refund_amount`](#api-refund-transactions) | [`dwd_refund_ex.refund_amount`](#dwd-dwd-refund-ex) | 设计上本应显示“实际退款金额”（正数），与 pay_amount 配合使用 |
| 11 | `round_amount` | numeric | [`round_amount`](#api-refund-transactions) | [`dwd_refund_ex.round_amount`](#dwd-dwd-refund-ex) | 舍入金额/抹零金额 |
| 12 | `pay_status` | integer | [`pay_status`](#api-refund-transactions) | [`dwd_refund_ex.pay_status`](#dwd-dwd-refund-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 13 | `pay_time` | timestamp without time zone | [`pay_time`](#api-refund-transactions) | [`dwd_refund.pay_time`](#dwd-dwd-refund) | 退款在支付渠道层面实际发生的时间 |
| 14 | `create_time` | timestamp without time zone | [`create_time`](#api-refund-transactions) | [`dwd_refund.create_time`](#dwd-dwd-refund) | 本条退款流水在系统内创建时间 |
| 15 | `payment_method` | integer | [`payment_method`](#api-refund-transactions) | [`dwd_refund.payment_method`](#dwd-dwd-refund) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 16 | `pay_terminal` | integer | [`pay_terminal`](#api-refund-transactions) | [`dwd_refund_ex.pay_terminal`](#dwd-dwd-refund-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 17 | `pay_config_id` | bigint | [`pay_config_id`](#api-refund-transactions) | [`dwd_refund_ex.pay_config_id`](#dwd-dwd-refund-ex) | 支付配置 ID，例如商户在“非球科技”内配置的某一条支付通道（某个微信商户号、银联通道）的主键 |
| 18 | `online_pay_channel` | integer | [`online_pay_channel`](#api-refund-transactions) | [`dwd_refund_ex.online_pay_channel`](#dwd-dwd-refund-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 19 | `online_pay_type` | integer | [`online_pay_type`](#api-refund-transactions) | [`dwd_refund_ex.online_pay_type`](#dwd-dwd-refund-ex) | 当前：全部 0 |
| 20 | `channel_fee` | numeric | [`channel_fee`](#api-refund-transactions) | [`dwd_refund.channel_fee`](#dwd-dwd-refund) | 第三方支付渠道对本次退款收取的手续费 |
| 21 | `channel_payer_id` | text | [`channel_payer_id`](#api-refund-transactions) | [`dwd_refund_ex.channel_payer_id`](#dwd-dwd-refund-ex) | 支付渠道侧的 payer ID，例如微信 openid、银行卡号掩码等 |
| 22 | `channel_pay_no` | text | [`channel_pay_no`](#api-refund-transactions) | [`dwd_refund_ex.channel_pay_no`](#dwd-dwd-refund-ex) | 第三方支付平台的交易号（如微信支付单号、支付宝交易号等） |
| 23 | `member_id` | bigint | [`member_id`](#api-refund-transactions) | [`dwd_refund.member_id`](#dwd-dwd-refund) | 租户内部的会员 ID（对应会员档案中的某个主键） |
| 24 | `member_card_id` | bigint | [`member_card_id`](#api-refund-transactions) | [`dwd_refund.member_card_id`](#dwd-dwd-refund) | 关联的会员卡账户 ID（对应“储值卡列表”或“会员档案”中的某一张卡） |
| 25 | `cashier_point_id` | bigint | [`cashier_point_id`](#api-refund-transactions) | [`dwd_refund_ex.cashier_point_id`](#dwd-dwd-refund-ex) | 收银点 ID，例如前台 1、前台 2、自助机等 |
| 26 | `operator_id` | bigint | [`operator_id`](#api-refund-transactions) | [`dwd_refund_ex.operator_id`](#dwd-dwd-refund-ex) | 执行该退款操作的操作员 ID |
| 27 | `action_type` | integer | [`action_type`](#api-refund-transactions) | [`dwd_refund_ex.action_type`](#dwd-dwd-refund-ex) | 当前：全部 2 |
| 28 | `check_status` | integer | [`check_status`](#api-refund-transactions) | [`dwd_refund_ex.check_status`](#dwd-dwd-refund-ex) | 当前：全部 1 |
| 29 | `is_revoke` | integer | [`is_revoke`](#api-refund-transactions) | [`dwd_refund_ex.is_revoke`](#dwd-dwd-refund-ex) | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| 30 | `is_delete` | integer | [`is_delete`](#api-refund-transactions) | [`dwd_refund_ex.is_delete`](#dwd-dwd-refund-ex) | 逻辑删除标志 |
| 31 | `balance_frozen_amount` | numeric | [`balance_frozen_amount`](#api-refund-transactions) | [`dwd_refund_ex.balance_frozen_amount`](#dwd-dwd-refund-ex) | 涉及会员储值卡退款时，暂时冻结的余额金额 |
| 32 | `card_frozen_amount` | numeric | [`card_frozen_amount`](#api-refund-transactions) | [`dwd_refund_ex.card_frozen_amount`](#dwd-dwd-refund-ex) | 与上一个类似，偏向“某张卡的被冻结金额”，也与会员卡/储值账户相关 |
| 33 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 34 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 35 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 36 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 37 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dwd-refund"></a>

#### DWD 表结构 — dwd.dwd_refund [🔗 ODS](#ods-refund-transactions)

共 12 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `refund_id` | bigint | [`id`](#ods-refund-transactions) | 直接 | 退款流水 ID |
| 2 | `tenant_id` | bigint | [`tenant_id`](#ods-refund-transactions) | 直接 | 租户 ID |
| 3 | `site_id` | bigint | [`site_id`](#ods-refund-transactions) | 直接 | 门店 ID |
| 4 | `relate_type` | integer | [`relate_type`](#ods-refund-transactions) | 直接 | 关联业务类型。**枚举值**: 1(7)=预付退款 , 2(31)=结账退款, 5(7)=充值退款 |
| 5 | `relate_id` | bigint | [`relate_id`](#ods-refund-transactions) | 直接 | 关联业务 ID |
| 6 | `pay_amount` | numeric | [`pay_amount`](#ods-refund-transactions) | 直接 | 退款金额（元，负数） |
| 7 | `channel_fee` | numeric | [`channel_fee`](#ods-refund-transactions) | 直接 | 渠道手续费 |
| 8 | `pay_time` | timestamp with time zone | [`pay_time`](#ods-refund-transactions) | 直接 | 退款时间 |
| 9 | `create_time` | timestamp with time zone | [`create_time`](#ods-refund-transactions) | 直接 | 创建时间 |
| 10 | `payment_method` | integer | [`payment_method`](#ods-refund-transactions) | 直接 | 支付方式，暂无用途。 |
| 11 | `member_id` | bigint | [`member_id`](#ods-refund-transactions) | 直接 | 会员 ID（当前数据全为 0） |
| 12 | `member_card_id` | bigint | [`member_card_id`](#ods-refund-transactions) | 直接 | 会员卡 ID（当前数据全为 0） |

<a id="dwd-dwd-refund-ex"></a>

#### DWD 表结构 — dwd.dwd_refund_ex [🔗 ODS](#ods-refund-transactions)

共 20 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `refund_id` | bigint | [`id`](#ods-refund-transactions) | 直接 | 字段重命名 |
| 2 | `tenant_name` | character varying | [`tenantname`](#ods-refund-transactions) | 直接 | 字段重命名 |
| 3 | `pay_sn` | bigint | [`pay_sn`](#ods-refund-transactions) | 直接 | 同名直传 |
| 4 | `refund_amount` | numeric | [`refund_amount`](#ods-refund-transactions) | 直接 | 同名直传 |
| 5 | `round_amount` | numeric | [`round_amount`](#ods-refund-transactions) | 直接 | 同名直传 |
| 6 | `balance_frozen_amount` | numeric | [`balance_frozen_amount`](#ods-refund-transactions) | 直接 | 同名直传 |
| 7 | `card_frozen_amount` | numeric | [`card_frozen_amount`](#ods-refund-transactions) | 直接 | 同名直传 |
| 8 | `pay_status` | integer | [`pay_status`](#ods-refund-transactions) | 直接 | 同名直传 |
| 9 | `action_type` | integer | [`action_type`](#ods-refund-transactions) | 直接 | 同名直传 |
| 10 | `is_revoke` | integer | [`is_revoke`](#ods-refund-transactions) | 直接 | 同名直传 |
| 11 | `is_delete` | integer | [`is_delete`](#ods-refund-transactions) | 直接 | 同名直传 |
| 12 | `check_status` | integer | [`check_status`](#ods-refund-transactions) | 直接 | 同名直传 |
| 13 | `online_pay_channel` | integer | [`online_pay_channel`](#ods-refund-transactions) | 直接 | 同名直传 |
| 14 | `online_pay_type` | integer | [`online_pay_type`](#ods-refund-transactions) | 直接 | 同名直传 |
| 15 | `pay_terminal` | integer | [`pay_terminal`](#ods-refund-transactions) | 直接 | 同名直传 |
| 16 | `pay_config_id` | integer | [`pay_config_id`](#ods-refund-transactions) | 直接 | 同名直传 |
| 17 | `cashier_point_id` | integer | [`cashier_point_id`](#ods-refund-transactions) | 直接 | 同名直传 |
| 18 | `operator_id` | bigint | [`operator_id`](#ods-refund-transactions) | 直接 | 同名直传 |
| 19 | `channel_payer_id` | character varying | [`channel_payer_id`](#ods-refund-transactions) | 直接 | 标识类 ID 字段，用于关联/定位相关实体 |
| 20 | `channel_pay_no` | character varying | [`channel_pay_no`](#ods-refund-transactions) | 直接 | 明细字段，用于记录事实取值 |

### 3.9 platform_coupon_redemption_records（平台/团购券核销）

- 任务代码：`ODS_PLATFORM_COUPON`
- 采样记录数：200
- API JSON 字段数：51
- ODS 列数：31
- DWD 目标表：dwd_platform_coupon_redemption, dwd_platform_coupon_redemption_ex

<a id="api-platform-coupon-redemption-records"></a>

#### API 源字段 — platform_coupon_redemption_records [🔗 ODS](#ods-platform-coupon-redemption-records)

已映射 27/51，覆盖率 52.9%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `siteProfile.id` | integer | [`id`](#ods-platform-coupon-redemption-records) | 本条平台验券记录在本系统内的主键 ID | 📦 嵌套对象；示例: `2790685415443269` |
| 2 | `siteProfile.org_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2790684179467077` |
| 3 | `siteProfile.shop_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `朗朗桌球` |
| 4 | `siteProfile.avatar` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `https://oss.ficoo.vip/admin...` |
| 5 | `siteProfile.business_tel` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `13316068642` |
| 6 | `siteProfile.full_address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区丽阳街12号` |
| 7 | `siteProfile.address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区天园街道朗朗桌球` |
| 8 | `siteProfile.longitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `113.360321` |
| 9 | `siteProfile.latitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `23.133629` |
| 10 | `siteProfile.tenant_site_region_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `156440100` |
| 11 | `siteProfile.tenant_id` | integer | [`tenant_id`](#ods-platform-coupon-redemption-records) | 商户/租户 ID（品牌级别） | 📦 嵌套对象；示例: `2790683160709957` |
| 12 | `siteProfile.auto_light` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 13 | `siteProfile.attendance_distance` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 14 | `siteProfile.wifi_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 15 | `siteProfile.wifi_password` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 16 | `siteProfile.customer_service_qrcode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 17 | `siteProfile.customer_service_wechat` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 18 | `siteProfile.fixed_pay_qrCode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 19 | `siteProfile.prod_env` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 20 | `siteProfile.light_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2` |
| 21 | `siteProfile.light_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 22 | `siteProfile.site_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 23 | `siteProfile.light_token` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 24 | `siteProfile.site_label` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `A` |
| 25 | `siteProfile.attendance_enabled` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 26 | `siteProfile.shop_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 27 | `id` | integer | [`id`](#ods-platform-coupon-redemption-records) | 本条平台验券记录在本系统内的主键 ID | 枚举值: `3093784060856453`, `3093740765382981`, `3093730734033029`, `3093729952467077`, `3093720616372421`, `3093689826576709`, `3093683005753477`, `3093681904502917` |
| 28 | `tenant_id` | integer | [`tenant_id`](#ods-platform-coupon-redemption-records) | 商户/租户 ID（品牌级别） | 示例: `2790683160709957` |
| 29 | `site_id` | integer | [`site_id`](#ods-platform-coupon-redemption-records) | 门店 ID | 示例: `2790685415443269` |
| 30 | `sale_price` | number | [`sale_price`](#ods-platform-coupon-redemption-records) | 顾客在第三方平台上实际支付的价格（团购售价） | 枚举值: `20.26`, `39.9`, `69.9`, `59.9`, `35.9`, `128.0`, `12.12`, `9.9` |
| 31 | `coupon_code` | string | [`coupon_code`](#ods-platform-coupon-redemption-records) | 券码，顾客出示的团购券密码/编号 | 枚举值: `0108970935413`, `0107305319597`, `0107317733529`, `0103968076185`, `0102409858353`, `0103957102485`, `0106359943515`, `0101346097990` |
| 32 | `coupon_channel` | integer | [`coupon_channel`](#ods-platform-coupon-redemption-records) | 券来源渠道（第三方平台渠道编号） | 示例: `1` |
| 33 | `site_order_id` | integer | [`site_order_id`](#ods-platform-coupon-redemption-records) | 门店内部的订单 ID（平台券核销时对应的店内订单） | 枚举值: `3093784062036101`, `3093740766775621`, `3093730735376517`, `3093729955563653`, `3093720617519301`, `3093689828067653`, `3093683006916741`, `3093681905567877` |
| 34 | `coupon_free_time` | integer | [`coupon_free_time`](#ods-platform-coupon-redemption-records) | 券附带的“免费时长”字段（例如送多少分钟台费） | 示例: `0` |
| 35 | `use_status` | integer | [`use_status`](#ods-platform-coupon-redemption-records) | 值 1：198 条 | 示例: `1` |
| 36 | `create_time` | string | [`create_time`](#ods-platform-coupon-redemption-records) | 验券记录在本系统中创建的时间（记录入库时间） | 枚举值: `2026-02-13 22:59:56`, `2026-02-13 22:15:53`, `2026-02-13 22:05:41`, `2026-02-13 22:04:53`, `2026-02-13 21:55:23`, `2026-02-13 21:24:04`, `2026-02-13 21:17:08`, `2026-02-13 21:16:00` |
| 37 | `is_delete` | integer | [`is_delete`](#ods-platform-coupon-redemption-records) | 把平台验券记录挂到本门店的一条订单上 | 示例: `0` |
| 38 | `coupon_name` | string | [`coupon_name`](#ods-platform-coupon-redemption-records) | 团购券产品名称（即第三方平台上向顾客展示的名称） | 枚举值: `【全天可用】中八桌球一小时（大厅A区）`, `【全天可用】中八桌球两小时（A区）`, `【全天可用】斯诺克一小时`, `【全天可用】斯诺克两小时`, `【全天可用】中八桌球两小时（B区）`, `【全天可用】B区桌球一小时`, `【全天可用】麻将、掼蛋包厢四小时`, `1小时中八台球\|【新年特惠】（A区）` |
| 39 | `coupon_cover` | string | [`coupon_cover`](#ods-platform-coupon-redemption-records) | 来自 JSON 导出的原始字段，用于保留业务取值 |  |
| 40 | `coupon_remark` | string | [`coupon_remark`](#ods-platform-coupon-redemption-records) | 来自 JSON 导出的原始字段，用于保留业务取值 |  |
| 41 | `channel_deal_id` | integer | [`channel_deal_id`](#ods-platform-coupon-redemption-records) | 渠道侧 dealId / 产品 ID，一般是第三方平台给该团购商品定义的主键 | 枚举值: `1128411555`, `1130465371`, `1147633733`, `1130443985`, `1137872168`, `1370841337`, `1134269810`, `1203035334` |
| 42 | `group_package_id` | integer | [`group_package_id`](#ods-platform-coupon-redemption-records) | 标识类 ID 字段，用于关联/定位相关实体 | 示例: `0` |
| 43 | `consume_time` | string | [`consume_time`](#ods-platform-coupon-redemption-records) | 券被核销/使用的业务时间 | 枚举值: `2026-02-13 22:59:56`, `2026-02-13 22:15:54`, `2026-02-13 22:05:41`, `2026-02-13 22:04:54`, `2026-02-13 21:55:24`, `2026-02-13 21:24:05`, `2026-02-13 21:17:08`, `2026-02-13 21:16:01` |
| 44 | `groupon_type` | integer | [`groupon_type`](#ods-platform-coupon-redemption-records) | 团购券类型 | 示例: `1` |
| 45 | `coupon_money` | number | [`coupon_money`](#ods-platform-coupon-redemption-records) | 券面值 / 套餐价值（系统层面的“可抵扣金额或对应套餐价值”） | 枚举值: `48.0`, `96.0`, `68.0`, `136.0`, `116.0`, `58.0`, `288.0` |
| 46 | `operator_id` | integer | [`operator_id`](#ods-platform-coupon-redemption-records) | 操作员 ID（执行验券操作的收银员/员工） | 示例: `2790687322443013` |
| 47 | `operator_name` | string | [`operator_name`](#ods-platform-coupon-redemption-records) | 操作员姓名，例如 "收银员:郑丽珊" | 示例: `收银员:郑丽珊` |
| 48 | `table_id` | integer | [`table_id`](#ods-platform-coupon-redemption-records) | 使用券的球台 ID | 枚举值: `2793001904918661`, `2793003506815045`, `2791964216463493`, `2793020260044869`, `2793003705192517`, `2792521437958213`, `2793001695301765`, `2793002509209733` |
| 49 | `certificate_id` | string | [`certificate_id`](#ods-platform-coupon-redemption-records) | 平台侧的凭证 ID（通常由第三方团购平台生成的券实例 ID） | 枚举值: `5017032752860339573`, `5017032752444438459`, `5017032752542324772`, `5017032752441028251`, `5017032751805056410`, `5017032751601072902`, `5017032751448614451`, `5017032751498902695` |
| 50 | `verify_id` | string | [`verify_id`](#ods-platform-coupon-redemption-records) | 平台核销记录 ID（某些平台会为每一次核销生成一个唯一 ID） |  |
| 51 | `deal_id` | integer | [`deal_id`](#ods-platform-coupon-redemption-records) | 另一个层次的团购产品 ID | 枚举值: `1345108507`, `1346103574`, `1350374807`, `1346105245`, `1347938899`, `1398374101`, `1347146296`, `1364921087` |

<a id="ods-platform-coupon-redemption-records"></a>

#### ODS 表结构 — ods.platform_coupon_redemption_records [🔗 API](#api-platform-coupon-redemption-records)

共 31 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`siteProfile.id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.platform_coupon_redemption_id`](#dwd-dwd-platform-coupon-redemption), [`dwd_platform_coupon_redemption_ex.platform_coupon_redemption_id`](#dwd-dwd-platform-coupon-redemption-ex) | 本条平台验券记录在本系统内的主键 ID |
| 2 | `verify_id` | bigint | [`verify_id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.verify_id`](#dwd-dwd-platform-coupon-redemption) | 平台核销记录 ID（某些平台会为每一次核销生成一个唯一 ID） |
| 3 | `certificate_id` | text | [`certificate_id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.certificate_id`](#dwd-dwd-platform-coupon-redemption) | 平台侧的凭证 ID（通常由第三方团购平台生成的券实例 ID） |
| 4 | `coupon_code` | text | [`coupon_code`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.coupon_code`](#dwd-dwd-platform-coupon-redemption) | 券码，顾客出示的团购券密码/编号 |
| 5 | `coupon_name` | text | [`coupon_name`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.coupon_name`](#dwd-dwd-platform-coupon-redemption) | 团购券产品名称（即第三方平台上向顾客展示的名称） |
| 6 | `coupon_channel` | integer | [`coupon_channel`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.coupon_channel`](#dwd-dwd-platform-coupon-redemption) | 券来源渠道（第三方平台渠道编号） |
| 7 | `groupon_type` | integer | [`groupon_type`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption_ex.groupon_type`](#dwd-dwd-platform-coupon-redemption-ex) | 团购券类型 |
| 8 | `group_package_id` | bigint | [`group_package_id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.group_package_id`](#dwd-dwd-platform-coupon-redemption) | 标识类 ID 字段，用于关联/定位相关实体 |
| 9 | `sale_price` | numeric | [`sale_price`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.sale_price`](#dwd-dwd-platform-coupon-redemption) | 顾客在第三方平台上实际支付的价格（团购售价） |
| 10 | `coupon_money` | numeric | [`coupon_money`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.coupon_money`](#dwd-dwd-platform-coupon-redemption) | 券面值 / 套餐价值（系统层面的“可抵扣金额或对应套餐价值”） |
| 11 | `coupon_free_time` | numeric | [`coupon_free_time`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.coupon_free_time`](#dwd-dwd-platform-coupon-redemption) | 券附带的“免费时长”字段（例如送多少分钟台费） |
| 12 | `coupon_cover` | text | [`coupon_cover`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption_ex.coupon_cover`](#dwd-dwd-platform-coupon-redemption-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 13 | `coupon_remark` | text | [`coupon_remark`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption_ex.coupon_remark`](#dwd-dwd-platform-coupon-redemption-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 14 | `use_status` | integer | [`use_status`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.use_status`](#dwd-dwd-platform-coupon-redemption) | 值 1：198 条 |
| 15 | `consume_time` | timestamp without time zone | [`consume_time`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.consume_time`](#dwd-dwd-platform-coupon-redemption) | 券被核销/使用的业务时间 |
| 16 | `create_time` | timestamp without time zone | [`create_time`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.create_time`](#dwd-dwd-platform-coupon-redemption) | 验券记录在本系统中创建的时间（记录入库时间） |
| 17 | `deal_id` | text | [`deal_id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.deal_id`](#dwd-dwd-platform-coupon-redemption) | 另一个层次的团购产品 ID |
| 18 | `channel_deal_id` | text | [`channel_deal_id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.channel_deal_id`](#dwd-dwd-platform-coupon-redemption) | 渠道侧 dealId / 产品 ID，一般是第三方平台给该团购商品定义的主键 |
| 19 | `site_id` | bigint | [`site_id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.site_id`](#dwd-dwd-platform-coupon-redemption) | 门店 ID |
| 20 | `site_order_id` | bigint | [`site_order_id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.site_order_id`](#dwd-dwd-platform-coupon-redemption) | 门店内部的订单 ID（平台券核销时对应的店内订单） |
| 21 | `table_id` | bigint | [`table_id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.table_id`](#dwd-dwd-platform-coupon-redemption) | 使用券的球台 ID |
| 22 | `tenant_id` | bigint | [`siteProfile.tenant_id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.tenant_id`](#dwd-dwd-platform-coupon-redemption) | 商户/租户 ID（品牌级别） |
| 23 | `operator_id` | bigint | [`operator_id`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption_ex.operator_id`](#dwd-dwd-platform-coupon-redemption-ex) | 操作员 ID（执行验券操作的收银员/员工） |
| 24 | `operator_name` | text | [`operator_name`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption_ex.operator_name`](#dwd-dwd-platform-coupon-redemption-ex) | 操作员姓名，例如 "收银员:郑丽珊" |
| 25 | `is_delete` | integer | [`is_delete`](#api-platform-coupon-redemption-records) | [`dwd_platform_coupon_redemption.is_delete`](#dwd-dwd-platform-coupon-redemption) | 把平台验券记录挂到本门店的一条订单上 |
| 26 | `siteprofile` | jsonb | — | — | （待补充） |
| 27 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 28 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 29 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 30 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 31 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dwd-platform-coupon-redemption"></a>

#### DWD 表结构 — dwd.dwd_platform_coupon_redemption [🔗 ODS](#ods-platform-coupon-redemption-records)

共 20 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `platform_coupon_redemption_id` | bigint | [`id`](#ods-platform-coupon-redemption-records) | 直接 | 核销 ID |
| 2 | `tenant_id` | bigint | [`tenant_id`](#ods-platform-coupon-redemption-records) | 直接 | 租户 ID |
| 3 | `site_id` | bigint | [`site_id`](#ods-platform-coupon-redemption-records) | 直接 | 门店 ID |
| 4 | `coupon_code` | character varying | [`coupon_code`](#ods-platform-coupon-redemption-records) | 直接 | 券码 |
| 5 | `coupon_channel` | integer | [`coupon_channel`](#ods-platform-coupon-redemption-records) | 直接 | 券渠道。**枚举值**: 1=美团, 2=抖音 |
| 6 | `coupon_name` | character varying | [`coupon_name`](#ods-platform-coupon-redemption-records) | 直接 | 券名称。**样本值**: "【全天可用】中八桌球一小时（A区）", "【全天可用】中八桌球两小时（A区）" 等 |
| 7 | `sale_price` | numeric | [`sale_price`](#ods-platform-coupon-redemption-records) | 直接 | 售卖价（元）。**样本值**: 29.90, 69.90, 59.90, 39.90, 19.90 等 |
| 8 | `coupon_money` | numeric | [`coupon_money`](#ods-platform-coupon-redemption-records) | 直接 | 券面额（元）。**样本值**: 48.00, 96.00, 116.00, 68.00 等 |
| 9 | `coupon_free_time` | integer | [`coupon_free_time`](#ods-platform-coupon-redemption-records) | 直接 | 券赠送时长（当前数据全为 0） |
| 10 | `channel_deal_id` | bigint | [`channel_deal_id`](#ods-platform-coupon-redemption-records) | 直接 | 渠道交易 ID |
| 11 | `deal_id` | bigint | [`deal_id`](#ods-platform-coupon-redemption-records) | 直接 | 交易 ID |
| 12 | `group_package_id` | bigint | [`group_package_id`](#ods-platform-coupon-redemption-records) | 直接 | 团购套餐 ID（当前数据全为 0） |
| 13 | `site_order_id` | bigint | [`site_order_id`](#ods-platform-coupon-redemption-records) | 直接 | 门店订单 ID |
| 14 | `table_id` | bigint | [`table_id`](#ods-platform-coupon-redemption-records) | 直接 | 台桌 ID → dim_table |
| 15 | `certificate_id` | character varying | [`certificate_id`](#ods-platform-coupon-redemption-records) | 直接 | 凭证 ID |
| 16 | `verify_id` | character varying | [`verify_id`](#ods-platform-coupon-redemption-records) | 直接 | 核验 ID（仅抖音券有值） |
| 17 | `use_status` | integer | [`use_status`](#ods-platform-coupon-redemption-records) | 直接 | 使用状态。**枚举值**: 1=已使用, 2=已撤销 |
| 18 | `is_delete` | integer | [`is_delete`](#ods-platform-coupon-redemption-records) | 直接 | 删除标记。**枚举值**: 0=未删除 |
| 19 | `create_time` | timestamp with time zone | [`create_time`](#ods-platform-coupon-redemption-records) | 直接 | 创建时间 |
| 20 | `consume_time` | timestamp with time zone | [`consume_time`](#ods-platform-coupon-redemption-records) | 直接 | 核销时间 |

<a id="dwd-dwd-platform-coupon-redemption-ex"></a>

#### DWD 表结构 — dwd.dwd_platform_coupon_redemption_ex [🔗 ODS](#ods-platform-coupon-redemption-records)

共 6 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `platform_coupon_redemption_id` | bigint | [`id`](#ods-platform-coupon-redemption-records) | 直接 | 字段重命名 |
| 2 | `coupon_cover` | character varying | [`coupon_cover`](#ods-platform-coupon-redemption-records) | 直接 | 明细字段，用于记录事实取值 |
| 3 | `coupon_remark` | character varying | [`coupon_remark`](#ods-platform-coupon-redemption-records) | 直接 | 同名直传 |
| 4 | `groupon_type` | integer | [`groupon_type`](#ods-platform-coupon-redemption-records) | 直接 | 同名直传 |
| 5 | `operator_id` | bigint | [`operator_id`](#ods-platform-coupon-redemption-records) | 直接 | 同名直传 |
| 6 | `operator_name` | character varying | [`operator_name`](#ods-platform-coupon-redemption-records) | 直接 | 同名直传 |

### 3.10 member_profiles（会员档案）

- 任务代码：`ODS_MEMBER`
- 采样记录数：200
- API JSON 字段数：20
- ODS 列数：25
- DWD 目标表：dim_member, dim_member_ex

<a id="api-member-profiles"></a>

#### API 源字段 — member_profiles [🔗 ODS](#ods-member-profiles)

已映射 20/20，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `id` | integer | [`id`](#ods-member-profiles) | 这是“租户内会员账户”的主键 ID | 枚举值: `3085176958944837`, `3066773303512389`, `3062388521698821`, `3055176918828421`, `3054195561631109`, `3052749341853317`, `3048238811858693`, `3043883848157381` |
| 2 | `create_time` | string | [`create_time`](#ods-member-profiles) | 会员账户的创建时间（即这条档案/这张卡在系统中被创建的时间） | 枚举值: `2026-02-07 21:04:20`, `2026-01-25 21:03:10`, `2026-01-22 18:42:44`, `2026-01-17 16:26:43`, `2026-01-16 23:48:25`, `2026-01-15 23:17:15`, `2026-01-12 18:48:54`, `2026-01-09 16:58:48` |
| 3 | `member_card_grade_code` | integer | [`member_card_grade_code`](#ods-member-profiles) | 这两个字段是成对出现的：一个数值码，一个中文名称 | 枚举值: `2790683528022856`, `2790683528022853`, `2790683528022855`, `2790683528022857` |
| 4 | `mobile` | string | [`mobile`](#ods-member-profiles) | 会员绑定的手机号码 | 枚举值: `13728281927`, `17306741548`, `13332883280`, `18898887676`, `15902048888`, `13434273425`, `15815818028`, `15146102616` |
| 5 | `nickname` | string | [`nickname`](#ods-member-profiles) | 会员在当前租户下的显示名称（可以是姓名，也可以是昵称） | 枚举值: `黄先生`, `李`, `袁`, `章先生`, `公孙先生`, `孙总`, `胡先生`, `吴先生` |
| 6 | `register_site_id` | integer | [`register_site_id`](#ods-member-profiles) | 会员的注册门店 ID | 示例: `2790685415443269` |
| 7 | `site_name` | string | [`site_name`](#ods-member-profiles) | 注册门店名称，属于冗余字段，用于直接展示 | 示例: `朗朗桌球` |
| 8 | `member_card_grade_name` | string | [`member_card_grade_name`](#ods-member-profiles) | 这是“会员卡种类/等级”的定义字段 | 枚举值: `活动抵用券`, `储值卡`, `台费卡`, `月卡` |
| 9 | `system_member_id` | integer | [`system_member_id`](#ods-member-profiles) | 这是“系统级会员 ID”，在全平台唯一，用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上 | 枚举值: `3085176956307013`, `3066773300268357`, `3062388519667205`, `3055176917108101`, `3054195559402885`, `3052749336856197`, `3048238810220293`, `3043883846568133` |
| 10 | `tenant_id` | integer | [`tenant_id`](#ods-member-profiles) | 租户/品牌 ID | 示例: `2790683160709957` |
| 11 | `referrer_member_id` | integer | [`referrer_member_id`](#ods-member-profiles) | 推荐人会员 ID，用于记录该会员是由哪位老会员推荐 | 示例: `0` |
| 12 | `point` | number | [`point`](#ods-member-profiles) | 当前积分余额（这条会员账户的积分值） | 示例: `0.0` |
| 13 | `user_status` | integer | [`user_status`](#ods-member-profiles) | 用户账号状态（偏“用户逻辑”层面的状态） | 示例: `1` |
| 14 | `status` | integer | [`status`](#ods-member-profiles) | 帐户状态（偏“卡状态/档案状态”） | 枚举值: `1`, `3` |
| 15 | `growth_value` | number | [`growth_value`](#ods-member-profiles) | 成长值 / 经验值，用于会员等级晋升的累计指标 | 示例: `0.0` |
| 16 | `person_tenant_org_id` | integer | [`person_tenant_org_id`](#ods-member-profiles) | 人员租户组织ID | 示例: `0` |
| 17 | `person_tenant_org_name` | string | [`person_tenant_org_name`](#ods-member-profiles) | 人员租户组织名称 |  |
| 18 | `register_source` | integer | [`register_source`](#ods-member-profiles) | 注册来源 | 枚举值: `6`, `1` |
| 19 | `recharge_money_sum` | number | [`recharge_money_sum`](#ods-member-profiles) | 累计充值金额 | 枚举值: `5000.0`, `188.0`, `1000.0`, `3288.0`, `17078.51`, `2176.0`, `6576.0`, `1376.0` |
| 20 | `pay_money_sum` | number | [`pay_money_sum`](#ods-member-profiles) | 累计支付金额 | 枚举值: `-12.79`, `-188.0`, `-203.4`, `-808.51`, `-989.24`, `-17078.51`, `-2064.94`, `-5705.0` |

<a id="ods-member-profiles"></a>

#### ODS 表结构 — ods.member_profiles [🔗 API](#api-member-profiles)

共 25 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `tenant_id` | bigint | [`tenant_id`](#api-member-profiles) | [`dim_member.tenant_id`](#dwd-dim-member) | 租户/品牌 ID |
| 2 | `register_site_id` | bigint | [`register_site_id`](#api-member-profiles) | [`dim_member.register_site_id`](#dwd-dim-member) | 会员的注册门店 ID |
| 3 | `site_name` | text | [`site_name`](#api-member-profiles) | [`dim_member_ex.register_site_name`](#dwd-dim-member-ex) | 注册门店名称，属于冗余字段，用于直接展示 |
| 4 | `id` | bigint | [`id`](#api-member-profiles) | [`dim_member.member_id`](#dwd-dim-member), [`dim_member_ex.member_id`](#dwd-dim-member-ex) | 这是“租户内会员账户”的主键 ID |
| 5 | `system_member_id` | bigint | [`system_member_id`](#api-member-profiles) | [`dim_member.system_member_id`](#dwd-dim-member) | 这是“系统级会员 ID”，在全平台唯一，用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上 |
| 6 | `member_card_grade_code` | bigint | [`member_card_grade_code`](#api-member-profiles) | [`dim_member.member_card_grade_code`](#dwd-dim-member) | 这两个字段是成对出现的：一个数值码，一个中文名称 |
| 7 | `member_card_grade_name` | text | [`member_card_grade_name`](#api-member-profiles) | [`dim_member.member_card_grade_name`](#dwd-dim-member) | 这是“会员卡种类/等级”的定义字段 |
| 8 | `mobile` | text | [`mobile`](#api-member-profiles) | [`dim_member.mobile`](#dwd-dim-member) | 会员绑定的手机号码 |
| 9 | `nickname` | text | [`nickname`](#api-member-profiles) | [`dim_member.nickname`](#dwd-dim-member) | 会员在当前租户下的显示名称（可以是姓名，也可以是昵称） |
| 10 | `point` | numeric | [`point`](#api-member-profiles) | [`dim_member_ex.point`](#dwd-dim-member-ex) | 当前积分余额（这条会员账户的积分值） |
| 11 | `growth_value` | numeric | [`growth_value`](#api-member-profiles) | [`dim_member_ex.growth_value`](#dwd-dim-member-ex) | 成长值 / 经验值，用于会员等级晋升的累计指标 |
| 12 | `referrer_member_id` | bigint | [`referrer_member_id`](#api-member-profiles) | [`dim_member_ex.referrer_member_id`](#dwd-dim-member-ex) | 推荐人会员 ID，用于记录该会员是由哪位老会员推荐 |
| 13 | `status` | integer | [`status`](#api-member-profiles) | [`dim_member_ex.status`](#dwd-dim-member-ex) | 帐户状态（偏“卡状态/档案状态”） |
| 14 | `user_status` | integer | [`user_status`](#api-member-profiles) | [`dim_member_ex.user_status`](#dwd-dim-member-ex) | 用户账号状态（偏“用户逻辑”层面的状态） |
| 15 | `create_time` | timestamp without time zone | [`create_time`](#api-member-profiles) | [`dim_member.create_time`](#dwd-dim-member) | 会员账户的创建时间（即这条档案/这张卡在系统中被创建的时间） |
| 16 | `pay_money_sum` | numeric | [`pay_money_sum`](#api-member-profiles) | [`dim_member.pay_money_sum`](#dwd-dim-member) | 累计支付金额 |
| 17 | `person_tenant_org_id` | bigint | [`person_tenant_org_id`](#api-member-profiles) | [`dim_member_ex.person_tenant_org_id`](#dwd-dim-member-ex) | 人员租户组织ID |
| 18 | `person_tenant_org_name` | text | [`person_tenant_org_name`](#api-member-profiles) | [`dim_member_ex.person_tenant_org_name`](#dwd-dim-member-ex) | 人员租户组织名称 |
| 19 | `recharge_money_sum` | numeric | [`recharge_money_sum`](#api-member-profiles) | [`dim_member.recharge_money_sum`](#dwd-dim-member) | 累计充值金额 |
| 20 | `register_source` | text | [`register_source`](#api-member-profiles) | [`dim_member_ex.register_source`](#dwd-dim-member-ex) | 注册来源 |
| 21 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 22 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 23 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 24 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 25 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dim-member"></a>

#### DWD 表结构 — dwd.dim_member [🔗 ODS](#ods-member-profiles)

共 16 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `member_id` | bigint | [`id`](#ods-member-profiles) | 直接 | 租户内会员 ID（tenant_member_id） |
| 2 | `system_member_id` | bigint | [`system_member_id`](#ods-member-profiles) | 直接 | 系统级会员 ID |
| 3 | `tenant_id` | bigint | [`tenant_id`](#ods-member-profiles) | 直接 | 租户 ID（当前值: 2790683160709957） |
| 4 | `register_site_id` | bigint | [`register_site_id`](#ods-member-profiles) | 直接 | 注册门店 ID → dim_site（当前值: 2790685415443269） |
| 5 | `mobile` | text | [`mobile`](#ods-member-profiles) | 直接 | 手机号码 |
| 6 | `nickname` | text | [`nickname`](#ods-member-profiles) | 直接 | 昵称。**样本值**: "陈先生", "张先生", "李先生",等 |
| 7 | `member_card_grade_code` | bigint | [`member_card_grade_code`](#ods-member-profiles) | 直接 | 卡等级代码 |
| 8 | `member_card_grade_name` | text | [`member_card_grade_name`](#ods-member-profiles) | 直接 | 卡等级名称。**枚举值**: "储值卡", "台费卡", "年卡", "活动抵用券", "月卡" |
| 9 | `create_time` | timestamp with time zone | [`create_time`](#ods-member-profiles) | 直接 | 创建时间 |
| 10 | `update_time` | timestamp with time zone | — | — | 更新时间 |
| 11 | `pay_money_sum` | numeric | [`pay_money_sum`](#ods-member-profiles) | 直接 | 累计支付金额 |
| 12 | `recharge_money_sum` | numeric | [`recharge_money_sum`](#ods-member-profiles) | 直接 | 累计充值金额 |
| 13 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 版本生效时间 |
| 14 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 版本失效时间 |
| 15 | `scd2_is_current` | integer | — | SCD2 | 当前版本标记 |
| 16 | `scd2_version` | integer | — | SCD2 | 版本号 |

<a id="dwd-dim-member-ex"></a>

#### DWD 表结构 — dwd.dim_member_ex [🔗 ODS](#ods-member-profiles)

共 14 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `member_id` | bigint | [`id`](#ods-member-profiles) | 直接 | 字段重命名 |
| 2 | `referrer_member_id` | bigint | [`referrer_member_id`](#ods-member-profiles) | 直接 | 同名直传 |
| 3 | `point` | numeric | [`point`](#ods-member-profiles) | 直接 | 同名直传 |
| 4 | `register_site_name` | text | [`site_name`](#ods-member-profiles) | 直接 | 字段重命名 |
| 5 | `growth_value` | numeric | [`growth_value`](#ods-member-profiles) | 直接 | 同名直传 |
| 6 | `user_status` | integer | [`user_status`](#ods-member-profiles) | 直接 | 同名直传 |
| 7 | `status` | integer | [`status`](#ods-member-profiles) | 直接 | 同名直传 |
| 8 | `person_tenant_org_id` | bigint | [`person_tenant_org_id`](#ods-member-profiles) | 直接 |  |
| 9 | `person_tenant_org_name` | text | [`person_tenant_org_name`](#ods-member-profiles) | 直接 |  |
| 10 | `register_source` | text | [`register_source`](#ods-member-profiles) | 直接 |  |
| 11 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 12 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 13 | `scd2_is_current` | integer | — | SCD2 | SCD2 元数据 |
| 14 | `scd2_version` | integer | — | SCD2 | SCD2 元数据 |

### 3.11 member_stored_value_cards（会员储值卡）

- 任务代码：`ODS_MEMBER_CARD`
- 采样记录数：200
- API JSON 字段数：71
- ODS 列数：80
- DWD 目标表：dim_member_card_account, dim_member_card_account_ex

<a id="api-member-stored-value-cards"></a>

#### API 源字段 — member_stored_value_cards [🔗 ODS](#ods-member-stored-value-cards)

已映射 71/71，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `site_name` | string | [`site_name`](#ods-member-stored-value-cards) | 卡归属门店名称（视图中的展示字段） | 示例: `朗朗桌球` |
| 2 | `member_name` | string | [`member_name`](#ods-member-stored-value-cards) | 持卡会员姓名快照 | 出现率 98%；枚举值: `黄先生`, `李`, `袁`, `章先生`, `公孙先生`, `孙总`, `胡先生`, `吴先生` |
| 3 | `member_mobile` | string | [`member_mobile`](#ods-member-stored-value-cards) | 持卡会员手机号快照 | 出现率 98%；枚举值: `13728281927`, `17306741548`, `13332883280`, `15726865555`, `18898887676`, `15902048888`, `13434273425`, `15815818028` |
| 4 | `member_card_type_name` | string | [`member_card_type_name`](#ods-member-stored-value-cards) | 卡类型名称，实际与 member_card_grade_code_name 一致 | 枚举值: `活动抵用券`, `储值卡`, `台费卡`, `月卡`, `酒水卡` |
| 5 | `table_service_discount` | number | [`table_service_discount`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `10.0` |
| 6 | `assistant_service_discount` | number | [`assistant_service_discount`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `10.0` |
| 7 | `coupon_discount` | number | [`coupon_discount`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `10.0` |
| 8 | `goods_service_discount` | number | [`goods_service_discount`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `10.0` |
| 9 | `electricity_discount` | number | [`electricity_discount`](#ods-member-stored-value-cards) | 电费折扣 | 示例: `10.0` |
| 10 | `is_allow_give` | integer | [`is_allow_give`](#ods-member-stored-value-cards) | 是否允许转赠/转让给其他会员 | 示例: `0` |
| 11 | `able_cross_site` | integer | [`able_cross_site`](#ods-member-stored-value-cards) | 是否允许跨店使用 | 示例: `1` |
| 12 | `cardSettleDeduct` | number | [`cardsettlededuct`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配；示例: `0.0` |
| 13 | `tenantAvatar` | string | [`tenantavatar`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配 |
| 14 | `tenantName` | string | [`tenantname`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配 |
| 15 | `member_card_grade_code_name` | string | [`member_card_grade_code_name`](#ods-member-stored-value-cards) | 卡等级/卡类名称 | 枚举值: `活动抵用券`, `储值卡`, `台费卡`, `月卡`, `酒水卡` |
| 16 | `table_discount_sub_switch` | integer | [`table_discount_sub_switch`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `2` |
| 17 | `goods_discount_sub_switch` | integer | [`goods_discount_sub_switch`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `2` |
| 18 | `assistant_discount_sub_switch` | integer | [`assistant_discount_sub_switch`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `2` |
| 19 | `assistant_reward_discount_sub_switch` | integer | [`assistant_reward_discount_sub_switch`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `2` |
| 20 | `goods_discount_range_type` | integer | [`goods_discount_range_type`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `1` |
| 21 | `use_scene` | string | [`use_scene`](#ods-member-stored-value-cards) | 卡使用场景说明（比如“仅店内使用”“仅团建”等），本门店尚未使用此字段 |  |
| 22 | `balance` | number | [`balance`](#ods-member-stored-value-cards) | 当前卡内余额（主要针对储值卡、部分券卡） | 枚举值: `4987.21`, `0.0`, `796.6`, `88.0`, `2479.49`, `2298.76`, `111.06`, `871.0` |
| 23 | `table_deduct_radio` | number | [`table_deduct_radio`](#ods-member-stored-value-cards) | 金额字段，用于计费/结算/分摊等金额计算 | 示例: `100.0` |
| 24 | `table_service_deduct_radio` | number | [`table_service_deduct_radio`](#ods-member-stored-value-cards) | 金额字段，用于计费/结算/分摊等金额计算 | 示例: `100.0` |
| 25 | `goods_deduct_radio` | number | [`goods_deduct_radio`](#ods-member-stored-value-cards) | 金额字段，用于计费/结算/分摊等金额计算 | 示例: `100.0` |
| 26 | `goods_service_deduct_radio` | number | [`goods_service_deduct_radio`](#ods-member-stored-value-cards) | 金额字段，用于计费/结算/分摊等金额计算 | 示例: `100.0` |
| 27 | `assistant_deduct_radio` | number | [`assistant_deduct_radio`](#ods-member-stored-value-cards) | 金额字段，用于计费/结算/分摊等金额计算 | 示例: `100.0` |
| 28 | `assistant_service_deduct_radio` | number | [`assistant_service_deduct_radio`](#ods-member-stored-value-cards) | 金额字段，用于计费/结算/分摊等金额计算 | 示例: `100.0` |
| 29 | `assistant_reward_deduct_radio` | number | [`assistant_reward_deduct_radio`](#ods-member-stored-value-cards) | 金额字段，用于计费/结算/分摊等金额计算 | 示例: `100.0` |
| 30 | `coupon_deduct_radio` | number | [`coupon_deduct_radio`](#ods-member-stored-value-cards) | 金额字段，用于计费/结算/分摊等金额计算 | 示例: `100.0` |
| 31 | `electricity_deduct_radio` | number | [`electricity_deduct_radio`](#ods-member-stored-value-cards) | 电费扣减比例 | 示例: `100.0` |
| 32 | `electricityCardDeduct` | number | [`electricitycarddeduct`](#ods-member-stored-value-cards) | 电费卡扣 | 大小写匹配；示例: `0.0` |
| 33 | `tableCardDeduct` | number | [`tablecarddeduct`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配；示例: `0.0` |
| 34 | `tableServiceCardDeduct` | number | [`tableservicecarddeduct`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配；示例: `0.0` |
| 35 | `goodsCarDeduct` | number | [`goodscardeduct`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配；示例: `0.0` |
| 36 | `goodsServiceCardDeduct` | number | [`goodsservicecarddeduct`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配；示例: `0.0` |
| 37 | `assistantCardDeduct` | number | [`assistantcarddeduct`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配；示例: `0.0` |
| 38 | `assistantServiceCardDeduct` | number | [`assistantservicecarddeduct`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配；示例: `0.0` |
| 39 | `assistantRewardCardDeduct` | number | [`assistantrewardcarddeduct`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配；示例: `0.0` |
| 40 | `couponCardDeduct` | number | [`couponcarddeduct`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配；示例: `0.0` |
| 41 | `deliveryFeeDeduct` | number | [`deliveryfeededuct`](#ods-member-stored-value-cards) | （待补充） | 大小写匹配；示例: `0.0` |
| 42 | `is_allow_order_deduct` | integer | [`is_allow_order_deduct`](#ods-member-stored-value-cards) | 是否允许在“订单层面统一扣款” | 示例: `0` |
| 43 | `member_grade` | integer | [`member_grade`](#ods-member-stored-value-cards) | 会员等级 | 枚举值: `2790683528022856`, `2790683528022853`, `2790683528022855`, `2790683528022857`, `0`, `2790683528022854` |
| 44 | `able_share_member_discount` | integer | [`able_share_member_discount`](#ods-member-stored-value-cards) | 是否可共享会员折扣 | 示例: `1` |
| 45 | `rechargeFreezeBalance` | number | [`rechargefreezebalance`](#ods-member-stored-value-cards) | 充值冻结余额 | 大小写匹配；示例: `0.0` |
| 46 | `id` | integer | [`id`](#ods-member-stored-value-cards) | 本表主键 ID，用于唯一标识一条记录 | 枚举值: `3085176959321669`, `3066773307755845`, `3062388522452485`, `3055567606646661`, `3055177241628037`, `3055176919745925`, `3054195913755845`, `3054195562007941` |
| 47 | `assistant_discount` | number | [`assistant_discount`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `10.0` |
| 48 | `assistant_reward_discount` | number | [`assistant_reward_discount`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `10.0` |
| 49 | `bind_password` | string | [`bind_password`](#ods-member-stored-value-cards) | 卡绑定密码，用于消费或查询验证（目前未启用） |  |
| 50 | `card_no` | string | [`card_no`](#ods-member-stored-value-cards) | 实体卡物理卡号／条码号 |  |
| 51 | `card_physics_type` | integer | [`card_physics_type`](#ods-member-stored-value-cards) | 物理卡类型 | 示例: `1` |
| 52 | `card_type_id` | integer | [`card_type_id`](#ods-member-stored-value-cards) | 卡种 ID（定义“这是哪一种卡”） | 枚举值: `2793266846533445`, `2793249295533893`, `2791990152417157`, `2793306611533637`, `2794699703437125` |
| 53 | `create_time` | string | [`create_time`](#ods-member-stored-value-cards) | 卡片创建时间（开卡时间） | 枚举值: `2026-02-07 21:04:20`, `2026-01-25 21:03:10`, `2026-01-22 18:42:44`, `2026-01-17 23:04:08`, `2026-01-17 16:27:02`, `2026-01-17 16:26:43`, `2026-01-16 23:48:47`, `2026-01-16 23:48:25` |
| 54 | `denomination` | number | [`denomination`](#ods-member-stored-value-cards) | 采用“几折”的记法：10=不打折，9=九折，8=八折 | 示例: `0.0` |
| 55 | `disable_end_time` | string | [`disable_end_time`](#ods-member-stored-value-cards) | 停用时间段（比如临时冻结卡的起止时间） | 示例: `0001-01-01 00:00:00` |
| 56 | `disable_start_time` | string | [`disable_start_time`](#ods-member-stored-value-cards) | 停用时间段（比如临时冻结卡的起止时间） | 示例: `0001-01-01 00:00:00` |
| 57 | `effect_site_id` | integer | [`effect_site_id`](#ods-member-stored-value-cards) | 卡片限定生效门店 ID | 示例: `0` |
| 58 | `end_time` | string | [`end_time`](#ods-member-stored-value-cards) | 卡片有效期结束时间 | 枚举值: `2225-01-01 00:00:00`, `2025-12-29 18:36:43`, `2025-11-22 20:00:54`, `2025-10-16 19:04:52`, `2025-10-14 18:55:53`, `2025-08-30 15:31:33` |
| 59 | `goods_discount` | number | [`goods_discount`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `10.0` |
| 60 | `is_delete` | integer | [`is_delete`](#ods-member-stored-value-cards) | 逻辑删除标志 | 示例: `0` |
| 61 | `last_consume_time` | string | [`last_consume_time`](#ods-member-stored-value-cards) | 最近一次消费时间 | 枚举值: `2026-02-11 17:12:24`, `2026-01-28 13:11:46`, `2026-02-02 23:05:28`, `2026-01-17 23:31:05`, `2026-02-06 16:09:21`, `2026-01-28 23:54:57`, `2026-02-01 19:46:39`, `2026-01-20 07:19:17` |
| 62 | `member_card_grade_code` | integer | [`member_card_grade_code`](#ods-member-stored-value-cards) | 卡等级/卡类代码，和下面两个名称字段一一对应 | 枚举值: `2790683528022856`, `2790683528022853`, `2790683528022855`, `2790683528022857`, `2790683528022858` |
| 63 | `principal_balance` | number | [`principal_balance`](#ods-member-stored-value-cards) | 本金余额 | 枚举值: `0.0`, `796.6`, `88.0`, `2479.49`, `2298.76`, `111.06`, `871.0`, `488.77` |
| 64 | `register_site_id` | integer | [`register_site_id`](#ods-member-stored-value-cards) | 卡首次办理的门店 ID | 示例: `2790685415443269` |
| 65 | `sort` | integer | [`sort`](#ods-member-stored-value-cards) | 在前端展示或某些列表中的排序权重 | 示例: `1` |
| 66 | `start_time` | string | [`start_time`](#ods-member-stored-value-cards) | 卡片生效开始时间（有效期起始） | 枚举值: `2026-02-07 21:04:20`, `2026-01-25 21:03:10`, `2026-01-22 18:42:44`, `2026-01-17 23:04:08`, `2026-01-17 16:27:02`, `2026-01-17 16:26:43`, `2026-01-16 23:48:47`, `2026-01-16 23:48:25` |
| 67 | `status` | integer | [`status`](#ods-member-stored-value-cards) | 状态枚举，用于标识记录当前业务状态 | 枚举值: `1`, `4` |
| 68 | `system_member_id` | integer | [`system_member_id`](#ods-member-stored-value-cards) | 系统级会员 ID（跨门店统一主键） | 枚举值: `3085176956307013`, `3066773300268357`, `3062388519667205`, `2799207086114565`, `3055176917108101`, `3054195559402885`, `3052749336856197`, `3048238810220293` |
| 69 | `table_discount` | number | [`table_discount`](#ods-member-stored-value-cards) | 数量/时长字段，用于统计与计量 | 示例: `10.0` |
| 70 | `tenant_id` | integer | [`tenant_id`](#ods-member-stored-value-cards) | 租户/品牌 ID，与其他 JSON 中 tenant_id 一致 | 示例: `2790683160709957` |
| 71 | `tenant_member_id` | integer | [`tenant_member_id`](#ods-member-stored-value-cards) | 当前商户（品牌/租户）中会员的主键 ID | 枚举值: `3085176958944837`, `3066773303512389`, `3062388521698821`, `2799207087163141`, `3055176918828421`, `3054195561631109`, `3052749341853317`, `3048238811858693` |

<a id="ods-member-stored-value-cards"></a>

#### ODS 表结构 — ods.member_stored_value_cards [🔗 API](#api-member-stored-value-cards)

共 80 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `tenant_id` | bigint | [`tenant_id`](#api-member-stored-value-cards) | [`dim_member_card_account.tenant_id`](#dwd-dim-member-card-account) | 租户/品牌 ID，与其他 JSON 中 tenant_id 一致 |
| 2 | `tenant_member_id` | bigint | [`tenant_member_id`](#api-member-stored-value-cards) | [`dim_member_card_account.tenant_member_id`](#dwd-dim-member-card-account) | 当前商户（品牌/租户）中会员的主键 ID |
| 3 | `system_member_id` | bigint | [`system_member_id`](#api-member-stored-value-cards) | [`dim_member_card_account.system_member_id`](#dwd-dim-member-card-account) | 系统级会员 ID（跨门店统一主键） |
| 4 | `register_site_id` | bigint | [`register_site_id`](#api-member-stored-value-cards) | [`dim_member_card_account.register_site_id`](#dwd-dim-member-card-account) | 卡首次办理的门店 ID |
| 5 | `site_name` | text | [`site_name`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.site_name`](#dwd-dim-member-card-account-ex) | 卡归属门店名称（视图中的展示字段） |
| 6 | `id` | bigint | [`id`](#api-member-stored-value-cards) | [`dim_member_card_account.member_card_id`](#dwd-dim-member-card-account), [`dim_member_card_account_ex.member_card_id`](#dwd-dim-member-card-account-ex) | 本表主键 ID，用于唯一标识一条记录 |
| 7 | `member_card_grade_code` | bigint | [`member_card_grade_code`](#api-member-stored-value-cards) | [`dim_member_card_account.member_card_grade_code`](#dwd-dim-member-card-account) | 卡等级/卡类代码，和下面两个名称字段一一对应 |
| 8 | `member_card_grade_code_name` | text | [`member_card_grade_code_name`](#api-member-stored-value-cards) | [`dim_member_card_account.member_card_grade_code_name`](#dwd-dim-member-card-account) | 卡等级/卡类名称 |
| 9 | `member_card_type_name` | text | [`member_card_type_name`](#api-member-stored-value-cards) | [`dim_member_card_account.member_card_type_name`](#dwd-dim-member-card-account) | 卡类型名称，实际与 member_card_grade_code_name 一致 |
| 10 | `member_name` | text | [`member_name`](#api-member-stored-value-cards) | [`dim_member_card_account.member_name`](#dwd-dim-member-card-account) | 持卡会员姓名快照 |
| 11 | `member_mobile` | text | [`member_mobile`](#api-member-stored-value-cards) | [`dim_member_card_account.member_mobile`](#dwd-dim-member-card-account) | 持卡会员手机号快照 |
| 12 | `card_type_id` | bigint | [`card_type_id`](#api-member-stored-value-cards) | [`dim_member_card_account.card_type_id`](#dwd-dim-member-card-account) | 卡种 ID（定义“这是哪一种卡”） |
| 13 | `card_no` | text | [`card_no`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.card_no`](#dwd-dim-member-card-account-ex) | 实体卡物理卡号／条码号 |
| 14 | `card_physics_type` | text | [`card_physics_type`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.card_physics_type`](#dwd-dim-member-card-account-ex) | 物理卡类型 |
| 15 | `balance` | numeric | [`balance`](#api-member-stored-value-cards) | [`dim_member_card_account.balance`](#dwd-dim-member-card-account) | 当前卡内余额（主要针对储值卡、部分券卡） |
| 16 | `denomination` | numeric | [`denomination`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.denomination`](#dwd-dim-member-card-account-ex) | 采用“几折”的记法：10=不打折，9=九折，8=八折 |
| 17 | `table_discount` | numeric | [`table_discount`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.table_discount`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 18 | `goods_discount` | numeric | [`goods_discount`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.goods_discount`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 19 | `assistant_discount` | numeric | [`assistant_discount`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistant_discount`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 20 | `assistant_reward_discount` | numeric | [`assistant_reward_discount`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistant_reward_discount`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 21 | `table_service_discount` | numeric | [`table_service_discount`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.table_service_discount`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 22 | `assistant_service_discount` | numeric | [`assistant_service_discount`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistant_service_discount`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 23 | `coupon_discount` | numeric | [`coupon_discount`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.coupon_discount`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 24 | `goods_service_discount` | numeric | [`goods_service_discount`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.goods_service_discount`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 25 | `assistant_discount_sub_switch` | integer | [`assistant_discount_sub_switch`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistant_discount_sub_switch`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 26 | `table_discount_sub_switch` | integer | [`table_discount_sub_switch`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.table_discount_sub_switch`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 27 | `goods_discount_sub_switch` | integer | [`goods_discount_sub_switch`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.goods_discount_sub_switch`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 28 | `assistant_reward_discount_sub_switch` | integer | [`assistant_reward_discount_sub_switch`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistant_reward_discount_sub_switch`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 29 | `table_service_deduct_radio` | numeric | [`table_service_deduct_radio`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.table_service_deduct_radio`](#dwd-dim-member-card-account-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 30 | `assistant_service_deduct_radio` | numeric | [`assistant_service_deduct_radio`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistant_service_deduct_radio`](#dwd-dim-member-card-account-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 31 | `goods_service_deduct_radio` | numeric | [`goods_service_deduct_radio`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.goods_service_deduct_radio`](#dwd-dim-member-card-account-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 32 | `assistant_deduct_radio` | numeric | [`assistant_deduct_radio`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistant_deduct_radio`](#dwd-dim-member-card-account-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 33 | `table_deduct_radio` | numeric | [`table_deduct_radio`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.table_deduct_radio`](#dwd-dim-member-card-account-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 34 | `goods_deduct_radio` | numeric | [`goods_deduct_radio`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.goods_deduct_radio`](#dwd-dim-member-card-account-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 35 | `coupon_deduct_radio` | numeric | [`coupon_deduct_radio`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.coupon_deduct_radio`](#dwd-dim-member-card-account-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 36 | `assistant_reward_deduct_radio` | numeric | [`assistant_reward_deduct_radio`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistant_reward_deduct_radio`](#dwd-dim-member-card-account-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 37 | `tablecarddeduct` | numeric | [`tableCardDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.tablecarddeduct`](#dwd-dim-member-card-account-ex) | （待补充） |
| 38 | `tableservicecarddeduct` | numeric | [`tableServiceCardDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.tableservicecarddeduct`](#dwd-dim-member-card-account-ex) | （待补充） |
| 39 | `goodscardeduct` | numeric | [`goodsCarDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.goodscardeduct`](#dwd-dim-member-card-account-ex) | （待补充） |
| 40 | `goodsservicecarddeduct` | numeric | [`goodsServiceCardDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.goodsservicecarddeduct`](#dwd-dim-member-card-account-ex) | （待补充） |
| 41 | `assistantcarddeduct` | numeric | [`assistantCardDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistantcarddeduct`](#dwd-dim-member-card-account-ex) | （待补充） |
| 42 | `assistantservicecarddeduct` | numeric | [`assistantServiceCardDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistantservicecarddeduct`](#dwd-dim-member-card-account-ex) | （待补充） |
| 43 | `assistantrewardcarddeduct` | numeric | [`assistantRewardCardDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.assistantrewardcarddeduct`](#dwd-dim-member-card-account-ex) | （待补充） |
| 44 | `cardsettlededuct` | numeric | [`cardSettleDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.cardsettlededuct`](#dwd-dim-member-card-account-ex) | （待补充） |
| 45 | `couponcarddeduct` | numeric | [`couponCardDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.couponcarddeduct`](#dwd-dim-member-card-account-ex) | （待补充） |
| 46 | `deliveryfeededuct` | numeric | [`deliveryFeeDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.deliveryfeededuct`](#dwd-dim-member-card-account-ex) | （待补充） |
| 47 | `use_scene` | integer | [`use_scene`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.use_scene`](#dwd-dim-member-card-account-ex) | 卡使用场景说明（比如“仅店内使用”“仅团建”等），本门店尚未使用此字段 |
| 48 | `able_cross_site` | integer | [`able_cross_site`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.able_cross_site`](#dwd-dim-member-card-account-ex) | 是否允许跨店使用 |
| 49 | `is_allow_give` | integer | [`is_allow_give`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.is_allow_give`](#dwd-dim-member-card-account-ex) | 是否允许转赠/转让给其他会员 |
| 50 | `is_allow_order_deduct` | integer | [`is_allow_order_deduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.is_allow_order_deduct`](#dwd-dim-member-card-account-ex) | 是否允许在“订单层面统一扣款” |
| 51 | `is_delete` | integer | [`is_delete`](#api-member-stored-value-cards) | [`dim_member_card_account.is_delete`](#dwd-dim-member-card-account) | 逻辑删除标志 |
| 52 | `bind_password` | text | [`bind_password`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.bind_password`](#dwd-dim-member-card-account-ex) | 卡绑定密码，用于消费或查询验证（目前未启用） |
| 53 | `goods_discount_range_type` | integer | [`goods_discount_range_type`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.goods_discount_range_type`](#dwd-dim-member-card-account-ex) | 数量/时长字段，用于统计与计量 |
| 54 | `goodscategoryid` | bigint | — | [`dim_member_card_account_ex.goodscategoryid`](#dwd-dim-member-card-account-ex) | （待补充） |
| 55 | `tableareaid` | bigint | — | [`dim_member_card_account_ex.tableareaid`](#dwd-dim-member-card-account-ex) | （待补充） |
| 56 | `effect_site_id` | bigint | [`effect_site_id`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.effect_site_id`](#dwd-dim-member-card-account-ex) | 卡片限定生效门店 ID |
| 57 | `start_time` | timestamp without time zone | [`start_time`](#api-member-stored-value-cards) | [`dim_member_card_account.start_time`](#dwd-dim-member-card-account) | 卡片生效开始时间（有效期起始） |
| 58 | `end_time` | timestamp without time zone | [`end_time`](#api-member-stored-value-cards) | [`dim_member_card_account.end_time`](#dwd-dim-member-card-account) | 卡片有效期结束时间 |
| 59 | `disable_start_time` | timestamp without time zone | [`disable_start_time`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.disable_start_time`](#dwd-dim-member-card-account-ex) | 停用时间段（比如临时冻结卡的起止时间） |
| 60 | `disable_end_time` | timestamp without time zone | [`disable_end_time`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.disable_end_time`](#dwd-dim-member-card-account-ex) | 停用时间段（比如临时冻结卡的起止时间） |
| 61 | `last_consume_time` | timestamp without time zone | [`last_consume_time`](#api-member-stored-value-cards) | [`dim_member_card_account.last_consume_time`](#dwd-dim-member-card-account) | 最近一次消费时间 |
| 62 | `create_time` | timestamp without time zone | [`create_time`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.create_time`](#dwd-dim-member-card-account-ex) | 卡片创建时间（开卡时间） |
| 63 | `status` | integer | [`status`](#api-member-stored-value-cards) | [`dim_member_card_account.status`](#dwd-dim-member-card-account) | 状态枚举，用于标识记录当前业务状态 |
| 64 | `sort` | integer | [`sort`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.sort`](#dwd-dim-member-card-account-ex) | 在前端展示或某些列表中的排序权重 |
| 65 | `tenantavatar` | text | [`tenantAvatar`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.tenantavatar`](#dwd-dim-member-card-account-ex) | （待补充） |
| 66 | `tenantname` | text | [`tenantName`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.tenant_name`](#dwd-dim-member-card-account-ex) | （待补充） |
| 67 | `pdassisnatlevel` | text | — | [`dim_member_card_account_ex.pdassisnatlevel`](#dwd-dim-member-card-account-ex) | （待补充） |
| 68 | `cxassisnatlevel` | text | — | [`dim_member_card_account_ex.cxassisnatlevel`](#dwd-dim-member-card-account-ex) | （待补充） |
| 69 | `able_share_member_discount` | boolean | [`able_share_member_discount`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.able_share_member_discount`](#dwd-dim-member-card-account-ex) | 是否可共享会员折扣 |
| 70 | `electricity_deduct_radio` | numeric | [`electricity_deduct_radio`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.electricity_deduct_radio`](#dwd-dim-member-card-account-ex) | 电费扣减比例 |
| 71 | `electricity_discount` | numeric | [`electricity_discount`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.electricity_discount`](#dwd-dim-member-card-account-ex) | 电费折扣 |
| 72 | `electricitycarddeduct` | boolean | [`electricityCardDeduct`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.electricity_card_deduct`](#dwd-dim-member-card-account-ex) | 电费卡扣 |
| 73 | `member_grade` | bigint | [`member_grade`](#api-member-stored-value-cards) | [`dim_member_card_account.member_grade`](#dwd-dim-member-card-account) | 会员等级 |
| 74 | `principal_balance` | numeric | [`principal_balance`](#api-member-stored-value-cards) | [`dim_member_card_account.principal_balance`](#dwd-dim-member-card-account) | 本金余额 |
| 75 | `rechargefreezebalance` | numeric | [`rechargeFreezeBalance`](#api-member-stored-value-cards) | [`dim_member_card_account_ex.recharge_freeze_balance`](#dwd-dim-member-card-account-ex) | 充值冻结余额 |
| 76 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 77 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 78 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 79 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 80 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dim-member-card-account"></a>

#### DWD 表结构 — dwd.dim_member_card_account [🔗 ODS](#ods-member-stored-value-cards)

共 23 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `member_card_id` | bigint | [`id`](#ods-member-stored-value-cards) | 直接 | 会员卡账户 ID |
| 2 | `tenant_id` | bigint | [`tenant_id`](#ods-member-stored-value-cards) | 直接 | 租户 ID |
| 3 | `register_site_id` | bigint | [`register_site_id`](#ods-member-stored-value-cards) | 直接 | 开卡门店 ID → dim_site |
| 4 | `tenant_member_id` | bigint | [`tenant_member_id`](#ods-member-stored-value-cards) | 直接 | 持卡会员 ID → dim_member（0=未绑定会员） |
| 5 | `system_member_id` | bigint | [`system_member_id`](#ods-member-stored-value-cards) | 直接 | 系统级会员 ID |
| 6 | `card_type_id` | bigint | [`card_type_id`](#ods-member-stored-value-cards) | 直接 | 卡种 ID |
| 7 | `member_card_grade_code` | bigint | [`member_card_grade_code`](#ods-member-stored-value-cards) | 直接 | 卡等级代码 |
| 8 | `member_card_grade_code_name` | text | [`member_card_grade_code_name`](#ods-member-stored-value-cards) | 直接 | 卡等级名称。**枚举值**: "储值卡", "台费卡", "活动抵用券", "酒水卡", "月卡", "年卡" |
| 9 | `member_card_type_name` | text | [`member_card_type_name`](#ods-member-stored-value-cards) | 直接 | 卡类型名称（与 grade_code_name 相同） |
| 10 | `member_name` | text | [`member_name`](#ods-member-stored-value-cards) | 直接 | 持卡人姓名快照 |
| 11 | `member_mobile` | text | [`member_mobile`](#ods-member-stored-value-cards) | 直接 | 持卡人手机号快照 |
| 12 | `balance` | numeric | [`balance`](#ods-member-stored-value-cards) | 直接 | 当前余额（元） |
| 13 | `start_time` | timestamp with time zone | [`start_time`](#ods-member-stored-value-cards) | 直接 | 卡生效时间 |
| 14 | `end_time` | timestamp with time zone | [`end_time`](#ods-member-stored-value-cards) | 直接 | 卡失效时间（2225-01-01=长期有效） |
| 15 | `last_consume_time` | timestamp with time zone | [`last_consume_time`](#ods-member-stored-value-cards) | 直接 | 最近消费时间 |
| 16 | `status` | integer | [`status`](#ods-member-stored-value-cards) | 直接 | 卡状态。**枚举值**: 1=正常, 4=过期 |
| 17 | `is_delete` | integer | [`is_delete`](#ods-member-stored-value-cards) | 直接 | 删除标记。**枚举值**: 0=未删除 |
| 18 | `principal_balance` | numeric | [`principal_balance`](#ods-member-stored-value-cards) | 直接 | 本金余额 |
| 19 | `member_grade` | bigint | [`member_grade`](#ods-member-stored-value-cards) | 直接 | 会员等级 |
| 20 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 版本生效时间 |
| 21 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 版本失效时间 |
| 22 | `scd2_is_current` | integer | — | SCD2 | 当前版本标记 |
| 23 | `scd2_version` | integer | — | SCD2 | 版本号 |

<a id="dwd-dim-member-card-account-ex"></a>

#### DWD 表结构 — dwd.dim_member_card_account_ex [🔗 ODS](#ods-member-stored-value-cards)

共 61 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `member_card_id` | bigint | [`id`](#ods-member-stored-value-cards) | 直接 | 字段重命名 |
| 2 | `site_name` | text | [`site_name`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 3 | `tenant_name` | character varying | [`tenantname`](#ods-member-stored-value-cards) | 直接 | 字段重命名 |
| 4 | `tenantavatar` | text | [`tenantavatar`](#ods-member-stored-value-cards) | 直接 | 维度字段，用于补充维度属性 |
| 5 | `effect_site_id` | bigint | [`effect_site_id`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 6 | `able_cross_site` | integer | [`able_cross_site`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 7 | `card_physics_type` | integer | [`card_physics_type`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 8 | `card_no` | text | [`card_no`](#ods-member-stored-value-cards) | 直接 | 维度字段，用于补充维度属性 |
| 9 | `bind_password` | text | [`bind_password`](#ods-member-stored-value-cards) | 直接 | 维度字段，用于补充维度属性 |
| 10 | `use_scene` | text | [`use_scene`](#ods-member-stored-value-cards) | 直接 | 维度字段，用于补充维度属性 |
| 11 | `denomination` | numeric | [`denomination`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 12 | `create_time` | timestamp with time zone | [`create_time`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 13 | `disable_start_time` | timestamp with time zone | [`disable_start_time`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 14 | `disable_end_time` | timestamp with time zone | [`disable_end_time`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 15 | `is_allow_give` | integer | [`is_allow_give`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 16 | `is_allow_order_deduct` | integer | [`is_allow_order_deduct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 17 | `sort` | integer | [`sort`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 18 | `table_discount` | numeric | [`table_discount`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 19 | `goods_discount` | numeric | [`goods_discount`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 20 | `assistant_discount` | numeric | [`assistant_discount`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 21 | `assistant_reward_discount` | numeric | [`assistant_reward_discount`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 22 | `table_service_discount` | numeric | [`table_service_discount`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 23 | `goods_service_discount` | numeric | [`goods_service_discount`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 24 | `assistant_service_discount` | numeric | [`assistant_service_discount`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 25 | `coupon_discount` | numeric | [`coupon_discount`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 26 | `table_discount_sub_switch` | integer | [`table_discount_sub_switch`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 27 | `goods_discount_sub_switch` | integer | [`goods_discount_sub_switch`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 28 | `assistant_discount_sub_switch` | integer | [`assistant_discount_sub_switch`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 29 | `assistant_reward_discount_sub_switch` | integer | [`assistant_reward_discount_sub_switch`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 30 | `goods_discount_range_type` | integer | [`goods_discount_range_type`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 31 | `table_deduct_radio` | numeric | [`table_deduct_radio`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 32 | `goods_deduct_radio` | numeric | [`goods_deduct_radio`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 33 | `assistant_deduct_radio` | numeric | [`assistant_deduct_radio`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 34 | `table_service_deduct_radio` | numeric | [`table_service_deduct_radio`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 35 | `goods_service_deduct_radio` | numeric | [`goods_service_deduct_radio`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 36 | `assistant_service_deduct_radio` | numeric | [`assistant_service_deduct_radio`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 37 | `assistant_reward_deduct_radio` | numeric | [`assistant_reward_deduct_radio`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 38 | `coupon_deduct_radio` | numeric | [`coupon_deduct_radio`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 39 | `cardsettlededuct` | numeric | [`cardsettlededuct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 40 | `tablecarddeduct` | numeric | [`tablecarddeduct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 41 | `tableservicecarddeduct` | numeric | [`tableservicecarddeduct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 42 | `goodscardeduct` | numeric | [`goodscardeduct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 43 | `goodsservicecarddeduct` | numeric | [`goodsservicecarddeduct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 44 | `assistantcarddeduct` | numeric | [`assistantcarddeduct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 45 | `assistantservicecarddeduct` | numeric | [`assistantservicecarddeduct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 46 | `assistantrewardcarddeduct` | numeric | [`assistantrewardcarddeduct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 47 | `couponcarddeduct` | numeric | [`couponcarddeduct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 48 | `deliveryfeededuct` | numeric | [`deliveryfeededuct`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 49 | `tableareaid` | text | [`tableareaid`](#ods-member-stored-value-cards) | 直接 | 维度字段，用于补充维度属性 |
| 50 | `goodscategoryid` | text | [`goodscategoryid`](#ods-member-stored-value-cards) | 直接 | 维度字段，用于补充维度属性 |
| 51 | `pdassisnatlevel` | text | [`pdassisnatlevel`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 52 | `cxassisnatlevel` | text | [`cxassisnatlevel`](#ods-member-stored-value-cards) | 直接 | 同名直传 |
| 53 | `able_share_member_discount` | boolean | [`able_share_member_discount`](#ods-member-stored-value-cards) | → boolean |  |
| 54 | `electricity_deduct_radio` | numeric | [`electricity_deduct_radio`](#ods-member-stored-value-cards) | 直接 |  |
| 55 | `electricity_discount` | numeric | [`electricity_discount`](#ods-member-stored-value-cards) | 直接 |  |
| 56 | `electricity_card_deduct` | boolean | [`electricitycarddeduct`](#ods-member-stored-value-cards) | → boolean | 字段重命名 |
| 57 | `recharge_freeze_balance` | numeric | [`rechargefreezebalance`](#ods-member-stored-value-cards) | 直接 | 字段重命名 |
| 58 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 59 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 60 | `scd2_is_current` | integer | — | SCD2 | SCD2 元数据 |
| 61 | `scd2_version` | integer | — | SCD2 | SCD2 元数据 |

### 3.12 member_balance_changes（会员余额变动）

- 任务代码：`ODS_MEMBER_BALANCE`
- 采样记录数：200
- API JSON 字段数：28
- ODS 列数：33
- DWD 目标表：dwd_member_balance_change, dwd_member_balance_change_ex

<a id="api-member-balance-changes"></a>

#### API 源字段 — member_balance_changes [🔗 ODS](#ods-member-balance-changes)

已映射 28/28，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `memberCardTypeName` | string | [`membercardtypename`](#ods-member-balance-changes) | （待补充） | 大小写匹配；枚举值: `储值卡`, `活动抵用券`, `酒水卡`, `台费卡` |
| 2 | `paySiteName` | string | [`paysitename`](#ods-member-balance-changes) | （待补充） | 大小写匹配；示例: `朗朗桌球` |
| 3 | `registerSiteName` | string | [`registersitename`](#ods-member-balance-changes) | （待补充） | 大小写匹配；示例: `朗朗桌球` |
| 4 | `memberName` | string | [`membername`](#ods-member-balance-changes) | （待补充） | 大小写匹配；枚举值: `罗先生`, `张先生`, `陈先生`, `轩哥`, `胡先生`, `曾丹烨`, `果`, `李先生` |
| 5 | `memberMobile` | string | [`membermobile`](#ods-member-balance-changes) | （待补充） | 大小写匹配；枚举值: `13924036996`, `13902258852`, `13535220066`, `18826267530`, `13394654634`, `13922213242`, `13902203836`, `18825868576` |
| 6 | `id` | integer | [`id`](#ods-member-balance-changes) | 余额变更记录的主键 ID，唯一标识这一条“账户余额变化事件” | 枚举值: `3093844118358341`, `3093650318379141`, `3093649004579013`, `3093365819410565`, `3092712423049413`, `3092443610270021`, `3092315441612997`, `3092248235444421` |
| 7 | `account_data` | number | [`account_data`](#ods-member-balance-changes) | 本次变动的金额（元），正数表示增加，负数表示减少 | 枚举值: `-232.0`, `-125.0`, `-18.0`, `-300.0`, `-4285.55`, `-43.61`, `-132.0`, `-71.07` |
| 8 | `after` | number | [`after`](#ods-member-balance-changes) | 本次变动后，该卡账户的余额（元） | 枚举值: `110.64`, `3657.58`, `3782.58`, `1709.69`, `3255.83`, `0.0`, `2722.73`, `373.91` |
| 9 | `before` | number | [`before`](#ods-member-balance-changes) | 本次变动前，该卡账户的余额（元） | 枚举值: `342.64`, `3782.58`, `3800.58`, `2009.69`, `7541.38`, `43.61`, `2854.73`, `444.98` |
| 10 | `card_type_id` | integer | [`card_type_id`](#ods-member-balance-changes) | 卡种类型 ID，用于区分不同卡种 | 枚举值: `2793249295533893`, `2793266846533445`, `2794699703437125`, `2791990152417157` |
| 11 | `create_time` | string | [`create_time`](#ods-member-balance-changes) | 本条余额变更记录的创建时间，通常接近交易发生时间 | 枚举值: `2026-02-14 00:01:01`, `2026-02-13 20:43:53`, `2026-02-13 20:42:32`, `2026-02-13 15:54:28`, `2026-02-13 04:49:48`, `2026-02-13 00:16:21`, `2026-02-12 22:05:58`, `2026-02-12 20:57:36` |
| 12 | `from_type` | integer | [`from_type`](#ods-member-balance-changes) | 来自 JSON 导出的原始字段，用于保留业务取值 | 枚举值: `1`, `2`, `4`, `3`, `9` |
| 13 | `is_delete` | integer | [`is_delete`](#ods-member-balance-changes) | 逻辑删除标记（0=否，1=是） | 示例: `0` |
| 14 | `operator_id` | integer | [`operator_id`](#ods-member-balance-changes) | 执行此次余额变更操作的员工 ID | 枚举值: `2790687322443013`, `2790687633313029`, `2800457030093701`, `2800459869441029` |
| 15 | `operator_name` | string | [`operator_name`](#ods-member-balance-changes) | 操作员姓名（带职位前缀），是对 operator_id 的可读冗余字段 | 枚举值: `收银员:郑丽珊`, `店长:蒋雨轩`, `店长:郑丽珊`, `管理员：郑丽珊`, `店长:黄月柳`, `店长:谢晓洪` |
| 16 | `payment_method` | integer | [`payment_method`](#ods-member-balance-changes) | 来自 JSON 导出的原始字段，用于保留业务取值 | 枚举值: `0`, `3`, `4` |
| 17 | `refund_amount` | number | [`refund_amount`](#ods-member-balance-changes) | 可能用于标记“其中有多少金额是以‘退款’形式回流的”，或区分“退回余额”和“原路退回”两种模式 | 示例: `0.0` |
| 18 | `register_site_id` | integer | [`register_site_id`](#ods-member-balance-changes) | 会员卡的“注册门店 ID”，即办卡所在门店 | 示例: `2790685415443269` |
| 19 | `relate_id` | integer | [`relate_id`](#ods-member-balance-changes) | 例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等 | 枚举值: `3093843703564549`, `3093650242373957`, `3093648911108293`, `3093365762853125`, `3092711340902597`, `3092443433306437`, `3092315370047749`, `3092248181688581` |
| 20 | `remark` | string | [`remark`](#ods-member-balance-changes) | 当为空时，说明这条变动没有额外备注说明 |  |
| 21 | `site_id` | integer | [`site_id`](#ods-member-balance-changes) | 非 0：记录所属的具体门店 ID（与其他 JSON 内的 site_id 一致） | 枚举值: `2790685415443269`, `0` |
| 22 | `system_member_id` | integer | [`system_member_id`](#ods-member-balance-changes) | 系统级（全局）会员 ID | 枚举值: `2799207358777093`, `2799207405995781`, `2799210152216325`, `2799207521568517`, `2849995547528133`, `2799212844549893`, `2799207074645765`, `2799207466075909` |
| 23 | `tenant_id` | integer | [`tenant_id`](#ods-member-balance-changes) | 租户/商户 ID，本数据中是固定值（同一品牌/商户） | 示例: `2790683160709957` |
| 24 | `tenant_member_card_id` | integer | [`tenant_member_card_id`](#ods-member-balance-changes) | 会员卡账户 ID，在租户内唯一标识某张卡 | 枚举值: `2799218552833797`, `2815108067970885`, `2799218599413509`, `2799217444914949`, `2849995548871621`, `2799219999295237`, `2799215892219653`, `2799216936748805` |
| 25 | `tenant_member_id` | integer | [`tenant_member_id`](#ods-member-balance-changes) | 商户维度的会员 ID（租户内会员主键） | 枚举值: `2799207359858437`, `2799207406946053`, `2799210153232133`, `2799207522600709`, `2849995548625861`, `2799212845565701`, `2799207075874565`, `2799207467042565` |
| 26 | `principal_after` | number | [`principal_after`](#ods-member-balance-changes) | 变动后本金 | 枚举值: `110.64`, `0.0`, `1709.69`, `3255.83`, `2722.73`, `373.91`, `255.6`, `111.06` |
| 27 | `principal_before` | number | [`principal_before`](#ods-member-balance-changes) | 变动前本金 | 枚举值: `342.64`, `0.0`, `2009.69`, `7541.38`, `43.61`, `2854.73`, `444.98`, `313.6` |
| 28 | `principal_data` | number | [`principal_data`](#ods-member-balance-changes) | 本金变动数据 | 枚举值: `-232.0`, `0.0`, `-300.0`, `-4285.55`, `-43.61`, `-132.0`, `-71.07`, `-58.0` |

<a id="ods-member-balance-changes"></a>

#### ODS 表结构 — ods.member_balance_changes [🔗 API](#api-member-balance-changes)

共 33 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `tenant_id` | bigint | [`tenant_id`](#api-member-balance-changes) | [`dwd_member_balance_change.tenant_id`](#dwd-dwd-member-balance-change) | 租户/商户 ID，本数据中是固定值（同一品牌/商户） |
| 2 | `site_id` | bigint | [`site_id`](#api-member-balance-changes) | [`dwd_member_balance_change.site_id`](#dwd-dwd-member-balance-change) | 非 0：记录所属的具体门店 ID（与其他 JSON 内的 site_id 一致） |
| 3 | `register_site_id` | bigint | [`register_site_id`](#api-member-balance-changes) | [`dwd_member_balance_change.register_site_id`](#dwd-dwd-member-balance-change) | 会员卡的“注册门店 ID”，即办卡所在门店 |
| 4 | `registersitename` | text | [`registerSiteName`](#api-member-balance-changes) | [`dwd_member_balance_change_ex.register_site_name`](#dwd-dwd-member-balance-change-ex) | （待补充） |
| 5 | `paysitename` | text | [`paySiteName`](#api-member-balance-changes) | [`dwd_member_balance_change_ex.pay_site_name`](#dwd-dwd-member-balance-change-ex) | （待补充） |
| 6 | `id` | bigint | [`id`](#api-member-balance-changes) | [`dwd_member_balance_change.balance_change_id`](#dwd-dwd-member-balance-change), [`dwd_member_balance_change_ex.balance_change_id`](#dwd-dwd-member-balance-change-ex) | 余额变更记录的主键 ID，唯一标识这一条“账户余额变化事件” |
| 7 | `tenant_member_id` | bigint | [`tenant_member_id`](#api-member-balance-changes) | [`dwd_member_balance_change.tenant_member_id`](#dwd-dwd-member-balance-change) | 商户维度的会员 ID（租户内会员主键） |
| 8 | `tenant_member_card_id` | bigint | [`tenant_member_card_id`](#api-member-balance-changes) | [`dwd_member_balance_change.tenant_member_card_id`](#dwd-dwd-member-balance-change) | 会员卡账户 ID，在租户内唯一标识某张卡 |
| 9 | `system_member_id` | bigint | [`system_member_id`](#api-member-balance-changes) | [`dwd_member_balance_change.system_member_id`](#dwd-dwd-member-balance-change) | 系统级（全局）会员 ID |
| 10 | `membername` | text | [`memberName`](#api-member-balance-changes) | [`dwd_member_balance_change.member_name`](#dwd-dwd-member-balance-change) | （待补充） |
| 11 | `membermobile` | text | [`memberMobile`](#api-member-balance-changes) | [`dwd_member_balance_change.member_mobile`](#dwd-dwd-member-balance-change) | （待补充） |
| 12 | `card_type_id` | bigint | [`card_type_id`](#api-member-balance-changes) | [`dwd_member_balance_change.card_type_id`](#dwd-dwd-member-balance-change) | 卡种类型 ID，用于区分不同卡种 |
| 13 | `membercardtypename` | text | [`memberCardTypeName`](#api-member-balance-changes) | [`dwd_member_balance_change.card_type_name`](#dwd-dwd-member-balance-change) | （待补充） |
| 14 | `account_data` | numeric | [`account_data`](#api-member-balance-changes) | [`dwd_member_balance_change.change_amount`](#dwd-dwd-member-balance-change) | 本次变动的金额（元），正数表示增加，负数表示减少 |
| 15 | `before` | numeric | [`before`](#api-member-balance-changes) | [`dwd_member_balance_change.balance_before`](#dwd-dwd-member-balance-change) | 本次变动前，该卡账户的余额（元） |
| 16 | `after` | numeric | [`after`](#api-member-balance-changes) | [`dwd_member_balance_change.balance_after`](#dwd-dwd-member-balance-change) | 本次变动后，该卡账户的余额（元） |
| 17 | `refund_amount` | numeric | [`refund_amount`](#api-member-balance-changes) | [`dwd_member_balance_change_ex.refund_amount`](#dwd-dwd-member-balance-change-ex) | 可能用于标记“其中有多少金额是以‘退款’形式回流的”，或区分“退回余额”和“原路退回”两种模式 |
| 18 | `from_type` | integer | [`from_type`](#api-member-balance-changes) | [`dwd_member_balance_change.from_type`](#dwd-dwd-member-balance-change) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 19 | `payment_method` | integer | [`payment_method`](#api-member-balance-changes) | [`dwd_member_balance_change.payment_method`](#dwd-dwd-member-balance-change) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 20 | `relate_id` | bigint | [`relate_id`](#api-member-balance-changes) | — | 例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等 |
| 21 | `remark` | text | [`remark`](#api-member-balance-changes) | [`dwd_member_balance_change.remark`](#dwd-dwd-member-balance-change) | 当为空时，说明这条变动没有额外备注说明 |
| 22 | `operator_id` | bigint | [`operator_id`](#api-member-balance-changes) | [`dwd_member_balance_change_ex.operator_id`](#dwd-dwd-member-balance-change-ex) | 执行此次余额变更操作的员工 ID |
| 23 | `operator_name` | text | [`operator_name`](#api-member-balance-changes) | [`dwd_member_balance_change_ex.operator_name`](#dwd-dwd-member-balance-change-ex) | 操作员姓名（带职位前缀），是对 operator_id 的可读冗余字段 |
| 24 | `is_delete` | integer | [`is_delete`](#api-member-balance-changes) | [`dwd_member_balance_change.is_delete`](#dwd-dwd-member-balance-change) | 逻辑删除标记（0=否，1=是） |
| 25 | `create_time` | timestamp without time zone | [`create_time`](#api-member-balance-changes) | [`dwd_member_balance_change.change_time`](#dwd-dwd-member-balance-change) | 本条余额变更记录的创建时间，通常接近交易发生时间 |
| 26 | `principal_after` | numeric | [`principal_after`](#api-member-balance-changes) | [`dwd_member_balance_change.principal_after`](#dwd-dwd-member-balance-change) | 变动后本金 |
| 27 | `principal_before` | numeric | [`principal_before`](#api-member-balance-changes) | [`dwd_member_balance_change.principal_before`](#dwd-dwd-member-balance-change) | 变动前本金 |
| 28 | `principal_data` | text | [`principal_data`](#api-member-balance-changes) | [`dwd_member_balance_change_ex.principal_data`](#dwd-dwd-member-balance-change-ex) | 本金变动数据 |
| 29 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 30 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 31 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 32 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 33 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dwd-member-balance-change"></a>

#### DWD 表结构 — dwd.dwd_member_balance_change [🔗 ODS](#ods-member-balance-changes)

共 22 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `balance_change_id` | bigint | [`id`](#ods-member-balance-changes) | 直接 | 变动流水 ID |
| 2 | `tenant_id` | bigint | [`tenant_id`](#ods-member-balance-changes) | 直接 | 租户 ID |
| 3 | `site_id` | bigint | [`site_id`](#ods-member-balance-changes) | 直接 | 门店 ID |
| 4 | `register_site_id` | bigint | [`register_site_id`](#ods-member-balance-changes) | 直接 | 注册门店 ID |
| 5 | `tenant_member_id` | bigint | [`tenant_member_id`](#ods-member-balance-changes) | 直接 | 会员 ID → dim_member |
| 6 | `system_member_id` | bigint | [`system_member_id`](#ods-member-balance-changes) | 直接 | 系统会员 ID |
| 7 | `tenant_member_card_id` | bigint | [`tenant_member_card_id`](#ods-member-balance-changes) | 直接 | 会员卡 ID → dim_member_card_account |
| 8 | `card_type_id` | bigint | [`card_type_id`](#ods-member-balance-changes) | 直接 | 卡类型 ID |
| 9 | `card_type_name` | character varying | [`membercardtypename`](#ods-member-balance-changes) | 直接 | 卡类型名称。**枚举值**: "储值卡", "活动抵用券", "台费卡", "酒水卡", "年卡", "月卡" |
| 10 | `member_name` | character varying | [`membername`](#ods-member-balance-changes) | 直接 | 会员名称快照 |
| 11 | `member_mobile` | character varying | [`membermobile`](#ods-member-balance-changes) | 直接 | 会员手机号快照 |
| 12 | `balance_before` | numeric | [`before`](#ods-member-balance-changes) | 直接 | 变动前余额 |
| 13 | `change_amount` | numeric | [`account_data`](#ods-member-balance-changes) | 直接 | 变动金额（正=充值/赠送，负=消费） |
| 14 | `balance_after` | numeric | [`after`](#ods-member-balance-changes) | 直接 | 变动后余额 |
| 15 | `from_type` | integer | [`from_type`](#ods-member-balance-changes) | 直接 | 变动来源。**枚举值**: 1=结账/消费, 2=结账撤销, 3=现付充值, 4=活动赠送, 7=充值撤销/退款,... |
| 16 | `payment_method` | integer | [`payment_method`](#ods-member-balance-changes) | 直接 | 支付方式，暂未启用。 |
| 17 | `change_time` | timestamp with time zone | [`create_time`](#ods-member-balance-changes) | 直接 | 变动时间 |
| 18 | `is_delete` | integer | [`is_delete`](#ods-member-balance-changes) | 直接 | 删除标记 |
| 19 | `remark` | character varying | [`remark`](#ods-member-balance-changes) | 直接 | 备注。**样本值**: "注销会员", "充值退款" 等 |
| 20 | `principal_before` | numeric | [`principal_before`](#ods-member-balance-changes) | 直接 | 变动前本金 |
| 21 | `principal_after` | numeric | [`principal_after`](#ods-member-balance-changes) | 直接 | 变动后本金 |
| 22 | `principal_change_amount` | numeric | — | — | 本金变动金额（正=增加，负=减少） |

<a id="dwd-dwd-member-balance-change-ex"></a>

#### DWD 表结构 — dwd.dwd_member_balance_change_ex [🔗 ODS](#ods-member-balance-changes)

共 7 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `balance_change_id` | bigint | [`id`](#ods-member-balance-changes) | 直接 | 字段重命名 |
| 2 | `pay_site_name` | character varying | [`paysitename`](#ods-member-balance-changes) | 直接 | 字段重命名 |
| 3 | `register_site_name` | character varying | [`registersitename`](#ods-member-balance-changes) | 直接 | 字段重命名 |
| 4 | `refund_amount` | numeric | [`refund_amount`](#ods-member-balance-changes) | 直接 | 同名直传 |
| 5 | `operator_id` | bigint | [`operator_id`](#ods-member-balance-changes) | 直接 | 同名直传 |
| 6 | `operator_name` | character varying | [`operator_name`](#ods-member-balance-changes) | 直接 | 同名直传 |
| 7 | `principal_data` | text | [`principal_data`](#ods-member-balance-changes) | 直接 |  |

### 3.13 recharge_settlements（充值结算）

- 任务代码：`ODS_RECHARGE_SETTLE`
- 采样记录数：197
- API JSON 字段数：92
- ODS 列数：71
- DWD 目标表：dwd_recharge_order, dwd_recharge_order_ex

<a id="api-recharge-settlements"></a>

#### API 源字段 — recharge_settlements [🔗 ODS](#ods-recharge-settlements)

已映射 67/92，覆盖率 72.8%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `siteProfile.id` | integer | [`id`](#ods-recharge-settlements) | 门店 ID | 📦 嵌套对象；示例: `2790685415443269` |
| 2 | `siteProfile.org_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2790684179467077` |
| 3 | `siteProfile.shop_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `朗朗桌球` |
| 4 | `siteProfile.avatar` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `https://oss.ficoo.vip/admin...` |
| 5 | `siteProfile.business_tel` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `13316068642` |
| 6 | `siteProfile.full_address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区丽阳街12号` |
| 7 | `siteProfile.address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区天园街道朗朗桌球` |
| 8 | `siteProfile.longitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `113.360321` |
| 9 | `siteProfile.latitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `23.133629` |
| 10 | `siteProfile.tenant_site_region_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `156440100` |
| 11 | `siteProfile.tenant_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2790683160709957` |
| 12 | `siteProfile.auto_light` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 13 | `siteProfile.attendance_distance` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 14 | `siteProfile.wifi_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 15 | `siteProfile.wifi_password` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 16 | `siteProfile.customer_service_qrcode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 17 | `siteProfile.customer_service_wechat` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 18 | `siteProfile.fixed_pay_qrCode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 19 | `siteProfile.prod_env` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 20 | `siteProfile.light_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 21 | `siteProfile.light_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 22 | `siteProfile.site_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 23 | `siteProfile.light_token` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 24 | `siteProfile.site_label` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `A` |
| 25 | `siteProfile.attendance_enabled` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 26 | `siteProfile.shop_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 27 | `settleList.id` | integer | [`id`](#ods-recharge-settlements) | 门店 ID | 枚举值: `3087072625102533`, `3087072183438981`, `3086802110271237`, `3085662010822277`, `3084086428765829`, `3083626062351877`, `3083418544754181`, `3082874684165765` |
| 28 | `settleList.tenantId` | integer | [`tenantid`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `2790683160709957` |
| 29 | `settleList.siteId` | integer | [`siteid`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `2790685415443269` |
| 30 | `settleList.siteName` | string | [`sitename`](#ods-recharge-settlements) | 名称字段，用于展示与辅助识别 | 大小写匹配 |
| 31 | `settleList.balanceAmount` | number | [`balanceamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 32 | `settleList.cardAmount` | number | [`cardamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 33 | `settleList.cashAmount` | number | [`cashamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 34 | `settleList.couponAmount` | number | [`couponamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 35 | `settleList.createTime` | string | [`createtime`](#ods-recharge-settlements) | 时间字段，用于记录业务时间点/发生时间 | 大小写匹配；枚举值: `2026-02-09 05:12:42`, `2026-02-09 05:12:15`, `2026-02-09 00:37:31`, `2026-02-08 05:17:45`, `2026-02-07 02:34:59`, `2026-02-06 18:46:41`, `2026-02-06 15:15:35`, `2026-02-06 06:02:20` |
| 36 | `settleList.memberId` | integer | [`memberid`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `2799207363643141`, `2799207522600709`, `2969257129938053`, `2799207124305669`, `2799207359858437`, `2849995548625861`, `2799212430657285`, `2799207406946053` |
| 37 | `settleList.memberName` | string | [`membername`](#ods-recharge-settlements) | 名称字段，用于展示与辅助识别 | 大小写匹配；枚举值: `葛先生`, `轩哥`, `小燕`, `陈腾鑫`, `罗先生`, `胡先生`, `黄先生`, `张先生` |
| 38 | `settleList.tenantMemberCardId` | integer | [`tenantmembercardid`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `2799216572794629`, `2799217444914949`, `2969257130232965`, `2799215988246277`, `2799218552833797`, `2849995548871621`, `2799219055920901`, `2799217231906565` |
| 39 | `settleList.memberCardTypeName` | string | [`membercardtypename`](#ods-recharge-settlements) | 名称字段，用于展示与辅助识别 | 大小写匹配；枚举值: `储值卡`, `月卡` |
| 40 | `settleList.memberPhone` | string | [`memberphone`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `13811638071`, `18826267530`, `17802081334`, `17817318218`, `13924036996`, `13394654634`, `13570163507`, `13902258852` |
| 41 | `settleList.tableId` | integer | [`tableid`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `0` |
| 42 | `settleList.consumeMoney` | number | [`consumemoney`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `10000.0`, `3000.0`, `1000.0`, `298.0`, `-10000.0`, `5000.0`, `1200.0`, `-3000.0` |
| 43 | `settleList.onlineAmount` | number | [`onlineamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 44 | `settleList.operatorId` | integer | [`operatorid`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `2790687322443013` |
| 45 | `settleList.operatorName` | string | [`operatorname`](#ods-recharge-settlements) | 名称字段，用于展示与辅助识别 | 大小写匹配；示例: `收银员:郑丽珊` |
| 46 | `settleList.revokeOrderId` | integer | [`revokeorderid`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `0` |
| 47 | `settleList.revokeOrderName` | string | [`revokeordername`](#ods-recharge-settlements) | 名称字段，用于展示与辅助识别 | 大小写匹配 |
| 48 | `settleList.revokeTime` | string | [`revoketime`](#ods-recharge-settlements) | 时间字段，用于记录业务时间点/发生时间 | 大小写匹配；示例: `0001-01-01 00:00:00` |
| 49 | `settleList.payAmount` | number | [`payamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `10000.0`, `3000.0`, `1000.0`, `298.0`, `-10000.0`, `5000.0`, `1200.0`, `-3000.0` |
| 50 | `settleList.pointAmount` | number | [`pointamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `10000.0`, `3000.0`, `1000.0`, `298.0`, `0.0`, `5000.0`, `1200.0`, `539.0` |
| 51 | `settleList.refundAmount` | number | [`refundamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；枚举值: `0.0`, `10000.0`, `3000.0`, `1000.0` |
| 52 | `settleList.settleName` | string | [`settlename`](#ods-recharge-settlements) | 名称字段，用于展示与辅助识别 | 大小写匹配；枚举值: `充值订单`, `充值撤销` |
| 53 | `settleList.settleRelateId` | integer | [`settlerelateid`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `3087072624987845`, `3087072183324293`, `3086802110156549`, `3085662010707589`, `3084086428667525`, `3083626062204421`, `3083418544623109`, `3082874684067461` |
| 54 | `settleList.settleStatus` | integer | [`settlestatus`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `2` |
| 55 | `settleList.settleType` | integer | [`settletype`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `5`, `7` |
| 56 | `settleList.payTime` | string | [`paytime`](#ods-recharge-settlements) | 时间字段，用于记录业务时间点/发生时间 | 大小写匹配；枚举值: `2026-02-09 05:12:42`, `2026-02-09 05:12:15`, `2026-02-09 00:37:31`, `2026-02-08 05:17:45`, `2026-02-07 02:34:59`, `2026-02-06 18:46:41`, `2026-02-06 15:15:35`, `2026-02-06 06:02:20` |
| 57 | `settleList.roundingAmount` | number | [`roundingamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 58 | `settleList.paymentMethod` | integer | [`paymentmethod`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `4`, `1` |
| 59 | `settleList.adjustAmount` | number | [`adjustamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 60 | `settleList.assistantCxMoney` | number | [`assistantcxmoney`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 61 | `settleList.assistantPdMoney` | number | [`assistantpdmoney`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 62 | `settleList.couponSaleAmount` | number | [`couponsaleamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 63 | `settleList.plCouponSaleAmount` | number | [`plcouponsaleamount`](#ods-recharge-settlements) | 平台券销售额 | 大小写匹配；示例: `0.0` |
| 64 | `settleList.merVouSalesAmount` | number | [`mervousalesamount`](#ods-recharge-settlements) | 商户券销售额 | 大小写匹配；示例: `0.0` |
| 65 | `settleList.memberDiscountAmount` | number | [`memberdiscountamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 66 | `settleList.tableChargeMoney` | number | [`tablechargemoney`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 67 | `settleList.goodsMoney` | number | [`goodsmoney`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 68 | `settleList.realGoodsMoney` | number | [`realgoodsmoney`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 69 | `settleList.serviceMoney` | number | [`servicemoney`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 70 | `settleList.prepayMoney` | number | [`prepaymoney`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 71 | `settleList.salesManName` | string | [`salesmanname`](#ods-recharge-settlements) | 名称字段，用于展示与辅助识别 | 大小写匹配 |
| 72 | `settleList.orderRemark` | string | [`orderremark`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配 |
| 73 | `settleList.salesManUserId` | integer | [`salesmanuserid`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `0` |
| 74 | `settleList.canBeRevoked` | boolean | [`canberevoked`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `False` |
| 75 | `settleList.pointDiscountPrice` | number | [`pointdiscountprice`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 76 | `settleList.pointDiscountCost` | number | [`pointdiscountcost`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 77 | `settleList.activityDiscount` | number | [`activitydiscount`](#ods-recharge-settlements) | 数量/时长字段，用于统计与计量 | 大小写匹配；示例: `0.0` |
| 78 | `settleList.serialNumber` | integer | [`serialnumber`](#ods-recharge-settlements) | 数量/时长字段，用于统计与计量 | 大小写匹配；示例: `0` |
| 79 | `settleList.assistantManualDiscount` | number | [`assistantmanualdiscount`](#ods-recharge-settlements) | 数量/时长字段，用于统计与计量 | 大小写匹配；示例: `0.0` |
| 80 | `settleList.allCouponDiscount` | number | [`allcoupondiscount`](#ods-recharge-settlements) | 数量/时长字段，用于统计与计量 | 大小写匹配；示例: `0.0` |
| 81 | `settleList.goodsPromotionMoney` | number | [`goodspromotionmoney`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 82 | `settleList.assistantPromotionMoney` | number | [`assistantpromotionmoney`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0.0` |
| 83 | `settleList.isUseCoupon` | boolean | [`isusecoupon`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `False` |
| 84 | `settleList.isUseDiscount` | boolean | [`isusediscount`](#ods-recharge-settlements) | 数量/时长字段，用于统计与计量 | 大小写匹配；示例: `False` |
| 85 | `settleList.isActivity` | boolean | [`isactivity`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `False` |
| 86 | `settleList.isBindMember` | boolean | [`isbindmember`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；示例: `False` |
| 87 | `settleList.isFirst` | integer | [`isfirst`](#ods-recharge-settlements) | 来自 JSON 导出的原始字段，用于保留业务取值 | 大小写匹配；枚举值: `2`, `1` |
| 88 | `settleList.rechargeCardAmount` | integer | [`rechargecardamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0` |
| 89 | `settleList.giftCardAmount` | integer | [`giftcardamount`](#ods-recharge-settlements) | 金额字段，用于计费/结算/分摊等金额计算 | 大小写匹配；示例: `0` |
| 90 | `settleList.electricityMoney` | number | [`electricitymoney`](#ods-recharge-settlements) | 电费金额 | 大小写匹配；示例: `0.0` |
| 91 | `settleList.realElectricityMoney` | number | [`realelectricitymoney`](#ods-recharge-settlements) | 实际电费金额 | 大小写匹配；示例: `0.0` |
| 92 | `settleList.electricityAdjustMoney` | number | [`electricityadjustmoney`](#ods-recharge-settlements) | 电费调整金额 | 大小写匹配；示例: `0.0` |

<a id="ods-recharge-settlements"></a>

#### ODS 表结构 — ods.recharge_settlements [🔗 API](#api-recharge-settlements)

共 71 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`siteProfile.id`](#api-recharge-settlements) | [`dwd_recharge_order.recharge_order_id`](#dwd-dwd-recharge-order), [`dwd_recharge_order_ex.recharge_order_id`](#dwd-dwd-recharge-order-ex) | 门店 ID |
| 2 | `tenantid` | bigint | [`settleList.tenantId`](#api-recharge-settlements) | [`dwd_recharge_order.tenant_id`](#dwd-dwd-recharge-order) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 3 | `siteid` | bigint | [`settleList.siteId`](#api-recharge-settlements) | [`dwd_recharge_order.site_id`](#dwd-dwd-recharge-order) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 4 | `sitename` | text | [`settleList.siteName`](#api-recharge-settlements) | [`dwd_recharge_order_ex.site_name_snapshot`](#dwd-dwd-recharge-order-ex) | 名称字段，用于展示与辅助识别 |
| 5 | `balanceamount` | numeric | [`settleList.balanceAmount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.balance_amount`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 6 | `cardamount` | numeric | [`settleList.cardAmount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.card_amount`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 7 | `cashamount` | numeric | [`settleList.cashAmount`](#api-recharge-settlements) | [`dwd_recharge_order.cash_amount`](#dwd-dwd-recharge-order) | 金额字段，用于计费/结算/分摊等金额计算 |
| 8 | `couponamount` | numeric | [`settleList.couponAmount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.coupon_amount`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 9 | `createtime` | timestamp with time zone | [`settleList.createTime`](#api-recharge-settlements) | [`dwd_recharge_order.create_time`](#dwd-dwd-recharge-order) | 时间字段，用于记录业务时间点/发生时间 |
| 10 | `memberid` | bigint | [`settleList.memberId`](#api-recharge-settlements) | [`dwd_recharge_order.member_id`](#dwd-dwd-recharge-order) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 11 | `membername` | text | [`settleList.memberName`](#api-recharge-settlements) | [`dwd_recharge_order.member_name_snapshot`](#dwd-dwd-recharge-order) | 名称字段，用于展示与辅助识别 |
| 12 | `tenantmembercardid` | bigint | [`settleList.tenantMemberCardId`](#api-recharge-settlements) | [`dwd_recharge_order.tenant_member_card_id`](#dwd-dwd-recharge-order) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 13 | `membercardtypename` | text | [`settleList.memberCardTypeName`](#api-recharge-settlements) | [`dwd_recharge_order.member_card_type_name`](#dwd-dwd-recharge-order) | 名称字段，用于展示与辅助识别 |
| 14 | `memberphone` | text | [`settleList.memberPhone`](#api-recharge-settlements) | [`dwd_recharge_order.member_phone_snapshot`](#dwd-dwd-recharge-order) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 15 | `tableid` | bigint | [`settleList.tableId`](#api-recharge-settlements) | [`dwd_recharge_order_ex.table_id`](#dwd-dwd-recharge-order-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 16 | `consumemoney` | numeric | [`settleList.consumeMoney`](#api-recharge-settlements) | [`dwd_recharge_order_ex.consume_money`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 17 | `onlineamount` | numeric | [`settleList.onlineAmount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.online_amount`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 18 | `operatorid` | bigint | [`settleList.operatorId`](#api-recharge-settlements) | [`dwd_recharge_order_ex.operator_id`](#dwd-dwd-recharge-order-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 19 | `operatorname` | text | [`settleList.operatorName`](#api-recharge-settlements) | [`dwd_recharge_order_ex.operator_name_snapshot`](#dwd-dwd-recharge-order-ex) | 名称字段，用于展示与辅助识别 |
| 20 | `revokeorderid` | bigint | [`settleList.revokeOrderId`](#api-recharge-settlements) | [`dwd_recharge_order_ex.revoke_order_id`](#dwd-dwd-recharge-order-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 21 | `revokeordername` | text | [`settleList.revokeOrderName`](#api-recharge-settlements) | [`dwd_recharge_order_ex.revoke_order_name`](#dwd-dwd-recharge-order-ex) | 名称字段，用于展示与辅助识别 |
| 22 | `revoketime` | timestamp with time zone | [`settleList.revokeTime`](#api-recharge-settlements) | [`dwd_recharge_order_ex.revoke_time`](#dwd-dwd-recharge-order-ex) | 时间字段，用于记录业务时间点/发生时间 |
| 23 | `payamount` | numeric | [`settleList.payAmount`](#api-recharge-settlements) | [`dwd_recharge_order.pay_amount`](#dwd-dwd-recharge-order) | 金额字段，用于计费/结算/分摊等金额计算 |
| 24 | `pointamount` | numeric | [`settleList.pointAmount`](#api-recharge-settlements) | [`dwd_recharge_order.point_amount`](#dwd-dwd-recharge-order) | 金额字段，用于计费/结算/分摊等金额计算 |
| 25 | `refundamount` | numeric | [`settleList.refundAmount`](#api-recharge-settlements) | [`dwd_recharge_order.refund_amount`](#dwd-dwd-recharge-order) | 金额字段，用于计费/结算/分摊等金额计算 |
| 26 | `settlename` | text | [`settleList.settleName`](#api-recharge-settlements) | [`dwd_recharge_order.settle_name`](#dwd-dwd-recharge-order) | 名称字段，用于展示与辅助识别 |
| 27 | `settlerelateid` | bigint | [`settleList.settleRelateId`](#api-recharge-settlements) | [`dwd_recharge_order.settle_relate_id`](#dwd-dwd-recharge-order) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 28 | `settlestatus` | integer | [`settleList.settleStatus`](#api-recharge-settlements) | [`dwd_recharge_order_ex.settle_status`](#dwd-dwd-recharge-order-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 29 | `settletype` | integer | [`settleList.settleType`](#api-recharge-settlements) | [`dwd_recharge_order.settle_type`](#dwd-dwd-recharge-order) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 30 | `paytime` | timestamp with time zone | [`settleList.payTime`](#api-recharge-settlements) | [`dwd_recharge_order.pay_time`](#dwd-dwd-recharge-order) | 时间字段，用于记录业务时间点/发生时间 |
| 31 | `roundingamount` | numeric | [`settleList.roundingAmount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.rounding_amount`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 32 | `paymentmethod` | integer | [`settleList.paymentMethod`](#api-recharge-settlements) | [`dwd_recharge_order.payment_method`](#dwd-dwd-recharge-order) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 33 | `adjustamount` | numeric | [`settleList.adjustAmount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.adjust_amount`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 34 | `assistantcxmoney` | numeric | [`settleList.assistantCxMoney`](#api-recharge-settlements) | [`dwd_recharge_order_ex.assistant_cx_money`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 35 | `assistantpdmoney` | numeric | [`settleList.assistantPdMoney`](#api-recharge-settlements) | [`dwd_recharge_order_ex.assistant_pd_money`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 36 | `couponsaleamount` | numeric | [`settleList.couponSaleAmount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.coupon_sale_amount`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 37 | `memberdiscountamount` | numeric | [`settleList.memberDiscountAmount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.member_discount_amount`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 38 | `tablechargemoney` | numeric | [`settleList.tableChargeMoney`](#api-recharge-settlements) | [`dwd_recharge_order_ex.table_charge_money`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 39 | `goodsmoney` | numeric | [`settleList.goodsMoney`](#api-recharge-settlements) | [`dwd_recharge_order_ex.goods_money`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 40 | `realgoodsmoney` | numeric | [`settleList.realGoodsMoney`](#api-recharge-settlements) | [`dwd_recharge_order_ex.real_goods_money`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 41 | `servicemoney` | numeric | [`settleList.serviceMoney`](#api-recharge-settlements) | [`dwd_recharge_order_ex.service_money`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 42 | `prepaymoney` | numeric | [`settleList.prepayMoney`](#api-recharge-settlements) | [`dwd_recharge_order_ex.prepay_money`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 43 | `salesmanname` | text | [`settleList.salesManName`](#api-recharge-settlements) | [`dwd_recharge_order_ex.salesman_name`](#dwd-dwd-recharge-order-ex) | 名称字段，用于展示与辅助识别 |
| 44 | `orderremark` | text | [`settleList.orderRemark`](#api-recharge-settlements) | [`dwd_recharge_order_ex.order_remark`](#dwd-dwd-recharge-order-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 45 | `salesmanuserid` | bigint | [`settleList.salesManUserId`](#api-recharge-settlements) | [`dwd_recharge_order_ex.salesman_user_id`](#dwd-dwd-recharge-order-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 46 | `canberevoked` | boolean | [`settleList.canBeRevoked`](#api-recharge-settlements) | [`dwd_recharge_order_ex.can_be_revoked`](#dwd-dwd-recharge-order-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 47 | `pointdiscountprice` | numeric | [`settleList.pointDiscountPrice`](#api-recharge-settlements) | [`dwd_recharge_order_ex.point_discount_price`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 48 | `pointdiscountcost` | numeric | [`settleList.pointDiscountCost`](#api-recharge-settlements) | [`dwd_recharge_order_ex.point_discount_cost`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 49 | `activitydiscount` | numeric | [`settleList.activityDiscount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.activity_discount`](#dwd-dwd-recharge-order-ex) | 数量/时长字段，用于统计与计量 |
| 50 | `serialnumber` | bigint | [`settleList.serialNumber`](#api-recharge-settlements) | [`dwd_recharge_order_ex.serial_number`](#dwd-dwd-recharge-order-ex) | 数量/时长字段，用于统计与计量 |
| 51 | `assistantmanualdiscount` | numeric | [`settleList.assistantManualDiscount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.assistant_manual_discount`](#dwd-dwd-recharge-order-ex) | 数量/时长字段，用于统计与计量 |
| 52 | `allcoupondiscount` | numeric | [`settleList.allCouponDiscount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.all_coupon_discount`](#dwd-dwd-recharge-order-ex) | 数量/时长字段，用于统计与计量 |
| 53 | `goodspromotionmoney` | numeric | [`settleList.goodsPromotionMoney`](#api-recharge-settlements) | [`dwd_recharge_order_ex.goods_promotion_money`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 54 | `assistantpromotionmoney` | numeric | [`settleList.assistantPromotionMoney`](#api-recharge-settlements) | [`dwd_recharge_order_ex.assistant_promotion_money`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 55 | `isusecoupon` | boolean | [`settleList.isUseCoupon`](#api-recharge-settlements) | [`dwd_recharge_order_ex.is_use_coupon`](#dwd-dwd-recharge-order-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 56 | `isusediscount` | boolean | [`settleList.isUseDiscount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.is_use_discount`](#dwd-dwd-recharge-order-ex) | 数量/时长字段，用于统计与计量 |
| 57 | `isactivity` | boolean | [`settleList.isActivity`](#api-recharge-settlements) | [`dwd_recharge_order_ex.is_activity`](#dwd-dwd-recharge-order-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 58 | `isbindmember` | boolean | [`settleList.isBindMember`](#api-recharge-settlements) | [`dwd_recharge_order_ex.is_bind_member`](#dwd-dwd-recharge-order-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 59 | `isfirst` | integer | [`settleList.isFirst`](#api-recharge-settlements) | [`dwd_recharge_order.is_first`](#dwd-dwd-recharge-order) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 60 | `rechargecardamount` | numeric | [`settleList.rechargeCardAmount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.recharge_card_amount`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 61 | `giftcardamount` | numeric | [`settleList.giftCardAmount`](#api-recharge-settlements) | [`dwd_recharge_order_ex.gift_card_amount`](#dwd-dwd-recharge-order-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 62 | `electricityadjustmoney` | numeric | [`settleList.electricityAdjustMoney`](#api-recharge-settlements) | — | 电费调整金额 |
| 63 | `electricitymoney` | numeric | [`settleList.electricityMoney`](#api-recharge-settlements) | — | 电费金额 |
| 64 | `mervousalesamount` | numeric | [`settleList.merVouSalesAmount`](#api-recharge-settlements) | — | 商户券销售额 |
| 65 | `plcouponsaleamount` | numeric | [`settleList.plCouponSaleAmount`](#api-recharge-settlements) | — | 平台券销售额 |
| 66 | `realelectricitymoney` | numeric | [`settleList.realElectricityMoney`](#api-recharge-settlements) | — | 实际电费金额 |
| 67 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 68 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 69 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 70 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 71 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dwd-recharge-order"></a>

#### DWD 表结构 — dwd.dwd_recharge_order [🔗 ODS](#ods-recharge-settlements)

共 24 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `recharge_order_id` | bigint | [`id`](#ods-recharge-settlements) | 直接 | 充值订单 ID |
| 2 | `tenant_id` | bigint | [`tenantid`](#ods-recharge-settlements) | 直接 | 租户 ID |
| 3 | `site_id` | bigint | [`siteid`](#ods-recharge-settlements) | 直接 | 门店 ID |
| 4 | `member_id` | bigint | [`memberid`](#ods-recharge-settlements) | 直接 | 会员 ID → dim_member |
| 5 | `member_name_snapshot` | text | [`membername`](#ods-recharge-settlements) | 直接 | 会员名称快照 |
| 6 | `member_phone_snapshot` | text | [`memberphone`](#ods-recharge-settlements) | 直接 | 会员电话快照 |
| 7 | `tenant_member_card_id` | bigint | [`tenantmembercardid`](#ods-recharge-settlements) | 直接 | 会员卡账户 ID → dim_member_card_account |
| 8 | `member_card_type_name` | text | [`membercardtypename`](#ods-recharge-settlements) | 直接 | 卡类型名称。**枚举值**: "储值卡", "月卡" |
| 9 | `settle_relate_id` | bigint | [`settlerelateid`](#ods-recharge-settlements) | 直接 | 结算关联 ID |
| 10 | `settle_type` | integer | [`settletype`](#ods-recharge-settlements) | 直接 | 结算类型。**枚举值**: 5=充值订单, 7=充值退款 |
| 11 | `settle_name` | text | [`settlename`](#ods-recharge-settlements) | 直接 | 结算名称。**枚举值**: "充值订单", "充值退款" |
| 12 | `is_first` | integer | [`isfirst`](#ods-recharge-settlements) | 直接 | 是否首充。**枚举值**: 1=是, 2=否 |
| 13 | `pay_amount` | numeric | [`payamount`](#ods-recharge-settlements) | 直接 | 充值金额（元，撤销为负数） |
| 14 | `refund_amount` | numeric | [`refundamount`](#ods-recharge-settlements) | 直接 | 退款金额 |
| 15 | `point_amount` | numeric | [`pointamount`](#ods-recharge-settlements) | 直接 | 积分金额 |
| 16 | `cash_amount` | numeric | [`cashamount`](#ods-recharge-settlements) | 直接 | 现金金额 |
| 17 | `payment_method` | integer | [`paymentmethod`](#ods-recharge-settlements) | 直接 | 支付方式，暂未启用。 |
| 18 | `create_time` | timestamp with time zone | [`createtime`](#ods-recharge-settlements) | 直接 | 创建时间 |
| 19 | `pay_time` | timestamp with time zone | [`paytime`](#ods-recharge-settlements) | 直接 | 支付时间 |
| 20 | `pl_coupon_sale_amount` | numeric | — | — | 平台券销售金额 |
| 21 | `mervou_sales_amount` | numeric | — | — | 美团/大众点评等平台销售金额 |
| 22 | `electricity_money` | numeric | — | — | 电费金额 |
| 23 | `real_electricity_money` | numeric | — | — | 实际电费金额 |
| 24 | `electricity_adjust_money` | numeric | — | — | 电费调整金额 |

<a id="dwd-dwd-recharge-order-ex"></a>

#### DWD 表结构 — dwd.dwd_recharge_order_ex [🔗 ODS](#ods-recharge-settlements)

共 43 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `recharge_order_id` | bigint | [`id`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 2 | `site_name_snapshot` | text | [`sitename`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 3 | `settle_status` | integer | [`settlestatus`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 4 | `is_bind_member` | boolean | [`isbindmember`](#ods-recharge-settlements) | → boolean | 字段重命名 |
| 5 | `is_activity` | boolean | [`isactivity`](#ods-recharge-settlements) | → boolean | 字段重命名 |
| 6 | `is_use_coupon` | boolean | [`isusecoupon`](#ods-recharge-settlements) | → boolean | 字段重命名 |
| 7 | `is_use_discount` | boolean | [`isusediscount`](#ods-recharge-settlements) | → boolean | 字段重命名 |
| 8 | `can_be_revoked` | boolean | [`canberevoked`](#ods-recharge-settlements) | → boolean | 字段重命名 |
| 9 | `online_amount` | numeric | [`onlineamount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 10 | `balance_amount` | numeric | [`balanceamount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 11 | `card_amount` | numeric | [`cardamount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 12 | `coupon_amount` | numeric | [`couponamount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 13 | `recharge_card_amount` | numeric | [`rechargecardamount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 14 | `gift_card_amount` | numeric | [`giftcardamount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 15 | `prepay_money` | numeric | [`prepaymoney`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 16 | `consume_money` | numeric | [`consumemoney`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 17 | `goods_money` | numeric | [`goodsmoney`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 18 | `real_goods_money` | numeric | [`realgoodsmoney`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 19 | `table_charge_money` | numeric | [`tablechargemoney`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 20 | `service_money` | numeric | [`servicemoney`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 21 | `activity_discount` | numeric | [`activitydiscount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 22 | `all_coupon_discount` | numeric | [`allcoupondiscount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 23 | `goods_promotion_money` | numeric | [`goodspromotionmoney`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 24 | `assistant_promotion_money` | numeric | [`assistantpromotionmoney`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 25 | `assistant_pd_money` | numeric | [`assistantpdmoney`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 26 | `assistant_cx_money` | numeric | [`assistantcxmoney`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 27 | `assistant_manual_discount` | numeric | [`assistantmanualdiscount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 28 | `coupon_sale_amount` | numeric | [`couponsaleamount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 29 | `member_discount_amount` | numeric | [`memberdiscountamount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 30 | `point_discount_price` | numeric | [`pointdiscountprice`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 31 | `point_discount_cost` | numeric | [`pointdiscountcost`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 32 | `adjust_amount` | numeric | [`adjustamount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 33 | `rounding_amount` | numeric | [`roundingamount`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 34 | `operator_id` | bigint | [`operatorid`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 35 | `operator_name_snapshot` | text | [`operatorname`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 36 | `salesman_user_id` | bigint | [`salesmanuserid`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 37 | `salesman_name` | text | [`salesmanname`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 38 | `order_remark` | text | [`orderremark`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 39 | `table_id` | integer | [`tableid`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 40 | `serial_number` | integer | [`serialnumber`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 41 | `revoke_order_id` | bigint | [`revokeorderid`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 42 | `revoke_order_name` | text | [`revokeordername`](#ods-recharge-settlements) | 直接 | 字段重命名 |
| 43 | `revoke_time` | timestamp with time zone | [`revoketime`](#ods-recharge-settlements) | 直接 | 字段重命名 |

### 3.14 group_buy_packages（团购套餐定义）

- 任务代码：`ODS_GROUP_PACKAGE`
- 采样记录数：18
- API JSON 字段数：40
- ODS 列数：43
- DWD 目标表：dim_groupbuy_package, dim_groupbuy_package_ex

<a id="api-group-buy-packages"></a>

#### API 源字段 — group_buy_packages [🔗 ODS](#ods-group-buy-packages)

已映射 38/40，覆盖率 95.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `site_name` | string | [`site_name`](#ods-group-buy-packages) | 门店名称 | 示例: `朗朗桌球` |
| 2 | `effective_status` | integer | [`effective_status`](#ods-group-buy-packages) | 1：13 条 | 枚举值: `1`, `3` |
| 3 | `tenantTableAreaIdList[]` | integer | ⚠️ 未映射 |  | 枚举值: `2791960001957765`, `2791961347968901`, `2791961060364165`, `2791961709907845`, `2791960521691013`, `2791962314215301` |
| 4 | `tableAreaNameList[]` | string | ⚠️ 未映射 |  | 枚举值: `A区`, `斯诺克区`, `VIP包厢`, `K包`, `B区`, `麻将房` |
| 5 | `tenantCouponSaleOrderItemId` | integer | [`tenantcouponsaleorderitemid`](#ods-group-buy-packages) | 租户券销售订单项ID | 大小写匹配；示例: `0` |
| 6 | `id` | integer | [`id`](#ods-group-buy-packages) | 门店侧套餐 ID，本文件内部的主键 | 枚举值: `3048468851870085`, `3035353129373509`, `3035353102028549`, `3035346503502213`, `3031000036133445`, `3030876421573701`, `3030875431701445`, `3030874907937861` |
| 7 | `add_end_clock` | string | [`add_end_clock`](#ods-group-buy-packages) | 附加时段结束时间，多数情况配合 "00:00:00" 或 "10:00:00" 使用 | 枚举值: `1.02:00:00`, `23:59:59`, `1.00:00:00`, `18:00:00` |
| 8 | `add_start_clock` | string | [`add_start_clock`](#ods-group-buy-packages) | 附加可用时间段的起始时间（第二段） | 枚举值: `23:00:00`, `10:00:00`, `00:00:00` |
| 9 | `area_tag_type` | integer | [`area_tag_type`](#ods-group-buy-packages) | 1 很可能代表“按台区标签限制”，例如 A区、中八区、包厢、KTV 等 | 示例: `1` |
| 10 | `card_type_ids` | string | [`card_type_ids`](#ods-group-buy-packages) | 原意是“适用会员卡类型 ID 列表”，例如某套餐只允许某几种会员卡使用，可以在此配置 | 示例: `0` |
| 11 | `coupon_money` | number | [`coupon_money`](#ods-group-buy-packages) | 券面值或内部结算面值，表示该套餐在门店侧对应的金额额度 | 示例: `0.0` |
| 12 | `create_time` | string | [`create_time`](#ods-group-buy-packages) | 该套餐在系统中创建的时间 | 枚举值: `2026-01-12 22:42:55`, `2026-01-03 16:20:55`, `2026-01-03 16:20:53`, `2026-01-03 16:14:10`, `2025-12-31 14:32:43`, `2025-12-31 12:26:58`, `2025-12-31 12:25:58`, `2025-12-31 12:25:26` |
| 13 | `creator_name` | string | [`creator_name`](#ods-group-buy-packages) | 创建人信息，一般包含“角色：姓名” | 枚举值: `店长:郑丽珊`, `管理员：郑丽珊` |
| 14 | `date_info` | string | [`date_info`](#ods-group-buy-packages) | 预留字段，通常用来存储更细粒度的日期信息，如具体日期列表、节假日特殊规则（可能是 JSON 字符串或编码） | 示例: `0` |
| 15 | `date_type` | integer | [`date_type`](#ods-group-buy-packages) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `1` |
| 16 | `duration` | integer | [`duration`](#ods-group-buy-packages) | 套餐内包含的时长（秒） | 枚举值: `3600`, `7200`, `14400` |
| 17 | `end_clock` | string | [`end_clock`](#ods-group-buy-packages) | 每日可用的结束时间点（第一段） | 枚举值: `1.02:00:00`, `23:59:59`, `1.00:00:00` |
| 18 | `end_time` | string | [`end_time`](#ods-group-buy-packages) | 套餐失效的日期时间（到这个时间点后不可使用） | 枚举值: `2027-01-13 00:00:00`, `2027-01-04 00:00:00`, `2026-01-03 00:00:00`, `2027-01-01 00:00:00`, `2027-09-01 00:00:00`, `2026-12-31 00:00:00`, `2026-09-03 00:00:00` |
| 19 | `group_type` | integer | [`group_type`](#ods-group-buy-packages) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `1` |
| 20 | `is_delete` | integer | [`is_delete`](#ods-group-buy-packages) | 逻辑删除标志 | 示例: `0` |
| 21 | `is_enabled` | integer | [`is_enabled`](#ods-group-buy-packages) | 启用状态 | 枚举值: `1`, `2` |
| 22 | `is_first_limit` | integer | [`is_first_limit`](#ods-group-buy-packages) | 是否首单限制 | 示例: `1` |
| 23 | `max_selectable_categories` | integer | [`max_selectable_categories`](#ods-group-buy-packages) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `0` |
| 24 | `package_id` | integer | [`package_id`](#ods-group-buy-packages) | “上层套餐 ID” 或“总部/系统级套餐 ID” | 枚举值: `1134850618`, `1130443985`, `1203035334`, `1812429097416714`, `1814707240811572`, `1137882866`, `1130465371`, `1137872168` |
| 25 | `package_name` | string | [`package_name`](#ods-group-buy-packages) | 团购套餐名称，用于前台展示和核销界面 | 枚举值: `午夜场9.9`, `斯诺克两小时`, `新人特惠一小时`, `中八、斯诺克包厢两小时`, `新人特惠A区中八一小时`, `KTV欢唱四小时`, `全天A区中八两小时`, `全天B区中八两小时` |
| 26 | `selling_price` | number | [`selling_price`](#ods-group-buy-packages) | 语义上应该是“团购售卖价”（顾客在平台购买券时的成交价格） | 示例: `0.0` |
| 27 | `site_id` | integer | [`site_id`](#ods-group-buy-packages) | 门店 ID | 示例: `2790685415443269` |
| 28 | `sort` | integer | [`sort`](#ods-group-buy-packages) | 排序 | 示例: `100` |
| 29 | `start_clock` | string | [`start_clock`](#ods-group-buy-packages) | 每日可用起始时间点（第一段） | 枚举值: `23:00:00`, `10:00:00`, `00:00:00` |
| 30 | `start_time` | string | [`start_time`](#ods-group-buy-packages) | 套餐开始生效的日期时间 | 枚举值: `2026-01-12 00:00:00`, `2026-01-03 00:00:00`, `2025-12-31 00:00:00`, `2025-07-21 00:00:00`, `2025-07-22 00:00:00`, `2025-12-30 00:00:00`, `2025-09-02 00:00:00` |
| 31 | `system_group_type` | integer | [`system_group_type`](#ods-group-buy-packages) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `1` |
| 32 | `table_area_id` | string | [`table_area_id`](#ods-group-buy-packages) | 原始设计应为“单一台区 ID”，当套餐只限一个区域可以用这个字段存储 | 示例: `0` |
| 33 | `table_area_id_list` | string | [`table_area_id_list`](#ods-group-buy-packages) | 用来存放具体台区 ID 列表（例如 "1,2,3"），实现更细粒度的台桌限制 |  |
| 34 | `table_area_name` | string | [`table_area_name`](#ods-group-buy-packages) | 套餐适用的“门店台区名称”，用于显示和筛选 | 示例: `B区` |
| 35 | `tenant_id` | integer | [`tenant_id`](#ods-group-buy-packages) | 租户 ID（品牌/商户 ID） | 示例: `2790683160709957` |
| 36 | `tenant_table_area_id` | string | [`tenant_table_area_id`](#ods-group-buy-packages) | 与 table_area_id 类似，是租户层级的台区 ID，原本用于单区选择 | 示例: `0` |
| 37 | `tenant_table_area_id_list` | string | [`tenant_table_area_id_list`](#ods-group-buy-packages) | 实际代表“台区集合 ID”或“租户台区配置 ID”，用来限制套餐可用的台区范围 | 示例: `2791960521691013` |
| 38 | `type` | integer | [`type`](#ods-group-buy-packages) | 内部业务子类型，具体含义需要结合系统文档 | 枚举值: `1`, `2` |
| 39 | `usable_count` | integer | [`usable_count`](#ods-group-buy-packages) | 可使用次数上限 | 示例: `0` |
| 40 | `usable_range` | string | [`usable_range`](#ods-group-buy-packages) | 一般用于文字描述可用日期范围（例如“周一至周五”） |  |

<a id="ods-group-buy-packages"></a>

#### ODS 表结构 — ods.group_buy_packages [🔗 API](#api-group-buy-packages)

共 43 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`id`](#api-group-buy-packages) | [`dim_groupbuy_package.groupbuy_package_id`](#dwd-dim-groupbuy-package), [`dim_groupbuy_package_ex.groupbuy_package_id`](#dwd-dim-groupbuy-package-ex) | 门店侧套餐 ID，本文件内部的主键 |
| 2 | `package_id` | bigint | [`package_id`](#api-group-buy-packages) | [`dim_groupbuy_package.package_template_id`](#dwd-dim-groupbuy-package) | “上层套餐 ID” 或“总部/系统级套餐 ID” |
| 3 | `package_name` | text | [`package_name`](#api-group-buy-packages) | [`dim_groupbuy_package.package_name`](#dwd-dim-groupbuy-package) | 团购套餐名称，用于前台展示和核销界面 |
| 4 | `selling_price` | numeric | [`selling_price`](#api-group-buy-packages) | [`dim_groupbuy_package.selling_price`](#dwd-dim-groupbuy-package) | 语义上应该是“团购售卖价”（顾客在平台购买券时的成交价格） |
| 5 | `coupon_money` | numeric | [`coupon_money`](#api-group-buy-packages) | [`dim_groupbuy_package.coupon_face_value`](#dwd-dim-groupbuy-package) | 券面值或内部结算面值，表示该套餐在门店侧对应的金额额度 |
| 6 | `date_type` | integer | [`date_type`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.date_type`](#dwd-dim-groupbuy-package-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 7 | `date_info` | text | [`date_info`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.date_info`](#dwd-dim-groupbuy-package-ex) | 预留字段，通常用来存储更细粒度的日期信息，如具体日期列表、节假日特殊规则（可能是 JSON 字符串或编码） |
| 8 | `start_time` | timestamp without time zone | [`start_time`](#api-group-buy-packages) | [`dim_groupbuy_package.start_time`](#dwd-dim-groupbuy-package) | 套餐开始生效的日期时间 |
| 9 | `end_time` | timestamp without time zone | [`end_time`](#api-group-buy-packages) | [`dim_groupbuy_package.end_time`](#dwd-dim-groupbuy-package) | 套餐失效的日期时间（到这个时间点后不可使用） |
| 10 | `start_clock` | text | [`start_clock`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.start_clock`](#dwd-dim-groupbuy-package-ex) | 每日可用起始时间点（第一段） |
| 11 | `end_clock` | text | [`end_clock`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.end_clock`](#dwd-dim-groupbuy-package-ex) | 每日可用的结束时间点（第一段） |
| 12 | `add_start_clock` | text | [`add_start_clock`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.add_start_clock`](#dwd-dim-groupbuy-package-ex) | 附加可用时间段的起始时间（第二段） |
| 13 | `add_end_clock` | text | [`add_end_clock`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.add_end_clock`](#dwd-dim-groupbuy-package-ex) | 附加时段结束时间，多数情况配合 "00:00:00" 或 "10:00:00" 使用 |
| 14 | `duration` | integer | [`duration`](#api-group-buy-packages) | [`dim_groupbuy_package.duration_seconds`](#dwd-dim-groupbuy-package) | 套餐内包含的时长（秒） |
| 15 | `usable_count` | integer | [`usable_count`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.usable_count`](#dwd-dim-groupbuy-package-ex) | 可使用次数上限 |
| 16 | `usable_range` | integer | [`usable_range`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.usable_range`](#dwd-dim-groupbuy-package-ex) | 一般用于文字描述可用日期范围（例如“周一至周五”） |
| 17 | `table_area_id` | bigint | [`table_area_id`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.table_area_id`](#dwd-dim-groupbuy-package-ex) | 原始设计应为“单一台区 ID”，当套餐只限一个区域可以用这个字段存储 |
| 18 | `table_area_name` | text | [`table_area_name`](#api-group-buy-packages) | [`dim_groupbuy_package.table_area_name`](#dwd-dim-groupbuy-package) | 套餐适用的“门店台区名称”，用于显示和筛选 |
| 19 | `table_area_id_list` | jsonb | [`table_area_id_list`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.table_area_id_list`](#dwd-dim-groupbuy-package-ex) | 用来存放具体台区 ID 列表（例如 "1,2,3"），实现更细粒度的台桌限制 |
| 20 | `tenant_table_area_id` | bigint | [`tenant_table_area_id`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.tenant_table_area_id`](#dwd-dim-groupbuy-package-ex) | 与 table_area_id 类似，是租户层级的台区 ID，原本用于单区选择 |
| 21 | `tenant_table_area_id_list` | jsonb | [`tenant_table_area_id_list`](#api-group-buy-packages) | [`dim_groupbuy_package.tenant_table_area_id_list`](#dwd-dim-groupbuy-package) | 实际代表“台区集合 ID”或“租户台区配置 ID”，用来限制套餐可用的台区范围 |
| 22 | `site_id` | bigint | [`site_id`](#api-group-buy-packages) | [`dim_groupbuy_package.site_id`](#dwd-dim-groupbuy-package) | 门店 ID |
| 23 | `site_name` | text | [`site_name`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.site_name`](#dwd-dim-groupbuy-package-ex) | 门店名称 |
| 24 | `tenant_id` | bigint | [`tenant_id`](#api-group-buy-packages) | [`dim_groupbuy_package.tenant_id`](#dwd-dim-groupbuy-package) | 租户 ID（品牌/商户 ID） |
| 25 | `card_type_ids` | jsonb | [`card_type_ids`](#api-group-buy-packages) | [`dim_groupbuy_package.card_type_ids`](#dwd-dim-groupbuy-package) | 原意是“适用会员卡类型 ID 列表”，例如某套餐只允许某几种会员卡使用，可以在此配置 |
| 26 | `group_type` | integer | [`group_type`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.group_type`](#dwd-dim-groupbuy-package-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 27 | `system_group_type` | integer | [`system_group_type`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.system_group_type`](#dwd-dim-groupbuy-package-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 28 | `type` | integer | [`type`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.package_type`](#dwd-dim-groupbuy-package-ex) | 内部业务子类型，具体含义需要结合系统文档 |
| 29 | `effective_status` | integer | [`effective_status`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.effective_status`](#dwd-dim-groupbuy-package-ex) | 1：13 条 |
| 30 | `is_enabled` | integer | [`is_enabled`](#api-group-buy-packages) | [`dim_groupbuy_package.is_enabled`](#dwd-dim-groupbuy-package) | 启用状态 |
| 31 | `is_delete` | integer | [`is_delete`](#api-group-buy-packages) | [`dim_groupbuy_package.is_delete`](#dwd-dim-groupbuy-package) | 逻辑删除标志 |
| 32 | `max_selectable_categories` | integer | [`max_selectable_categories`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.max_selectable_categories`](#dwd-dim-groupbuy-package-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 33 | `area_tag_type` | integer | [`area_tag_type`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.area_tag_type`](#dwd-dim-groupbuy-package-ex) | 1 很可能代表“按台区标签限制”，例如 A区、中八区、包厢、KTV 等 |
| 34 | `creator_name` | text | [`creator_name`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.creator_name`](#dwd-dim-groupbuy-package-ex) | 创建人信息，一般包含“角色：姓名” |
| 35 | `create_time` | timestamp without time zone | [`create_time`](#api-group-buy-packages) | [`dim_groupbuy_package.create_time`](#dwd-dim-groupbuy-package) | 该套餐在系统中创建的时间 |
| 36 | `is_first_limit` | boolean | [`is_first_limit`](#api-group-buy-packages) | [`dim_groupbuy_package.is_first_limit`](#dwd-dim-groupbuy-package) | 是否首单限制 |
| 37 | `sort` | integer | [`sort`](#api-group-buy-packages) | [`dim_groupbuy_package.sort`](#dwd-dim-groupbuy-package) | 排序 |
| 38 | `tenantcouponsaleorderitemid` | bigint | [`tenantCouponSaleOrderItemId`](#api-group-buy-packages) | [`dim_groupbuy_package_ex.tenant_coupon_sale_order_item_id`](#dwd-dim-groupbuy-package-ex) | 租户券销售订单项ID |
| 39 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 40 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 41 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 42 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 43 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dim-groupbuy-package"></a>

#### DWD 表结构 — dwd.dim_groupbuy_package [🔗 ODS](#ods-group-buy-packages)

共 22 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `groupbuy_package_id` | bigint | [`id`](#ods-group-buy-packages) | 直接 | 团购套餐 ID |
| 2 | `tenant_id` | bigint | [`tenant_id`](#ods-group-buy-packages) | 直接 | 租户 ID（当前值: 2790683160709957） |
| 3 | `site_id` | bigint | [`site_id`](#ods-group-buy-packages) | 直接 | 门店 ID → dim_site（当前值: 2790685415443269） |
| 4 | `package_name` | character varying | [`package_name`](#ods-group-buy-packages) | 直接 | 套餐名称。**样本值**: "中八、斯诺克包厢两小时", "斯诺克两小时"等 |
| 5 | `package_template_id` | bigint | [`package_id`](#ods-group-buy-packages) | 直接 | 套餐模板 ID |
| 6 | `selling_price` | numeric | [`selling_price`](#ods-group-buy-packages) | 直接 | 售卖价格（每笔订单不同，从核销记录中dwd_groupbuy_redemption获取） |
| 7 | `coupon_face_value` | numeric | [`coupon_money`](#ods-group-buy-packages) | 直接 | 券面值（每笔订单不同，从核销记录中dwd_groupbuy_redemption获取） |
| 8 | `duration_seconds` | integer | [`duration`](#ods-group-buy-packages) | 直接 | 套餐时长（秒）。**样本值**: 3600=1小时, 7200=2小时, 14400=4小时 等 |
| 9 | `start_time` | timestamp with time zone | [`start_time`](#ods-group-buy-packages) | 直接 | 套餐生效开始时间 |
| 10 | `end_time` | timestamp with time zone | [`end_time`](#ods-group-buy-packages) | 直接 | 套餐生效结束时间 |
| 11 | `table_area_name` | character varying | [`table_area_name`](#ods-group-buy-packages) | 直接 | 适用台区名称。**枚举值**: "A区", "VIP包厢", "斯诺克区", "B区", "麻将房", "888" |
| 12 | `is_enabled` | integer | [`is_enabled`](#ods-group-buy-packages) | 直接 | 启用状态。**枚举值**: 1=启用, 2=停用 |
| 13 | `is_delete` | integer | [`is_delete`](#ods-group-buy-packages) | 直接 | 删除标记。**枚举值**: 0=未删除 |
| 14 | `create_time` | timestamp with time zone | [`create_time`](#ods-group-buy-packages) | 直接 | 创建时间 |
| 15 | `tenant_table_area_id_list` | character varying | [`tenant_table_area_id_list`](#ods-group-buy-packages) | 直接 | 租户级台区 ID 列表 |
| 16 | `card_type_ids` | character varying | [`card_type_ids`](#ods-group-buy-packages) | 直接 | 允许使用的卡类型 ID 列表（当前数据为 "0"） |
| 17 | `sort` | integer | [`sort`](#ods-group-buy-packages) | 直接 | 排序 |
| 18 | `is_first_limit` | boolean | [`is_first_limit`](#ods-group-buy-packages) | → boolean | 是否首单限制 |
| 19 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 版本生效时间 |
| 20 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 版本失效时间 |
| 21 | `scd2_is_current` | integer | — | SCD2 | 当前版本标记 |
| 22 | `scd2_version` | integer | — | SCD2 | 版本号 |

<a id="dwd-dim-groupbuy-package-ex"></a>

#### DWD 表结构 — dwd.dim_groupbuy_package_ex [🔗 ODS](#ods-group-buy-packages)

共 25 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `groupbuy_package_id` | bigint | [`id`](#ods-group-buy-packages) | 直接 | 字段重命名 |
| 2 | `site_name` | character varying | [`site_name`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 3 | `usable_count` | integer | [`usable_count`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 4 | `date_type` | integer | [`date_type`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 5 | `usable_range` | character varying | [`usable_range`](#ods-group-buy-packages) | 直接 | 维度字段，用于补充维度属性 |
| 6 | `date_info` | character varying | [`date_info`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 7 | `start_clock` | character varying | [`start_clock`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 8 | `end_clock` | character varying | [`end_clock`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 9 | `add_start_clock` | character varying | [`add_start_clock`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 10 | `add_end_clock` | character varying | [`add_end_clock`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 11 | `area_tag_type` | integer | [`area_tag_type`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 12 | `table_area_id` | bigint | [`table_area_id`](#ods-group-buy-packages) | 直接 | 标识类 ID 字段，用于关联/定位相关实体 |
| 13 | `tenant_table_area_id` | bigint | [`tenant_table_area_id`](#ods-group-buy-packages) | 直接 | 标识类 ID 字段，用于关联/定位相关实体 |
| 14 | `table_area_id_list` | character varying | [`table_area_id_list`](#ods-group-buy-packages) | 直接 | 维度字段，用于补充维度属性 |
| 15 | `group_type` | integer | [`group_type`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 16 | `system_group_type` | integer | [`system_group_type`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 17 | `package_type` | integer | [`type`](#ods-group-buy-packages) | 直接 | 字段重命名 |
| 18 | `effective_status` | integer | [`effective_status`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 19 | `max_selectable_categories` | integer | [`max_selectable_categories`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 20 | `creator_name` | character varying | [`creator_name`](#ods-group-buy-packages) | 直接 | 同名直传 |
| 21 | `tenant_coupon_sale_order_item_id` | bigint | [`tenantcouponsaleorderitemid`](#ods-group-buy-packages) | 直接 | 字段重命名 |
| 22 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 23 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 24 | `scd2_is_current` | integer | — | SCD2 | SCD2 元数据 |
| 25 | `scd2_version` | integer | — | SCD2 | SCD2 元数据 |

### 3.15 group_buy_redemption_records（团购套餐核销）

- 任务代码：`ODS_GROUP_BUY_REDEMPTION`
- 采样记录数：200
- API JSON 字段数：52
- ODS 列数：57
- DWD 目标表：dwd_groupbuy_redemption, dwd_groupbuy_redemption_ex

<a id="api-group-buy-redemption-records"></a>

#### API 源字段 — group_buy_redemption_records [🔗 ODS](#ods-group-buy-redemption-records)

已映射 52/52，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `tableName` | string | [`tablename`](#ods-group-buy-redemption-records) | （待补充） | 大小写匹配；枚举值: `A15`, `A4`, `S4`, `A3`, `A1`, `A9`, `A17`, `A8` |
| 2 | `tableAreaName` | string | [`tableareaname`](#ods-group-buy-redemption-records) | （待补充） | 大小写匹配；枚举值: `A区`, `斯诺克区`, `B区`, `麻将房` |
| 3 | `siteName` | string | [`sitename`](#ods-group-buy-redemption-records) | （待补充） | 大小写匹配；示例: `朗朗桌球` |
| 4 | `goodsOptionPrice` | number | [`goodsoptionprice`](#ods-group-buy-redemption-records) | （待补充） | 大小写匹配；示例: `0.0` |
| 5 | `id` | integer | [`id`](#ods-group-buy-redemption-records) | 本条“团购套餐流水”记录的 主键 ID | 枚举值: `3093859292088645`, `3093855577786629`, `3093804251662661`, `3093800357562565`, `3093793885882629`, `3093774985857157`, `3093761348159621`, `3093749943830789` |
| 6 | `assistant_promotion_money` | number | [`assistant_promotion_money`](#ods-group-buy-redemption-records) | 分摊到“助教服务”的促销金额 | 示例: `0.0` |
| 7 | `assistant_service_promotion_money` | number | [`assistant_service_promotion_money`](#ods-group-buy-redemption-records) | 进一步细分助教服务的促销金额 | 示例: `0.0` |
| 8 | `assistant_service_share_money` | number | [`assistant_service_share_money`](#ods-group-buy-redemption-records) | 助教服务分摊金额 | 示例: `0.0` |
| 9 | `assistant_share_money` | number | [`assistant_share_money`](#ods-group-buy-redemption-records) | 助教分摊金额 | 示例: `0.0` |
| 10 | `coupon_code` | string | [`coupon_code`](#ods-group-buy-redemption-records) | 团购券券码，核销时扫描/录入的字符串 | 枚举值: `0107305319597`, `0108970935413`, `0103968076185`, `0101346097990`, `0107317733529`, `0102409858353`, `0102774179020`, `0103957102485` |
| 11 | `coupon_money` | number | [`coupon_money`](#ods-group-buy-redemption-records) | 本次核销时，这张券在门店侧对应的金额额度（“可抵扣金额”） | 枚举值: `96.0`, `48.0`, `68.0`, `136.0`, `116.0`, `288.0`, `58.0` |
| 12 | `coupon_origin_id` | integer | [`coupon_origin_id`](#ods-group-buy-redemption-records) | 平台/上游系统中的券记录主键 ID，“券来源 ID” | 枚举值: `3093740768184645`, `3093784063412357`, `3093729957169285`, `3093681906993285`, `3093730736834693`, `3093720619157701`, `3093641950333253`, `3093689829460293` |
| 13 | `create_time` | string | [`create_time`](#ods-group-buy-redemption-records) | 本条团购套餐使用流水创建时间（即券核销时间，或与结账时间接近） | 枚举值: `2026-02-14 00:16:27`, `2026-02-14 00:12:40`, `2026-02-13 23:20:28`, `2026-02-13 23:16:30`, `2026-02-13 23:09:55`, `2026-02-13 22:50:42`, `2026-02-13 22:36:49`, `2026-02-13 22:25:13` |
| 14 | `good_service_share_money` | number | [`good_service_share_money`](#ods-group-buy-redemption-records) | 商品服务分摊金额 | 示例: `0.0` |
| 15 | `goods_promotion_money` | number | [`goods_promotion_money`](#ods-group-buy-redemption-records) | 本次券使用中，分摊到“商品”部分的促销金额 | 示例: `0.0` |
| 16 | `goods_share_money` | number | [`goods_share_money`](#ods-group-buy-redemption-records) | 商品分摊金额 | 示例: `0.0` |
| 17 | `is_delete` | integer | [`is_delete`](#ods-group-buy-redemption-records) | 逻辑删除标记（0=否，1=是） | 示例: `0` |
| 18 | `is_single_order` | integer | [`is_single_order`](#ods-group-buy-redemption-records) | 是否单独作为一条订单行 | 示例: `1` |
| 19 | `ledger_amount` | number | [`ledger_amount`](#ods-group-buy-redemption-records) | 本次券实际冲抵台费的金额 | 枚举值: `96.0`, `48.0`, `68.0`, `44.2`, `136.0`, `113.66`, `116.0`, `38.16` |
| 20 | `ledger_count` | integer | [`ledger_count`](#ods-group-buy-redemption-records) | 按此次优惠实际计算的“核销秒数” | 枚举值: `7200`, `3600`, `3315`, `7055`, `2862`, `3273`, `14400`, `3197` |
| 21 | `ledger_group_name` | string | [`ledger_group_name`](#ods-group-buy-redemption-records) | 团购项目所属的“记账分组名称”（例如“团购台费”“团购包厢”等） |  |
| 22 | `ledger_name` | string | [`ledger_name`](#ods-group-buy-redemption-records) | 台费侧关联的“团购项目名称”（记账名） | 枚举值: `全天A区中八两小时`, `全天A区中八一小时`, `全天斯诺克一小时`, `斯诺克两小时`, `全天B区中八两小时`, `麻将包厢4小时`, `B区桌球一小时`, `新人特惠一小时` |
| 23 | `ledger_status` | integer | [`ledger_status`](#ods-group-buy-redemption-records) | 流水状态 | 示例: `1` |
| 24 | `ledger_unit_price` | number | [`ledger_unit_price`](#ods-group-buy-redemption-records) | 对应台费的标准单价，单位元/小时（从数值来看是类似29.9/小时这种定价） | 枚举值: `39.9`, `20.26`, `69.9`, `59.9`, `128.0`, `35.9`, `12.12`, `9.9` |
| 25 | `offer_type` | integer | [`offer_type`](#ods-group-buy-redemption-records) | 优惠类型 | 示例: `1` |
| 26 | `operator_id` | integer | [`operator_id`](#ods-group-buy-redemption-records) | 执行本次核销/结算操作的 操作员 ID | 示例: `2790687322443013` |
| 27 | `operator_name` | string | [`operator_name`](#ods-group-buy-redemption-records) | 操作员名称（包含角色说明），与 operator_id 对应的冗余展示字段 | 示例: `收银员:郑丽珊` |
| 28 | `order_coupon_channel` | integer | [`order_coupon_channel`](#ods-group-buy-redemption-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 示例: `1` |
| 29 | `order_coupon_id` | integer | [`order_coupon_id`](#ods-group-buy-redemption-records) | 订单中“券使用记录”的 ID | 枚举值: `3093740768184645`, `3093784063412357`, `3093729957169285`, `3093681906993285`, `3093730736834693`, `3093720619157701`, `3093641950333253`, `3093689829460293` |
| 30 | `order_pay_id` | integer | [`order_pay_id`](#ods-group-buy-redemption-records) | 指向支付记录表中的支付流水 ID | 示例: `0` |
| 31 | `order_settle_id` | integer | [`order_settle_id`](#ods-group-buy-redemption-records) | 结算单 ID（小票结账主键） | 枚举值: `3093859276196037`, `3093855537596549`, `3093804233967877`, `3093800338802821`, `3093793847478597`, `3093774959741061`, `3093761316341957`, `3093749870790789` |
| 32 | `order_trade_no` | integer | [`order_trade_no`](#ods-group-buy-redemption-records) | 订单交易号，和其它消费明细（台费、商品、助教、团购）共用的订单主键 | 枚举值: `3093740766775621`, `3093784062036101`, `3093729955563653`, `3093681905567877`, `3093730735376517`, `3093720617519301`, `3093641948924229`, `3093689828067653` |
| 33 | `promotion_activity_id` | integer | [`promotion_activity_id`](#ods-group-buy-redemption-records) | 团购/促销活动 ID | 枚举值: `3093740765382981`, `3093784060856453`, `3093729952467077`, `3093681904502917`, `3093730734033029`, `3093720616372421`, `3093641947482437`, `3093689826576709` |
| 34 | `promotion_coupon_id` | integer | [`promotion_coupon_id`](#ods-group-buy-redemption-records) | 团购套餐定义 ID | 枚举值: `3030874716834757`, `3030872476945477`, `3030025905916997`, `3035353129373509`, `3030874133269445`, `3029784419027909`, `2861343275830405`, `3031000036133445` |
| 35 | `promotion_seconds` | integer | [`promotion_seconds`](#ods-group-buy-redemption-records) | 团购套餐定义的“标准时长”（券本身标称的可用时长） | 枚举值: `7200`, `3600`, `14400` |
| 36 | `recharge_promotion_money` | number | [`recharge_promotion_money`](#ods-group-buy-redemption-records) | 来自“充值类优惠”的分摊金额（例如储值赠送部分） | 示例: `0.0` |
| 37 | `recharge_share_money` | number | [`recharge_share_money`](#ods-group-buy-redemption-records) | 充值分摊金额 | 示例: `0.0` |
| 38 | `reward_promotion_money` | number | [`reward_promotion_money`](#ods-group-buy-redemption-records) | 本次促销中，属于“奖励金/积分抵扣”的金额 | 示例: `0.0` |
| 39 | `sales_man_org_id` | integer | [`sales_man_org_id`](#ods-group-buy-redemption-records) | 营业员所属组织 ID | 示例: `0` |
| 40 | `salesman_name` | string | [`salesman_name`](#ods-group-buy-redemption-records) | 营业员姓名 |  |
| 41 | `salesman_role_id` | integer | [`salesman_role_id`](#ods-group-buy-redemption-records) | 营业员角色 ID | 示例: `0` |
| 42 | `salesman_user_id` | integer | [`salesman_user_id`](#ods-group-buy-redemption-records) | 营业员/业务员用户 ID | 示例: `0` |
| 43 | `site_id` | integer | [`site_id`](#ods-group-buy-redemption-records) | 门店 ID，与其它 JSON 中一致 | 示例: `2790685415443269` |
| 44 | `table_charge_seconds` | integer | [`table_charge_seconds`](#ods-group-buy-redemption-records) | 本次结算中该球台总计计费的秒数（整台的台费计费时间） | 枚举值: `7200`, `3600`, `3315`, `7055`, `2862`, `10800`, `3273`, `14400` |
| 45 | `table_id` | integer | [`table_id`](#ods-group-buy-redemption-records) | 球台 ID | 枚举值: `2793003506815045`, `2793001904918661`, `2793020260044869`, `2793001695301765`, `2791964216463493`, `2793002980429893`, `2793003705192517`, `2793002896494725` |
| 46 | `table_service_promotion_money` | number | [`table_service_promotion_money`](#ods-group-buy-redemption-records) | 本次券使用中，分摊到“台费服务费”部分的促销金额 | 示例: `0.0` |
| 47 | `table_service_share_money` | number | [`table_service_share_money`](#ods-group-buy-redemption-records) | 台费服务分摊金额 | 示例: `0.0` |
| 48 | `table_share_money` | number | [`table_share_money`](#ods-group-buy-redemption-records) | 台费分摊金额 | 枚举值: `39.9`, `20.26`, `69.9`, `59.9`, `128.0`, `35.9`, `12.12`, `9.9` |
| 49 | `tenant_id` | integer | [`tenant_id`](#ods-group-buy-redemption-records) | 租户/品牌 ID | 示例: `2790683160709957` |
| 50 | `tenant_table_area_id` | integer | [`tenant_table_area_id`](#ods-group-buy-redemption-records) | 租户级台区分组 ID，表示当前使用券的台桌所属的区域组合 | 枚举值: `2791960001957765`, `2791961347968901`, `2791960521691013`, `2791962314215301` |
| 51 | `coupon_sale_id` | integer | [`coupon_sale_id`](#ods-group-buy-redemption-records) | 优惠券销售ID | 示例: `0` |
| 52 | `member_discount_money` | number | [`member_discount_money`](#ods-group-buy-redemption-records) | 会员折扣金额 | 示例: `0.0` |

<a id="ods-group-buy-redemption-records"></a>

#### ODS 表结构 — ods.group_buy_redemption_records [🔗 API](#api-group-buy-redemption-records)

共 57 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.redemption_id`](#dwd-dwd-groupbuy-redemption), [`dwd_groupbuy_redemption_ex.redemption_id`](#dwd-dwd-groupbuy-redemption-ex) | 本条“团购套餐流水”记录的 主键 ID |
| 2 | `tenant_id` | bigint | [`tenant_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.tenant_id`](#dwd-dwd-groupbuy-redemption) | 租户/品牌 ID |
| 3 | `site_id` | bigint | [`site_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.site_id`](#dwd-dwd-groupbuy-redemption) | 门店 ID，与其它 JSON 中一致 |
| 4 | `sitename` | text | [`siteName`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.site_name`](#dwd-dwd-groupbuy-redemption-ex) | （待补充） |
| 5 | `table_id` | bigint | [`table_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.table_id`](#dwd-dwd-groupbuy-redemption) | 球台 ID |
| 6 | `tablename` | text | [`tableName`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.table_name`](#dwd-dwd-groupbuy-redemption-ex) | （待补充） |
| 7 | `tableareaname` | text | [`tableAreaName`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.table_area_name`](#dwd-dwd-groupbuy-redemption-ex) | （待补充） |
| 8 | `tenant_table_area_id` | bigint | [`tenant_table_area_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.tenant_table_area_id`](#dwd-dwd-groupbuy-redemption) | 租户级台区分组 ID，表示当前使用券的台桌所属的区域组合 |
| 9 | `order_trade_no` | text | [`order_trade_no`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.order_trade_no`](#dwd-dwd-groupbuy-redemption) | 订单交易号，和其它消费明细（台费、商品、助教、团购）共用的订单主键 |
| 10 | `order_settle_id` | bigint | [`order_settle_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.order_settle_id`](#dwd-dwd-groupbuy-redemption) | 结算单 ID（小票结账主键） |
| 11 | `order_pay_id` | bigint | [`order_pay_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.order_pay_id`](#dwd-dwd-groupbuy-redemption-ex) | 指向支付记录表中的支付流水 ID |
| 12 | `order_coupon_id` | bigint | [`order_coupon_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.order_coupon_id`](#dwd-dwd-groupbuy-redemption) | 订单中“券使用记录”的 ID |
| 13 | `order_coupon_channel` | integer | [`order_coupon_channel`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.order_coupon_channel`](#dwd-dwd-groupbuy-redemption) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 14 | `coupon_code` | text | [`coupon_code`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.coupon_code`](#dwd-dwd-groupbuy-redemption) | 团购券券码，核销时扫描/录入的字符串 |
| 15 | `coupon_money` | numeric | [`coupon_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.coupon_money`](#dwd-dwd-groupbuy-redemption) | 本次核销时，这张券在门店侧对应的金额额度（“可抵扣金额”） |
| 16 | `coupon_origin_id` | bigint | [`coupon_origin_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.coupon_origin_id`](#dwd-dwd-groupbuy-redemption) | 平台/上游系统中的券记录主键 ID，“券来源 ID” |
| 17 | `ledger_name` | text | [`ledger_name`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.ledger_name`](#dwd-dwd-groupbuy-redemption) | 台费侧关联的“团购项目名称”（记账名） |
| 18 | `ledger_group_name` | text | [`ledger_group_name`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.ledger_group_name`](#dwd-dwd-groupbuy-redemption-ex) | 团购项目所属的“记账分组名称”（例如“团购台费”“团购包厢”等） |
| 19 | `ledger_amount` | numeric | [`ledger_amount`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.ledger_amount`](#dwd-dwd-groupbuy-redemption) | 本次券实际冲抵台费的金额 |
| 20 | `ledger_count` | numeric | [`ledger_count`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.ledger_count`](#dwd-dwd-groupbuy-redemption) | 按此次优惠实际计算的“核销秒数” |
| 21 | `ledger_unit_price` | numeric | [`ledger_unit_price`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.ledger_unit_price`](#dwd-dwd-groupbuy-redemption) | 对应台费的标准单价，单位元/小时（从数值来看是类似29.9/小时这种定价） |
| 22 | `ledger_status` | integer | [`ledger_status`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.ledger_status`](#dwd-dwd-groupbuy-redemption-ex) | 流水状态 |
| 23 | `table_charge_seconds` | integer | [`table_charge_seconds`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.table_charge_seconds`](#dwd-dwd-groupbuy-redemption) | 本次结算中该球台总计计费的秒数（整台的台费计费时间） |
| 24 | `promotion_activity_id` | bigint | [`promotion_activity_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.promotion_activity_id`](#dwd-dwd-groupbuy-redemption) | 团购/促销活动 ID |
| 25 | `promotion_coupon_id` | bigint | [`promotion_coupon_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.promotion_coupon_id`](#dwd-dwd-groupbuy-redemption) | 团购套餐定义 ID |
| 26 | `promotion_seconds` | integer | [`promotion_seconds`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.promotion_seconds`](#dwd-dwd-groupbuy-redemption) | 团购套餐定义的“标准时长”（券本身标称的可用时长） |
| 27 | `offer_type` | integer | [`offer_type`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.offer_type`](#dwd-dwd-groupbuy-redemption-ex) | 优惠类型 |
| 28 | `assistant_promotion_money` | numeric | [`assistant_promotion_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.assistant_promotion_money`](#dwd-dwd-groupbuy-redemption-ex) | 分摊到“助教服务”的促销金额 |
| 29 | `assistant_service_promotion_money` | numeric | [`assistant_service_promotion_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.assistant_service_promotion_money`](#dwd-dwd-groupbuy-redemption-ex) | 进一步细分助教服务的促销金额 |
| 30 | `table_service_promotion_money` | numeric | [`table_service_promotion_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.table_service_promotion_money`](#dwd-dwd-groupbuy-redemption-ex) | 本次券使用中，分摊到“台费服务费”部分的促销金额 |
| 31 | `goods_promotion_money` | numeric | [`goods_promotion_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.goods_promotion_money`](#dwd-dwd-groupbuy-redemption-ex) | 本次券使用中，分摊到“商品”部分的促销金额 |
| 32 | `recharge_promotion_money` | numeric | [`recharge_promotion_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.recharge_promotion_money`](#dwd-dwd-groupbuy-redemption-ex) | 来自“充值类优惠”的分摊金额（例如储值赠送部分） |
| 33 | `reward_promotion_money` | numeric | [`reward_promotion_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.reward_promotion_money`](#dwd-dwd-groupbuy-redemption-ex) | 本次促销中，属于“奖励金/积分抵扣”的金额 |
| 34 | `goodsoptionprice` | numeric | [`goodsOptionPrice`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.goods_option_price`](#dwd-dwd-groupbuy-redemption-ex) | （待补充） |
| 35 | `salesman_name` | text | [`salesman_name`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.salesman_name`](#dwd-dwd-groupbuy-redemption-ex) | 营业员姓名 |
| 36 | `sales_man_org_id` | bigint | [`sales_man_org_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.salesman_org_id`](#dwd-dwd-groupbuy-redemption-ex) | 营业员所属组织 ID |
| 37 | `salesman_role_id` | bigint | [`salesman_role_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.salesman_role_id`](#dwd-dwd-groupbuy-redemption-ex) | 营业员角色 ID |
| 38 | `salesman_user_id` | bigint | [`salesman_user_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.salesman_user_id`](#dwd-dwd-groupbuy-redemption-ex) | 营业员/业务员用户 ID |
| 39 | `operator_id` | bigint | [`operator_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.operator_id`](#dwd-dwd-groupbuy-redemption-ex) | 执行本次核销/结算操作的 操作员 ID |
| 40 | `operator_name` | text | [`operator_name`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.operator_name`](#dwd-dwd-groupbuy-redemption-ex) | 操作员名称（包含角色说明），与 operator_id 对应的冗余展示字段 |
| 41 | `is_single_order` | integer | [`is_single_order`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.is_single_order`](#dwd-dwd-groupbuy-redemption) | 是否单独作为一条订单行 |
| 42 | `is_delete` | integer | [`is_delete`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.is_delete`](#dwd-dwd-groupbuy-redemption) | 逻辑删除标记（0=否，1=是） |
| 43 | `create_time` | timestamp without time zone | [`create_time`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.create_time`](#dwd-dwd-groupbuy-redemption) | 本条团购套餐使用流水创建时间（即券核销时间，或与结账时间接近） |
| 44 | `assistant_service_share_money` | numeric | [`assistant_service_share_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.assistant_service_share_money`](#dwd-dwd-groupbuy-redemption-ex) | 助教服务分摊金额 |
| 45 | `assistant_share_money` | numeric | [`assistant_share_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.assistant_share_money`](#dwd-dwd-groupbuy-redemption-ex) | 助教分摊金额 |
| 46 | `coupon_sale_id` | bigint | [`coupon_sale_id`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.coupon_sale_id`](#dwd-dwd-groupbuy-redemption) | 优惠券销售ID |
| 47 | `good_service_share_money` | numeric | [`good_service_share_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.good_service_share_money`](#dwd-dwd-groupbuy-redemption-ex) | 商品服务分摊金额 |
| 48 | `goods_share_money` | numeric | [`goods_share_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.goods_share_money`](#dwd-dwd-groupbuy-redemption-ex) | 商品分摊金额 |
| 49 | `member_discount_money` | numeric | [`member_discount_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption.member_discount_money`](#dwd-dwd-groupbuy-redemption) | 会员折扣金额 |
| 50 | `recharge_share_money` | numeric | [`recharge_share_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.recharge_share_money`](#dwd-dwd-groupbuy-redemption-ex) | 充值分摊金额 |
| 51 | `table_service_share_money` | numeric | [`table_service_share_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.table_service_share_money`](#dwd-dwd-groupbuy-redemption-ex) | 台费服务分摊金额 |
| 52 | `table_share_money` | numeric | [`table_share_money`](#api-group-buy-redemption-records) | [`dwd_groupbuy_redemption_ex.table_share_money`](#dwd-dwd-groupbuy-redemption-ex) | 台费分摊金额 |
| 53 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |
| 54 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 55 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 56 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 57 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |

<a id="dwd-dwd-groupbuy-redemption"></a>

#### DWD 表结构 — dwd.dwd_groupbuy_redemption [🔗 ODS](#ods-group-buy-redemption-records)

共 25 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `redemption_id` | bigint | [`id`](#ods-group-buy-redemption-records) | 直接 | 核销 ID |
| 2 | `tenant_id` | bigint | [`tenant_id`](#ods-group-buy-redemption-records) | 直接 | 租户 ID |
| 3 | `site_id` | bigint | [`site_id`](#ods-group-buy-redemption-records) | 直接 | 门店 ID |
| 4 | `table_id` | bigint | [`table_id`](#ods-group-buy-redemption-records) | 直接 | 台桌 ID → dim_table |
| 5 | `tenant_table_area_id` | bigint | [`tenant_table_area_id`](#ods-group-buy-redemption-records) | 直接 | 台区 ID |
| 6 | `table_charge_seconds` | integer | [`table_charge_seconds`](#ods-group-buy-redemption-records) | 直接 | 台费计费时长（秒）。**样本值**: 3600=1h, 7200=2h, 10800=3h 等 |
| 7 | `order_trade_no` | bigint | [`order_trade_no`](#ods-group-buy-redemption-records) | 直接 | 订单号 |
| 8 | `order_settle_id` | bigint | [`order_settle_id`](#ods-group-buy-redemption-records) | 直接 | 结账单 ID → dwd_settlement_head |
| 9 | `order_coupon_id` | bigint | [`order_coupon_id`](#ods-group-buy-redemption-records) | 直接 | 订单券 ID |
| 10 | `coupon_origin_id` | bigint | [`coupon_origin_id`](#ods-group-buy-redemption-records) | 直接 | 券来源 ID |
| 11 | `promotion_activity_id` | bigint | [`promotion_activity_id`](#ods-group-buy-redemption-records) | 直接 | 促销活动 ID |
| 12 | `promotion_coupon_id` | bigint | [`promotion_coupon_id`](#ods-group-buy-redemption-records) | 直接 | 促销券 ID → dim_groupbuy_package |
| 13 | `order_coupon_channel` | integer | [`order_coupon_channel`](#ods-group-buy-redemption-records) | 直接 | 券渠道。**枚举值**: 1=美团, 2=抖音 |
| 14 | `ledger_unit_price` | numeric | [`ledger_unit_price`](#ods-group-buy-redemption-records) | 直接 | 单价（元）。**样本值**: 29.90, 12.12, 11.11, 39.90 等 |
| 15 | `ledger_count` | integer | [`ledger_count`](#ods-group-buy-redemption-records) | 直接 | 计费数量（秒）。**样本值**: 3600=1h, 7200=2h 等 |
| 16 | `ledger_amount` | numeric | [`ledger_amount`](#ods-group-buy-redemption-records) | 直接 | 账本金额（元）。**样本值**: 48.00, 96.00, 68.00 等 |
| 17 | `coupon_money` | numeric | [`coupon_money`](#ods-group-buy-redemption-records) | 直接 | 券面额（元）。**样本值**: 48.00, 116.00, 96.00, 68.00 等 |
| 18 | `promotion_seconds` | integer | [`promotion_seconds`](#ods-group-buy-redemption-records) | 直接 | 促销时长（秒）。**样本值**: 3600=1h, 7200=2h, 14400=4h 等 |
| 19 | `coupon_code` | character varying | [`coupon_code`](#ods-group-buy-redemption-records) | 直接 | 券码 |
| 20 | `is_single_order` | integer | [`is_single_order`](#ods-group-buy-redemption-records) | 直接 | 是否独立订单。**枚举值**: 0=否, 1=是 |
| 21 | `is_delete` | integer | [`is_delete`](#ods-group-buy-redemption-records) | 直接 | 删除标记。**枚举值**: 0=未删除 |
| 22 | `ledger_name` | character varying | [`ledger_name`](#ods-group-buy-redemption-records) | 直接 | 套餐名称。**样本值**: "全天A区中八一小时", "中八A区新人特惠一小时" 等 |
| 23 | `create_time` | timestamp with time zone | [`create_time`](#ods-group-buy-redemption-records) | 直接 | 创建时间 |
| 24 | `member_discount_money` | numeric | [`member_discount_money`](#ods-group-buy-redemption-records) | 直接 | 会员折扣金额 |
| 25 | `coupon_sale_id` | bigint | [`coupon_sale_id`](#ods-group-buy-redemption-records) | 直接 | 优惠券销售 ID |

<a id="dwd-dwd-groupbuy-redemption-ex"></a>

#### DWD 表结构 — dwd.dwd_groupbuy_redemption_ex [🔗 ODS](#ods-group-buy-redemption-records)

共 28 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `redemption_id` | bigint | [`id`](#ods-group-buy-redemption-records) | 直接 | 字段重命名 |
| 2 | `site_name` | character varying | [`sitename`](#ods-group-buy-redemption-records) | 直接 | 字段重命名 |
| 3 | `table_name` | character varying | [`tablename`](#ods-group-buy-redemption-records) | 直接 | 字段重命名 |
| 4 | `table_area_name` | character varying | [`tableareaname`](#ods-group-buy-redemption-records) | 直接 | 字段重命名 |
| 5 | `order_pay_id` | bigint | [`order_pay_id`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 6 | `goods_option_price` | numeric | [`goodsoptionprice`](#ods-group-buy-redemption-records) | 直接 | 字段重命名 |
| 7 | `goods_promotion_money` | numeric | [`goods_promotion_money`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 8 | `table_service_promotion_money` | numeric | [`table_service_promotion_money`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 9 | `assistant_promotion_money` | numeric | [`assistant_promotion_money`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 10 | `assistant_service_promotion_money` | numeric | [`assistant_service_promotion_money`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 11 | `reward_promotion_money` | numeric | [`reward_promotion_money`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 12 | `recharge_promotion_money` | numeric | [`recharge_promotion_money`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 13 | `offer_type` | integer | [`offer_type`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 14 | `ledger_status` | integer | [`ledger_status`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 15 | `operator_id` | bigint | [`operator_id`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 16 | `operator_name` | character varying | [`operator_name`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 17 | `salesman_user_id` | bigint | [`salesman_user_id`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 18 | `salesman_name` | character varying | [`salesman_name`](#ods-group-buy-redemption-records) | 直接 | 名称字段，用于展示与辅助识别 |
| 19 | `salesman_role_id` | bigint | [`salesman_role_id`](#ods-group-buy-redemption-records) | 直接 | 同名直传 |
| 20 | `salesman_org_id` | bigint | [`sales_man_org_id`](#ods-group-buy-redemption-records) | 直接 | 字段重命名 |
| 21 | `ledger_group_name` | character varying | [`ledger_group_name`](#ods-group-buy-redemption-records) | 直接 | 名称字段，用于展示与辅助识别 |
| 22 | `table_share_money` | numeric | [`table_share_money`](#ods-group-buy-redemption-records) | 直接 |  |
| 23 | `table_service_share_money` | numeric | [`table_service_share_money`](#ods-group-buy-redemption-records) | 直接 |  |
| 24 | `goods_share_money` | numeric | [`goods_share_money`](#ods-group-buy-redemption-records) | 直接 |  |
| 25 | `good_service_share_money` | numeric | [`good_service_share_money`](#ods-group-buy-redemption-records) | 直接 |  |
| 26 | `assistant_share_money` | numeric | [`assistant_share_money`](#ods-group-buy-redemption-records) | 直接 |  |
| 27 | `assistant_service_share_money` | numeric | [`assistant_service_share_money`](#ods-group-buy-redemption-records) | 直接 |  |
| 28 | `recharge_share_money` | numeric | [`recharge_share_money`](#ods-group-buy-redemption-records) | 直接 |  |

### 3.16 goods_stock_summary（库存汇总）

- 任务代码：`ODS_INVENTORY_STOCK`
- 采样记录数：173
- API JSON 字段数：14
- ODS 列数：19
- DWD 目标表：—（仅 ODS 落地）

<a id="api-goods-stock-summary"></a>

#### API 源字段 — goods_stock_summary [🔗 ODS](#ods-goods-stock-summary)

已映射 14/14，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `siteGoodsId` | integer | [`sitegoodsid`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；枚举值: `3089190204491141`, `3073782716778501`, `3069455725923269`, `3053572251340677`, `3047846073076101`, `3028609051954117`, `3004536125639493`, `2994236295696133` |
| 2 | `goodsName` | string | [`goodsname`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；枚举值: `小合味道`, `无穷单个鸡爪`, `大瓶蓝妹`, `金银花凉茶`, `乌龙茶香槟榔`, `酱香爆珠槟榔`, `哇米诺豆奶`, `黄鹤楼` |
| 3 | `goodsUnit` | string | [`goodsunit`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；枚举值: `桶`, `包`, `瓶`, `罐`, `杯`, `份`, `张`, `个` |
| 4 | `goodsCategoryId` | integer | [`goodscategoryid`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；枚举值: `2791941988405125`, `2790683528350539`, `2790683528350533`, `2792062778003333`, `2793217944864581`, `2790683528350545`, `2790683528350535`, `2793220945250117` |
| 5 | `goodsCategorySecondId` | integer | [`goodscategorysecondid`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；枚举值: `2793236829620037`, `2791948300259205`, `2790683528350541`, `2790683528350540`, `2790683528350534`, `2792063209623429`, `2793218343257925`, `2792050275864453` |
| 6 | `rangeStartStock` | integer | [`rangestartstock`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；枚举值: `21`, `33`, `28`, `12`, `0`, `3`, `5`, `22` |
| 7 | `rangeEndStock` | integer | [`rangeendstock`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；枚举值: `21`, `33`, `28`, `12`, `0`, `3`, `5`, `22` |
| 8 | `rangeIn` | integer | [`rangein`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；示例: `0` |
| 9 | `rangeOut` | integer | [`rangeout`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；示例: `0` |
| 10 | `rangeInventory` | integer | [`rangeinventory`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；示例: `0` |
| 11 | `rangeSale` | integer | [`rangesale`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；示例: `0` |
| 12 | `rangeSaleMoney` | number | [`rangesalemoney`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；示例: `0.0` |
| 13 | `currentStock` | integer | [`currentstock`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；枚举值: `21`, `33`, `28`, `12`, `0`, `3`, `5`, `22` |
| 14 | `categoryName` | string | [`categoryname`](#ods-goods-stock-summary) | （待补充） | 大小写匹配；枚举值: `零食`, `酒水`, `槟榔`, `香烟`, `其他`, `果盘`, `器材`, `小吃` |

<a id="ods-goods-stock-summary"></a>

#### ODS 表结构 — ods.goods_stock_summary [🔗 API](#api-goods-stock-summary)

共 19 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `sitegoodsid` | bigint | [`siteGoodsId`](#api-goods-stock-summary) | — | （待补充） |
| 2 | `goodsname` | text | [`goodsName`](#api-goods-stock-summary) | — | （待补充） |
| 3 | `goodsunit` | text | [`goodsUnit`](#api-goods-stock-summary) | — | （待补充） |
| 4 | `goodscategoryid` | bigint | [`goodsCategoryId`](#api-goods-stock-summary) | — | （待补充） |
| 5 | `goodscategorysecondid` | bigint | [`goodsCategorySecondId`](#api-goods-stock-summary) | — | （待补充） |
| 6 | `categoryname` | text | [`categoryName`](#api-goods-stock-summary) | — | （待补充） |
| 7 | `rangestartstock` | numeric | [`rangeStartStock`](#api-goods-stock-summary) | — | （待补充） |
| 8 | `rangeendstock` | numeric | [`rangeEndStock`](#api-goods-stock-summary) | — | （待补充） |
| 9 | `rangein` | numeric | [`rangeIn`](#api-goods-stock-summary) | — | （待补充） |
| 10 | `rangeout` | numeric | [`rangeOut`](#api-goods-stock-summary) | — | （待补充） |
| 11 | `rangesale` | numeric | [`rangeSale`](#api-goods-stock-summary) | — | （待补充） |
| 12 | `rangesalemoney` | numeric | [`rangeSaleMoney`](#api-goods-stock-summary) | — | （待补充） |
| 13 | `rangeinventory` | numeric | [`rangeInventory`](#api-goods-stock-summary) | — | （待补充） |
| 14 | `currentstock` | numeric | [`currentStock`](#api-goods-stock-summary) | — | （待补充） |
| 15 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 16 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 17 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 18 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 19 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

### 3.17 goods_stock_movements（库存变化记录）

- 任务代码：`ODS_INVENTORY_CHANGE`
- 采样记录数：200
- API JSON 字段数：19
- ODS 列数：24
- DWD 目标表：—（仅 ODS 落地）

<a id="api-goods-stock-movements"></a>

#### API 源字段 — goods_stock_movements [🔗 ODS](#ods-goods-stock-movements)

已映射 19/19，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `siteGoodsStockId` | integer | [`sitegoodsstockid`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；枚举值: `3093864105101509`, `3093838482901317`, `3093793750665542`, `3093746072013125`, `3093710576699717`, `3093707436935493`, `3093706718922885`, `3093703198542021` |
| 2 | `siteGoodsId` | integer | [`sitegoodsid`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；枚举值: `3004536125639493`, `2793026176012357`, `2793026183041093`, `2793026185154629`, `2828836772432837`, `2793025862799429`, `2793026180501573`, `2794695801409669` |
| 3 | `siteId` | integer | [`siteid`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；示例: `2790685415443269` |
| 4 | `tenantId` | integer | [`tenantid`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；示例: `2790683160709957` |
| 5 | `stockType` | integer | [`stocktype`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；枚举值: `1`, `4` |
| 6 | `goodsName` | string | [`goodsname`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；枚举值: `哇米诺豆奶`, `哇哈哈矿泉水`, `可乐`, `百威235毫升`, `打火机`, `软玉溪`, `东鹏特饮`, `普通扑克` |
| 7 | `createTime` | string | [`createtime`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；枚举值: `2026-02-14 00:21:21`, `2026-02-13 23:55:17`, `2026-02-13 23:09:47`, `2026-02-13 22:21:17`, `2026-02-13 21:45:10`, `2026-02-13 21:41:59`, `2026-02-13 21:41:15`, `2026-02-13 21:37:40` |
| 8 | `startNum` | integer | [`startnum`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；枚举值: `4`, `9`, `68`, `429`, `194`, `5`, `69`, `8` |
| 9 | `endNum` | integer | [`endnum`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；枚举值: `3`, `8`, `66`, `423`, `193`, `4`, `68`, `7` |
| 10 | `changeNum` | integer | [`changenum`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；枚举值: `-1`, `-2`, `-6`, `2`, `1`, `-12`, `-4`, `3` |
| 11 | `unit` | string | [`unit`](#ods-goods-stock-movements) | 库存计量单位 | 枚举值: `瓶`, `支`, `包`, `盒`, `个`, `桶`, `根`, `份` |
| 12 | `price` | number | [`price`](#ods-goods-stock-movements) | 商品单价（单位金额） | 枚举值: `10.0`, `5.0`, `15.0`, `2.0`, `28.0`, `7.0`, `125.0`, `8.0` |
| 13 | `operatorName` | string | [`operatorname`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；示例: `收银员:郑丽珊` |
| 14 | `changeNumA` | integer | [`changenuma`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；示例: `0` |
| 15 | `startNumA` | integer | [`startnuma`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；示例: `0` |
| 16 | `endNumA` | integer | [`endnuma`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；示例: `0` |
| 17 | `remark` | string | [`remark`](#ods-goods-stock-movements) | 备注信息，用于手工记录本次变更的特殊原因说明（例如“盘点差异调整”“报损”） |  |
| 18 | `goodsCategoryId` | integer | [`goodscategoryid`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；枚举值: `2790683528350539`, `2793217944864581`, `2792062778003333`, `2791941988405125` |
| 19 | `goodsSecondCategoryId` | integer | [`goodssecondcategoryid`](#ods-goods-stock-movements) | （待补充） | 大小写匹配；枚举值: `2790683528350540`, `2790683528350541`, `2793218343257925`, `2792063209623429`, `2793236829620037`, `2791948300259205` |

<a id="ods-goods-stock-movements"></a>

#### ODS 表结构 — ods.goods_stock_movements [🔗 API](#api-goods-stock-movements)

共 24 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `sitegoodsstockid` | bigint | [`siteGoodsStockId`](#api-goods-stock-movements) | — | （待补充） |
| 2 | `tenantid` | bigint | [`tenantId`](#api-goods-stock-movements) | — | （待补充） |
| 3 | `siteid` | bigint | [`siteId`](#api-goods-stock-movements) | — | （待补充） |
| 4 | `sitegoodsid` | bigint | [`siteGoodsId`](#api-goods-stock-movements) | — | （待补充） |
| 5 | `goodsname` | text | [`goodsName`](#api-goods-stock-movements) | — | （待补充） |
| 6 | `goodscategoryid` | bigint | [`goodsCategoryId`](#api-goods-stock-movements) | — | （待补充） |
| 7 | `goodssecondcategoryid` | bigint | [`goodsSecondCategoryId`](#api-goods-stock-movements) | — | （待补充） |
| 8 | `unit` | text | [`unit`](#api-goods-stock-movements) | — | 库存计量单位 |
| 9 | `price` | numeric | [`price`](#api-goods-stock-movements) | — | 商品单价（单位金额） |
| 10 | `stocktype` | integer | [`stockType`](#api-goods-stock-movements) | — | （待补充） |
| 11 | `changenum` | numeric | [`changeNum`](#api-goods-stock-movements) | — | （待补充） |
| 12 | `startnum` | numeric | [`startNum`](#api-goods-stock-movements) | — | （待补充） |
| 13 | `endnum` | numeric | [`endNum`](#api-goods-stock-movements) | — | （待补充） |
| 14 | `changenuma` | numeric | [`changeNumA`](#api-goods-stock-movements) | — | （待补充） |
| 15 | `startnuma` | numeric | [`startNumA`](#api-goods-stock-movements) | — | （待补充） |
| 16 | `endnuma` | numeric | [`endNumA`](#api-goods-stock-movements) | — | （待补充） |
| 17 | `remark` | text | [`remark`](#api-goods-stock-movements) | — | 备注信息，用于手工记录本次变更的特殊原因说明（例如“盘点差异调整”“报损”） |
| 18 | `operatorname` | text | [`operatorName`](#api-goods-stock-movements) | — | （待补充） |
| 19 | `createtime` | timestamp without time zone | [`createTime`](#api-goods-stock-movements) | — | （待补充） |
| 20 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 21 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 22 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 23 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 24 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

### 3.18 site_tables_master（台桌维表）

- 任务代码：`ODS_TABLES`
- 采样记录数：74
- API JSON 字段数：26
- ODS 列数：31
- DWD 目标表：dim_table, dim_table_ex

<a id="api-site-tables-master"></a>

#### API 源字段 — site_tables_master [🔗 ODS](#ods-site-tables-master)

已映射 26/26，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `id` | integer | [`id`](#ods-site-tables-master) | 台桌主键 ID | 枚举值: `2791964216463493`, `2792521437958213`, `2793001695301765`, `2793001904918661`, `2793002509209733`, `2793002673295493`, `2793002808987781`, `2793002896494725` |
| 2 | `order_id` | integer | [`order_id`](#ods-site-tables-master) | 订单ID | 枚举值: `0`, `2994377264058629` |
| 3 | `audit_status` | integer | [`audit_status`](#ods-site-tables-master) | 当前值：全部为 2 | 示例: `2` |
| 4 | `charge_free` | integer | [`charge_free`](#ods-site-tables-master) | 当前值：全部为 0 | 示例: `0` |
| 5 | `self_table` | integer | [`self_table`](#ods-site-tables-master) | 当前值：全部为 1 | 示例: `1` |
| 6 | `create_time` | string | [`create_time`](#ods-site-tables-master) | 台桌配置的创建时间或最近一次创建/复制时间 | 枚举值: `2025-07-15 17:52:54`, `2025-07-16 03:19:44`, `2025-07-16 11:28:17`, `2025-07-16 11:28:30`, `2025-07-16 11:29:07`, `2025-07-16 11:29:17`, `2025-07-16 11:29:25`, `2025-07-16 11:29:30` |
| 7 | `is_rest_area` | integer | [`is_rest_area`](#ods-site-tables-master) | 当前值：全部为 0 | 示例: `0` |
| 8 | `light_status` | integer | [`light_status`](#ods-site-tables-master) | 来自 JSON 导出的原始字段，用于保留业务取值 | 枚举值: `2`, `1` |
| 9 | `show_status` | integer | [`show_status`](#ods-site-tables-master) | 来自 JSON 导出的原始字段，用于保留业务取值 | 枚举值: `1`, `2` |
| 10 | `site_id` | integer | [`site_id`](#ods-site-tables-master) | 门店 ID | 示例: `2790685415443269` |
| 11 | `site_table_area_id` | integer | [`site_table_area_id`](#ods-site-tables-master) | 门店维度的“台桌区域 ID” | 枚举值: `2791963794329671`, `2791963807682693`, `2791963816579205`, `2791963825803397`, `2791963836207173`, `2791963848527941`, `2791963864273029`, `2791963887030341` |
| 12 | `table_cloth_use_time` | integer | [`table_cloth_use_time`](#ods-site-tables-master) | 时间字段，用于记录业务时间点/发生时间 | 枚举值: `3847788`, `3997128`, `4828391`, `4752591`, `4550047`, `1776155`, `4028812`, `3444224` |
| 13 | `table_cloth_use_Cycle` | integer | [`table_cloth_use_cycle`](#ods-site-tables-master) | （待补充） | 大小写匹配；示例: `0` |
| 14 | `virtual_table` | integer | [`virtual_table`](#ods-site-tables-master) | 当前值：全部为 0 | 示例: `0` |
| 15 | `table_name` | string | [`table_name`](#ods-site-tables-master) | 台号/台名称，用于前台操作界面展示，也出现在小票和各种流水中的 ledger_name 或 tableName 字段 | 枚举值: `A1`, `A2`, `A3`, `A4`, `A5`, `A6`, `A7`, `A8` |
| 16 | `table_price` | number | [`table_price`](#ods-site-tables-master) | 设计上应为“台的基础单价”字段（例如按小时或按局单价） | 示例: `0.0` |
| 17 | `table_status` | integer | [`table_status`](#ods-site-tables-master) | 台当前运行状态，真实反映某一时刻台的占用/暂停情况 | 枚举值: `1`, `3` |
| 18 | `areaName` | string | [`areaname`](#ods-site-tables-master) | （待补充） | 大小写匹配；枚举值: `A区`, `B区`, `C区`, `VIP包厢`, `斯诺克区`, `666`, `TV台`, `麻将房` |
| 19 | `siteName` | string | [`sitename`](#ods-site-tables-master) | （待补充） | 大小写匹配；示例: `朗朗桌球` |
| 20 | `tableStatusName` | string | [`tablestatusname`](#ods-site-tables-master) | （待补充） | 大小写匹配；枚举值: `空闲中`, `暂停中` |
| 21 | `appletQrCodeUrl` | string | [`appletqrcodeurl`](#ods-site-tables-master) | （待补充） | 大小写匹配；示例: `https://pc-we.ficoo.vip/roo...` |
| 22 | `only_allow_groupon` | integer | [`only_allow_groupon`](#ods-site-tables-master) | 小程序二维码 URL | 示例: `2` |
| 23 | `delay_lights_time` | integer | [`delay_lights_time`](#ods-site-tables-master) | 台灯熄灭延迟时间（单位多半是秒或分钟），用于结账后延时关灯 | 示例: `0` |
| 24 | `order_delay_time` | integer | [`order_delay_time`](#ods-site-tables-master) | 订单层面允许的“自动延时时长”（例如到点后自动延长多少时间继续计费） | 示例: `0` |
| 25 | `temporary_light_second` | integer | [`temporary_light_second`](#ods-site-tables-master) | 临时点灯时长（秒），例如手动临时开灯一段时间 | 示例: `0` |
| 26 | `is_online_reservation` | integer | [`is_online_reservation`](#ods-site-tables-master) | 布尔/开关字段，用于表示权限、可用性或状态开关 | 枚举值: `2`, `1` |

<a id="ods-site-tables-master"></a>

#### ODS 表结构 — ods.site_tables_master [🔗 API](#api-site-tables-master)

共 31 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`id`](#api-site-tables-master) | [`dim_table.table_id`](#dwd-dim-table), [`dim_table_ex.table_id`](#dwd-dim-table-ex) | 台桌主键 ID |
| 2 | `site_id` | bigint | [`site_id`](#api-site-tables-master) | [`dim_table.site_id`](#dwd-dim-table) | 门店 ID |
| 3 | `sitename` | text | [`siteName`](#api-site-tables-master) | — | （待补充） |
| 4 | `appletQrCodeUrl` | text | — | — | （待补充） |
| 5 | `areaname` | text | [`areaName`](#api-site-tables-master) | [`dim_table.site_table_area_name`](#dwd-dim-table) | （待补充） |
| 6 | `audit_status` | integer | [`audit_status`](#api-site-tables-master) | — | 当前值：全部为 2 |
| 7 | `charge_free` | integer | [`charge_free`](#api-site-tables-master) | — | 当前值：全部为 0 |
| 8 | `create_time` | timestamp without time zone | [`create_time`](#api-site-tables-master) | — | 台桌配置的创建时间或最近一次创建/复制时间 |
| 9 | `delay_lights_time` | integer | [`delay_lights_time`](#api-site-tables-master) | — | 台灯熄灭延迟时间（单位多半是秒或分钟），用于结账后延时关灯 |
| 10 | `is_online_reservation` | integer | [`is_online_reservation`](#api-site-tables-master) | [`dim_table_ex.is_online_reservation`](#dwd-dim-table-ex) | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| 11 | `is_rest_area` | integer | [`is_rest_area`](#api-site-tables-master) | — | 当前值：全部为 0 |
| 12 | `light_status` | integer | [`light_status`](#api-site-tables-master) | — | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 13 | `only_allow_groupon` | integer | [`only_allow_groupon`](#api-site-tables-master) | — | 小程序二维码 URL |
| 14 | `order_delay_time` | integer | [`order_delay_time`](#api-site-tables-master) | — | 订单层面允许的“自动延时时长”（例如到点后自动延长多少时间继续计费） |
| 15 | `self_table` | integer | [`self_table`](#api-site-tables-master) | — | 当前值：全部为 1 |
| 16 | `show_status` | integer | [`show_status`](#api-site-tables-master) | [`dim_table_ex.show_status`](#dwd-dim-table-ex) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 17 | `site_table_area_id` | bigint | [`site_table_area_id`](#api-site-tables-master) | [`dim_table.site_table_area_id`](#dwd-dim-table), [`dim_table.tenant_table_area_id`](#dwd-dim-table) | 门店维度的“台桌区域 ID” |
| 18 | `tablestatusname` | text | [`tableStatusName`](#api-site-tables-master) | — | （待补充） |
| 19 | `table_cloth_use_cycle` | integer | [`table_cloth_use_Cycle`](#api-site-tables-master) | [`dim_table_ex.table_cloth_use_cycle`](#dwd-dim-table-ex) | （待补充） |
| 20 | `table_cloth_use_time` | timestamp without time zone | [`table_cloth_use_time`](#api-site-tables-master) | [`dim_table_ex.table_cloth_use_time`](#dwd-dim-table-ex) | 时间字段，用于记录业务时间点/发生时间 |
| 21 | `table_name` | text | [`table_name`](#api-site-tables-master) | [`dim_table.table_name`](#dwd-dim-table) | 台号/台名称，用于前台操作界面展示，也出现在小票和各种流水中的 ledger_name 或 tableName 字段 |
| 22 | `table_price` | numeric | [`table_price`](#api-site-tables-master) | [`dim_table.table_price`](#dwd-dim-table) | 设计上应为“台的基础单价”字段（例如按小时或按局单价） |
| 23 | `table_status` | integer | [`table_status`](#api-site-tables-master) | [`dim_table_ex.table_status`](#dwd-dim-table-ex) | 台当前运行状态，真实反映某一时刻台的占用/暂停情况 |
| 24 | `temporary_light_second` | integer | [`temporary_light_second`](#api-site-tables-master) | — | 临时点灯时长（秒），例如手动临时开灯一段时间 |
| 25 | `virtual_table` | integer | [`virtual_table`](#api-site-tables-master) | — | 当前值：全部为 0 |
| 26 | `order_id` | bigint | [`order_id`](#api-site-tables-master) | [`dim_table.order_id`](#dwd-dim-table) | 订单ID |
| 27 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 28 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 29 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 30 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 31 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dim-table"></a>

#### DWD 表结构 — dwd.dim_table [🔗 ODS](#ods-site-tables-master)

共 12 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `table_id` | bigint | [`id`](#ods-site-tables-master) | 直接 | 台桌 ID |
| 2 | `site_id` | bigint | [`site_id`](#ods-site-tables-master) | 直接 | 门店 ID → dim_site |
| 3 | `table_name` | text | [`table_name`](#ods-site-tables-master) | 直接 | 台桌名称。**样本值**: "A1", "A2",  "B1", "B2",  "S1", "C1", "VIP1... |
| 4 | `site_table_area_id` | bigint | [`site_table_area_id`](#ods-site-tables-master) | 直接 | 台区 ID |
| 5 | `site_table_area_name` | text | [`areaname`](#ods-site-tables-master) | 直接 | 台区名称。**样本值**: "A区", "B区", "补时长", "C区", "麻将房", "K包", "VIP包... |
| 6 | `tenant_table_area_id` | bigint | [`site_table_area_id`](#ods-site-tables-master) | 直接 | 租户级台区 ID |
| 7 | `table_price` | numeric | [`table_price`](#ods-site-tables-master) | 直接 | 台桌单价（当前数据全为 0.00） |
| 8 | `order_id` | bigint | [`order_id`](#ods-site-tables-master) | 直接 | 订单 ID |
| 9 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 版本生效时间 |
| 10 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 版本失效时间 |
| 11 | `scd2_is_current` | integer | — | SCD2 | 当前版本标记 |
| 12 | `scd2_version` | integer | — | SCD2 | 版本号 |

<a id="dwd-dim-table-ex"></a>

#### DWD 表结构 — dwd.dim_table_ex [🔗 ODS](#ods-site-tables-master)

共 10 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `table_id` | bigint | [`id`](#ods-site-tables-master) | 直接 | 字段重命名 |
| 2 | `show_status` | integer | [`show_status`](#ods-site-tables-master) | 直接 | 同名直传 |
| 3 | `is_online_reservation` | integer | [`is_online_reservation`](#ods-site-tables-master) | 直接 | 同名直传 |
| 4 | `table_cloth_use_time` | integer | [`table_cloth_use_time`](#ods-site-tables-master) | 直接 | 时间/日期字段，用于记录业务时间与统计口径对齐 |
| 5 | `table_cloth_use_cycle` | integer | [`table_cloth_use_cycle`](#ods-site-tables-master) | 直接 | 同名直传 |
| 6 | `table_status` | integer | [`table_status`](#ods-site-tables-master) | 直接 | 同名直传 |
| 7 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 8 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 9 | `scd2_is_current` | integer | — | SCD2 | SCD2 元数据 |
| 10 | `scd2_version` | integer | — | SCD2 | SCD2 元数据 |

### 3.19 stock_goods_category_tree（库存商品分类树）

- 任务代码：`ODS_GOODS_CATEGORY`
- 采样记录数：9
- API JSON 字段数：20
- ODS 列数：16
- DWD 目标表：dim_goods_category

<a id="api-stock-goods-category-tree"></a>

#### API 源字段 — stock_goods_category_tree [🔗 ODS](#ods-stock-goods-category-tree)

已映射 20/20，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `id` | integer | [`id`](#ods-stock-goods-category-tree) | 分类节点主键 ID（在商品分类维度中的唯一标识） | 枚举值: `2790683528350533`, `2790683528350535`, `2790683528350539`, `2790683528350545`, `2791941988405125`, `2791942087561093`, `2792062778003333`, `2793217944864581` |
| 2 | `tenant_id` | integer | [`tenant_id`](#ods-stock-goods-category-tree) | 租户 ID（品牌/商户 ID） | 示例: `2790683160709957` |
| 3 | `category_name` | string | [`category_name`](#ods-stock-goods-category-tree) | 分类名称（实际业务分类名称） | 枚举值: `槟榔`, `器材`, `酒水`, `果盘`, `零食`, `雪糕`, `香烟`, `其他` |
| 4 | `alias_name` | string | [`alias_name`](#ods-stock-goods-category-tree) | 名称字段，用于展示与辅助识别 |  |
| 5 | `pid` | integer | [`pid`](#ods-stock-goods-category-tree) | 父级分类 ID | 示例: `0` |
| 6 | `business_name` | string | [`business_name`](#ods-stock-goods-category-tree) | 业务大类名称 | 枚举值: `槟榔`, `器材`, `酒水`, `水果`, `零食`, `雪糕`, `香烟`, `其他` |
| 7 | `tenant_goods_business_id` | integer | [`tenant_goods_business_id`](#ods-stock-goods-category-tree) | 业务大类 ID | 枚举值: `2790683528317766`, `2790683528317767`, `2790683528317768`, `2790683528317769`, `2791932037238661`, `2791931866402693`, `2790683528317765`, `2793217599407941` |
| 8 | `open_salesman` | integer | [`open_salesman`](#ods-stock-goods-category-tree) | 是否启用“营业员”或“导购提成”相关的功能开关 | 示例: `2` |
| 9 | `categoryBoxes[].id` | integer | [`id`](#ods-stock-goods-category-tree) | 分类节点主键 ID（在商品分类维度中的唯一标识） | 枚举值: `2790683528350534`, `2790683528350536`, `2790683528350537`, `2790683528350538`, `2790683528350540`, `2790683528350541`, `2790683528350542`, `2790683528350543` |
| 10 | `categoryBoxes[].tenant_id` | integer | [`tenant_id`](#ods-stock-goods-category-tree) | 租户 ID（品牌/商户 ID） | 示例: `2790683160709957` |
| 11 | `categoryBoxes[].category_name` | string | [`category_name`](#ods-stock-goods-category-tree) | 分类名称（实际业务分类名称） | 枚举值: `槟榔`, `皮头`, `球杆`, `其他`, `饮料`, `酒水`, `茶水`, `咖啡` |
| 12 | `categoryBoxes[].alias_name` | string | [`alias_name`](#ods-stock-goods-category-tree) | 名称字段，用于展示与辅助识别 |  |
| 13 | `categoryBoxes[].pid` | integer | [`pid`](#ods-stock-goods-category-tree) | 父级分类 ID | 枚举值: `2790683528350533`, `2790683528350535`, `2790683528350539`, `2790683528350545`, `2791941988405125`, `2791942087561093`, `2792062778003333`, `2793217944864581` |
| 14 | `categoryBoxes[].business_name` | string | [`business_name`](#ods-stock-goods-category-tree) | 业务大类名称 | 枚举值: `槟榔`, `器材`, `酒水`, `水果`, `零食`, `雪糕`, `香烟`, `其他` |
| 15 | `categoryBoxes[].tenant_goods_business_id` | integer | [`tenant_goods_business_id`](#ods-stock-goods-category-tree) | 业务大类 ID | 枚举值: `2790683528317766`, `2790683528317767`, `2790683528317768`, `2790683528317769`, `2791932037238661`, `2791931866402693`, `2790683528317765`, `2793217599407941` |
| 16 | `categoryBoxes[].open_salesman` | integer | [`open_salesman`](#ods-stock-goods-category-tree) | 是否启用“营业员”或“导购提成”相关的功能开关 | 示例: `2` |
| 17 | `categoryBoxes[].sort` | integer | [`sort`](#ods-stock-goods-category-tree) | 分类的排序序号，用于前端展示顺序的控制 | 枚举值: `0`, `1` |
| 18 | `categoryBoxes[].is_warehousing` | integer | [`is_warehousing`](#ods-stock-goods-category-tree) | 本文件可视为“所有参与库存管理的商品分类清单”，因此均为 1 | 示例: `1` |
| 19 | `sort` | integer | [`sort`](#ods-stock-goods-category-tree) | 分类的排序序号，用于前端展示顺序的控制 | 枚举值: `1`, `0` |
| 20 | `is_warehousing` | integer | [`is_warehousing`](#ods-stock-goods-category-tree) | 本文件可视为“所有参与库存管理的商品分类清单”，因此均为 1 | 示例: `1` |

<a id="ods-stock-goods-category-tree"></a>

#### ODS 表结构 — ods.stock_goods_category_tree [🔗 API](#api-stock-goods-category-tree)

共 16 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`id`](#api-stock-goods-category-tree) | [`dim_goods_category.category_id`](#dwd-dim-goods-category) | 分类节点主键 ID（在商品分类维度中的唯一标识） |
| 2 | `tenant_id` | bigint | [`tenant_id`](#api-stock-goods-category-tree) | [`dim_goods_category.tenant_id`](#dwd-dim-goods-category) | 租户 ID（品牌/商户 ID） |
| 3 | `category_name` | text | [`category_name`](#api-stock-goods-category-tree) | [`dim_goods_category.category_name`](#dwd-dim-goods-category) | 分类名称（实际业务分类名称） |
| 4 | `alias_name` | text | [`alias_name`](#api-stock-goods-category-tree) | [`dim_goods_category.alias_name`](#dwd-dim-goods-category) | 名称字段，用于展示与辅助识别 |
| 5 | `pid` | bigint | [`pid`](#api-stock-goods-category-tree) | [`dim_goods_category.parent_category_id`](#dwd-dim-goods-category) | 父级分类 ID |
| 6 | `business_name` | text | [`business_name`](#api-stock-goods-category-tree) | [`dim_goods_category.business_name`](#dwd-dim-goods-category) | 业务大类名称 |
| 7 | `tenant_goods_business_id` | bigint | [`tenant_goods_business_id`](#api-stock-goods-category-tree) | [`dim_goods_category.tenant_goods_business_id`](#dwd-dim-goods-category) | 业务大类 ID |
| 8 | `open_salesman` | integer | [`open_salesman`](#api-stock-goods-category-tree) | [`dim_goods_category.open_salesman`](#dwd-dim-goods-category) | 是否启用“营业员”或“导购提成”相关的功能开关 |
| 9 | `categoryboxes` | jsonb | — | — | （待补充） |
| 10 | `sort` | integer | [`categoryBoxes[].sort`](#api-stock-goods-category-tree) | [`dim_goods_category.sort_order`](#dwd-dim-goods-category) | 分类的排序序号，用于前端展示顺序的控制 |
| 11 | `is_warehousing` | integer | [`categoryBoxes[].is_warehousing`](#api-stock-goods-category-tree) | [`dim_goods_category.is_warehousing`](#dwd-dim-goods-category) | 本文件可视为“所有参与库存管理的商品分类清单”，因此均为 1 |
| 12 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 13 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 14 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 15 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 16 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dim-goods-category"></a>

#### DWD 表结构 — dwd.dim_goods_category [🔗 ODS](#ods-stock-goods-category-tree)

共 16 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `category_id` | bigint | [`id`](#ods-stock-goods-category-tree) | 直接 | 分类唯一标识 |
| 2 | `tenant_id` | bigint | [`tenant_id`](#ods-stock-goods-category-tree) | 直接 | 租户 ID（当前值: 2790683160709957） |
| 3 | `category_name` | character varying | [`category_name`](#ods-stock-goods-category-tree) | 直接 | 分类名称。**样本值**: "槟榔", "皮头" 等 |
| 4 | `alias_name` | character varying | [`alias_name`](#ods-stock-goods-category-tree) | 直接 | 分类别名（当前数据大部分为空） |
| 5 | `parent_category_id` | bigint | [`pid`](#ods-stock-goods-category-tree) | 直接 | 父级分类 ID（0=一级分类）→ 自关联 |
| 6 | `business_name` | character varying | [`business_name`](#ods-stock-goods-category-tree) | 直接 | 业务大类名称。**样本值**: "酒水", "器材" 等 |
| 7 | `tenant_goods_business_id` | bigint | [`tenant_goods_business_id`](#ods-stock-goods-category-tree) | 直接 | 业务大类 ID |
| 8 | `category_level` | integer | [`CASE WHEN pid = 0 THEN 1 ELSE 2 END`](#ods-stock-goods-category-tree) | 直接 | 分类层级。**枚举值**: 1=一级大类, 2=二级子类 |
| 9 | `is_leaf` | integer | [`CASE WHEN categoryboxes IS NULL OR jsonb_array_length(categoryboxes)=0 THEN 1 ELSE 0 END`](#ods-stock-goods-category-tree) | 直接 | 是否叶子节点。**枚举值**: 0=非叶子, 1=叶子 |
| 10 | `open_salesman` | integer | [`open_salesman`](#ods-stock-goods-category-tree) | 直接 | 营业员开关。 |
| 11 | `sort_order` | integer | [`sort`](#ods-stock-goods-category-tree) | 直接 | 排序序号 |
| 12 | `is_warehousing` | integer | [`is_warehousing`](#ods-stock-goods-category-tree) | 直接 | 是否库存管理。**枚举值**: 1=参与库存管理 |
| 13 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 版本生效时间 |
| 14 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 版本失效时间 |
| 15 | `scd2_is_current` | integer | — | SCD2 | 当前版本标记 |
| 16 | `scd2_version` | integer | — | SCD2 | 版本号 |

### 3.20 store_goods_master（门店商品档案）

- 任务代码：`ODS_STORE_GOODS`
- 采样记录数：173
- API JSON 字段数：53
- ODS 列数：52
- DWD 目标表：dim_store_goods, dim_store_goods_ex

<a id="api-store-goods-master"></a>

#### API 源字段 — store_goods_master [🔗 ODS](#ods-store-goods-master)

已映射 48/53，覆盖率 90.6%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `siteName` | string | [`sitename`](#ods-store-goods-master) | （待补充） | 大小写匹配；示例: `朗朗桌球` |
| 2 | `oneCategoryName` | string | [`onecategoryname`](#ods-store-goods-master) | （待补充） | 大小写匹配；枚举值: `零食`, `酒水`, `小吃`, `其他`, `香烟`, `果盘`, `雪糕`, `器材` |
| 3 | `twoCategoryName` | string | [`twocategoryname`](#ods-store-goods-master) | （待补充） | 大小写匹配；枚举值: `面`, `洋酒`, `小吃`, `其他2`, `香烟`, `果盘`, `雪糕`, `零食` |
| 4 | `goodsStockWarningInfo.tenant_goods_id` | integer | [`tenant_goods_id`](#ods-store-goods-master) | 租户/品牌维度的商品 ID，相当于“全局商品 ID” | 示例: `0` |
| 5 | `goodsStockWarningInfo.site_goods_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 6 | `goodsStockWarningInfo.sales_day` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0.0` |
| 7 | `goodsStockWarningInfo.warning_day_max` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 8 | `goodsStockWarningInfo.warning_day_min` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 9 | `id` | integer | [`id`](#ods-store-goods-master) | 门店商品 ID，门店维度的商品主键 | 枚举值: `2793025844727877`, `2793025849102405`, `2793025851560005`, `3089190204491141`, `2794695800246405`, `2794695800443013`, `2793025845825605`, `2793025849593925` |
| 10 | `able_discount` | integer | [`able_discount`](#ods-store-goods-master) | 是否允许参与折扣 | 示例: `1` |
| 11 | `able_site_transfer` | integer | [`able_site_transfer`](#ods-store-goods-master) | 表示是否允许跨门店调拨或跨站点共享库存 | 枚举值: `2`, `0` |
| 12 | `audit_status` | integer | [`audit_status`](#ods-store-goods-master) | 观察值：全部为 2 | 示例: `2` |
| 13 | `average_monthly_sales` | number | [`average_monthly_sales`](#ods-store-goods-master) | 平均月销量（件/月），根据某个统计周期内的销售数据折算而来 | 枚举值: `1.81`, `0.61`, `0.77`, `0.1`, `0.0`, `4.13`, `7.84`, `0.06` |
| 14 | `batch_stock_quantity` | integer | [`batch_stock_quantity`](#ods-store-goods-master) | 当前“批次”的库存数量（主单位） | 枚举值: `31`, `22`, `0`, `24`, `1`, `2`, `136`, `20` |
| 15 | `commodity_code` | string | [`commodity_code`](#ods-store-goods-master) | 商品编码 | 枚举值: `10000002`, `1234541`, `1234545`, `1111111111`, `10000`, `10002`, `100001`, `1234551` |
| 16 | `cost_price` | number | [`cost_price`](#ods-store-goods-master) | 商品成本价（单件成本） | 枚举值: `0.0`, `0.0002`, `2.0`, `0.0009`, `0.4377`, `0.1308`, `2.8679`, `0.0089` |
| 17 | `cost_price_type` | integer | [`cost_price_type`](#ods-store-goods-master) | 1 代表使用“固定成本价”（手工维护的 cost_price），provisional_total_cost 按“... | 枚举值: `1`, `2` |
| 18 | `create_time` | string | [`create_time`](#ods-store-goods-master) | 门店商品档案创建时间（商品在门店建立档案的时间点） | 枚举值: `2025-07-16 11:52:51`, `2026-02-10 17:06:49`, `2025-07-17 16:11:37`, `2025-07-16 11:53:11`, `2025-07-22 18:46:04`, `2025-07-22 21:43:02`, `2025-07-29 18:22:17`, `2025-08-10 19:01:36` |
| 19 | `custom_label_type` | integer | [`custom_label_type`](#ods-store-goods-master) | 自定义标签类型 | 示例: `2` |
| 20 | `days_available` | integer | [`days_available`](#ods-store-goods-master) | 商品“在架天数”或“可售天数”，大致等于当前时间减去首次上架时间 | 枚举值: `13`, `22`, `0`, `210`, `33`, `5`, `633`, `13942` |
| 21 | `enable_status` | integer | [`enable_status`](#ods-store-goods-master) | 控制商品档案是否参与任何业务（库存、销售等） | 示例: `1` |
| 22 | `forbid_sell_status` | integer | [`forbid_sell_status`](#ods-store-goods-master) | 观察值：全部为 1 | 示例: `1` |
| 23 | `freeze` | integer | [`freeze`](#ods-store-goods-master) | （待补充） | 示例: `0` |
| 24 | `goods_bar_code` | string | [`goods_bar_code`](#ods-store-goods-master) | 商品条形码（如 EAN-13 编码），用于扫码销售 |  |
| 25 | `goods_category_id` | integer | [`goods_category_id`](#ods-store-goods-master) | 商品一级分类 ID | 枚举值: `2791941988405125`, `2790683528350539`, `2793220945250117`, `2793217944864581`, `2792062778003333`, `2790683528350545`, `2791942087561093`, `2790683528350535` |
| 26 | `goods_cover` | string | [`goods_cover`](#ods-store-goods-master) | 商品图片 URL（如 OSS 对象存储地址），用于前端展示商品图片 | 枚举值: `https://oss.ficoo.vip/admin/mWT72w_1721195534466.png`, `https://oss.ficoo.vip/admin/66JknP_1753204240471.jpg`, `https://oss.ficoo.vip/admin/8M1WM7_1753204221337.jpg`, `https://oss.ficoo.vip/admin/rCBBPB_1770715245749.jpg`, `https://oss.ficoo.vip/admin/RWW8bM_1710125368666.jpg`, `https://oss.ficoo.vip/admin/kiMwJG_1753195462903.jpg`, `https://oss.ficoo.vip/admin/iC16iC_1753195476922.jpg`, `https://oss.ficoo.vip/admin/TFrrEm_1753195493834.jpg` |
| 27 | `goods_name` | string | [`goods_name`](#ods-store-goods-master) | 商品名称，例如“合味道泡面”“地道肠”“麻将房茶位费”等 | 枚举值: `红烧牛肉面`, `火鸡面`, `合味道泡面`, `小合味道`, `名仕`, `人头马`, `鱼蛋`, `地道肠` |
| 28 | `goods_second_category_id` | integer | [`goods_second_category_id`](#ods-store-goods-master) | 商品二级分类 ID | 枚举值: `2793236829620037`, `2793221553489733`, `2793221283104581`, `2793218343257925`, `2792063209623429`, `2792050275864453`, `2792035069284229`, `2791948300259205` |
| 29 | `goods_state` | integer | [`goods_state`](#ods-store-goods-master) | 来自 JSON 导出的原始字段，用于保留业务取值 | 枚举值: `1`, `2` |
| 30 | `is_delete` | integer | [`is_delete`](#ods-store-goods-master) | 逻辑删除标志 | 示例: `0` |
| 31 | `is_warehousing` | integer | [`is_warehousing`](#ods-store-goods-master) | 是否纳入库存管理 | 示例: `1` |
| 32 | `min_discount_price` | number | [`min_discount_price`](#ods-store-goods-master) | 最低允许成交价（限价） | 枚举值: `0.0`, `130.0`, `998.0`, `2.0`, `40.0`, `8.0`, `3.0`, `18.0` |
| 33 | `not_sale` | integer | [`not_sale`](#ods-store-goods-master) | （待补充） | 示例: `2` |
| 34 | `option_required` | integer | [`option_required`](#ods-store-goods-master) | 是否需要在销售时选择规格/选项 | 示例: `1` |
| 35 | `pinyin_initial` | string | [`pinyin_initial`](#ods-store-goods-master) | 商品名称的拼音首字母缩写，有时多个别名用逗号分隔 | 枚举值: `HSNRM,GSNRM`, `HJM`, `HWDPM,GWDPM`, `XHWD,XGWD`, `MS`, `RTM`, `YD`, `DDC` |
| 36 | `provisional_total_cost` | number | [`provisional_total_cost`](#ods-store-goods-master) | 暂估总成本，单位为元 | 枚举值: `0.0`, `0.1`, `8.0`, `152.0` |
| 37 | `remark` | string | [`remark`](#ods-store-goods-master) | 商品备注（可以写口味说明、供应商、注意事项等） |  |
| 38 | `safe_stock` | integer | [`safe_stock`](#ods-store-goods-master) | 安全库存量（阈值），低于该值时系统可以提示补货 | 示例: `0` |
| 39 | `sale_channel` | string | [`sale_channel`](#ods-store-goods-master) | 销售渠道类型 | 示例: `1,2,3` |
| 40 | `sale_num` | integer | [`sale_num`](#ods-store-goods-master) | 在当前统计口径下的销售数量（总销量，单位同 unit） | 枚举值: `452`, `185`, `218`, `3`, `1`, `0`, `1155`, `2650` |
| 41 | `sale_price` | number | [`sale_price`](#ods-store-goods-master) | 商品标准销售价（挂牌价），单位为元 | 枚举值: `12.0`, `10.0`, `8.0`, `998.0`, `5.0`, `18.0`, `2.0`, `40.0` |
| 42 | `send_state` | integer | [`send_state`](#ods-store-goods-master) | 观察值：全部为 1 | 示例: `1` |
| 43 | `site_id` | integer | [`site_id`](#ods-store-goods-master) | 门店 ID | 示例: `2790685415443269` |
| 44 | `sort` | integer | [`sort`](#ods-store-goods-master) | 排序权重，用于前端商品列表展示时的排版顺序，数值越小/越大哪个优先，具体规则看系统设定（一般是数值越小排序越靠前） | 示例: `100` |
| 45 | `stock` | integer | [`stock`](#ods-store-goods-master) | 当前可用库存数量（以 unit 为单位） | 枚举值: `24`, `14`, `0`, `21`, `1`, `2`, `45`, `19` |
| 46 | `stock_A` | integer | [`stock_a`](#ods-store-goods-master) | （待补充） | 大小写匹配；示例: `0` |
| 47 | `tenant_goods_id` | integer | [`tenant_goods_id`](#ods-store-goods-master) | 租户/品牌维度的商品 ID，相当于“全局商品 ID” | 枚举值: `2792037812375429`, `2792170827517829`, `2792178593255301`, `3089189492279813`, `2793225054603077`, `2793226137552709`, `2792152201432965`, `2792171921870725` |
| 48 | `tenant_id` | integer | [`tenant_id`](#ods-store-goods-master) | 租户/品牌 ID | 示例: `2790683160709957` |
| 49 | `time_slot_sale` | integer | ⚠️ 未映射 |  | 示例: `2` |
| 50 | `total_purchase_cost` | number | [`total_purchase_cost`](#ods-store-goods-master) | 总采购成本，单位为元 | 枚举值: `0.0`, `0.1`, `0.23`, `24.07`, `8.24`, `152.0`, `0.63`, `108.53` |
| 51 | `total_sales` | integer | [`total_sales`](#ods-store-goods-master) | 累计销售数量 | 枚举值: `452`, `185`, `218`, `3`, `1`, `0`, `1155`, `2650` |
| 52 | `unit` | string | [`unit`](#ods-store-goods-master) | 商品计量单位（销售单位） | 枚举值: `桶`, `瓶`, `份`, `根`, `盒`, `个`, `杯`, `支` |
| 53 | `update_time` | string | [`update_time`](#ods-store-goods-master) | 最后一次修改该商品档案的时间（包括价格调整、状态变更等） | 枚举值: `2026-02-13 18:56:51`, `2026-02-12 00:07:13`, `2026-02-10 17:07:59`, `2026-02-13 17:31:06`, `2025-11-21 00:46:49`, `2025-07-21 11:05:15`, `2026-02-10 00:34:11`, `2026-01-01 02:53:23` |

<a id="ods-store-goods-master"></a>

#### ODS 表结构 — ods.store_goods_master [🔗 API](#api-store-goods-master)

共 52 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`id`](#api-store-goods-master) | [`dim_store_goods.site_goods_id`](#dwd-dim-store-goods), [`dim_store_goods_ex.site_goods_id`](#dwd-dim-store-goods-ex) | 门店商品 ID，门店维度的商品主键 |
| 2 | `tenant_id` | bigint | [`tenant_id`](#api-store-goods-master) | [`dim_store_goods.tenant_id`](#dwd-dim-store-goods) | 租户/品牌 ID |
| 3 | `site_id` | bigint | [`site_id`](#api-store-goods-master) | [`dim_store_goods.site_id`](#dwd-dim-store-goods) | 门店 ID |
| 4 | `sitename` | text | [`siteName`](#api-store-goods-master) | [`dim_store_goods_ex.site_name`](#dwd-dim-store-goods-ex) | （待补充） |
| 5 | `tenant_goods_id` | bigint | [`goodsStockWarningInfo.tenant_goods_id`](#api-store-goods-master) | [`dim_store_goods.tenant_goods_id`](#dwd-dim-store-goods) | 租户/品牌维度的商品 ID，相当于“全局商品 ID” |
| 6 | `goods_name` | text | [`goods_name`](#api-store-goods-master) | [`dim_store_goods.goods_name`](#dwd-dim-store-goods) | 商品名称，例如“合味道泡面”“地道肠”“麻将房茶位费”等 |
| 7 | `goods_bar_code` | text | [`goods_bar_code`](#api-store-goods-master) | [`dim_store_goods_ex.goods_barcode`](#dwd-dim-store-goods-ex) | 商品条形码（如 EAN-13 编码），用于扫码销售 |
| 8 | `goods_category_id` | bigint | [`goods_category_id`](#api-store-goods-master) | [`dim_store_goods.goods_category_id`](#dwd-dim-store-goods) | 商品一级分类 ID |
| 9 | `goods_second_category_id` | bigint | [`goods_second_category_id`](#api-store-goods-master) | [`dim_store_goods.goods_second_category_id`](#dwd-dim-store-goods) | 商品二级分类 ID |
| 10 | `onecategoryname` | text | [`oneCategoryName`](#api-store-goods-master) | [`dim_store_goods.category_level1_name`](#dwd-dim-store-goods) | （待补充） |
| 11 | `twocategoryname` | text | [`twoCategoryName`](#api-store-goods-master) | [`dim_store_goods.category_level2_name`](#dwd-dim-store-goods) | （待补充） |
| 12 | `unit` | text | [`unit`](#api-store-goods-master) | [`dim_store_goods_ex.unit`](#dwd-dim-store-goods-ex) | 商品计量单位（销售单位） |
| 13 | `sale_price` | numeric | [`sale_price`](#api-store-goods-master) | [`dim_store_goods.sale_price`](#dwd-dim-store-goods) | 商品标准销售价（挂牌价），单位为元 |
| 14 | `cost_price` | numeric | [`cost_price`](#api-store-goods-master) | [`dim_store_goods_ex.cost_price`](#dwd-dim-store-goods-ex) | 商品成本价（单件成本） |
| 15 | `cost_price_type` | integer | [`cost_price_type`](#api-store-goods-master) | [`dim_store_goods_ex.cost_price_type`](#dwd-dim-store-goods-ex) | 1 代表使用“固定成本价”（手工维护的 cost_price），provisional_total_cost 按“... |
| 16 | `min_discount_price` | numeric | [`min_discount_price`](#api-store-goods-master) | [`dim_store_goods_ex.min_discount_price`](#dwd-dim-store-goods-ex) | 最低允许成交价（限价） |
| 17 | `safe_stock` | numeric | [`safe_stock`](#api-store-goods-master) | [`dim_store_goods_ex.safety_stock_qty`](#dwd-dim-store-goods-ex) | 安全库存量（阈值），低于该值时系统可以提示补货 |
| 18 | `stock` | numeric | [`stock`](#api-store-goods-master) | [`dim_store_goods.batch_stock_qty`](#dwd-dim-store-goods), [`dim_store_goods_ex.stock_qty`](#dwd-dim-store-goods-ex) | 当前可用库存数量（以 unit 为单位） |
| 19 | `stock_a` | numeric | [`stock_A`](#api-store-goods-master) | [`dim_store_goods_ex.stock_secondary_qty`](#dwd-dim-store-goods-ex) | （待补充） |
| 20 | `sale_num` | numeric | [`sale_num`](#api-store-goods-master) | [`dim_store_goods.sale_qty`](#dwd-dim-store-goods) | 在当前统计口径下的销售数量（总销量，单位同 unit） |
| 21 | `total_purchase_cost` | numeric | [`total_purchase_cost`](#api-store-goods-master) | [`dim_store_goods_ex.provisional_total_cost`](#dwd-dim-store-goods-ex), [`dim_store_goods_ex.total_purchase_cost`](#dwd-dim-store-goods-ex) | 总采购成本，单位为元 |
| 22 | `total_sales` | numeric | [`total_sales`](#api-store-goods-master) | [`dim_store_goods.total_sales_qty`](#dwd-dim-store-goods) | 累计销售数量 |
| 23 | `average_monthly_sales` | numeric | [`average_monthly_sales`](#api-store-goods-master) | [`dim_store_goods.avg_monthly_sales`](#dwd-dim-store-goods) | 平均月销量（件/月），根据某个统计周期内的销售数据折算而来 |
| 24 | `batch_stock_quantity` | numeric | [`batch_stock_quantity`](#api-store-goods-master) | — | 当前“批次”的库存数量（主单位） |
| 25 | `days_available` | integer | [`days_available`](#api-store-goods-master) | [`dim_store_goods_ex.days_on_shelf`](#dwd-dim-store-goods-ex) | 商品“在架天数”或“可售天数”，大致等于当前时间减去首次上架时间 |
| 26 | `provisional_total_cost` | numeric | [`provisional_total_cost`](#api-store-goods-master) | — | 暂估总成本，单位为元 |
| 27 | `enable_status` | integer | [`enable_status`](#api-store-goods-master) | [`dim_store_goods.enable_status`](#dwd-dim-store-goods) | 控制商品档案是否参与任何业务（库存、销售等） |
| 28 | `audit_status` | integer | [`audit_status`](#api-store-goods-master) | [`dim_store_goods_ex.audit_status`](#dwd-dim-store-goods-ex) | 观察值：全部为 2 |
| 29 | `goods_state` | integer | [`goods_state`](#api-store-goods-master) | [`dim_store_goods.goods_state`](#dwd-dim-store-goods) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 30 | `is_delete` | integer | [`is_delete`](#api-store-goods-master) | [`dim_store_goods.is_delete`](#dwd-dim-store-goods) | 逻辑删除标志 |
| 31 | `is_warehousing` | integer | [`is_warehousing`](#api-store-goods-master) | [`dim_store_goods_ex.is_warehousing`](#dwd-dim-store-goods-ex) | 是否纳入库存管理 |
| 32 | `able_discount` | integer | [`able_discount`](#api-store-goods-master) | [`dim_store_goods_ex.is_discountable`](#dwd-dim-store-goods-ex) | 是否允许参与折扣 |
| 33 | `able_site_transfer` | integer | [`able_site_transfer`](#api-store-goods-master) | [`dim_store_goods_ex.able_site_transfer`](#dwd-dim-store-goods-ex) | 表示是否允许跨门店调拨或跨站点共享库存 |
| 34 | `forbid_sell_status` | integer | [`forbid_sell_status`](#api-store-goods-master) | [`dim_store_goods_ex.forbid_sell_status`](#dwd-dim-store-goods-ex) | 观察值：全部为 1 |
| 35 | `freeze` | integer | [`freeze`](#api-store-goods-master) | [`dim_store_goods_ex.freeze_status`](#dwd-dim-store-goods-ex) | （待补充） |
| 36 | `send_state` | integer | [`send_state`](#api-store-goods-master) | [`dim_store_goods.send_state`](#dwd-dim-store-goods) | 观察值：全部为 1 |
| 37 | `custom_label_type` | integer | [`custom_label_type`](#api-store-goods-master) | [`dim_store_goods_ex.custom_label_type`](#dwd-dim-store-goods-ex) | 自定义标签类型 |
| 38 | `option_required` | integer | [`option_required`](#api-store-goods-master) | [`dim_store_goods_ex.option_required`](#dwd-dim-store-goods-ex) | 是否需要在销售时选择规格/选项 |
| 39 | `sale_channel` | integer | [`sale_channel`](#api-store-goods-master) | [`dim_store_goods_ex.sale_channel`](#dwd-dim-store-goods-ex) | 销售渠道类型 |
| 40 | `sort` | integer | [`sort`](#api-store-goods-master) | [`dim_store_goods_ex.sort_order`](#dwd-dim-store-goods-ex) | 排序权重，用于前端商品列表展示时的排版顺序，数值越小/越大哪个优先，具体规则看系统设定（一般是数值越小排序越靠前） |
| 41 | `remark` | text | [`remark`](#api-store-goods-master) | [`dim_store_goods_ex.remark`](#dwd-dim-store-goods-ex) | 商品备注（可以写口味说明、供应商、注意事项等） |
| 42 | `pinyin_initial` | text | [`pinyin_initial`](#api-store-goods-master) | [`dim_store_goods_ex.pinyin_initial`](#dwd-dim-store-goods-ex) | 商品名称的拼音首字母缩写，有时多个别名用逗号分隔 |
| 43 | `goods_cover` | text | [`goods_cover`](#api-store-goods-master) | [`dim_store_goods_ex.goods_cover_url`](#dwd-dim-store-goods-ex) | 商品图片 URL（如 OSS 对象存储地址），用于前端展示商品图片 |
| 44 | `create_time` | timestamp without time zone | [`create_time`](#api-store-goods-master) | [`dim_store_goods.created_at`](#dwd-dim-store-goods) | 门店商品档案创建时间（商品在门店建立档案的时间点） |
| 45 | `update_time` | timestamp without time zone | [`update_time`](#api-store-goods-master) | [`dim_store_goods.updated_at`](#dwd-dim-store-goods) | 最后一次修改该商品档案的时间（包括价格调整、状态变更等） |
| 46 | `commodity_code` | text | [`commodity_code`](#api-store-goods-master) | [`dim_store_goods.commodity_code`](#dwd-dim-store-goods) | 商品编码 |
| 47 | `not_sale` | integer | [`not_sale`](#api-store-goods-master) | [`dim_store_goods.not_sale`](#dwd-dim-store-goods) | （待补充） |
| 48 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |
| 49 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 50 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 51 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 52 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |

<a id="dwd-dim-store-goods"></a>

#### DWD 表结构 — dwd.dim_store_goods [🔗 ODS](#ods-store-goods-master)

共 26 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `site_goods_id` | bigint | [`id`](#ods-store-goods-master) | 直接 | 门店商品 ID |
| 2 | `tenant_id` | bigint | [`tenant_id`](#ods-store-goods-master) | 直接 | 租户 ID |
| 3 | `site_id` | bigint | [`site_id`](#ods-store-goods-master) | 直接 | 门店 ID → dim_site |
| 4 | `tenant_goods_id` | bigint | [`tenant_goods_id`](#ods-store-goods-master) | 直接 | 租户商品 ID → dim_tenant_goods |
| 5 | `goods_name` | text | [`goods_name`](#ods-store-goods-master) | 直接 | 商品名称。**样本值**: "双中支中华", "炫赫门小南京"等 |
| 6 | `goods_category_id` | bigint | [`goods_category_id`](#ods-store-goods-master) | 直接 | 一级分类 ID → dim_goods_category |
| 7 | `goods_second_category_id` | bigint | [`goods_second_category_id`](#ods-store-goods-master) | 直接 | 二级分类 ID → dim_goods_category |
| 8 | `category_level1_name` | text | [`onecategoryname`](#ods-store-goods-master) | 直接 | 一级分类名称。**样本值**: "零食", "酒水", "其他", "香烟" 等 |
| 9 | `category_level2_name` | text | [`twocategoryname`](#ods-store-goods-master) | 直接 | 二级分类名称。**样本值**: "零食", "饮料", "其他2", "香烟", "雪糕", "酒水", "球杆"... |
| 10 | `batch_stock_qty` | integer | [`stock`](#ods-store-goods-master) | 直接 | 批次库存数量 |
| 11 | `sale_qty` | integer | [`sale_num`](#ods-store-goods-master) | 直接 | 销售数量 |
| 12 | `total_sales_qty` | integer | [`total_sales`](#ods-store-goods-master) | 直接 | 累计销售数量 |
| 13 | `sale_price` | numeric | [`sale_price`](#ods-store-goods-master) | 直接 | 销售价格（元） |
| 14 | `created_at` | timestamp with time zone | [`create_time`](#ods-store-goods-master) | 直接 | 创建时间 |
| 15 | `updated_at` | timestamp with time zone | [`update_time`](#ods-store-goods-master) | 直接 | 更新时间 |
| 16 | `avg_monthly_sales` | numeric | [`average_monthly_sales`](#ods-store-goods-master) | 直接 | 月均销量 |
| 17 | `goods_state` | integer | [`goods_state`](#ods-store-goods-master) | 直接 | 商品状态。**枚举值**: 1=上架, 2=下架 |
| 18 | `enable_status` | integer | [`enable_status`](#ods-store-goods-master) | 直接 | 启用状态。**枚举值**: 1=启用 |
| 19 | `send_state` | integer | [`send_state`](#ods-store-goods-master) | 直接 | 配送状态。暂无作用 |
| 20 | `is_delete` | integer | [`is_delete`](#ods-store-goods-master) | 直接 | 删除标记。**枚举值**: 0=未删除 |
| 21 | `commodity_code` | text | [`commodity_code`](#ods-store-goods-master) | 直接 | 商品编码 |
| 22 | `not_sale` | integer | [`not_sale`](#ods-store-goods-master) | 直接 | 是否停售 |
| 23 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 版本生效时间 |
| 24 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 版本失效时间 |
| 25 | `scd2_is_current` | integer | — | SCD2 | 当前版本标记 |
| 26 | `scd2_version` | integer | — | SCD2 | 版本号 |

<a id="dwd-dim-store-goods-ex"></a>

#### DWD 表结构 — dwd.dim_store_goods_ex [🔗 ODS](#ods-store-goods-master)

共 30 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `site_goods_id` | bigint | [`id`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 2 | `site_name` | text | [`sitename`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 3 | `unit` | text | [`unit`](#ods-store-goods-master) | 直接 | 同名直传 |
| 4 | `goods_barcode` | text | [`goods_bar_code`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 5 | `goods_cover_url` | text | [`goods_cover`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 6 | `pinyin_initial` | text | [`pinyin_initial`](#ods-store-goods-master) | 直接 | 同名直传 |
| 7 | `stock_qty` | integer | [`stock`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 8 | `stock_secondary_qty` | integer | [`stock_a`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 9 | `safety_stock_qty` | integer | [`safe_stock`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 10 | `cost_price` | numeric | [`cost_price`](#ods-store-goods-master) | 直接 | 同名直传 |
| 11 | `cost_price_type` | integer | [`cost_price_type`](#ods-store-goods-master) | 直接 | 同名直传 |
| 12 | `provisional_total_cost` | numeric | [`total_purchase_cost`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 13 | `total_purchase_cost` | numeric | [`total_purchase_cost`](#ods-store-goods-master) | 直接 | 同名直传 |
| 14 | `min_discount_price` | numeric | [`min_discount_price`](#ods-store-goods-master) | 直接 | 同名直传 |
| 15 | `is_discountable` | integer | [`able_discount`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 16 | `days_on_shelf` | integer | [`days_available`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 17 | `audit_status` | integer | [`audit_status`](#ods-store-goods-master) | 直接 | 同名直传 |
| 18 | `sale_channel` | integer | [`sale_channel`](#ods-store-goods-master) | 直接 | 同名直传 |
| 19 | `is_warehousing` | integer | [`is_warehousing`](#ods-store-goods-master) | 直接 | 同名直传 |
| 20 | `freeze_status` | integer | [`freeze`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 21 | `forbid_sell_status` | integer | [`forbid_sell_status`](#ods-store-goods-master) | 直接 | 同名直传 |
| 22 | `able_site_transfer` | integer | [`able_site_transfer`](#ods-store-goods-master) | 直接 | 同名直传 |
| 23 | `custom_label_type` | integer | [`custom_label_type`](#ods-store-goods-master) | 直接 | 同名直传 |
| 24 | `option_required` | integer | [`option_required`](#ods-store-goods-master) | 直接 | 同名直传 |
| 25 | `remark` | text | [`remark`](#ods-store-goods-master) | 直接 | 维度字段，用于补充维度属性 |
| 26 | `sort_order` | integer | [`sort`](#ods-store-goods-master) | 直接 | 字段重命名 |
| 27 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 28 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 29 | `scd2_is_current` | integer | — | SCD2 | SCD2 元数据 |
| 30 | `scd2_version` | integer | — | SCD2 | SCD2 元数据 |

### 3.21 table_fee_discount_records（台费折扣/调账）

- 任务代码：`ODS_TABLE_FEE_DISCOUNT`
- 采样记录数：200
- API JSON 字段数：55
- ODS 列数：33
- DWD 目标表：dwd_table_fee_adjust, dwd_table_fee_adjust_ex

<a id="api-table-fee-discount-records"></a>

#### API 源字段 — table_fee_discount_records [🔗 ODS](#ods-table-fee-discount-records)

已映射 30/55，覆盖率 54.5%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `tableProfile.id` | integer | [`id`](#ods-table-fee-discount-records) | 台费打折 / 调整流水主键 ID | 枚举值: `2793022145302597`, `2793001695301765`, `2793023960682565`, `2793020259995717`, `2956248279567557`, `2793018776735877`, `2793023960551493`, `2793012902121605` |
| 2 | `tableProfile.tenant_id` | integer | [`tenant_id`](#ods-table-fee-discount-records) | 租户/品牌 ID | 示例: `2790683160709957` |
| 3 | `tableProfile.tenant_name` | string | [`tenant_name`](#ods-table-fee-discount-records) | 租户名称 |  |
| 4 | `tableProfile.siteName` | string | [`sitename`](#ods-table-fee-discount-records) | 门店名称 | 大小写匹配 |
| 5 | `tableProfile.table_name` | string | [`table_name`](#ods-table-fee-discount-records) | 台桌名称 | 枚举值: `888`, `A3`, `M4`, `S3`, `发财`, `VIP5`, `Ｍ1`, `B4` |
| 6 | `tableProfile.site_table_area_id` | integer | [`site_table_area_id`](#ods-table-fee-discount-records) | 门店台区ID | 枚举值: `2791963855982661`, `2791963794329671`, `2791963887030341`, `2791963836207173`, `2956246442462533`, `2791963825803397`, `2791963807682693`, `2791963848527941` |
| 7 | `tableProfile.area_type_id` | integer | [`area_type_id`](#ods-table-fee-discount-records) | 区域类型ID | 示例: `0` |
| 8 | `tableProfile.table_price` | number | [`table_price`](#ods-table-fee-discount-records) | 台桌价格 | 示例: `0.0` |
| 9 | `tableProfile.ewelink_client_id` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 10 | `tableProfile.site_table_area_name` | string | [`site_table_area_name`](#ods-table-fee-discount-records) | 门店台区名称 | 枚举值: `K包`, `A区`, `麻将房`, `斯诺克区`, `发财`, `VIP包厢`, `B区`, `666` |
| 11 | `tableProfile.charge_free` | integer | [`charge_free`](#ods-table-fee-discount-records) | 是否免费 | 示例: `0` |
| 12 | `siteProfile.id` | integer | [`id`](#ods-table-fee-discount-records) | 台费打折 / 调整流水主键 ID | 📦 嵌套对象；示例: `2790685415443269` |
| 13 | `siteProfile.org_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2790684179467077` |
| 14 | `siteProfile.shop_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `朗朗桌球` |
| 15 | `siteProfile.avatar` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `https://oss.ficoo.vip/admin...` |
| 16 | `siteProfile.business_tel` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `13316068642` |
| 17 | `siteProfile.full_address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区丽阳街12号` |
| 18 | `siteProfile.address` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `广东省广州市天河区天园街道朗朗桌球` |
| 19 | `siteProfile.longitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `113.360321` |
| 20 | `siteProfile.latitude` | number | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `23.133629` |
| 21 | `siteProfile.tenant_site_region_id` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `156440100` |
| 22 | `siteProfile.tenant_id` | integer | [`tenant_id`](#ods-table-fee-discount-records) | 租户/品牌 ID | 📦 嵌套对象；示例: `2790683160709957` |
| 23 | `siteProfile.auto_light` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 24 | `siteProfile.attendance_distance` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 25 | `siteProfile.wifi_name` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 26 | `siteProfile.wifi_password` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 27 | `siteProfile.customer_service_qrcode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 28 | `siteProfile.customer_service_wechat` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 29 | `siteProfile.fixed_pay_qrCode` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 30 | `siteProfile.prod_env` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 31 | `siteProfile.light_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `2` |
| 32 | `siteProfile.light_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `0` |
| 33 | `siteProfile.site_type` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 34 | `siteProfile.light_token` | string | ⚠️ 未映射 |  | 📦 嵌套对象 |
| 35 | `siteProfile.site_label` | string | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `A` |
| 36 | `siteProfile.attendance_enabled` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 37 | `siteProfile.shop_status` | integer | ⚠️ 未映射 |  | 📦 嵌套对象；示例: `1` |
| 38 | `id` | integer | [`id`](#ods-table-fee-discount-records) | 台费打折 / 调整流水主键 ID | 枚举值: `3093721330321541`, `3093570952251653`, `3093460887587141`, `3093240533174469`, `3092712429406405`, `3092712429357253`, `3092668244035717`, `3092563449776389` |
| 39 | `adjust_type` | integer | [`adjust_type`](#ods-table-fee-discount-records) | 文件名是“台费打折”，字段名为“调整类型”，当前所有记录都是 1，即“台费打折/台费减免”这一种调整类型 | 示例: `1` |
| 40 | `applicant_id` | integer | [`applicant_id`](#ods-table-fee-discount-records) | 打折/调账申请人 ID | 示例: `2790687322443013` |
| 41 | `applicant_name` | string | [`applicant_name`](#ods-table-fee-discount-records) | 申请人姓名（带角色描述），为 applicant_id 的冗余显示字段 | 示例: `收银员:郑丽珊` |
| 42 | `create_time` | string | [`create_time`](#ods-table-fee-discount-records) | 台费调整记录的创建时间，即打折操作被执行的时间戳 | 枚举值: `2026-02-13 21:56:07`, `2026-02-13 19:23:08`, `2026-02-13 17:31:10`, `2026-02-13 13:47:01`, `2026-02-13 04:49:48`, `2026-02-13 04:04:51`, `2026-02-13 02:18:15`, `2026-02-12 22:05:58` |
| 43 | `is_delete` | integer | [`is_delete`](#ods-table-fee-discount-records) | 逻辑删除标记（0=否，1=是） | 示例: `0` |
| 44 | `ledger_amount` | number | [`ledger_amount`](#ods-table-fee-discount-records) | 金额字段，用于计费/结算/分摊等金额计算 | 枚举值: `125.88`, `66.14`, `64.0`, `34.0`, `1191.01`, `91.21`, `92.66`, `249.16` |
| 45 | `ledger_count` | integer | [`ledger_count`](#ods-table-fee-discount-records) | 这里不是“秒数”，而是“调整次数/条数”的量化，目前固定为 1，表示“一次调账事件” | 示例: `1` |
| 46 | `ledger_name` | string | [`ledger_name`](#ods-table-fee-discount-records) | 设计上应该用于记录“调账项目名称”或“打折原因描述”（例如某种优惠规则名称），但当前门店并未使用该字段 |  |
| 47 | `ledger_status` | integer | [`ledger_status`](#ods-table-fee-discount-records) | 来自 JSON 导出的原始字段，用于保留业务取值 | 枚举值: `1`, `0` |
| 48 | `operator_id` | integer | [`operator_id`](#ods-table-fee-discount-records) | 实际执行调账操作的操作员 ID | 示例: `2790687322443013` |
| 49 | `operator_name` | string | [`operator_name`](#ods-table-fee-discount-records) | 操作员姓名 | 示例: `收银员:郑丽珊` |
| 50 | `order_settle_id` | integer | [`order_settle_id`](#ods-table-fee-discount-records) | 结算单/小票 ID | 枚举值: `3093721299536133`, `3093570809759941`, `3093460849854725`, `3093240497031301`, `3092711340902597`, `3092668010514757`, `3092562710104197`, `3092315370047749` |
| 51 | `order_trade_no` | integer | [`order_trade_no`](#ods-table-fee-discount-records) | 订单交易号 | 枚举值: `3093324364122309`, `3093400552720645`, `3093249285933253`, `3093153157597509`, `3092230766020741`, `3092158231251269`, `3092081794779333`, `3092053788625093` |
| 52 | `site_id` | integer | [`site_id`](#ods-table-fee-discount-records) | 门店 ID，本批数据全部为同一家门店（朗朗桌球） | 示例: `2790685415443269` |
| 53 | `site_table_id` | integer | [`site_table_id`](#ods-table-fee-discount-records) | 台桌 ID | 枚举值: `2793022145302597`, `2793001695301765`, `2793023960682565`, `2793020259995717`, `2956248279567557`, `2793018776735877`, `2793023960551493`, `2793012902121605` |
| 54 | `tenant_id` | integer | [`tenant_id`](#ods-table-fee-discount-records) | 租户/品牌 ID | 示例: `2790683160709957` |
| 55 | `tenant_table_area_id` | integer | [`tenant_table_area_id`](#ods-table-fee-discount-records) | 租户维度的“台桌区域 ID” | 枚举值: `2791961709907845`, `2791960001957765`, `2791962314215301`, `2791961347968901`, `2956244810877893`, `2791961060364165`, `2791960521691013`, `2791961598955397` |

<a id="ods-table-fee-discount-records"></a>

#### ODS 表结构 — ods.table_fee_discount_records [🔗 API](#api-table-fee-discount-records)

共 33 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`tableProfile.id`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.table_fee_adjust_id`](#dwd-dwd-table-fee-adjust), [`dwd_table_fee_adjust_ex.table_fee_adjust_id`](#dwd-dwd-table-fee-adjust-ex) | 台费打折 / 调整流水主键 ID |
| 2 | `tenant_id` | bigint | [`tableProfile.tenant_id`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.tenant_id`](#dwd-dwd-table-fee-adjust) | 租户/品牌 ID |
| 3 | `site_id` | bigint | [`site_id`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.site_id`](#dwd-dwd-table-fee-adjust) | 门店 ID，本批数据全部为同一家门店（朗朗桌球） |
| 4 | `siteprofile` | jsonb | — | — | （待补充） |
| 5 | `site_table_id` | bigint | [`site_table_id`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.table_id`](#dwd-dwd-table-fee-adjust) | 台桌 ID |
| 6 | `tableprofile` | jsonb | — | — | （待补充） |
| 7 | `tenant_table_area_id` | bigint | [`tenant_table_area_id`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.table_area_id`](#dwd-dwd-table-fee-adjust), [`dwd_table_fee_adjust.tenant_table_area_id`](#dwd-dwd-table-fee-adjust) | 租户维度的“台桌区域 ID” |
| 8 | `adjust_type` | integer | [`adjust_type`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.adjust_type`](#dwd-dwd-table-fee-adjust-ex) | 文件名是“台费打折”，字段名为“调整类型”，当前所有记录都是 1，即“台费打折/台费减免”这一种调整类型 |
| 9 | `ledger_amount` | numeric | [`ledger_amount`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.ledger_amount`](#dwd-dwd-table-fee-adjust) | 金额字段，用于计费/结算/分摊等金额计算 |
| 10 | `ledger_count` | numeric | [`ledger_count`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.ledger_count`](#dwd-dwd-table-fee-adjust-ex) | 这里不是“秒数”，而是“调整次数/条数”的量化，目前固定为 1，表示“一次调账事件” |
| 11 | `ledger_name` | text | [`ledger_name`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.ledger_name`](#dwd-dwd-table-fee-adjust-ex) | 设计上应该用于记录“调账项目名称”或“打折原因描述”（例如某种优惠规则名称），但当前门店并未使用该字段 |
| 12 | `ledger_status` | integer | [`ledger_status`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.ledger_status`](#dwd-dwd-table-fee-adjust) | 来自 JSON 导出的原始字段，用于保留业务取值 |
| 13 | `applicant_id` | bigint | [`applicant_id`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.applicant_id`](#dwd-dwd-table-fee-adjust-ex) | 打折/调账申请人 ID |
| 14 | `applicant_name` | text | [`applicant_name`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.applicant_name`](#dwd-dwd-table-fee-adjust-ex) | 申请人姓名（带角色描述），为 applicant_id 的冗余显示字段 |
| 15 | `operator_id` | bigint | [`operator_id`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.operator_id`](#dwd-dwd-table-fee-adjust-ex) | 实际执行调账操作的操作员 ID |
| 16 | `operator_name` | text | [`operator_name`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.operator_name`](#dwd-dwd-table-fee-adjust-ex) | 操作员姓名 |
| 17 | `order_settle_id` | bigint | [`order_settle_id`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.order_settle_id`](#dwd-dwd-table-fee-adjust) | 结算单/小票 ID |
| 18 | `order_trade_no` | text | [`order_trade_no`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.order_trade_no`](#dwd-dwd-table-fee-adjust) | 订单交易号 |
| 19 | `is_delete` | integer | [`is_delete`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.is_delete`](#dwd-dwd-table-fee-adjust) | 逻辑删除标记（0=否，1=是） |
| 20 | `create_time` | timestamp without time zone | [`create_time`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.adjust_time`](#dwd-dwd-table-fee-adjust) | 台费调整记录的创建时间，即打折操作被执行的时间戳 |
| 21 | `area_type_id` | bigint | [`tableProfile.area_type_id`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.area_type_id`](#dwd-dwd-table-fee-adjust-ex) | 区域类型ID |
| 22 | `charge_free` | boolean | [`tableProfile.charge_free`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.charge_free`](#dwd-dwd-table-fee-adjust) | 是否免费 |
| 23 | `site_table_area_id` | bigint | [`tableProfile.site_table_area_id`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.site_table_area_id`](#dwd-dwd-table-fee-adjust-ex) | 门店台区ID |
| 24 | `site_table_area_name` | text | [`tableProfile.site_table_area_name`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.site_table_area_name`](#dwd-dwd-table-fee-adjust-ex) | 门店台区名称 |
| 25 | `sitename` | text | [`tableProfile.siteName`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.site_name`](#dwd-dwd-table-fee-adjust-ex) | 门店名称 |
| 26 | `table_name` | text | [`tableProfile.table_name`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.table_name`](#dwd-dwd-table-fee-adjust) | 台桌名称 |
| 27 | `table_price` | numeric | [`tableProfile.table_price`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust.table_price`](#dwd-dwd-table-fee-adjust) | 台桌价格 |
| 28 | `tenant_name` | text | [`tableProfile.tenant_name`](#api-table-fee-discount-records) | [`dwd_table_fee_adjust_ex.tenant_name`](#dwd-dwd-table-fee-adjust-ex) | 租户名称 |
| 29 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 30 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 31 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 32 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
| 33 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |

<a id="dwd-dwd-table-fee-adjust"></a>

#### DWD 表结构 — dwd.dwd_table_fee_adjust [🔗 ODS](#ods-table-fee-discount-records)

共 16 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `table_fee_adjust_id` | bigint | [`id`](#ods-table-fee-discount-records) | 直接 | 台费调整 ID |
| 2 | `order_trade_no` | bigint | [`order_trade_no`](#ods-table-fee-discount-records) | 直接 | 订单号 |
| 3 | `order_settle_id` | bigint | [`order_settle_id`](#ods-table-fee-discount-records) | 直接 | 结账单 ID → dwd_settlement_head |
| 4 | `tenant_id` | bigint | [`tenant_id`](#ods-table-fee-discount-records) | 直接 | 租户 ID |
| 5 | `site_id` | bigint | [`site_id`](#ods-table-fee-discount-records) | 直接 | 门店 ID |
| 6 | `table_id` | bigint | [`site_table_id`](#ods-table-fee-discount-records) | 直接 | 台桌 ID → dim_table |
| 7 | `table_area_id` | bigint | [`tenant_table_area_id`](#ods-table-fee-discount-records) | 直接 | 台区 ID |
| 8 | `table_area_name` | character varying | [`tableprofile->>'table_area_name'`](#ods-table-fee-discount-records) | 直接 | 台区名称（当前数据全为 NULL） |
| 9 | `tenant_table_area_id` | bigint | [`tenant_table_area_id`](#ods-table-fee-discount-records) | 直接 | 租户台区 ID |
| 10 | `ledger_amount` | numeric | [`ledger_amount`](#ods-table-fee-discount-records) | 直接 | 调整金额（元） |
| 11 | `ledger_status` | integer | [`ledger_status`](#ods-table-fee-discount-records) | 直接 | 账本状态。**枚举值**: 0=待确认, 1=已确认 |
| 12 | `is_delete` | integer | [`is_delete`](#ods-table-fee-discount-records) | 直接 | 删除标记。**枚举值**: 0=未删除 |
| 13 | `adjust_time` | timestamp with time zone | [`create_time`](#ods-table-fee-discount-records) | 直接 | 调整时间 |
| 14 | `table_name` | text | [`table_name`](#ods-table-fee-discount-records) | 直接 | 台桌名称 |
| 15 | `table_price` | numeric | [`table_price`](#ods-table-fee-discount-records) | 直接 | 台桌价格 |
| 16 | `charge_free` | boolean | [`charge_free`](#ods-table-fee-discount-records) | → boolean | 是否免费 |

<a id="dwd-dwd-table-fee-adjust-ex"></a>

#### DWD 表结构 — dwd.dwd_table_fee_adjust_ex [🔗 ODS](#ods-table-fee-discount-records)

共 13 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `table_fee_adjust_id` | bigint | [`id`](#ods-table-fee-discount-records) | 直接 | 字段重命名 |
| 2 | `adjust_type` | integer | [`adjust_type`](#ods-table-fee-discount-records) | 直接 | 同名直传 |
| 3 | `ledger_count` | integer | [`ledger_count`](#ods-table-fee-discount-records) | 直接 | 同名直传 |
| 4 | `ledger_name` | character varying | [`ledger_name`](#ods-table-fee-discount-records) | 直接 | 名称字段，用于展示与辅助识别 |
| 5 | `applicant_name` | character varying | [`applicant_name`](#ods-table-fee-discount-records) | 直接 | 同名直传 |
| 6 | `operator_name` | character varying | [`operator_name`](#ods-table-fee-discount-records) | 直接 | 同名直传 |
| 7 | `applicant_id` | bigint | [`applicant_id`](#ods-table-fee-discount-records) | 直接 | 同名直传 |
| 8 | `operator_id` | bigint | [`operator_id`](#ods-table-fee-discount-records) | 直接 | 同名直传 |
| 9 | `area_type_id` | bigint | [`area_type_id`](#ods-table-fee-discount-records) | 直接 |  |
| 10 | `site_table_area_id` | bigint | [`site_table_area_id`](#ods-table-fee-discount-records) | 直接 |  |
| 11 | `site_table_area_name` | text | [`site_table_area_name`](#ods-table-fee-discount-records) | 直接 |  |
| 12 | `site_name` | text | [`sitename`](#ods-table-fee-discount-records) | 直接 | 字段重命名 |
| 13 | `tenant_name` | text | [`tenant_name`](#ods-table-fee-discount-records) | 直接 |  |

### 3.22 tenant_goods_master（租户商品档案）

- 任务代码：`ODS_TENANT_GOODS`
- 采样记录数：174
- API JSON 字段数：32
- ODS 列数：37
- DWD 目标表：dim_tenant_goods, dim_tenant_goods_ex

<a id="api-tenant-goods-master"></a>

#### API 源字段 — tenant_goods_master [🔗 ODS](#ods-tenant-goods-master)

已映射 32/32，覆盖率 100.0%

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|
| 1 | `categoryName` | string | [`categoryname`](#ods-tenant-goods-master) | （待补充） | 大小写匹配；枚举值: `饮料`, `面`, `酒水`, `零食`, `槟榔`, `雪糕`, `香烟`, `小吃` |
| 2 | `isInSite` | boolean | [`isinsite`](#ods-tenant-goods-master) | （待补充） | 大小写匹配；示例: `False` |
| 3 | `commodityCode[]` | string | [`commoditycode`](#ods-tenant-goods-master) | （待补充） | 大小写匹配；枚举值: `10000028`, `10000002`, `10000012`, `10000020`, `10000010`, `10000006`, `10000123`, `10000019` |
| 4 | `id` | integer | [`id`](#ods-tenant-goods-master) | 商品档案主键 ID，唯一标识一条商品 | 枚举值: `2791925230096261`, `2792037812375429`, `2792038476746629`, `2792039804047237`, `2792044495523717`, `2792045494685573`, `2792056126328709`, `2792067181399941` |
| 5 | `able_discount` | integer | [`able_discount`](#ods-tenant-goods-master) | 是否允许参与折扣/打折 | 示例: `1` |
| 6 | `able_site_transfer` | integer | [`able_site_transfer`](#ods-tenant-goods-master) | 布尔/开关字段，用于表示权限、可用性或状态开关 | 枚举值: `2`, `0` |
| 7 | `commodity_code` | string | [`commodity_code`](#ods-tenant-goods-master) | 商品编码（通常为对外商品编码或条码） | 枚举值: `10000028`, `10000002`, `10000012`, `10000020`, `10000010`, `10000006`, `10000123`, `10000019` |
| 8 | `common_sale_royalty` | integer | [`common_sale_royalty`](#ods-tenant-goods-master) | 普通销售提成比例或提成金额的配置字段 | 示例: `0` |
| 9 | `cost_price` | number | [`cost_price`](#ods-tenant-goods-master) | 成本价格 | 枚举值: `0.0`, `2.5`, `3.0`, `2.0`, `35.0` |
| 10 | `cost_price_type` | integer | [`cost_price_type`](#ods-tenant-goods-master) | 金额字段，用于计费/结算/分摊等金额计算 | 枚举值: `1`, `2` |
| 11 | `create_time` | string | [`create_time`](#ods-tenant-goods-master) | 商品档案创建时间 | 枚举值: `2025-07-15 17:13:15`, `2025-07-15 19:07:46`, `2025-07-15 19:08:27`, `2025-07-15 19:09:48`, `2025-07-15 19:14:34`, `2025-07-15 19:15:35`, `2025-07-15 19:26:24`, `2025-07-15 19:37:39` |
| 12 | `goods_bar_code` | string | [`goods_bar_code`](#ods-tenant-goods-master) | 商品条码（EAN 等），目前未维护 |  |
| 13 | `goods_category_id` | integer | [`goods_category_id`](#ods-tenant-goods-master) | 商品一级分类 ID | 枚举值: `2790683528350539`, `2791941988405125`, `2790683528350533`, `2791942087561093`, `2792062778003333`, `2793220945250117`, `2790683528350535`, `2793217944864581` |
| 14 | `goods_cover` | string | [`goods_cover`](#ods-tenant-goods-master) | 商品封面图片 URL 地址 | 枚举值: `https://oss.ficoo.vip/admin/ZwS8fj_1753175129443.jpg`, `https://oss.ficoo.vip/admin/mWT72w_1721195534466.png`, `https://oss.ficoo.vip/admin/rbm2dh_1753175603319.jpg`, `https://oss.ficoo.vip/admin/17r1dP_1721196142478.jpg`, `https://oss.ficoo.vip/admin/bYc2xB_1721195801432.png`, `https://oss.ficoo.vip/admin/xb1n3a_1753204721074.jpg`, `https://oss.ficoo.vip/admin/RWW8bM_1710125368666.jpg`, `https://oss.ficoo.vip/admin/75yN2R_1721196107928.jpg` |
| 15 | `goods_name` | string | [`goods_name`](#ods-tenant-goods-master) | 商品名称（前台展示名称） | 枚举值: `东方树叶`, `红烧牛肉面`, `水溶C`, `百威235毫升`, `薯片`, `100  和成天下`, `可爱多`, `奥利奥饼干` |
| 16 | `goods_number` | string | [`goods_number`](#ods-tenant-goods-master) | 商品内部编码（自定义货号/系统货号） | 枚举值: `1`, `2`, `3`, `4`, `5`, `6`, `9`, `7` |
| 17 | `goods_second_category_id` | integer | [`goods_second_category_id`](#ods-tenant-goods-master) | 商品二级分类 ID | 枚举值: `2790683528350540`, `2793236829620037`, `2790683528350541`, `2791948300259205`, `2790683528350534`, `2792035069284229`, `2792063209623429`, `2793221283104581` |
| 18 | `goods_state` | integer | [`goods_state`](#ods-tenant-goods-master) | 商品状态（上架/下架等） | 枚举值: `1`, `2` |
| 19 | `is_delete` | integer | [`is_delete`](#ods-tenant-goods-master) | 逻辑删除标志 | 示例: `0` |
| 20 | `is_warehousing` | integer | [`is_warehousing`](#ods-tenant-goods-master) | 是否启用库存管理 | 示例: `1` |
| 21 | `market_price` | number | [`market_price`](#ods-tenant-goods-master) | 商品标价 / 售价（标准销售单价） | 枚举值: `8.0`, `12.0`, `15.0`, `6.0`, `115.0`, `18.0`, `5.0`, `72.0` |
| 22 | `min_discount_price` | number | [`min_discount_price`](#ods-tenant-goods-master) | 该商品允许售卖的最低价格（底价） | 枚举值: `0.0`, `6.0`, `2.0`, `5.0`, `10.0`, `115.0`, `8.0`, `4.0` |
| 23 | `not_sale` | integer | [`not_sale`](#ods-tenant-goods-master) | （待补充） | 示例: `2` |
| 24 | `out_goods_id` | integer | [`out_goods_id`](#ods-tenant-goods-master) | 外部系统商品 ID（对接第三方平台使用，如外卖、线上商城等） | 示例: `0` |
| 25 | `pinyin_initial` | string | [`pinyin_initial`](#ods-tenant-goods-master) | 拼音首字母/助记码 | 枚举值: `DFSY,DFSX`, `HSNRM,GSNRM`, `SRC`, `BW235HS`, `SP`, `100  HCTX`, `KAD`, `ALABG` |
| 26 | `point_sale_royalty` | integer | [`point_sale_royalty`](#ods-tenant-goods-master) | 积分销售提成/积分赠送规则相关配置 | 示例: `0` |
| 27 | `remark_name` | string | [`remark_name`](#ods-tenant-goods-master) | 商品备注名/别名，通常用来配置简写或特殊显示名称 |  |
| 28 | `sale_channel` | string | [`sale_channel`](#ods-tenant-goods-master) | 销售渠道类型，如“门店堂食/线下零售/线上小程序”等的一种编码 | 示例: `1,2,3` |
| 29 | `supplier_id` | integer | [`supplier_id`](#ods-tenant-goods-master) | 供应商 ID，用于关联到供应商档案 | 示例: `0` |
| 30 | `tenant_id` | integer | [`tenant_id`](#ods-tenant-goods-master) | 租户/品牌 ID | 示例: `2790683160709957` |
| 31 | `unit` | string | [`unit`](#ods-tenant-goods-master) | 计量单位 | 枚举值: `瓶`, `桶`, `包`, `个`, `盒`, `份`, `根`, `杯` |
| 32 | `update_time` | string | [`update_time`](#ods-tenant-goods-master) | 商品档案最近一次修改时间 | 出现率 83%；枚举值: `2025-10-29 23:51:38`, `2025-08-09 20:23:23`, `2025-11-10 18:27:31`, `2025-07-24 16:30:27`, `2025-11-10 18:27:45`, `2025-11-10 18:27:54`, `2025-07-23 15:38:28`, `2025-11-10 18:28:01` |

<a id="ods-tenant-goods-master"></a>

#### ODS 表结构 — ods.tenant_goods_master [🔗 API](#api-tenant-goods-master)

共 37 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `id` | bigint | [`id`](#api-tenant-goods-master) | [`dim_tenant_goods.tenant_goods_id`](#dwd-dim-tenant-goods), [`dim_tenant_goods_ex.tenant_goods_id`](#dwd-dim-tenant-goods-ex) | 商品档案主键 ID，唯一标识一条商品 |
| 2 | `tenant_id` | bigint | [`tenant_id`](#api-tenant-goods-master) | [`dim_tenant_goods.tenant_id`](#dwd-dim-tenant-goods) | 租户/品牌 ID |
| 3 | `goods_name` | text | [`goods_name`](#api-tenant-goods-master) | [`dim_tenant_goods.goods_name`](#dwd-dim-tenant-goods) | 商品名称（前台展示名称） |
| 4 | `goods_bar_code` | text | [`goods_bar_code`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.goods_bar_code`](#dwd-dim-tenant-goods-ex) | 商品条码（EAN 等），目前未维护 |
| 5 | `goods_category_id` | bigint | [`goods_category_id`](#api-tenant-goods-master) | [`dim_tenant_goods.goods_category_id`](#dwd-dim-tenant-goods) | 商品一级分类 ID |
| 6 | `goods_second_category_id` | bigint | [`goods_second_category_id`](#api-tenant-goods-master) | [`dim_tenant_goods.goods_second_category_id`](#dwd-dim-tenant-goods) | 商品二级分类 ID |
| 7 | `categoryname` | text | [`categoryName`](#api-tenant-goods-master) | [`dim_tenant_goods.category_name`](#dwd-dim-tenant-goods) | （待补充） |
| 8 | `unit` | text | [`unit`](#api-tenant-goods-master) | [`dim_tenant_goods.unit`](#dwd-dim-tenant-goods) | 计量单位 |
| 9 | `goods_number` | text | [`goods_number`](#api-tenant-goods-master) | [`dim_tenant_goods.goods_number`](#dwd-dim-tenant-goods) | 商品内部编码（自定义货号/系统货号） |
| 10 | `out_goods_id` | text | [`out_goods_id`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.out_goods_id`](#dwd-dim-tenant-goods-ex) | 外部系统商品 ID（对接第三方平台使用，如外卖、线上商城等） |
| 11 | `goods_state` | integer | [`goods_state`](#api-tenant-goods-master) | [`dim_tenant_goods.goods_state`](#dwd-dim-tenant-goods) | 商品状态（上架/下架等） |
| 12 | `sale_channel` | integer | [`sale_channel`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.sale_channel`](#dwd-dim-tenant-goods-ex) | 销售渠道类型，如“门店堂食/线下零售/线上小程序”等的一种编码 |
| 13 | `able_discount` | integer | [`able_discount`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.able_discount`](#dwd-dim-tenant-goods-ex) | 是否允许参与折扣/打折 |
| 14 | `able_site_transfer` | integer | [`able_site_transfer`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.able_site_transfer`](#dwd-dim-tenant-goods-ex) | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| 15 | `is_delete` | integer | [`is_delete`](#api-tenant-goods-master) | [`dim_tenant_goods.is_delete`](#dwd-dim-tenant-goods) | 逻辑删除标志 |
| 16 | `is_warehousing` | integer | [`is_warehousing`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.is_warehousing`](#dwd-dim-tenant-goods-ex) | 是否启用库存管理 |
| 17 | `isinsite` | integer | [`isInSite`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.is_in_site`](#dwd-dim-tenant-goods-ex) | （待补充） |
| 18 | `cost_price` | numeric | [`cost_price`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.cost_price`](#dwd-dim-tenant-goods-ex) | 成本价格 |
| 19 | `cost_price_type` | integer | [`cost_price_type`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.cost_price_type`](#dwd-dim-tenant-goods-ex) | 金额字段，用于计费/结算/分摊等金额计算 |
| 20 | `market_price` | numeric | [`market_price`](#api-tenant-goods-master) | [`dim_tenant_goods.market_price`](#dwd-dim-tenant-goods) | 商品标价 / 售价（标准销售单价） |
| 21 | `min_discount_price` | numeric | [`min_discount_price`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.min_discount_price`](#dwd-dim-tenant-goods-ex) | 该商品允许售卖的最低价格（底价） |
| 22 | `common_sale_royalty` | numeric | [`common_sale_royalty`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.common_sale_royalty`](#dwd-dim-tenant-goods-ex) | 普通销售提成比例或提成金额的配置字段 |
| 23 | `point_sale_royalty` | numeric | [`point_sale_royalty`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.point_sale_royalty`](#dwd-dim-tenant-goods-ex) | 积分销售提成/积分赠送规则相关配置 |
| 24 | `pinyin_initial` | text | [`pinyin_initial`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.pinyin_initial`](#dwd-dim-tenant-goods-ex) | 拼音首字母/助记码 |
| 25 | `commoditycode` | text | [`commodityCode[]`](#api-tenant-goods-master) | — | （待补充） |
| 26 | `commodity_code` | text | [`commodity_code`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.commodity_code`](#dwd-dim-tenant-goods-ex), [`dim_tenant_goods_ex.commodity_code_list`](#dwd-dim-tenant-goods-ex) | 商品编码（通常为对外商品编码或条码） |
| 27 | `goods_cover` | text | [`goods_cover`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.goods_cover`](#dwd-dim-tenant-goods-ex) | 商品封面图片 URL 地址 |
| 28 | `supplier_id` | bigint | [`supplier_id`](#api-tenant-goods-master) | [`dim_tenant_goods.supplier_id`](#dwd-dim-tenant-goods) | 供应商 ID，用于关联到供应商档案 |
| 29 | `remark_name` | text | [`remark_name`](#api-tenant-goods-master) | [`dim_tenant_goods_ex.remark_name`](#dwd-dim-tenant-goods-ex) | 商品备注名/别名，通常用来配置简写或特殊显示名称 |
| 30 | `create_time` | timestamp without time zone | [`create_time`](#api-tenant-goods-master) | [`dim_tenant_goods.create_time`](#dwd-dim-tenant-goods) | 商品档案创建时间 |
| 31 | `update_time` | timestamp without time zone | [`update_time`](#api-tenant-goods-master) | [`dim_tenant_goods.update_time`](#dwd-dim-tenant-goods) | 商品档案最近一次修改时间 |
| 32 | `not_sale` | integer | [`not_sale`](#api-tenant-goods-master) | [`dim_tenant_goods.not_sale`](#dwd-dim-tenant-goods) | （待补充） |
| 33 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |
| 34 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 35 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 36 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 37 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |

<a id="dwd-dim-tenant-goods"></a>

#### DWD 表结构 — dwd.dim_tenant_goods [🔗 ODS](#ods-tenant-goods-master)

共 19 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `tenant_goods_id` | bigint | [`id`](#ods-tenant-goods-master) | 直接 | 租户商品 ID（SKU） |
| 2 | `tenant_id` | bigint | [`tenant_id`](#ods-tenant-goods-master) | 直接 | 租户 ID |
| 3 | `supplier_id` | bigint | [`supplier_id`](#ods-tenant-goods-master) | 直接 | 供应商 ID（当前数据全为 0） |
| 4 | `category_name` | character varying | [`categoryname`](#ods-tenant-goods-master) | 直接 | 分类名称（二级分类）。**样本值**: "零食", "饮料", "香烟"等 |
| 5 | `goods_category_id` | bigint | [`goods_category_id`](#ods-tenant-goods-master) | 直接 | 一级分类 ID |
| 6 | `goods_second_category_id` | bigint | [`goods_second_category_id`](#ods-tenant-goods-master) | 直接 | 二级分类 ID |
| 7 | `goods_name` | character varying | [`goods_name`](#ods-tenant-goods-master) | 直接 | 商品名称。**样本值**: "海之言", "西梅多多饮品", "美汁源果粒橙", "三诺橙汁"等 |
| 8 | `goods_number` | character varying | [`goods_number`](#ods-tenant-goods-master) | 直接 | 商品编号（序号） |
| 9 | `unit` | character varying | [`unit`](#ods-tenant-goods-master) | 直接 | 商品单位。**枚举值**: "包", "瓶", "个", "份"等 |
| 10 | `market_price` | numeric | [`market_price`](#ods-tenant-goods-master) | 直接 | 市场价/吊牌价（元） |
| 11 | `goods_state` | integer | [`goods_state`](#ods-tenant-goods-master) | 直接 | 商品状态。**枚举值**: 1=上架, 2=下架 |
| 12 | `create_time` | timestamp with time zone | [`create_time`](#ods-tenant-goods-master) | 直接 | 创建时间 |
| 13 | `update_time` | timestamp with time zone | [`update_time`](#ods-tenant-goods-master) | 直接 | 更新时间 |
| 14 | `is_delete` | integer | [`is_delete`](#ods-tenant-goods-master) | 直接 | 删除标记。**枚举值**: 0=未删除 |
| 15 | `not_sale` | integer | [`not_sale`](#ods-tenant-goods-master) | 直接 | 是否停售 |
| 16 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 版本生效时间 |
| 17 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 版本失效时间 |
| 18 | `scd2_is_current` | integer | — | SCD2 | 当前版本标记 |
| 19 | `scd2_version` | integer | — | SCD2 | 版本号 |

<a id="dwd-dim-tenant-goods-ex"></a>

#### DWD 表结构 — dwd.dim_tenant_goods_ex [🔗 ODS](#ods-tenant-goods-master)

共 22 列

| # | DWD 列名 | 类型 | ← ODS 来源 | 转换 | 业务描述 |
|---|---------|------|----------|------|---------|
| 1 | `tenant_goods_id` | bigint | [`id`](#ods-tenant-goods-master) | 直接 | 字段重命名 |
| 2 | `remark_name` | character varying | [`remark_name`](#ods-tenant-goods-master) | 直接 | 名称字段，用于展示与辅助识别 |
| 3 | `pinyin_initial` | character varying | [`pinyin_initial`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 4 | `goods_cover` | character varying | [`goods_cover`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 5 | `goods_bar_code` | character varying | [`goods_bar_code`](#ods-tenant-goods-master) | 直接 | 维度字段，用于补充维度属性 |
| 6 | `commodity_code` | character varying | [`commodity_code`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 7 | `commodity_code_list` | character varying | [`commodity_code`](#ods-tenant-goods-master) | 直接 | 字段重命名 |
| 8 | `min_discount_price` | numeric | [`min_discount_price`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 9 | `cost_price` | numeric | [`cost_price`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 10 | `cost_price_type` | integer | [`cost_price_type`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 11 | `able_discount` | integer | [`able_discount`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 12 | `sale_channel` | integer | [`sale_channel`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 13 | `is_warehousing` | integer | [`is_warehousing`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 14 | `is_in_site` | boolean | [`isinsite`](#ods-tenant-goods-master) | → boolean | 字段重命名 |
| 15 | `able_site_transfer` | integer | [`able_site_transfer`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 16 | `common_sale_royalty` | integer | [`common_sale_royalty`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 17 | `point_sale_royalty` | integer | [`point_sale_royalty`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 18 | `out_goods_id` | bigint | [`out_goods_id`](#ods-tenant-goods-master) | 直接 | 同名直传 |
| 19 | `scd2_start_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 20 | `scd2_end_time` | timestamp with time zone | — | SCD2 | SCD2 元数据 |
| 21 | `scd2_is_current` | integer | — | SCD2 | SCD2 元数据 |
| 22 | `scd2_version` | integer | — | SCD2 | SCD2 元数据 |

### 3.23 settlement_ticket_details（结账小票详情（按 orderSettleId 逐条获取，不走常规分页））

- 任务代码：`ODS_SETTLEMENT_TICKET`
- 采样记录数：0
- API JSON 字段数：0
- ODS 列数：43
- DWD 目标表：—（仅 ODS 落地）

<a id="api-settlement-ticket-details"></a>

#### API 源字段 — settlement_ticket_details [🔗 ODS](#ods-settlement-ticket-details)

无字段

| # | JSON 字段 | 类型 | → ODS 列 | 业务描述 | 示例值与说明 |
|---|----------|------|---------|---------|------------|

<a id="ods-settlement-ticket-details"></a>

#### ODS 表结构 — ods.settlement_ticket_details [🔗 API](#api-settlement-ticket-details)

共 43 列

| # | ODS 列名 | 类型 | ← JSON 源 | → DWD 目标 | 业务描述 |
|---|---------|------|----------|-----------|---------|
| 1 | `ordersettleid` | bigint | — | — | （待补充） |
| 2 | `actualpayment` | numeric | — | — | （待补充） |
| 3 | `adjustamount` | numeric | — | — | （待补充） |
| 4 | `assistantmanualdiscount` | numeric | — | — | （待补充） |
| 5 | `balanceamount` | numeric | — | — | （待补充） |
| 6 | `cashiername` | text | — | — | （待补充） |
| 7 | `consumemoney` | numeric | — | — | （待补充） |
| 8 | `couponamount` | numeric | — | — | （待补充） |
| 9 | `deliveryaddress` | text | — | — | （待补充） |
| 10 | `deliveryfee` | numeric | — | — | （待补充） |
| 11 | `ledgeramount` | numeric | — | — | （待补充） |
| 12 | `memberdeductamount` | numeric | — | — | （待补充） |
| 13 | `memberofferamount` | numeric | — | — | （待补充） |
| 14 | `onlinereturnamount` | numeric | — | — | （待补充） |
| 15 | `orderremark` | text | — | — | （待补充） |
| 16 | `ordersettlenumber` | bigint | — | — | （待补充） |
| 17 | `paymemberbalance` | numeric | — | — | （待补充） |
| 18 | `paytime` | timestamp without time zone | — | — | （待补充） |
| 19 | `paymentmethod` | integer | — | — | （待补充） |
| 20 | `pointdiscountcost` | numeric | — | — | （待补充） |
| 21 | `pointdiscountprice` | numeric | — | — | （待补充） |
| 22 | `prepaymoney` | numeric | — | — | （待补充） |
| 23 | `refundamount` | numeric | — | — | （待补充） |
| 24 | `returngoodsamount` | numeric | — | — | （待补充） |
| 25 | `rewardname` | text | — | — | （待补充） |
| 26 | `settletype` | text | — | — | （待补充） |
| 27 | `siteaddress` | text | — | — | （待补充） |
| 28 | `sitebusinesstel` | text | — | — | （待补充） |
| 29 | `siteid` | bigint | — | — | （待补充） |
| 30 | `sitename` | text | — | — | （待补充） |
| 31 | `tenantid` | bigint | — | — | （待补充） |
| 32 | `tenantname` | text | — | — | （待补充） |
| 33 | `ticketcustomcontent` | text | — | — | （待补充） |
| 34 | `ticketremark` | text | — | — | （待补充） |
| 35 | `vouchermoney` | numeric | — | — | （待补充） |
| 36 | `memberprofile` | jsonb | — | — | （待补充） |
| 37 | `orderitem` | jsonb | — | — | （待补充） |
| 38 | `tenantmembercardlogs` | jsonb | — | — | （待补充） |
| 39 | `payload` | jsonb | — | — | ETL 元数据：完整原始 JSON 记录快照，用于回溯与二次解析 |
| 40 | `content_hash` | text | — | — | ETL 元数据：对业务字段计算 SHA256，用于变更检测与去重 |
| 41 | `source_file` | text | — | — | ETL 元数据：原始导出文件名，用于数据追溯 |
| 42 | `source_endpoint` | text | — | — | ETL 元数据：采集来源（接口/文件路径），用于数据追溯 |
| 43 | `fetched_at` | timestamp with time zone | — | — | ETL 元数据：采集/入库时间戳，用于口径对齐与增量处理 |
