# 助教撤销记录（GetAbolitionAssistant） → assistant_cancellation_records 字段映射

> 生成时间：2026-02-14

## 端点信息

| 属性 | 值 |
|------|-----|
| 接口路径 | `AssistantPerformance/GetAbolitionAssistant` |
| 请求方法 | POST |
| ODS 对应表 | `ods.assistant_cancellation_records` |
| JSON 数据路径 | `data.abolitionAssistants` |

## 字段映射

| JSON 字段 | ODS 列名 | 类型转换 | 说明 |
|-----------|----------|----------|------|
| id | id | int→BIGINT（`parse_int`） | 本表主键 ID，用于唯一标识一条记录 |
| siteId | siteId | int→BIGINT（`parse_int`） | 门店 ID，即该废除记录所在门店 |
| siteProfile | siteProfile | object→JSONB（原样存储） | 门店信息快照 |
| assistantName | assistantName | string→TEXT（原样） | 助教姓名/对外展示名称 |
| assistantAbolishAmount | assistantAbolishAmount | float→NUMERIC(18,2)（`parse_decimal`） | 与“助教废除”关联的金额字段 |
| assistantOn | assistantOn | int→INT（`parse_int`） | 助教编号（工号/序号） |
| pdChargeMinutes | pdChargeMinutes | int→INT（`parse_int`） | “已发生的计费时长（分钟）”，即这次助教服务在被废除前已经累计了多少分钟 |
| tableAreaId | tableAreaId | int→BIGINT（`parse_int`） | 台桌所在区域 ID |
| tableArea | tableArea | string→TEXT（原样） | 台桌所属区域名称 |
| tableId | tableId | int→BIGINT（`parse_int`） | 球台/桌子的 ID |
| tableName | tableName | string→TEXT（原样） | 台桌名称/编号，供人阅读 |
| trashReason | trashReason | string→TEXT（原样） | 用于记录“废除原因”的文本描述，例如“顾客临时有事取消”“录入错误”“更换助教”等 |
| createTime | createTime | string→TIMESTAMP（`parse_timestamp`） | 这条“助教废除记录”被创建的时间，即系统正式记录“废除”操作的时刻 |
| tenant_id | tenant_id | int→BIGINT（`parse_int`） | 租户/品牌 ID |

## ETL 补充字段

| ODS 列名 | 生成逻辑 |
|-----------|----------|
| content_hash | 对业务字段（排除 ETL 元数据列）计算 SHA-256，用于变更检测与去重 |
| source_file | 固定值：`assistant_cancellation_records.json`，标识原始导出文件 |
| source_endpoint | API 端点路径，如 `AssistantPerformance/GetAbolitionAssistant` |
| fetched_at | ETL 入库时间戳（`TIMESTAMPTZ DEFAULT now()`） |
| payload | 完整原始 JSON 记录快照（`JSONB NOT NULL`），用于回溯与二次解析 |

## 类型转换规则

- **时间戳**：通过 `TypeParser.parse_timestamp()` 转换，支持 ISO 字符串和 Unix 毫秒时间戳，自动处理时区
- **金额**：通过 `TypeParser.parse_decimal(value, scale=2)` 转换，`ROUND_HALF_UP` 四舍五入
- **整数**：通过 `TypeParser.parse_int()` 转换，`None` 保持为 `NULL`
- **字符串**：原样保留，`None` / 空字符串均存为 `NULL` 或空文本
- **布尔值**：API 返回 `true/false`，ODS 存为 `BOOLEAN` 或 `INT`（0/1）
- **JSONB**：`siteProfile`、`payload` 等复合对象直接以 `JSONB` 类型存储
