# 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["解析真实人
读 person_identity_links"] B --> C["生成/更新上下文卡
写 contact_context_snapshots"] C --> D["读取最新额度
读 person_quota_ledgers"] D --> E["执行风险判断
读 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 系统