在准备环境前提交次全部更改。

This commit is contained in:
Neo
2026-02-19 08:35:13 +08:00
parent ded6dfb9d8
commit 4eac07da47
1387 changed files with 6107191 additions and 33002 deletions

View File

@@ -0,0 +1,94 @@
# dim_assistant_ex 助教档案扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_assistant_ex |
| 主键 | assistant_id, scd2_start_time |
| 主表 | dim_assistant |
| 记录数 | 69 |
| 说明 | 助教档案的扩展字段,包含个人资料、评分、状态配置、灯控等详细信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | assistant_id | BIGINT | NO | PK | 助教 ID → dim_assistant |
| 2 | gender | INTEGER | YES | | 性别。**枚举值**: 0(59)=未填写, 2(10)=女(**[1=男 待确认]** |
| 3 | birth_date | TIMESTAMPTZ | YES | | 出生日期 |
| 4 | avatar | TEXT | YES | | 头像 URL默认: https://oss.ficoo.vip/maUiImages/images/defaultAvatar.png |
| 5 | introduce | TEXT | YES | | 个人简介(当前数据全为空) |
| 6 | video_introduction_url | TEXT | YES | | 视频介绍 URL |
| 7 | height | NUMERIC(5,2) | YES | | 身高(厘米) |
| 8 | weight | NUMERIC(5,2) | YES | | 体重(公斤) |
| 9 | shop_name | TEXT | YES | | 门店名称快照。**当前值**: "朗朗桌球" |
| 10 | group_id | BIGINT | YES | | 分组 ID当前数据全为 0 |
| 11 | group_name | TEXT | YES | | 分组名称(当前数据全为空) |
| 12 | person_org_id | BIGINT | YES | | 人事组织 ID |
| 13 | staff_id | BIGINT | YES | | 员工 ID当前数据全为 0 |
| 14 | staff_profile_id | BIGINT | YES | | 员工档案 ID当前数据全为 0 |
| 15 | assistant_grade | DOUBLE PRECISION | YES | | 平均评分 |
| 16 | sum_grade | DOUBLE PRECISION | YES | | 累计评分 |
| 17 | get_grade_times | INTEGER | YES | | 评分次数(当前数据全为 0 |
| 18 | charge_way | INTEGER | YES | | 计费方式。**枚举值**: 2(69)=计时 **[其他值待确认]** |
| 19 | allow_cx | INTEGER | YES | | 允许促销计费。**枚举值**: 1(69)=允许 |
| 20 | is_guaranteed | INTEGER | YES | | 是否保底。**枚举值**: 1(69)=有保底 |
| 21 | salary_grant_enabled | INTEGER | YES | | 薪资发放开关。**枚举值**: 2(69)=**[含义待确认]** |
| 22 | entry_type | INTEGER | YES | | 入职类型。**枚举值**: 1(68)=正式, 3(1)=**[待确认]** |
| 23 | entry_sign_status | INTEGER | YES | | 入职签约状态。**枚举值**: 0(69)=未签约 |
| 24 | resign_sign_status | INTEGER | YES | | 离职签约状态。**枚举值**: 0(69)=未签约 |
| 25 | work_status | INTEGER | YES | | 工作状态。**枚举值**: 1(29)=在岗, 2(40)=离岗 |
| 26 | show_status | INTEGER | YES | | 展示状态。**枚举值**: 1(69)=显示 |
| 27 | show_sort | INTEGER | YES | | 展示排序序号 |
| 28 | online_status | INTEGER | YES | | 在线状态。**枚举值**: 1(69)=在线 |
| 29 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0(69)=未删除 |
| 30 | criticism_status | INTEGER | YES | | 投诉状态。**枚举值**: 1(68)=**[待确认]**, 2(1)=**[待确认]** |
| 31 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 32 | update_time | TIMESTAMPTZ | YES | | 更新时间 |
| 33 | start_time | TIMESTAMPTZ | YES | | 配置生效开始时间 |
| 34 | end_time | TIMESTAMPTZ | YES | | 配置生效结束时间 |
| 35 | last_table_id | BIGINT | YES | | 最近服务台桌 ID → dim_table |
| 36 | last_table_name | TEXT | YES | | 最近服务台桌名称。**样本值**: "发财", "C2", "VIP包厢 VIP5" |
| 37 | last_update_name | TEXT | YES | | 最近更新操作人。**样本值**: "教练:周蒙", "管理员:郑丽珊" |
| 38 | order_trade_no | BIGINT | YES | | 最近关联订单号 |
| 39 | ding_talk_synced | INTEGER | YES | | 钉钉同步状态。**枚举值**: 1(69)=已同步 |
| 40 | site_light_cfg_id | BIGINT | YES | | 灯控配置 ID当前数据全为 0 |
| 41 | light_equipment_id | TEXT | YES | | 灯控设备 ID当前数据全为空 |
| 42 | light_status | INTEGER | YES | | 灯控状态。**枚举值**: 2(69)=**[含义待确认]** |
| 43 | is_team_leader | INTEGER | YES | | 是否组长。**枚举值**: 0(69)=否 |
| 44 | serial_number | BIGINT | YES | | 序列号 |
| 45 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 46 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 47 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 48 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_assistant_ex
WHERE assistant_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 关联主表与扩展表
SELECT m.*, e.*
FROM dwd.dim_assistant m
JOIN dwd.dim_assistant_ex e
ON m.assistant_id = e.assistant_id
AND m.scd2_start_time = e.scd2_start_time
WHERE m.scd2_is_current = 1;
```

View File

@@ -0,0 +1,79 @@
# dim_groupbuy_package_ex 团购套餐扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_groupbuy_package_ex |
| 主键 | groupbuy_package_id, scd2_start_time |
| 主表 | dim_groupbuy_package |
| 记录数 | 34 |
| 说明 | 团购套餐的扩展配置,包含使用时段、台区限制、套餐类型等详细信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | groupbuy_package_id | BIGINT | NO | PK | 套餐 ID → dim_groupbuy_package |
| 2 | site_name | VARCHAR(100) | YES | | 门店名称快照。**当前值**: "朗朗桌球" |
| 3 | usable_count | INTEGER | YES | | 可使用次数(当前数据全为 0表示不限次 |
| 4 | date_type | INTEGER | YES | | 日期类型。**枚举值**: 1(34)=**[含义待确认]** |
| 5 | usable_range | VARCHAR(255) | YES | | 可用日期范围描述(当前数据全为空) |
| 6 | date_info | VARCHAR(255) | YES | | 日期信息 |
| 7 | start_clock | VARCHAR(16) | YES | | 可用开始时间。**枚举值**: "00:00:00"(29), "10:00:00"(4), "23:00:00"(1) |
| 8 | end_clock | VARCHAR(16) | YES | | 可用结束时间。**枚举值**: "1.00:00:00"(29)=次日0点, "23:59:59"(3), "1.02:00:00"(2)=次日2点 |
| 9 | add_start_clock | VARCHAR(16) | YES | | 附加时段开始时间 |
| 10 | add_end_clock | VARCHAR(16) | YES | | 附加时段结束时间 |
| 11 | area_tag_type | INTEGER | YES | | 区域标记类型。**枚举值**: 1(34)=**[含义待确认]** |
| 12 | table_area_id | BIGINT | YES | | 台区 ID当前数据全为 0 |
| 13 | tenant_table_area_id | BIGINT | YES | | 租户级台区 ID当前数据全为 0 |
| 14 | table_area_id_list | VARCHAR(512) | YES | | 台区 ID 列表(当前数据全为空) |
| 15 | group_type | INTEGER | YES | | 团购类型。**枚举值**: 1(34)=**[含义待确认]** |
| 16 | system_group_type | INTEGER | YES | | 系统团购类型。**枚举值**: 1(34)=**[含义待确认]** |
| 17 | package_type | INTEGER | YES | | 套餐类型。**枚举值**: 1(26)=普通套餐 **[待确认]**, 2(8)=VIP套餐 **[待确认]** |
| 18 | effective_status | INTEGER | YES | | 生效状态。**枚举值**: 1(24)=有效, 3(10)=失效 **[待确认]** |
| 19 | max_selectable_categories | INTEGER | YES | | 最大可选分类数(当前数据全为 0 |
| 20 | creator_name | VARCHAR(100) | YES | | 创建人。**样本值**: "店长:郑丽珊", "管理员:郑丽珊" |
| 21 | tenant_coupon_sale_order_item_id | BIGINT | YES | | 租户券销售订单项 ID |
| 22 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 23 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 24 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 25 | scd2_version | INTEGER | YES | | 版本号 |
## 样本数据
| groupbuy_package_id | start_clock | end_clock | package_type | effective_status | creator_name |
|--------------------|-------------|-----------|--------------|------------------|--------------|
| 2798905767676933 | 00:00:00 | 1.00:00:00 | 2 | 1 | 店长:郑丽珊 |
| 2798901295615045 | 00:00:00 | 1.00:00:00 | 2 | 3 | 店长:郑丽珊 |
| 2798731703045189 | 00:00:00 | 1.00:00:00 | 1 | 1 | 店长:郑丽珊 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_groupbuy_package_ex
WHERE groupbuy_package_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 关联主表与扩展表
SELECT m.package_name, m.duration_seconds, e.start_clock, e.end_clock, e.effective_status
FROM dwd.dim_groupbuy_package m
JOIN dwd.dim_groupbuy_package_ex e
ON m.groupbuy_package_id = e.groupbuy_package_id
AND m.scd2_start_time = e.scd2_start_time
WHERE m.scd2_is_current = 1;
```

View File

@@ -0,0 +1,109 @@
# dim_member_card_account_ex 会员卡账户扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_member_card_account_ex |
| 主键 | member_card_id, scd2_start_time |
| 主表 | dim_member_card_account |
| 记录数 | 945 |
| 说明 | 会员卡账户扩展表,包含折扣配置、抵扣规则、使用限制等详细配置 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | member_card_id | BIGINT | NO | PK | 会员卡 ID → dim_member_card_account |
| 2 | site_name | TEXT | YES | | 门店名称。**当前值**: "朗朗桌球" |
| 3 | tenant_name | VARCHAR(64) | YES | | 租户名称(当前数据全为空) |
| 4 | tenantavatar | TEXT | YES | | 租户头像(当前数据全为空) |
| 5 | effect_site_id | BIGINT | YES | | 生效门店 ID0=不限门店) |
| 6 | able_cross_site | INTEGER | YES | | 允许跨门店。**枚举值**: 1(945)=允许 |
| 7 | card_physics_type | INTEGER | YES | | 物理卡类型。**枚举值**: 1(945)=**[待确认]** |
| 8 | card_no | TEXT | YES | | 物理卡号(当前数据全为空) |
| 9 | bind_password | TEXT | YES | | 绑定密码(当前数据全为空) |
| 10 | use_scene | TEXT | YES | | 使用场景(当前数据全为空) |
| 11 | denomination | NUMERIC(18,2) | YES | | 面额/初始额度 |
| 12 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 13 | disable_start_time | TIMESTAMPTZ | YES | | 禁用开始时间 |
| 14 | disable_end_time | TIMESTAMPTZ | YES | | 禁用结束时间 |
| 15 | is_allow_give | INTEGER | YES | | 允许转赠。**枚举值**: 0(945)=不允许 |
| 16 | is_allow_order_deduct | INTEGER | YES | | 允许订单抵扣。**枚举值**: 0(945)=不允许 |
| 17 | sort | INTEGER | YES | | 排序序号 |
| 18 | table_discount | NUMERIC(10,2) | YES | | 台费折扣率10.0=不打折) |
| 19 | goods_discount | NUMERIC(10,2) | YES | | 商品折扣率 |
| 20 | assistant_discount | NUMERIC(10,2) | YES | | 助教折扣率 |
| 21 | assistant_reward_discount | NUMERIC(10,2) | YES | | 助教奖励折扣率 |
| 22 | table_service_discount | NUMERIC(10,2) | YES | | 台费服务折扣率 |
| 23 | goods_service_discount | NUMERIC(10,2) | YES | | 商品服务折扣率 |
| 24 | assistant_service_discount | NUMERIC(10,2) | YES | | 助教服务折扣率 |
| 25 | coupon_discount | NUMERIC(10,2) | YES | | 券折扣率 |
| 26 | table_discount_sub_switch | INTEGER | YES | | 台费折扣叠加开关。**枚举值**: 2(945)=关闭 **[1=开启 待确认]** |
| 27 | goods_discount_sub_switch | INTEGER | YES | | 商品折扣叠加开关 |
| 28 | assistant_discount_sub_switch | INTEGER | YES | | 助教折扣叠加开关 |
| 29 | assistant_reward_discount_sub_switch | INTEGER | YES | | 助教奖励折扣叠加开关 |
| 30 | goods_discount_range_type | INTEGER | YES | | 商品折扣范围类型。**枚举值**: 1(945)=**[待确认]** |
| 31 | table_deduct_radio | NUMERIC(10,2) | YES | | 台费抵扣比例100.0=全额抵扣) |
| 32 | goods_deduct_radio | NUMERIC(10,2) | YES | | 商品抵扣比例 |
| 33 | assistant_deduct_radio | NUMERIC(10,2) | YES | | 助教抵扣比例 |
| 34 | table_service_deduct_radio | NUMERIC(10,2) | YES | | 台费服务抵扣比例 |
| 35 | goods_service_deduct_radio | NUMERIC(10,2) | YES | | 商品服务抵扣比例 |
| 36 | assistant_service_deduct_radio | NUMERIC(10,2) | YES | | 助教服务抵扣比例 |
| 37 | assistant_reward_deduct_radio | NUMERIC(10,2) | YES | | 助教奖励抵扣比例 |
| 38 | coupon_deduct_radio | NUMERIC(10,2) | YES | | 券抵扣比例 |
| 39 | cardsettlededuct | NUMERIC(18,2) | YES | | 结算扣卡金额配置 |
| 40 | tablecarddeduct | NUMERIC(18,2) | YES | | 台费扣卡金额 |
| 41 | tableservicecarddeduct | NUMERIC(18,2) | YES | | 台费服务扣卡金额 |
| 42 | goodscardeduct | NUMERIC(18,2) | YES | | 商品扣卡金额 |
| 43 | goodsservicecarddeduct | NUMERIC(18,2) | YES | | 商品服务扣卡金额 |
| 44 | assistantcarddeduct | NUMERIC(18,2) | YES | | 助教扣卡金额 |
| 45 | assistantservicecarddeduct | NUMERIC(18,2) | YES | | 助教服务扣卡金额 |
| 46 | assistantrewardcarddeduct | NUMERIC(18,2) | YES | | 助教奖励扣卡金额 |
| 47 | couponcarddeduct | NUMERIC(18,2) | YES | | 券扣卡金额 |
| 48 | deliveryfeededuct | NUMERIC(18,2) | YES | | 配送费扣卡金额 |
| 49 | tableareaid | TEXT | YES | | 可用台区 ID 列表(当前数据全为空) |
| 50 | goodscategoryid | TEXT | YES | | 可用商品分类 ID 列表(当前数据全为空) |
| 51 | pdassisnatlevel | TEXT | YES | | 陪打助教等级限制。**当前值**: "{}" |
| 52 | cxassisnatlevel | TEXT | YES | | 促销助教等级限制。**当前值**: "{}" |
| 53 | able_share_member_discount | BOOLEAN | YES | | 是否可共享会员折扣 |
| 54 | electricity_deduct_radio | NUMERIC(18,4) | YES | | 电费扣减比例 |
| 55 | electricity_discount | NUMERIC(18,4) | YES | | 电费折扣 |
| 56 | electricity_card_deduct | BOOLEAN | YES | | 电费卡扣 |
| 57 | recharge_freeze_balance | NUMERIC(18,2) | YES | | 充值冻结余额 |
| 58 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 59 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 60 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 61 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_member_card_account_ex
WHERE member_card_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 关联查询卡片及折扣配置
SELECT
m.member_card_type_name, m.balance,
e.table_discount, e.goods_discount, e.assistant_discount
FROM dwd.dim_member_card_account m
JOIN dwd.dim_member_card_account_ex e
ON m.member_card_id = e.member_card_id
AND m.scd2_start_time = e.scd2_start_time
WHERE m.scd2_is_current = 1;
```

View File

@@ -0,0 +1,68 @@
# dim_member_ex 会员档案扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_member_ex |
| 主键 | member_id, scd2_start_time |
| 主表 | dim_member |
| 记录数 | 556 |
| 说明 | 会员档案扩展表,包含积分、成长值、状态等字段 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | member_id | BIGINT | NO | PK | 会员 ID → dim_member |
| 2 | referrer_member_id | BIGINT | YES | | 推荐人会员 ID当前数据全为 0表示无推荐人 |
| 3 | point | NUMERIC(18,2) | YES | | 积分余额 |
| 4 | register_site_name | TEXT | YES | | 注册门店名称。**当前值**: "朗朗桌球" |
| 5 | growth_value | NUMERIC(18,2) | YES | | 成长值 |
| 6 | user_status | INTEGER | YES | | 用户状态。**枚举值**: 1(556)=正常 |
| 7 | status | INTEGER | YES | | 账户状态。**枚举值**: 1(490)=正常, 3(66)=**[含义待确认]** |
| 8 | person_tenant_org_id | BIGINT | YES | | 人员租户组织 ID |
| 9 | person_tenant_org_name | TEXT | YES | | 人员租户组织名称 |
| 10 | register_source | TEXT | YES | | 注册来源 |
| 11 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 12 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 13 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 14 | scd2_version | INTEGER | YES | | 版本号 |
## 样本数据
| member_id | point | growth_value | user_status | status |
|-----------|-------|--------------|-------------|--------|
| 3043883848157381 | 0.00 | 0.00 | 1 | 1 |
| 3037269565082949 | 0.00 | 0.00 | 1 | 1 |
| 3025342944414469 | 0.00 | 0.00 | 1 | 1 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_member_ex
WHERE member_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 关联主表与扩展表
SELECT m.*, e.point, e.growth_value, e.status
FROM dwd.dim_member m
JOIN dwd.dim_member_ex e
ON m.member_id = e.member_id
AND m.scd2_start_time = e.scd2_start_time
WHERE m.scd2_is_current = 1;
```

View File

@@ -0,0 +1,71 @@
# dim_site_ex 门店扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_site_ex |
| 主键 | site_id, scd2_start_time |
| 主表 | dim_site |
| 记录数 | 1 |
| 说明 | 门店扩展表,包含灯控、考勤、客服等配置信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | site_id | BIGINT | NO | PK | 门店 ID → dim_site |
| 2 | avatar | TEXT | YES | | 门店头像 URL |
| 3 | address | TEXT | YES | | 地址(冗余) |
| 4 | longitude | NUMERIC(9,6) | YES | | 经度(冗余) |
| 5 | latitude | NUMERIC(9,6) | YES | | 纬度(冗余) |
| 6 | tenant_site_region_id | BIGINT | YES | | 区域 ID冗余 |
| 7 | auto_light | INTEGER | YES | | 自动灯控。**枚举值**: 1(1)=启用 |
| 8 | light_status | INTEGER | YES | | 灯控状态。**枚举值**: 1(1)=**[待确认]** |
| 9 | light_type | INTEGER | YES | | 灯控类型。**枚举值**: 0(1)=**[待确认]** |
| 10 | light_token | TEXT | YES | | 灯控令牌 |
| 11 | site_type | INTEGER | YES | | 门店类型(冗余) |
| 12 | site_label | TEXT | YES | | 门店标签(冗余) |
| 13 | attendance_enabled | INTEGER | YES | | 考勤启用。**枚举值**: 1(1)=启用 |
| 14 | attendance_distance | INTEGER | YES | | 考勤距离(米)。**当前值**: 0 |
| 15 | customer_service_qrcode | TEXT | YES | | 客服二维码 URL |
| 16 | customer_service_wechat | TEXT | YES | | 客服微信号 |
| 17 | fixed_pay_qrcode | TEXT | YES | | 固定收款码 URL |
| 18 | prod_env | TEXT | YES | | 环境标识。**当前值**: "1" |
| 19 | shop_status | INTEGER | YES | | 营业状态(冗余) |
| 20 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 21 | update_time | TIMESTAMPTZ | YES | | 更新时间 |
| 22 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 23 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 24 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 25 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_site_ex
WHERE site_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 关联主表与扩展表
SELECT m.*, e.*
FROM dwd.dim_site m
JOIN dwd.dim_site_ex e
ON m.site_id = e.site_id
AND m.scd2_start_time = e.scd2_start_time
WHERE m.scd2_is_current = 1;
```

View File

@@ -0,0 +1,76 @@
# dim_store_goods_ex 门店商品扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_store_goods_ex |
| 主键 | site_goods_id, scd2_start_time |
| 主表 | dim_store_goods |
| 记录数 | 170 |
| 说明 | 门店商品扩展表,包含单位、成本、库存管理、折扣等详细配置 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | site_goods_id | BIGINT | NO | PK | 门店商品 ID → dim_store_goods |
| 2 | site_name | TEXT | YES | | 门店名称。**当前值**: "朗朗桌球" |
| 3 | unit | TEXT | YES | | 商品单位。**枚举值**: "包"(62), "瓶"(49), "个"(17), "份"(14), "根"(10), "杯"(5), "盒"(4), "桶"(3), "盘"(2), "罐"(1), "支"(1), "双"(1), "张"(1) |
| 4 | goods_barcode | TEXT | YES | | 商品条码(当前数据全为空) |
| 5 | goods_cover_url | TEXT | YES | | 商品封面图 URL |
| 6 | pinyin_initial | TEXT | YES | | 拼音首字母(用于搜索) |
| 7 | stock_qty | INTEGER | YES | | 库存数量 |
| 8 | stock_secondary_qty | INTEGER | YES | | 副单位库存(当前数据全为 0 |
| 9 | safety_stock_qty | INTEGER | YES | | 安全库存(当前数据全为 0 |
| 10 | cost_price | NUMERIC(18,4) | YES | | 成本价 |
| 11 | cost_price_type | INTEGER | YES | | 成本价类型。**枚举值**: 1(160)=**[待确认]**, 2(10)=**[待确认]** |
| 12 | provisional_total_cost | NUMERIC(18,2) | YES | | 暂估总成本 |
| 13 | total_purchase_cost | NUMERIC(18,2) | YES | | 采购总成本 |
| 14 | min_discount_price | NUMERIC(18,2) | YES | | 最低折扣价 |
| 15 | is_discountable | INTEGER | YES | | 允许折扣。**枚举值**: 1(170)=允许 |
| 16 | days_on_shelf | INTEGER | YES | | 上架天数 |
| 17 | audit_status | INTEGER | YES | | 审核状态。**枚举值**: 2(170)=**[待确认]** |
| 18 | sale_channel | INTEGER | YES | | 销售渠道(当前数据全为空) |
| 19 | is_warehousing | INTEGER | YES | | 库存管理。**枚举值**: 1(170)=参与库存管理 |
| 20 | freeze_status | INTEGER | YES | | 冻结状态。**枚举值**: 0(170)=未冻结 |
| 21 | forbid_sell_status | INTEGER | YES | | 禁售状态。**枚举值**: 1(170)=**[待确认]** |
| 22 | able_site_transfer | INTEGER | YES | | 允许店间调拨。**枚举值**: 0(1), 2(169) **[待确认]** |
| 23 | custom_label_type | INTEGER | YES | | 自定义标签类型。**枚举值**: 2(170)=**[待确认]** |
| 24 | option_required | INTEGER | YES | | 选项必填。**枚举值**: 1(170)=**[待确认]** |
| 25 | remark | TEXT | YES | | 备注(当前数据全为空) |
| 26 | sort_order | INTEGER | YES | | 排序序号 |
| 27 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 28 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 29 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 30 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_store_goods_ex
WHERE site_goods_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 关联主表与扩展表
SELECT m.goods_name, m.sale_price, m.sale_qty, e.unit, e.stock_qty, e.cost_price
FROM dwd.dim_store_goods m
JOIN dwd.dim_store_goods_ex e
ON m.site_goods_id = e.site_goods_id
AND m.scd2_start_time = e.scd2_start_time
WHERE m.scd2_is_current = 1;
```

View File

@@ -0,0 +1,64 @@
# dim_table_ex 台桌扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_table_ex |
| 主键 | table_id, scd2_start_time |
| 主表 | dim_table |
| 记录数 | 74 |
| 说明 | 台桌扩展表,包含展示状态、预约设置、台呢使用等信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | table_id | BIGINT | NO | PK | 台桌 ID → dim_table |
| 2 | show_status | INTEGER | YES | | 展示状态。**枚举值**: 1(70)=显示, 2(4)=隐藏 |
| 3 | is_online_reservation | INTEGER | YES | | 在线预约。**枚举值**: 1(2)=支持, 2(72)=不支持 |
| 4 | table_cloth_use_time | INTEGER | YES | | 台呢已使用时间(当前数据全为空) |
| 5 | table_cloth_use_cycle | INTEGER | YES | | 台呢使用周期(当前数据全为 0 |
| 6 | table_status | INTEGER | YES | | 台桌状态。**枚举值**: 1(66)=空闲, 2(1)=**[待确认]**, 3(7)=使用中 **[待确认]** |
| 7 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 8 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 9 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 10 | scd2_version | INTEGER | YES | | 版本号 |
## 样本数据
| table_id | show_status | is_online_reservation | table_status |
|----------|-------------|-----------------------|--------------|
| 2791964216463493 | 1 | 2 | 1 |
| 2792521437958213 | 1 | 2 | 1 |
| 2793001695301765 | 1 | 2 | 1 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_table_ex
WHERE table_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 关联主表与扩展表
SELECT m.table_name, m.site_table_area_name, e.show_status, e.table_status
FROM dwd.dim_table m
JOIN dwd.dim_table_ex e
ON m.table_id = e.table_id
AND m.scd2_start_time = e.scd2_start_time
WHERE m.scd2_is_current = 1;
```

View File

@@ -0,0 +1,68 @@
# dim_tenant_goods_ex 租户商品扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_tenant_goods_ex |
| 主键 | tenant_goods_id, scd2_start_time |
| 主表 | dim_tenant_goods |
| 记录数 | 171 |
| 说明 | 租户商品扩展表,包含图片、条码、成本、折扣配置等详细信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | tenant_goods_id | BIGINT | NO | PK | 租户商品 ID → dim_tenant_goods |
| 2 | remark_name | VARCHAR(128) | YES | | 备注名称(当前数据全为空) |
| 3 | pinyin_initial | VARCHAR(128) | YES | | 拼音首字母 |
| 4 | goods_cover | VARCHAR(512) | YES | | 商品封面图 URL |
| 5 | goods_bar_code | VARCHAR(64) | YES | | 商品条码(当前数据全为空) |
| 6 | commodity_code | VARCHAR(64) | YES | | 商品编码 |
| 7 | commodity_code_list | VARCHAR(256) | YES | | 商品编码列表 |
| 8 | min_discount_price | NUMERIC(18,2) | YES | | 最低折扣价 |
| 9 | cost_price | NUMERIC(18,2) | YES | | 成本价 |
| 10 | cost_price_type | INTEGER | YES | | 成本价类型。**枚举值**: 1(160), 2(11) **[待确认]** |
| 11 | able_discount | INTEGER | YES | | 允许折扣。**枚举值**: 1(171)=允许 |
| 12 | sale_channel | INTEGER | YES | | 销售渠道(当前数据全为空) |
| 13 | is_warehousing | INTEGER | YES | | 库存管理。**枚举值**: 1(171)=参与库存管理 |
| 14 | is_in_site | BOOLEAN | YES | | 是否在门店。**枚举值**: False(171)=否 |
| 15 | able_site_transfer | INTEGER | YES | | 允许店间调拨。**枚举值**: 0(1), 2(170) **[待确认]** |
| 16 | common_sale_royalty | INTEGER | YES | | 普通销售提成(当前数据全为 0 |
| 17 | point_sale_royalty | INTEGER | YES | | 积分销售提成(当前数据全为 0 |
| 18 | out_goods_id | BIGINT | YES | | 外部商品 ID当前数据全为 0 |
| 19 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 20 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 21 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 22 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_tenant_goods_ex
WHERE tenant_goods_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 关联主表与扩展表
SELECT m.goods_name, m.market_price, e.cost_price, e.min_discount_price
FROM dwd.dim_tenant_goods m
JOIN dwd.dim_tenant_goods_ex e
ON m.tenant_goods_id = e.tenant_goods_id
AND m.scd2_start_time = e.scd2_start_time
WHERE m.scd2_is_current = 1;
```

View File

@@ -0,0 +1,74 @@
# dwd_assistant_service_log_ex 助教服务流水扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_assistant_service_log_ex |
| 主键 | assistant_service_id |
| 主表 | dwd_assistant_service_log |
| 记录数 | 5003 |
| 说明 | 助教服务流水扩展表,包含台桌、折扣、评分、废单等详细信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | assistant_service_id | BIGINT | NO | PK | 服务流水 ID → dwd_assistant_service_log |
| 2 | table_name | VARCHAR(64) | YES | | 台桌名称。**样本值**: "888", "TV", "VIP5", "666", "C1", "VIP1", "S1", "M1", "A1" |
| 3 | assistant_name | VARCHAR(64) | YES | | 助教真实姓名。**样本值**: "陈嘉怡", "张永英", "邹绮", "胡敏" |
| 4 | ledger_name | VARCHAR(128) | YES | | 账本名称(工号-昵称)。**样本值**: "2-佳怡", "23-婉婉", "15-七七" |
| 5 | ledger_group_name | VARCHAR(128) | YES | | 账本分组名称(当前数据全为空) |
| 6 | ledger_count | INTEGER | YES | | 计费时长(秒,与主表 income_seconds 类似) |
| 7 | member_discount_amount | NUMERIC(10,2) | YES | | 会员折扣金额 |
| 8 | manual_discount_amount | NUMERIC(10,2) | YES | | 手动折扣金额 |
| 9 | service_money | NUMERIC(10,2) | YES | | 服务费金额 |
| 10 | returns_clock | INTEGER | YES | | 退时长(当前数据全为 0 |
| 11 | ledger_start_time | TIMESTAMPTZ | YES | | 账本开始时间 |
| 12 | ledger_end_time | TIMESTAMPTZ | YES | | 账本结束时间 |
| 13 | ledger_status | INTEGER | YES | | 账本状态。**枚举值**: 1(5003)=已结算 |
| 14 | is_confirm | INTEGER | YES | | 是否确认。**枚举值**: 2(5003)=**[待确认]** |
| 15 | is_single_order | INTEGER | YES | | 是否独立订单。**枚举值**: 1(5003)=是 |
| 16 | is_not_responding | INTEGER | YES | | 无响应。**枚举值**: 0(5003)=正常 |
| 17 | is_trash | INTEGER | YES | | 是否废单。**枚举值**: 0(5003)=正常 |
| 18 | trash_applicant_id | BIGINT | YES | | 废单申请人 ID当前数据全为 0 |
| 19 | trash_applicant_name | VARCHAR(64) | YES | | 废单申请人姓名(当前数据全为空) |
| 20 | trash_reason | VARCHAR(255) | YES | | 废单原因(当前数据全为空) |
| 21 | salesman_user_id | BIGINT | YES | | 销售员用户 ID当前数据全为 0 |
| 22 | salesman_name | VARCHAR(64) | YES | | 销售员姓名(当前数据全为空) |
| 23 | salesman_org_id | BIGINT | YES | | 销售员组织 ID当前数据全为 0 |
| 24 | skill_grade | INTEGER | YES | | 技能评分(当前数据全为 0 |
| 25 | service_grade | INTEGER | YES | | 服务评分(当前数据全为 0 |
| 26 | composite_grade | NUMERIC(5,2) | YES | | 综合评分 |
| 27 | sum_grade | NUMERIC(10,2) | YES | | 累计评分 |
| 28 | get_grade_times | INTEGER | YES | | 评分次数(当前数据全为 0 |
| 29 | grade_status | INTEGER | YES | | 评分状态。**枚举值**: 0(216)=未评分, 1(4787)=已评分 **[待确认]** |
| 30 | composite_grade_time | TIMESTAMPTZ | YES | | 评分时间 |
| 31 | assistant_team_name | TEXT | YES | | 助教团队名称 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段ledger_start_time, ledger_end_time, composite_grade_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_assistant_service_log_ex
ORDER BY ledger_start_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 关联主表与扩展表
SELECT m.nickname, m.ledger_amount, e.table_name, e.assistant_name, e.grade_status
FROM dwd.dwd_assistant_service_log m
JOIN dwd.dwd_assistant_service_log_ex e
ON m.assistant_service_id = e.assistant_service_id
WHERE m.is_delete = 0;
```

View File

@@ -0,0 +1,62 @@
# dwd_assistant_trash_event_ex 助教服务作废扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_assistant_trash_event_ex |
| 主键 | assistant_trash_event_id |
| 主表 | dwd_assistant_trash_event |
| 记录数 | 98 |
| 说明 | 助教服务作废扩展表,记录台桌和台区名称 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | assistant_trash_event_id | BIGINT | NO | PK | 作废事件 ID → dwd_assistant_trash_event |
| 2 | table_name | VARCHAR(64) | YES | | 台桌名称。**热门值**: "888"(14), "发财"(8), "C1"(7), "M7"(6) |
| 3 | table_area_name | VARCHAR(64) | YES | | 台区名称。**枚举值**: "C区"(16), "K包"(14), "A区"(11), "发财"(8), "B区"(7), "麻将房"(7), "补时长"(7), "VIP包厢"(6) |
## 台区作废分布
| 台区名称 | 作废次数 | 占比 |
|----------|----------|------|
| C区 | 16 | 16.3% |
| K包 | 14 | 14.3% |
| A区 | 11 | 11.2% |
| 发财 | 8 | 8.2% |
| B区 | 7 | 7.1% |
| 麻将房 | 7 | 7.1% |
| 补时长 | 7 | 7.1% |
| VIP包厢 | 6 | 6.1% |
## 样本数据
| table_name | table_area_name |
|------------|-----------------|
| C1 | C区 |
| 补时长5 | 补时长 |
| VIP1 | VIP包厢 |
| 888 | K包 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 主表可用时间字段create_time
```sql
-- 取最新一条(按主表时间字段)
SELECT e.*
FROM dwd.dwd_assistant_trash_event m
JOIN dwd.dwd_assistant_trash_event_ex e ON m.assistant_trash_event_id = e.assistant_trash_event_id
ORDER BY m.create_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
与主表 `dwd_assistant_trash_event` 通过 `assistant_trash_event_id` 关联,提供台桌和台区名称信息。

View File

@@ -0,0 +1,82 @@
# dwd_groupbuy_redemption_ex 团购核销扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_groupbuy_redemption_ex |
| 主键 | redemption_id |
| 主表 | dwd_groupbuy_redemption |
| 记录数 | 11427 |
| 说明 | 团购核销扩展表,记录门店、台桌名称、操作员等扩展信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | redemption_id | BIGINT | NO | PK | 核销 ID → dwd_groupbuy_redemption |
| 2 | site_name | VARCHAR(64) | YES | | 门店名称。**枚举值**: "朗朗桌球"(11427) |
| 3 | table_name | VARCHAR(64) | YES | | 台桌名称。**热门值**: "A3"(892), "A4"(858), "A5"(835), "A7"(774) |
| 4 | table_area_name | VARCHAR(64) | YES | | 台区名称。**枚举值**: "A区"(9294), "B区"(998), "斯诺克区"(962), "麻将房"(137) |
| 5 | order_pay_id | BIGINT | YES | | 支付单 ID当前数据全为 0 |
| 6 | goods_option_price | NUMERIC(18,2) | YES | | 商品选项价格 |
| 7 | goods_promotion_money | NUMERIC(18,2) | YES | | 商品促销金额 |
| 8 | table_service_promotion_money | NUMERIC(18,2) | YES | | 台服促销金额 |
| 9 | assistant_promotion_money | NUMERIC(18,2) | YES | | 助教促销金额 |
| 10 | assistant_service_promotion_money | NUMERIC(18,2) | YES | | 助教服务促销金额 |
| 11 | reward_promotion_money | NUMERIC(18,2) | YES | | 奖励促销金额 |
| 12 | recharge_promotion_money | NUMERIC(18,2) | YES | | 充值促销金额 |
| 13 | offer_type | INTEGER | YES | | 优惠类型。**枚举值**: 1(11427) |
| 14 | ledger_status | INTEGER | YES | | 账本状态。**枚举值**: 1(11427)=已结算 |
| 15 | operator_id | BIGINT | YES | | 操作员 ID |
| 16 | operator_name | VARCHAR(64) | YES | | 操作员名称。**枚举值**: "收银员:郑丽珊"(11426), "收银员:郑丽珍"(1) |
| 17 | salesman_user_id | BIGINT | YES | | 销售员用户 ID当前数据全为 0 |
| 18 | salesman_name | VARCHAR(64) | YES | | 销售员名称(当前数据全为 NULL |
| 19 | salesman_role_id | BIGINT | YES | | 销售员角色 ID当前数据全为 0 |
| 20 | salesman_org_id | BIGINT | YES | | 销售员组织 ID当前数据全为 0 |
| 21 | ledger_group_name | VARCHAR(128) | YES | | 账本分组名称(当前数据全为 NULL |
| 22 | table_share_money | NUMERIC(18,2) | YES | | 台费分摊金额 |
| 23 | table_service_share_money | NUMERIC(18,2) | YES | | 台费服务分摊金额 |
| 24 | goods_share_money | NUMERIC(18,2) | YES | | 商品分摊金额 |
| 25 | good_service_share_money | NUMERIC(18,2) | YES | | 商品服务分摊金额 |
| 26 | assistant_share_money | NUMERIC(18,2) | YES | | 助教分摊金额 |
| 27 | assistant_service_share_money | NUMERIC(18,2) | YES | | 助教服务分摊金额 |
| 28 | recharge_share_money | NUMERIC(18,2) | YES | | 充值分摊金额 |
## 台区核销分布
| 台区名称 | 核销数量 | 占比 |
|----------|----------|------|
| A区 | 9294 | 81.3% |
| B区 | 998 | 8.7% |
| 斯诺克区 | 962 | 8.4% |
| 麻将房 | 137 | 1.2% |
## 样本数据
| table_name | table_area_name | operator_name | ledger_status |
|------------|-----------------|---------------|---------------|
| A17 | A区 | 收银员:郑丽珊 | 1 |
| A4 | A区 | 收银员:郑丽珊 | 1 |
| B5 | B区 | 收银员:郑丽珊 | 1 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 主表可用时间字段create_time
```sql
-- 取最新一条(按主表时间字段)
SELECT e.*
FROM dwd.dwd_groupbuy_redemption m
JOIN dwd.dwd_groupbuy_redemption_ex e ON m.redemption_id = e.redemption_id
ORDER BY m.create_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
与主表 `dwd_groupbuy_redemption` 通过 `redemption_id` 关联,提供门店、台桌名称、操作员等扩展信息。

View File

@@ -0,0 +1,63 @@
# dwd_member_balance_change_ex 会员余额变动扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_member_balance_change_ex |
| 主键 | balance_change_id |
| 主表 | dwd_member_balance_change |
| 记录数 | 4745 |
| 说明 | 会员余额变动扩展表,记录操作员和门店名称等扩展信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | balance_change_id | BIGINT | NO | PK | 变动流水 ID → dwd_member_balance_change |
| 2 | pay_site_name | VARCHAR(64) | YES | | 支付门店名称。**枚举值**: "朗朗桌球"(4720) |
| 3 | register_site_name | VARCHAR(64) | YES | | 注册门店名称。**枚举值**: "朗朗桌球"(4745) |
| 4 | refund_amount | NUMERIC(18,2) | YES | | 退款金额 |
| 5 | operator_id | BIGINT | YES | | 操作员 ID |
| 6 | operator_name | VARCHAR(64) | YES | | 操作员名称。**枚举值**: "收银员:郑丽珊"(4101), "店长:郑丽珊"(223), "管理员:郑丽珊"(153), "店长:蒋雨轩"(124), "店长:谢晓洪"(115), "店长:黄月柳"(29) |
| 7 | principal_data | TEXT | YES | | 本金变动数据 |
## 操作员分布
| 操作员名称 | 操作次数 | 占比 |
|------------|----------|------|
| 收银员:郑丽珊 | 4101 | 86.4% |
| 店长:郑丽珊 | 223 | 4.7% |
| 管理员:郑丽珊 | 153 | 3.2% |
| 店长:蒋雨轩 | 124 | 2.6% |
| 店长:谢晓洪 | 115 | 2.4% |
| 店长:黄月柳 | 29 | 0.6% |
## 样本数据
| pay_site_name | register_site_name | operator_name | refund_amount |
|---------------|--------------------|---------------|---------------|
| 朗朗桌球 | 朗朗桌球 | 收银员:郑丽珊 | 0.00 |
| 朗朗桌球 | 朗朗桌球 | 收银员:郑丽珊 | 0.00 |
| 朗朗桌球 | 朗朗桌球 | 收银员:郑丽珊 | 0.00 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 主表可用时间字段change_time
```sql
-- 取最新一条(按主表时间字段)
SELECT e.*
FROM dwd.dwd_member_balance_change m
JOIN dwd.dwd_member_balance_change_ex e ON m.balance_change_id = e.balance_change_id
ORDER BY m.change_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
与主表 `dwd_member_balance_change` 通过 `balance_change_id` 关联,提供操作员和门店名称等扩展信息。

View File

@@ -0,0 +1,59 @@
# dwd_platform_coupon_redemption_ex 平台券核销扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_platform_coupon_redemption_ex |
| 主键 | platform_coupon_redemption_id |
| 主表 | dwd_platform_coupon_redemption |
| 记录数 | 16977 |
| 说明 | 平台券核销扩展表,记录券封面、备注、操作员等扩展信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | platform_coupon_redemption_id | BIGINT | NO | PK | 核销 ID → dwd_platform_coupon_redemption |
| 2 | coupon_cover | VARCHAR(255) | YES | | 券封面图片 URL当前数据全为 NULL |
| 3 | coupon_remark | VARCHAR(255) | YES | | 券备注(抖音券有核验信息) |
| 4 | groupon_type | INTEGER | YES | | 团购类型。**枚举值**: 1(16977)=**[待确认]** |
| 5 | operator_id | BIGINT | YES | | 操作员 ID |
| 6 | operator_name | VARCHAR(50) | YES | | 操作员名称。**枚举值**: "收银员:郑丽珊"(16968), "店长:郑丽珊"(8), "收银员:郑丽珍"(1) |
## 操作员分布
| 操作员名称 | 核销数量 | 占比 |
|------------|----------|------|
| 收银员:郑丽珊 | 16968 | 99.9% |
| 店长:郑丽珊 | 8 | <0.1% |
| 收银员:郑丽珍 | 1 | <0.1% |
## 样本数据
| groupon_type | operator_name | coupon_cover | coupon_remark |
|--------------|---------------|--------------|---------------|
| 1 | 收银员:郑丽珊 | NULL | NULL |
| 1 | 收银员:郑丽珊 | NULL | NULL |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 主表可用时间字段coupon_free_time, create_time, consume_time
```sql
-- 取最新一条(按主表时间字段)
SELECT e.*
FROM dwd.dwd_platform_coupon_redemption m
JOIN dwd.dwd_platform_coupon_redemption_ex e ON m.platform_coupon_redemption_id = e.platform_coupon_redemption_id
ORDER BY m.create_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
与主表 `dwd_platform_coupon_redemption` 通过 `platform_coupon_redemption_id` 关联,提供操作员等扩展信息。
**注意**: `coupon_remark` 字段在抖音渠道的核销记录中包含核验信息。

View File

@@ -0,0 +1,80 @@
# dwd_recharge_order_ex 充值订单扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_recharge_order_ex |
| 主键 | recharge_order_id |
| 主表 | dwd_recharge_order |
| 记录数 | 455 |
| 说明 | 充值订单扩展表,记录操作员、各类金额明细等扩展信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | recharge_order_id | BIGINT | NO | PK | 充值订单 ID → dwd_recharge_order |
| 2 | site_name_snapshot | TEXT | YES | | 门店名称快照。**枚举值**: "朗朗桌球"(374) |
| 3 | settle_status | INTEGER | YES | | 结算状态。**枚举值**: 2(455)=已结算 |
| 4 | is_bind_member | BOOLEAN | YES | | 是否绑定会员。**枚举值**: False(455) |
| 5 | is_activity | BOOLEAN | YES | | 是否活动。**枚举值**: False(455) |
| 6 | is_use_coupon | BOOLEAN | YES | | 是否使用优惠券。**枚举值**: False(455) |
| 7 | is_use_discount | BOOLEAN | YES | | 是否使用折扣。**枚举值**: False(455) |
| 8 | can_be_revoked | BOOLEAN | YES | | 是否可撤销。**枚举值**: False(455) |
| 9 | online_amount | NUMERIC(18,2) | YES | | 在线支付金额 |
| 10 | balance_amount | NUMERIC(18,2) | YES | | 余额支付金额 |
| 11 | card_amount | NUMERIC(18,2) | YES | | 卡支付金额 |
| 12 | coupon_amount | NUMERIC(18,2) | YES | | 优惠券金额 |
| 13 | recharge_card_amount | NUMERIC(18,2) | YES | | 充值卡金额 |
| 14 | gift_card_amount | NUMERIC(18,2) | YES | | 礼品卡金额 |
| 15 | prepay_money | NUMERIC(18,2) | YES | | 预付金额 |
| 16 | consume_money | NUMERIC(18,2) | YES | | 消费金额 |
| 17 | goods_money | NUMERIC(18,2) | YES | | 商品金额 |
| 18 | real_goods_money | NUMERIC(18,2) | YES | | 实收商品金额 |
| 19 | table_charge_money | NUMERIC(18,2) | YES | | 台费金额 |
| 20 | service_money | NUMERIC(18,2) | YES | | 服务费金额 |
| 21 | activity_discount | NUMERIC(18,2) | YES | | 活动折扣金额 |
| 22 | all_coupon_discount | NUMERIC(18,2) | YES | | 优惠券折扣总额 |
| 23 | goods_promotion_money | NUMERIC(18,2) | YES | | 商品促销金额 |
| 24 | assistant_promotion_money | NUMERIC(18,2) | YES | | 助教促销金额 |
| 25 | assistant_pd_money | NUMERIC(18,2) | YES | | 助教陪打金额 |
| 26 | assistant_cx_money | NUMERIC(18,2) | YES | | 助教培训金额 |
| 27 | assistant_manual_discount | NUMERIC(18,2) | YES | | 助教手动折扣 |
| 28 | coupon_sale_amount | NUMERIC(18,2) | YES | | 优惠券销售金额 |
| 29 | member_discount_amount | NUMERIC(18,2) | YES | | 会员折扣金额 |
| 30 | point_discount_price | NUMERIC(18,2) | YES | | 积分抵扣金额 |
| 31 | point_discount_cost | NUMERIC(18,2) | YES | | 积分抵扣成本 |
| 32 | adjust_amount | NUMERIC(18,2) | YES | | 调整金额 |
| 33 | rounding_amount | NUMERIC(18,2) | YES | | 取整金额 |
| 34 | operator_id | BIGINT | YES | | 操作员 ID |
| 35 | operator_name_snapshot | TEXT | YES | | 操作员名称快照。**枚举值**: "收银员:郑丽珊"(455) |
| 36 | salesman_user_id | BIGINT | YES | | 销售员用户 ID当前全为 0 |
| 37 | salesman_name | TEXT | YES | | 销售员名称(当前全为 NULL |
| 38 | order_remark | TEXT | YES | | 订单备注(当前全为 NULL |
| 39 | table_id | INTEGER | YES | | 台桌 ID当前全为 0 |
| 40 | serial_number | INTEGER | YES | | 序列号(当前全为 0 |
| 41 | revoke_order_id | BIGINT | YES | | 撤销订单 ID当前全为 0 |
| 42 | revoke_order_name | TEXT | YES | | 撤销订单名称(当前全为 NULL |
| 43 | revoke_time | TIMESTAMPTZ | YES | | 撤销时间 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段revoke_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_recharge_order_ex
ORDER BY revoke_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
与主表 `dwd_recharge_order` 通过 `recharge_order_id` 关联,提供操作员、各类金额明细等扩展信息。
**注意**: 样本数据获取时因日期解析错误未能获取。

View File

@@ -0,0 +1,64 @@
# dwd_refund_ex 退款流水扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_refund_ex |
| 主键 | refund_id |
| 主表 | dwd_refund |
| 记录数 | 45 |
| 说明 | 退款流水扩展表,记录退款的详细状态和渠道信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | refund_id | BIGINT | NO | PK | 退款流水 ID → dwd_refund |
| 2 | tenant_name | VARCHAR(64) | YES | | 租户名称。**枚举值**: "朗朗桌球"(45) |
| 3 | pay_sn | BIGINT | YES | | 支付序列号(当前全为 0 |
| 4 | refund_amount | NUMERIC(18,2) | YES | | 退款金额(冗余) |
| 5 | round_amount | NUMERIC(18,2) | YES | | 取整金额 |
| 6 | balance_frozen_amount | NUMERIC(18,2) | YES | | 余额冻结金额 |
| 7 | card_frozen_amount | NUMERIC(18,2) | YES | | 卡冻结金额 |
| 8 | pay_status | INTEGER | YES | | 支付状态。**枚举值**: 2(45)=已退款 |
| 9 | action_type | INTEGER | YES | | 操作类型。**枚举值**: 2(45)=退款 |
| 10 | is_revoke | INTEGER | YES | | 是否撤销。**枚举值**: 0(45)=否 |
| 11 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0(45)=未删除 |
| 12 | check_status | INTEGER | YES | | 审核状态。**枚举值**: 1(45)=已审核 |
| 13 | online_pay_channel | INTEGER | YES | | 在线支付渠道(当前全为 0 |
| 14 | online_pay_type | INTEGER | YES | | 在线支付类型(当前全为 0 |
| 15 | pay_terminal | INTEGER | YES | | 支付终端。**枚举值**: 1(45)=POS |
| 16 | pay_config_id | INTEGER | YES | | 支付配置 ID当前全为 0 |
| 17 | cashier_point_id | INTEGER | YES | | 收银点 ID当前全为 0 |
| 18 | operator_id | BIGINT | YES | | 操作员 ID当前全为 0 |
| 19 | channel_payer_id | VARCHAR(128) | YES | | 渠道支付者 ID当前全为 NULL |
| 20 | channel_pay_no | VARCHAR(128) | YES | | 渠道支付号(当前全为 NULL |
## 样本数据
| tenant_name | pay_status | action_type | check_status |
|-------------|------------|-------------|--------------|
| 朗朗桌球 | 2 | 2 | 1 |
| 朗朗桌球 | 2 | 2 | 1 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 主表可用时间字段pay_time, create_time
```sql
-- 取最新一条(按主表时间字段)
SELECT e.*
FROM dwd.dwd_refund m
JOIN dwd.dwd_refund_ex e ON m.refund_id = e.refund_id
ORDER BY m.pay_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
与主表 `dwd_refund` 通过 `refund_id` 关联,提供退款状态和渠道等扩展信息。

View File

@@ -0,0 +1,90 @@
# dwd_settlement_head_ex 结账头表扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_settlement_head_ex |
| 主键 | order_settle_id |
| 主表 | dwd_settlement_head |
| 记录数 | 23366 |
| 说明 | 结账单扩展表,包含支付明细、撤销信息、操作员、活动标记等详细信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | order_settle_id | BIGINT | NO | PK | 结账单 ID → dwd_settlement_head |
| 2 | serial_number | INTEGER | YES | | 流水号(当前数据全为 0 |
| 3 | settle_status | INTEGER | YES | | 结账状态。**枚举值**: 2(23366)=已完成 **[待确认]** |
| 4 | can_be_revoked | BOOLEAN | YES | | 可否撤销。**枚举值**: False(23366)=不可撤销 |
| 5 | revoke_order_name | VARCHAR(100) | YES | | 撤销订单名称(当前数据全为空) |
| 6 | revoke_time | TIMESTAMPTZ | YES | | 撤销时间 |
| 7 | is_first_order | BOOLEAN | YES | | 是否首单。**枚举值**: False(23366)=否 |
| 8 | service_money | NUMERIC(18,2) | YES | | 服务费金额 |
| 9 | cash_amount | NUMERIC(18,2) | YES | | 现金支付金额 |
| 10 | card_amount | NUMERIC(18,2) | YES | | 刷卡支付金额 |
| 11 | online_amount | NUMERIC(18,2) | YES | | 在线支付金额 |
| 12 | refund_amount | NUMERIC(18,2) | YES | | 退款金额 |
| 13 | prepay_money | NUMERIC(18,2) | YES | | 预付金额 |
| 14 | payment_method | INTEGER | YES | | 支付方式(当前数据全为 0 |
| 15 | coupon_sale_amount | NUMERIC(18,2) | YES | | 券销售金额 |
| 16 | all_coupon_discount | NUMERIC(18,2) | YES | | 全部券折扣 |
| 17 | goods_promotion_money | NUMERIC(18,2) | YES | | 商品促销金额 |
| 18 | assistant_promotion_money | NUMERIC(18,2) | YES | | 助教促销金额 |
| 19 | activity_discount | NUMERIC(18,2) | YES | | 活动折扣 |
| 20 | assistant_manual_discount | NUMERIC(18,2) | YES | | 助教手动折扣 |
| 21 | point_discount_price | NUMERIC(18,2) | YES | | 积分抵扣金额 |
| 22 | point_discount_cost | NUMERIC(18,2) | YES | | 积分抵扣成本 |
| 23 | is_use_coupon | BOOLEAN | YES | | 是否使用优惠券。**枚举值**: False(23366)=否 |
| 24 | is_use_discount | BOOLEAN | YES | | 是否使用折扣。**枚举值**: False(23366)=否 |
| 25 | is_activity | BOOLEAN | YES | | 是否活动订单。**枚举值**: False(23366)=否 |
| 26 | operator_name | VARCHAR(100) | YES | | 操作员姓名。**枚举值**: "收银员:郑丽珊"(23361), "收银员:郑丽珍"(2), "教练:周蒙"(2), "店长:郑丽珊"(1) |
| 27 | salesman_name | VARCHAR(100) | YES | | 销售员姓名(当前数据全为空) |
| 28 | order_remark | VARCHAR(255) | YES | | 订单备注。**样本值**: "五折"(42), "轩哥"(24), "陈德韩"(7), "免台费"(3) |
| 29 | operator_id | BIGINT | YES | | 操作员 ID |
| 30 | salesman_user_id | BIGINT | YES | | 销售员用户 ID当前数据全为 0 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段revoke_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_settlement_head_ex
ORDER BY revoke_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 关联主表与扩展表
SELECT
m.settle_name, m.consume_money, m.pay_amount,
e.operator_name, e.order_remark, e.settle_status
FROM dwd.dwd_settlement_head m
JOIN dwd.dwd_settlement_head_ex e
ON m.order_settle_id = e.order_settle_id;
-- 统计备注订单
SELECT order_remark, COUNT(*)
FROM dwd.dwd_settlement_head_ex
WHERE order_remark IS NOT NULL
GROUP BY order_remark
ORDER BY COUNT(*) DESC;
```
<!--
AI_CHANGELOG:
- 日期: 2026-02-14
- Prompt: P20260214-040000 — "dwd_settlement_head_ex.settle_list 也没有必要保留了"
- 直接原因: settle_list 列已从 DWD 表中删除BD 手册需同步移除该字段行
- 变更摘要: 字段说明表中移除第 31 行 settle_list
- 风险与验证: 纯文档变更验证SELECT column_name FROM information_schema.columns WHERE table_name='dwd_settlement_head_ex' AND column_name='settle_list' 应返回 0 行
-->

View File

@@ -0,0 +1,72 @@
# dwd_store_goods_sale_ex 商品销售扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_store_goods_sale_ex |
| 主键 | store_goods_sale_id |
| 主表 | dwd_store_goods_sale |
| 记录数 | 17563 |
| 说明 | 商品销售扩展表,记录销售详情、折扣优惠等扩展信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | store_goods_sale_id | BIGINT | NO | PK | 销售流水 ID → dwd_store_goods_sale |
| 2 | legacy_order_goods_id | BIGINT | YES | | 旧系统订单商品 ID当前全为 0 |
| 3 | site_name | TEXT | YES | | 门店名称。**枚举值**: "朗朗桌球"(17563) |
| 4 | legacy_site_id | BIGINT | YES | | 旧系统门店 ID |
| 5 | goods_remark | TEXT | YES | | 商品备注。**热门备注**: "哇哈哈矿泉水", "东方树叶", "可乐", "一次性手套", "地道肠" |
| 6 | option_value_name | TEXT | YES | | 选项值名称(当前全为 NULL |
| 7 | operator_name | TEXT | YES | | 操作员名称。**枚举值**: "收银员:郑丽珊"(17562), "收银员:郑丽珍"(1) |
| 8 | open_salesman_flag | INTEGER | YES | | 开启销售员标记。**枚举值**: 2(17563)=否 |
| 9 | salesman_user_id | BIGINT | YES | | 销售员用户 ID当前全为 0 |
| 10 | salesman_name | TEXT | YES | | 销售员名称(当前全为 NULL |
| 11 | salesman_role_id | BIGINT | YES | | 销售员角色 ID当前全为 0 |
| 12 | salesman_org_id | BIGINT | YES | | 销售员组织 ID当前全为 0 |
| 13 | discount_money | NUMERIC(18,2) | YES | | 折扣金额 |
| 14 | returns_number | INTEGER | YES | | 退货数量(当前全为 0 |
| 15 | coupon_deduct_money | NUMERIC(18,2) | YES | | 优惠券抵扣金额 |
| 16 | member_discount_amount | NUMERIC(18,2) | YES | | 会员折扣金额 |
| 17 | point_discount_money | NUMERIC(18,2) | YES | | 积分抵扣金额 |
| 18 | point_discount_money_cost | NUMERIC(18,2) | YES | | 积分抵扣成本 |
| 19 | package_coupon_id | BIGINT | YES | | 套餐券 ID当前全为 0 |
| 20 | order_coupon_id | BIGINT | YES | | 订单券 ID当前全为 0 |
| 21 | member_coupon_id | BIGINT | YES | | 会员券 ID当前全为 0 |
| 22 | option_price | NUMERIC(18,2) | YES | | 选项价格 |
| 23 | option_member_discount_money | NUMERIC(18,2) | YES | | 选项会员折扣金额 |
| 24 | option_coupon_deduct_money | NUMERIC(18,2) | YES | | 选项券抵扣金额 |
| 25 | push_money | NUMERIC(18,2) | YES | | 推手金额 |
| 26 | is_single_order | INTEGER | YES | | 是否独立订单。**枚举值**: 1(17563)=是 |
| 27 | sales_type | INTEGER | YES | | 销售类型。**枚举值**: 1(17563)=普通销售 |
| 28 | operator_id | BIGINT | YES | | 操作员 ID |
## 样本数据
| site_name | goods_remark | operator_name | discount_money |
|-----------|--------------|---------------|----------------|
| 朗朗桌球 | 鸡翅三个一份 | 收银员:郑丽珊 | 0.00 |
| 朗朗桌球 | NULL | 收银员:郑丽珊 | 0.00 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 主表可用时间字段create_time
```sql
-- 取最新一条(按主表时间字段)
SELECT e.*
FROM dwd.dwd_store_goods_sale m
JOIN dwd.dwd_store_goods_sale_ex e ON m.store_goods_sale_id = e.store_goods_sale_id
ORDER BY m.create_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
与主表 `dwd_store_goods_sale` 通过 `store_goods_sale_id` 关联,提供销售详情、折扣优惠等扩展信息。

View File

@@ -0,0 +1,57 @@
# dwd_table_fee_adjust_ex 台费调整扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_table_fee_adjust_ex |
| 主键 | table_fee_adjust_id |
| 主表 | dwd_table_fee_adjust |
| 记录数 | 2849 |
| 说明 | 台费调整扩展表,记录调整类型、申请人、操作员等信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | table_fee_adjust_id | BIGINT | NO | PK | 台费调整 ID → dwd_table_fee_adjust |
| 2 | adjust_type | INTEGER | YES | | 调整类型。**枚举值**: 1(2849)=**[待确认]** |
| 3 | ledger_count | INTEGER | YES | | 账本数量。**枚举值**: 1(2849) |
| 4 | ledger_name | VARCHAR(128) | YES | | 账本名称(当前数据全为 NULL |
| 5 | applicant_name | VARCHAR(64) | YES | | 申请人名称。**枚举值**: "收银员:郑丽珊"(2849) |
| 6 | operator_name | VARCHAR(64) | YES | | 操作员名称。**枚举值**: "收银员:郑丽珊"(2849) |
| 7 | applicant_id | BIGINT | YES | | 申请人 ID |
| 8 | operator_id | BIGINT | YES | | 操作员 ID |
| 9 | area_type_id | BIGINT | YES | | 区域类型 ID |
| 10 | site_table_area_id | BIGINT | YES | | 门店台区 ID |
| 11 | site_table_area_name | TEXT | YES | | 门店台区名称 |
| 12 | site_name | TEXT | YES | | 门店名称 |
| 13 | tenant_name | TEXT | YES | | 租户名称 |
## 样本数据
| adjust_type | applicant_name | operator_name |
|-------------|----------------|---------------|
| 1 | 收银员:郑丽珊 | 收银员:郑丽珊 |
| 1 | 收银员:郑丽珊 | 收银员:郑丽珊 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 主表可用时间字段adjust_time
```sql
-- 取最新一条(按主表时间字段)
SELECT e.*
FROM dwd.dwd_table_fee_adjust m
JOIN dwd.dwd_table_fee_adjust_ex e ON m.table_fee_adjust_id = e.table_fee_adjust_id
ORDER BY m.adjust_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
与主表 `dwd_table_fee_adjust` 通过 `table_fee_adjust_id` 关联,提供调整类型、申请人、操作员等扩展信息。

View File

@@ -0,0 +1,57 @@
# dwd_table_fee_log_ex 台费流水扩展表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_table_fee_log_ex |
| 主键 | table_fee_log_id |
| 主表 | dwd_table_fee_log |
| 记录数 | 18386 |
| 说明 | 台费流水扩展表,记录操作员、销售员、时间等扩展信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | table_fee_log_id | BIGINT | NO | PK | 台费流水 ID → dwd_table_fee_log |
| 2 | operator_name | VARCHAR(64) | YES | | 操作员名称。**枚举值**: "收银员:郑丽珊"(18382), "收银员:郑丽珍"(2), "店长:郑丽珊"(1), "教练:周蒙"(1) |
| 3 | salesman_name | VARCHAR(64) | YES | | 销售员名称(当前数据全为 NULL |
| 4 | used_card_amount | NUMERIC(18,2) | YES | | 使用卡金额(当前数据全为 0 |
| 5 | service_money | NUMERIC(18,2) | YES | | 服务费金额(当前数据全为 0 |
| 6 | mgmt_fee | NUMERIC(18,2) | YES | | 管理费金额(当前数据全为 0 |
| 7 | fee_total | NUMERIC(18,2) | YES | | 费用合计(当前数据全为 0 |
| 8 | ledger_start_time | TIMESTAMPTZ | YES | | 账本开始时间 |
| 9 | last_use_time | TIMESTAMPTZ | YES | | 最后使用时间 |
| 10 | operator_id | BIGINT | YES | | 操作员 ID。**枚举值**: 3个不同ID |
| 11 | salesman_user_id | BIGINT | YES | | 销售员用户 ID当前数据全为 0 |
| 12 | salesman_org_id | BIGINT | YES | | 销售员组织 ID当前数据全为 0 |
| 13 | order_consumption_type | INTEGER | YES | | 订单消费类型 |
## 样本数据
| operator_name | ledger_start_time | last_use_time |
|---------------|-------------------|---------------|
| 收银员:郑丽珊 | 2025-11-09 22:28:57 | 2025-11-09 23:28:57 |
| 收银员:郑丽珊 | 2025-11-09 21:34:27 | 2025-11-09 23:34:27 |
| 收银员:郑丽珊 | 2025-11-09 22:32:55 | 2025-11-09 23:32:55 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段ledger_start_time, last_use_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_table_fee_log_ex
ORDER BY ledger_start_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
与主表 `dwd_table_fee_log` 通过 `table_fee_log_id` 关联,提供操作员和时间相关的扩展信息。

View File

@@ -0,0 +1,85 @@
# DWD 层 DDL 同步修正 — 变更记录
> 结构性变更:修正 1 项差异(补充 1 个缺失字段定义)
## 溯源
- 日期2026-02-13Asia/Shanghai
- 工具:`scripts/compare_ddl_db.py --schema dwd --ddl-path database/schema_dwd_doc.sql`
- Direct causeDDL 对比脚本发现 `database/schema_dwd_doc.sql` 与数据库 `dwd` schema 实际状态存在 1 项差异,以数据库为准修正 DDL 文件。
## 变更内容
| Schema | 表名 | 操作 | 字段 | DDL 原定义 | 数据库实际 | 说明 |
|--------|------|------|------|-----------|-----------|------|
| `dwd` | `dwd_refund_ex` | DDL 补充字段 | `check_status` | — | `INTEGER` | 数据库中有但 DDL 中未定义(解析器 bug 导致遗漏,已修复) |
## 变更原因
1. `dwd_refund_ex.check_status`:该字段实际已存在于数据库中,对应 ODS 层 `refund_transactions.check_status`(退款审核状态)
2. DDL 解析器存在 bug 导致该字段在先前对比中被遗漏,修复解析器后重新对比发现此差异
3. 该字段由 DWD 加载任务从 ODS 层 `refund_transactions` 映射而来
## 影响范围
| 影响对象 | 影响程度 | 说明 |
|----------|----------|------|
| ETL 加载任务 | 无影响 | 本次仅修正 DDL 文档,不涉及数据库结构变更 |
| 后端 API | 无影响 | DDL 文件为文档性质,不影响运行时 |
| 小程序字段映射 | 无影响 | 小程序不直接读 DWD 层 |
| DWD 表级文档 | ⚠️ 需同步 | `BD_manual_dwd_refund_ex.md` 字段列表应包含 `check_status` |
| ODS→DWD 映射 | 无影响 | `check_status` 已在 DWD 加载映射中正确配置 |
**注意**:本次变更仅修正 DDL 文件(文档同步),数据库结构未发生任何变更。
## 回滚策略
本次为 DDL 文件修正(文档同步),无需数据库回滚。若需恢复 DDL 文件,使用 Git 回退即可:
```bash
git checkout HEAD~1 -- database/schema_dwd_doc.sql
```
若未来需要将数据库结构回退(不推荐):
```sql
-- 删除 check_status 列(会丢失已有数据)
ALTER TABLE dwd.dwd_refund_ex DROP COLUMN check_status;
```
## 验证 SQL
```sql
-- 1) 确认 dwd_refund_ex.check_status 存在且类型为 integer
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_schema = 'dwd'
AND table_name = 'dwd_refund_ex'
AND column_name = 'check_status';
-- 预期1 行data_type = 'integer'
-- 2) 确认 ODS 层对应字段也存在(数据来源一致性)
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'ods'
AND table_name = 'refund_transactions'
AND column_name = 'check_status';
-- 预期1 行data_type = 'integer'
-- 3) 确认 dwd_refund_ex 表当前总列数
SELECT count(*) AS total_columns
FROM information_schema.columns
WHERE table_schema = 'dwd'
AND table_name = 'dwd_refund_ex';
-- 预期:列数包含 check_status
-- 4) 确认修正后 DDL 与数据库零差异(通过对比脚本验证)
-- python scripts/compare_ddl_db.py --schema dwd --ddl-path database/schema_dwd_doc.sql
-- 预期0 项差异
```
## 关联变更
- ODS 层同步修正:`docs/database/ODS/changes/2026-02-13_ddl_sync_ods.md``refund_transactions.check_status` 同步补充)
- DDL 文件:`database/schema_dwd_doc.sql`
- 对比结果:`docs/database/ddl_compare_results.md`

View File

@@ -0,0 +1,94 @@
# DWD 层删除 dwd_settlement_head_ex.settle_list 冗余列 — 变更记录
> 结构性变更:删除 1 张表的 1 个 JSONB 列
## 溯源
- 日期2026-02-14Asia/Shanghai
- PromptP20260214-040000 — 删除 DWD 层 dwd_settlement_head_ex 的 settle_list JSONB 列
- Direct cause`settle_list` 列存储结算明细 JSON与 ODS 层 `payload` 中的 `settleList` 对象完全重复。ODS 层 `settlelist` 列已在 `20260214_drop_ods_settlelist.sql` 中删除DWD 层该列同样冗余。结算明细可随时从 ODS `payload->'settleList'` 按需提取。
## 变更内容
| Schema | 表名 | 操作 | 列名 | 原类型 | 说明 |
|--------|------|------|------|--------|------|
| `dwd` | `dwd_settlement_head_ex` | DROP COLUMN | `settle_list` | `JSONB` | 结算明细 JSON与 ODS payload 中 settleList 重复 |
### Before / After
- Before31 个字段order_settle_id PK + 29 个业务字段 + settle_list JSONB
- After30 个字段order_settle_id PK + 29 个业务字段)
## 变更原因
1. ODS 层 `settlement_records.payload`jsonb已存储完整 API 响应,其中包含 `settleList` 对象
2. ODS 层 `settlelist` 列已在同日迁移 `20260214_drop_ods_settlelist.sql` 中删除
3. DWD 层 `settle_list` 是从 ODS `settlelist` 映射而来的副本上游已删除DWD 层同步清理
4. DWD 加载映射(`dwd_load_task.py` FACT_MAPPINGS`settle_list` 映射已移除
## 影响范围
| 影响对象 | 影响程度 | 说明 |
|----------|----------|------|
| DWD 加载任务 | ✅ 已处理 | `dwd_load_task.py` FACT_MAPPINGS 中 `dwd_settlement_head_ex``settle_list` 映射已移除 |
| DWS 汇总层 | 无影响 | DWS 层不消费 `settle_list` 列 |
| API 契约 | 无影响 | API 响应结构不变 |
| 小程序 | 无影响 | 小程序不直接读 DWD 层 |
| BD 手册 | ✅ 已处理 | `BD_manual_dwd_settlement_head_ex.md` 字段列表已不含 `settle_list` |
## 回滚策略
```sql
-- 1) 恢复列结构
ALTER TABLE dwd.dwd_settlement_head_ex ADD COLUMN settle_list JSONB;
-- 2) 从 ODS payload 回填数据
UPDATE dwd.dwd_settlement_head_ex e
SET settle_list = o.payload->'settleList'
FROM ods.settlement_records o
WHERE e.order_settle_id = o.id;
```
**注意事项**
- 回滚后 `settle_list` 列数据为 NULL必须执行回填 UPDATE
- 若 ODS 中 `payload IS NULL` 的行,对应 DWD 行的 `settle_list` 将为 NULL无法恢复
## 验证 SQL
```sql
-- 1) 确认 settle_list 列已不存在
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'dwd'
AND table_name = 'dwd_settlement_head_ex'
AND column_name = 'settle_list';
-- 预期0 行
-- 2) 确认表当前列数
SELECT count(*) AS total_columns
FROM information_schema.columns
WHERE table_schema = 'dwd'
AND table_name = 'dwd_settlement_head_ex';
-- 预期30order_settle_id + 29 个业务字段)
-- 3) 确认 ODS payload 中 settleList 仍可按需提取
SELECT count(*)
FROM ods.settlement_records
WHERE payload IS NOT NULL AND payload->'settleList' IS NOT NULL;
-- 预期:> 0结算明细数据仍可从 ODS 获取)
-- 4) 确认 DWD 表数据完整性(主表-扩展表行数一致)
SELECT
(SELECT count(*) FROM dwd.dwd_settlement_head) AS main_count,
(SELECT count(*) FROM dwd.dwd_settlement_head_ex) AS ex_count;
-- 预期:两个计数相等
```
## 迁移文件
`database/migrations/20260214_drop_dwd_settle_list.sql`
## 关联变更
- ODS 层同日变更:`database/migrations/20260214_drop_ods_settlelist.sql`(删除 `settlement_records.settlelist``recharge_settlements.settlelist`
- BD 手册 ODS 变更记录:`docs/database/ODS/changes/20260214_drop_ods_settlelist.md`

View File

@@ -0,0 +1,131 @@
# dwd Schema 数据字典
> 生成时间2026-01-28
> 数据来源:数据库实时查询 + 500行样本数据分析
> 不确定内容已使用 **[待确认]** 标记
## 概述
`dwd` 是台球门店数据仓库的明细层(DWD),包含维度表(DIM)和事实表(DWD)。本 Schema 基于 SCD2 缓慢变化维度设计,支持历史数据追溯。
---
## 维度表 (Dimension Tables)
| 序号 | 表名 | 说明 | 主键 | 扩展表 | 文档链接 |
|------|------|------|------|--------|----------|
| 1 | dim_assistant | 助教信息 | assistant_id, scd2_start_time | dim_assistant_ex | [主表](BD_manual_dim_assistant.md) / [扩展表](BD_manual_dim_assistant_ex.md) |
| 2 | dim_goods_category | 商品分类 | category_id, scd2_start_time | 无 | [主表](BD_manual_dim_goods_category.md) |
| 3 | dim_groupbuy_package | 团购套餐 | groupbuy_package_id, scd2_start_time | dim_groupbuy_package_ex | [主表](BD_manual_dim_groupbuy_package.md) / [扩展表](BD_manual_dim_groupbuy_package_ex.md) |
| 4 | dim_member | 会员信息 | member_id, scd2_start_time | dim_member_ex | [主表](BD_manual_dim_member.md) / [扩展表](BD_manual_dim_member_ex.md) |
| 5 | dim_member_card_account | 会员卡账户 | member_card_id, scd2_start_time | dim_member_card_account_ex | [主表](BD_manual_dim_member_card_account.md) / [扩展表](BD_manual_dim_member_card_account_ex.md) |
| 6 | dim_site | 门店信息 | site_id, scd2_start_time | dim_site_ex | [主表](BD_manual_dim_site.md) / [扩展表](BD_manual_dim_site_ex.md) |
| 7 | dim_store_goods | 门店商品 | site_goods_id, scd2_start_time | dim_store_goods_ex | [主表](BD_manual_dim_store_goods.md) / [扩展表](BD_manual_dim_store_goods_ex.md) |
| 8 | dim_table | 台桌信息 | table_id, scd2_start_time | dim_table_ex | [主表](BD_manual_dim_table.md) / [扩展表](BD_manual_dim_table_ex.md) |
| 9 | dim_tenant_goods | 租户商品 | tenant_goods_id, scd2_start_time | dim_tenant_goods_ex | [主表](BD_manual_dim_tenant_goods.md) / [扩展表](BD_manual_dim_tenant_goods_ex.md) |
---
## 事实表 (Fact Tables)
| 序号 | 表名 | 说明 | 主键 | 扩展表 | 文档链接 |
|------|------|------|------|--------|----------|
| 1 | dwd_assistant_service_log | 助教服务流水 | assistant_service_id | dwd_assistant_service_log_ex | [主表](BD_manual_dwd_assistant_service_log.md) / [扩展表](BD_manual_dwd_assistant_service_log_ex.md) |
| 2 | dwd_assistant_trash_event | 助教服务作废 | assistant_trash_event_id | dwd_assistant_trash_event_ex | [主表](BD_manual_dwd_assistant_trash_event.md) / [扩展表](BD_manual_dwd_assistant_trash_event_ex.md) |
| 3 | dwd_groupbuy_redemption | 团购券核销 | redemption_id | dwd_groupbuy_redemption_ex | [主表](BD_manual_dwd_groupbuy_redemption.md) / [扩展表](BD_manual_dwd_groupbuy_redemption_ex.md) |
| 4 | dwd_member_balance_change | 会员余额变动 | balance_change_id | dwd_member_balance_change_ex | [主表](BD_manual_dwd_member_balance_change.md) / [扩展表](BD_manual_dwd_member_balance_change_ex.md) |
| 5 | dwd_payment | 支付流水 | payment_id | 无 | [主表](BD_manual_dwd_payment.md) |
| 6 | dwd_platform_coupon_redemption | 平台券核销 | platform_coupon_redemption_id | dwd_platform_coupon_redemption_ex | [主表](BD_manual_dwd_platform_coupon_redemption.md) / [扩展表](BD_manual_dwd_platform_coupon_redemption_ex.md) |
| 7 | dwd_recharge_order | 充值订单 | recharge_order_id | dwd_recharge_order_ex | [主表](BD_manual_dwd_recharge_order.md) / [扩展表](BD_manual_dwd_recharge_order_ex.md) |
| 8 | dwd_refund | 退款流水 | refund_id | dwd_refund_ex | [主表](BD_manual_dwd_refund.md) / [扩展表](BD_manual_dwd_refund_ex.md) |
| 9 | dwd_settlement_head | 结账单 | order_settle_id | dwd_settlement_head_ex | [主表](BD_manual_dwd_settlement_head.md) / [扩展表](BD_manual_dwd_settlement_head_ex.md) |
| 10 | dwd_store_goods_sale | 商品销售流水 | store_goods_sale_id | dwd_store_goods_sale_ex | [主表](BD_manual_dwd_store_goods_sale.md) / [扩展表](BD_manual_dwd_store_goods_sale_ex.md) |
| 11 | dwd_table_fee_adjust | 台费调整 | table_fee_adjust_id | dwd_table_fee_adjust_ex | [主表](BD_manual_dwd_table_fee_adjust.md) / [扩展表](BD_manual_dwd_table_fee_adjust_ex.md) |
| 12 | dwd_table_fee_log | 台费计费流水 | table_fee_log_id | dwd_table_fee_log_ex | [主表](BD_manual_dwd_table_fee_log.md) / [扩展表](BD_manual_dwd_table_fee_log_ex.md) |
---
## SCD2 公共字段
所有维度表都实现了 SCD2缓慢变化维度类型2包含以下公共字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| scd2_start_time | TIMESTAMPTZ | 版本生效开始时间 |
| scd2_end_time | TIMESTAMPTZ | 版本生效结束时间NULL 或 9999-12-31 表示当前有效) |
| scd2_is_current | INTEGER | 是否当前版本1=是, 0=否) |
| scd2_version | INTEGER | 版本号 |
---
## 最新值获取
- 维度表SCD2使用 scd2_is_current = 1 获取当前版本。
- 事实表:无 SCD2 版本字段,按业务时间字段倒序获取最新记录(如 pay_time / create_time / update_time 等)。
```sql
-- 维度表取当前版本
SELECT * FROM dwd.dim_member WHERE scd2_is_current = 1;
-- 事实表取最新记录(示例:按 pay_time
SELECT * FROM dwd.dwd_payment ORDER BY pay_time DESC NULLS LAST LIMIT 1;
```
## 常见 ID 关联说明
| ID 字段 | 关联表 | 说明 |
|---------|--------|------|
| tenant_id | - | 租户 ID标识所属租户 |
| site_id | dim_site | 门店 ID |
| member_id | dim_member | 会员 ID0=散客) |
| tenant_member_card_id | dim_member_card_account | 会员卡账户 ID |
| assistant_id | dim_assistant | 助教 ID |
| table_id / site_table_id | dim_table | 台桌 ID |
| tenant_goods_id | dim_tenant_goods | 租户商品 ID |
| site_goods_id | dim_store_goods | 门店商品 ID |
| order_settle_id | dwd_settlement_head | 结账单 ID |
---
## 表设计模式
### 主表 + 扩展表模式
大部分表采用"主表 + 扩展表"的设计模式:
- **主表**:包含核心业务字段(如金额、状态、关键 ID
- **扩展表**:包含附属信息(如操作员、门店名称快照、各类详细字段)
- 两表通过主键一对一关联
### 枚举值说明
文档中的枚举值格式为 `值(数量)=含义`,例如:
- `1(100)=有效` 表示值为 1 的记录有 100 条,含义为"有效"
- **[待确认]** 表示该值的含义无法从数据中确定
---
## 数据量统计
| 表名 | 记录数 |
|------|--------|
| dwd_payment | 22,949 |
| dwd_settlement_head | 22,475 |
| dwd_table_fee_log | 18,386 |
| dwd_store_goods_sale | 17,563 |
| dwd_platform_coupon_redemption | 16,977 |
| dwd_groupbuy_redemption | 11,420 |
| dwd_member_balance_change | 4,745 |
| dwd_table_fee_adjust | 2,849 |
| dwd_assistant_service_log | 1,090 |
| dwd_recharge_order | 455 |
| dwd_assistant_trash_event | 98 |
| dwd_refund | 45 |
---
## 注意事项
1. **枚举值推断**:文档中的枚举值含义基于 500 行样本数据推断,可能不完整
2. **[待确认] 标记**:不确定的字段含义或枚举值已明确标记
3. **数据时效性**:文档基于 2026-01-28 的数据库快照生成
4. **扩展表样本数据**:部分扩展表因日期解析问题无法获取样本数据

View File

@@ -0,0 +1,47 @@
# dim_assistant 助教档案主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_assistant |
| 主键 | assistant_id, scd2_start_time |
| 扩展表 | dim_assistant_ex |
| 记录数 | 69 |
| 说明 | 助教人员档案的核心信息,包括工号、姓名、联系方式、团队归属、等级等 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | assistant_id | BIGINT | NO | PK | 助教唯一标识 ID |
| 2 | user_id | BIGINT | YES | | 关联用户 ID当前数据全为 0**[作用待确认]** |
| 3 | assistant_no | TEXT | YES | | 助教工号,如 "11"、"27" |
| 4 | real_name | TEXT | YES | | 真实姓名,如 "梁婷婷"、"周佳怡" |
| 5 | nickname | TEXT | YES | | 昵称/花名,如 "柚子"、"周周"、"Amy" |
| 6 | mobile | TEXT | YES | | 手机号码 |
| 7 | tenant_id | BIGINT | YES | | 租户 ID当前值: 2790683160709957 |
| 8 | site_id | BIGINT | YES | | 门店 ID → dim_site当前值: 2790685415443269 |
| 9 | team_id | BIGINT | YES | | 团队 ID |
| 10 | team_name | TEXT | YES | | 团队名称。**枚举值**: "1组"(对应 team_id = 2792011585884037), "2组"(对应 team_id = 2959085810992645) |
| 11 | level | INTEGER | YES | | 助教等级。**枚举值**: 8 = 助教管理, 10 = 初级, 20 = 中级, 30 = 高级, 40 =专家 |
| 12 | entry_time | TIMESTAMPTZ | YES | | 入职时间 |
| 13 | resign_time | TIMESTAMPTZ | YES | | 离职时间(远未来日期如 2225-xx-xx 表示在职) |
| 14 | leave_status | INTEGER | YES | | 在职状态。**枚举值**: 0 = 在职, 1 = 已离职 |
| 15 | assistant_status | INTEGER | YES | | 观察者状态。**枚举值**: 1 = 为非观察者, 2 = 为观察者。 |
| 16 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 17 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 18 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 19 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明
使用 scd2_is_current = 1 获取当前版本。
```sql
-- 查询当前在职助教
SELECT * FROM dwd.dim_assistant
WHERE scd2_is_current = 1 AND leave_status = 0;
```

View File

@@ -0,0 +1,79 @@
# dim_goods_category 商品分类维度表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_goods_category |
| 主键 | category_id, scd2_start_time |
| 扩展表 | 无 |
| 记录数 | 26 |
| 说明 | 商品分类树结构表,支持一级/二级分类层次 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | category_id | BIGINT | NO | PK | 分类唯一标识 |
| 2 | tenant_id | BIGINT | YES | | 租户 ID当前值: 2790683160709957 |
| 3 | category_name | VARCHAR(50) | YES | | 分类名称。**样本值**: "槟榔", "皮头" 等 |
| 4 | alias_name | VARCHAR(50) | YES | | 分类别名(当前数据大部分为空) |
| 5 | parent_category_id | BIGINT | YES | | 父级分类 ID0=一级分类)→ 自关联 |
| 6 | business_name | VARCHAR(50) | YES | | 业务大类名称。**样本值**: "酒水", "器材" 等 |
| 7 | tenant_goods_business_id | BIGINT | YES | | 业务大类 ID |
| 8 | category_level | INTEGER | YES | | 分类层级。**枚举值**: 1=一级大类, 2=二级子类 |
| 9 | is_leaf | INTEGER | YES | | 是否叶子节点。**枚举值**: 0=非叶子, 1=叶子 |
| 10 | open_salesman | INTEGER | YES | | 营业员开关。 |
| 11 | sort_order | INTEGER | YES | | 排序序号 |
| 12 | is_warehousing | INTEGER | YES | | 是否库存管理。**枚举值**: 1=参与库存管理 |
| 13 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 14 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 15 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 16 | scd2_version | INTEGER | YES | | 版本号 |
## 分类树结构示例
```
槟榔(一级)
├── 槟榔(二级)
器材(一级)
├── 皮头
├── 球杆
├── 其他
酒水(一级)
├── 饮料
├── 酒水
├── 茶水
├── 咖啡
├── 加料
├── 洋酒
```
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_goods_category
WHERE category_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 查询一级分类
SELECT * FROM dwd.dim_goods_category
WHERE scd2_is_current = 1 AND parent_category_id = 0;
-- 查询某一级分类下的二级分类
SELECT * FROM dwd.dim_goods_category
WHERE scd2_is_current = 1 AND parent_category_id = <ID>;
```

View File

@@ -0,0 +1,64 @@
# dim_groupbuy_package 团购套餐主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_groupbuy_package |
| 主键 | groupbuy_package_id, scd2_start_time |
| 扩展表 | dim_groupbuy_package_ex |
| 记录数 | 34 |
| 说明 | 内部团购/套餐定义,记录套餐名称、价格、时长、适用台区等核心信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | groupbuy_package_id | BIGINT | NO | PK | 团购套餐 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID当前值: 2790683160709957 |
| 3 | site_id | BIGINT | YES | | 门店 ID → dim_site当前值: 2790685415443269 |
| 4 | package_name | VARCHAR(200) | YES | | 套餐名称。**样本值**: "中八、斯诺克包厢两小时", "斯诺克两小时"等 |
| 5 | package_template_id | BIGINT | YES | | 套餐模板 ID |
| 6 | selling_price | NUMERIC(10,2) | YES | | 售卖价格每笔订单不同从核销记录中dwd_groupbuy_redemption获取 |
| 7 | coupon_face_value | NUMERIC(10,2) | YES | | 券面值每笔订单不同从核销记录中dwd_groupbuy_redemption获取 |
| 8 | duration_seconds | INTEGER | YES | | 套餐时长(秒)。**样本值**: 3600=1小时, 7200=2小时, 14400=4小时 等 |
| 9 | start_time | TIMESTAMPTZ | YES | | 套餐生效开始时间 |
| 10 | end_time | TIMESTAMPTZ | YES | | 套餐生效结束时间 |
| 11 | table_area_name | VARCHAR(100) | YES | | 适用台区名称。**枚举值**: "A区", "VIP包厢", "斯诺克区", "B区", "麻将房", "888" |
| 12 | is_enabled | INTEGER | YES | | 启用状态。**枚举值**: 1=启用, 2=停用 |
| 13 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 14 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 15 | tenant_table_area_id_list | VARCHAR(512) | YES | | 租户级台区 ID 列表 |
| 16 | card_type_ids | VARCHAR(255) | YES | | 允许使用的卡类型 ID 列表(当前数据为 "0" |
| 17 | sort | INTEGER | YES | | 排序 |
| 18 | is_first_limit | BOOLEAN | YES | | 是否首单限制 |
| 19 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 20 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 21 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 22 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_groupbuy_package
WHERE groupbuy_package_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 查询当前启用的套餐
SELECT * FROM dwd.dim_groupbuy_package
WHERE scd2_is_current = 1 AND is_delete = 0 AND is_enabled = 1;
```

View File

@@ -0,0 +1,63 @@
# dim_member 会员档案主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_member |
| 主键 | member_id, scd2_start_time |
| 扩展表 | dim_member_ex |
| 记录数 | 556 |
| 说明 | 租户会员档案主表,记录会员基本信息和卡种等级 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | member_id | BIGINT | NO | PK | 租户内会员 IDtenant_member_id |
| 2 | system_member_id | BIGINT | YES | | 系统级会员 ID |
| 3 | tenant_id | BIGINT | YES | | 租户 ID当前值: 2790683160709957 |
| 4 | register_site_id | BIGINT | YES | | 注册门店 ID → dim_site当前值: 2790685415443269 |
| 5 | mobile | TEXT | YES | | 手机号码 |
| 6 | nickname | TEXT | YES | | 昵称。**样本值**: "陈先生", "张先生", "李先生",等 |
| 7 | member_card_grade_code | BIGINT | YES | | 卡等级代码 |
| 8 | member_card_grade_name | TEXT | YES | | 卡等级名称。**枚举值**: "储值卡", "台费卡", "年卡", "活动抵用券", "月卡" |
| 9 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 10 | update_time | TIMESTAMPTZ | YES | | 更新时间 |
| 11 | pay_money_sum | NUMERIC(18,2) | YES | | 累计支付金额 |
| 12 | recharge_money_sum | NUMERIC(18,2) | YES | | 累计充值金额 |
| 13 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 14 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 15 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 16 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_member
WHERE member_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 查询当前有效会员
SELECT * FROM dwd.dim_member
WHERE scd2_is_current = 1;
-- 按卡类型统计会员数
SELECT member_card_grade_name, COUNT(*)
FROM dwd.dim_member
WHERE scd2_is_current = 1
GROUP BY member_card_grade_name;
```

View File

@@ -0,0 +1,79 @@
# dim_member_card_account 会员卡账户主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_member_card_account |
| 主键 | member_card_id, scd2_start_time |
| 扩展表 | dim_member_card_account_ex |
| 记录数 | 945 |
| 说明 | 会员卡账户主表,记录卡种、余额、有效期等核心信息。一个会员可持有多张卡。 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | member_card_id | BIGINT | NO | PK | 会员卡账户 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | register_site_id | BIGINT | YES | | 开卡门店 ID → dim_site |
| 4 | tenant_member_id | BIGINT | YES | | 持卡会员 ID → dim_member0=未绑定会员) |
| 5 | system_member_id | BIGINT | YES | | 系统级会员 ID |
| 6 | card_type_id | BIGINT | YES | | 卡种 ID |
| 7 | member_card_grade_code | BIGINT | YES | | 卡等级代码 |
| 8 | member_card_grade_code_name | TEXT | YES | | 卡等级名称。**枚举值**: "储值卡", "台费卡", "活动抵用券", "酒水卡", "月卡", "年卡" |
| 9 | member_card_type_name | TEXT | YES | | 卡类型名称(与 grade_code_name 相同) |
| 10 | member_name | TEXT | YES | | 持卡人姓名快照 |
| 11 | member_mobile | TEXT | YES | | 持卡人手机号快照 |
| 12 | balance | NUMERIC(18,2) | YES | | 当前余额(元) |
| 13 | start_time | TIMESTAMPTZ | YES | | 卡生效时间 |
| 14 | end_time | TIMESTAMPTZ | YES | | 卡失效时间2225-01-01=长期有效) |
| 15 | last_consume_time | TIMESTAMPTZ | YES | | 最近消费时间 |
| 16 | status | INTEGER | YES | | 卡状态。**枚举值**: 1=正常, 4=过期 |
| 17 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 18 | principal_balance | NUMERIC(18,2) | YES | | 本金余额 |
| 19 | member_grade | INTEGER | YES | | 会员等级 |
| 20 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 21 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 22 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 23 | scd2_version | INTEGER | YES | | 版本号 |
## 卡种分布
| card_type_id | 卡类型 | 说明 |
|--------------|--------|------|
| 2793249295533893 | 储值卡 | 充值获得,可抵扣任意费用 |
| 2791990152417157 | 台费卡 | 充值赠送,即可抵扣台费 |
| 2793266846533445 | 活动抵用券 | 充值赠送,不可抵扣助教费 |
| 2794699703437125 | 酒水卡 | 充值赠送,仅可抵扣酒水饮料食品商品 |
| 2793306611533637 | 月卡 | 充值获得,时长卡,仅可抵扣台费 |
| 2791987095408517 | 年卡 | 充值获得,时长卡,仅可抵扣台费 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_member_card_account
WHERE member_card_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 查询有效的储值卡
SELECT * FROM dwd.dim_member_card_account
WHERE scd2_is_current = 1
AND is_delete = 0
AND status = 1
AND member_card_type_name = '储值卡';
```

View File

@@ -0,0 +1,65 @@
# dim_site 门店主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_site |
| 主键 | site_id, scd2_start_time |
| 扩展表 | dim_site_ex |
| 记录数 | 1 |
| 说明 | 门店维度主表,记录门店基本信息(地址、联系方式等) |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | site_id | BIGINT | NO | PK | 门店 ID |
| 2 | org_id | BIGINT | YES | | 组织机构 ID |
| 3 | tenant_id | BIGINT | YES | | 租户 ID当前值: 2790683160709957 |
| 4 | shop_name | TEXT | YES | | 门店名称。**当前值**: "朗朗桌球" |
| 5 | site_label | TEXT | YES | | 门店标签。**当前值**: "A" |
| 6 | full_address | TEXT | YES | | 详细地址。**当前值**: "广东省广州市天河区丽阳街12号" |
| 7 | address | TEXT | YES | | 地址描述。**当前值**: "广东省广州市天河区天园街道朗朗桌球" |
| 8 | longitude | NUMERIC(10,6) | YES | | 经度。**当前值**: 113.360321 |
| 9 | latitude | NUMERIC(10,6) | YES | | 纬度。**当前值**: 23.133629 |
| 10 | tenant_site_region_id | BIGINT | YES | | 区域 ID。**当前值**: 156440100 |
| 11 | business_tel | TEXT | YES | | 联系电话。**当前值**: "13316068642" |
| 12 | site_type | INTEGER | YES | | 门店类型。**枚举值**: 1(1)=**[待确认]** |
| 13 | shop_status | INTEGER | YES | | 营业状态。**枚举值**: 1(1)=营业中 **[待确认]** |
| 14 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 15 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 16 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 17 | scd2_version | INTEGER | YES | | 版本号 |
## 当前门店数据
| site_id | shop_name | full_address | longitude | latitude |
|---------|-----------|--------------|-----------|----------|
| 2790685415443269 | 朗朗桌球 | 广东省广州市天河区丽阳街12号 | 113.360321 | 23.133629 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_site
WHERE site_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 查询当前有效门店
SELECT * FROM dwd.dim_site
WHERE scd2_is_current = 1;
```

View File

@@ -0,0 +1,77 @@
# dim_store_goods 门店商品主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_store_goods |
| 主键 | site_goods_id, scd2_start_time |
| 扩展表 | dim_store_goods_ex |
| 记录数 | 170 |
| 说明 | 门店级商品库存维度表,记录门店的商品库存、价格、销量等信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | site_goods_id | BIGINT | NO | PK | 门店商品 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | site_id | BIGINT | YES | | 门店 ID → dim_site |
| 4 | tenant_goods_id | BIGINT | YES | | 租户商品 ID → dim_tenant_goods |
| 5 | goods_name | TEXT | YES | | 商品名称。**样本值**: "双中支中华", "炫赫门小南京"等 |
| 6 | goods_category_id | BIGINT | YES | | 一级分类 ID → dim_goods_category |
| 7 | goods_second_category_id | BIGINT | YES | | 二级分类 ID → dim_goods_category |
| 8 | category_level1_name | TEXT | YES | | 一级分类名称。**样本值**: "零食", "酒水", "其他", "香烟" 等 |
| 9 | category_level2_name | TEXT | YES | | 二级分类名称。**样本值**: "零食", "饮料", "其他2", "香烟", "雪糕", "酒水", "球杆", "槟榔" 等 |
| 10 | batch_stock_qty | INTEGER | YES | | 批次库存数量 |
| 11 | sale_qty | INTEGER | YES | | 销售数量 |
| 12 | total_sales_qty | INTEGER | YES | | 累计销售数量 |
| 13 | sale_price | NUMERIC(18,2) | YES | | 销售价格(元) |
| 14 | created_at | TIMESTAMPTZ | YES | | 创建时间 |
| 15 | updated_at | TIMESTAMPTZ | YES | | 更新时间 |
| 16 | avg_monthly_sales | NUMERIC(18,4) | YES | | 月均销量 |
| 17 | goods_state | INTEGER | YES | | 商品状态。**枚举值**: 1=上架, 2=下架 |
| 18 | enable_status | INTEGER | YES | | 启用状态。**枚举值**: 1=启用 |
| 19 | send_state | INTEGER | YES | | 配送状态。暂无作用 |
| 20 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 21 | commodity_code | TEXT | YES | | 商品编码 |
| 22 | not_sale | INTEGER | YES | | 是否停售 |
| 23 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 24 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 25 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 26 | scd2_version | INTEGER | YES | | 版本号 |
## 样本数据
| goods_name | category_level1_name | sale_price | sale_qty | goods_state |
|------------|----------------------|------------|----------|-------------|
| 双中支中华 | 香烟 | 72.00 | 94 | 1 |
| 炫赫门小南京 | 香烟 | 28.00 | 110 | 1 |
| 细荷花 | 香烟 | 55.00 | 184 | 1 |
| 可乐 | 酒水 | 5.00 | 78 | 1 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_store_goods
WHERE site_goods_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 查询当前上架商品
SELECT * FROM dwd.dim_store_goods
WHERE scd2_is_current = 1 AND goods_state = 1 AND is_delete = 0;
```

View File

@@ -0,0 +1,80 @@
# dim_table 台桌主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_table |
| 主键 | table_id, scd2_start_time |
| 扩展表 | dim_table_ex |
| 记录数 | 74 |
| 说明 | 台桌维度主表,记录台桌名称、所属台区、单价等核心信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | table_id | BIGINT | NO | PK | 台桌 ID |
| 2 | site_id | BIGINT | YES | | 门店 ID → dim_site |
| 3 | table_name | TEXT | YES | | 台桌名称。**样本值**: "A1", "A2", "B1", "B2", "S1", "C1", "VIP1", "M3", "666" 等 |
| 4 | site_table_area_id | BIGINT | YES | | 台区 ID |
| 5 | site_table_area_name | TEXT | YES | | 台区名称。**样本值**: "A区", "B区", "补时长", "C区", "麻将房", "K包", "VIP包厢", "斯诺克区", "666", "k包活动区", "M7" 等 |
| 6 | tenant_table_area_id | BIGINT | YES | | 租户级台区 ID |
| 7 | table_price | NUMERIC(18,2) | YES | | 台桌单价(当前数据全为 0.00 |
| 8 | order_id | BIGINT | YES | | 订单 ID |
| 9 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 10 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 11 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 12 | scd2_version | INTEGER | YES | | 版本号 |
## 台区分布
| 台区名称 | 台桌数量 | 大类/索引 |
|----------|----------|----------|
| A区 | 18 | 台球/打球/中八/追分 |
| B区 | 15 | 台球/打球/中八/追分 |
| 补时长 | 7 | 补时长 |
| C区 | 6 | 台球/打球/中八/追分 |
| 麻将房 | 5 | 麻将/麻将棋牌 |
| M7 | 2 | 麻将/麻将棋牌 |
| M8 | 1 | 麻将/麻将棋牌 |
| K包 | 4 | K包/K歌/KTV |
| VIP包厢 | 4 | 台球/打球/中八/追分 (V5为 台球/打球/斯诺克) |
| 斯诺克区 | 4 | 台球/打球/斯诺克 |
| 666 | 2 | 麻将/麻将棋牌 |
| TV台 | 1 | 台球/打球/中八/追分 |
| k包活动区 | 2 | K包/K歌/KTV |
| 幸会158 | 2 | K包/K歌/KTV |
| 发财 | 1 | 麻将/麻将棋牌 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_table
WHERE table_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 查询当前有效台桌
SELECT * FROM dwd.dim_table
WHERE scd2_is_current = 1;
-- 按台区统计台桌数
SELECT site_table_area_name, COUNT(*)
FROM dwd.dim_table
WHERE scd2_is_current = 1
GROUP BY site_table_area_name
ORDER BY COUNT(*) DESC;
```

View File

@@ -0,0 +1,61 @@
# dim_tenant_goods 租户商品主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dim_tenant_goods |
| 主键 | tenant_goods_id, scd2_start_time |
| 扩展表 | dim_tenant_goods_ex |
| 记录数 | 171 |
| 说明 | 租户级商品档案主表SKU 定义),被门店商品表引用 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | tenant_goods_id | BIGINT | NO | PK | 租户商品 IDSKU |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | supplier_id | BIGINT | YES | | 供应商 ID当前数据全为 0 |
| 4 | category_name | VARCHAR(64) | YES | | 分类名称(二级分类)。**样本值**: "零食", "饮料", "香烟"等 |
| 5 | goods_category_id | BIGINT | YES | | 一级分类 ID |
| 6 | goods_second_category_id | BIGINT | YES | | 二级分类 ID |
| 7 | goods_name | VARCHAR(128) | YES | | 商品名称。**样本值**: "海之言", "西梅多多饮品", "美汁源果粒橙", "三诺橙汁"等 |
| 8 | goods_number | VARCHAR(64) | YES | | 商品编号(序号) |
| 9 | unit | VARCHAR(16) | YES | | 商品单位。**枚举值**: "包", "瓶", "个", "份"等 |
| 10 | market_price | NUMERIC(18,2) | YES | | 市场价/吊牌价(元) |
| 11 | goods_state | INTEGER | YES | | 商品状态。**枚举值**: 1=上架, 2=下架 |
| 12 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 13 | update_time | TIMESTAMPTZ | YES | | 更新时间 |
| 14 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 15 | not_sale | INTEGER | YES | | 是否停售 |
| 16 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 17 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 18 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 19 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明
**版本与最新值**
本表为 SCD2 维度表版本字段scd2_start_time / scd2_end_time / scd2_is_current / scd2_version。
- 最新版本scd2_is_current = 1
- 按业务主键取最新:按 scd2_start_time 倒序
```sql
-- 取某业务主键的最新版本
SELECT *
FROM dwd.dim_tenant_goods
WHERE tenant_goods_id = <value>
ORDER BY scd2_start_time DESC
LIMIT 1;
```
**使用示例**
```sql
-- 查询当前有效的租户商品
SELECT * FROM dwd.dim_tenant_goods
WHERE scd2_is_current = 1 AND is_delete = 0;
```

View File

@@ -0,0 +1,80 @@
# dwd_assistant_service_log 助教服务流水主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_assistant_service_log |
| 主键 | assistant_service_id |
| 扩展表 | dwd_assistant_service_log_ex |
| 记录数 | 5003 |
| 说明 | 助教服务计费流水事实表,记录每次陪打/教学服务的详细信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | assistant_service_id | BIGINT | NO | PK | 服务流水 ID |
| 2 | order_trade_no | BIGINT | YES | | 订单号 → dwd_settlement_head |
| 3 | order_settle_id | BIGINT | YES | | 结账单 ID → dwd_settlement_head |
| 4 | order_pay_id | BIGINT | YES | | 支付单 ID当前数据全为 0 |
| 5 | order_assistant_id | BIGINT | YES | | 订单助教 ID |
| 6 | order_assistant_type | INTEGER | YES | | 服务类型。**枚举值**: 1=基础课 或 包厢课, 2=附加课/激励课 |
| 7 | tenant_id | BIGINT | YES | | 租户 ID |
| 8 | site_id | BIGINT | YES | | 门店 ID |
| 9 | site_table_id | BIGINT | YES | | 台桌 ID → dim_table0=非台桌服务) |
| 10 | tenant_member_id | BIGINT | YES | | 会员 ID → dim_member0=散客) |
| 11 | system_member_id | BIGINT | YES | | 系统会员 ID0=散客) |
| 12 | assistant_no | VARCHAR(64) | YES | | 助教工号。**样本值**: "2", "9"等 |
| 13 | nickname | VARCHAR(64) | YES | | 助教昵称。**样本值**: "佳怡", "婉婉", "七七"等 |
| 14 | site_assistant_id | BIGINT | YES | | 助教 ID → dim_assistant |
| 15 | user_id | BIGINT | YES | | 助教用户 ID |
| 16 | assistant_team_id | BIGINT | YES | | 助教团队 ID。**枚举值**: 2792011585884037=1组, 2959085810992645=2组 |
| 17 | person_org_id | BIGINT | YES | | 人事组织 ID |
| 18 | assistant_level | INTEGER | YES | | 助教等级。**枚举值**: 8=助教管理, 10=初级, 20=中级, 30=高级, 40=星级 |
| 19 | level_name | VARCHAR(64) | YES | | 等级名称。**枚举值**: "助教管理", "初级", "中级", "高级", "星级" |
| 20 | skill_id | BIGINT | YES | | 技能 ID **枚举值**: 2790683529513797 = 基础课 , 2790683529513798 = 附加课/激励课, 3039912271463941 = 包厢课 |
| 21 | skill_name | VARCHAR(64) | YES | | 技能名称。 **枚举值**: "基础课","附加课","包厢课"|
| 22 | ledger_unit_price | NUMERIC(10,2) | YES | | 单价(元/小时),**样本值**: 98.00/108.00/190.00 等 |
| 23 | ledger_amount | NUMERIC(10,2) | YES | | 计费金额 |
| 24 | projected_income | NUMERIC(10,2) | YES | | 预估收入 |
| 25 | coupon_deduct_money | NUMERIC(10,2) | YES | | 券抵扣金额 |
| 26 | income_seconds | INTEGER | YES | | 计费时长(秒)。常见值: 3600=1h, 7200=2h, 10800=3h |
| 27 | real_use_seconds | INTEGER | YES | | 实际使用时长(秒) |
| 28 | add_clock | INTEGER | YES | | 加时时长(秒),大多为 0 |
| 29 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 30 | start_use_time | TIMESTAMPTZ | YES | | 服务开始时间 |
| 31 | last_use_time | TIMESTAMPTZ | YES | | 服务结束时间 |
| 32 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 33 | real_service_money | NUMERIC(18,2) | YES | | 实际服务费金额 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段create_time, start_use_time, last_use_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_assistant_service_log
ORDER BY create_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 统计助教服务收入
SELECT
nickname, level_name,
COUNT(*) AS service_count,
SUM(ledger_amount) AS total_amount,
SUM(income_seconds)/3600.0 AS total_hours
FROM dwd.dwd_assistant_service_log
WHERE is_delete = 0
GROUP BY nickname, level_name
ORDER BY total_amount DESC;
```

View File

@@ -0,0 +1,56 @@
# dwd_assistant_trash_event 助教服务作废主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_assistant_trash_event |
| 主键 | assistant_trash_event_id |
| 扩展表 | dwd_assistant_trash_event_ex |
| 记录数 | 98 |
| 说明 | 助教服务作废事实表,记录被取消/作废的助教服务记录 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | assistant_trash_event_id | BIGINT | NO | PK | 作废事件 ID |
| 2 | site_id | BIGINT | YES | | 门店 ID |
| 3 | table_id | BIGINT | YES | | 台桌 ID → dim_table |
| 4 | table_area_id | BIGINT | YES | | 台区 ID |
| 5 | assistant_no | VARCHAR(32) | YES | | 助教工号/昵称。**样本值**: "七七", "乔西", "球球"等 |
| 6 | assistant_name | VARCHAR(64) | YES | | 助教名称,与 assistant_no 相同 |
| 7 | charge_minutes_raw | INTEGER | YES | | 原计费时长(秒)。**样本值**: 0, 3600=1h, 10800=3h 等 |
| 8 | abolish_amount | NUMERIC(18,2) | YES | | 作废金额(元)。**样本值**: 0.00, 190.00, 570.00 等 |
| 9 | trash_reason | VARCHAR(255) | YES | | 作废原因(当前数据全为 NULL |
| 10 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 11 | tenant_id | BIGINT | YES | | 租户 ID |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段create_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_assistant_trash_event
ORDER BY create_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 助教作废金额统计
SELECT
assistant_name,
COUNT(*) AS trash_count,
SUM(abolish_amount) AS total_abolished
FROM dwd.dwd_assistant_trash_event
GROUP BY assistant_name
ORDER BY total_abolished DESC;
```

View File

@@ -0,0 +1,71 @@
# dwd_groupbuy_redemption 团购核销主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_groupbuy_redemption |
| 主键 | redemption_id |
| 扩展表 | dwd_groupbuy_redemption_ex |
| 记录数 | 11420 |
| 说明 | 团购券核销事实表,记录团购券的核销使用明细 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | redemption_id | BIGINT | NO | PK | 核销 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | site_id | BIGINT | YES | | 门店 ID |
| 4 | table_id | BIGINT | YES | | 台桌 ID → dim_table |
| 5 | tenant_table_area_id | BIGINT | YES | | 台区 ID |
| 6 | table_charge_seconds | INTEGER | YES | | 台费计费时长(秒)。**样本值**: 3600=1h, 7200=2h, 10800=3h 等 |
| 7 | order_trade_no | BIGINT | YES | | 订单号 |
| 8 | order_settle_id | BIGINT | YES | | 结账单 ID → dwd_settlement_head |
| 9 | order_coupon_id | BIGINT | YES | | 订单券 ID |
| 10 | coupon_origin_id | BIGINT | YES | | 券来源 ID |
| 11 | promotion_activity_id | BIGINT | YES | | 促销活动 ID |
| 12 | promotion_coupon_id | BIGINT | YES | | 促销券 ID → dim_groupbuy_package |
| 13 | order_coupon_channel | INTEGER | YES | | 券渠道。**枚举值**: 1=美团, 2=抖音 |
| 14 | ledger_unit_price | NUMERIC(18,2) | YES | | 单价(元)。**样本值**: 29.90, 12.12, 11.11, 39.90 等 |
| 15 | ledger_count | INTEGER | YES | | 计费数量(秒)。**样本值**: 3600=1h, 7200=2h 等 |
| 16 | ledger_amount | NUMERIC(18,2) | YES | | 账本金额(元)。**样本值**: 48.00, 96.00, 68.00 等 |
| 17 | coupon_money | NUMERIC(18,2) | YES | | 券面额(元)。**样本值**: 48.00, 116.00, 96.00, 68.00 等 |
| 18 | promotion_seconds | INTEGER | YES | | 促销时长(秒)。**样本值**: 3600=1h, 7200=2h, 14400=4h 等 |
| 19 | coupon_code | VARCHAR(64) | YES | | 券码 |
| 20 | is_single_order | INTEGER | YES | | 是否独立订单。**枚举值**: 0=否, 1=是 |
| 21 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 22 | ledger_name | VARCHAR(128) | YES | | 套餐名称。**样本值**: "全天A区中八一小时", "中八A区新人特惠一小时" 等 |
| 23 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 24 | member_discount_money | NUMERIC(18,2) | YES | | 会员折扣金额 |
| 25 | coupon_sale_id | BIGINT | YES | | 优惠券销售 ID |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段create_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_groupbuy_redemption
ORDER BY create_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 各套餐核销统计
SELECT
ledger_name,
COUNT(*) AS redemption_count,
SUM(ledger_amount) AS total_amount
FROM dwd.dwd_groupbuy_redemption
WHERE is_delete = 0
GROUP BY ledger_name
ORDER BY redemption_count DESC;
```

View File

@@ -0,0 +1,87 @@
# dwd_member_balance_change 会员余额变动主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_member_balance_change |
| 主键 | balance_change_id |
| 扩展表 | dwd_member_balance_change_ex |
| 记录数 | 4745 |
| 说明 | 会员卡余额变动流水事实表,记录每次余额变动的金额和原因 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | balance_change_id | BIGINT | NO | PK | 变动流水 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | site_id | BIGINT | YES | | 门店 ID |
| 4 | register_site_id | BIGINT | YES | | 注册门店 ID |
| 5 | tenant_member_id | BIGINT | YES | | 会员 ID → dim_member |
| 6 | system_member_id | BIGINT | YES | | 系统会员 ID |
| 7 | tenant_member_card_id | BIGINT | YES | | 会员卡 ID → dim_member_card_account |
| 8 | card_type_id | BIGINT | YES | | 卡类型 ID |
| 9 | card_type_name | VARCHAR(32) | YES | | 卡类型名称。**枚举值**: "储值卡", "活动抵用券", "台费卡", "酒水卡", "年卡", "月卡" |
| 10 | member_name | VARCHAR(64) | YES | | 会员名称快照 |
| 11 | member_mobile | VARCHAR(20) | YES | | 会员手机号快照 |
| 12 | balance_before | NUMERIC(18,2) | YES | | 变动前余额 |
| 13 | change_amount | NUMERIC(18,2) | YES | | 变动金额(正=充值/赠送,负=消费) |
| 14 | balance_after | NUMERIC(18,2) | YES | | 变动后余额 |
| 15 | from_type | INTEGER | YES | | 变动来源。**枚举值**: 1=结账/消费, 2=结账撤销, 3=现付充值, 4=活动赠送, 7=充值撤销/退款, 9=手动调整 |
| 16 | payment_method | INTEGER | YES | | 支付方式,暂未启用。 |
| 17 | change_time | TIMESTAMPTZ | YES | | 变动时间 |
| 18 | is_delete | INTEGER | YES | | 删除标记 |
| 19 | remark | VARCHAR(255) | YES | | 备注。**样本值**: "注销会员", "充值退款" 等 |
| 20 | principal_before | NUMERIC(18,2) | YES | | 变动前本金 |
| 21 | principal_after | NUMERIC(18,2) | YES | | 变动后本金 |
| 22 | principal_change_amount | NUMERIC(18,2) | YES | | 本金变动金额(正=增加,负=减少) |
## 卡类型余额变动分布
| 卡类型 | 变动次数 | 说明 |
|--------|----------|------|
| 储值卡 | 2825 | 最主要的消费卡种 |
| 活动抵用券 | 1275 | 营销活动赠送 |
| 台费卡 | 482 | 台费专用卡 |
| 酒水卡 | 149 | 酒水专用卡 |
## 样本数据
| member_name | card_type_name | balance_before | change_amount | balance_after | from_type |
|-------------|----------------|----------------|---------------|---------------|-----------|
| 曾丹烨 | 储值卡 | 816.30 | -120.00 | 696.30 | 1 |
| 葛先生 | 储值卡 | 6745.27 | -144.00 | 6601.27 | 1 |
| 陈腾鑫 | 储值卡 | 293.20 | -114.61 | 178.59 | 1 |
| 轩哥 | 酒水卡 | 532.00 | -41.00 | 491.00 | 1 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段change_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_member_balance_change
ORDER BY change_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 会员消费总额排行
SELECT
member_name,
member_mobile,
card_type_name,
SUM(CASE WHEN change_amount < 0 THEN ABS(change_amount) ELSE 0 END) AS total_consume
FROM dwd.dwd_member_balance_change
WHERE is_delete = 0
GROUP BY member_name, member_mobile, card_type_name
ORDER BY total_consume DESC;
```

View File

@@ -0,0 +1,58 @@
# dwd_payment 支付流水表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_payment |
| 主键 | payment_id |
| 扩展表 | 无 |
| 记录数 | 22949 |
| 说明 | 支付流水事实表,记录每笔支付的方式、金额、时间等信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | payment_id | BIGINT | NO | PK | 支付流水 ID |
| 2 | site_id | BIGINT | YES | | 门店 ID |
| 3 | relate_type | INTEGER | YES | | 关联业务类型。**枚举值**: 1=预付, 2=结账, 5=充值, 6=线上商城 |
| 4 | relate_id | BIGINT | YES | | 关联业务 ID |
| 5 | pay_amount | NUMERIC(18,2) | YES | | 支付金额(元) |
| 6 | pay_status | INTEGER | YES | | 支付状态。**枚举值**: 2=已支付 |
| 7 | payment_method | INTEGER | YES | | 支付方式。**枚举值**: 2=现金支付 , 4=离线支付 |
| 8 | online_pay_channel | INTEGER | YES | | 在线支付渠道(当前数据全为 0 |
| 9 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 10 | pay_time | TIMESTAMPTZ | YES | | 支付时间 |
| 11 | pay_date | DATE | YES | | 支付日期 |
| 12 | tenant_id | BIGINT | YES | | 租户 ID |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段create_time, pay_time, pay_date
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_payment
ORDER BY pay_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 每日支付金额统计
SELECT
pay_date,
COUNT(*) AS pay_count,
SUM(pay_amount) AS total_amount
FROM dwd.dwd_payment
WHERE pay_status = 2
GROUP BY pay_date
ORDER BY pay_date DESC;
```

View File

@@ -0,0 +1,70 @@
# dwd_platform_coupon_redemption 平台券核销主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_platform_coupon_redemption |
| 主键 | platform_coupon_redemption_id |
| 扩展表 | dwd_platform_coupon_redemption_ex |
| 记录数 | 16977 |
| 说明 | 平台优惠券核销事实表,记录美团/抖音等平台券的核销明细 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | platform_coupon_redemption_id | BIGINT | NO | PK | 核销 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | site_id | BIGINT | YES | | 门店 ID |
| 4 | coupon_code | VARCHAR(64) | YES | | 券码 |
| 5 | coupon_channel | INTEGER | YES | | 券渠道。**枚举值**: 1=美团, 2=抖音 |
| 6 | coupon_name | VARCHAR(200) | YES | | 券名称。**样本值**: "【全天可用】中八桌球一小时A区", "【全天可用】中八桌球两小时A区" 等 |
| 7 | sale_price | NUMERIC(10,2) | YES | | 售卖价(元)。**样本值**: 29.90, 69.90, 59.90, 39.90, 19.90 等 |
| 8 | coupon_money | NUMERIC(10,2) | YES | | 券面额(元)。**样本值**: 48.00, 96.00, 116.00, 68.00 等 |
| 9 | coupon_free_time | INTEGER | YES | | 券赠送时长(当前数据全为 0 |
| 10 | channel_deal_id | BIGINT | YES | | 渠道交易 ID |
| 11 | deal_id | BIGINT | YES | | 交易 ID |
| 12 | group_package_id | BIGINT | YES | | 团购套餐 ID当前数据全为 0 |
| 13 | site_order_id | BIGINT | YES | | 门店订单 ID |
| 14 | table_id | BIGINT | YES | | 台桌 ID → dim_table |
| 15 | certificate_id | VARCHAR(64) | YES | | 凭证 ID |
| 16 | verify_id | VARCHAR(64) | YES | | 核验 ID仅抖音券有值 |
| 17 | use_status | INTEGER | YES | | 使用状态。**枚举值**: 1=已使用, 2=已撤销 |
| 18 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 19 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 20 | consume_time | TIMESTAMPTZ | YES | | 核销时间 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段coupon_free_time, create_time, consume_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_platform_coupon_redemption
ORDER BY create_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 各渠道核销统计
SELECT
CASE coupon_channel
WHEN 1 THEN '美团'
WHEN 2 THEN '抖音'
ELSE '其他'
END AS channel,
COUNT(*) AS redemption_count,
SUM(coupon_money) AS total_coupon_value,
SUM(sale_price) AS total_sale_price
FROM dwd.dwd_platform_coupon_redemption
WHERE is_delete = 0 AND use_status = 1
GROUP BY coupon_channel;
```

View File

@@ -0,0 +1,69 @@
# dwd_recharge_order 充值订单主表
> 生成时间2026-01-28 | 更新时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_recharge_order |
| 主键 | recharge_order_id |
| 扩展表 | dwd_recharge_order_ex |
| 记录数 | 455 |
| 说明 | 会员充值订单事实表,记录会员卡充值的金额、方式等信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | recharge_order_id | BIGINT | NO | PK | 充值订单 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | site_id | BIGINT | YES | | 门店 ID |
| 4 | member_id | BIGINT | YES | | 会员 ID → dim_member |
| 5 | member_name_snapshot | TEXT | YES | | 会员名称快照 |
| 6 | member_phone_snapshot | TEXT | YES | | 会员电话快照 |
| 7 | tenant_member_card_id | BIGINT | YES | | 会员卡账户 ID → dim_member_card_account |
| 8 | member_card_type_name | TEXT | YES | | 卡类型名称。**枚举值**: "储值卡", "月卡" |
| 9 | settle_relate_id | BIGINT | YES | | 结算关联 ID |
| 10 | settle_type | INTEGER | YES | | 结算类型。**枚举值**: 5=充值订单, 7=充值退款 |
| 11 | settle_name | TEXT | YES | | 结算名称。**枚举值**: "充值订单", "充值退款" |
| 12 | is_first | INTEGER | YES | | 是否首充。**枚举值**: 1=是, 2=否 |
| 13 | pay_amount | NUMERIC(18,2) | YES | | 充值金额(元,撤销为负数) |
| 14 | refund_amount | NUMERIC(18,2) | YES | | 退款金额 |
| 15 | point_amount | NUMERIC(18,2) | YES | | 积分金额 |
| 16 | cash_amount | NUMERIC(18,2) | YES | | 现金金额 |
| 17 | payment_method | INTEGER | YES | | 支付方式,暂未启用。 |
| 18 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 19 | pay_time | TIMESTAMPTZ | YES | | 支付时间 |
| 20 | pl_coupon_sale_amount | NUMERIC | YES | | 平台券销售金额 |
| 21 | mervou_sales_amount | NUMERIC | YES | | 美团/大众点评等平台销售金额 |
| 22 | electricity_money | NUMERIC | YES | | 电费金额 |
| 23 | real_electricity_money | NUMERIC | YES | | 实际电费金额 |
| 24 | electricity_adjust_money | NUMERIC | YES | | 电费调整金额 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段create_time, pay_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_recharge_order
ORDER BY pay_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 充值总额统计(不含撤销)
SELECT
member_card_type_name,
COUNT(*) AS order_count,
SUM(pay_amount) AS total_recharge
FROM dwd.dwd_recharge_order
WHERE settle_type = 5
GROUP BY member_card_type_name;
```

View File

@@ -0,0 +1,56 @@
# dwd_refund 退款流水主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_refund |
| 主键 | refund_id |
| 扩展表 | dwd_refund_ex |
| 记录数 | 45 |
| 说明 | 退款流水事实表,记录退款的金额、关联业务等信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | refund_id | BIGINT | NO | PK | 退款流水 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | site_id | BIGINT | YES | | 门店 ID |
| 4 | relate_type | INTEGER | YES | | 关联业务类型。**枚举值**: 1(7)=预付退款 , 2(31)=结账退款, 5(7)=充值退款 |
| 5 | relate_id | BIGINT | YES | | 关联业务 ID |
| 6 | pay_amount | NUMERIC(18,2) | YES | | 退款金额(元,负数) |
| 7 | channel_fee | NUMERIC(18,2) | YES | | 渠道手续费 |
| 8 | pay_time | TIMESTAMPTZ | YES | | 退款时间 |
| 9 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 10 | payment_method | INTEGER | YES | | 支付方式,暂无用途。 |
| 11 | member_id | BIGINT | YES | | 会员 ID当前数据全为 0 |
| 12 | member_card_id | BIGINT | YES | | 会员卡 ID当前数据全为 0 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段pay_time, create_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_refund
ORDER BY pay_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 退款统计
SELECT
relate_type,
COUNT(*) AS refund_count,
SUM(ABS(pay_amount)) AS total_refund
FROM dwd.dwd_refund
GROUP BY relate_type;
```

View File

@@ -0,0 +1,89 @@
# dwd_settlement_head 结账头表主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_settlement_head |
| 主键 | order_settle_id |
| 扩展表 | dwd_settlement_head_ex |
| 记录数 | 23366 |
| 说明 | 结账单头表事实表,是核心交易表,记录每笔结账的消费金额、支付方式、折扣等汇总信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | order_settle_id | BIGINT | NO | PK | 结账单 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | site_id | BIGINT | YES | | 门店 ID → dim_site |
| 4 | site_name | VARCHAR(100) | YES | | 门店名称。**当前值**: "朗朗桌球" |
| 5 | table_id | BIGINT | YES | | 台桌 ID → dim_table0=非台桌订单,如商城订单) |
| 6 | settle_name | VARCHAR(100) | YES | | 结账名称。**样本值**: "商城订单", "A区 A3", "A区 A4", "斯诺克区 S1" |
| 7 | order_trade_no | BIGINT | YES | | 订单号 |
| 8 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 9 | pay_time | TIMESTAMPTZ | YES | | 支付时间 |
| 10 | settle_type | INTEGER | YES | | 结账类型。**枚举值**: 1=台桌结账, 3=商城订单, 6=退货订单, 7=退款订单 |
| 11 | revoke_order_id | BIGINT | YES | | 撤销订单 ID当前数据全为 0 |
| 12 | member_id | BIGINT | YES | | 会员 ID → dim_member0=散客,占比约 82.8% |
| 13 | member_name | VARCHAR(100) | YES | | 会员名称 |
| 14 | member_phone | VARCHAR(50) | YES | | 会员电话 |
| 15 | member_card_account_id | BIGINT | YES | | 会员卡账户 ID当前数据全为 0 |
| 16 | member_card_type_name | VARCHAR(100) | YES | | 卡类型名称(当前数据全为空) |
| 17 | is_bind_member | BOOLEAN | YES | | 是否绑定会员。**枚举值**: False=否 |
| 18 | member_discount_amount | NUMERIC(18,2) | YES | | 会员折扣金额 |
| 19 | consume_money | NUMERIC(18,2) | YES | | 消费总金额(元) |
| 20 | table_charge_money | NUMERIC(18,2) | YES | | 台费金额 |
| 21 | goods_money | NUMERIC(18,2) | YES | | 商品金额 |
| 22 | real_goods_money | NUMERIC(18,2) | YES | | 实收商品金额 |
| 23 | assistant_pd_money | NUMERIC(18,2) | YES | | 助教陪打费用 |
| 24 | assistant_cx_money | NUMERIC(18,2) | YES | | 助教超休费用 |
| 25 | adjust_amount | NUMERIC(18,2) | YES | | 调整金额 |
| 26 | pay_amount | NUMERIC(18,2) | YES | | 实付金额 |
| 27 | balance_amount | NUMERIC(18,2) | YES | | 余额支付金额 |
| 28 | recharge_card_amount | NUMERIC(18,2) | YES | | 储值卡支付金额 |
| 29 | gift_card_amount | NUMERIC(18,2) | YES | | 礼品卡支付金额 |
| 30 | coupon_amount | NUMERIC(18,2) | YES | | 券抵扣金额 |
| 31 | rounding_amount | NUMERIC(18,2) | YES | | 抹零金额 |
| 32 | point_amount | NUMERIC(18,2) | YES | | 积分抵扣等值金额 |
| 33 | electricity_money | NUMERIC(18,2) | YES | | 电费金额 |
| 34 | real_electricity_money | NUMERIC(18,2) | YES | | 实际电费金额 |
| 35 | electricity_adjust_money | NUMERIC(18,2) | YES | | 电费调整金额 |
| 36 | pl_coupon_sale_amount | NUMERIC(18,2) | YES | | 平台券销售额 |
| 37 | mervou_sales_amount | NUMERIC(18,2) | YES | | 商户券销售额 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段create_time, pay_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_settlement_head
ORDER BY pay_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 每日营收统计
SELECT
DATE(pay_time) AS pay_date,
COUNT(*) AS order_count,
SUM(consume_money) AS total_consume,
SUM(pay_amount) AS total_pay
FROM dwd.dwd_settlement_head
GROUP BY DATE(pay_time)
ORDER BY pay_date DESC;
-- 台费 vs 商品 vs 助教收入
SELECT
SUM(table_charge_money) AS table_revenue,
SUM(goods_money) AS goods_revenue,
SUM(assistant_pd_money + assistant_cx_money) AS assistant_revenue
FROM dwd.dwd_settlement_head;
```

View File

@@ -0,0 +1,73 @@
# dwd_store_goods_sale 商品销售主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_store_goods_sale |
| 主键 | store_goods_sale_id |
| 扩展表 | dwd_store_goods_sale_ex |
| 记录数 | 17563 |
| 说明 | 商品销售流水事实表,记录每笔商品销售明细 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | store_goods_sale_id | BIGINT | NO | PK | 销售流水 ID |
| 2 | order_trade_no | BIGINT | YES | | 订单号 |
| 3 | order_settle_id | BIGINT | YES | | 结账单 ID → dwd_settlement_head |
| 4 | order_pay_id | BIGINT | YES | | 支付单 ID当前数据全为 0 |
| 5 | order_goods_id | BIGINT | YES | | 订单商品 ID0=商城订单) |
| 6 | site_id | BIGINT | YES | | 门店 ID |
| 7 | tenant_id | BIGINT | YES | | 租户 ID |
| 8 | site_goods_id | BIGINT | YES | | 门店商品 ID → dim_store_goods |
| 9 | tenant_goods_id | BIGINT | YES | | 租户商品 ID → dim_tenant_goods |
| 10 | tenant_goods_category_id | BIGINT | YES | | 商品分类 ID |
| 11 | tenant_goods_business_id | BIGINT | YES | | 业务大类 ID |
| 12 | site_table_id | BIGINT | YES | | 台桌 ID0=商城订单,非台桌消费) |
| 13 | ledger_name | VARCHAR(200) | YES | | 商品名称。**样本值**: "哇哈哈矿泉水", "东方树叶", "可乐" 等 |
| 14 | ledger_group_name | VARCHAR(100) | YES | | 商品分类。**样本值**: "酒水", "零食", "香烟" 等 |
| 15 | ledger_unit_price | NUMERIC(18,2) | YES | | 单价(元) |
| 16 | ledger_count | INTEGER | YES | | 购买数量。**样本值**: 1, 2, 3, 4 等 |
| 17 | ledger_amount | NUMERIC(18,2) | YES | | 销售金额(元) |
| 18 | discount_price | NUMERIC(18,2) | YES | | 折扣金额 |
| 19 | real_goods_money | NUMERIC(18,2) | YES | | 实收金额 |
| 20 | cost_money | NUMERIC(18,2) | YES | | 成本金额 |
| 21 | ledger_status | INTEGER | YES | | 账本状态。**枚举值**: 1=已结算 |
| 22 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 23 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 24 | coupon_share_money | NUMERIC(18,2) | YES | | 优惠券分摊金额 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段create_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_store_goods_sale
ORDER BY create_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 热销商品排行
SELECT
ledger_name,
ledger_group_name,
COUNT(*) AS sale_count,
SUM(ledger_count) AS total_qty,
SUM(real_goods_money) AS total_revenue
FROM dwd.dwd_store_goods_sale
WHERE is_delete = 0
GROUP BY ledger_name, ledger_group_name
ORDER BY total_revenue DESC
LIMIT 20;
```

View File

@@ -0,0 +1,59 @@
# dwd_table_fee_adjust 台费调整主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dwd |
| 表名 | dwd_table_fee_adjust |
| 主键 | table_fee_adjust_id |
| 扩展表 | dwd_table_fee_adjust_ex |
| 记录数 | 2849 |
| 说明 | 台费调整事实表,记录台费调整的金额和时间 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | table_fee_adjust_id | BIGINT | NO | PK | 台费调整 ID |
| 2 | order_trade_no | BIGINT | YES | | 订单号 |
| 3 | order_settle_id | BIGINT | YES | | 结账单 ID → dwd_settlement_head |
| 4 | tenant_id | BIGINT | YES | | 租户 ID |
| 5 | site_id | BIGINT | YES | | 门店 ID |
| 6 | table_id | BIGINT | YES | | 台桌 ID → dim_table |
| 7 | table_area_id | BIGINT | YES | | 台区 ID |
| 8 | table_area_name | VARCHAR(64) | YES | | 台区名称(当前数据全为 NULL |
| 9 | tenant_table_area_id | BIGINT | YES | | 租户台区 ID |
| 10 | ledger_amount | NUMERIC(18,2) | YES | | 调整金额(元) |
| 11 | ledger_status | INTEGER | YES | | 账本状态。**枚举值**: 0=待确认, 1=已确认 |
| 12 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 13 | table_name | TEXT | YES | | 台桌名称 |
| 14 | table_price | NUMERIC(18,2) | YES | | 台桌价格 |
| 15 | charge_free | BOOLEAN | YES | | 是否免费 |
| 16 | adjust_time | TIMESTAMPTZ | YES | | 调整时间 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段adjust_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_table_fee_adjust
ORDER BY adjust_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 台费调整统计
SELECT
COUNT(*) AS adjust_count,
SUM(ledger_amount) AS total_adjust
FROM dwd.dwd_table_fee_adjust
WHERE is_delete = 0 AND ledger_status = 1;
```

View File

@@ -0,0 +1,84 @@
# dwd_table_fee_log 台费流水主表
> 生成时间2026-01-28
## 表信息
| 属性 | 值 |
| ------ | ----------------------- |
| Schema | dwd |
| 表名 | dwd_table_fee_log |
| 主键 | table_fee_log_id |
| 扩展表 | dwd_table_fee_log_ex |
| 记录数 | 18386 |
| 说明 | 台费计费流水事实表,记录每次台桌使用的计费明细 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
| --- | ------------------------ | ------------- | --- | --- | --------------------------------------------------------------- |
| 1 | table_fee_log_id | BIGINT | NO | PK | 台费流水 ID |
| 2 | order_trade_no | BIGINT | YES | | 订单号 |
| 3 | order_settle_id | BIGINT | YES | | 结账单 ID → dwd_settlement_head |
| 4 | order_pay_id | BIGINT | YES | | 支付单 ID当前数据全为 0 |
| 5 | tenant_id | BIGINT | YES | | 租户 ID |
| 6 | site_id | BIGINT | YES | | 门店 ID |
| 7 | site_table_id | BIGINT | YES | | 台桌 ID → dim_table |
| 8 | site_table_area_id | BIGINT | YES | | 台区 ID |
| 9 | site_table_area_name | VARCHAR(64) | YES | | 台区名称。**枚举值**: "A区", "B区", "斯诺克区", "麻将房", "C区", "补时长", "VIP包厢" 等 |
| 10 | tenant_table_area_id | BIGINT | YES | | 租户级台区 ID |
| 11 | member_id | BIGINT | YES | | 会员 ID0=散客,占比约 82.4% |
| 12 | ledger_name | VARCHAR(64) | YES | | 台桌名称。**样本值**: "A3", "A5", "A4", "S1", "B5", "M3" 等 |
| 13 | ledger_unit_price | NUMERIC(18,2) | YES | | 单价(元/小时),如 48.00/58.00/68.00 |
| 14 | ledger_count | INTEGER | YES | | 计费时长(秒)。**样本值**: 3600=1h, 7200=2h, 10800=3h 等 |
| 15 | ledger_amount | NUMERIC(18,2) | YES | | 计费金额(元) |
| 16 | real_table_charge_money | NUMERIC(18,2) | YES | | 实收台费金额 |
| 17 | coupon_promotion_amount | NUMERIC(18,2) | YES | | 券促销金额 |
| 18 | member_discount_amount | NUMERIC(18,2) | YES | | 会员折扣金额 |
| 19 | adjust_amount | NUMERIC(18,2) | YES | | 调整金额 |
| 20 | real_table_use_seconds | INTEGER | YES | | 实际使用时长(秒) |
| 21 | add_clock_seconds | INTEGER | YES | | 加时时长(秒),大多为 0 |
| 22 | start_use_time | TIMESTAMPTZ | YES | | 开台时间 |
| 23 | ledger_end_time | TIMESTAMPTZ | YES | | 结账时间 |
| 24 | create_time | TIMESTAMPTZ | YES | | 记录创建时间 |
| 25 | ledger_status | INTEGER | YES | | 账本状态。**枚举值**: 1=已结算 |
| 26 | is_single_order | INTEGER | YES | | 是否独立订单。**枚举值**: 0=合并订单, 1=独立订单 |
| 27 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 28 | activity_discount_amount | NUMERIC(18,2) | YES | | 活动折扣金额 |
| 29 | real_service_money | NUMERIC(18,2) | YES | | 实际服务费金额 |
## 使用说明
**版本与最新值**
本表为事实表,无 SCD2 版本字段。
- 可用时间字段start_use_time, ledger_end_time, create_time
```sql
-- 取最新一条(按时间字段倒序)
SELECT *
FROM dwd.dwd_table_fee_log
ORDER BY create_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 各台区台费收入统计
SELECT
site_table_area_name,
COUNT(*) AS usage_count,
SUM(ledger_amount) AS total_fee,
SUM(real_table_charge_money) AS real_fee,
SUM(coupon_promotion_amount) AS coupon_fee
FROM dwd.dwd_table_fee_log
WHERE is_delete = 0
GROUP BY site_table_area_name
ORDER BY total_fee DESC;
```

View File

@@ -0,0 +1,141 @@
# DWS 层 DDL 同步修正 — 变更记录
> 结构性变更:修正 8 项差异(补充 5 个缺失字段、2 张缺失表、1 个缺失视图)
## 溯源
- 日期2026-02-13Asia/Shanghai
- 工具:`scripts/compare_ddl_db.py --schema dws --ddl-path database/schema_dws.sql`
- Direct causeDDL 对比脚本发现 `database/schema_dws.sql` 与数据库 `dws` schema 实际状态存在 8 项差异,以数据库为准修正 DDL 文件。
## 变更内容
### 缺失字段5 项)
| Schema | 表名 | 操作 | 字段 | 数据库类型 | 说明 |
|--------|------|------|------|-----------|------|
| `dws` | `dws_assistant_daily_detail` | DDL 补充字段 | `unique_customers` | `INTEGER` | 当日服务独立客户数 |
| `dws` | `dws_assistant_daily_detail` | DDL 补充字段 | `unique_tables` | `INTEGER` | 当日服务独立台桌数 |
| `dws` | `dws_assistant_finance_analysis` | DDL 补充字段 | `unique_customers` | `INTEGER` | 统计周期内独立客户数 |
| `dws` | `dws_assistant_monthly_summary` | DDL 补充字段 | `unique_customers` | `INTEGER` | 当月服务独立客户数 |
| `dws` | `dws_assistant_monthly_summary` | DDL 补充字段 | `unique_tables` | `INTEGER` | 当月服务独立台桌数 |
### 缺失表2 张)
| Schema | 表名 | 操作 | 说明 |
|--------|------|------|------|
| `dws` | `dws_member_assistant_intimacy` | DDL 补充整表 | 会员-助教亲密度指标表,记录会员与助教的互动频次和亲密度评分 |
| `dws` | `dws_member_recall_index` | DDL 补充整表 | 会员召回指数表,记录会员流失风险和召回优先级评分 |
### 缺失视图1 个)
| Schema | 视图名 | 操作 | 说明 |
|--------|--------|------|------|
| `dws` | `v_member_recall_priority` | DDL 补充视图 | 会员召回优先级视图,基于 `dws_member_recall_index` 计算召回排序 |
## 变更原因
1. `unique_customers` / `unique_tables` 字段DWS 汇总任务在运行时动态计算并写入的统计字段DDL 文件在初始编写时遗漏
2. `dws_member_assistant_intimacy` 表:会员-助教亲密度分析功能上线时创建DDL 文件未同步更新
3. `dws_member_recall_index` 表和 `v_member_recall_priority` 视图会员召回分析功能上线时创建DDL 文件未同步更新
## 影响范围
| 影响对象 | 影响程度 | 说明 |
|----------|----------|------|
| ETL 加载任务 | 无影响 | 本次仅修正 DDL 文档,不涉及数据库结构变更 |
| DWS 汇总任务 | 无影响 | 这些表/字段已在数据库中存在并被正常使用 |
| 后端 API | 无影响 | DDL 文件为文档性质,不影响运行时 |
| 小程序字段映射 | 无影响 | 小程序通过 API 访问,不直接读 DWS 层 |
| DWS 表级文档 | ⚠️ 需同步 | 新增表需补充 BD 手册表级文档;已有表文档需补充 `unique_customers`/`unique_tables` 字段 |
| 指数算法文档 | ⚠️ 需关注 | `dws_member_assistant_intimacy``dws_member_recall_index` 涉及自定义指数算法 |
**注意**:本次变更仅修正 DDL 文件(文档同步),数据库结构未发生任何变更。
## 回滚策略
本次为 DDL 文件修正(文档同步),无需数据库回滚。若需恢复 DDL 文件,使用 Git 回退即可:
```bash
git checkout HEAD~1 -- database/schema_dws.sql
```
若未来需要将数据库结构回退(不推荐,会丢失业务数据):
```sql
-- 1) 删除补充的字段
ALTER TABLE dws.dws_assistant_daily_detail DROP COLUMN unique_customers;
ALTER TABLE dws.dws_assistant_daily_detail DROP COLUMN unique_tables;
ALTER TABLE dws.dws_assistant_finance_analysis DROP COLUMN unique_customers;
ALTER TABLE dws.dws_assistant_monthly_summary DROP COLUMN unique_customers;
ALTER TABLE dws.dws_assistant_monthly_summary DROP COLUMN unique_tables;
-- 2) 删除视图(必须先于依赖表)
DROP VIEW IF EXISTS dws.v_member_recall_priority;
-- 3) 删除补充的表
DROP TABLE IF EXISTS dws.dws_member_recall_index;
DROP TABLE IF EXISTS dws.dws_member_assistant_intimacy;
```
## 验证 SQL
```sql
-- 1) 确认 dws_assistant_daily_detail 包含 unique_customers 和 unique_tables
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'dws'
AND table_name = 'dws_assistant_daily_detail'
AND column_name IN ('unique_customers', 'unique_tables')
ORDER BY column_name;
-- 预期2 行,均为 integer
-- 2) 确认 dws_assistant_monthly_summary 包含 unique_customers 和 unique_tables
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'dws'
AND table_name = 'dws_assistant_monthly_summary'
AND column_name IN ('unique_customers', 'unique_tables')
ORDER BY column_name;
-- 预期2 行,均为 integer
-- 3) 确认 dws_assistant_finance_analysis 包含 unique_customers
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'dws'
AND table_name = 'dws_assistant_finance_analysis'
AND column_name = 'unique_customers';
-- 预期1 行data_type = 'integer'
-- 4) 确认 dws_member_assistant_intimacy 表存在
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'dws'
AND table_name = 'dws_member_assistant_intimacy';
-- 预期1 行
-- 5) 确认 dws_member_recall_index 表存在
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'dws'
AND table_name = 'dws_member_recall_index';
-- 预期1 行
-- 6) 确认 v_member_recall_priority 视图存在
SELECT table_name, table_type
FROM information_schema.tables
WHERE table_schema = 'dws'
AND table_name = 'v_member_recall_priority';
-- 预期1 行table_type = 'VIEW'
-- 7) 确认修正后 DDL 与数据库零差异(通过对比脚本验证)
-- python scripts/compare_ddl_db.py --schema dws --ddl-path database/schema_dws.sql
-- 预期0 项差异
```
## 关联变更
- ODS 层同步修正:`docs/database/ODS/changes/2026-02-13_ddl_sync_ods.md`
- DWD 层同步修正:`docs/database/DWD/changes/2026-02-13_ddl_sync_dwd.md`
- DDL 文件:`database/schema_dws.sql`
- 对比结果:`docs/database/ddl_compare_results.md`

View File

@@ -0,0 +1,74 @@
# cfg_area_category 台区分类映射表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | cfg_area_category |
| 主键 | category_id |
| 数据来源 | 手工维护/seed脚本基于dim_table实际数据 |
| 说明 | 将dim_table.site_table_area_name映射到财务报表区域分类 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | category_id | SERIAL | NO | PK | 分类ID自增 |
| 2 | source_area_name | VARCHAR(100) | NO | UK | 源区域名称来自dim_table.site_table_area_name |
| 3 | category_code | VARCHAR(20) | NO | | 分类代码。**枚举值**: BILLIARD, BILLIARD_VIP, SNOOKER, MAHJONG, KTV, SPECIAL, OTHER |
| 4 | category_name | VARCHAR(50) | NO | | 分类名称 |
| 5 | match_type | VARCHAR(10) | NO | | 匹配类型。**枚举值**: EXACT精确, LIKE模糊, DEFAULT兜底 |
| 6 | match_priority | INTEGER | NO | | 匹配优先级(数字越小优先级越高) |
| 7 | is_active | BOOLEAN | NO | | 是否启用 |
| 8 | description | TEXT | YES | | 说明 |
| 9 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 10 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |
## 分类映射示例
| 源区域名称 | 分类代码 | 分类名称 |
|------------|----------|----------|
| A区 | BILLIARD | 台球散台 |
| B区 | BILLIARD | 台球散台 |
| C区 | BILLIARD | 台球散台 |
| TV台 | BILLIARD | 台球散台 |
| VIP包厢 | BILLIARD_VIP | 台球VIP |
| 斯诺克区 | SNOOKER | 斯诺克 |
| 麻将房 | MAHJONG | 麻将棋牌 |
| M7 | MAHJONG | 麻将棋牌 |
| M8 | MAHJONG | 麻将棋牌 |
| 666 | MAHJONG | 麻将棋牌 |
| 发财 | MAHJONG | 麻将棋牌 |
| K包 | KTV | K歌娱乐 |
| k包活动区 | KTV | K歌娱乐 |
| 幸会158 | KTV | K歌娱乐 |
| 补时长 | SPECIAL | 补时长 |
## 使用说明
**取值方式**
```sql
-- 将台区名称映射到分类
SELECT
dt.site_table_area_name,
COALESCE(ac.category_code, 'OTHER') AS category_code,
COALESCE(ac.category_name, '其他') AS category_name
FROM dwd.dim_table dt
LEFT JOIN dws.cfg_area_category ac
ON dt.site_table_area_name = ac.source_area_name
AND ac.is_active = TRUE
WHERE dt.scd2_is_current = 1;
-- 按分类汇总收入
SELECT
COALESCE(ac.category_name, '其他') AS category_name,
SUM(tfl.ledger_amount) AS total_amount
FROM dwd.dwd_table_fee_log tfl
LEFT JOIN dwd.dim_table dt ON dt.table_id = tfl.site_table_id
LEFT JOIN dws.cfg_area_category ac ON dt.site_table_area_name = ac.source_area_name
GROUP BY COALESCE(ac.category_name, '其他');
```

View File

@@ -0,0 +1,59 @@
# cfg_assistant_level_price 助教等级定价表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | cfg_assistant_level_price |
| 主键 | price_id |
| 数据来源 | 手工维护/seed脚本 |
| 说明 | 助教等级对应的基础课和附加课单价配置 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | price_id | SERIAL | NO | PK | 定价ID自增 |
| 2 | level_code | INTEGER | NO | | 等级代码。**枚举值**: 8=助教管理, 10=初级, 20=中级, 30=高级, 40=星级 |
| 3 | level_name | VARCHAR(20) | NO | | 等级名称 |
| 4 | base_course_price | NUMERIC(10,2) | NO | | 基础课单价(元/小时) |
| 5 | bonus_course_price | NUMERIC(10,2) | NO | | 附加课单价(元/小时固定190元 |
| 6 | effective_from | DATE | NO | | 生效起始日期(含) |
| 7 | effective_to | DATE | NO | | 生效截止日期(含) |
| 8 | description | TEXT | YES | | 说明 |
| 9 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 10 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |
## 定价配置示例
| 等级代码 | 等级名称 | 基础课单价 | 附加课单价 |
|----------|----------|------------|------------|
| 8 | 助教管理 | 98元/小时 | 190元/小时 |
| 10 | 初级 | 98元/小时 | 190元/小时 |
| 20 | 中级 | 108元/小时 | 190元/小时 |
| 30 | 高级 | 118元/小时 | 190元/小时 |
| 40 | 星级 | 138元/小时 | 190元/小时 |
## 使用说明
**取值方式**
SCD2口径助教等级来自dim_assistant取数时需按有效期as-of join
**说明**
- 包厢课基础课统一按138元/小时计价,不随等级变化
```sql
-- 获取助教在指定日期的等级定价
SELECT p.*
FROM dws.cfg_assistant_level_price p
JOIN dwd.dim_assistant a ON p.level_code = a.level
WHERE a.assistant_id = 123
AND a.scd2_start_time <= '2026-01-15'
AND (a.scd2_end_time IS NULL OR a.scd2_end_time > '2026-01-15')
AND p.effective_from <= '2026-01-15'
AND p.effective_to >= '2026-01-15';
```

View File

@@ -0,0 +1,73 @@
# cfg_bonus_rules 奖金规则配置表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | cfg_bonus_rules |
| 主键 | rule_id |
| 数据来源 | 手工维护/seed脚本 |
| 说明 | 奖金规则配置冲刺奖金为历史口径Top3排名奖金为现行口径 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | rule_id | SERIAL | NO | PK | 规则ID自增 |
| 2 | rule_type | VARCHAR(20) | NO | | 规则类型。**枚举值**: SPRINT冲刺奖金历史口径, TOP_RANKTop排名奖金 |
| 3 | rule_code | VARCHAR(30) | NO | | 规则代码。**枚举值**: TOP_1, TOP_2, TOP_3SPRINT_*为历史规则) |
| 4 | rule_name | VARCHAR(50) | NO | | 规则名称 |
| 5 | threshold_hours | NUMERIC(10,2) | YES | | 小时数阈值(冲刺奖金用) |
| 6 | rank_position | INTEGER | YES | | 排名位置Top奖金用 |
| 7 | bonus_amount | NUMERIC(12,2) | NO | | 奖金金额(元) |
| 8 | is_cumulative | BOOLEAN | NO | | 是否可累计冲刺奖金为FALSE取最高档 |
| 9 | priority | INTEGER | NO | | 优先级(数字越大优先级越高) |
| 10 | effective_from | DATE | NO | | 生效起始日期(含) |
| 11 | effective_to | DATE | NO | | 生效截止日期(含) |
| 12 | description | TEXT | YES | | 说明 |
| 13 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 14 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |
## 奖金规则示例
### 冲刺奖金历史口径至2026-02-28不累计取最高档
| 规则代码 | 小时阈值 | 奖金金额 | 优先级 |
|----------|----------|----------|--------|
| SPRINT_190 | 190小时 | 300元 | 1 |
| SPRINT_220 | 220小时 | 800元 | 2 |
### Top3排名奖金2026-03-01起独立发放
| 规则代码 | 排名 | 奖金金额 |
|----------|------|----------|
| TOP_1 | 第1名 | 1000元 |
| TOP_2 | 第2名 | 600元 |
| TOP_3 | 第3名 | 400元 |
## 使用说明
**取值方式**
```sql
-- 获取冲刺奖金(取最高档)
SELECT * FROM dws.cfg_bonus_rules
WHERE rule_type = 'SPRINT'
AND threshold_hours <= 200 -- 实际小时数
AND effective_from <= '2026-02-28'
AND effective_to >= '2026-02-28'
ORDER BY priority DESC
LIMIT 1;
-- 获取Top3排名奖金
SELECT * FROM dws.cfg_bonus_rules
WHERE rule_type = 'TOP_RANK'
AND rank_position = 1 -- 排名
AND effective_from <= '2026-03-01'
AND effective_to >= '2026-03-01';
```
**排名口径说明**
- Top3排名按有效业绩小时数effective_hours降序排列
- 如遇并列则都算如2个第一则记为2个第一下一个是第三

View File

@@ -0,0 +1,51 @@
# cfg_index_parameters 指数算法参数配置表
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | cfg_index_parameters |
| 主键 | param_id |
| 唯一键 | (index_type, param_name, effective_from) |
| 数据来源 | 手动配置 / seed_index_parameters.sql |
| 说明 | 指数算法WBI/NCI/RS/OS/MS/ML的公共与专用参数 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | param_id | SERIAL | NO | 自增主键 |
| 2 | index_type | VARCHAR | NO | 指数类型WBI/NCI/RS/OS/MS/ML/COMMON |
| 3 | param_name | VARCHAR | NO | 参数名称(如 percentile_lower、ewma_alpha |
| 4 | param_value | NUMERIC | NO | 参数值 |
| 5 | description | TEXT | YES | 参数说明 |
| 6 | effective_from | DATE | NO | 生效起始日期(默认 CURRENT_DATE |
| 7 | effective_to | DATE | YES | 生效截止日期NULL 表示永久有效) |
| 8 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 9 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 公共参数说明
| 参数名 | 说明 |
|--------|------|
| percentile_lower | 分位截断下锚点(如 5% |
| percentile_upper | 分位截断上锚点(如 95% |
| ewma_alpha | EWMA 平滑系数0~1 |
## 使用说明
```sql
-- 查询 RS 指数当前有效参数
SELECT param_name, param_value
FROM dws.cfg_index_parameters
WHERE index_type = 'RS'
AND effective_from <= CURRENT_DATE
AND (effective_to IS NULL OR effective_to >= CURRENT_DATE);
```
## 初始化
种子脚本:`database/seed_index_parameters.sql`

View File

@@ -0,0 +1,73 @@
# cfg_performance_tier 绩效档位配置表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | cfg_performance_tier |
| 主键 | tier_id |
| 数据来源 | 手工维护/seed脚本 |
| 说明 | 助教绩效档位配置,包含阈值、抽成比例、假期天数 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | tier_id | SERIAL | NO | PK | 档位ID自增 |
| 2 | tier_code | VARCHAR(20) | NO | | 档位代码。**示例值**: T0, T1, T2, T3, T4 |
| 3 | tier_name | VARCHAR(50) | NO | | 档位名称 |
| 4 | tier_level | INTEGER | NO | | 档位等级(数字越大档位越高) |
| 5 | min_hours | NUMERIC(10,2) | NO | | 最低业绩小时数阈值(>= |
| 6 | max_hours | NUMERIC(10,2) | YES | | 最高业绩小时数阈值(<NULL表示无上限 |
| 7 | base_deduction | NUMERIC(10,2) | NO | | 专业课抽成(元/小时),球房从基础课扣除 |
| 8 | bonus_deduction_ratio | NUMERIC(5,4) | NO | | 打赏课抽成比例0-1 |
| 9 | vacation_days | INTEGER | NO | | 次月可休假天数 |
| 10 | vacation_unlimited | BOOLEAN | NO | | 是否休假自由最高档为TRUE |
| 11 | is_new_hire_tier | BOOLEAN | NO | | 是否为新入职专用档位(预留,当前规则不使用) |
| 12 | effective_from | DATE | NO | | 生效起始日期(含) |
| 13 | effective_to | DATE | NO | | 生效截止日期(含) |
| 14 | description | TEXT | YES | | 档位说明 |
| 15 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 16 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |
## 档位配置示例2026-03-01起
| 档位代码 | 档位名称 | 小时数范围 | 专业课抽成 | 打赏课抽成 | 假期 |
|----------|----------|------------|------------|------------|------|
| T0 | 0档-淘汰压力 | 0-120 | 28元/小时 | 50% | 3天 |
| T1 | 1档-及格档 | 120-150 | 18元/小时 | 40% | 4天 |
| T2 | 2档-良好档 | 150-180 | 13元/小时 | 35% | 5天 |
| T3 | 3档-优秀档 | 180-210 | 10元/小时 | 30% | 6天 |
| T4 | 4档-销冠竞争 | 210+ | 8元/小时 | 25% | 自由 |
**新入职规则2026-03-01起**
- 本月首次入职:按日均业绩小时数 × 30 定档
- 入职日期 > 25 日:最高定档至 2 档T2
## 使用说明
**取值方式**
按月份匹配生效的配置:
```sql
-- 获取指定月份的档位配置
SELECT * FROM dws.cfg_performance_tier
WHERE effective_from <= '2026-01-01'
AND effective_to >= '2026-01-01'
ORDER BY min_hours;
-- 根据有效业绩小时数匹配档位
SELECT * FROM dws.cfg_performance_tier
WHERE effective_from <= '2026-01-01'
AND effective_to >= '2026-01-01'
AND min_hours <= 185 -- 有效小时数
AND (max_hours IS NULL OR max_hours > 185)
LIMIT 1;
```
**薪资计算公式**
- 基础课收入 = 基础课小时数 × (客户支付价格 - base_deduction)
- 附加课收入 = 附加课小时数 × 190 × (1 - bonus_deduction_ratio)

View File

@@ -0,0 +1,64 @@
# cfg_skill_type 技能→课程类型映射表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | cfg_skill_type |
| 主键 | skill_type_id |
| 数据来源 | 手工维护/seed脚本 |
| 说明 | 将skill_id映射到课程类型基础课/附加课避免依赖skill_name文本匹配 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | skill_type_id | SERIAL | NO | PK | 映射ID自增 |
| 2 | skill_id | BIGINT | NO | UK | 技能ID来自dwd_assistant_service_log.skill_id |
| 3 | skill_name | VARCHAR(50) | YES | | 技能名称(仅用于展示和校验) |
| 4 | course_type_code | VARCHAR(10) | NO | | 课程类型代码。**枚举值**: BASE基础课, BONUS附加课, ROOM包厢课 |
| 5 | course_type_name | VARCHAR(20) | NO | | 课程类型名称 |
| 6 | is_active | BOOLEAN | NO | | 是否启用 |
| 7 | description | TEXT | YES | | 说明 |
| 8 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 9 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |
## 技能映射示例
| skill_id | skill_name | 课程类型代码 | 课程类型名称 |
|----------|------------|--------------|--------------|
| 2790683529513797 | 基础课 | BASE | 基础课 |
| 2790683529513798 | 附加课 | BONUS | 附加课 |
| 3039912271463941 | 包厢课 | ROOM | 包厢课 |
## 使用说明
**取值方式**
```sql
-- 将服务记录分类为基础课/附加课
SELECT
asl.*,
COALESCE(st.course_type_code, 'BASE') AS course_type_code,
COALESCE(st.course_type_name, '基础课') AS course_type_name
FROM dwd.dwd_assistant_service_log asl
LEFT JOIN dws.cfg_skill_type st
ON asl.skill_id = st.skill_id
AND st.is_active = TRUE;
-- 按课程类型汇总小时数
SELECT
COALESCE(st.course_type_code, 'BASE') AS course_type,
SUM(asl.income_seconds) / 3600.0 AS total_hours
FROM dwd.dwd_assistant_service_log asl
LEFT JOIN dws.cfg_skill_type st ON asl.skill_id = st.skill_id
GROUP BY COALESCE(st.course_type_code, 'BASE');
```
**说明**
- 基础课(陪打/PD: 按等级定价客户支付98-138元/小时
- 附加课(超休/CX: 固定客户支付190元/小时
- 包厢课: 单独统计基础课口径统一按138元/小时计价)

View File

@@ -0,0 +1,98 @@
# dws_assistant_customer_stats 助教服务客户统计表
> 生成时间2026-02-03 | 更新时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_assistant_customer_stats |
| 主键 | id |
| 唯一键 | (site_id, assistant_id, member_id, stat_date) |
| 数据来源 | dwd_assistant_service_log |
| 更新频率 | 每日更新 |
| 说明 | 以"助教+客户"为粒度,统计服务关系和滚动窗口指标 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | assistant_id | BIGINT | NO | 助教ID |
| 5 | assistant_nickname | VARCHAR(50) | YES | 助教花名 |
| 6 | member_id | BIGINT | NO | 客户IDmember_id=0散客不入此表 |
| 7 | member_nickname | VARCHAR(100) | YES | 客户昵称 |
| 8 | member_mobile | VARCHAR(20) | YES | 客户手机号(脱敏) |
| 9 | stat_date | DATE | NO | 统计基准日期 |
| 10 | first_service_date | DATE | YES | 首次服务日期 |
| 11 | last_service_date | DATE | YES | 最近服务日期 |
| 12 | total_service_count | INTEGER | NO | 累计服务次数 |
| 13 | total_service_hours | NUMERIC(10,2) | NO | 累计服务小时数 |
| 14 | total_service_amount | NUMERIC(12,2) | NO | 累计服务金额 |
| 15-20 | service_count_7d/10d/15d/30d/60d/90d | INTEGER | NO | 近N天服务次数 |
| 21-26 | service_hours_7d/10d/15d/30d/60d/90d | NUMERIC(10,2) | NO | 近N天服务小时数 |
| 27-32 | service_amount_7d/10d/15d/30d/60d/90d | NUMERIC(12,2) | NO | 近N天服务金额 |
| 33 | days_since_last | INTEGER | YES | 距离最近服务的天数 |
| 34 | is_active_7d | BOOLEAN | NO | 近7天是否活跃 |
| 35 | is_active_30d | BOOLEAN | NO | 近30天是否活跃 |
| 36 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 37 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 滚动窗口计算
```sql
-- 统计每个助教-客户组合的滚动窗口指标
WITH service_data AS (
SELECT
site_id,
site_assistant_id AS assistant_id,
tenant_member_id AS member_id,
DATE(start_use_time) AS service_date,
COUNT(*) AS service_count,
SUM(income_seconds) / 3600.0 AS service_hours,
SUM(ledger_amount) AS service_amount
FROM dwd.dwd_assistant_service_log
WHERE is_delete = 0
AND tenant_member_id != 0 -- 排除散客
GROUP BY site_id, site_assistant_id, tenant_member_id, DATE(create_time)
)
SELECT
assistant_id,
member_id,
:stat_date AS stat_date,
MIN(service_date) AS first_service_date,
MAX(service_date) AS last_service_date,
SUM(service_count) AS total_service_count,
SUM(CASE WHEN service_date >= :stat_date - 6 THEN service_count ELSE 0 END) AS service_count_7d,
SUM(CASE WHEN service_date >= :stat_date - 29 THEN service_count ELSE 0 END) AS service_count_30d,
-- ... 其他窗口
FROM service_data
GROUP BY assistant_id, member_id;
```
## 使用说明
**散客处理**
- member_id=0 的散客不进入此表统计
- 仅统计有会员身份的客户
**活跃度判断**
```sql
-- 近7天活跃 = 近7天有服务记录
is_active_7d = (service_count_7d > 0)
-- 近30天活跃 = 近30天有服务记录
is_active_30d = (service_count_30d > 0)
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-21 ~ 至今 |
| 依赖表 | dwd_assistant_service_log, dim_member |
| 注意事项 | 滚动窗口需要足够的历史数据支撑 |

View File

@@ -0,0 +1,118 @@
# dws_assistant_daily_detail 助教日度业绩明细表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_assistant_daily_detail |
| 主键 | id |
| 唯一键 | (site_id, assistant_id, stat_date) |
| 数据来源 | dwd_assistant_service_log + dwd_assistant_trash_event |
| 更新频率 | 每小时增量更新 |
| 说明 | 以"助教+日期"为粒度,汇总每日业绩明细 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | assistant_id | BIGINT | NO | 助教IDdim_assistant.assistant_id |
| 5 | assistant_nickname | VARCHAR(50) | YES | 助教花名(冗余,便于查询展示) |
| 6 | stat_date | DATE | NO | 统计日期 |
| 7 | assistant_level_code | INTEGER | YES | 助教等级代码SCD2口径取stat_date当日生效的等级 |
| 8 | assistant_level_name | VARCHAR(20) | YES | 助教等级名称 |
| 9 | total_service_count | INTEGER | NO | 总服务次数 |
| 10 | base_service_count | INTEGER | NO | 基础课服务次数 |
| 11 | bonus_service_count | INTEGER | NO | 附加课服务次数 |
| 12 | room_service_count | INTEGER | NO | 包厢课服务次数 |
| 13 | total_seconds | INTEGER | NO | 总计费时长(秒) |
| 14 | base_seconds | INTEGER | NO | 基础课计费时长(秒) |
| 15 | bonus_seconds | INTEGER | NO | 附加课计费时长(秒) |
| 16 | room_seconds | INTEGER | NO | 包厢课计费时长(秒) |
| 17 | total_hours | NUMERIC(10,2) | NO | 总计费小时数 |
| 18 | base_hours | NUMERIC(10,2) | NO | 基础课小时数 |
| 19 | bonus_hours | NUMERIC(10,2) | NO | 附加课小时数 |
| 20 | room_hours | NUMERIC(10,2) | NO | 包厢课小时数 |
| 21 | total_ledger_amount | NUMERIC(12,2) | NO | 总计费金额(元) |
| 22 | base_ledger_amount | NUMERIC(12,2) | NO | 基础课计费金额 |
| 23 | bonus_ledger_amount | NUMERIC(12,2) | NO | 附加课计费金额 |
| 24 | room_ledger_amount | NUMERIC(12,2) | NO | 包厢课计费金额 |
| 25 | unique_customers | INTEGER | NO | 服务客户数(去重) |
| 26 | unique_tables | INTEGER | NO | 服务台桌数(去重) |
| 27 | trashed_seconds | INTEGER | NO | 被废除的服务时长(秒) |
| 28 | trashed_count | INTEGER | NO | 被废除的服务次数 |
| 29 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 30 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 主要来源dwd_assistant_service_log
```sql
SELECT
site_id,
DATE(start_use_time) AS stat_date,
site_assistant_id AS assistant_id,
nickname AS assistant_nickname,
COUNT(*) AS total_service_count,
SUM(income_seconds) AS total_seconds,
SUM(ledger_amount) AS total_ledger_amount,
COUNT(DISTINCT tenant_member_id) AS unique_customers,
COUNT(DISTINCT site_table_id) AS unique_tables
FROM dwd.dwd_assistant_service_log
WHERE is_delete = 0
GROUP BY site_id, DATE(start_use_time), site_assistant_id, nickname;
```
### 废除记录dwd_assistant_trash_event
```sql
SELECT
site_id,
DATE(create_time) AS stat_date,
assistant_no,
assistant_name,
SUM(charge_minutes_raw * 60) AS trashed_seconds,
COUNT(*) AS trashed_count
FROM dwd.dwd_assistant_trash_event
GROUP BY site_id, DATE(create_time), assistant_no, assistant_name;
```
## 使用说明
**时间分层查询**
```sql
-- 近2天
SELECT * FROM dws.dws_assistant_daily_detail
WHERE stat_date >= CURRENT_DATE - 1;
-- 近1月
SELECT * FROM dws.dws_assistant_daily_detail
WHERE stat_date >= CURRENT_DATE - INTERVAL '1 month';
-- 月度汇总
SELECT
assistant_id,
DATE_TRUNC('month', stat_date) AS stat_month,
SUM(total_hours) AS total_hours,
SUM(base_hours) AS base_hours,
SUM(bonus_hours) AS bonus_hours,
SUM(room_hours) AS room_hours
FROM dws.dws_assistant_daily_detail
GROUP BY assistant_id, DATE_TRUNC('month', stat_date);
```
**物化汇总层(可选)**
- L1~L4 物化视图:`mv_dws_assistant_daily_detail_l1` / `l2` / `l3` / `l4`
- 刷新任务:`DWS_MV_REFRESH_ASSISTANT_DAILY`
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-21 ~ 至今 |
| 依赖表 | dwd_assistant_service_log, dwd_assistant_trash_event, dim_assistant |

View File

@@ -0,0 +1,96 @@
# dws_assistant_finance_analysis 助教收支分析表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_assistant_finance_analysis |
| 主键 | id |
| 唯一键 | (site_id, stat_date, assistant_id) |
| 数据来源 | dwd_assistant_service_log + dws_assistant_salary_calc |
| 更新频率 | 每日更新 |
| 说明 | 以"日期+助教"为粒度,分析助教产出的收入和成本 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | stat_date | DATE | NO | 统计日期 |
| 5 | assistant_id | BIGINT | NO | 助教ID |
| 6 | assistant_nickname | VARCHAR(50) | YES | 助教花名 |
| 7 | revenue_total | NUMERIC(14,2) | NO | 助教产出收入ledger_amount汇总 |
| 8 | revenue_base | NUMERIC(14,2) | NO | 基础课收入 |
| 9 | revenue_bonus | NUMERIC(14,2) | NO | 附加课收入 |
| 10 | revenue_room | NUMERIC(14,2) | NO | 包厢课收入 |
| 11 | cost_daily | NUMERIC(14,2) | NO | 日均工资成本(月工资/工作天数) |
| 12 | gross_profit | NUMERIC(14,2) | NO | 毛利 = 收入 - 成本 |
| 13 | gross_margin | NUMERIC(5,4) | NO | 毛利率 |
| 14 | service_count | INTEGER | NO | 服务次数 |
| 15 | service_hours | NUMERIC(10,2) | NO | 服务小时数 |
| 16 | room_service_count | INTEGER | NO | 包厢课服务次数 |
| 17 | room_service_hours | NUMERIC(10,2) | NO | 包厢课服务小时数 |
| 18 | unique_customers | INTEGER | NO | 服务客户数 |
| 19 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 20 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 收入来源dwd_assistant_service_log
```sql
SELECT
DATE(start_use_time) AS stat_date,
site_assistant_id AS assistant_id,
SUM(ledger_amount) AS revenue_total,
SUM(CASE WHEN COALESCE(st.course_type_code, 'BASE') = 'BASE' THEN ledger_amount ELSE 0 END) AS revenue_base,
SUM(CASE WHEN COALESCE(st.course_type_code, 'BASE') = 'BONUS' THEN ledger_amount ELSE 0 END) AS revenue_bonus,
SUM(CASE WHEN COALESCE(st.course_type_code, 'BASE') = 'ROOM' THEN ledger_amount ELSE 0 END) AS revenue_room,
COUNT(*) AS service_count,
SUM(income_seconds) / 3600.0 AS service_hours,
COUNT(CASE WHEN COALESCE(st.course_type_code, 'BASE') = 'ROOM' THEN 1 END) AS room_service_count,
SUM(CASE WHEN COALESCE(st.course_type_code, 'BASE') = 'ROOM' THEN income_seconds ELSE 0 END) / 3600.0 AS room_service_hours,
COUNT(DISTINCT tenant_member_id) AS unique_customers
FROM dwd.dwd_assistant_service_log s
LEFT JOIN dws.cfg_skill_type st
ON st.skill_id = s.skill_id AND st.is_active = TRUE
WHERE s.is_delete = 0
GROUP BY DATE(start_use_time), site_assistant_id;
```
### 成本来源dws_assistant_salary_calc
```sql
-- 日均成本 = 月度应发工资 / 当月工作天数
SELECT
assistant_id,
salary_month,
gross_salary / NULLIF(work_days, 0) AS cost_daily
FROM dws.dws_assistant_salary_calc sc
JOIN dws.dws_assistant_monthly_summary ms
ON sc.assistant_id = ms.assistant_id AND sc.salary_month = ms.stat_month;
```
## 使用说明
**毛利计算**
```
gross_profit = revenue_total - cost_daily
gross_margin = gross_profit / NULLIF(revenue_total, 0)
```
**注意事项**
- cost_daily 基于月度工资分摊,非实际日薪
- 当月数据在月末工资计算前 cost_daily 可能不准确
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ⚠️ 部分可回溯 |
| 数据范围 | 2025-07-21 ~ 至今 |
| 依赖表 | dwd_assistant_service_log, dws_assistant_salary_calc |
| 限制 | cost_daily 依赖 salary_calc需先完成薪资计算 |

View File

@@ -0,0 +1,126 @@
# dws_assistant_monthly_summary 助教月度业绩汇总表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_assistant_monthly_summary |
| 主键 | id |
| 唯一键 | (site_id, assistant_id, stat_month) |
| 数据来源 | dws_assistant_daily_detail 聚合 + cfg_performance_tier |
| 更新频率 | 每日更新当月数据 |
| 说明 | 以"助教+月份"为粒度,汇总月度业绩及档位计算 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | assistant_id | BIGINT | NO | 助教ID |
| 5 | assistant_nickname | VARCHAR(50) | YES | 助教花名 |
| 6 | stat_month | DATE | NO | 统计月份月第一天如2026-01-01 |
| 7 | assistant_level_code | INTEGER | YES | 助教等级代码(月末时点) |
| 8 | assistant_level_name | VARCHAR(20) | YES | 助教等级名称 |
| 9 | hire_date | DATE | YES | 入职日期 |
| 10 | is_new_hire | BOOLEAN | NO | 是否新入职(入职日期 >= 月1日0点 |
| 11 | work_days | INTEGER | NO | 有服务天数 |
| 12 | total_service_count | INTEGER | NO | 总服务次数 |
| 13 | base_service_count | INTEGER | NO | 基础课服务次数 |
| 14 | bonus_service_count | INTEGER | NO | 附加课服务次数 |
| 15 | room_service_count | INTEGER | NO | 包厢课服务次数 |
| 16 | total_hours | NUMERIC(10,2) | NO | 总计费小时数 |
| 17 | base_hours | NUMERIC(10,2) | NO | 基础课小时数 |
| 18 | bonus_hours | NUMERIC(10,2) | NO | 附加课小时数 |
| 19 | room_hours | NUMERIC(10,2) | NO | 包厢课小时数 |
| 20 | effective_hours | NUMERIC(10,2) | NO | 有效业绩小时数(影响档位)= total_hours - trashed_hours |
| 21 | trashed_hours | NUMERIC(10,2) | NO | 被废除小时数 |
| 22 | total_ledger_amount | NUMERIC(12,2) | NO | 总计费金额 |
| 23 | base_ledger_amount | NUMERIC(12,2) | NO | 基础课计费金额 |
| 24 | bonus_ledger_amount | NUMERIC(12,2) | NO | 附加课计费金额 |
| 25 | room_ledger_amount | NUMERIC(12,2) | NO | 包厢课计费金额 |
| 26 | unique_customers | INTEGER | NO | 月度服务客户数(去重) |
| 27 | unique_tables | INTEGER | NO | 月度服务台桌数(去重) |
| 28 | avg_service_seconds | NUMERIC(10,2) | NO | 平均单次服务时长(秒) |
| 29 | tier_id | INTEGER | YES | 匹配的档位ID |
| 30 | tier_code | VARCHAR(20) | YES | 档位代码如T0-T4 |
| 31 | tier_name | VARCHAR(50) | YES | 档位名称 |
| 32 | rank_by_hours | INTEGER | YES | 月度排名按effective_hours降序 |
| 33 | rank_with_ties | INTEGER | YES | 考虑并列的排名 |
| 34 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 35 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 从日度明细聚合
```sql
SELECT
site_id,
tenant_id,
assistant_id,
DATE_TRUNC('month', stat_date)::DATE AS stat_month,
COUNT(DISTINCT stat_date) AS work_days,
SUM(total_service_count) AS total_service_count,
SUM(base_service_count) AS base_service_count,
SUM(bonus_service_count) AS bonus_service_count,
SUM(room_service_count) AS room_service_count,
SUM(total_hours) AS total_hours,
SUM(base_hours) AS base_hours,
SUM(bonus_hours) AS bonus_hours,
SUM(room_hours) AS room_hours,
SUM(trashed_seconds) / 3600.0 AS trashed_hours
FROM dws.dws_assistant_daily_detail
GROUP BY site_id, tenant_id, assistant_id, DATE_TRUNC('month', stat_date);
```
### 月度客户/台桌去重从DWD直接去重
```sql
SELECT
site_assistant_id AS assistant_id,
DATE_TRUNC('month', start_use_time)::DATE AS stat_month,
COUNT(DISTINCT CASE WHEN tenant_member_id > 0 THEN tenant_member_id END) AS unique_customers,
COUNT(DISTINCT site_table_id) AS unique_tables
FROM dwd.dwd_assistant_service_log
WHERE is_delete = 0
GROUP BY site_assistant_id, DATE_TRUNC('month', start_use_time);
```
### 档位匹配
```sql
-- 根据有效业绩匹配档位
SELECT * FROM dws.cfg_performance_tier
WHERE min_hours <= :effective_hours
AND (max_hours IS NULL OR max_hours > :effective_hours)
AND effective_from <= :stat_month
AND effective_to >= :stat_month
LIMIT 1;
```
## 使用说明
**新入职判断**
- 入职日期 >= 统计月1日0点 则为新入职
- 2026-03-01起新入职定档按日均×30入职日期>25日时最高2档T2
**排名计算**
```sql
-- rank_with_ties: 并列排名如2个第一则都是1下一个是3
SELECT
assistant_id,
effective_hours,
RANK() OVER (ORDER BY effective_hours DESC) AS rank_with_ties
FROM dws.dws_assistant_monthly_summary
WHERE stat_month = '2026-01-01';
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025年8月起需要完整月数据 |
| 依赖表 | dws_assistant_daily_detail, dwd_assistant_service_log, cfg_performance_tier, dim_assistant |

View File

@@ -0,0 +1,84 @@
# dws_assistant_recharge_commission 助教充值提成表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_assistant_recharge_commission |
| 主键 | id |
| 数据来源 | Excel手动导入 |
| 更新频率 | 按需导入 |
| 说明 | 以"助教+月份+充值订单"为粒度,记录充值提成 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | assistant_id | BIGINT | NO | 助教ID |
| 5 | assistant_nickname | VARCHAR(50) | YES | 助教花名 |
| 6 | commission_month | DATE | NO | 提成月份(月第一天) |
| 7 | recharge_order_id | BIGINT | YES | 充值订单ID |
| 8 | recharge_order_no | VARCHAR(50) | YES | 充值订单号 |
| 9 | recharge_amount | NUMERIC(12,2) | NO | 充值订单金额 |
| 10 | commission_amount | NUMERIC(12,2) | NO | 提成金额 |
| 11 | commission_ratio | NUMERIC(5,4) | YES | 提成比例 |
| 12 | import_batch_no | VARCHAR(50) | YES | 导入批次号 |
| 13 | import_file_name | VARCHAR(200) | YES | 导入文件名 |
| 14 | import_time | TIMESTAMPTZ | YES | 导入时间 |
| 15 | import_user | VARCHAR(50) | YES | 导入操作人 |
| 16 | remark | TEXT | YES | 备注 |
| 17 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 18 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## Excel导入模板
| 月份 | 助教号 | 助教花名 | 充值订单金额 | 提成金额 | 备注 |
|------|--------|----------|--------------|----------|------|
| 2026-01 | 1 | 小燕 | 5000.00 | 300.00 | ge |
| 2026-01 | 2 | 小明 | 3000.00 | 180.00 | 续充 |
### 导入规则
- **月份**: 必填,格式 2026-01 或 2026/01/01
- **助教号**: 必填,数字(如 1, 2, 31
- **助教花名**: 必填,与助教号组合确定唯一助教
- **充值订单金额**: 选填,单位:元
- **提成金额**: 必填,单位:元
- **备注**: 选填
### 助教匹配逻辑
```sql
-- 通过 assistant_no + nickname 查找 assistant_id
SELECT assistant_id
FROM dwd.dim_assistant
WHERE assistant_no = :assistant_no
AND nickname = :nickname
AND scd2_is_current = 1;
```
## 使用说明
**汇总到薪资计算**
```sql
-- 获取助教某月的充值提成总额
SELECT
assistant_id,
commission_month,
SUM(commission_amount) AS total_commission
FROM dws.dws_assistant_recharge_commission
WHERE commission_month = '2026-01-01'
GROUP BY assistant_id, commission_month;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ❌ 不可自动回溯 |
| 原因 | 数据来源为Excel手工导入DWD层无此数据 |
| 处理 | 需要人工补录历史数据 |

View File

@@ -0,0 +1,101 @@
# dws_assistant_salary_calc 助教工资计算详情表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_assistant_salary_calc |
| 主键 | id |
| 唯一键 | (site_id, assistant_id, salary_month) |
| 数据来源 | dws_assistant_monthly_summary + cfg_* 配置表 |
| 更新频率 | 月初计算上月工资 |
| 说明 | 以"助教+月份"为粒度,计算月度工资明细 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | assistant_id | BIGINT | NO | 助教ID |
| 5 | assistant_nickname | VARCHAR(50) | YES | 助教花名 |
| 6 | salary_month | DATE | NO | 工资月份(月第一天) |
| 7 | assistant_level_code | INTEGER | YES | 助教等级代码 |
| 8 | assistant_level_name | VARCHAR(20) | YES | 助教等级名称 |
| 9 | hire_date | DATE | YES | 入职日期 |
| 10 | is_new_hire | BOOLEAN | NO | 是否新入职 |
| 11 | effective_hours | NUMERIC(10,2) | NO | 有效业绩小时数 |
| 12 | base_hours | NUMERIC(10,2) | NO | 基础课小时数 |
| 13 | bonus_hours | NUMERIC(10,2) | NO | 附加课小时数 |
| 14 | room_hours | NUMERIC(10,2) | NO | 包厢课小时数 |
| 15 | tier_id | INTEGER | YES | 档位ID |
| 16 | tier_code | VARCHAR(20) | YES | 档位代码 |
| 17 | tier_name | VARCHAR(50) | YES | 档位名称 |
| 18 | rank_with_ties | INTEGER | YES | 月度排名(考虑并列) |
| 19 | base_course_price | NUMERIC(10,2) | NO | 基础课客户支付价格 |
| 20 | bonus_course_price | NUMERIC(10,2) | NO | 附加课客户支付价格固定190 |
| 21 | base_deduction | NUMERIC(10,2) | NO | 专业课抽成(元/小时) |
| 22 | bonus_deduction_ratio | NUMERIC(5,4) | NO | 打赏课抽成比例 |
| 23 | base_income | NUMERIC(12,2) | NO | 基础课收入 |
| 24 | bonus_income | NUMERIC(12,2) | NO | 附加课收入 |
| 25 | room_income | NUMERIC(12,2) | NO | 包厢课收入(按基础课口径) |
| 26 | total_course_income | NUMERIC(12,2) | NO | 课时收入合计 |
| 27 | sprint_bonus | NUMERIC(12,2) | NO | 冲刺奖金(历史/按规则配置) |
| 28 | top_rank_bonus | NUMERIC(12,2) | NO | Top3排名奖金 |
| 29 | recharge_commission | NUMERIC(12,2) | NO | 充值提成 |
| 30 | other_bonus | NUMERIC(12,2) | NO | 其他奖金 |
| 31 | total_bonus | NUMERIC(12,2) | NO | 奖金合计 |
| 32 | gross_salary | NUMERIC(12,2) | NO | 应发工资 |
| 33 | vacation_days | INTEGER | NO | 次月可休假天数 |
| 34 | vacation_unlimited | BOOLEAN | NO | 休假自由标记 |
| 35 | calc_notes | TEXT | YES | 计算备注 |
| 36 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 37 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 工资计算公式
### 课时收入
```
基础课收入 = base_hours × (base_course_price - base_deduction)
附加课收入 = bonus_hours × 190 × (1 - bonus_deduction_ratio)
包厢课收入 = room_hours × (138 - base_deduction) -- 包厢课统一138元/小时
课时收入合计 = 基础课收入 + 附加课收入 + 包厢课收入
```
### 奖金
```
Top3奖金: 1st=1000元, 2nd=600元, 3rd=400元2026-03-01起
充值提成: 来自dws_assistant_recharge_commission
```
### 应发工资
```
gross_salary = total_course_income + total_bonus
```
## 计算示例
| 项目 | 数值 | 计算过程 |
|------|------|----------|
| 基础课小时数 | 170 | 来自monthly_summary |
| 附加课小时数 | 15 | 来自monthly_summary |
| 包厢课小时数 | 0 | 来自monthly_summary |
| 等级 | 中级(20) | base_course_price=108 |
| 档位 | T3 | base_deduction=10, bonus_ratio=0.30 |
| 基础课收入 | 16,660 | 170 × (108-10) |
| 附加课收入 | 1,995 | 15 × 190 × 0.70 |
| Top3奖金 | 0 | 未进入Top3 |
| 应发工资 | 18,655 | 16,660 + 1,995 + 0 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ⚠️ 部分可回溯 |
| 数据范围 | 2025年8月起 |
| 依赖表 | dws_assistant_monthly_summary, cfg_*, dws_assistant_recharge_commission |
| 限制 | 充值提成需手工导入历史数据 |

View File

@@ -0,0 +1,157 @@
# dws_finance_daily_summary 财务日度汇总表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_finance_daily_summary |
| 主键 | id |
| 唯一键 | (site_id, stat_date) |
| 数据来源 | dwd_settlement_head + 多个DWD事实表 |
| 更新频率 | 每小时更新当日数据 |
| 说明 | 以"日期"为粒度,汇总当日财务数据 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | stat_date | DATE | NO | 统计日期 |
| 5 | gross_amount | NUMERIC(14,2) | NO | 发生额合计 |
| 6 | table_fee_amount | NUMERIC(14,2) | NO | 台费正价 |
| 7 | goods_amount | NUMERIC(14,2) | NO | 商品正价 |
| 8 | assistant_pd_amount | NUMERIC(14,2) | NO | 助教基础课正价(陪打) |
| 9 | assistant_cx_amount | NUMERIC(14,2) | NO | 助教激励课正价(超休) |
| 10 | discount_total | NUMERIC(14,2) | NO | 优惠合计 |
| 11 | discount_groupbuy | NUMERIC(14,2) | NO | 团购优惠 |
| 12 | discount_vip | NUMERIC(14,2) | NO | 会员折扣 |
| 13 | discount_gift_card | NUMERIC(14,2) | NO | 赠送卡抵扣(余额变动) |
| 14 | discount_manual | NUMERIC(14,2) | NO | 手动调整 |
| 15 | discount_rounding | NUMERIC(14,2) | NO | 抹零 |
| 16 | discount_other | NUMERIC(14,2) | NO | 其他优惠 |
| 17 | confirmed_income | NUMERIC(14,2) | NO | 确认收入 = 发生额 - 优惠 |
| 18 | cash_inflow_total | NUMERIC(14,2) | NO | 现金流入合计 |
| 19 | cash_pay_amount | NUMERIC(14,2) | NO | 收银实付 |
| 20 | groupbuy_pay_amount | NUMERIC(14,2) | NO | 团购支付金额 |
| 21 | platform_settlement_amount | NUMERIC(14,2) | NO | 平台回款金额(导入) |
| 22 | platform_fee_amount | NUMERIC(14,2) | NO | 平台佣金+服务费(导入) |
| 23 | recharge_cash_inflow | NUMERIC(14,2) | NO | 充值现金流入 |
| 24 | card_consume_total | NUMERIC(14,2) | NO | 卡消费合计 |
| 25 | cash_card_consume | NUMERIC(14,2) | NO | 储值卡消费 |
| 26 | gift_card_consume | NUMERIC(14,2) | NO | 赠送卡消费 |
| 27 | cash_outflow_total | NUMERIC(14,2) | NO | 现金流出合计 |
| 28 | cash_balance_change | NUMERIC(14,2) | NO | 现金余额变动 |
| 29 | recharge_count | INTEGER | NO | 充值笔数 |
| 30 | recharge_total | NUMERIC(14,2) | NO | 充值总额(含赠送) |
| 31 | recharge_cash | NUMERIC(14,2) | NO | 充值现金部分 |
| 32 | recharge_gift | NUMERIC(14,2) | NO | 充值赠送部分 |
| 33 | first_recharge_count | INTEGER | NO | 首充笔数 |
| 34 | first_recharge_amount | NUMERIC(14,2) | NO | 首充金额 |
| 35 | renewal_count | INTEGER | NO | 续充笔数 |
| 36 | renewal_amount | NUMERIC(14,2) | NO | 续充金额 |
| 37 | order_count | INTEGER | NO | 结账单数 |
| 38 | member_order_count | INTEGER | NO | 会员订单数 |
| 39 | guest_order_count | INTEGER | NO | 散客订单数 |
| 40 | avg_order_amount | NUMERIC(12,2) | NO | 平均客单价 |
| 41 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 42 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 结账汇总dwd_settlement_head
```sql
SELECT
DATE(pay_time) AS stat_date,
COUNT(*) AS order_count,
SUM(table_charge_money) AS table_fee_amount,
SUM(goods_money) AS goods_amount,
SUM(assistant_pd_money) AS assistant_pd_amount,
SUM(assistant_cx_money) AS assistant_cx_amount,
SUM(pay_amount) AS cash_pay_amount,
SUM(balance_amount) AS balance_pay_amount,
SUM(recharge_card_amount) AS card_pay_amount,
SUM(coupon_amount) AS coupon_amount,
SUM(member_discount_amount) AS member_discount_amount,
SUM(adjust_amount) AS adjust_amount,
SUM(rounding_amount) AS rounding_amount,
SUM(pl_coupon_sale_amount) AS pl_coupon_sale_amount
FROM dwd.dwd_settlement_head
WHERE site_id = :site_id
GROUP BY DATE(pay_time);
```
### 团购核销dwd_groupbuy_redemption按结账日对齐
```sql
SELECT
sh.pay_time::DATE AS stat_date,
COUNT(CASE WHEN sh.coupon_amount > 0 THEN 1 END) AS groupbuy_count,
SUM(
CASE
WHEN sh.coupon_amount > 0 THEN
CASE
WHEN sh.pl_coupon_sale_amount > 0 THEN sh.pl_coupon_sale_amount
ELSE COALESCE(gr.ledger_unit_price, 0)
END
ELSE 0
END
) AS groupbuy_pay_total
FROM dwd.dwd_settlement_head sh
LEFT JOIN dwd.dwd_groupbuy_redemption gr
ON gr.order_settle_id = sh.order_settle_id
WHERE sh.site_id = :site_id
GROUP BY sh.pay_time::DATE;
```
### 充值订单dwd_recharge_order
```sql
SELECT
DATE(pay_time) AS stat_date,
COUNT(*) AS recharge_count,
SUM(pay_amount) AS recharge_cash,
SUM(point_amount) AS recharge_gift,
SUM(CASE WHEN is_first = 1 THEN 1 ELSE 0 END) AS first_recharge_count
FROM dwd.dwd_recharge_order
GROUP BY DATE(pay_time);
```
### 赠送卡消费dwd_member_balance_change按余额变动
```sql
SELECT
change_time::DATE AS stat_date,
SUM(ABS(change_amount)) AS gift_card_consume
FROM dwd.dwd_member_balance_change
WHERE site_id = :site_id
AND from_type = 1
AND change_amount < 0
AND COALESCE(is_delete, 0) = 0
AND card_type_id IN (:gift_card_type_ids)
GROUP BY change_time::DATE;
```
## 使用说明
**计算公式**
```
gross_amount = table_fee_amount + goods_amount + assistant_pd_amount + assistant_cx_amount
discount_total = discount_groupbuy + discount_vip + discount_gift_card + discount_manual + discount_rounding + discount_other
confirmed_income = gross_amount - discount_total
cash_inflow_total = cash_pay_amount + groupbuy_pay_amount + platform_settlement_amount + recharge_cash_inflow
```
**物化汇总层(可选)**
- L1~L4 物化视图:`mv_dws_finance_daily_summary_l1` / `l2` / `l3` / `l4`
- 刷新任务:`DWS_MV_REFRESH_FINANCE_DAILY`
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-16 ~ 至今 |
| 依赖表 | dwd_settlement_head, dwd_groupbuy_redemption, dwd_recharge_order, dwd_member_balance_change, dws_finance_expense_summary, dws_platform_settlement |
| 注意 | platform_settlement需Excel导入 |

View File

@@ -0,0 +1,98 @@
# dws_finance_discount_detail 优惠明细表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_finance_discount_detail |
| 主键 | id |
| 唯一键 | (site_id, stat_date, discount_type_code) |
| 数据来源 | dwd_settlement_head + dwd_groupbuy_redemption + dwd_member_balance_change |
| 更新频率 | 每日更新 |
| 说明 | 以"日期+优惠类型"为粒度,分析优惠构成 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | stat_date | DATE | NO | 统计日期 |
| 5 | discount_type_code | VARCHAR(30) | NO | 优惠类型代码 |
| 6 | discount_type_name | VARCHAR(50) | NO | 优惠类型名称 |
| 7 | discount_amount | NUMERIC(14,2) | NO | 优惠金额 |
| 8 | discount_ratio | NUMERIC(5,4) | NO | 优惠占比(占总优惠) |
| 9 | usage_count | INTEGER | NO | 使用次数 |
| 10 | affected_orders | INTEGER | NO | 影响订单数 |
| 11 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 12 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 优惠类型说明
| discount_type_code | discount_type_name | 数据来源 |
|--------------------|--------------------|----------|
| GROUPBUY | 团购优惠 | dwd_settlement_head.coupon_amount - 团购实付 |
| VIP | 会员折扣 | dwd_settlement_head.member_discount_amount |
| GIFT_CARD_TABLE | 台费卡抵扣 | dwd_member_balance_change |
| GIFT_CARD_DRINK | 酒水卡抵扣 | dwd_member_balance_change |
| GIFT_CARD_COUPON | 活动抵用券抵扣 | dwd_member_balance_change |
| MANUAL | 手动调整 | dwd_settlement_head.adjust_amount |
| ROUNDING | 抹零 | dwd_settlement_head.rounding_amount |
| BIG_CUSTOMER | 大客户优惠 | dwd_settlement_head特定会员优惠 |
| OTHER | 其他优惠 | 其他无法归类的优惠 |
## 数据来源
```sql
-- 从结账头表提取优惠汇总
SELECT
pay_time::DATE AS stat_date,
COALESCE(SUM(coupon_amount), 0) AS coupon_amount_total,
COALESCE(SUM(pl_coupon_sale_amount), 0) AS pl_coupon_sale_total,
COUNT(CASE WHEN coupon_amount > 0 THEN 1 END) AS coupon_order_count,
COALESCE(SUM(adjust_amount), 0) AS adjust_amount_total,
COUNT(CASE WHEN adjust_amount != 0 THEN 1 END) AS adjust_order_count,
COALESCE(SUM(member_discount_amount), 0) AS member_discount_total,
COUNT(CASE WHEN member_discount_amount > 0 THEN 1 END) AS member_discount_order_count,
COALESCE(SUM(rounding_amount), 0) AS rounding_amount_total,
COUNT(CASE WHEN rounding_amount != 0 THEN 1 END) AS rounding_order_count
FROM dwd.dwd_settlement_head
WHERE site_id = :site_id
AND settle_status = 1
GROUP BY pay_time::DATE;
```
```sql
-- 赠送卡消费(按卡类型拆分)
SELECT
change_time::DATE AS stat_date,
card_type_id,
COUNT(*) AS consume_count,
SUM(ABS(change_amount)) AS consume_amount
FROM dwd.dwd_member_balance_change
WHERE site_id = :site_id
AND from_type = 1
AND change_amount < 0
AND COALESCE(is_delete, 0) = 0
AND card_type_id IN (:gift_card_type_ids)
GROUP BY change_time::DATE, card_type_id;
```
## 使用说明
**占比计算**
```sql
discount_ratio = discount_amount / SUM(discount_amount) OVER (PARTITION BY stat_date)
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-16 ~ 至今 |
| 依赖表 | dwd_settlement_head, dwd_groupbuy_redemption, dwd_member_balance_change |

View File

@@ -0,0 +1,87 @@
# dws_finance_expense_summary 支出结构表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_finance_expense_summary |
| 主键 | id |
| 唯一键 | (site_id, expense_month, expense_type_code, import_batch_no) |
| 数据来源 | Excel手动导入 |
| 更新频率 | 按需导入 |
| 说明 | 以"月份+支出类型"为粒度,记录支出数据 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | expense_month | DATE | NO | 支出月份(月第一天) |
| 5 | expense_type_code | VARCHAR(30) | NO | 支出类型代码 |
| 6 | expense_type_name | VARCHAR(50) | NO | 支出类型名称 |
| 7 | expense_category | VARCHAR(20) | YES | 支出大类 |
| 8 | expense_amount | NUMERIC(14,2) | NO | 支出金额 |
| 9 | expense_detail | TEXT | YES | 支出明细说明 |
| 10 | import_batch_no | VARCHAR(50) | YES | 导入批次号 |
| 11 | import_file_name | VARCHAR(200) | YES | 导入文件名 |
| 12 | import_time | TIMESTAMPTZ | YES | 导入时间 |
| 13 | import_user | VARCHAR(50) | YES | 导入操作人 |
| 14 | remark | TEXT | YES | 备注 |
| 15 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 16 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 支出类型说明
| expense_type_code | expense_type_name | expense_category |
|-------------------|-------------------|------------------|
| RENT | 房租 | FIXED_COST |
| UTILITY | 水电费 | FIXED_COST |
| PROPERTY | 物业费 | FIXED_COST |
| SALARY | 工资 | VARIABLE_COST |
| REIMBURSE | 报销 | VARIABLE_COST |
| PLATFORM_FEE | 平台费用 | VARIABLE_COST |
| MAINTENANCE | 维修保养 | VARIABLE_COST |
| CONSUMABLES | 耗材 | VARIABLE_COST |
| MARKETING | 营销费用 | VARIABLE_COST |
| OTHER | 其他 | OTHER |
## Excel导入模板
| 月份 | 支出类型 | 支出金额 | 明细说明 | 备注 |
|------|----------|----------|----------|------|
| 2026-01 | 房租 | 50000.00 | 1月房租 | |
| 2026-01 | 水电费 | 8000.00 | 1月水电 | |
| 2026-01 | 工资 | 120000.00 | 员工工资 | |
### 导入规则
- **月份**: 必填,格式 2026-01 或 2026/01/01
- **支出类型**: 必填,需匹配支出类型名称
- **支出金额**: 必填,单位:元
- **明细说明**: 选填
- **备注**: 选填
## 使用说明
**月度支出汇总**
```sql
SELECT
expense_month,
expense_category,
SUM(expense_amount) AS total_expense
FROM dws.dws_finance_expense_summary
GROUP BY expense_month, expense_category
ORDER BY expense_month, expense_category;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ❌ 不可自动回溯 |
| 原因 | 数据来源为Excel手工导入DWD层无此数据 |
| 处理 | 需要人工补录历史数据 |

View File

@@ -0,0 +1,88 @@
# dws_finance_income_structure 收入结构分析表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_finance_income_structure |
| 主键 | id |
| 唯一键 | (site_id, stat_date, structure_type, category_code) |
| 数据来源 | dwd_table_fee_log + dwd_assistant_service_log + cfg_area_category |
| 更新频率 | 每日更新 |
| 说明 | 以"日期+区域/类型"为粒度,分析收入结构 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | stat_date | DATE | NO | 统计日期 |
| 5 | structure_type | VARCHAR(20) | NO | 结构类型。**枚举值**: AREA区域, INCOME_TYPE收入类型 |
| 6 | category_code | VARCHAR(30) | NO | 分类代码 |
| 7 | category_name | VARCHAR(50) | NO | 分类名称 |
| 8 | income_amount | NUMERIC(14,2) | NO | 收入金额 |
| 9 | income_ratio | NUMERIC(5,4) | NO | 收入占比 |
| 10 | order_count | INTEGER | NO | 订单数 |
| 11 | duration_minutes | INTEGER | NO | 时长(分钟) |
| 12 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 13 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 分类代码说明
### 按区域分析 (structure_type = 'AREA')
| category_code | category_name | 来源 |
|---------------|---------------|------|
| BILLIARD | 台球散台 | A区/B区/C区/TV台 |
| BILLIARD_VIP | 台球VIP | VIP包厢 |
| SNOOKER | 斯诺克 | 斯诺克区 |
| MAHJONG | 麻将棋牌 | 麻将房/M7/M8/666/发财 |
| KTV | K歌娱乐 | K包/k包活动区/幸会158 |
| SPECIAL | 补时长 | 补时长 |
| OTHER | 其他 | 未映射区域 |
### 按收入类型分析 (structure_type = 'INCOME_TYPE')
| category_code | category_name |
|---------------|---------------|
| TABLE_FEE | 台费收入 |
| GOODS | 商品收入 |
| ASSISTANT_BASE | 助教基础课收入 |
| ASSISTANT_BONUS | 助教附加课收入 |
## 数据来源
### 按区域汇总台费
```sql
SELECT
DATE(tfl.ledger_end_time) AS stat_date,
COALESCE(ac.category_code, 'OTHER') AS category_code,
COALESCE(ac.category_name, '其他') AS category_name,
SUM(tfl.ledger_amount) AS income_amount,
SUM(tfl.ledger_count) AS duration_seconds,
COUNT(DISTINCT tfl.order_settle_id) AS order_count
FROM dwd.dwd_table_fee_log tfl
LEFT JOIN dwd.dim_table dt ON dt.table_id = tfl.site_table_id
LEFT JOIN dws.cfg_area_category ac ON dt.site_table_area_name = ac.source_area_name
WHERE tfl.is_delete = 0
GROUP BY DATE(tfl.ledger_end_time), COALESCE(ac.category_code, 'OTHER'), COALESCE(ac.category_name, '其他');
```
## 使用说明
**占比计算**
```sql
-- income_ratio = 当前分类收入 / 当日总收入
income_ratio = income_amount / SUM(income_amount) OVER (PARTITION BY stat_date, structure_type)
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-21 ~ 至今 |
| 依赖表 | dwd_table_fee_log, dwd_assistant_service_log, dim_table, cfg_area_category |

View File

@@ -0,0 +1,97 @@
# dws_finance_recharge_summary 充值统计表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_finance_recharge_summary |
| 主键 | id |
| 唯一键 | (site_id, stat_date) |
| 数据来源 | dwd_recharge_order |
| 更新频率 | 每日更新 |
| 说明 | 以"日期"为粒度,统计充值数据,区分首充/续充 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | stat_date | DATE | NO | 统计日期 |
| 5 | recharge_count | INTEGER | NO | 充值笔数 |
| 6 | recharge_total | NUMERIC(14,2) | NO | 充值总额(含赠送) |
| 7 | recharge_cash | NUMERIC(14,2) | NO | 现金充值金额 |
| 8 | recharge_gift | NUMERIC(14,2) | NO | 赠送金额 |
| 9 | first_recharge_count | INTEGER | NO | 首充笔数 |
| 10 | first_recharge_cash | NUMERIC(14,2) | NO | 首充现金 |
| 11 | first_recharge_gift | NUMERIC(14,2) | NO | 首充赠送 |
| 12 | first_recharge_total | NUMERIC(14,2) | NO | 首充总额 |
| 13 | renewal_count | INTEGER | NO | 续充笔数 |
| 14 | renewal_cash | NUMERIC(14,2) | NO | 续充现金 |
| 15 | renewal_gift | NUMERIC(14,2) | NO | 续充赠送 |
| 16 | renewal_total | NUMERIC(14,2) | NO | 续充总额 |
| 17 | recharge_member_count | INTEGER | NO | 充值会员数(去重) |
| 18 | new_member_count | INTEGER | NO | 新增会员数 |
| 19 | total_card_balance | NUMERIC(14,2) | NO | 全部会员卡余额(当日末) |
| 20 | cash_card_balance | NUMERIC(14,2) | NO | 储值卡余额 |
| 21 | gift_card_balance | NUMERIC(14,2) | NO | 赠送卡余额 |
| 22 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 23 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 充值订单dwd_recharge_order
```sql
SELECT
DATE(pay_time) AS stat_date,
COUNT(*) AS recharge_count,
SUM(pay_money + gift_money) AS recharge_total,
SUM(pay_money) AS recharge_cash,
SUM(gift_money) AS recharge_gift,
-- 首充
SUM(CASE WHEN is_first = 1 THEN 1 ELSE 0 END) AS first_recharge_count,
SUM(CASE WHEN is_first = 1 THEN pay_money ELSE 0 END) AS first_recharge_cash,
SUM(CASE WHEN is_first = 1 THEN gift_money ELSE 0 END) AS first_recharge_gift,
-- 续充
SUM(CASE WHEN is_first != 1 OR is_first IS NULL THEN 1 ELSE 0 END) AS renewal_count,
SUM(CASE WHEN is_first != 1 OR is_first IS NULL THEN pay_money ELSE 0 END) AS renewal_cash,
-- 会员数
COUNT(DISTINCT member_id) AS recharge_member_count
FROM dwd.dwd_recharge_order
GROUP BY DATE(pay_time);
```
### 卡余额快照dim_member_card_account
```sql
SELECT
SUM(balance) AS total_card_balance,
SUM(CASE WHEN card_type_id = 2793249295533893 THEN balance ELSE 0 END) AS cash_card_balance,
SUM(CASE WHEN card_type_id != 2793249295533893 THEN balance ELSE 0 END) AS gift_card_balance
FROM dwd.dim_member_card_account
WHERE scd2_is_current = 1;
```
## 使用说明
**首充判断**
- is_first = 1: 首充
- is_first = 0: 续充
**储值卡ID**
- 储值卡 card_type_id = 2793249295533893
**赠送卡ID**
- 台费卡 2791990152417157
- 酒水卡 2794699703437125
- 活动抵用券 2793266846533445
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-21 ~ 至今 |
| 依赖表 | dwd_recharge_order, dim_member_card_account |

View File

@@ -0,0 +1,51 @@
# dws_index_percentile_history 指数分位历史表
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_index_percentile_history |
| 主键 | history_id |
| 唯一键 | (site_id, index_type, calc_time) |
| 数据来源 | 指数计算任务自动写入 |
| 更新频率 | 每次指数计算时追加 |
| 说明 | 记录每次指数计算的分位锚点,用于 EWMA 平滑和展示分映射 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | history_id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | index_type | VARCHAR | NO | 指数类型WBI/NCI/RS/MS/ML |
| 4 | calc_time | TIMESTAMPTZ | NO | 计算时间 |
| 5 | percentile_5 | NUMERIC | YES | 原始 P5 分位值 |
| 6 | percentile_95 | NUMERIC | YES | 原始 P95 分位值 |
| 7 | percentile_5_smoothed | NUMERIC | YES | EWMA 平滑后 P5 |
| 8 | percentile_95_smoothed | NUMERIC | YES | EWMA 平滑后 P95 |
| 9 | record_count | INTEGER | YES | 参与计算的记录数 |
| 10 | min_raw_score | NUMERIC | YES | 原始分最小值 |
| 11 | max_raw_score | NUMERIC | YES | 原始分最大值 |
| 12 | avg_raw_score | NUMERIC | YES | 原始分平均值 |
| 13 | created_at | TIMESTAMPTZ | NO | 创建时间 |
## 业务口径
- 每次指数计算时,先从本表取上一次的 smoothed 值作为 EWMA 基准
- 新 smoothed = alpha × 本次原始分位 + (1 - alpha) × 上次 smoothed
- RS/MS/ML 展示分均走分位映射OS 不走分位映射
- 分位历史按 `index_type` 隔离,各指数独立维护
## 使用说明
```sql
-- 查询 RS 指数最近一次分位锚点
SELECT *
FROM dws.dws_index_percentile_history
WHERE index_type = 'RS'
ORDER BY calc_time DESC
LIMIT 1;
```

View File

@@ -0,0 +1,66 @@
# dws_member_assistant_intimacy 客户-助教亲密度指数表WBI
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_member_assistant_intimacy |
| 主键 | intimacy_id |
| 唯一键 | (site_id, member_id, assistant_id) |
| 数据来源 | dwd_assistant_service_log |
| 更新频率 | 建议每4小时 |
| 说明 | WBI 亲密度指数,衡量客户与助教之间的服务关系紧密程度 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | intimacy_id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | member_id | BIGINT | NO | 会员ID |
| 5 | assistant_id | BIGINT | NO | 助教ID |
| 6 | session_count | INTEGER | NO | 总服务次数 |
| 7 | total_duration_minutes | INTEGER | NO | 总服务时长(分钟) |
| 8 | basic_session_count | INTEGER | NO | 基础课服务次数 |
| 9 | incentive_session_count | INTEGER | NO | 附加课服务次数 |
| 10 | days_since_last_session | INTEGER | YES | 距最近服务天数 |
| 11 | attributed_recharge_count | INTEGER | NO | 归因充值次数 |
| 12 | attributed_recharge_amount | NUMERIC | NO | 归因充值金额 |
| 13 | score_frequency | NUMERIC | YES | 频率维度得分 |
| 14 | score_recency | NUMERIC | YES | 近期维度得分 |
| 15 | score_recharge | NUMERIC | YES | 充值维度得分 |
| 16 | score_duration | NUMERIC | YES | 时长维度得分 |
| 17 | burst_multiplier | NUMERIC | YES | 爆发乘数(短期高频加成) |
| 18 | raw_score | NUMERIC | YES | 原始分 |
| 19 | display_score | NUMERIC | YES | 展示分(分位映射后) |
| 20 | calc_time | TIMESTAMPTZ | NO | 计算时间 |
| 21 | calc_version | INTEGER | NO | 计算版本号 |
| 22 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 23 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 业务口径
- WBI = f(频率, 近期, 充值, 时长) × 爆发乘数
- 展示分走分位映射P5~P95 截断后线性映射到 0~100
- 同 site_id 删除后重写(覆盖写入)
## 使用说明
```sql
-- 查询某助教的客户亲密度排行
SELECT member_id, display_score, session_count
FROM dws.dws_member_assistant_intimacy
WHERE site_id = :site_id AND assistant_id = :assistant_id
ORDER BY display_score DESC;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅(按批次重算覆盖) |
| 依赖参数 | cfg_index_parametersWBI |

View File

@@ -0,0 +1,64 @@
# dws_member_assistant_relation_index 客户-助教关系指数表
> 生成时间2026-02-08 | 更新时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_member_assistant_relation_index |
| 主键 | relation_id |
| 唯一键 | (site_id, member_id, assistant_id) |
| 数据来源 | dwd_assistant_service_log、dws_ml_manual_order_alloc |
| 更新频率 | 建议每4小时 |
| 说明 | 单任务产出 RS/OS/MS/ML 四类关系指标 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | relation_id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | member_id | BIGINT | NO | 会员ID |
| 5 | assistant_id | BIGINT | NO | 助教ID |
| 6 | session_count | INTEGER | NO | 总服务次数 |
| 7 | total_duration_minutes | INTEGER | NO | 总服务时长(分钟) |
| 8 | basic_session_count | INTEGER | NO | 基础课服务次数 |
| 9 | incentive_session_count | INTEGER | NO | 附加课服务次数 |
| 10 | days_since_last_session | INTEGER | YES | 距最近服务天数 |
| 11 | rs_f | NUMERIC | NO | RS 频率分量 |
| 12 | rs_d | NUMERIC | NO | RS 时长分量 |
| 13 | rs_r | NUMERIC | NO | RS 近期分量 |
| 14 | rs_raw | NUMERIC | NO | RS 原始分(关系强度/熟悉度) |
| 15 | rs_display | NUMERIC | NO | RS 展示分(分位映射后) |
| 16 | os_share | NUMERIC | NO | OS 归属份额0~1 |
| 17 | os_label | VARCHAR | NO | OS 归属标签UNASSIGNED/MAIN/COMANAGE/POOL |
| 18 | os_rank | INTEGER | YES | OS 同 member 下归属排序 |
| 19 | ms_f_short | NUMERIC | NO | MS 短期频率分量 |
| 20 | ms_f_long | NUMERIC | NO | MS 长期频率分量 |
| 21 | ms_raw | NUMERIC | NO | MS 原始分(升温动量) |
| 22 | ms_display | NUMERIC | NO | MS 展示分(分位映射后) |
| 23 | ml_order_count | INTEGER | NO | ML 台账归因订单数 |
| 24 | ml_allocated_amount | NUMERIC | NO | ML 台账分摊金额 |
| 25 | ml_raw | NUMERIC | NO | ML 原始分(付费关联) |
| 26 | ml_display | NUMERIC | NO | ML 展示分(分位映射后) |
| 27 | calc_time | TIMESTAMPTZ | NO | 计算时间 |
| 28 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 29 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 业务口径
1. ML 唯一真源为 `dws_ml_manual_order_alloc`,无台账时 `ml_raw=0`
2. `dwd_recharge_order` 的 last-touch 仅保留备用路径(默认关闭)。
3. `RS/MS/ML` 展示分均走分位映射,且分位历史按 `index_type` 隔离。
4. OS 不走分位映射,直接输出 `os_share + os_label + os_rank`
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅(按批次重算覆盖) |
| 覆盖写入 | 同 site_id 删除后重写 |
| 依赖参数 | cfg_index_parametersRS/OS/MS/ML |

View File

@@ -0,0 +1,102 @@
# dws_member_consumption_summary 会员消费汇总表
> 生成时间2026-02-03 | 更新时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_member_consumption_summary |
| 主键 | id |
| 唯一键 | (site_id, member_id, stat_date) |
| 数据来源 | dwd_settlement_head + 关联明细表 |
| 更新频率 | 每日更新 |
| 说明 | 以"会员"为粒度,统计消费行为和滚动窗口指标 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | member_id | BIGINT | NO | 会员IDmember_id=0散客不入此表 |
| 5 | stat_date | DATE | NO | 统计基准日期 |
| 6 | member_nickname | VARCHAR(100) | YES | 会员昵称 |
| 7 | member_mobile | VARCHAR(20) | YES | 手机号(脱敏) |
| 8 | card_grade_name | VARCHAR(50) | YES | 卡等级名称 |
| 9 | register_date | DATE | YES | 注册日期 |
| 10 | first_consume_date | DATE | YES | 首次消费日期 |
| 11 | last_consume_date | DATE | YES | 最近消费日期 |
| 12 | total_visit_count | INTEGER | NO | 累计到店次数 |
| 13 | total_consume_amount | NUMERIC(14,2) | NO | 累计消费金额 |
| 14 | total_recharge_amount | NUMERIC(14,2) | NO | 累计充值金额 |
| 15 | total_table_fee | NUMERIC(14,2) | NO | 累计台费 |
| 16 | total_goods_amount | NUMERIC(14,2) | NO | 累计商品消费 |
| 17 | total_assistant_amount | NUMERIC(14,2) | NO | 累计助教服务消费 |
| 18-23 | visit_count_7d/10d/15d/30d/60d/90d | INTEGER | NO | 近N天到店次数 |
| 24-29 | consume_amount_7d/10d/15d/30d/60d/90d | NUMERIC(14,2) | NO | 近N天消费金额 |
| 30 | cash_card_balance | NUMERIC(14,2) | NO | 储值卡余额 |
| 31 | gift_card_balance | NUMERIC(14,2) | NO | 赠送卡余额 |
| 32 | total_card_balance | NUMERIC(14,2) | NO | 总卡余额 |
| 33 | days_since_last | INTEGER | YES | 距离最近消费的天数 |
| 34 | is_active_7d | BOOLEAN | NO | 近7天是否活跃 |
| 35 | is_active_30d | BOOLEAN | NO | 近30天是否活跃 |
| 36 | is_active_90d | BOOLEAN | NO | 近90天是否活跃 |
| 37 | customer_tier | VARCHAR(20) | YES | 客户分层(高价值/中等/低活跃/流失) |
| 38 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 39 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 消费统计来源dwd_settlement_head
```sql
SELECT
site_id,
member_id,
DATE(pay_time) AS consume_date,
COUNT(*) AS visit_count,
SUM(consume_money) AS consume_amount,
SUM(table_charge_money) AS table_fee,
SUM(goods_money) AS goods_amount,
SUM(assistant_pd_money + assistant_cx_money) AS assistant_amount
FROM dwd.dwd_settlement_head
WHERE member_id != 0 -- 排除散客
AND settle_type = 1 -- 已结账
GROUP BY site_id, member_id, DATE(pay_time);
```
### 卡余额来源dim_member_card_account
```sql
SELECT
tenant_member_id AS member_id,
SUM(CASE WHEN card_type_id = 2793249295533893 THEN balance ELSE 0 END) AS cash_card_balance,
SUM(CASE WHEN card_type_id != 2793249295533893 THEN balance ELSE 0 END) AS gift_card_balance
FROM dwd.dim_member_card_account
WHERE scd2_is_current = 1
GROUP BY tenant_member_id;
```
## 使用说明
**散客处理**
- member_id=0 的散客不进入此表统计
**客户分层规则**
```sql
customer_tier = CASE
WHEN consume_amount_30d >= 1000 THEN '高价值'
WHEN consume_amount_30d >= 300 THEN '中等'
WHEN is_active_30d THEN '低活跃'
ELSE '流失'
END
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-16 ~ 至今 |
| 依赖表 | dwd_settlement_head, dim_member, dim_member_card_account |

View File

@@ -0,0 +1,80 @@
# dws_member_newconv_index 新客转化指数表NCI
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_member_newconv_index |
| 主键 | newconv_id |
| 唯一键 | (site_id, member_id) |
| 数据来源 | dim_member + dwd_settlement_head + dwd_recharge_order |
| 更新频率 | 建议每2小时 |
| 说明 | NCI 新客转化指数,评估新注册会员的转化潜力和进展 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | newconv_id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | member_id | BIGINT | NO | 会员ID |
| 5 | status | VARCHAR | YES | 转化状态 |
| 6 | segment | VARCHAR | YES | 客户分群 |
| 7 | member_create_time | TIMESTAMPTZ | YES | 会员注册时间 |
| 8 | first_visit_time | TIMESTAMPTZ | YES | 首次到店时间 |
| 9 | last_visit_time | TIMESTAMPTZ | YES | 最近到店时间 |
| 10 | last_recharge_time | TIMESTAMPTZ | YES | 最近充值时间 |
| 11 | t_v | NUMERIC | YES | 注册到首次到店天数 |
| 12 | t_r | NUMERIC | YES | 注册到首次充值天数 |
| 13 | t_a | NUMERIC | YES | 注册到活跃天数 |
| 14 | visits_14d | INTEGER | NO | 近14天到店次数 |
| 15 | visits_60d | INTEGER | NO | 近60天到店次数 |
| 16 | visits_total | INTEGER | NO | 累计到店次数 |
| 17 | spend_30d | NUMERIC | NO | 近30天消费金额 |
| 18 | spend_180d | NUMERIC | NO | 近180天消费金额 |
| 19 | sv_balance | NUMERIC | NO | 储值卡余额 |
| 20 | recharge_60d_amt | NUMERIC | NO | 近60天充值金额 |
| 21 | interval_count | INTEGER | NO | 到店间隔计数 |
| 22 | need_new | NUMERIC | YES | 需求度子分 |
| 23 | salvage_new | NUMERIC | YES | 挽救度子分 |
| 24 | recharge_new | NUMERIC | YES | 充值度子分 |
| 25 | value_new | NUMERIC | YES | 价值度子分 |
| 26 | welcome_new | NUMERIC | YES | 欢迎度子分 |
| 27 | raw_score_welcome | NUMERIC | YES | 欢迎阶段原始分 |
| 28 | raw_score_convert | NUMERIC | YES | 转化阶段原始分 |
| 29 | raw_score | NUMERIC | YES | 综合原始分 |
| 30 | display_score_welcome | NUMERIC | YES | 欢迎阶段展示分 |
| 31 | display_score_convert | NUMERIC | YES | 转化阶段展示分 |
| 32 | display_score | NUMERIC | YES | 综合展示分 |
| 33 | last_wechat_touch_time | TIMESTAMPTZ | YES | 最近微信触达时间 |
| 34 | calc_time | TIMESTAMPTZ | NO | 计算时间 |
| 35 | calc_version | INTEGER | NO | 计算版本号 |
| 36 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 37 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 业务口径
- NCI 分为两阶段欢迎阶段welcome和转化阶段convert
- 展示分走分位映射P5~P95 截断后线性映射到 0~100
- 同 site_id 删除后重写(覆盖写入)
## 使用说明
```sql
-- 查询高转化潜力新客(展示分 > 70
SELECT member_id, status, segment, display_score
FROM dws.dws_member_newconv_index
WHERE site_id = :site_id AND display_score > 70
ORDER BY display_score DESC;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅(按批次重算覆盖) |
| 依赖参数 | cfg_index_parametersNCI |

View File

@@ -0,0 +1,130 @@
# dws_member_visit_detail 会员来店明细表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_member_visit_detail |
| 主键 | id |
| 唯一键 | (site_id, member_id, order_settle_id) |
| 数据来源 | dwd_settlement_head + 关联明细表 |
| 更新频率 | 每日增量更新 |
| 说明 | 以"会员+订单"为粒度,记录每次来店消费明细 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | member_id | BIGINT | NO | 会员ID散客不入此表 |
| 5 | order_settle_id | BIGINT | NO | 结账单ID |
| 6 | visit_date | DATE | NO | 来店日期 |
| 7 | visit_time | TIMESTAMPTZ | YES | 来店时间 |
| 8 | member_nickname | VARCHAR(100) | YES | 会员昵称 |
| 9 | member_mobile | VARCHAR(20) | YES | 手机号 |
| 10 | member_birthday | DATE | YES | 会员生日 |
| 11 | table_id | BIGINT | YES | 台桌ID |
| 12 | table_name | VARCHAR(50) | YES | 台桌名称 |
| 13 | area_name | VARCHAR(50) | YES | 区域名称(原始) |
| 14 | area_category | VARCHAR(20) | YES | 区域分类 |
| 15 | table_fee | NUMERIC(12,2) | NO | 台费 |
| 16 | goods_amount | NUMERIC(12,2) | NO | 商品金额 |
| 17 | assistant_amount | NUMERIC(12,2) | NO | 助教服务金额 |
| 18 | total_consume | NUMERIC(12,2) | NO | 消费总额(正价) |
| 19 | total_discount | NUMERIC(12,2) | NO | 优惠总额 |
| 20 | actual_pay | NUMERIC(12,2) | NO | 实付金额 |
| 21 | cash_pay | NUMERIC(12,2) | NO | 现金/刷卡支付 |
| 22 | cash_card_pay | NUMERIC(12,2) | NO | 储值卡支付 |
| 23 | gift_card_pay | NUMERIC(12,2) | NO | 赠送卡支付 |
| 24 | groupbuy_pay | NUMERIC(12,2) | NO | 团购券支付 |
| 25 | table_duration_min | INTEGER | NO | 台桌使用时长(分钟,来自台费流水真实秒数) |
| 26 | assistant_duration_min | INTEGER | NO | 助教服务时长(分钟) |
| 27 | assistant_services | JSONB | YES | 助教服务列表 |
| 28 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 29 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 主表来源dwd_settlement_head
```sql
SELECT
site_id,
tenant_id,
member_id,
order_settle_id,
DATE(pay_time) AS visit_date,
create_time AS visit_time,
member_name AS member_nickname,
member_phone AS member_mobile,
table_id,
table_charge_money AS table_fee,
goods_money AS goods_amount,
assistant_pd_money + assistant_cx_money AS assistant_amount,
consume_money AS total_consume,
member_discount_amount + adjust_amount + rounding_amount AS total_discount,
pay_amount AS actual_pay,
balance_amount AS cash_card_pay,
gift_card_amount AS gift_card_pay
FROM dwd.dwd_settlement_head
WHERE member_id != 0
AND settle_type = 1;
```
### 助教服务明细dwd_assistant_service_log
```sql
-- 聚合为JSONB格式
SELECT
order_settle_id,
jsonb_agg(jsonb_build_object(
'assistant_id', site_assistant_id,
'nickname', nickname,
'duration_min', income_seconds / 60,
'amount', ledger_amount
)) AS assistant_services
FROM dwd.dwd_assistant_service_log
WHERE is_delete = 0
GROUP BY order_settle_id;
```
### 台费时长dwd_table_fee_log
```sql
SELECT
order_settle_id,
SUM(COALESCE(real_table_use_seconds, 0)) AS table_use_seconds
FROM dwd.dwd_table_fee_log
WHERE COALESCE(is_delete, 0) = 0
GROUP BY order_settle_id;
```
## 使用说明
**assistant_services JSON格式**
```json
[
{"assistant_id": 123, "nickname": "小燕", "duration_min": 60, "amount": 108.00},
{"assistant_id": 456, "nickname": "小明", "duration_min": 30, "amount": 54.00}
]
```
**区域分类映射**
```sql
-- 通过cfg_area_category映射
area_category = COALESCE(
(SELECT category_name FROM dws.cfg_area_category
WHERE source_area_name = dim_table.site_table_area_name),
'其他'
)
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-16 ~ 至今 |
| 依赖表 | dwd_settlement_head, dwd_assistant_service_log, dwd_table_fee_log, dim_table, dim_member |

View File

@@ -0,0 +1,79 @@
# dws_member_winback_index 会员赢回指数表WBI
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_member_winback_index |
| 主键 | winback_id |
| 唯一键 | (site_id, member_id) |
| 数据来源 | dim_member + dwd_settlement_head + dwd_recharge_order |
| 更新频率 | 建议每2小时 |
| 说明 | 赢回指数,评估流失/沉睡会员的赢回价值和可能性 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | winback_id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | member_id | BIGINT | NO | 会员ID |
| 5 | status | VARCHAR | YES | 赢回状态 |
| 6 | segment | VARCHAR | YES | 客户分群 |
| 7 | member_create_time | TIMESTAMPTZ | YES | 会员注册时间 |
| 8 | first_visit_time | TIMESTAMPTZ | YES | 首次到店时间 |
| 9 | last_visit_time | TIMESTAMPTZ | YES | 最近到店时间 |
| 10 | last_recharge_time | TIMESTAMPTZ | YES | 最近充值时间 |
| 11 | t_v | NUMERIC | YES | 注册到首次到店天数 |
| 12 | t_r | NUMERIC | YES | 注册到首次充值天数 |
| 13 | t_a | NUMERIC | YES | 注册到活跃天数 |
| 14 | visits_14d | INTEGER | NO | 近14天到店次数 |
| 15 | visits_60d | INTEGER | NO | 近60天到店次数 |
| 16 | visits_total | INTEGER | NO | 累计到店次数 |
| 17 | spend_30d | NUMERIC | NO | 近30天消费金额 |
| 18 | spend_180d | NUMERIC | NO | 近180天消费金额 |
| 19 | sv_balance | NUMERIC | NO | 储值卡余额 |
| 20 | recharge_60d_amt | NUMERIC | NO | 近60天充值金额 |
| 21 | interval_count | INTEGER | NO | 到店间隔计数 |
| 22 | overdue_old | NUMERIC | YES | 逾期子分 |
| 23 | drop_old | NUMERIC | YES | 活跃度衰减子分 |
| 24 | recharge_old | NUMERIC | YES | 充值价值子分 |
| 25 | value_old | NUMERIC | YES | 历史价值子分 |
| 26 | raw_score | NUMERIC | YES | 原始分 |
| 27 | display_score | NUMERIC | YES | 展示分(分位映射后) |
| 28 | last_wechat_touch_time | TIMESTAMPTZ | YES | 最近微信触达时间 |
| 29 | calc_time | TIMESTAMPTZ | NO | 计算时间 |
| 30 | calc_version | INTEGER | NO | 计算版本号 |
| 31 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 32 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
| 33 | overdue_cdf_p | NUMERIC | YES | 逾期 CDF 概率值 |
| 34 | ideal_interval_days | NUMERIC | YES | 理想到店间隔天数 |
| 35 | ideal_next_visit_date | DATE | YES | 理想下次到店日期 |
## 业务口径
- 赢回分 = f(逾期, 活跃衰减, 充值价值, 历史价值)
- 与 NCI新客转化互补NCI 面向新客WBI 面向老客/流失客
- 展示分走分位映射P5~P95 截断后线性映射到 0~100
- ideal_next_visit_date 基于历史到店间隔的统计分布预测
## 使用说明
```sql
-- 查询高赢回价值的流失会员
SELECT member_id, status, segment, display_score, ideal_next_visit_date
FROM dws.dws_member_winback_index
WHERE site_id = :site_id AND display_score > 60
ORDER BY display_score DESC;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅(按批次重算覆盖) |
| 依赖参数 | cfg_index_parametersWBI |

View File

@@ -0,0 +1,46 @@
# dws_ml_manual_order_alloc ML人工台账分摊窄表
> 生成时间2026-02-08 | 更新时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_ml_manual_order_alloc |
| 主键 | alloc_id |
| 唯一键 | (site_id, external_id, assistant_id) |
| 数据来源 | dws_ml_manual_order_source 拆分 |
| 更新频率 | 每次导入后实时覆盖 |
| 说明 | 关系指数 ML 的直接输入表 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | alloc_id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | biz_date | DATE | NO | 业务日期 |
| 4 | external_id | VARCHAR | NO | 订单ID |
| 5 | member_id | BIGINT | NO | 会员ID默认0 |
| 6 | pay_time | TIMESTAMPTZ | NO | 支付时间 |
| 7 | order_amount | NUMERIC | NO | 订单金额 |
| 8 | assistant_id | BIGINT | NO | 归因助教ID |
| 9 | assistant_name | VARCHAR | YES | 助教名称 |
| 10 | share_ratio | NUMERIC | NO | 分摊比例(默认 1/N |
| 11 | allocated_amount | NUMERIC | NO | 分摊金额order_amount × share_ratio |
| 12 | currency | VARCHAR | NO | 币种(默认 CNY |
| 13 | import_scope_key | VARCHAR | NO | 覆盖范围键DAY/P30 |
| 14 | import_batch_no | VARCHAR | NO | 导入批次号 |
| 15 | import_file_name | VARCHAR | NO | 导入文件名 |
| 16 | import_time | TIMESTAMPTZ | NO | 导入时间 |
| 17 | import_user | VARCHAR | YES | 导入操作人 |
| 18 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 19 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 生成规则
1. 宽表每行提取非空助教列表。
2. 若助教数为 `N`,则每个助教 `share_ratio=1/N`
3. 同一 `(site_id, external_id, assistant_id)` 重复导入时 upsert 覆盖。
4. 该表是 ML 主口径唯一真源。

View File

@@ -0,0 +1,53 @@
# dws_ml_manual_order_source ML人工台账宽表
> 生成时间2026-02-08 | 更新时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_ml_manual_order_source |
| 主键 | source_id |
| 唯一键 | (site_id, external_id, import_scope_key, row_no) |
| 数据来源 | GUI 上传的人工台账 Excel |
| 更新频率 | 按需导入 |
| 说明 | 订单一行支持最多5个助教字段 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | source_id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | biz_date | DATE | NO | 业务日期 |
| 4 | external_id | VARCHAR | NO | 订单ID必填 |
| 5 | member_id | BIGINT | NO | 会员ID默认0 |
| 6 | pay_time | TIMESTAMPTZ | NO | 支付时间 |
| 7 | order_amount | NUMERIC | NO | 订单金额 |
| 8 | currency | VARCHAR | NO | 币种(默认 CNY |
| 9 | assistant_id_1 | BIGINT | YES | 助教1 ID |
| 10 | assistant_name_1 | VARCHAR | YES | 助教1 名称 |
| 11 | assistant_id_2 | BIGINT | YES | 助教2 ID |
| 12 | assistant_name_2 | VARCHAR | YES | 助教2 名称 |
| 13 | assistant_id_3 | BIGINT | YES | 助教3 ID |
| 14 | assistant_name_3 | VARCHAR | YES | 助教3 名称 |
| 15 | assistant_id_4 | BIGINT | YES | 助教4 ID |
| 16 | assistant_name_4 | VARCHAR | YES | 助教4 名称 |
| 17 | assistant_id_5 | BIGINT | YES | 助教5 ID |
| 18 | assistant_name_5 | VARCHAR | YES | 助教5 名称 |
| 19 | import_batch_no | VARCHAR | NO | 导入批次号 |
| 20 | import_file_name | VARCHAR | NO | 导入文件名 |
| 21 | import_scope_key | VARCHAR | NO | 覆盖范围键 |
| 22 | import_time | TIMESTAMPTZ | NO | 导入时间 |
| 23 | import_user | VARCHAR | YES | 导入操作人 |
| 24 | row_no | INTEGER | NO | Excel 行号 |
| 25 | remark | TEXT | YES | 备注 |
| 26 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 27 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 覆盖规则
1. 30天内`site_id + biz_date` 日覆盖。
2. 超过30天按固定纪元 `2026-01-01` 划分 30 天桶覆盖。
3. 覆盖策略:先删后写(整批重写)。

View File

@@ -0,0 +1,84 @@
# dws_order_summary 订单汇总宽表
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_order_summary |
| 主键 | (site_id, order_settle_id) |
| 数据来源 | dwd_settlement_head + 关联明细表 |
| 更新频率 | 每小时增量更新 |
| 说明 | 以订单为粒度的汇总宽表,整合台费、助教、商品、团购、优惠、支付、流水等维度 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | site_id | BIGINT | NO | 门店ID联合主键 |
| 2 | order_settle_id | BIGINT | NO | 结算单ID联合主键 |
| 3 | order_trade_no | VARCHAR | YES | 订单交易号 |
| 4 | order_date | DATE | NO | 订单日期(优先 pay_time其次 create_time |
| 5 | tenant_id | BIGINT | NO | 租户ID |
| 6 | member_id | BIGINT | YES | 会员IDNULL 或 0 为散客) |
| 7 | member_flag | BOOLEAN | NO | 是否会员订单 |
| 8 | recharge_order_flag | BOOLEAN | NO | 充值订单标记(消费金额=0 且实付>0 |
| 9 | item_count | INTEGER | NO | 订单项数 |
| 10 | total_item_quantity | INTEGER | NO | 订单项总数量 |
| 11 | table_fee_amount | NUMERIC | NO | 台费金额 |
| 12 | assistant_service_amount | NUMERIC | NO | 助教服务金额 |
| 13 | goods_amount | NUMERIC | NO | 商品金额 |
| 14 | group_amount | NUMERIC | NO | 团购金额 |
| 15 | total_coupon_deduction | NUMERIC | NO | 优惠券抵扣总额 |
| 16 | member_discount_amount | NUMERIC | NO | 会员折扣金额 |
| 17 | manual_discount_amount | NUMERIC | NO | 手动折扣金额 |
| 18 | order_original_amount | NUMERIC | NO | 原价估算(实付+优惠/抵扣) |
| 19 | order_final_amount | NUMERIC | NO | 最终应付金额 |
| 20 | stored_card_deduct | NUMERIC | NO | 储值卡抵扣金额 |
| 21 | external_paid_amount | NUMERIC | NO | 外部支付金额(实付-卡类抵扣) |
| 22 | total_paid_amount | NUMERIC | NO | 总实付金额 |
| 23 | book_table_flow | NUMERIC | NO | 台费流水 |
| 24 | book_assistant_flow | NUMERIC | NO | 助教流水 |
| 25 | book_goods_flow | NUMERIC | NO | 商品流水 |
| 26 | book_group_flow | NUMERIC | NO | 团购流水 |
| 27 | book_order_flow | NUMERIC | NO | 订单总流水(台费+助教+商品+团购) |
| 28 | order_effective_consume_cash | NUMERIC | NO | 有效消费现金 |
| 29 | order_effective_recharge_cash | NUMERIC | NO | 有效充值现金 |
| 30 | order_effective_flow | NUMERIC | NO | 有效流水 |
| 31 | refund_amount | NUMERIC | NO | 退款金额 |
| 32 | net_income | NUMERIC | NO | 净收入(实付-退款) |
| 33 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 34 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 业务口径
- order_date 优先取 pay_time其次 create_time
- recharge_order_flag消费金额=0 且实付>0 时标记为充值订单
- order_original_amount = 实付 + 优惠/抵扣
- book_order_flow = 台费 + 助教 + 商品 + 团购
- net_income = total_paid_amount - refund_amount
## 使用说明
```sql
-- 按日统计订单概况
SELECT
order_date,
COUNT(*) AS order_count,
SUM(order_final_amount) AS total_amount,
SUM(net_income) AS net_income,
SUM(CASE WHEN member_flag THEN 1 ELSE 0 END) AS member_orders
FROM dws.dws_order_summary
WHERE site_id = :site_id
GROUP BY order_date
ORDER BY order_date DESC;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 依赖表 | dwd_settlement_head, dwd_table_fee_log, dwd_assistant_service_log, dwd_store_goods_sale, dwd_groupbuy_redemption, dwd_payment, dwd_refund |

View File

@@ -0,0 +1,100 @@
# dws_platform_settlement 平台回款/服务费表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_platform_settlement |
| 主键 | id |
| 数据来源 | Excel手动导入 |
| 更新频率 | 按需导入 |
| 说明 | 以"回款日期+平台+订单"为粒度,记录平台结算数据 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | settlement_date | DATE | NO | 回款日期 |
| 5 | platform_type | VARCHAR(30) | NO | 平台类型。**枚举值**: MEITUAN, DOUYIN, DIANPING, OTHER |
| 6 | platform_name | VARCHAR(50) | YES | 平台名称 |
| 7 | platform_order_no | VARCHAR(100) | YES | 平台订单号 |
| 8 | order_settle_id | BIGINT | YES | 关联的结账单ID |
| 9 | settlement_amount | NUMERIC(14,2) | NO | 回款金额(实际入账) |
| 10 | commission_amount | NUMERIC(14,2) | NO | 佣金(平台抽成) |
| 11 | service_fee | NUMERIC(14,2) | NO | 服务费 |
| 12 | gross_amount | NUMERIC(14,2) | NO | 订单原始金额 |
| 13 | import_batch_no | VARCHAR(50) | YES | 导入批次号 |
| 14 | import_file_name | VARCHAR(200) | YES | 导入文件名 |
| 15 | import_time | TIMESTAMPTZ | YES | 导入时间 |
| 16 | import_user | VARCHAR(50) | YES | 导入操作人 |
| 17 | remark | TEXT | YES | 备注 |
| 18 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 19 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 平台类型说明
| platform_type | platform_name | 说明 |
|---------------|---------------|------|
| MEITUAN | 美团 | 美团团购/外卖 |
| DOUYIN | 抖音 | 抖音团购 |
| DIANPING | 大众点评 | 大众点评团购 |
| OTHER | 其他 | 其他平台 |
## Excel导入模板
| 回款日期 | 平台 | 平台订单号 | 订单金额 | 回款金额 | 佣金 | 服务费 | 备注 |
|----------|------|------------|----------|----------|------|--------|------|
| 2026-01-15 | 美团 | MT202601150001 | 200.00 | 186.00 | 12.00 | 2.00 | |
| 2026-01-15 | 抖音 | DY202601150001 | 150.00 | 142.50 | 6.00 | 1.50 | |
### 导入规则
- **回款日期**: 必填,实际到账日期
- **平台**: 必填,美团/抖音/大众点评/其他
- **平台订单号**: 选填,用于追溯
- **订单金额**: 必填,订单原始金额
- **回款金额**: 必填,实际到账金额
- **佣金**: 选填,平台抽成
- **服务费**: 选填
### 金额关系
```
settlement_amount = gross_amount - commission_amount - service_fee
```
## 使用说明
**日度平台回款汇总**
```sql
SELECT
settlement_date,
platform_type,
SUM(settlement_amount) AS total_settlement,
SUM(commission_amount) AS total_commission,
SUM(service_fee) AS total_service_fee
FROM dws.dws_platform_settlement
GROUP BY settlement_date, platform_type
ORDER BY settlement_date, platform_type;
```
**关联到财务日度汇总**
```sql
-- dws_finance_daily_summary.platform_settlement_amount
SELECT stat_date, SUM(settlement_amount)
FROM dws.dws_platform_settlement
WHERE settlement_date = :stat_date
GROUP BY stat_date;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ❌ 不可自动回溯 |
| 原因 | 数据来源为Excel手工导入需从平台后台导出 |
| 处理 | 需要人工补录历史平台结算数据 |

View File

@@ -0,0 +1,69 @@
# v_member_recall_priority 会员召回优先级视图
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | dws |
| 对象名 | v_member_recall_priority |
| 类型 | VIEW视图 |
| 数据来源 | dws_member_newconv_index UNION dws_member_winback_index |
| 说明 | 合并新客转化NCI和赢回WBI指数统一召回优先级排序 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | site_id | BIGINT | YES | 门店ID |
| 2 | tenant_id | BIGINT | YES | 租户ID |
| 3 | member_id | BIGINT | YES | 会员ID |
| 4 | index_type | VARCHAR | YES | 指数类型NCI新客转化/ WBI赢回 |
| 5 | status | VARCHAR | YES | 状态 |
| 6 | segment | VARCHAR | YES | 客户分群 |
| 7 | member_create_time | TIMESTAMPTZ | YES | 会员注册时间 |
| 8 | first_visit_time | TIMESTAMPTZ | YES | 首次到店时间 |
| 9 | last_visit_time | TIMESTAMPTZ | YES | 最近到店时间 |
| 10 | last_recharge_time | TIMESTAMPTZ | YES | 最近充值时间 |
| 11 | t_v | NUMERIC | YES | 注册到首次到店天数 |
| 12 | t_r | NUMERIC | YES | 注册到首次充值天数 |
| 13 | t_a | NUMERIC | YES | 注册到活跃天数 |
| 14 | visits_14d | INTEGER | YES | 近14天到店次数 |
| 15 | visits_60d | INTEGER | YES | 近60天到店次数 |
| 16 | visits_total | INTEGER | YES | 累计到店次数 |
| 17 | spend_30d | NUMERIC | YES | 近30天消费金额 |
| 18 | spend_180d | NUMERIC | YES | 近180天消费金额 |
| 19 | sv_balance | NUMERIC | YES | 储值卡余额 |
| 20 | recharge_60d_amt | NUMERIC | YES | 近60天充值金额 |
| 21 | need_new | NUMERIC | YES | NCI 需求度子分 |
| 22 | salvage_new | NUMERIC | YES | NCI 挽救度子分 |
| 23 | recharge_new | NUMERIC | YES | NCI 充值度子分 |
| 24 | value_new | NUMERIC | YES | NCI 价值度子分 |
| 25 | welcome_new | NUMERIC | YES | NCI 欢迎度子分 |
| 26 | raw_score_welcome | NUMERIC | YES | 欢迎阶段原始分 |
| 27 | raw_score_convert | NUMERIC | YES | 转化阶段原始分 |
| 28 | raw_score | NUMERIC | YES | 综合原始分 |
| 29 | display_score_welcome | NUMERIC | YES | 欢迎阶段展示分 |
| 30 | display_score_convert | NUMERIC | YES | 转化阶段展示分 |
| 31 | display_score | NUMERIC | YES | 综合展示分 |
| 32 | last_wechat_touch_time | TIMESTAMPTZ | YES | 最近微信触达时间 |
| 33 | calc_time | TIMESTAMPTZ | YES | 计算时间 |
## 业务口径
- 本视图将 NCI新客转化和 WBI赢回两张表 UNION 合并
- 通过 `index_type` 字段区分来源
- NCI 子分字段在 WBI 行中为 NULL反之亦然
-`display_score DESC` 排序即可获得统一的召回优先级
## 使用说明
```sql
-- 获取综合召回优先级列表
SELECT member_id, index_type, status, segment, display_score
FROM dws.v_member_recall_priority
WHERE site_id = :site_id
ORDER BY display_score DESC
LIMIT 50;
```

View File

@@ -0,0 +1,58 @@
# etl_cursor 任务游标表
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | meta |
| 表名 | etl_cursor |
| 主键 | cursor_id |
| 唯一约束 | (task_id, store_id) |
| 外键 | task_id → etl_task(task_id) ON DELETE CASCADE |
| 记录数 | 44 |
| 说明 | 记录每个任务/门店的增量窗口水位及最后一次运行 ID是增量正确性的关键表 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 默认值 | 说明 |
|------|--------|------|------|--------|------|
| 1 | cursor_id | BIGINT | NO | BIGSERIAL | 自增主键 |
| 2 | task_id | BIGINT | NO | | 关联 etl_task.task_id标识所属任务 |
| 3 | store_id | BIGINT | NO | | 门店/租户粒度 |
| 4 | last_start | TIMESTAMPTZ | YES | | 上次窗口开始时间(含重叠偏移),下次增量从此时间点继续 |
| 5 | last_end | TIMESTAMPTZ | YES | | 上次窗口结束时间 |
| 6 | last_id | BIGINT | YES | | 上次处理的最大主键/游标值(可选),用于基于 ID 的增量模式 |
| 7 | last_run_id | BIGINT | YES | | 上次运行 ID对应 etl_run.run_id |
| 8 | extra | JSONB | YES | '{}'::jsonb | 附加游标信息 JSON可存放任务特有的水位数据 |
| 9 | created_at | TIMESTAMPTZ | YES | now() | 创建时间 |
| 10 | updated_at | TIMESTAMPTZ | YES | now() | 更新时间 |
## 使用说明
```sql
-- 查询所有任务的当前游标水位
SELECT t.task_code, c.store_id, c.last_start, c.last_end, c.last_run_id
FROM meta.etl_cursor c
JOIN meta.etl_task t ON c.task_id = t.task_id
ORDER BY t.task_code;
-- 查询指定任务的游标详情
SELECT *
FROM meta.etl_cursor
WHERE task_id = (SELECT task_id FROM meta.etl_task WHERE task_code = 'FETCH_ORDERS' LIMIT 1);
-- 重置某任务的游标(用于重跑历史数据)
UPDATE meta.etl_cursor
SET last_start = '2024-01-01 00:00:00+08', last_end = NULL, last_id = NULL, updated_at = now()
WHERE task_id = (SELECT task_id FROM meta.etl_task WHERE task_code = 'FETCH_ORDERS' LIMIT 1);
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯created_at / updated_at 记录变更时间last_run_id 可追溯到具体运行记录) |
| 数据来源 | 由调度器orchestration在每次任务运行后自动更新 |
| 关联表 | etl_task通过 task_id 关联、etl_run通过 last_run_id 关联) |

View File

@@ -0,0 +1,79 @@
# etl_run 运行记录表
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | meta |
| 表名 | etl_run |
| 主键 | run_id |
| 外键 | task_id → etl_task(task_id) ON DELETE CASCADE |
| 记录数 | 8726 |
| 说明 | 记录每次任务执行的窗口参数、运行状态、处理计数与日志路径,是 ETL 运维排查的核心表 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 默认值 | 说明 |
|------|--------|------|------|--------|------|
| 1 | run_id | BIGINT | NO | BIGSERIAL | 自增主键 |
| 2 | run_uuid | TEXT | NO | | 本次调度的唯一标识UUID 格式),用于跨系统关联 |
| 3 | task_id | BIGINT | NO | | 关联 etl_task.task_id标识所属任务 |
| 4 | store_id | BIGINT | NO | | 门店/租户粒度 |
| 5 | status | TEXT | NO | | 运行状态。**枚举值**: `SUCC` = 成功, `FAIL` = 失败, `PARTIAL` = 部分成功 |
| 6 | started_at | TIMESTAMPTZ | YES | now() | 开始时间 |
| 7 | ended_at | TIMESTAMPTZ | YES | | 结束时间 |
| 8 | window_start | TIMESTAMPTZ | YES | | 本次窗口开始时间 |
| 9 | window_end | TIMESTAMPTZ | YES | | 本次窗口结束时间 |
| 10 | window_minutes | INTEGER | YES | | 窗口跨度(分钟) |
| 11 | overlap_seconds | INTEGER | YES | | 窗口重叠秒数 |
| 12 | fetched_count | INTEGER | YES | 0 | 抓取/读取的记录数 |
| 13 | loaded_count | INTEGER | YES | 0 | 插入的记录数 |
| 14 | updated_count | INTEGER | YES | 0 | 更新的记录数 |
| 15 | skipped_count | INTEGER | YES | 0 | 跳过的记录数 |
| 16 | error_count | INTEGER | YES | 0 | 错误记录数 |
| 17 | unknown_fields | INTEGER | YES | 0 | 未知字段计数(清洗阶段发现的未定义字段) |
| 18 | export_dir | TEXT | YES | | 抓取/导出目录路径 |
| 19 | log_path | TEXT | YES | | 日志文件路径 |
| 20 | request_params | JSONB | YES | '{}'::jsonb | 请求参数 JSON记录本次运行使用的 API 请求参数 |
| 21 | manifest | JSONB | YES | '{}'::jsonb | 运行产出清单/统计 JSON记录处理结果摘要 |
| 22 | error_message | TEXT | YES | | 错误信息(若失败时记录具体原因) |
| 23 | extra | JSONB | YES | '{}'::jsonb | 附加字段,保留扩展 |
## 使用说明
```sql
-- 查询最近 10 次运行记录
SELECT r.run_id, t.task_code, r.status, r.started_at, r.ended_at,
r.fetched_count, r.loaded_count, r.error_count
FROM meta.etl_run r
JOIN meta.etl_task t ON r.task_id = t.task_id
ORDER BY r.started_at DESC
LIMIT 10;
-- 查询失败的运行记录及错误信息
SELECT r.run_id, t.task_code, r.started_at, r.error_message
FROM meta.etl_run r
JOIN meta.etl_task t ON r.task_id = t.task_id
WHERE r.status = 'FAIL'
ORDER BY r.started_at DESC;
-- 统计各任务的运行成功率
SELECT t.task_code,
COUNT(*) AS total_runs,
COUNT(*) FILTER (WHERE r.status = 'SUCC') AS success_count,
ROUND(100.0 * COUNT(*) FILTER (WHERE r.status = 'SUCC') / COUNT(*), 1) AS success_rate
FROM meta.etl_run r
JOIN meta.etl_task t ON r.task_id = t.task_id
GROUP BY t.task_code
ORDER BY success_rate;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(每次运行独立记录,含完整窗口参数、计数和错误信息) |
| 数据来源 | 由调度器orchestration在任务执行过程中自动写入和更新 |
| 关联表 | etl_task通过 task_id 关联、etl_cursor通过 last_run_id 反向关联) |

View File

@@ -0,0 +1,59 @@
# etl_task 任务注册表
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | meta |
| 表名 | etl_task |
| 主键 | task_id |
| 唯一约束 | (task_code, store_id) |
| 记录数 | 49 |
| 说明 | 调度依据的任务清单,与代码中 task_registry 的任务码对应;按门店粒度管理任务参数 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 默认值 | 说明 |
|------|--------|------|------|--------|------|
| 1 | task_id | BIGINT | NO | BIGSERIAL | 自增主键 |
| 2 | task_code | TEXT | NO | | 任务编码,需与代码中的任务码一致(如 `FETCH_ORDERS``DWD_LOAD_FROM_ODS` |
| 3 | store_id | BIGINT | NO | | 门店/租户粒度,区分多门店执行 |
| 4 | enabled | BOOLEAN | YES | true | 是否启用此任务 |
| 5 | cursor_field | TEXT | YES | | 增量游标字段名(可选),用于标识增量抽取的时间/ID 字段 |
| 6 | window_minutes_default | INTEGER | YES | 30 | 默认时间窗口(分钟),控制每次增量抽取的时间跨度 |
| 7 | overlap_seconds | INTEGER | YES | 120 | 窗口重叠秒数,用于防止因时间精度导致的数据遗漏 |
| 8 | page_size | INTEGER | YES | 200 | 默认分页大小,控制 API 单次请求返回的记录数 |
| 9 | retry_max | INTEGER | YES | 3 | API 重试次数上限 |
| 10 | params | JSONB | YES | '{}'::jsonb | 任务级自定义参数 JSON可存放端点特有配置 |
| 11 | created_at | TIMESTAMPTZ | YES | now() | 创建时间 |
| 12 | updated_at | TIMESTAMPTZ | YES | now() | 更新时间 |
## 使用说明
```sql
-- 查询所有已启用的任务
SELECT task_code, store_id, window_minutes_default, overlap_seconds
FROM meta.etl_task
WHERE enabled = TRUE
ORDER BY task_code;
-- 查询指定门店的任务配置
SELECT *
FROM meta.etl_task
WHERE store_id = 2790685415443269 AND enabled = TRUE;
-- 修改某任务的时间窗口和重叠秒数
UPDATE meta.etl_task
SET window_minutes_default = 60, overlap_seconds = 300, updated_at = now()
WHERE task_code = 'FETCH_ORDERS' AND store_id = 2790685415443269;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯created_at / updated_at 记录变更时间) |
| 数据来源 | 系统初始化时由 seed 脚本或 CLI 注册写入 |
| 关联表 | etl_cursor通过 task_id 关联、etl_run通过 task_id 关联) |

View File

@@ -0,0 +1,96 @@
# ODS 层 DDL 同步修正 — 变更记录
> 结构性变更:修正 4 项差异(删除 2 个冗余字段、修正 1 个字段类型、补充 1 个缺失字段)
## 溯源
- 日期2026-02-13Asia/Shanghai
- 工具:`scripts/compare_ddl_db.py --schema ods --ddl-path database/schema_ODS_doc.sql`
- Direct causeDDL 对比脚本发现 `database/schema_ODS_doc.sql` 与数据库 `ods` schema 实际状态存在 4 项差异,以数据库为准修正 DDL 文件。
## 变更内容
| Schema | 表名 | 操作 | 字段 | DDL 原定义 | 数据库实际 | 说明 |
|--------|------|------|------|-----------|-----------|------|
| `ods` | `recharge_settlements` | DDL 删除字段 | `settlelist` | `jsonb` | — | DDL 中有但数据库中不存在,属冗余定义 |
| `ods` | `settlement_records` | DDL 删除字段 | `settlelist` | `jsonb` | — | DDL 中有但数据库中不存在,属冗余定义 |
| `ods` | `tenant_goods_master` | DDL 修正类型 | `not_sale` | `BOOLEAN` | `INTEGER` | 字段类型不匹配,以数据库为准 |
| `ods` | `refund_transactions` | DDL 补充字段 | `check_status` | — | `INTEGER` | 数据库中有但 DDL 中未定义 |
## 变更原因
1. `recharge_settlements.settlelist``settlement_records.settlelist`DDL 文件中残留的字段定义,数据库中已在先前迁移(`20260214_drop_ods_settlelist.sql`中删除DDL 未同步清理
2. `tenant_goods_master.not_sale`DDL 定义为 `BOOLEAN`,但数据库实际为 `INTEGER`0/1 表示是否停售),以数据库为准修正
3. `refund_transactions.check_status`数据库中存在的审核状态字段DDL 文件中遗漏未定义
## 影响范围
| 影响对象 | 影响程度 | 说明 |
|----------|----------|------|
| ETL 加载任务 | 无影响 | 本次仅修正 DDL 文档,不涉及数据库结构变更 |
| 后端 API | 无影响 | DDL 文件为文档性质,不影响运行时 |
| 小程序字段映射 | 无影响 | 小程序不直接读 ODS 层 |
| ODS 表级文档 | ⚠️ 需同步 | 后续生成 ODS 表级文档时应以修正后的 DDL 为准 |
| DWD 加载映射 | 无影响 | `refund_transactions.check_status` 已在 DWD 层有对应映射 |
**注意**:本次变更仅修正 DDL 文件(文档同步),数据库结构未发生任何变更。数据库是"源头"DDL 文件是"文档"。
## 回滚策略
本次为 DDL 文件修正(文档同步),无需数据库回滚。若需恢复 DDL 文件,使用 Git 回退即可:
```bash
git checkout HEAD~1 -- database/schema_ODS_doc.sql
```
若未来需要将数据库结构回退到 DDL 修正前的状态(不推荐):
```sql
-- 1) 恢复 settlelist 列(数据不可恢复)
ALTER TABLE ods.recharge_settlements ADD COLUMN settlelist JSONB;
ALTER TABLE ods.settlement_records ADD COLUMN settlelist JSONB;
-- 2) 将 not_sale 改回 BOOLEAN需数据转换
ALTER TABLE ods.tenant_goods_master
ALTER COLUMN not_sale TYPE BOOLEAN USING (not_sale::INTEGER != 0);
-- 3) 删除 check_status 列
ALTER TABLE ods.refund_transactions DROP COLUMN check_status;
```
## 验证 SQL
```sql
-- 1) 确认 settlelist 列在数据库中确实不存在
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'ods'
AND table_name IN ('recharge_settlements', 'settlement_records')
AND column_name = 'settlelist';
-- 预期0 行
-- 2) 确认 tenant_goods_master.not_sale 实际类型为 integer
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'ods'
AND table_name = 'tenant_goods_master'
AND column_name = 'not_sale';
-- 预期data_type = 'integer'
-- 3) 确认 refund_transactions.check_status 存在且类型为 integer
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_schema = 'ods'
AND table_name = 'refund_transactions'
AND column_name = 'check_status';
-- 预期1 行data_type = 'integer'
-- 4) 确认修正后 DDL 与数据库零差异(通过对比脚本验证)
-- python scripts/compare_ddl_db.py --schema ods --ddl-path database/schema_ODS_doc.sql
-- 预期0 项差异
```
## 关联文件
- DDL 文件:`database/schema_ODS_doc.sql`
- 对比结果:`docs/database/ddl_compare_results.md`

View File

@@ -0,0 +1,39 @@
# ODS 表与 API JSON 字段对齐 — 变更记录
> 无结构性变更
## 溯源
- 日期2026-02-13Asia/Shanghai
- PromptP20260213-210000 — 用新梳理的 API 返回 JSON 文档比对数据库 ODS 层
- Direct cause`scripts/compare_api_ods.py` 自动比对 22 张 ODS 表与 `docs/api-reference/` 文档中的 JSON 字段,结论为全部对齐,无需 ALTER
## 说明
迁移文件 `database/migrations/20260213_align_ods_with_api.sql` 为比对结论记录,不包含任何 DDL 语句。
- 比对范围:`ods` schema 下 22 张表
- 比对逻辑camelCase → snake_case 归一化匹配 + 去下划线纯小写兜底
- 结论:所有 ODS 表列已与 API JSON 响应字段完全对齐
- `stock_goods_category_tree``goodsCategoryList`/`total` 为响应包装层字段ODS 表已正确展开存储数组内的记录级字段,无需额外列
## 验证 SQL
```sql
-- 1) 确认 ods schema 下表数量
SELECT count(*) FROM information_schema.tables
WHERE table_schema = 'ods' AND table_type = 'BASE TABLE';
-- 2) 确认迁移文件未引入新列(对比前后列数应一致)
SELECT table_name, count(*) AS col_count
FROM information_schema.columns
WHERE table_schema = 'ods'
GROUP BY table_name
ORDER BY table_name;
-- 3) 确认无待执行的 pending migration迁移文件为纯注释不应产生任何变更
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'ods' AND table_name = 'assistant_accounts_master'
ORDER BY ordinal_position;
```

View File

@@ -0,0 +1,111 @@
# ODS 层删除 option_name / able_site_transfer 冗余列 — 变更记录
> 结构性变更:删除 2 张表各 1 个冗余列API JSON 中不存在ODS 全 NULL
## 溯源
- 日期2026-02-14Asia/Shanghai
- PromptP20260214-070000 — 删除 ODS 层 store_goods_sales_records.option_name 和 member_stored_value_cards.able_site_transfer
- Direct causeAPI vs ODS 比对报告v3-fixed中这两列被标注为"ODS 独有",经查证 API JSON 响应中从未返回这两个字段ODS 中全部为 NULL0 条非空数据),属于冗余列,应清理。
## 变更内容
| Schema | 表名 | 操作 | 列名 | 原类型 | 说明 |
|--------|------|------|------|--------|------|
| `ods` | `store_goods_sales_records` | DROP COLUMN | `option_name` | `text` | API 后续版本新增字段,实际从未返回数据,全 NULL |
| `ods` | `member_stored_value_cards` | DROP COLUMN | `able_site_transfer` | `integer` | API 后续版本新增字段,实际从未返回数据,全 NULL |
### Before / After
**store_goods_sales_records**
- Before52 个业务列 + 5 个 meta 列(含 `option_name text`
- After51 个业务列 + 5 个 meta 列(`option_name` 已移除)
**member_stored_value_cards**
- Before76 个业务列 + 5 个 meta 列(含 `able_site_transfer integer`
- After75 个业务列 + 5 个 meta 列(`able_site_transfer` 已移除)
## 变更原因
1. v3-fixed 比对报告显示 `option_name``able_site_transfer` 为"ODS 独有"字段
2. 全量 JSON 刷新审计100 条/接口)确认 API 响应中从未包含这两个字段
3. 数据库查询确认两列全部为 NULL无实际业务数据
4. 保留全 NULL 的冗余列会误导后续开发和数据分析
## 影响范围
| 影响对象 | 影响程度 | 说明 |
|----------|----------|------|
| ODS 抓取任务 | ⚠️ 需确认 | ODS 入库 INSERT/UPSERT 语句中若包含这两列需移除 |
| DWD 加载任务 | 无影响 | DWD 层未映射这两个字段(全 NULL 无法产生有意义的 DWD 数据) |
| API 契约 | 无影响 | API 响应结构不变,这两个字段本就不在 API 返回中 |
| 小程序 | 无影响 | 小程序不直接读 ODS 层 |
| 比对报告 | 需更新 | `docs/reports/api_ods_comparison_v3_fixed.md` 中两表的 ODS 独有字段需移除 |
## 回滚策略
```sql
-- 恢复列结构(数据不可恢复,因原始数据全为 NULL
ALTER TABLE ods.store_goods_sales_records ADD COLUMN option_name TEXT;
ALTER TABLE ods.member_stored_value_cards ADD COLUMN able_site_transfer INTEGER;
```
**注意事项**
- 回滚后两列数据均为 NULL与删除前一致无数据丢失风险
- 若未来 API 版本开始返回这两个字段,需重新 ADD COLUMN 并更新 ODS 入库逻辑
## 验证 SQL
```sql
-- 1) 确认 option_name 列已不存在
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'ods'
AND table_name = 'store_goods_sales_records'
AND column_name = 'option_name';
-- 预期0 行
-- 2) 确认 able_site_transfer 列已不存在
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'ods'
AND table_name = 'member_stored_value_cards'
AND column_name = 'able_site_transfer';
-- 预期0 行
-- 3) 确认两表当前列数
SELECT table_name, count(*) AS total_columns
FROM information_schema.columns
WHERE table_schema = 'ods'
AND table_name IN ('store_goods_sales_records', 'member_stored_value_cards')
GROUP BY table_name;
-- 预期store_goods_sales_records = 5651 业务 + 5 metamember_stored_value_cards = 8075 业务 + 5 meta
-- 4) 确认删除前数据确实全 NULL回溯验证迁移执行前运行
-- SELECT count(*) FROM ods.store_goods_sales_records WHERE option_name IS NOT NULL;
-- SELECT count(*) FROM ods.member_stored_value_cards WHERE able_site_transfer IS NOT NULL;
-- 预期:均为 0
```
## 迁移文件
`database/migrations/20260214_drop_ods_option_name_able_site_transfer.sql`
---
## 补充记录schema_ODS_doc.sql AI_CHANGELOG 标注
- 日期2026-02-14Asia/Shanghai
- PromptP20260214-070000同上
- 变更内容:在 `database/schema_ODS_doc.sql` 末尾追加 AI_CHANGELOG 注释块,记录 option_name / able_site_transfer 两列在 DDL 文档中的注释化处理
- 结论:**无结构性变更**(仅追加 SQL 注释,不涉及 DDL 操作)
<!--
AI_CHANGELOG:
- 日期: 2026-02-14
- Prompt: P20260214-070000 — ODS 清理与文档标注5 项任务)
- 直接原因: DB schema 变更(删除 2 列)必须同步 BD Manual
- 变更摘要: 新建 ODS 层变更记录文档,记录 option_name 和 able_site_transfer 的删除原因、影响、回滚策略和验证 SQL
- 风险与验证: 纯文档;验证:验证 SQL 执行结果与预期一致
-->

View File

@@ -0,0 +1,102 @@
# ODS 层删除 settlelist 冗余列 — 变更记录
> 结构性变更:删除 2 张表的 1 个 jsonb 列
## 溯源
- 日期2026-02-14Asia/Shanghai
- PromptP20260214-023000 — 删除 ODS 层 settlement_records / recharge_settlements 的 settlelist jsonb 列
- Direct cause`settlelist` 列与 `payload` 列数据完全重复(`payload` 存储完整 API 响应 JSON已包含 `settleList` 对象属于冗余存储。DWD 加载逻辑已改为从 `payload` 提取 `settleList`,该列不再被任何下游消费。
## 变更内容
| Schema | 表名 | 操作 | 列名 | 原类型 | 说明 |
|--------|------|------|------|--------|------|
| `ods` | `settlement_records` | DROP COLUMN | `settlelist` | `jsonb` | 存储原始 settleList 对象,与 payload 重复 |
| `ods` | `recharge_settlements` | DROP COLUMN | `settlelist` | `jsonb` | 存储原始 settleList 对象,与 payload 重复 |
### Before / After
**settlement_records**
- Before67 个业务列 + 5 个 meta 列(含 `settlelist jsonb`
- After66 个业务列 + 5 个 meta 列(`settlelist` 已移除)
**recharge_settlements**
- Before67 个业务列 + 5 个 meta 列(含 `settlelist jsonb`
- After66 个业务列 + 5 个 meta 列(`settlelist` 已移除)
## 变更原因
1. `payload`jsonb已存储完整的 API 响应 JSON其中包含 `settleList` 对象
2. `settlelist` 列是 ETL 入库时从 `payload` 中额外提取并单独存储的副本,属于冗余
3. API vs ODS 比对报告v3-fixed中已标注 `settlelist` 为"ODS jsonb 列(存储原始 settleList 对象)"
4. DWD 加载逻辑已修改为直接从 `payload->'settleList'` 提取数据
## 影响范围
| 影响对象 | 影响程度 | 说明 |
|----------|----------|------|
| DWD 加载任务 | ⚠️ 需确认 | DWD 加载必须已改为从 `payload` 提取 settleList不再读 `settlelist` 列 |
| ODS 抓取任务 | ⚠️ 需确认 | ODS 入库逻辑需移除对 `settlelist` 列的写入INSERT/UPSERT 语句) |
| API 契约 | 无影响 | API 响应结构不变,仅 ODS 存储方式调整 |
| 小程序 | 无影响 | 小程序不直接读 ODS 层 |
| 比对报告 | 需更新 | `docs/reports/api_ods_comparison_v3.md``scripts/ods_columns.json` 中 settlement_records / recharge_settlements 的列清单需移除 `settlelist` |
| 比对脚本 | 需更新 | `scripts/run_compare_v3_fixed.py``classify_ods_only()``settlelist` 的特殊处理可移除 |
## 回滚策略
```sql
-- 1) 恢复列结构
ALTER TABLE ods.settlement_records ADD COLUMN settlelist jsonb;
ALTER TABLE ods.recharge_settlements ADD COLUMN settlelist jsonb;
-- 2) 从 payload 回填数据(回滚后列为 NULL需重新提取
UPDATE ods.settlement_records
SET settlelist = payload->'settleList'
WHERE payload IS NOT NULL;
UPDATE ods.recharge_settlements
SET settlelist = payload->'settleList'
WHERE payload IS NOT NULL;
```
**注意事项**
- 回滚后 `settlelist` 列数据为 NULL必须执行回填 UPDATE
- 若历史数据中存在 `payload IS NULL` 的行,这些行的 `settlelist` 将永久丢失(无法恢复)
- 回填前建议先统计 `payload IS NULL` 的行数,评估数据损失范围
## 验证 SQL
```sql
-- 1) 确认 settlelist 列已不存在
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'ods'
AND table_name IN ('settlement_records', 'recharge_settlements')
AND column_name = 'settlelist';
-- 预期0 行
-- 2) 确认 payload 列仍存在且包含 settleList 数据
SELECT count(*)
FROM ods.settlement_records
WHERE payload IS NOT NULL AND payload->'settleList' IS NOT NULL;
-- 预期:> 0确认 payload 中有 settleList 数据可用)
-- 3) 确认两表当前列数(排除 meta 列后应为 66
SELECT table_name, count(*) AS total_columns
FROM information_schema.columns
WHERE table_schema = 'ods'
AND table_name IN ('settlement_records', 'recharge_settlements')
GROUP BY table_name;
-- 预期settlement_records = 7166 业务 + 5 metarecharge_settlements = 71
-- 4) 确认 DWD 加载可从 payload 正常提取 settleList
SELECT id, (payload->'settleList') IS NOT NULL AS has_settle_list
FROM ods.settlement_records
LIMIT 5;
-- 预期has_settle_list = true至少对 payload 非空的行)
```
## 迁移文件
`database/migrations/20260214_drop_ods_settlelist.sql`

View File

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

View File

@@ -0,0 +1,70 @@
# assistant_cancellation_records 助教取消/作废记录
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | assistant_cancellation_records |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/assistant_cancellation_records.json |
| 说明 | 助教作废/取消记录 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGINT | NO | 本表主键 ID用于唯一标识一条记录 |
| 2 | siteid | BIGINT | YES | (待补充) |
| 3 | siteprofile | JSONB | YES | (待补充) |
| 4 | assistantname | TEXT | YES | (待补充) |
| 5 | assistantabolishamount | NUMERIC(18,2) | YES | (待补充) |
| 6 | assistanton | INTEGER | YES | (待补充) |
| 7 | pdchargeminutes | INTEGER | YES | (待补充) |
| 8 | tableareaid | BIGINT | YES | (待补充) |
| 9 | tablearea | TEXT | YES | (待补充) |
| 10 | tableid | BIGINT | YES | (待补充) |
| 11 | tablename | TEXT | YES | (待补充) |
| 12 | trashreason | TEXT | YES | (待补充) |
| 13 | createtime | TIMESTAMP | YES | (待补充) |
| 14 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 15 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 16 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 17 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 18 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
| 19 | tenant_id | BIGINT | YES | 租户ID |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.assistant_cancellation_records
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.assistant_cancellation_records
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/assistant_cancellation_records.json |

View File

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

View File

@@ -0,0 +1,75 @@
# goods_stock_movements 商品库存变动流水
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | goods_stock_movements |
| 主键 | sitegoodsstockid, content_hash |
| 数据来源 | export/test-json-doc/goods_stock_movements.json |
| 说明 | 商品库存变动流水 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | sitegoodsstockid | BIGINT | NO | (待补充) |
| 2 | tenantid | BIGINT | YES | (待补充) |
| 3 | siteid | BIGINT | YES | (待补充) |
| 4 | sitegoodsid | BIGINT | YES | (待补充) |
| 5 | goodsname | TEXT | YES | (待补充) |
| 6 | goodscategoryid | BIGINT | YES | (待补充) |
| 7 | goodssecondcategoryid | BIGINT | YES | (待补充) |
| 8 | unit | TEXT | YES | 库存计量单位 |
| 9 | price | NUMERIC(18,4) | YES | 商品单价(单位金额) |
| 10 | stocktype | INTEGER | YES | (待补充) |
| 11 | changenum | NUMERIC(18,4) | YES | (待补充) |
| 12 | startnum | NUMERIC(18,4) | YES | (待补充) |
| 13 | endnum | NUMERIC(18,4) | YES | (待补充) |
| 14 | changenuma | NUMERIC(18,4) | YES | (待补充) |
| 15 | startnuma | NUMERIC(18,4) | YES | (待补充) |
| 16 | endnuma | NUMERIC(18,4) | YES | (待补充) |
| 17 | remark | TEXT | YES | 备注信息,用于手工记录本次变更的特殊原因说明(例如“盘点差异调整”“报损”) |
| 18 | operatorname | TEXT | YES | (待补充) |
| 19 | createtime | TIMESTAMP | YES | (待补充) |
| 20 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 21 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 22 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 23 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 24 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.goods_stock_movements
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.goods_stock_movements
WHERE sitegoodsstockid = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/goods_stock_movements.json |

View File

@@ -0,0 +1,70 @@
# goods_stock_summary 商品库存汇总
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | goods_stock_summary |
| 主键 | sitegoodsid, content_hash |
| 数据来源 | export/test-json-doc/goods_stock_summary.json |
| 说明 | 商品库存汇总 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | sitegoodsid | BIGINT | NO | (待补充) |
| 2 | goodsname | TEXT | YES | (待补充) |
| 3 | goodsunit | TEXT | YES | (待补充) |
| 4 | goodscategoryid | BIGINT | YES | (待补充) |
| 5 | goodscategorysecondid | BIGINT | YES | (待补充) |
| 6 | categoryname | TEXT | YES | (待补充) |
| 7 | rangestartstock | NUMERIC(18,4) | YES | (待补充) |
| 8 | rangeendstock | NUMERIC(18,4) | YES | (待补充) |
| 9 | rangein | NUMERIC(18,4) | YES | (待补充) |
| 10 | rangeout | NUMERIC(18,4) | YES | (待补充) |
| 11 | rangesale | NUMERIC(18,4) | YES | (待补充) |
| 12 | rangesalemoney | NUMERIC(18,2) | YES | (待补充) |
| 13 | rangeinventory | NUMERIC(18,4) | YES | (待补充) |
| 14 | currentstock | NUMERIC(18,4) | YES | (待补充) |
| 15 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 16 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 17 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 18 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 19 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.goods_stock_summary
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.goods_stock_summary
WHERE sitegoodsid = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/goods_stock_summary.json |

View File

@@ -0,0 +1,94 @@
# group_buy_packages 团购套餐定义
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | group_buy_packages |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/group_buy_packages.json |
| 说明 | 团购套餐主数据 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGINT | NO | 门店侧套餐 ID本文件内部的主键 |
| 2 | package_id | BIGINT | YES | “上层套餐 ID” 或“总部/系统级套餐 ID” |
| 3 | package_name | TEXT | YES | 团购套餐名称,用于前台展示和核销界面 |
| 4 | selling_price | NUMERIC(18,2) | YES | 语义上应该是“团购售卖价”(顾客在平台购买券时的成交价格) |
| 5 | coupon_money | NUMERIC(18,2) | YES | 券面值或内部结算面值,表示该套餐在门店侧对应的金额额度 |
| 6 | date_type | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 7 | date_info | TEXT | YES | 预留字段,通常用来存储更细粒度的日期信息,如具体日期列表、节假日特殊规则(可能是 JSON 字符串或编码) |
| 8 | start_time | TIMESTAMP | YES | 套餐开始生效的日期时间 |
| 9 | end_time | TIMESTAMP | YES | 套餐失效的日期时间(到这个时间点后不可使用) |
| 10 | start_clock | TEXT | YES | 每日可用起始时间点(第一段) |
| 11 | end_clock | TEXT | YES | 每日可用的结束时间点(第一段) |
| 12 | add_start_clock | TEXT | YES | 附加可用时间段的起始时间(第二段) |
| 13 | add_end_clock | TEXT | YES | 附加时段结束时间,多数情况配合 "00:00:00" 或 "10:00:00" 使用 |
| 14 | duration | INTEGER | YES | 套餐内包含的时长(秒) |
| 15 | usable_count | INTEGER | YES | 可使用次数上限 |
| 16 | usable_range | INTEGER | YES | 一般用于文字描述可用日期范围(例如“周一至周五”) |
| 17 | table_area_id | BIGINT | YES | 原始设计应为“单一台区 ID”当套餐只限一个区域可以用这个字段存储 |
| 18 | table_area_name | TEXT | YES | 套餐适用的“门店台区名称”,用于显示和筛选 |
| 19 | table_area_id_list | JSONB | YES | 用来存放具体台区 ID 列表(例如 "1,2,3"),实现更细粒度的台桌限制 |
| 20 | tenant_table_area_id | BIGINT | YES | 与 table_area_id 类似,是租户层级的台区 ID原本用于单区选择 |
| 21 | tenant_table_area_id_list | JSONB | YES | 实际代表“台区集合 ID”或“租户台区配置 ID”用来限制套餐可用的台区范围 |
| 22 | site_id | BIGINT | YES | 门店 ID |
| 23 | site_name | TEXT | YES | 门店名称 |
| 24 | tenant_id | BIGINT | YES | 租户 ID品牌/商户 ID |
| 25 | card_type_ids | JSONB | YES | 原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置 |
| 26 | group_type | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 27 | system_group_type | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 28 | type | INTEGER | YES | 内部业务子类型,具体含义需要结合系统文档 |
| 29 | effective_status | INTEGER | YES | 113 条 |
| 30 | is_enabled | INTEGER | YES | 启用状态 |
| 31 | is_delete | INTEGER | YES | 逻辑删除标志 |
| 32 | max_selectable_categories | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 33 | area_tag_type | INTEGER | YES | 1 很可能代表“按台区标签限制”,例如 A区、中八区、包厢、KTV 等 |
| 34 | creator_name | TEXT | YES | 创建人信息,一般包含“角色:姓名” |
| 35 | create_time | TIMESTAMP | YES | 该套餐在系统中创建的时间 |
| 36 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 37 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 38 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 39 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 40 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
| 41 | is_first_limit | BOOLEAN | YES | 是否首单限制 |
| 42 | sort | INTEGER | YES | 排序 |
| 43 | tenantcouponsaleorderitemid | BIGINT | YES | 租户券销售订单项ID |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.group_buy_packages
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.group_buy_packages
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/group_buy_packages.json |

View File

@@ -0,0 +1,108 @@
# group_buy_redemption_records 团购核销记录
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | group_buy_redemption_records |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/group_buy_redemption_records.json |
| 说明 | 团购核销记录 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGINT | NO | 本条“团购套餐流水”记录的 主键 ID |
| 2 | tenant_id | BIGINT | YES | 租户/品牌 ID |
| 3 | site_id | BIGINT | YES | 门店 ID与其它 JSON 中一致 |
| 4 | sitename | TEXT | YES | (待补充) |
| 5 | table_id | BIGINT | YES | 球台 ID |
| 6 | tablename | TEXT | YES | (待补充) |
| 7 | tableareaname | TEXT | YES | (待补充) |
| 8 | tenant_table_area_id | BIGINT | YES | 租户级台区分组 ID表示当前使用券的台桌所属的区域组合 |
| 9 | order_trade_no | TEXT | YES | 订单交易号,和其它消费明细(台费、商品、助教、团购)共用的订单主键 |
| 10 | order_settle_id | BIGINT | YES | 结算单 ID小票结账主键 |
| 11 | order_pay_id | BIGINT | YES | 指向支付记录表中的支付流水 ID |
| 12 | order_coupon_id | BIGINT | YES | 订单中“券使用记录”的 ID |
| 13 | order_coupon_channel | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 14 | coupon_code | TEXT | YES | 团购券券码,核销时扫描/录入的字符串 |
| 15 | coupon_money | NUMERIC(18,2) | YES | 本次核销时,这张券在门店侧对应的金额额度(“可抵扣金额”) |
| 16 | coupon_origin_id | BIGINT | YES | 平台/上游系统中的券记录主键 ID“券来源 ID” |
| 17 | ledger_name | TEXT | YES | 台费侧关联的“团购项目名称”(记账名) |
| 18 | ledger_group_name | TEXT | YES | 团购项目所属的“记账分组名称”(例如“团购台费”“团购包厢”等) |
| 19 | ledger_amount | NUMERIC(18,2) | YES | 本次券实际冲抵台费的金额 |
| 20 | ledger_count | NUMERIC(18,4) | YES | 按此次优惠实际计算的“核销秒数” |
| 21 | ledger_unit_price | NUMERIC(18,4) | YES | 对应台费的标准单价,单位元/小时从数值来看是类似29.9/小时这种定价) |
| 22 | ledger_status | INTEGER | YES | 流水状态 |
| 23 | table_charge_seconds | INTEGER | YES | 本次结算中该球台总计计费的秒数(整台的台费计费时间) |
| 24 | promotion_activity_id | BIGINT | YES | 团购/促销活动 ID |
| 25 | promotion_coupon_id | BIGINT | YES | 团购套餐定义 ID |
| 26 | promotion_seconds | INTEGER | YES | 团购套餐定义的“标准时长”(券本身标称的可用时长) |
| 27 | offer_type | INTEGER | YES | 优惠类型 |
| 28 | assistant_promotion_money | NUMERIC(18,2) | YES | 分摊到“助教服务”的促销金额 |
| 29 | assistant_service_promotion_money | NUMERIC(18,2) | YES | 进一步细分助教服务的促销金额 |
| 30 | table_service_promotion_money | NUMERIC(18,2) | YES | 本次券使用中,分摊到“台费服务费”部分的促销金额 |
| 31 | goods_promotion_money | NUMERIC(18,2) | YES | 本次券使用中,分摊到“商品”部分的促销金额 |
| 32 | recharge_promotion_money | NUMERIC(18,2) | YES | 来自“充值类优惠”的分摊金额(例如储值赠送部分) |
| 33 | reward_promotion_money | NUMERIC(18,2) | YES | 本次促销中,属于“奖励金/积分抵扣”的金额 |
| 34 | goodsoptionprice | NUMERIC(18,2) | YES | (待补充) |
| 35 | salesman_name | TEXT | YES | 营业员姓名 |
| 36 | sales_man_org_id | BIGINT | YES | 营业员所属组织 ID |
| 37 | salesman_role_id | BIGINT | YES | 营业员角色 ID |
| 38 | salesman_user_id | BIGINT | YES | 营业员/业务员用户 ID |
| 39 | operator_id | BIGINT | YES | 执行本次核销/结算操作的 操作员 ID |
| 40 | operator_name | TEXT | YES | 操作员名称(包含角色说明),与 operator_id 对应的冗余展示字段 |
| 41 | is_single_order | INTEGER | YES | 是否单独作为一条订单行 |
| 42 | is_delete | INTEGER | YES | 逻辑删除标记0=否1=是) |
| 43 | create_time | TIMESTAMP | YES | 本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近) |
| 44 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 45 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 46 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 47 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 48 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
| 49 | assistant_service_share_money | NUMERIC(18,2) | YES | 助教服务分摊金额 |
| 50 | assistant_share_money | NUMERIC(18,2) | YES | 助教分摊金额 |
| 51 | coupon_sale_id | BIGINT | YES | 优惠券销售ID |
| 52 | good_service_share_money | NUMERIC(18,2) | YES | 商品服务分摊金额 |
| 53 | goods_share_money | NUMERIC(18,2) | YES | 商品分摊金额 |
| 54 | member_discount_money | NUMERIC(18,2) | YES | 会员折扣金额 |
| 55 | recharge_share_money | NUMERIC(18,2) | YES | 充值分摊金额 |
| 56 | table_service_share_money | NUMERIC(18,2) | YES | 台费服务分摊金额 |
| 57 | table_share_money | NUMERIC(18,2) | YES | 台费分摊金额 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.group_buy_redemption_records
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.group_buy_redemption_records
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/group_buy_redemption_records.json |

View File

@@ -0,0 +1,84 @@
# member_balance_changes 会员余额变更流水
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | member_balance_changes |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/member_balance_changes.json |
| 说明 | 会员余额变更流水 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | tenant_id | BIGINT | YES | 租户/商户 ID本数据中是固定值同一品牌/商户) |
| 2 | site_id | BIGINT | YES | 非 0记录所属的具体门店 ID与其他 JSON 内的 site_id 一致) |
| 3 | register_site_id | BIGINT | YES | 会员卡的“注册门店 ID”即办卡所在门店 |
| 4 | registersitename | TEXT | YES | (待补充) |
| 5 | paysitename | TEXT | YES | (待补充) |
| 6 | id | BIGINT | NO | 余额变更记录的主键 ID唯一标识这一条“账户余额变化事件” |
| 7 | tenant_member_id | BIGINT | YES | 商户维度的会员 ID租户内会员主键 |
| 8 | tenant_member_card_id | BIGINT | YES | 会员卡账户 ID在租户内唯一标识某张卡 |
| 9 | system_member_id | BIGINT | YES | 系统级(全局)会员 ID |
| 10 | membername | TEXT | YES | (待补充) |
| 11 | membermobile | TEXT | YES | (待补充) |
| 12 | card_type_id | BIGINT | YES | 卡种类型 ID用于区分不同卡种 |
| 13 | membercardtypename | TEXT | YES | (待补充) |
| 14 | account_data | NUMERIC(18,2) | YES | 本次变动的金额(元),正数表示增加,负数表示减少 |
| 15 | before | NUMERIC(18,2) | YES | 本次变动前,该卡账户的余额(元) |
| 16 | after | NUMERIC(18,2) | YES | 本次变动后,该卡账户的余额(元) |
| 17 | refund_amount | NUMERIC(18,2) | YES | 可能用于标记“其中有多少金额是以‘退款’形式回流的”,或区分“退回余额”和“原路退回”两种模式 |
| 18 | from_type | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 19 | payment_method | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 20 | relate_id | BIGINT | YES | 例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等 |
| 21 | remark | TEXT | YES | 当为空时,说明这条变动没有额外备注说明 |
| 22 | operator_id | BIGINT | YES | 执行此次余额变更操作的员工 ID |
| 23 | operator_name | TEXT | YES | 操作员姓名(带职位前缀),是对 operator_id 的可读冗余字段 |
| 24 | is_delete | INTEGER | YES | 逻辑删除标记0=否1=是) |
| 25 | create_time | TIMESTAMP | YES | 本条余额变更记录的创建时间,通常接近交易发生时间 |
| 26 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 27 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 28 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 29 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 30 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
| 31 | principal_after | NUMERIC(18,2) | YES | 变动后本金 |
| 32 | principal_before | NUMERIC(18,2) | YES | 变动前本金 |
| 33 | principal_data | TEXT | YES | 本金变动数据 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.member_balance_changes
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.member_balance_changes
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/member_balance_changes.json |

View File

@@ -0,0 +1,76 @@
# member_profiles 会员档案/账户信息
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | member_profiles |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/member_profiles.json |
| 说明 | 会员档案/会员账户信息 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | tenant_id | BIGINT | YES | 租户/品牌 ID |
| 2 | register_site_id | BIGINT | YES | 会员的注册门店 ID |
| 3 | site_name | TEXT | YES | 注册门店名称,属于冗余字段,用于直接展示 |
| 4 | id | BIGINT | NO | 这是“租户内会员账户”的主键 ID |
| 5 | system_member_id | BIGINT | YES | 这是“系统级会员 ID”在全平台唯一用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上 |
| 6 | member_card_grade_code | BIGINT | YES | 这两个字段是成对出现的:一个数值码,一个中文名称 |
| 7 | member_card_grade_name | TEXT | YES | 这是“会员卡种类/等级”的定义字段 |
| 8 | mobile | TEXT | YES | 会员绑定的手机号码 |
| 9 | nickname | TEXT | YES | 会员在当前租户下的显示名称(可以是姓名,也可以是昵称) |
| 10 | point | NUMERIC(18,2) | YES | 当前积分余额(这条会员账户的积分值) |
| 11 | growth_value | NUMERIC(18,2) | YES | 成长值 / 经验值,用于会员等级晋升的累计指标 |
| 12 | referrer_member_id | BIGINT | YES | 推荐人会员 ID用于记录该会员是由哪位老会员推荐 |
| 13 | status | INTEGER | YES | 帐户状态(偏“卡状态/档案状态”) |
| 14 | user_status | INTEGER | YES | 用户账号状态(偏“用户逻辑”层面的状态) |
| 15 | create_time | TIMESTAMP | YES | 会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间) |
| 16 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 17 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 18 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 19 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 20 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
| 21 | pay_money_sum | NUMERIC(18,2) | YES | 累计支付金额 |
| 22 | person_tenant_org_id | BIGINT | YES | 人员租户组织ID |
| 23 | person_tenant_org_name | TEXT | YES | 人员租户组织名称 |
| 24 | recharge_money_sum | NUMERIC(18,2) | YES | 累计充值金额 |
| 25 | register_source | TEXT | YES | 注册来源 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.member_profiles
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.member_profiles
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/member_profiles.json |

View File

@@ -0,0 +1,131 @@
# member_stored_value_cards 会员储值/卡券账户
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | member_stored_value_cards |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/member_stored_value_cards.json |
| 说明 | 会员储值/卡券账户列表 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | tenant_id | BIGINT | YES | 租户/品牌 ID与其他 JSON 中 tenant_id 一致 |
| 2 | tenant_member_id | BIGINT | YES | 当前商户(品牌/租户)中会员的主键 ID |
| 3 | system_member_id | BIGINT | YES | 系统级会员 ID跨门店统一主键 |
| 4 | register_site_id | BIGINT | YES | 卡首次办理的门店 ID |
| 5 | site_name | TEXT | YES | 卡归属门店名称(视图中的展示字段) |
| 6 | id | BIGINT | NO | 本表主键 ID用于唯一标识一条记录 |
| 7 | member_card_grade_code | BIGINT | YES | 卡等级/卡类代码,和下面两个名称字段一一对应 |
| 8 | member_card_grade_code_name | TEXT | YES | 卡等级/卡类名称 |
| 9 | member_card_type_name | TEXT | YES | 卡类型名称,实际与 member_card_grade_code_name 一致 |
| 10 | member_name | TEXT | YES | 持卡会员姓名快照 |
| 11 | member_mobile | TEXT | YES | 持卡会员手机号快照 |
| 12 | card_type_id | BIGINT | YES | 卡种 ID定义“这是哪一种卡” |
| 13 | card_no | TEXT | YES | 实体卡物理卡号/条码号 |
| 14 | card_physics_type | TEXT | YES | 物理卡类型 |
| 15 | balance | NUMERIC(18,2) | YES | 当前卡内余额(主要针对储值卡、部分券卡) |
| 16 | denomination | NUMERIC(18,2) | YES | 采用“几折”的记法10=不打折9=九折8=八折 |
| 17 | table_discount | NUMERIC(10,4) | YES | 数量/时长字段,用于统计与计量 |
| 18 | goods_discount | NUMERIC(10,4) | YES | 数量/时长字段,用于统计与计量 |
| 19 | assistant_discount | NUMERIC(10,4) | YES | 数量/时长字段,用于统计与计量 |
| 20 | assistant_reward_discount | NUMERIC(10,4) | YES | 数量/时长字段,用于统计与计量 |
| 21 | table_service_discount | NUMERIC(10,4) | YES | 数量/时长字段,用于统计与计量 |
| 22 | assistant_service_discount | NUMERIC(10,4) | YES | 数量/时长字段,用于统计与计量 |
| 23 | coupon_discount | NUMERIC(10,4) | YES | 数量/时长字段,用于统计与计量 |
| 24 | goods_service_discount | NUMERIC(10,4) | YES | 数量/时长字段,用于统计与计量 |
| 25 | assistant_discount_sub_switch | INTEGER | YES | 数量/时长字段,用于统计与计量 |
| 26 | table_discount_sub_switch | INTEGER | YES | 数量/时长字段,用于统计与计量 |
| 27 | goods_discount_sub_switch | INTEGER | YES | 数量/时长字段,用于统计与计量 |
| 28 | assistant_reward_discount_sub_switch | INTEGER | YES | 数量/时长字段,用于统计与计量 |
| 29 | table_service_deduct_radio | NUMERIC(10,4) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 30 | assistant_service_deduct_radio | NUMERIC(10,4) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 31 | goods_service_deduct_radio | NUMERIC(10,4) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 32 | assistant_deduct_radio | NUMERIC(10,4) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 33 | table_deduct_radio | NUMERIC(10,4) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 34 | goods_deduct_radio | NUMERIC(10,4) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 35 | coupon_deduct_radio | NUMERIC(10,4) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 36 | assistant_reward_deduct_radio | NUMERIC(10,4) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 37 | tablecarddeduct | NUMERIC(18,2) | YES | (待补充) |
| 38 | tableservicecarddeduct | NUMERIC(18,2) | YES | (待补充) |
| 39 | goodscardeduct | NUMERIC(18,2) | YES | (待补充) |
| 40 | goodsservicecarddeduct | NUMERIC(18,2) | YES | (待补充) |
| 41 | assistantcarddeduct | NUMERIC(18,2) | YES | (待补充) |
| 42 | assistantservicecarddeduct | NUMERIC(18,2) | YES | (待补充) |
| 43 | assistantrewardcarddeduct | NUMERIC(18,2) | YES | (待补充) |
| 44 | cardsettlededuct | NUMERIC(18,2) | YES | (待补充) |
| 45 | couponcarddeduct | NUMERIC(18,2) | YES | (待补充) |
| 46 | deliveryfeededuct | NUMERIC(18,2) | YES | (待补充) |
| 47 | use_scene | INTEGER | YES | 卡使用场景说明(比如“仅店内使用”“仅团建”等),本门店尚未使用此字段 |
| 48 | able_cross_site | INTEGER | YES | 是否允许跨店使用 |
| 49 | is_allow_give | INTEGER | YES | 是否允许转赠/转让给其他会员 |
| 50 | is_allow_order_deduct | INTEGER | YES | 是否允许在“订单层面统一扣款” |
| 51 | is_delete | INTEGER | YES | 逻辑删除标志 |
| 52 | bind_password | TEXT | YES | 卡绑定密码,用于消费或查询验证(目前未启用) |
| 53 | goods_discount_range_type | INTEGER | YES | 数量/时长字段,用于统计与计量 |
| 54 | goodscategoryid | BIGINT | YES | (待补充) |
| 55 | tableareaid | BIGINT | YES | (待补充) |
| 56 | effect_site_id | BIGINT | YES | 卡片限定生效门店 ID |
| 57 | start_time | TIMESTAMP | YES | 卡片生效开始时间(有效期起始) |
| 58 | end_time | TIMESTAMP | YES | 卡片有效期结束时间 |
| 59 | disable_start_time | TIMESTAMP | YES | 停用时间段(比如临时冻结卡的起止时间) |
| 60 | disable_end_time | TIMESTAMP | YES | 停用时间段(比如临时冻结卡的起止时间) |
| 61 | last_consume_time | TIMESTAMP | YES | 最近一次消费时间 |
| 62 | create_time | TIMESTAMP | YES | 卡片创建时间(开卡时间) |
| 63 | status | INTEGER | YES | 状态枚举,用于标识记录当前业务状态 |
| 64 | sort | INTEGER | YES | 在前端展示或某些列表中的排序权重 |
| 65 | tenantavatar | TEXT | YES | (待补充) |
| 66 | tenantname | TEXT | YES | (待补充) |
| 67 | pdassisnatlevel | TEXT | YES | (待补充) |
| 68 | cxassisnatlevel | TEXT | YES | (待补充) |
| 69 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 70 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 71 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 72 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 73 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
| 74 | able_share_member_discount | BOOLEAN | YES | 是否可共享会员折扣 |
| 75 | electricity_deduct_radio | NUMERIC(18,4) | YES | 电费扣减比例 |
| 76 | electricity_discount | NUMERIC(18,4) | YES | 电费折扣 |
| 77 | electricitycarddeduct | BOOLEAN | YES | 电费卡扣 |
| 78 | member_grade | BIGINT | YES | 会员等级 |
| 79 | principal_balance | NUMERIC(18,2) | YES | 本金余额 |
| 80 | rechargefreezebalance | NUMERIC(18,2) | YES | 充值冻结余额 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.member_stored_value_cards
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.member_stored_value_cards
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/member_stored_value_cards.json |

View File

@@ -0,0 +1,68 @@
# payment_transactions 支付交易记录
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | payment_transactions |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/payment_transactions.json |
| 说明 | 支付流水 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGINT | NO | 支付流水记录的主键 ID |
| 2 | site_id | BIGINT | YES | 支付记录所属的门店 ID |
| 3 | siteprofile | JSONB | YES | (待补充) |
| 4 | relate_type | INTEGER | YES | 表示“这条支付记录关联的业务类型” |
| 5 | relate_id | BIGINT | YES | 关联业务记录的主键 ID按 relate_type 不同指向不同表) |
| 6 | pay_amount | NUMERIC(18,2) | YES | 本条支付流水的“支付金额”,单位为元 |
| 7 | pay_status | INTEGER | YES | 支付状态枚举字段 |
| 8 | pay_time | TIMESTAMP | YES | 实际支付完成时间(支付状态变为成功的时间戳) |
| 9 | create_time | TIMESTAMP | YES | 支付记录创建时间,通常与发起支付请求的时间一致(创建支付流水的时间戳) |
| 10 | payment_method | INTEGER | YES | 支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种 |
| 11 | online_pay_channel | INTEGER | YES | 每一笔结账单settleList.id对应一条支付记录当前样本中是一条记录relate_id 唯一) |
| 12 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 13 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 14 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 15 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 16 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
| 17 | tenant_id | BIGINT | YES | 租户ID |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.payment_transactions
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.payment_transactions
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/payment_transactions.json |

View File

@@ -0,0 +1,82 @@
# platform_coupon_redemption_records 平台券核销记录
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | platform_coupon_redemption_records |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/platform_coupon_redemption_records.json |
| 说明 | 平台券核销/使用记录 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGINT | NO | 本条平台验券记录在本系统内的主键 ID |
| 2 | verify_id | BIGINT | YES | 平台核销记录 ID某些平台会为每一次核销生成一个唯一 ID |
| 3 | certificate_id | TEXT | YES | 平台侧的凭证 ID通常由第三方团购平台生成的券实例 ID |
| 4 | coupon_code | TEXT | YES | 券码,顾客出示的团购券密码/编号 |
| 5 | coupon_name | TEXT | YES | 团购券产品名称(即第三方平台上向顾客展示的名称) |
| 6 | coupon_channel | INTEGER | YES | 券来源渠道(第三方平台渠道编号) |
| 7 | groupon_type | INTEGER | YES | 团购券类型 |
| 8 | group_package_id | BIGINT | YES | 标识类 ID 字段,用于关联/定位相关实体 |
| 9 | sale_price | NUMERIC(18,2) | YES | 顾客在第三方平台上实际支付的价格(团购售价) |
| 10 | coupon_money | NUMERIC(18,2) | YES | 券面值 / 套餐价值(系统层面的“可抵扣金额或对应套餐价值”) |
| 11 | coupon_free_time | NUMERIC(18,2) | YES | 券附带的“免费时长”字段(例如送多少分钟台费) |
| 12 | coupon_cover | TEXT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 13 | coupon_remark | TEXT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 14 | use_status | INTEGER | YES | 值 1198 条 |
| 15 | consume_time | TIMESTAMP | YES | 券被核销/使用的业务时间 |
| 16 | create_time | TIMESTAMP | YES | 验券记录在本系统中创建的时间(记录入库时间) |
| 17 | deal_id | TEXT | YES | 另一个层次的团购产品 ID |
| 18 | channel_deal_id | TEXT | YES | 渠道侧 dealId / 产品 ID一般是第三方平台给该团购商品定义的主键 |
| 19 | site_id | BIGINT | YES | 门店 ID |
| 20 | site_order_id | BIGINT | YES | 门店内部的订单 ID平台券核销时对应的店内订单 |
| 21 | table_id | BIGINT | YES | 使用券的球台 ID |
| 22 | tenant_id | BIGINT | YES | 商户/租户 ID品牌级别 |
| 23 | operator_id | BIGINT | YES | 操作员 ID执行验券操作的收银员/员工) |
| 24 | operator_name | TEXT | YES | 操作员姓名,例如 "收银员:郑丽珊" |
| 25 | is_delete | INTEGER | YES | 把平台验券记录挂到本门店的一条订单上 |
| 26 | siteprofile | JSONB | YES | (待补充) |
| 27 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 28 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 29 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 30 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 31 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.platform_coupon_redemption_records
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.platform_coupon_redemption_records
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/platform_coupon_redemption_records.json |

View File

@@ -0,0 +1,122 @@
# recharge_settlements 充值结算记录
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | recharge_settlements |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/recharge_settlements.json |
| 说明 | 充值结算记录 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGINT | NO | 门店 ID |
| 2 | tenantid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 3 | siteid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 4 | sitename | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 5 | balanceamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 6 | cardamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 7 | cashamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 8 | couponamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 9 | createtime | TIMESTAMPTZ | YES | 时间字段,用于记录业务时间点/发生时间 |
| 10 | memberid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 11 | membername | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 12 | tenantmembercardid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 13 | membercardtypename | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 14 | memberphone | TEXT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 15 | tableid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 16 | consumemoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 17 | onlineamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 18 | operatorid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 19 | operatorname | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 20 | revokeorderid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 21 | revokeordername | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 22 | revoketime | TIMESTAMPTZ | YES | 时间字段,用于记录业务时间点/发生时间 |
| 23 | payamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 24 | pointamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 25 | refundamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 26 | settlename | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 27 | settlerelateid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 28 | settlestatus | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 29 | settletype | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 30 | paytime | TIMESTAMPTZ | YES | 时间字段,用于记录业务时间点/发生时间 |
| 31 | roundingamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 32 | paymentmethod | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 33 | adjustamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 34 | assistantcxmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 35 | assistantpdmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 36 | couponsaleamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 37 | memberdiscountamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 38 | tablechargemoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 39 | goodsmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 40 | realgoodsmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 41 | servicemoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 42 | prepaymoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 43 | salesmanname | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 44 | orderremark | TEXT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 45 | salesmanuserid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 46 | canberevoked | BOOLEAN | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 47 | pointdiscountprice | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 48 | pointdiscountcost | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 49 | activitydiscount | NUMERIC(18,2) | YES | 数量/时长字段,用于统计与计量 |
| 50 | serialnumber | BIGINT | YES | 数量/时长字段,用于统计与计量 |
| 51 | assistantmanualdiscount | NUMERIC(18,2) | YES | 数量/时长字段,用于统计与计量 |
| 52 | allcoupondiscount | NUMERIC(18,2) | YES | 数量/时长字段,用于统计与计量 |
| 53 | goodspromotionmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 54 | assistantpromotionmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 55 | isusecoupon | BOOLEAN | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 56 | isusediscount | BOOLEAN | YES | 数量/时长字段,用于统计与计量 |
| 57 | isactivity | BOOLEAN | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 58 | isbindmember | BOOLEAN | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 59 | isfirst | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 60 | rechargecardamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 61 | giftcardamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 62 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 63 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 64 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 65 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 66 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
| 67 | electricityadjustmoney | NUMERIC(18,2) | YES | 电费调整金额 |
| 68 | electricitymoney | NUMERIC(18,2) | YES | 电费金额 |
| 69 | mervousalesamount | NUMERIC(18,2) | YES | 商户券销售额 |
| 70 | plcouponsaleamount | NUMERIC(18,2) | YES | 平台券销售额 |
| 71 | realelectricitymoney | NUMERIC(18,2) | YES | 实际电费金额 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.recharge_settlements
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.recharge_settlements
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/recharge_settlements.json |

View File

@@ -0,0 +1,88 @@
# refund_transactions 退款交易记录
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | refund_transactions |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/refund_transactions.json |
| 说明 | 退款流水 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGINT | NO | 本条 退款流水 的唯一 ID |
| 2 | tenant_id | BIGINT | YES | 租户/品牌 ID全系统维度标识该商户 |
| 3 | tenantname | TEXT | YES | (待补充) |
| 4 | site_id | BIGINT | YES | 门店 ID |
| 5 | siteprofile | JSONB | YES | (待补充) |
| 6 | relate_type | INTEGER | YES | 本退款对应的“业务类型” |
| 7 | relate_id | BIGINT | YES | 本次退款关联的业务 ID |
| 8 | pay_sn | TEXT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 9 | pay_amount | NUMERIC(18,2) | YES | 本次退款的 资金变动金额 |
| 10 | refund_amount | NUMERIC(18,2) | YES | 设计上本应显示“实际退款金额”(正数),与 pay_amount 配合使用 |
| 11 | round_amount | NUMERIC(18,2) | YES | 舍入金额/抹零金额 |
| 12 | pay_status | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 13 | pay_time | TIMESTAMP | YES | 退款在支付渠道层面实际发生的时间 |
| 14 | create_time | TIMESTAMP | YES | 本条退款流水在系统内创建时间 |
| 15 | payment_method | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 16 | pay_terminal | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 17 | pay_config_id | BIGINT | YES | 支付配置 ID例如商户在“非球科技”内配置的某一条支付通道某个微信商户号、银联通道的主键 |
| 18 | online_pay_channel | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 19 | online_pay_type | INTEGER | YES | 当前:全部 0 |
| 20 | channel_fee | NUMERIC(18,2) | YES | 第三方支付渠道对本次退款收取的手续费 |
| 21 | channel_payer_id | TEXT | YES | 支付渠道侧的 payer ID例如微信 openid、银行卡号掩码等 |
| 22 | channel_pay_no | TEXT | YES | 第三方支付平台的交易号(如微信支付单号、支付宝交易号等) |
| 23 | member_id | BIGINT | YES | 租户内部的会员 ID对应会员档案中的某个主键 |
| 24 | member_card_id | BIGINT | YES | 关联的会员卡账户 ID对应“储值卡列表”或“会员档案”中的某一张卡 |
| 25 | cashier_point_id | BIGINT | YES | 收银点 ID例如前台 1、前台 2、自助机等 |
| 26 | operator_id | BIGINT | YES | 执行该退款操作的操作员 ID |
| 27 | action_type | INTEGER | YES | 当前:全部 2 |
| 28 | check_status | INTEGER | YES | 当前:全部 1 |
| 29 | is_revoke | INTEGER | YES | 布尔/开关字段,用于表示权限、可用性或状态开关 |
| 30 | is_delete | INTEGER | YES | 逻辑删除标志 |
| 31 | balance_frozen_amount | NUMERIC(18,2) | YES | 涉及会员储值卡退款时,暂时冻结的余额金额 |
| 32 | card_frozen_amount | NUMERIC(18,2) | YES | 与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关 |
| 33 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 34 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 35 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 36 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 37 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.refund_transactions
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.refund_transactions
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/refund_transactions.json |

View File

@@ -0,0 +1,122 @@
# settlement_records 结算记录(台费+商品+助教)
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | settlement_records |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/settlement_records.json |
| 说明 | 结账/结算记录 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGINT | NO | 结账记录主键 ID订单结算 ID |
| 2 | tenantid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 3 | siteid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 4 | sitename | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 5 | balanceamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 6 | cardamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 7 | cashamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 8 | couponamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 9 | createtime | TIMESTAMPTZ | YES | 时间字段,用于记录业务时间点/发生时间 |
| 10 | memberid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 11 | membername | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 12 | tenantmembercardid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 13 | membercardtypename | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 14 | memberphone | TEXT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 15 | tableid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 16 | consumemoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 17 | onlineamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 18 | operatorid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 19 | operatorname | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 20 | revokeorderid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 21 | revokeordername | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 22 | revoketime | TIMESTAMPTZ | YES | 时间字段,用于记录业务时间点/发生时间 |
| 23 | payamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 24 | pointamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 25 | refundamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 26 | settlename | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 27 | settlerelateid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 28 | settlestatus | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 29 | settletype | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 30 | paytime | TIMESTAMPTZ | YES | 时间字段,用于记录业务时间点/发生时间 |
| 31 | roundingamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 32 | paymentmethod | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 33 | adjustamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 34 | assistantcxmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 35 | assistantpdmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 36 | couponsaleamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 37 | memberdiscountamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 38 | tablechargemoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 39 | goodsmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 40 | realgoodsmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 41 | servicemoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 42 | prepaymoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 43 | salesmanname | TEXT | YES | 名称字段,用于展示与辅助识别 |
| 44 | orderremark | TEXT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 45 | salesmanuserid | BIGINT | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 46 | canberevoked | BOOLEAN | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 47 | pointdiscountprice | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 48 | pointdiscountcost | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 49 | activitydiscount | NUMERIC(18,2) | YES | 数量/时长字段,用于统计与计量 |
| 50 | serialnumber | BIGINT | YES | 数量/时长字段,用于统计与计量 |
| 51 | assistantmanualdiscount | NUMERIC(18,2) | YES | 数量/时长字段,用于统计与计量 |
| 52 | allcoupondiscount | NUMERIC(18,2) | YES | 数量/时长字段,用于统计与计量 |
| 53 | goodspromotionmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 54 | assistantpromotionmoney | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 55 | isusecoupon | BOOLEAN | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 56 | isusediscount | BOOLEAN | YES | 数量/时长字段,用于统计与计量 |
| 57 | isactivity | BOOLEAN | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 58 | isbindmember | BOOLEAN | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 59 | isfirst | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 60 | rechargecardamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 61 | giftcardamount | NUMERIC(18,2) | YES | 金额字段,用于计费/结算/分摊等金额计算 |
| 62 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 63 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 64 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 65 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 66 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
| 67 | electricityadjustmoney | NUMERIC(18,2) | YES | 电费调整金额 |
| 68 | electricitymoney | NUMERIC(18,2) | YES | 电费金额 |
| 69 | mervousalesamount | NUMERIC(18,2) | YES | 商户券销售额 |
| 70 | plcouponsaleamount | NUMERIC(18,2) | YES | 平台券销售额 |
| 71 | realelectricitymoney | NUMERIC(18,2) | YES | 实际电费金额 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.settlement_records
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.settlement_records
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/settlement_records.json |

View File

@@ -0,0 +1,94 @@
# settlement_ticket_details 结算小票明细
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | settlement_ticket_details |
| 主键 | ordersettleid, content_hash |
| 数据来源 | export/test-json-doc/settlement_ticket_details.json |
| 说明 | 结算小票明细 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | ordersettleid | BIGINT | NO | (待补充) |
| 2 | actualpayment | NUMERIC(18,2) | YES | (待补充) |
| 3 | adjustamount | NUMERIC(18,2) | YES | (待补充) |
| 4 | assistantmanualdiscount | NUMERIC(18,2) | YES | (待补充) |
| 5 | balanceamount | NUMERIC(18,2) | YES | (待补充) |
| 6 | cashiername | TEXT | YES | (待补充) |
| 7 | consumemoney | NUMERIC(18,2) | YES | (待补充) |
| 8 | couponamount | NUMERIC(18,2) | YES | (待补充) |
| 9 | deliveryaddress | TEXT | YES | (待补充) |
| 10 | deliveryfee | NUMERIC(18,2) | YES | (待补充) |
| 11 | ledgeramount | NUMERIC(18,2) | YES | (待补充) |
| 12 | memberdeductamount | NUMERIC(18,2) | YES | (待补充) |
| 13 | memberofferamount | NUMERIC(18,2) | YES | (待补充) |
| 14 | onlinereturnamount | NUMERIC(18,2) | YES | (待补充) |
| 15 | orderremark | TEXT | YES | (待补充) |
| 16 | ordersettlenumber | BIGINT | YES | (待补充) |
| 17 | paymemberbalance | NUMERIC(18,2) | YES | (待补充) |
| 18 | paytime | TIMESTAMP | YES | (待补充) |
| 19 | paymentmethod | INTEGER | YES | (待补充) |
| 20 | pointdiscountcost | NUMERIC(18,2) | YES | (待补充) |
| 21 | pointdiscountprice | NUMERIC(18,2) | YES | (待补充) |
| 22 | prepaymoney | NUMERIC(18,2) | YES | (待补充) |
| 23 | refundamount | NUMERIC(18,2) | YES | (待补充) |
| 24 | returngoodsamount | NUMERIC(18,2) | YES | (待补充) |
| 25 | rewardname | TEXT | YES | (待补充) |
| 26 | settletype | TEXT | YES | (待补充) |
| 27 | siteaddress | TEXT | YES | (待补充) |
| 28 | sitebusinesstel | TEXT | YES | (待补充) |
| 29 | siteid | BIGINT | YES | (待补充) |
| 30 | sitename | TEXT | YES | (待补充) |
| 31 | tenantid | BIGINT | YES | (待补充) |
| 32 | tenantname | TEXT | YES | (待补充) |
| 33 | ticketcustomcontent | TEXT | YES | (待补充) |
| 34 | ticketremark | TEXT | YES | (待补充) |
| 35 | vouchermoney | NUMERIC(18,2) | YES | (待补充) |
| 36 | memberprofile | JSONB | YES | (待补充) |
| 37 | orderitem | JSONB | YES | (待补充) |
| 38 | tenantmembercardlogs | JSONB | YES | (待补充) |
| 39 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 40 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 41 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 42 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 43 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.settlement_ticket_details
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.settlement_ticket_details
WHERE ordersettleid = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/settlement_ticket_details.json |

View File

@@ -0,0 +1,82 @@
# site_tables_master 门店台桌主表
> 生成时间2026-02-14
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | site_tables_master |
| 主键 | id, content_hash |
| 数据来源 | export/test-json-doc/site_tables_master.json |
| 说明 | 门店桌台主数据 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGINT | NO | 台桌主键 ID |
| 2 | site_id | BIGINT | YES | 门店 ID |
| 3 | sitename | TEXT | YES | (待补充) |
| 4 | appletQrCodeUrl | TEXT | YES | (待补充) |
| 5 | areaname | TEXT | YES | (待补充) |
| 6 | audit_status | INTEGER | YES | 当前值:全部为 2 |
| 7 | charge_free | INTEGER | YES | 当前值:全部为 0 |
| 8 | create_time | TIMESTAMP | YES | 台桌配置的创建时间或最近一次创建/复制时间 |
| 9 | delay_lights_time | INTEGER | YES | 台灯熄灭延迟时间(单位多半是秒或分钟),用于结账后延时关灯 |
| 10 | is_online_reservation | INTEGER | YES | 布尔/开关字段,用于表示权限、可用性或状态开关 |
| 11 | is_rest_area | INTEGER | YES | 当前值:全部为 0 |
| 12 | light_status | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 13 | only_allow_groupon | INTEGER | YES | 小程序二维码 URL |
| 14 | order_delay_time | INTEGER | YES | 订单层面允许的“自动延时时长”(例如到点后自动延长多少时间继续计费) |
| 15 | self_table | INTEGER | YES | 当前值:全部为 1 |
| 16 | show_status | INTEGER | YES | 来自 JSON 导出的原始字段,用于保留业务取值 |
| 17 | site_table_area_id | BIGINT | YES | 门店维度的“台桌区域 ID” |
| 18 | tablestatusname | TEXT | YES | (待补充) |
| 19 | table_cloth_use_cycle | INTEGER | YES | (待补充) |
| 20 | table_cloth_use_time | TIMESTAMP | YES | 时间字段,用于记录业务时间点/发生时间 |
| 21 | table_name | TEXT | YES | 台号/台名称,用于前台操作界面展示,也出现在小票和各种流水中的 ledger_name 或 tableName 字段 |
| 22 | table_price | NUMERIC(18,2) | YES | 设计上应为“台的基础单价”字段(例如按小时或按局单价) |
| 23 | table_status | INTEGER | YES | 台当前运行状态,真实反映某一时刻台的占用/暂停情况 |
| 24 | temporary_light_second | INTEGER | YES | 临时点灯时长(秒),例如手动临时开灯一段时间 |
| 25 | virtual_table | INTEGER | YES | 当前值:全部为 0 |
| 26 | source_file | TEXT | YES | ETL 元数据:原始导出文件名,用于数据追溯 |
| 27 | source_endpoint | TEXT | YES | ETL 元数据:采集来源(接口/文件路径),用于数据追溯 |
| 28 | fetched_at | TIMESTAMPTZ | YES | ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理 |
| 29 | payload | JSONB | NO | ETL 元数据:完整原始 JSON 记录快照,用于回溯与二次解析 |
| 30 | content_hash | TEXT | NO | ETL 元数据:对业务字段计算 SHA256用于变更检测与去重 |
| 31 | order_id | BIGINT | YES | 订单ID |
## 使用说明
```sql
-- 查询最新入库的记录
SELECT * FROM ods.site_tables_master
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 按业务主键查询某条记录的所有版本
SELECT * FROM ods.site_tables_master
WHERE id = <value>
ORDER BY fetched_at DESC;
```
## ETL 元数据字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| content_hash | TEXT | 对业务字段计算 SHA256用于变更检测与去重 |
| source_file | TEXT | 原始导出文件名,用于数据追溯 |
| source_endpoint | TEXT | 采集来源(接口/文件路径),用于数据追溯 |
| fetched_at | TIMESTAMPTZ | 采集/入库时间戳,用于口径对齐与增量处理 |
| payload | JSONB | 完整原始 JSON 记录快照,用于回溯与二次解析 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | export/test-json-doc/site_tables_master.json |

Some files were not shown because too many files have changed in this diff Show More