Files
Fulfilled-Knowledge/wishfulfilled-wiki/05_需求文档/03-子系统-额度与频控.md
2026-05-27 15:40:32 +08:00

199 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
1|# 子系统 03 — 额度与频控 (`quota`) v1.0
2|
3|## 子系统概述
4|
5|| 维度 | 说明 |
6|| --- | --- |
7|| 代号 | `quota` |
8|| 核心职责 | 额度台账测评4/免评4/累计12、额度预占与释放、频控规则引擎、发送前终校 |
9|| 数据所有权 | `person_quota_ledgers`, `quota_reservations`, `frequency_control_records` |
10|| 启动依赖 | identity软依赖额度按真实人计算未归并时按单一账号 |
11|| 外部系统依赖 | 无直接外部依赖 |
12|
13|---
14|
15|## 1. 模块划分
16|
17|```
18|┌─────────────────────────────────────────────────────────────┐
19|│ quota 子系统 │
20|│ │
21|│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
22|│ │ M1: 额度台账 │ │ M2: 预占管理 │ │ M3: 频控引擎 │ │
23|│ │ (Ledger) │→│ (Reservation)│ │ (FreqCtrl) │ │
24|│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
25|│ │ │ │ │
26|│ ▼ ▼ ▼ │
27|│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
28|│ │ M4: 终校服务 │ │ M5: 额度管理 │ │ M6: 对外 API │ │
29|│ │ (FinalCheck)│ │ Admin │ │ Gateway │ │
30|│ └──────────────┘ └──────────────┘ └──────────────┘ │
31|│ │
32|└─────────────────────────────────────────────────────────────┘
33|```
34|
35|| # | 模块 | 代号 | 职责 |
36|| --- | --- | --- | --- |
37|| M1 | 额度台账 | `quota-ledger` | 维护真实人三层额度测评4/免评4/累计12、已用/进行中/已预占计数 |
38|| M2 | 预占管理 | `reservation-mgr` | 额度预占创建、确认占用、超时释放;跨计划重复入选检测 |
39|| M3 | 频控引擎 | `freq-control` | 渠道频控IM/EDM/APP/TEL 最近触达间隔)、单 ASIN 短期触达次数、退订/投诉屏蔽 |
40|| M4 | 终校服务 | `final-check` | 发送前合并校验(最新额度 + 最新风险 + 最新未关闭工单),准入/撤出决策 |
41|| M5 | 额度管理 Admin | `quota-admin` | 额度手动调整、额度重置、额度审计 |
42|| M6 | 对外 API Gateway | `quota-api` | 供 planning人群生成、outreach发送前校验、review提交后确认调用 |
43|
44|---
45|
46|## 2. 各模块内外说明
47|
48|### 2.1 M1: 额度台账
49|
50|| 维度 | 说明 |
51|| --- | --- |
52|| **对内** | 按真实人维护三种额度:月度测评(已完成+进行中+已预占、月度免评同上、累计真实提交评价永久累计额度计数时点明确提交评价立即计数12、不会因 Amazon 未展示回退);接近上限时预警 |
53|| **对外接口** | `GET /api/quota/ledger/{person_id}` — 读取当前台账 |
54|| **数据写入** | `person_quota_ledgers` |
55|| **依赖** | `GET /api/identity/person` — 获取真实人 ID |
56|
57|### 2.2 M2: 预占管理
58|
59|| 维度 | 说明 |
60|| --- | --- |
61|| **对内** | 人群生成时预占额度(测评/免评);计算:已用+进行中+已预占+本次拟发送 > 上限 → 拦截;剩余不足但>0 → 预警池 → 发送前人工复核;预占有效期管理,超时自动释放;并发占用控制(同一真实人跨计划重复入选检测) |
62|| **对外接口** | `POST /api/quota/reserve` — 创建预占;`POST /api/quota/commit` — 确认占用;`POST /api/quota/release` — 释放预占 |
63|| **数据写入** | `quota_reservations` |
64|
65|### 2.3 M3: 频控引擎
66|
67|| 维度 | 说明 |
68|| --- | --- |
69|| **对内** | 四种频控维度①渠道频控IM/EDM/APP/TEL 最近触达间隔)②单 ASIN 短期内触达同一用户次数 ③用户反感度(投诉/退订状态)④用户在客服工单中暂不触达;频控规则可配置 |
70|| **对外接口** | `GET /api/quota/freq-check/{person_id}?channel=IM&asin=xxx` — 频控检查 |
71|| **数据写入** | `frequency_control_records` |
72|| **依赖** | 触达历史来自 outreach`GET /api/outreach/history/{person_id}` |
73|
74|### 2.4 M4: 终校服务
75|
76|| 维度 | 说明 |
77|| --- | --- |
78|| **对内** | 发送前做最终校验:①重新读取最新额度(防止发送和预占之间额度变化)②重新读取最新风险状态 ③重新读取最新未关闭工单;三者全部通过→准入发送;任一新增超限/风险/工单→撤出本批次 |
79|| **对外接口** | `POST /api/quota/final-check` — 批量终校(输入 person_ids + plan_id返回每个的准入/撤出决策) |
80|| **数据写入** | 终校结果写入审计日志 |
81|| **依赖** | `GET /api/risk/check/{person_id}``GET /api/tickets?person_id=&status=open` |
82|
83|### 2.5 M5: 额度管理 Admin
84|
85|| 维度 | 说明 |
86|| --- | --- |
87|| **对内** | 额度手动调整(运营确认某次测评不计入额度等);额度重置(新月份额度初始化);额度审计(谁改了什么额度) |
88|| **对外接口** | 管理 API |
89|
90|### 2.6 M6: 对外 API Gateway
91|
92|| 维度 | 说明 |
93|| --- | --- |
94|| **对外接口** | `GET /api/quota/check/{person_id}?type=测评` — 额度查询+可用判断;`POST /api/quota/reserve` — 预占;`POST /api/quota/commit` — 确认;`POST /api/quota/release` — 释放;`POST /api/quota/final-check` — 终校 |
95|
96|---
97|
98|## 3. 对外 API 契约(草案)
99|
100|| 接口 | 方法 | 输入 | 输出 | 消费者 |
101|| --- | --- | --- | --- | --- |
102|| 额度查询 | `GET /api/quota/check/{person_id}?type=REVIEW` | person_id + 额度类型 | `{used, in_progress, reserved, remaining, status(sufficient/warning/exceeded)}` | planning, outreach |
103|| 批量预占 | `POST /api/quota/reserve` | `[{person_id, type, plan_id, count}]` | `[{person_id, success, reservation_id}]` | planning人群生成时 |
104|| 确认占用 | `POST /api/quota/commit` | `[{reservation_id}]` | `[{reservation_id, committed}]` | review用户提交评价后 |
105|| 释放预占 | `POST /api/quota/release` | `[{reservation_id}]` | `[{success}]` | planning计划取消时 |
106|| 频控检查 | `GET /api/quota/freq-check/{person_id}?channel=&asin=` | person_id + 渠道 + ASIN | `{allowed, reason, cooldown_until}` | outreach发送前 |
107|| 发送前终校 | `POST /api/quota/final-check` | `[{person_id, plan_id}]` | `[{person_id, decision: APPROVED/WITHDRAWN, reasons}]` | outreach发送前最后一步 |
108|
109|---
110|
111|## 4. 数据对象
112|
113|| 对象 | 核心字段 | 说明 |
114|| --- | --- | --- |
115|| `person_quota_ledgers` | ledger_id, person_id, quota_type (MONTHLY_REVIEW/MONTHLY_EXEMPTION/LIFETIME_SUBMISSION), period, used, in_progress, reserved, limit_value, status | 三层额度台账 |
116|| `quota_reservations` | reservation_id, person_id, ledger_id, plan_id, count, status (RESERVED/COMMITTED/RELEASED/EXPIRED), reserved_at, expires_at | 额度预占记录 |
117|| `frequency_control_records` | freq_id, person_id, channel, asin, last_contact_at, contact_count_period, status | 频控记录 |
118|
119|---
120|
121|## 5. 业务澄清问题清单 — quota
122|
123|### 5.1 额度规则细化5 项)
124|
125|| # | 问题 | 优先级 |
126|| --- | --- | --- |
127|| Q-01 | 月度额度按自然月还是 30 天滚动?如果是自然月:①预占在 1 月 31 日2 月 1 日释放还是保留②1 月 31 日晚 23:59 的预占跨月怎么处理? | **P0** |
128|| Q-02 | 「测评 4 次」中的「次」定义:是指参与 4 个不同的测评计划,还是提交 4 条评价?(如果 1 个计划要求用户提交 3 条评价,占 3 次还是 1 次?) | **P0** |
129|| Q-03 | 「累计 12 个真实提交评价」是永久上限还是可以动态调整?(例如用户长期优质且评价质量高,是否可以人工放宽?放宽流程?) | P1 |
130|| Q-04 | 测评和免评额度是否独立?(测评 4 次 + 免评 4 次 = 同一真实人一月最多参与 8 个计划?)还是测评和免评共享总额度? | P1 |
131|| Q-05 | 额度计算中「进行中」的定义——什么状态才算进行中?(已生成人群?已发送触达?用户已回应?已提交评价待核验?) | P1 |
132|
133|### 5.2 预占机制4 项)
134|
135|| # | 问题 | 优先级 |
136|| --- | --- | --- |
137|| Q-06 | 预占有效期多长预占后用户始终未响应多久释放1 天7 天?计划周期结束?) | **P0** |
138|| Q-07 | 预占释放后是否可以自动重新分配给同一计划的其他用户?是否触发重新生成人群? | P1 |
139|| Q-08 | 跨计划并发占用检测——同一真实人在计划 A 和计划 B 同时被入选,谁先预占谁得?还是按计划优先级? | P1 |
140|| Q-09 | 预占是否可手动取消/释放?(运营发现某用户不应计入某计划时) | P2 |
141|
142|### 5.3 频控规则4 项)
143|
144|| # | 问题 | 优先级 |
145|| --- | --- | --- |
146|| Q-10 | 各渠道频控的具体阈值是什么IM 每日最多 X 次EDM 每周最多 Y 封APP Push 每日最多 Z 条TEL 每日最多 N 通?) | **P0** |
147|| Q-11 | 频控规则是否区分计划类型?(紧急催评是否可以突破频控?) | P1 |
148|| Q-12 | 频控是全局统一配置还是按用户层级可调整A 类和 C 类用户频控规则是否不同?) | P1 |
149|| Q-13 | 「单 ASIN 短期触达次数」——多少天内触达多少次算超标? | P2 |
150|
151|### 5.4 预警与异常3 项)
152|
153|| # | 问题 | 优先级 |
154|| --- | --- | --- |
155|| Q-14 | 预警阈值如何设定?(剩余 1 次时预警?剩余 N% 时预警?不同类型额度预警阈值是否不同?) | P1 |
156|| Q-15 | 终校中「新增风险」的判断——距离上次风险检查超过多少时间需重查?还是每次终校都实时查 risk | P1 |
157|| Q-16 | 额度数据异常时的处理策略?(台账数据与预占记录不一致、预占未释放导致额度泄漏——系统如何自动发现和修复?) | P2 |
158|
### 5.5 额度异常与纠错4 项)
| # | 问题 | 优先级 |
| --- | --- | --- |
| Q-17 | 用户反馈「我明明只参与了 3 次测评,系统说我已用 4 次」——申诉流程?谁有权限查台账和修正? | P1 |
| Q-18 | 额度台账的审计追踪——每次额度变更(预占/确认/释放/手动调整)是否记录完整操作人和原因?保留多久? | P1 |
| Q-19 | 数据异常自动检测——台账数据与预占记录之和是否需要对账?系统是否定期自动化对账并报告差异? | P1 |
| Q-20 | 如果发现「额度泄漏」(预占未释放导致额度永久被占),系统如何自动发现和修复?(定时扫描过期预占?手动触发对账?) | P2 |
### 5.6 紧急/例外处理4 项)
| # | 问题 | 优先级 |
| --- | --- | --- |
| Q-21 | 大促期间Prime Day/Black Friday是否需要临时额度提升测评 4→8由谁审批临时额度有效期 | P1 |
| Q-22 | 高价值用户是否可以突破额度限制?(例如 KOC 级别的用户需要超额参与——人工审批流程?) | P1 |
| Q-23 | 「紧急计划」是否可以跳过频控?(例如 Listing 评分暴跌至 3.8 需要紧急大量催评——是否豁免部分频控规则?) | P1 |
| Q-24 | 额度手动调整是否需要审批?审批权限?(谁可以手动给某人加/减可用额度?) | P2 |
### 5.7 跨站点/跨平台额度3 项)
| # | 问题 | 优先级 |
| --- | --- | --- |
| Q-25 | 额度是否跨 Amazon 站点?(.com 参与了 2 次测评 + .co.uk 参与了 3 次 → 全局算 5 次还是各自独立?) | P1 |
| Q-26 | 累计 12 个评价是否跨站点统计?(在 .com 提交了 8 个 + .co.uk 提交了 5 个 → 是否算 13 个超限?) | P1 |
| Q-27 | 未来扩展到非 Amazon 平台额度体系是否独立eBay 的测评额度与 Amazon 的额度是否共享?) | P2 |
### 5.8 额度可见性2 项)
| # | 问题 | 优先级 |
| --- | --- | --- |
| Q-28 | 用户是否能看到自己的额度状态APP 端显示「本月还可参与 2 次测评」——是否对用户可见?) | P2 |
| Q-29 | 运营视角的额度看板——能否看到「全局额度使用率」「各真实人的额度分布」「额度预警用户列表」? | P1 |
### 5.9 实施层面3 项)
| # | 问题 | 优先级 |
| --- | --- | --- |
| Q-30 | 终校服务的性能要求——批量终校(一次可能几百人)需要在多少 ms 内完成?(涉及跨子系统调用 risk + support | P2 |
| Q-31 | 频控规则是否需要热更新(不重启服务即可调整阈值)?配置管理方案? | P1 |
| Q-32 | 额度台账历史数据的初始化——旧系统的数据如何映射到三层额度模型?(无「真实人」概念的老数据如何归入?) | P1 |