# 退款流水（GetRefundPayLogList） → refund_transactions 字段映射

> 生成时间：2026-02-14

## 端点信息

| 属性 | 值 |
|------|-----|
| 接口路径 | `Order/GetRefundPayLogList` |
| 请求方法 | POST |
| ODS 对应表 | `ods.refund_transactions` |
| JSON 数据路径 | `$（平铺结构，外层含 siteProfile）` |

## 字段映射

| JSON 字段 | ODS 列名 | 类型转换 | 说明 |
|-----------|----------|----------|------|
| id | id | int→BIGINT（`parse_int`） | 本条 退款流水 的唯一 ID |
| tenant_id | tenant_id | int→BIGINT（`parse_int`） | 租户/品牌 ID，全系统维度标识该商户 |
| tenantName | tenantName | string→TEXT（原样） | 租户（商户）名称 |
| site_id | site_id | int→BIGINT（`parse_int`） | 门店 ID |
| siteProfile | siteProfile | object→JSONB（原样存储） | 门店信息快照，结构与其他 JSON 中的 siteProfile 完全一致 |
| relate_type | relate_type | int→INT（`parse_int`） | 本退款对应的“业务类型” |
| relate_id | relate_id | int→BIGINT（`parse_int`） | 本次退款关联的业务 ID |
| pay_sn | pay_sn | string→TEXT（原样） | 来自 JSON 导出的原始字段，用于保留业务取值 |
| pay_amount | pay_amount | float→NUMERIC(18,2)（`parse_decimal`） | 本次退款的 资金变动金额 |
| refund_amount | refund_amount | float→NUMERIC(18,2)（`parse_decimal`） | 设计上本应显示“实际退款金额”（正数），与 pay_amount 配合使用 |
| round_amount | round_amount | float→NUMERIC(18,2)（`parse_decimal`） | 舍入金额/抹零金额 |
| pay_status | pay_status | int→INT（`parse_int`） | 来自 JSON 导出的原始字段，用于保留业务取值 |
| pay_time | pay_time | string→TIMESTAMP（`parse_timestamp`） | 退款在支付渠道层面实际发生的时间 |
| create_time | create_time | string→TIMESTAMP（`parse_timestamp`） | 本条退款流水在系统内创建时间 |
| payment_method | payment_method | int→INT（`parse_int`） | 来自 JSON 导出的原始字段，用于保留业务取值 |
| pay_terminal | pay_terminal | int→INT（`parse_int`） | 来自 JSON 导出的原始字段，用于保留业务取值 |
| pay_config_id | pay_config_id | int→BIGINT（`parse_int`） | 支付配置 ID，例如商户在“非球科技”内配置的某一条支付通道（某个微信商户号、银联通道）的主键 |
| online_pay_channel | online_pay_channel | int→INT（`parse_int`） | 来自 JSON 导出的原始字段，用于保留业务取值 |
| online_pay_type | online_pay_type | int→INT（`parse_int`） | 当前：全部 0 |
| channel_fee | channel_fee | float→NUMERIC(18,2)（`parse_decimal`） | 第三方支付渠道对本次退款收取的手续费 |
| channel_payer_id | channel_payer_id | string→TEXT（原样） | 支付渠道侧的 payer ID，例如微信 openid、银行卡号掩码等 |
| channel_pay_no | channel_pay_no | string→TEXT（原样） | 第三方支付平台的交易号（如微信支付单号、支付宝交易号等） |
| member_id | member_id | int→BIGINT（`parse_int`） | 租户内部的会员 ID（对应会员档案中的某个主键） |
| member_card_id | member_card_id | int→BIGINT（`parse_int`） | 关联的会员卡账户 ID（对应“储值卡列表”或“会员档案”中的某一张卡） |
| cashier_point_id | cashier_point_id | int→BIGINT（`parse_int`） | 收银点 ID，例如前台 1、前台 2、自助机等 |
| operator_id | operator_id | int→BIGINT（`parse_int`） | 执行该退款操作的操作员 ID |
| action_type | action_type | int→INT（`parse_int`） | 当前：全部 2 |
| check_status | check_status | int→INT（`parse_int`） | 当前：全部 1 |
| is_revoke | is_revoke | int→INT（`parse_int`） | 布尔/开关字段，用于表示权限、可用性或状态开关 |
| is_delete | is_delete | int→INT（`parse_int`） | 逻辑删除标志 |
| balance_frozen_amount | balance_frozen_amount | float→NUMERIC(18,2)（`parse_decimal`） | 涉及会员储值卡退款时，暂时冻结的余额金额 |
| card_frozen_amount | card_frozen_amount | float→NUMERIC(18,2)（`parse_decimal`） | 与上一个类似，偏向“某张卡的被冻结金额”，也与会员卡/储值账户相关 |

## ETL 补充字段

| ODS 列名 | 生成逻辑 |
|-----------|----------|
| content_hash | 对业务字段（排除 ETL 元数据列）计算 SHA-256，用于变更检测与去重 |
| source_file | 固定值：`refund_transactions.json`，标识原始导出文件 |
| source_endpoint | API 端点路径，如 `Order/GetRefundPayLogList` |
| 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` 类型存储
