# USER 评价业务闭环 — 第三步：数据流与中间对象设计 v3

## 文件信息

- 文件名称：`20260517_USER评价业务闭环_第三步_数据流与中间对象设计_v3.md`
- 项目路径：`C:\XCODE\USER`
- 当前版本：`v3`
- 最近更新：`2026-05-17`
- 上游文档：
  - [工作基线 v1.2](20260517_USER评价业务闭环主流程与后续工作基线_v1.2.md) — 业务规则与额度口径
  - [共用能力图与渠道专属流程 v2.2](20260517_USER评价业务闭环_共用能力图与渠道专属流程_v2.2.md) — 每个节点的 查/写/状态/提醒/拦截
- 前置版本：
  - `数据流与中间对象需求_v1`（Codex，六层架构骨架）
  - `数据流与中间对象设计_v1.1`（Codex，字段字典最全版）
  - `第三步_数据流与中间表设计_v1`（字段级展开 + 流转时序）
  - `第三步_数据流与中间表设计_v2`（吸收 Codex 优点的合并版）
- 合并策略：以 Codex v1.1 为主骨架（保留其完整字段字典和免评对象），补入 v2 的流转时序表、写入顺序图和快照策略。
- 文件目的：作为第三步最终主稿，后续数据库物理设计、接口设计和页面点击读写设计均以此为准。

---

## 1. 第三步的目标

第三步不再回答"流程怎么走"，而是回答：

1. 现有系统里已经有哪些数据可以复用。
2. 为什么仅靠现有 `users / amazon_orders / review_plans / push_tasks / support_tickets / fraud_events` 不够。
3. 必须新增哪些中间对象。
4. 哪些是正式事务表，哪些只是快照，哪些可以先做成视图。
5. 从需求形成到结果回流，数据怎样一层一层往下走。

---

## 2. 本步先给出的结论

### 2.1 不能再只围绕单一账号建模

后续所有关键判断都应围绕 **真实人**，而不是只看 JOYHUB ID / 邮箱 / 电话 / Amazon 账号 / 单次订单。JOYHUB 用户只是身份线索之一，真实人才是额度、历史、风险、跨渠道去重和客服上下文的主对象。

### 2.2 现有表能承载业务记录，但承载不了跨流程判断

既有表更接近"某一模块自己的账"，但前两步已确认的新需求需要额外的中间层：真实人跨账号归并、每次互动重判、人群入选/排除解释、额度预占与跨渠道去重、客服上下文、评价提交与展示拆分、退款比对。

### 2.3 第三步最重要的是把对象分层

本文件把数据对象分为六层：

```
源数据层 → 主实体层 → 桥接层 → 事件层 → 快照与决策层 → 结果回流层
```

---

## 3. 数据设计原则

| 原则 | 说明 |
| --- | --- |
| 先识别真实人，再做额度与风险 | 否则 4/4/12 规则都会被多账号绕开 |
| 事件与快照分离 | 事件是原始事实，快照是某个时点的判断结果 |
| 当前态与历史态分离 | 当前视图可重算，历史决策必须留痕 |
| 计划、渠道、客服、风险状态分离 | 不能压成一个字段 |
| 用户提交与平台展示分离 | 真实提交计额度，Amazon 展示计计划完成 |
| 能解释"为什么" | 入选、排除、拦截、转人工都要能追溯 |
| 先复用现有对象，再补最小中间层 | 不为了建模漂亮重造全部旧表 |
| 对敏感数据分层处理 | 原值、标准化值、哈希/指纹、脱敏展示值应区分 |

---

# 第一部分：现有数据源分析

## 4. 现有数据源盘点

| 数据源 | 当前可用内容 | 主要缺口 |
| --- | --- | --- |
| 现有 ERP 用户管理 | 用户 ID、用户名、注册时间、最近活跃、国家、性别、邮箱、绑定产品数、标签 | 仍是账号视角，不是真实人视角 |
| APP / 用户数据库 | JOYHUB ID、邮箱、设备号、设备型号/类型、系统版本、APP版本、绑定玩具、活跃与点击行为 | 需要设备变更轨迹和与订单/客服联动 |
| Amazon 订单 | 订单号、ASIN、站点、购买时间、订单状态、Profile ID、收件人姓名、收件地址等 | 需要标准化姓名/地址和收件人指纹 |
| Amazon 评价/Listing | ASIN、评分、评价数、差评数、评价缺口、展示结果 | 用户真实提交与平台展示要拆成两条事实 |
| 推送系统 | Push 计划、素材、任务、打开、点击、回复、投诉、退订 | IM/EDM/APP 语义不同，不能只用一套粗糙 push 结果 |
| 客服/TEL | 工单、通话、售后、答应配合、问题处理 | 需要和上下文卡、风险复检、跟进状态联动 |
| 黑名单/诈骗资料 | 黑名单、诈骗事件、双重退款、强弱关联 | 需要把风险信号与确认案件拆开 |
| OA 返款/Amazon 退款 | 内部返款与 Amazon 退款 | 缺统一比对对象 |
| JOYCOLLAB | KOC/KOL、内容、Code、点击、订单、转化、佣金 | 需要和 USER 计划/ASIN 结果打通 |

### 4.1 Amazon 订单字段明细（结合表头.xlsx）

| 字段 | 主要用途 | 涉密 |
| --- | --- | --- |
| 订单号 | 订单核验、真实人关联、退款比对 | 是 |
| 订单状态 | 判断是否撤销、退款、退货、换货 | - |
| 买家姓名 / 买家邮箱 | 身份关联 | 是 |
| 收件人 / 电话 | 真实人归并、风险判断 | 是 |
| 地址 / 城市 / 州 / 邮编 | 收件人归并、同址异名识别 | 是 |
| ASIN / MSKU / SKU / 品名 / 标题 | 产品匹配、计划归属 | - |
| 订购日期 / 发货时间 / 结算时间 | 时序判断 | - |
| 数量 / 单价 / 订单总金额 / 销售额 | 交易画像 | 是 |
| 是否退款 / 退款总金额 | 双重退款检测 | 是 |
| 请求评论状态 | 评价缺口判断 | - |
| 店铺 / 国家 / 销售渠道 | 站点匹配 | - |
| Order Item ID | 订单行级关联 | - |

### 4.2 订单侧必须补的派生字段

| 字段 | 说明 |
| --- | --- |
| `recipient_name_normalized` | 标准化后的收件人姓名 |
| `recipient_address_normalized` | 标准化后的地址 |
| `recipient_fingerprint` | 由标准化姓名+地址生成的稳定指纹 |
| `address_fingerprint` | 仅地址指纹，用于识别同址异名 |

---

## 5. 全局数据流

```mermaid
flowchart LR
    subgraph S["源数据层"]
        S1["现有ERP用户/标签/身份"]
        S2["APP/设备/行为"]
        S3["Amazon订单/评价/Listing"]
        S4["IM/EDM/APP Push/TEL"]
        S5["客服/工单/售后"]
        S6["黑名单/OA返款/Amazon退款"]
        S7["JOYCOLLAB"]
    end

    subgraph M["主实体与桥接层"]
        M1["真实人 person_profiles"]
        M2["身份关联 person_identity_links"]
        M3["订单/ASIN/计划/工单"]
        M4["订单关联/路由/去重"]
    end

    subgraph D["快照与决策层"]
        D1["画像快照 person_feature_snapshots"]
        D2["上下文卡 contact_context_snapshots"]
        D3["额度台账/预占"]
        D4["风险信号/风险案件"]
        D5["人群快照/排除快照"]
        D6["互动复检/路由决策"]
    end

    subgraph E["事件层"]
        E1["渠道事件"]
        E2["客服/TEL事件"]
        E3["退款事件"]
        E4["评价提交事件"]
        E5["免评执行事件"]
    end

    subgraph R["结果回流层"]
        R1["评价展示核验"]
        R2["退款比对结果"]
        R3["免评结果"]
        R4["ASIN健康/计划完成"]
        R5["绩效/审计/下一轮需求"]
    end

    S1 & S2 & S3 --> M1
    S1 & S2 & S3 --> M2
    M1 & M2 & M3 --> D1
    M1 & M2 & M3 --> D2
    D1 --> D5
    D3 & D4 --> D5
    D5 --> D6
    D6 --> E1
    S4 --> E1
    S5 --> E2
    S6 --> E3
    E1 & E2 --> E4
    S7 --> E5
    E3 --> R2
    E4 --> R1
    E5 --> R3
    R1 & R2 & R3 --> R4
    R4 --> R5
    R5 --> M3
```

---

# 第二部分：数据对象分层总表

## 6. 对象分层总表

| 分层 | 对象 | 说明 |
| --- | --- | --- |
| 源数据 | `users`、`devices`、`amazon_orders`、`asin_listings`、`push_tasks`、`support_tickets`、`fraud_events`、JOYCOLLAB 数据 | 现有或外部事实来源 |
| 主实体 | `person_profiles`、`request_tickets`、`review_plans`、`exemption_plans`、`risk_cases`、`blacklist_entities` | 核心业务主体 |
| 桥接 | `person_identity_links`、`user_order_links`、`plan_task_links`、`channel_route_decisions`、`channel_dedup_records` | 跨主体关系 |
| 事件 | `im_interaction_records`、`im_flow_tags`、`edm_message_events`、`app_touch_events`、`tel_call_records`、`review_submission_records`、`amazon_refund_records`、`oa_refund_records`、`support_assignment_logs` | 不可丢失的事实 |
| 快照/决策 | `person_feature_snapshots`、`contact_context_snapshots`、`person_quota_ledgers`、`quota_reservations`、`audience_snapshots`、`audience_exclusions`、`interaction_recheck_records`、`edm_user_behavior_profiles`、`channel_route_decisions`、`channel_dedup_records` | 为某次决策保留当时依据 |
| 结果/回流 | `review_display_checks`、`refund_match_results`、`exemption_result_snapshots`、`listing_health_snapshots`、`support_performance_snapshots` | 结果与复盘 |
| 治理 | `interaction_audit_logs`、`manual_review_tasks`、`export_logs`、`audit_logs` | 审计、复核、导出 |

---

## 7. 现有对象如何处理

### 7.1 可以直接复用

| 现有对象 | 处理 |
| --- | --- |
| `request_tickets` | 保留，继续作为需求入口 |
| `amazon_orders` | 保留，补标准化姓名/地址与收件人指纹 |
| `asin_listings` | 保留，继续作为 ASIN/Listing 主档 |
| `support_tickets` | 保留，拆出跟进、分派和风险状态辅助表 |
| `fraud_events` | 保留，上游增加 `risk_signals`，下游衔接 `risk_cases/blacklist_entities` |
| `audit_logs` | 保留 |

### 7.2 需要扩展

| 现有对象 | 需要补的能力 |
| --- | --- |
| `users` | 不再承担真实人主档，只保留 JOYHUB 账号层信息 |
| `devices` | 补设备型号、系统版本、APP版本、首次/最近出现、设备变化 |
| `review_plans` | 增加计划族或与 `exemption_plans` 分离 |
| `push_tasks` | 被更细的渠道事件表补充 |
| `support_tickets` | 增加与上下文卡、答应配合、风险复核、TEL 记录的关联 |

### 7.3 必须新增

| 对象 | 原因 |
| --- | --- |
| `person_profiles` | 真实人主档 |
| `person_identity_links` | 多线索归并 |
| `person_feature_snapshots` | 画像解释 |
| `contact_context_snapshots` | 客服一屏上下文 |
| `person_quota_ledgers` | 4/4/12 统一额度 |
| `quota_reservations` | 并发占用与预警 |
| `audience_snapshots` | 人群生成留痕 |
| `audience_exclusions` | 排除原因留痕 |
| `channel_route_decisions` | 渠道路由解释 |
| `channel_dedup_records` | 跨渠道去重 |
| `interaction_recheck_records` | 每次有效互动重新判断留痕 |
| `refund_match_results` | 双重退款识别 |
| `review_display_checks` | 评价展示拆分 |

---

# 第三部分：P0/P1/P2 优先级

## 8. P0：没有它们，主流程就不可靠

| 对象 | 类型 | 关键用途 |
| --- | --- | --- |
| `person_profiles` | 主实体 | 真实人主档 |
| `person_identity_links` | 桥接 | 账号、邮箱、电话、设备、Profile、收件人归并 |
| `person_feature_snapshots` | 快照 | 画像依据 |
| `contact_context_snapshots` | 快照 | 客服上下文卡 |
| `person_quota_ledgers` | 台账 | 4/4/12 统一额度 |
| `quota_reservations` | 台账 | 计划并发占用 |
| `risk_signals` | 事件 | 风险原始信号 |
| `risk_cases` | 主实体 | 风险案件 |
| `blacklist_entities` | 主实体 | 确认拦截对象 |
| `audience_snapshots` | 快照 | 某次人群生成结果 |
| `audience_exclusions` | 快照 | 排除原因 |
| `channel_route_decisions` | 决策 | 渠道路由 |
| `channel_dedup_records` | 决策 | 跨渠道去重 |
| `interaction_recheck_records` | 决策 | 每次有效互动重判 |

## 9. P1：主流程可走，但没有它们会粗糙且难复盘

| 对象 | 类型 | 关键用途 |
| --- | --- | --- |
| `im_interaction_records` | 事件 | IM 细节 |
| `im_flow_tags` | 事件/派生 | IM 流程流转 |
| `edm_message_events` | 事件 | EDM 打开/点击/回复/退订 |
| `edm_user_behavior_profiles` | 快照 | EDM 画像 |
| `app_touch_events` | 事件 | APP Push 触达 |
| `tel_call_records` | 事件 | 电话全记录 |
| `support_followups` | 事务 | 答应配合跟进 |
| `support_assignment_logs` | 事件 | 分配与升级 |
| `review_submission_records` | 事件 | 用户真实提交评价 |
| `review_display_checks` | 结果 | Amazon 展示核验 |
| `exemption_plans` | 主实体 | 免评计划 |
| `exemption_plan_tasks` | 事务 | 免评任务 |
| `creator_content_records` | 事件 | KOC/KOL 内容 |
| `exemption_result_snapshots` | 结果 | 免评结果 |
| `amazon_refund_records` | 事件 | Amazon 退款 |
| `oa_refund_records` | 事件 | OA 返款 |
| `refund_match_results` | 结果 | 双重退款比对 |

## 10. P2：管理、效率与治理增强

| 对象 | 类型 | 关键用途 |
| --- | --- | --- |
| `attendance_records` | 事务 | 出勤 |
| `shift_schedules` | 事务 | 排班 |
| `support_goal_records` | 事务 | 目标 |
| `support_performance_snapshots` | 快照 | 绩效 |
| `manual_review_tasks` | 事务 | 人工复核 |
| `interaction_audit_logs` | 审计 | 高敏动作审计 |

---

# 第四部分：完整字段字典

## 11. 真实人与身份层

### 11.1 `person_profiles`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `person_id` | PK | 真实人唯一标识 |
| `created_at` | datetime | 首次识别时间 |
| `updated_at` | datetime | 最近归并更新时间 |
| `merge_confidence` | enum | 高/中/低 |
| `status` | enum | 正常/观察中/已确认风险 |
| `primary_country` | string | 当前主要国家 |
| `primary_language` | string | 当前主要语言 |
| `latest_active_at` | datetime | 最近活跃时间 |
| `lifetime_review_submitted_count` | int | 累计真实提交评价数（跨账号合并） |
| `current_risk_level` | enum | 当前风险等级 |

### 11.2 `person_identity_links`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `link_id` | PK | 关联记录 ID |
| `person_id` | FK → person_profiles | 所属真实人 |
| `identity_type` | enum | JOYHUB_ID / EMAIL / PHONE / DEVICE / AMAZON_PROFILE / NAME_ADDRESS / PAYMENT / ORDER |
| `identity_value_hash` | string | 匹配索引 |
| `identity_value_encrypted` | string | 仅在必要时保存的加密原值 |
| `link_strength` | enum | 强/弱 |
| `confidence_score` | decimal | 归并置信度 |
| `evidence_summary` | text | 命中依据摘要 |
| `first_seen_at` | datetime | 首次发现时间 |
| `last_seen_at` | datetime | 最近确认时间 |
| `source_type` | enum | AMAZON_ORDER / JOYHUB / MANUAL / TEL / EMAIL / CS_TICKET |
| `is_active` | bool | 是否仍有效 |

### 11.3 归并口径

| 场景 | 数据处理 |
| --- | --- |
| 标准化后姓名+地址完全一致 | 直接归并到同一真实人，link_strength=STRONG |
| 地址一致但姓名不同 | 记录弱关联，不直接合并 |
| 多个线索交叉命中 | 形成候选归并，记录证据和置信度 |
| 只有单个弱线索 | 不做直接归并，只写风险信号 |

### 11.4 `contact_context_snapshots`

| 字段组 | 字段 | 来源 |
| --- | --- | --- |
| 快照元数据 | `snapshot_id`、`person_id`、`snapshot_at`、`trigger_event` | 系统 |
| 当前身份 | `joyhub_ids[]`、`emails[]`、`phones[]`、`devices[]`、`amazon_profile_ids[]` | 身份关联 |
| 归并摘要 | `standardized_name_address`、`linked_person_count`、`merge_confidence` | 真实人/身份关联 |
| 历史交易 | `total_orders`、`last_order_at`、`total_refunds`、`total_oa_refunds`、`target_asin_purchases[]` | 订单/返款 |
| 历史服务 | `total_tickets`、`last_ticket_at`、`total_calls`、`last_call_at`、`open_promises[]` | 工单/电话 |
| 历史风险 | `blacklist_hits`、`strong_associations`、`weak_associations`、`fraud_cases`、`double_refund_flags` | 风险层 |
| 当前设备 | `device_count`、`latest_device_model`、`app_version`、`recent_device_change` | APP/设备 |
| 触达历史 | `im_recent[]`、`edm_recent[]`、`app_recent[]`、`tel_recent[]` | 渠道事件 |

---

## 12. 画像、额度与人群层

### 12.1 `person_feature_snapshots`

| 字段组 | 代表字段 |
| --- | --- |
| 快照元数据 | `feature_snapshot_id`、`person_id`、`snapshot_at`、`feature_version` |
| 基础画像 | `country`、`marketplace`、`language`、`gender`、`age_band`、`registered_at` |
| 产品关系 | `bound_toy_count`、`bound_categories[]`、`target_product_relation` |
| 交易画像 | `total_orders`、`last_order_at`、`purchase_frequency`、`bought_target_asin` |
| 行为画像 | `activity_score`、`open_rate`、`click_rate`、`reply_rate`、`review_rate`、`cooperation_rate` |
| 触达画像 | `im_reachable`、`edm_reachable`、`app_reachable`、`tel_reachable`、`last_touch_at` |
| 风险画像 | `risk_level`、`blacklist_hit`、`strong_link_count`、`weak_link_count`、`refund_anomaly_flag` |
| 计划画像 | `joined_plan_types[]`、`last_plan_result`、`lifetime_review_submitted_count` |

### 12.2 三类画像用途

| 用途 | 说明 | 示例 |
| --- | --- | --- |
| **硬过滤** | 决定能不能进入人群池 | 黑名单、退订、强关联、超额、站点不符 |
| **匹配条件** | 决定适不适合当前计划 | 国家、性别、年龄段、绑定玩具、是否买过目标 ASIN |
| **排序权重** | 决定优先触达谁 | 活跃度、历史配合率、最近互动、打开/点击行为 |

### 12.3 `person_quota_ledgers`

> **HANDOFF：用户运营核心控制规则。** "4+4+12"全部按真实人统计，跨所有关联账号合并计算。一个人不管有几个 JOYHUB ID、几个 Amazon 账号——只要归并到同一个真实人，都受同一套额度控制。
>
> 示例：真实人关联 3 个 JOYHUB ID（A/B/C），A 上提交 5 个 + B 上提交 4 个 + C 上提交 3 个 = 累计 12，**全部账号停回评/测评，后续仅免评。**

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `ledger_id` | PK | 台账记录 ID |
| `person_id` | FK → person_profiles | 真实人 |
| `period_key` | string | 自然月，如 `2026-05` |
| `quota_type` | enum | MONTHLY_REVIEW / MONTHLY_EXEMPTION / LIFETIME_REVIEW |
| `quota_limit` | int | 4 / 4 / 12 |
| `used` | int | 已完成 |
| `in_progress` | int | 进行中 |
| `reserved` | int | 已预占 |
| `available` | int | 剩余可用 = limit - used - in_progress - reserved |
| `updated_at` | datetime | 最近更新 |

### 12.4 `quota_reservations`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `reservation_id` | PK | 预占记录 |
| `person_id` | FK | 真实人 |
| `plan_id` | FK | 关联计划 |
| `quota_type` | enum | 测评/免评 |
| `reserved_count` | int | 预占数量 |
| `reserved_at` | datetime | 预占时间 |
| `expires_at` | datetime | 过期释放时间 |
| `status` | enum | 已预占/已使用/已释放/已过期 |

### 12.5 `audience_snapshots`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `snapshot_id` | PK | 人群快照 ID |
| `plan_id` | FK | 计划 |
| `batch_id` | string | 生成人群批次 |
| `person_id` | FK | 真实人 |
| `match_score` | decimal | 匹配得分 |
| `match_reasons` | JSON | 命中画像条件 |
| `quota_status` | enum | 充足/预警/超限 |
| `risk_status` | enum | 正常/弱风险/强风险 |
| `priority_rank` | int | 触达优先级 |
| `feature_snapshot_id` | FK | 当时引用的画像快照 |
| `snapshot_at` | datetime | 快照时间 |

### 12.6 `audience_exclusions`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `exclusion_id` | PK | 排除记录 |
| `plan_id` | FK | 计划 |
| `batch_id` | string | 批次 |
| `person_id` | FK | 真实人 |
| `exclusion_reason` | enum | BLACKLIST / UNSUBSCRIBED / QUOTA_EXCEEDED / FREQ_EXCEEDED / OPEN_TICKET / WRONG_COUNTRY / STRONG_RISK |
| `excluded_at` | datetime | 排除时间 |

### 12.7 为什么一定需要这些中间表

| 对象 | 如果没有会怎样 |
| --- | --- |
| `person_feature_snapshots` | 无法解释当时的画像依据 |
| `audience_snapshots` | 无法复盘某次计划到底选中了谁 |
| `audience_exclusions` | 无法解释为什么用户没被选中 |
| `person_quota_ledgers` | 4/4/12 规则无法跨账号统一计算 |
| `quota_reservations` | 多个计划并发时会重复占用同一人额度 |

---

## 13. 路由与互动复检层

### 13.1 `channel_route_decisions`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `route_decision_id` | PK | 路由决策 ID |
| `plan_id` | FK | 计划 |
| `batch_id` | string | 人群批次 |
| `person_id` | FK | 真实人 |
| `candidate_channels` | JSON | 候选渠道 |
| `selected_channel` | enum | 实际选中渠道 |
| `excluded_channels` | JSON | 被排除渠道及原因 |
| `decision_factors` | JSON | 活跃、绑定、可达性、工单、额度、风险 |
| `decided_at` | datetime | 决策时间 |

### 13.2 `channel_dedup_records`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `dedup_id` | PK | 去重记录 |
| `person_id` | FK | 真实人 |
| `plan_id` | FK | 计划 |
| `selected_channel` | enum | 保留渠道 |
| `suppressed_channels` | JSON | 被抑制渠道 |
| `reason` | text | 去重原因 |
| `created_at` | datetime | 去重时间 |

### 13.3 `interaction_recheck_records`

每次有效互动后，记录本次重新做过哪些检查、结果是什么、为何继续或拦截。这是"每次互动重判"的落地证据。

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `recheck_id` | PK | 复检记录 |
| `interaction_type` | enum | IM / EDM / APP / TEL / CS / REFUND |
| `interaction_id` | string | 触发互动 |
| `person_id` | FK | 真实人 |
| `context_snapshot_id` | FK | 上下文快照 |
| `quota_snapshot_ref` | string | 额度快照引用 |
| `risk_case_id` | FK | 关联风险案件 |
| `identity_result` | enum | 正常/新增关联/冲突 |
| `history_result` | enum | 无变化/有更新 |
| `quota_result` | enum | 充足/预警/超限 |
| `risk_result` | enum | 正常/弱风险/强风险 |
| `final_action` | enum | 继续/降级/转人工/暂停 |
| `checked_at` | datetime | 复检时间 |

---

## 14. 风险层

### 14.1 `risk_signals`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `signal_id` | PK | 风险信号 ID |
| `person_id` | FK | 真实人 |
| `signal_type` | enum | STRONG_HIT / WEAK_HIT / DOUBLE_REFUND / DEVICE_ANOMALY / ADDRESS_ANOMALY / BLACKLIST_HIT |
| `hit_dimensions` | JSON | 命中维度 |
| `source_event_id` | string | 触发事件 |
| `created_at` | datetime | 产生时间 |
| `resolved_at` | datetime | 解除时间 |
| `resolution` | enum | 确认风险/误报/观察中 |

### 14.2 `risk_cases`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `case_id` | PK | 风险案件 |
| `person_id` | FK | 真实人 |
| `source_type` | enum | CS_TICKET / TEL_CALL / PUSH_RESPONSE / REFUND / MANUAL |
| `source_id` | string | 来源对象 |
| `status` | enum | 待复核/复核中/确认诈骗/排除/已同步黑名单 |
| `reviewer_id` | FK | 复核人 |
| `reviewed_at` | datetime | 复核时间 |
| `sync_status` | enum | 未同步/同步中/已同步/同步失败 |

### 14.3 `blacklist_entities`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `blacklist_entity_id` | PK | 黑名单实体 |
| `entity_type` | enum | 邮箱/电话/设备/Profile/收款信息/真实人 |
| `entity_hash` | string | 匹配索引 |
| `risk_level` | enum | 风险等级 |
| `source_case_id` | FK | 来源案件 |
| `synced_at` | datetime | 同步时间 |
| `status` | enum | 生效/失效/待复核 |

### 14.4 `manual_review_tasks`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `task_id` | PK | 人工复核任务 |
| `person_id` | FK | 真实人 |
| `source_type` | enum | 风险/额度/渠道/退款 |
| `source_id` | string | 来源对象 |
| `task_reason` | text | 复核原因 |
| `status` | enum | 待处理/处理中/已完成/已关闭 |
| `owner_id` | FK | 负责人 |
| `created_at` | datetime | 创建时间 |

---

## 15. 渠道事件层

### 15.1 `im_interaction_records`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `im_record_id` | PK | IM 记录 |
| `person_id` | FK | 真实人 |
| `joyhub_id` | FK | JOYHUB 账号 |
| `plan_id` | FK | 关联计划 |
| `action_type` | enum | PUSH_CARD / USER_SUBMIT / USER_REPLY / REMINDER / NOTIFICATION |
| `card_type` | enum | REVIEW_CARD / EVALUATION_CARD / EXEMPTION_CARD / REMINDER_CARD |
| `user_submitted_data` | JSON | 订单号/返款账号/截图链接（涉密加密存储） |
| `order_validation_result` | enum | 通过/非测评单/非公司产品/格式错误/已撤销/已退款 |
| `tag_changes` | JSON | 本次产生的标签变化 |
| `created_at` | datetime | 事件时间 |

### 15.2 `im_flow_tags`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `flow_tag_id` | PK | 流程标签记录 |
| `person_id` | FK | 真实人 |
| `tag_code` | string | 流程标签 |
| `source_im_record_id` | FK | 来源 IM 事件 |
| `effective_from` | datetime | 生效时间 |
| `effective_to` | datetime | 失效时间 |

### 15.3 `edm_message_events`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `edm_event_id` | PK | EDM 事件 |
| `person_id` | FK | 真实人 |
| `email_hash` | string | 邮箱索引 |
| `campaign_id` | FK | 邮件任务 |
| `event_type` | enum | SENT / DELIVERED / OPENED / CLICKED / REPLIED / BOUNCED / UNSUBSCRIBED / COMPLAINED |
| `event_at` | datetime | 事件时间 |
| `click_target` | string | 点击目标 |

### 15.4 `edm_user_behavior_profiles`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `profile_id` | PK | EDM 行为画像 |
| `person_id` | FK | 真实人 |
| `latest_open_at` | datetime | 最近打开 |
| `latest_reply_at` | datetime | 最近回复 |
| `open_count_total` | int | 累计打开次数 |
| `zero_open_last_3` | bool | 最近 3 次 0 打开 |
| `zero_open_last_5` | bool | 最近 5 次 0 打开 |
| `clicked_review_link_without_reply_hours` | int | 点击评论链接但未回复时长 |
| `monthly_receive_count` | int | 当月收信次数 |
| `mail_type_counts` | JSON | 各邮件类型发送次数 |
| `mailbox_domain` | string | 邮箱后缀 |
| `is_unsubscribed` | bool | 是否退订 |
| `has_hard_bounce` | bool | 是否硬退信 |
| `snapshot_at` | datetime | 快照时间 |

### 15.5 `app_touch_events`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `app_event_id` | PK | APP 事件 |
| `person_id` | FK | 真实人 |
| `joyhub_id` | FK | JOYHUB 账号 |
| `push_type` | enum | PUSH / IN_APP / BANNER / POPUP |
| `event_type` | enum | SENT / DISPLAYED / CLICKED / DISMISSED / UNINSTALLED |
| `landing_page` | string | 落地页 |
| `event_at` | datetime | 事件时间 |

### 15.6 `tel_call_records`

| 字段 | 类型 | 说明 | 涉密 |
| --- | --- | --- | --- |
| `tel_record_id` | PK | 电话记录 | - |
| `person_id` | FK | 真实人 | - |
| `ticket_id` | FK | 关联工单 | - |
| `call_direction` | enum | INBOUND/OUTBOUND | - |
| `call_source` | enum | AMAZON_PAGE/MANUAL/PLAN_TASK/FOLLOWUP | - |
| `phone_hash` | string | 电话索引 | 是 |
| `call_at` | datetime | 通话时间 | - |
| `duration_seconds` | int | 通话时长 | - |
| `call_result` | enum | CONNECTED/NO_ANSWER/WRONG_NUMBER/DECLINED | - |
| `has_after_sale_issue` | bool | 是否有售后 | - |
| `issue_type` | enum | 问题类型 | - |
| `issue_description` | text | 问题描述 | - |
| `solution` | text | 处理方案 | - |
| `is_resolved` | bool | 是否解决 | - |
| `is_satisfied` | bool | 是否满意 | - |
| `invited_review` | bool | 是否邀请回评/测评 | - |
| `user_accepted` | bool | 是否接受 | - |
| `agent_id` | FK | 客服 | - |

---

## 16. 客服层

### 16.1 `support_tickets`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `ticket_id` | PK | 工单 |
| `person_id` | FK | 真实人 |
| `ticket_type` | enum | 差评跟进/测评跟进/回评跟进/紧急Listing/电话/售后/诈骗样品/KOL进度 |
| `source` | enum | AMAZON_OP/BRAND_OP/SYSTEM_AUTO/PUSH_ESCALATION/USER_REPLY/TEL_INBOUND |
| `source_id` | string | 来源对象 |
| `ticket_status` | enum | 待分配/已分配/处理中/等待用户/等待内部/已解决/疑似诈骗/已关闭 |
| `assigned_team` | FK | 客服组 |
| `assigned_agent` | FK | 客服 |
| `created_at` | datetime | 创建时间 |
| `first_response_at` | datetime | 首次回复 |
| `resolved_at` | datetime | 解决时间 |
| `closed_at` | datetime | 关闭时间 |
| `context_snapshot_id` | FK | 创建时上下文快照 |

### 16.2 `support_followups`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `followup_id` | PK | 跟进 |
| `ticket_id` | FK | 工单 |
| `person_id` | FK | 真实人 |
| `followup_status` | enum | 已答应配合/待分配/待提醒/等待提交/已提交评价/已提交反馈/超时/需再次联系/已关闭 |
| `promised_at` | datetime | 承诺时间 |
| `reminder_count` | int | 已提醒次数 |
| `last_reminder_at` | datetime | 最近提醒 |
| `deadline_at` | datetime | 截止时间 |
| `submitted_at` | datetime | 实际提交 |
| `submission_type` | enum | 评价/反馈 |

### 16.3 `support_assignment_logs`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `assignment_log_id` | PK | 分配日志 |
| `ticket_id` | FK | 工单 |
| `from_owner_id` | FK | 原负责人 |
| `to_owner_id` | FK | 新负责人 |
| `assign_type` | enum | 自动分配/组长分派/转派/升级 |
| `reason` | text | 原因 |
| `created_at` | datetime | 分配时间 |

### 16.4 `plan_task_links`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `link_id` | PK | 桥接 ID |
| `plan_id` | FK | 计划 |
| `task_type` | enum | IM_TASK/EDM_TASK/APP_TASK/TEL_TASK/CS_TASK/KOC_TASK |
| `task_id` | string | 各渠道任务 ID |
| `created_at` | datetime | 创建时间 |

---

## 17. 评价与退款结果层

### 17.1 `review_submission_records`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `submission_id` | PK | 提交记录 |
| `person_id` | FK | 真实人 |
| `plan_id` | FK | 计划 |
| `channel` | enum | IM/EDM/APP/TEL/CS |
| `source_event_id` | string | 来源事件 |
| `submitted_at` | datetime | 提交时间 |
| `submission_evidence` | JSON | 截图/链接 |
| `order_number_hash` | string | 订单索引 |
| `quota_counted` | bool | 是否已计入 12（提交时即为true） |

### 17.2 `review_display_checks`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `check_id` | PK | 核验记录 |
| `submission_id` | FK | 提交记录 |
| `asin` | string | ASIN |
| `check_at` | datetime | 核验时间 |
| `is_displayed` | bool | 是否展示 |
| `is_verifiable` | bool | 是否可核验 |
| `display_status` | enum | 展示确认/未展示/待核验 |
| `plan_completed` | bool | 是否计入计划完成（展示确认后才为true） |

### 17.3 `amazon_refund_records` / `oa_refund_records` / `refund_match_results`

| 对象 | 关键字段 |
| --- | --- |
| `amazon_refund_records` | `refund_id`、`order_number_hash`、`asin`、`refund_amount`、`refund_at`、`refund_reason` |
| `oa_refund_records` | `oa_refund_id`、`person_id`、`order_number_hash`、`refund_amount`、`refund_at` |
| `refund_match_results` | `match_id`、`order_number_hash`、`amazon_refund_id`、`oa_refund_id`、`match_status`、`amount_diff`、`matched_at` |

---

## 18. 免评结果层

### 18.1 `exemption_plans`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `exemption_plan_id` | PK | 免评计划 |
| `source_request_id` | FK | 来源需求 |
| `asin` | string | ASIN |
| `marketplace` | string | 站点 |
| `goal_type` | enum | 内容发布/引流/带货/权重 |
| `target_metrics` | JSON | 目标点击、Code、订单、销量、权重 |
| `status` | enum | 草稿/待审批/执行中/已完成/已关闭 |

### 18.2 `exemption_plan_tasks`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `task_id` | PK | 免评任务 |
| `exemption_plan_id` | FK | 免评计划 |
| `task_type` | enum | KOC/KOL/IM/EDM/APP/内容协同 |
| `owner_id` | FK | 负责人 |
| `status` | enum | 待执行/执行中/已完成/异常 |
| `created_at` | datetime | 创建时间 |

### 18.3 `creator_content_records`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `creator_content_id` | PK | 内容记录 |
| `exemption_task_id` | FK | 免评任务 |
| `creator_id` | string | KOC/KOL |
| `content_url` | string | 内容链接 |
| `published_at` | datetime | 发布时间 |
| `code_usage_count` | int | Code 使用量 |
| `click_count` | int | 点击量 |
| `order_count` | int | 带货订单 |
| `sales_amount` | decimal | 销售额 |

### 18.4 `exemption_result_snapshots`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `snapshot_id` | PK | 免评结果快照 |
| `exemption_plan_id` | FK | 免评计划 |
| `snapshot_at` | datetime | 快照时间 |
| `content_published_count` | int | 内容发布数 |
| `click_count` | int | 点击 |
| `code_usage_count` | int | Code 使用 |
| `order_count` | int | 订单 |
| `sales_amount` | decimal | 销售额 |
| `weight_change_summary` | text | 权重变化摘要 |

---

## 19. 客服管理支撑层

| 对象 | 关键字段 |
| --- | --- |
| `attendance_records` | `record_id`、`agent_id`、`date`、`scheduled_hours`、`actual_hours`、`status` |
| `shift_schedules` | `shift_id`、`team_id`、`agent_id`、`date`、`shift_start`、`shift_end`、`max_tickets` |
| `support_goal_records` | `goal_id`、`agent_id`、`period_key`、`goal_type`、`target_value`、`current_value` |
| `support_performance_snapshots` | `snapshot_id`、`agent_id`、`period_key`、`tickets_handled`、`messages_sent`、`first_response_avg_sec`、`rso_orders`、`rdo_orders`、`reviews_obtained`、`review_completion_rate`、`monthly_target`、`monthly_completed` |

---

## 20. 逻辑关系总图

```mermaid
erDiagram
    PERSON_PROFILES ||--o{ PERSON_IDENTITY_LINKS : "归并"
    PERSON_PROFILES ||--o{ PERSON_FEATURE_SNAPSHOTS : "画像"
    PERSON_PROFILES ||--o{ CONTACT_CONTEXT_SNAPSHOTS : "上下文"
    PERSON_PROFILES ||--o{ PERSON_QUOTA_LEDGERS : "额度台账"
    PERSON_PROFILES ||--o{ QUOTA_RESERVATIONS : "额度预占"
    PERSON_PROFILES ||--o{ RISK_SIGNALS : "风险信号"
    PERSON_PROFILES ||--o{ RISK_CASES : "风险案件"
    PERSON_PROFILES ||--o{ AUDIENCE_SNAPSHOTS : "人群入选"
    PERSON_PROFILES ||--o{ AUDIENCE_EXCLUSIONS : "人群排除"
    PERSON_PROFILES ||--o{ CHANNEL_ROUTE_DECISIONS : "路由"
    PERSON_PROFILES ||--o{ CHANNEL_DEDUP_RECORDS : "去重"
    PERSON_PROFILES ||--o{ INTERACTION_RECHECK_RECORDS : "互动复检"
    PERSON_PROFILES ||--o{ IM_INTERACTION_RECORDS : "IM"
    PERSON_PROFILES ||--o{ IM_FLOW_TAGS : "IM标签"
    PERSON_PROFILES ||--o{ EDM_MESSAGE_EVENTS : "EDM"
    PERSON_PROFILES ||--o{ EDM_USER_BEHAVIOR_PROFILES : "EDM画像"
    PERSON_PROFILES ||--o{ APP_TOUCH_EVENTS : "APP"
    PERSON_PROFILES ||--o{ TEL_CALL_RECORDS : "TEL"
    PERSON_PROFILES ||--o{ SUPPORT_TICKETS : "工单"
    PERSON_PROFILES ||--o{ SUPPORT_FOLLOWUPS : "跟进"
    PERSON_PROFILES ||--o{ REVIEW_SUBMISSION_RECORDS : "评价提交"
    PERSON_PROFILES ||--o{ MANUAL_REVIEW_TASKS : "人工复核"
    REVIEW_SUBMISSION_RECORDS ||--o{ REVIEW_DISPLAY_CHECKS : "展示核验"
    SUPPORT_TICKETS ||--o{ SUPPORT_ASSIGNMENT_LOGS : "分配"
    RISK_CASES ||--o{ BLACKLIST_ENTITIES : "同步"
    AMAZON_REFUND_RECORDS ||--o{ REFUND_MATCH_RESULTS : "退款比对"
    OA_REFUND_RECORDS ||--o{ REFUND_MATCH_RESULTS : "退款比对"
    EXEMPTION_PLANS ||--o{ EXEMPTION_PLAN_TASKS : "任务"
    EXEMPTION_PLAN_TASKS ||--o{ CREATOR_CONTENT_RECORDS : "内容"
    EXEMPTION_PLANS ||--o{ EXEMPTION_RESULT_SNAPSHOTS : "结果"
    REVIEW_PLANS ||--o{ PLAN_TASK_LINKS : "计划任务"
    SHIFT_SCHEDULES ||--o{ SUPPORT_TICKETS : "排班分配"
    ATTENDANCE_RECORDS }o--|| SHIFT_SCHEDULES : "出勤关联"
```

---

# 第五部分：数据流转

## 21. 关键流转时序

| 阶段 | 读（查） | 写 | 说明 |
| --- | --- | --- | --- |
| 真实人识别 | person_identity_links（已有线索） | person_profiles + person_identity_links（新线索） | 每次互动都先跑 |
| 画像生成 | person_profiles + 七组画像数据 + 各渠道事件 | person_feature_snapshots | 定期或触发式刷新 |
| 人群生成 | person_feature_snapshots + person_quota_ledgers + risk_signals | audience_snapshots + audience_exclusions + quota_reservations | 快照当下状态 |
| 路由决策 | audience_snapshots + 用户状态 + 渠道可达性 | channel_route_decisions + channel_dedup_records | 选定渠道+去重 |
| 渠道发送 | channel_route_decisions + quota_reservations + risk_signals（最新） | 各渠道事件表 | 发送前终校 |
| 用户回应 | person_identity_links + person_quota_ledgers + risk_signals（全部重读） | interaction_recheck_records + 渠道事件表更新 + im_flow_tags | 每次互动复检留痕 |
| 评价提交 | person_quota_ledgers（累计额度） | review_submission_records + person_quota_ledgers（+1） | 提交即计12 |
| Amazon 展示确认 | review_submission_records | review_display_checks + 计划完成度更新 | 展示才计完成 |
| 退款/返款 | amazon_refund_records + oa_refund_records | refund_match_results + risk_signals（如命中） | 双重退款检测 |

## 22. 每次有效互动的标准写入顺序

```mermaid
flowchart LR
    A["互动发生"] --> B["解析真实人<br/>读 person_identity_links"]
    B --> C["生成/更新上下文卡<br/>写 contact_context_snapshots"]
    C --> D["读取最新额度<br/>读 person_quota_ledgers"]
    D --> E["执行风险判断<br/>读 risk_signals + blacklist"]
    E --> F["写 interaction_recheck_records"]
    F --> G{"结果"}
    G -->|正常| H["继续业务"]
    G -->|预警| I["继续 + 高亮提醒"]
    G -->|拦截| J["暂停 + 转人工/风险链路"]
```

适用场景：主动推送后回复、用户再次联系、补充订单号、客服回访、TEL 来电、退款/返款/再次触达前。

---

# 第六部分：设计决策与边界

## 23. 对象分类

| 类型 | 对象 | 原因 |
| --- | --- | --- |
| **正式事务表** | `person_profiles`、`person_identity_links`、`support_tickets`、`support_followups`、`risk_cases`、`review_submission_records`、`quota_reservations` | 需要增删改和业务状态流转 |
| **不可变事件表** | `im_interaction_records`、`edm_message_events`、`app_touch_events`、`tel_call_records`、`amazon_refund_records`、`oa_refund_records`、`support_assignment_logs`、`im_flow_tags` | 事实一旦发生不应被覆盖 |
| **快照表** | `person_feature_snapshots`、`contact_context_snapshots`、`audience_snapshots`、`support_performance_snapshots`、`exemption_result_snapshots` | 需要保留某一时点状态以便复盘 |
| **决策表** | `channel_route_decisions`、`channel_dedup_records`、`interaction_recheck_records`、`refund_match_results` | 保存系统当时为什么这样判断 |
| **聚合画像** | `edm_user_behavior_profiles` | 由事件聚合推导，定期刷新 |
| **可先做视图** | 当前剩余额度、当前风险摘要、当前上下文卡、当前人群统计看板、当前绩效看板 | 可由底层对象实时聚合 |

### 判断法

| 问题 | 如果答案是"是" |
| --- | --- |
| 后续需要追责"当时为什么这么做"吗 | 建正式表或决策表 |
| 数据后来会变，但历史判断不能跟着变吗 | 建快照 |
| 只是为了当前页面展示吗 | 优先做视图 |
| 一旦发生就不该被覆盖吗 | 建事件表 |

## 24. 当前还不能只靠"老表扩列"解决的事情

| 问题 | 为什么不能只扩列 |
| --- | --- |
| 一个真实人多个账号 | `users` 是账号级，不是人级 |
| 每次互动重判 | 不是用户静态属性，而是一次次决策事实 |
| 人群为什么入选/排除 | 不是计划表字段，而是某一批次结果 |
| 多计划并发占额度 | 需要独立预占 |
| 用户提交与展示拆分 | 不是一个布尔值能表达 |
| 退款比对 | 需要两个来源事实加一个比对结果 |
| 客服上下文 | 不是工单表本身，而是跨源聚合视图+快照 |

## 25. 当前可以先不做成物理表的内容

| 内容 | 当前建议 |
| --- | --- |
| 当前剩余额度 | 先由 `person_quota_ledgers + quota_reservations` 聚合成视图 |
| 当前风险摘要 | 先由 `risk_signals + risk_cases + blacklist_entities` 聚合成视图 |
| 当前客服上下文卡 | 前台读当前视图，关键接入动作时写 `contact_context_snapshots` |
| 当前人群统计看板 | 先基于 `audience_snapshots / exclusions` 聚合 |
| 当前绩效看板 | 先基于工单、通话、跟进事件聚合，后续再沉淀快照 |

## 26. 外部数据引用原则

| 外部数据 | 所属系统 | USER 当前做法 |
| --- | --- | --- |
| Amazon 订单全量明细 | Amazon API/报表 | 导入关键字段，不把 USER 做成全量订单数仓 |
| JOYHUB 用户行为明细 | APP/用户系统 | 取摘要或增量同步，用于画像与上下文 |
| 黑名单全量数据 | 黑名单系统 | 引用并缓存关键维度，不重复建设 |
| JOYCOLLAB 全量内容与带货明细 | JOYCOLLAB | 同步 USER 闭环所需结果摘要 |
| 财务/人事原始表 | 财务/人事系统 | 导入必要摘要，不替代源系统 |

## 27. 涉密字段处理

| 涉密字段 | 建议存储 | 建议查询 |
| --- | --- | --- |
| 订单号 | 哈希索引 + 加密原值 | 常规用哈希匹配 |
| 邮箱 | 哈希索引 + 脱敏展示 | 普通页面不暴露明文 |
| 电话 | 哈希索引 + 加密原值 | 仅授权角色可揭示 |
| 姓名/地址 | 标准化值 + 哈希/指纹 | 归并与风险用指纹 |
| 设备号 | 哈希索引 | 归并/风险用哈希 |
| IP | 脱敏存储 | 仅用于弱关联 |
| 收款信息 | 加密存储 | 财务/风险授权查看 |
| 返款金额/提成 | 权限控制 | 财务角色优先 |

## 28. 快照策略

| 快照对象 | 生成时机 | 保留策略 |
| --- | --- | --- |
| `person_feature_snapshots` | 定期刷新 + 人群生成前触发 | 保留最近 N 版 + 每次人群生成引用的版本 |
| `contact_context_snapshots` | 用户接入/工单创建/拨打前/风险升级 | 每次生成新快照，保留全量历史 |
| `audience_snapshots` | 人群生成时 | 每次计划保留 |
| `edm_user_behavior_profiles` | EDM 画像定时刷新 | 按刷新批次保留 |
| `support_performance_snapshots` | 每日/每周/每月 | 按周期聚合保留 |
| `exemption_result_snapshots` | 免评执行阶段性同步 | 按结果周期保留 |

---

# 第七部分：谁写谁读

## 29. 读写矩阵

| 对象 | 主要写入方 | 主要读取方 | 依赖它的动作 |
| --- | --- | --- | --- |
| `person_profiles` | 身份归并服务 | 用户运营、客服、风险 | 所有真实人级判断 |
| `person_identity_links` | 身份归并服务 | 风险、客服、订单核验 | 真实人识别 |
| `person_feature_snapshots` | 画像任务 | 人群生成、客服 | 画像筛选 |
| `contact_context_snapshots` | 上下文聚合服务 | 客服、用户运营 | 接入处理 |
| `person_quota_ledgers` | 额度服务 | 人群生成、渠道、客服 | 4/4/12 判断 |
| `quota_reservations` | 人群/计划服务 | 渠道、额度服务 | 发送前拦截 |
| `audience_snapshots` | 人群生成服务 | 计划、复盘 | 解释入选 |
| `channel_route_decisions` | 路由服务 | 推送、复盘 | 选渠道 |
| `interaction_recheck_records` | 互动复检服务 | 客服、风险、审计 | 决定继续/拦截 |
| `review_submission_records` | 客服/IM/TEL | 额度、计划、客服 | 计入12 |
| `review_display_checks` | 运营/系统 | 计划、ASIN看板 | 计入完成 |
| `refund_match_results` | 退款比对服务 | 风险、客服、财务 | 拦截双重退款 |

---

## 30. 还需要确认但不阻塞第三步的事项

| 事项 | 影响 |
| --- | --- |
| Amazon 订单同步频率最终是否为 10 分钟 | 影响订单/退款数据新鲜度 |
| 黑名单系统最终通过 API、表格还是消息同步 | 影响 `blacklist_entities` 同步方式 |
| Amazon Profile ID 是否稳定获取 | 影响强关联覆盖率 |
| APP 设备型号能否拿到具体型号还是只到类型 | 影响客服展示颗粒度 |
| 年龄字段来自注册资料还是推断 | 影响画像可信度 |
| KOC/KOL 结果同步周期 | 影响免评结果快照频率 |

---

## 31. 第四步入口

1. **把数据对象转成逻辑 ER 图**：以 §20 的 Mermaid ER 图为基础，明确主键、外键、1对多/多对多关系，区分复用旧表和新增表。
2. **按关键链路补接口读写**：
   1. 真实人识别与上下文链路
   2. 人群/额度/路由链路
   3. 互动复检/风险链路
   4. 评价提交/展示与退款比对链路
   5. 免评结果链路
3. **回到页面，把每一个点击绑定到明确的数据读写**。

---

## 32. 本版结论

v3 以 Codex v1.1 完整字段字典为主骨架，补入 v2 的流转时序表、写入顺序图和快照策略，形成最终统一主稿：

1. 用 **真实人** 统一账号、订单、设备和风险
2. 用 **画像快照** 解释人群生成
3. 用 **额度台账+预占** 保护 4/4/12 规则（跨账号合并）
4. 用 **路由决策+去重记录** 控制多渠道协同
5. 用 **互动复检记录** 落实"每次有效互动都重判"
6. 用 **退款比对结果** 识别双重退款
7. 用 **评价提交记录+展示核验** 拆开用户事实和平台结果
8. 用 **免评计划→任务→内容→结果快照** 让 KOC/KOL 闭环完整进入 USER 系统
