# 会员档案（GetTenantMemberList） → member_profiles 字段映射

> 生成时间：2026-02-14

## 端点信息

| 属性 | 值 |
|------|-----|
| 接口路径 | `MemberProfile/GetTenantMemberList` |
| 请求方法 | POST |
| ODS 对应表 | `ods.member_profiles` |
| JSON 数据路径 | `data.tenantMemberInfos` |

## 字段映射

| JSON 字段 | ODS 列名 | 类型转换 | 说明 |
|-----------|----------|----------|------|
| tenant_id | tenant_id | int→BIGINT（`parse_int`） | 租户/品牌 ID |
| register_site_id | register_site_id | int→BIGINT（`parse_int`） | 会员的注册门店 ID |
| site_name | site_name | string→TEXT（原样） | 注册门店名称，属于冗余字段，用于直接展示 |
| id | id | int→BIGINT（`parse_int`） | 这是“租户内会员账户”的主键 ID |
| system_member_id | system_member_id | int→BIGINT（`parse_int`） | 这是“系统级会员 ID”，在全平台唯一，用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上 |
| member_card_grade_code | member_card_grade_code | int→BIGINT（`parse_int`） | 这两个字段是成对出现的：一个数值码，一个中文名称 |
| member_card_grade_name | member_card_grade_name | string→TEXT（原样） | 这是“会员卡种类/等级”的定义字段 |
| mobile | mobile | string→TEXT（原样） | 会员绑定的手机号码 |
| nickname | nickname | string→TEXT（原样） | 会员在当前租户下的显示名称（可以是姓名，也可以是昵称） |
| point | point | float→NUMERIC(18,2)（`parse_decimal`） | 当前积分余额（这条会员账户的积分值） |
| growth_value | growth_value | float→NUMERIC(18,2)（`parse_decimal`） | 成长值 / 经验值，用于会员等级晋升的累计指标 |
| referrer_member_id | referrer_member_id | int→BIGINT（`parse_int`） | 推荐人会员 ID，用于记录该会员是由哪位老会员推荐 |
| status | status | int→INT（`parse_int`） | 帐户状态（偏“卡状态/档案状态”） |
| user_status | user_status | int→INT（`parse_int`） | 用户账号状态（偏“用户逻辑”层面的状态） |
| create_time | create_time | string→TIMESTAMP（`parse_timestamp`） | 会员账户的创建时间（即这条档案/这张卡在系统中被创建的时间） |
| pay_money_sum | pay_money_sum | float→NUMERIC(18,2)（`parse_decimal`） | 累计消费金额（新增字段，API 新版返回） |
| person_tenant_org_id | person_tenant_org_id | int→BIGINT（`parse_int`） | 会员所属组织 ID（新增字段，API 新版返回） |
| person_tenant_org_name | person_tenant_org_name | string→TEXT（原样） | 会员所属组织名称（新增字段，API 新版返回） |
| recharge_money_sum | recharge_money_sum | float→NUMERIC(18,2)（`parse_decimal`） | 累计充值金额（新增字段，API 新版返回） |
| register_source | register_source | string→TEXT（原样） | 注册来源（新增字段，API 新版返回） |

## ETL 补充字段

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