1031 lines
44 KiB
Markdown
1031 lines
44 KiB
Markdown
# 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 系统
|