# 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 | 1：13 条 |
| 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 |
