禁止同 IP 用户参与 · PRD
作者 Luke 版本
v1.15 日期 2026-10-06 状态
进行中 平台 BRAND_A & BRAND_B 类
P
模板基准 prd
模板调整说明:沿用一页式 L0/L1
结构;将旧版独立后台名单说明并入 §6,减少同一需求出现两份现行 PRD
的歧义。Axure「更新2_Promo
List_活动管理列表」仅是活动模板共用条件与名单功能参考,不是需求 06
的同名精确页面。
版本记录
| 版本 |
日期 |
变更摘要 |
| v1.15 |
2026-10-06 |
活动列表回归 Axure,同 IP 限制只在新建/修改活动的 M1
基本信息配置;名单页动态带入活动名称;登录 IP
黑名单移除所有批量操作,仅保留查询、下载与匹配用户下钻(§6)。 |
| v1.14 |
2026-10-06 |
依 Luke 确认开放 IP
黑名单的删除全部、导入、导出与下载模板;补齐两类真实 Excel
导入模板、权限与审计要求,并对齐 Axure 活动标题样式(§6~§7)。 |
| v1.13 |
2026-10-06 |
将「监测与待确认项」移入附录 C;依新版模板将原型视觉清单收为附录
D;同步 BO Axure 对齐范围(§6、附录
C~D)。 |
| v1.12 |
2026-10-05 |
同步需求 15 的清单修正:拆分「应交付什么」与「HTML
内容图片槽位契约」,明确需求 06 要交付 BO HTML、不交付 Client
HTML;业务规则与 BO 画面不变(§1、附录 C)。 |
| v1.11 |
2026-10-05 |
补齐 §6.5 IP 下钻空态与 Username 必填错误的中英逐字文案,使 BO
原型的 copy 标记可校验。 |
| v1.10 |
2026-10-05 |
依现行简版模板重制;业务规则不变;并入活动列表、黑名单与白名单后台范围(§6);新增双语
HTML 与 INFO-v1 资讯图(L0)。 |
| v1.9 |
2026-08-20 |
重构判定(§2)、派奖与名单(§3–§4)、并发与验收规则(§5、附录
A)。 |
目录
L0 · 快速掌握

① 一句话需求
在活动模板 Basic Info 增加共用条件「是否禁止同 IP
参与」;开启后,Apply/Claim
的领取人若与同品牌、同活动实例内的已领奖账号共享回看窗口内任一完整登录
IP,则永久自动拒绝本账号。
② 术语写死表
| 词 |
本文唯一含义 |
| 触发点 |
用户手动点 Apply 或 Claim;不含 payday
排程派奖。 |
| 活动实例 |
单一 aid;同模板产生的新 aid
独立计算。 |
| Set_A |
领取人于回看窗口内的完整、去重、规范化登录 IP 集合。 |
| related |
与 Set_A 有交集的已领奖账号,扣除领取人本人后的去重账号集合。 |
| 拒绝资料 |
永久拒绝是在同品牌、同
aid、同账号范围内不可删除、失效或撤销的终态记录;登录 IP
黑名单是活动级查询/下钻视图,不提供批量操作,也不代替登录日志与已领奖资料作为同
IP 判断真源。 |
③ 全局红线表
| # |
不变量 |
破了会怎样 |
验证锚点 |
| G1 |
两边都用回看窗口内完整登录 IP 集合,且排除本人。 |
重复领取者会被自己永久拒绝,或漏掉非最后一次登录 IP。 |
AC1 AC2 AC3
AC4 |
| G2 |
判断范围固定为 brand + aid,只做完整 IP 精确匹配。 |
跨品牌/跨活动误杀,或 /24 模糊匹配扩大误伤。 |
AC5 AC6 AC7 |
| G3 |
系统繁忙只拦本次且不留永久痕迹。 |
短暂故障会把用户永久锁死。 |
AC8 AC9 AC11
AC12 AC23 AC27 |
| G4 |
同 IP 并发只允许一人成功;入账与写已领奖名单同事务。 |
两人同时领奖或出现已入账但未占位。 |
AC13 AC14 AC15 |
| G5 |
白名单在既有前置检查后、同 IP 判断前生效。 |
无资格者被发奖,或白名单仍被同 IP 拒绝。 |
AC16 AC17 AC18
AC25 AC26 |
| G6 |
玩家端绝不出现 IP、关联账号、数量或判定依据。 |
泄露其他用户资料或暴露绕过方式。 |
AC19 AC20 AC28 |
| G7 |
IP 黑名单仅供审计,不作为判断真源。 |
视图失效或延迟会错误放行/拦截。 |
AC21 AC22 AC24 |
④ 适用范围与「不做」边界
本期做
- 活动模板 Basic Info 共用开关与 Apply/Claim 判断链(§1–§2)。
- 成功、永久自动拒绝、系统繁忙三种结果及记录(§3)。
- 活动级白名单、用户黑名单既有批量操作,以及登录 IP
黑名单的查询/下载/下钻页面(§4、§6)。
- 并发、幂等、fail-close 与监测边界(§5、附录 C)。
明确不做
- 不适用于 payday 排程派奖(§1)。
- 不新增 claim IP,不以
login_ip_snapshot
参与判断(§2、§3)。
- 不支持 IPv6;本期只处理规范化后的 IPv4(§2)。
- 不以登录 IP 黑名单的失效时间做判断闸门;该 Tab
不提供删除、导入或模板下载(§6)。
- 不补 Client HTML;玩家侧沿用既有活动页、Toast
与消息中心(§3)。
- 不回填上线前的已领奖或拒绝资料;新
aid
由空资料开始(§3)。
读者为后台前端、服务端、测试、运营与稽核。
1. 范围、入口与优先级
1.1 配置入口与原型依据
| 项目 |
规则 |
| 配置位置 |
活动模板 Basic Info 共用条件:「是否禁止同 IP
参与」。 |
| 适用触发 |
类型 1 Apply、类型 2 Claim
的用户手动动作。 |
| 开关关闭 |
完全不执行本规则,也不回退旧版同 IP 逻辑。 |
| Axure |
更新2_Promo List_活动管理列表
是共用条件/名单入口的功能参考;不要求存在「需求 06」同名精确页。 |
| 视觉与行为冲突 |
以本 PRD 为准;例如 Axure
的「点击领取时间」统一为「点击触发时间」。 |
1.2 判定优先级
- 先走活动有效、领取资格、身份与既有幂等前置检查。
- 前置通过后先查活动白名单;命中则跳过永久拒绝与同 IP
判断,直接走派奖。
- 未命中白名单才查永久拒绝记录;已有记录则立即返回自动拒绝。
- 未命中白名单且无永久拒绝记录,才取活动锁并执行同 IP 判断。
- 任一步资料读取失败或超时都进入系统繁忙,不得按未命中处理。
2. 同 IP 判定
2.1 判断范围与资料集
| 项目 |
唯一口径 |
| 隔离键 |
brand + aid;不是活动模板 ID。 |
| 回看窗口 |
以取到活动锁后的判断时点为上界;默认近 90
天、含下界、秒级精度,最终值见 OP-3。 |
| 领取人 |
读取其窗口内全部 distinct 登录 IP,形成 Set_A。 |
| 已领奖侧 |
由 Set_A 反查窗口内用过任一相同 IP 的账号,再与本
brand + aid 已领奖账号取交集。 |
| 排除本人 |
related = candidates ∩ claimed_users − {self}。 |
| 无登录记录 |
Set_A = ∅ 属资料不完整,返回系统繁忙;不得放行。 |
2.2 IP 规范化
- 只比较登录 IP,不读取领取请求 IP。
- IPv4 在集合化前规范化为同一数值表达,例如
192.000.002.001 与 192.0.2.1 相同。
- 只做完整 IP 精确相等,不做
/24、字串前缀或地理区域匹配。
- IPv4-mapped IPv6 必须转为对应 IPv4;其他 IPv6 本期不纳入。
2.3 结果决策
2.3.1 一次触发只会落入下列一种结果:
| 条件 |
结果 |
related = ∅ |
派奖成功,并写入已领奖名单。 |
related ≠ ∅ |
写永久拒绝记录;本次不派奖。 |
| 读取、锁或事务失败 |
系统繁忙;本次不派奖、不写永久拒绝。 |
2.3.2 每个共享 IP
群组的第一位领取者必然可能成功;这是先到先得模型的已知边界,不得在文案中承诺「同
IP 的所有人都不会得奖」。
3. 结果、提示与记录
3.1 三种结果与玩家文案
3.1.1 Toast 只表达结果;站内信承载正式说明:
| 结果 |
玩家端 Toast |
站内信 |
是否可重试 |
留痕 |
| 领取成功 |
Bonus claimed successfully. |
Reload Bonus 成功信 |
— |
已领奖名单。 |
| 系统自动拒绝 |
Your account is no longer eligible for this promotion. See Messages for details. |
首次发送 Bonus claim failed |
否;永久失格 |
唯一永久拒绝记录。 |
| 系统繁忙重试 |
↪ 系统繁忙,请稍后再试 /
Something went wrong. Please try again later. |
同步方案不发信 |
是 |
仅运行日志,不留资格记录。 |
3.1.2
成功信正文:An amount of {Bonus Amount}PHP has been credited to your account. To view the details of this transaction, please check Balance Record.
3.1.3
拒绝信正文:Your Reload Bonus of {Bonus Amount}PHP on {Claim Time} was not successful.
/ You are no longer eligible for this promotion.
3.1.4 {Claim Time} 为用户点击
Apply/Claim 的服务端时间,格式 YYYY-MM-DD HH:mm:ss。Toast
与站内信不得出现 IP、关联账号、账号数、命中规则或复查承诺。
3.2 永久拒绝记录
| 项目 |
规则 |
| 唯一键 |
(brand, aid, user_hash)。 |
| 生命周期 |
不删除、不失效、不撤销;换新 aid 不继承。 |
| 重复点击 |
仅限本次白名单未命中:按已有记录即时拒绝;不重判、不进队列、不新增记录、不重发信。若后来加白,则依
§1.2 白名单优先规则处理。 |
| 领取按钮 |
仍显示并允许点击;点击后回相同拒绝结果。 |
login_ip_snapshot |
点击时最后一次登录 IP 的单值证据;绝不作为判断输入。 |
| 既有资料 |
上线不回填,拒绝表与已领奖名单由空资料开始。 |
3.3 后台派发记录备注
3.3.1 自动拒绝时于 Remarks
写:Related claimed accounts: {total}; First 5: {sorted usernames}。账号去重后依稳定规则排序,只列前
5 个与总数,不写 IP;栏位长度须容纳最坏约 112
字符(OP-4)。
4. 白名单
4.1 作用与优先级
- 白名单资料按
aid 管理;入口可从所有活动列进入。
- 只有既有前置检查通过后才查白名单;活动过期或账号无资格时不发奖。
- 命中白名单即跳过同 IP 判断并直接走既有派奖。
- 加白不删除永久拒绝记录;删白后恢复原状态,已有永久拒绝者仍被拒绝。
- 白名单长期有效,直到管理员手动删除;可选择账号下线一并加白。
4.2 管理行为
| 行为 |
规则 |
| 新增 |
Username 必填;「下线是否加白」默认否;备注选填、最多 200 个 Unicode
字符,中英文等权。 |
| 删除单笔/全部 |
二次确认;只删除白名单资料,不改永久拒绝或已领奖记录。 |
| 导入 |
UTF-8 CSV;表头固定为
用户名 / 下线是否加白(Y·N)/ 备注;逐行返回错误位置与原因。 |
| 导出 |
导出当前筛选条件下全部结果,不受分页影响;不含操作栏。 |
| 编辑 |
不提供;需删除后重新新增。 |
5. 并发、失败与性能
5.1 并发与幂等
| 约束 |
可观察结果 |
| 单次操作幂等 |
同一次 Apply/Claim
操作的重放或重复请求只入账、写名单、发信一次;后到请求回该次操作首笔结果。新的合法领取不是重放,必须重新走完整规则。 |
活动级串行覆盖 brand + aid |
同 IP 两账号同时领取,恰好一人成功、一人自动拒绝。 |
| 临界区 |
反查 → 求交 → 入账 → 写已领奖名单完整受保护。 |
| 原子性 |
入账与写名单同事务;任一步失败全部回滚并返回系统繁忙。 |
| 拒绝路径 |
写完拒绝记录后释放活动锁;发信与备注在锁外。 |
| 白名单路径 |
现行规则不走活动锁,由用户幂等与既有入账原子性保护;其与普通领取的并发顺序见
OP-8。 |
5.2 fail-close 与缓存
- 持久层是真源;一般资料缓存失效时回源真源,真源不可用则系统繁忙。
- 白名单读取、锁服务或登录资料不可用时系统繁忙,不得按未命中放行。
- DDoS
前置拦截只可在本次白名单查询未命中后读取;命中已永久拒绝账号/IP
的缓存时可直接回自动拒绝。新增、删除或导入白名单必须先失效同
brand + aid + user_hash
的拒绝快取;该前置层不可用时按现行规则返回系统繁忙。
- 系统繁忙须写固定原因标签的运行日志,但不写永久拒绝记录或拒绝信。
5.3 性能基线
5.3.1 判断链目标 p99 < 50 ms;以
IP+时间复合索引反查,成本应随 |Set_A|
增长,不得逐一加载所有已领奖账号的历史。只有实测 p99 > 800 ms
才评估异步;若采用异步,仅在自动重试耗尽仍无结果时发送「未处理」信。
6. 后台页面与字段
6.1 页面地图
| 页面 |
本需求差异 |
| 活动管理列表 |
依 Axure 显示活动
ID、模板名称、活动名称、用户渠道、排序、起讫日期、进行状态与操作;不新增「同
IP 限制」列。点「修改」或「新建活动」才进入 M1 基本信息。 |
| 活动 M1 基本信息 |
在新建/修改活动的 M1 区域放置「是否禁止同 IP
用户参与」共用条件;列表本身不展开此条件。 |
| 活动黑名单 |
保留「用户黑名单」既有批量操作;「登录 IP 黑名单」只提供
IP/Username
查询、下载与匹配用户数下钻,不提供删除全部、导入或下载模板。左侧目录仍只显示「活动管理列表」。 |
| 活动白名单 |
新增查询、新增、删除单笔、删除全部、导入、导出与下载模板;新增按钮进入
Axure 同结构的整页「新增用户」表单。 |
6.2 登录 IP 黑名单字段
| 层级 |
字段 |
口径 |
| 列表 |
ID |
登录 IP 黑名单记录 ID。 |
| 列表 |
Login IP / IP |
活动登录 IP 黑名单键;完整 IPv4 精确值。 |
| 列表 |
Matching Accounts |
匹配用户数;以下划线数字显示,点击进入匹配用户列表。 |
| 列表 |
Created Time |
首次拉黑时间。 |
| 列表 |
Invalid Time |
最近一次被领取判断反查关联到的日期+回看窗口,取当天
23:59:59;只影响视图状态,不影响判断。 |
| 下钻 |
Username |
一账号一列。 |
| 下钻 |
Last Login Time |
该账号最近登录时间。 |
| 下钻 |
Trigger Time |
Apply/Claim 点击触发时间;取代 Axure 的「点击领取时间」。 |
| 下钻 |
Rejected Time |
最新一笔拒绝记录时间。 |
6.2.1 登录 IP 黑名单可依 IP 或 Username
查询;「下载/Export」紧邻「搜索/Search」,导出当前筛选的全部资料。本
Tab 没有删除全部、导入、批量编辑或下载导入模板。
6.2.2 黑名单与白名单页面标题均显示「名单类型 —
[活动名称]」;活动名称必须由用户在活动列表点击的该笔记录动态带入,不得写死示例名称。
6.3 白名单字段
| 字段 |
口径 |
| Username |
一个账号在一个 aid 一笔。 |
| Downline Whitelisted |
Yes/No。 |
| Added Time |
成功新增时间。 |
| Administrator |
最近新增该列的操作人。 |
| Remarks |
0–200 个 Unicode 字符。 |
6.3.1 白名单批量操作列按 Axure
排列:左侧「删除全部数据」,右侧依序为「导入数据/导出数据/下载导入模板」。新增使用整页表单:Username、下线是否加白(默认「否」)、Remarks、确认与取消。
6.3.2 白名单 Excel 导入模板比照 Axure
截图,表头固定为 用户名 / 下线是否加白 / 备注;第二栏只接受
Y / N。「下载导入模板」必须下载真实 .xlsx
文件,不得只显示成功提示。
6.4 页面状态
6.4.1 活动列表、黑名单双
Tab、下钻与白名单页面都须具备 Content、Loading、Empty、Error;Error 提供
Retry。删除确认只陈述「从本活动白名单移除后恢复原资格状态」,不得承诺一定可以或不可以参与。
6.5 后台逐字文案
| 场景 |
中文 |
English |
| Error |
资料读取失败,本次不显示旧资料。 |
Failed to load data. Stale data is not shown. |
| IP 下钻空态 |
没有关联拒绝账号 |
No related rejected accounts |
| Username 必填错误 |
Username 为必填。 |
Username is required. |
| 登录 IP 列表说明 |
失效时间不影响领取判断;点击匹配用户数可查看详情。 |
Invalid Time does not change claim judgment. Select Matching Accounts to view details. |
| IP 下钻敏感说明 |
敏感资料:只供已授权运营/稽核查看,并记录查询日志。 |
Sensitive data: authorized Operations/Audit only; access is logged. |
| 删除单笔确认 |
移除后只恢复该账号原本的资格状态;不承诺其一定可以或不可以参与。永久拒绝记录不会删除。 |
Removal only restores the account's original eligibility state and makes no participation promise. Permanent rejection is not deleted. |
| 删除全部确认 |
这会移除当前活动的全部白名单。各账号只恢复原资格状态;永久拒绝与已领奖记录均不会删除。 |
This removes every whitelist entry for this campaign. Each account returns only to its original eligibility; permanent rejection and claimed records remain. |
| 操作成功 |
操作成功,并写入 Admin Action Log。 |
Success. The action was recorded in the Admin Action Log. |
7. 权限、审计与资料边界
7.1 权限契约
7.1.1 功能级权限点最终名称见
OP-6;至少须分别控制:查看活动名单、查看登录 IP
下钻、导出登录 IP
黑名单、新增白名单、删除白名单、白名单导入/导出/下载模板。用户黑名单批量操作沿用既有权限;登录
IP 黑名单不定义删除、导入或批量编辑权限。
7.2 Admin Action Log
7.2.1
用户黑名单与白名单的新增、删除、导入与导出沿用既有审计;登录 IP
黑名单下钻与下载属于敏感查询,记录查询人、时间、aid
与查询条件;日志不得复制完整导出内容。
7.3 品牌与隐私
7.3.1
管理员只能看到被授权品牌与活动。玩家接口永远不回传 IP 或其他账号;后台
IP 与账号资料只供获授权的运营/稽核人员使用。
附录 A:验收标准
| # |
P |
验收点 |
| AC1 |
P0 |
同账号成功后发起新的合法领取,排除本人后
related = ∅,仍可成功(G1)。 |
| AC2 |
P0 |
领取人只在窗口内某一次登录用过撞车
IP,仍自动拒绝(G1)。 |
| AC3 |
P0 |
两侧时间窗对称;默认值下 80 天记录计入、95
天记录不计(G1)。 |
| AC4 |
P0 |
192.000.002.001 与 192.0.2.1
相同;相邻但不同完整 IP 不相同(G1)。 |
| AC5 |
P0 |
BRAND_A 已领奖资料不影响 BRAND_B(G2)。 |
| AC6 |
P0 |
同模板新 aid 不继承旧 aid
永久拒绝(G2)。 |
| AC7 |
P0 |
第一个共享 IP
领取者可成功,后来的相关账号被拒绝(G2)。 |
| AC8 |
P0 |
Set_A
为空时系统繁忙,不放行且无永久记录(G3)。 |
| AC9 |
P0 |
拒绝记录读取失败、白名单读取失败或锁失败时系统繁忙,不留永久痕迹(G3)。 |
| AC10 |
P0 |
入账后写名单失败时整笔回滚,不回成功。 |
| AC11 |
P0 |
一般缓存失效可回源;真源不可用则系统繁忙(G3)。 |
| AC12 |
P0 |
系统繁忙只写运行日志,不发同步站内信(G3)。 |
| AC13 |
P0 |
同 IP 两账号相隔 < 50 ms
并发,恰好一个成功、一个自动拒绝(G4)。 |
| AC14 |
P0 |
同一次操作即使使用不同幂等键重放,也只入账、写名单、发信一次;之后新的合法领取仍重走完整规则(G4)。 |
| AC15 |
P0 |
事务失败后活动锁可释放,不形成占位残留(G4)。 |
| AC16 |
P0 |
白名单与永久拒绝同时存在时,前置通过后先命中白名单并直接派奖,且拒绝记录保留(G5)。 |
| AC17 |
P0 |
活动结束时白名单账号仍不发奖(G5)。 |
| AC18 |
P0 |
删白后恢复原资格状态;已有永久拒绝者继续拒绝(G5)。 |
| AC19 |
P0 |
拒绝 Toast、信件与接口不含
IP、账号、数量、依据或复查承诺(G6)。 |
| AC20 |
P0 |
后台 Remarks 显示关联总数与稳定排序后的前 5 个账号,不含
IP(G6)。 |
| AC21 |
P0 |
IP
黑名单列失效不改变判断;判断仍读取登录日志与已领奖真源(G7)。 |
| AC22 |
P0 |
白名单/历史拒绝短路不刷新 IP 视图失效时间(G7)。 |
| AC23 |
P0 |
本次白名单未命中时,已拒绝账号重复点击即时返回相同拒绝,不重判、不重发信;后来加白者依
AC16 放行(G3 G5)。 |
| AC24 |
P0 |
登录 IP 黑名单仅有 IP/Username 查询、下载与 Matching Accounts
下钻;不出现删除全部、导入、批量编辑或下载导入模板(G6
G7)。 |
| AC25 |
P0 |
白名单新增校验必填、默认值与 200
字符;中英文等权计数(G5)。 |
| AC26 |
P0 |
登录 IP
黑名单与白名单导出覆盖当前筛选的全部资料、不受分页影响且无操作栏;只有用户黑名单/白名单的既有流程保留下载导入模板(G5)。 |
| AC27 |
P0 |
四种页面状态均可进入,Error 的 Retry
恢复当前页面与筛选(G3)。 |
| AC28 |
P0 |
无权限用户看不到对应入口,直接请求仍被拒绝并留安全日志(G6)。 |
附录 B:关键决策表
| 前置 |
白名单 |
永久拒绝 |
同 IP 结果 |
最终结果 |
| 不通过 |
任意 |
任意 |
不执行 |
既有前置失败。 |
| 通过 |
命中 |
任意 |
不执行 |
先命中白名单并直接派奖;原拒绝记录不变。 |
| 通过 |
未命中 |
已存在 |
不执行 |
白名单未命中后才即时自动拒绝。 |
| 通过 |
未命中 |
无 |
related = ∅ |
派奖成功。 |
| 通过 |
未命中 |
无 |
related ≠ ∅ |
写永久拒绝并返回自动拒绝。 |
| 通过 |
查询失败 |
任意 |
无法完成 |
系统繁忙,不留永久痕迹。 |
附录 C:监测与待确认项
C.1|上线监测
C.1.1 运营依下列门槛人工监测:
| 信号 |
阈值 |
动作 |
| 被拒用户命中 IP 的领奖率 |
< 30% |
停用规则并复核误伤。 |
| 活动参与率 |
> 20% |
重新评估误伤风险。 |
C.1.2
内部/测试账号不享有判断豁免。测试或预发可提供受控重置工具,一次原子清除指定
brand + aid + user_hash 的永久拒绝、已领奖占位/缓存、IP
视图物化资料与 DDoS 键;生产不提供入口。
C.2|待确认项
C.2.1
下列项目不改变当前可验收规则,但须在对应时点定案:
| # |
问题 |
决策者 |
时点 |
OP-1 |
登录日志实际表名与 IP+时间复合索引。 |
开发 |
开发评审前 |
OP-2 |
活动锁实现、TTL 与短暂重试参数。 |
开发 |
开发评审前 |
OP-3 |
回看窗口最终值;当前默认 90 天、不得低于 30 天。 |
开发/运营 |
开发评审前 |
OP-4 |
Remarks 现网类型与长度是否容纳约 112 字符。 |
开发 |
开发评审前 |
OP-5 |
白名单缓存、IP 视图实时/物化、DDoS 键与 TTL。 |
开发 |
开发评审前 |
OP-6 |
后台名单查看、下钻与各项批量操作的真实权限点名称与角色矩阵。 |
产品/后台开发 |
开发评审前 |
OP-7 |
CSV
导入采用直接处理或预览确认、单批上限、重复列与并发重复规则。 |
产品/开发 |
开发评审前 |
OP-8 |
白名单账号与普通账号并发领取时,白名单成功是否应先占位并阻挡普通账号。 |
产品/开发 |
开发评审前 |
OP-9 |
测试环境重置工具的真实表、缓存键与权限。 |
开发/QA |
联测前 |
原型视觉清单
附录 D:原型视觉清单
| 视觉 ID |
载体 |
用途 |
证据 |
VIS-BO-001 |
BO |
活动模板 Basic Info 共用开关、活动列表、黑名单双 Tab/IP
下钻、白名单管理与四状态。 |
§1.1、§4.2、§6.1–§6.5 |
D.1|本需求应交付什么
| 交付 ID |
交付物 |
必须呈现 |
文件 |
INFO-ZH |
中文资讯图表 |
共用开关、同 IP 判定、白名单优先、永久拒绝与名单闭环 |
infographic/prd_v1.10_infographic.png |
INFO-EN |
English infographic |
与中文资讯图相同口径 |
infographic/prd_en_v1.10_infographic.png |
BO-SHARED-CONDITION |
BO HTML |
活动模板 Basic Info 共用开关、活动列表、名单与四状态;Axure
仅作对应功能参考,不是需求 06 精确页面 |
prototype/Html_BO_v*_sameIpClaimRestriction.html |
| Client(不适用) |
Client HTML |
不交付:玩家侧沿用既有活动页、Toast
与消息中心,本需求没有新增客户端页面 |
N/A |
上方表格供机器核对 HTML 内容图片/图片占位数量;D.1
供人核对完整交付物。没有 Client HTML
时,以「Client(不适用)」明示,不建立虚构的 Client 视觉槽位。
文档版本:v1.15 | 日期: 2026-10-06 | 作者: Luke |
文档状态:进行中
Block Users Sharing the
Same IP · PRD
Author Luke Version
v1.15 Date 2026-10-06 Status In
Progress Platforms BRAND_A &
BRAND_B Class P Template Baseline
prd
Template adjustment: Uses the current one-page L0/L1
structure. The former standalone Backoffice-list specification is
consolidated into §6 so Requirement 06 has one authoritative current
PRD. The Axure page “更新2_Promo List_活动管理列表” is a shared
campaign-template condition and list-management reference, not an exact
page named after Requirement 06.
Version History
| Version |
Date |
Summary |
| v1.15 |
2026-10-06 |
Restored the Axure campaign list, located the same-IP condition only
in New/Modify Campaign M1 Basic Information, carried the clicked
campaign name into list pages dynamically, and removed all batch actions
from Login IP Blacklist while retaining search, export, and Matching
Accounts drill-down. |
| v1.14 |
2026-10-06 |
Enabled Delete All, Import, Export, and template download for IP
Blacklist as confirmed by Luke; added two real Excel import templates,
permission/audit rules, and the Axure-style campaign list title. |
| v1.13 |
2026-10-06 |
Moved Monitoring and Open Points into Appendix C; moved the
Prototype Visual Inventory into Appendix D under the current template;
synchronized the BO Axure-alignment scope. |
| v1.12 |
2026-10-05 |
Applied the Requirement 15 inventory clarification: separated
required deliverables from the HTML content-image-slot contract and
explicitly stated that Requirement 06 delivers BO HTML but no Client
HTML. Business rules and BO screens are unchanged (§1, Appendix C). |
| v1.11 |
2026-10-05 |
Added exact bilingual copy in §6.5 for the IP drill-down empty state
and the required-Username validation error so BO copy labels remain
verifiable. |
| v1.10 |
2026-10-05 |
Rebuilt with the concise template; business rules unchanged;
consolidated Campaign List, blacklist, and whitelist scope; added
bilingual HTML and INFO-v1 infographics. |
| v1.9 |
2026-08-20 |
Restructured judgment, payout, list, concurrency, and acceptance
rules. |
Contents
L0 · At a Glance

① One-Sentence Requirement
Add the shared condition “Block users sharing the same IP” to
Campaign Template Basic Info. When enabled, an Apply/Claim user is
permanently and automatically rejected if they share any complete login
IP within the lookback window with a rewarded account in the same brand
and campaign instance.
② Locked Terminology
| Term |
Sole Meaning in This PRD |
| Trigger |
The user manually clicks Apply or Claim;
payday scheduled payouts are excluded. |
| Campaign instance |
One aid; a new aid generated from the same
template is isolated. |
| Set_A |
The claimant’s complete, distinct, normalized login-IP set inside
the lookback window. |
| related |
Distinct rewarded accounts whose login-IP sets intersect Set_A,
excluding the claimant. |
| Permanent rejection |
A terminal record scoped to the same brand, aid, and
account; it cannot be deleted, expired, or reversed. |
| IP blacklist |
A batch-manageable campaign list. It does not replace login logs and
claimed records as the same-IP judgment source. |
③ Global Invariants
| # |
Invariant |
Consequence if Broken |
Verification |
| G1 |
Both sides use complete login-IP sets inside the lookback window,
and self is excluded. |
Repeat claimants reject themselves, or a non-latest login IP is
missed. |
AC1–AC4 |
| G2 |
The scope is brand + aid, with exact full-IP matching
only. |
Cross-brand/cross-campaign false positives or /24
overmatching. |
AC5–AC7 |
| G3 |
System busy blocks only this attempt and leaves no permanent
eligibility trace. |
A transient outage permanently disqualifies users. |
AC8–AC12 |
| G4 |
Same-IP concurrency permits only one success; payout and
claimed-list write share one transaction. |
Two users succeed together, or payout occurs without occupying the
IP. |
AC13–AC15 |
| G5 |
Whitelist is evaluated after existing prechecks and before same-IP
judgment. |
An ineligible user receives a payout, or a whitelisted user is still
rejected. |
AC16–AC18 |
| G6 |
Player-facing surfaces never expose IPs, related accounts, counts,
or rationale. |
Other users’ data or bypass clues leak. |
AC19–AC20 |
| G7 |
IP blacklist is audit-only and never a judgment source. |
View expiry or lag incorrectly allows or blocks a claim. |
AC21–AC22 |
④ Included and Explicitly
Excluded
Included
- The Campaign Template Basic Info switch and Apply/Claim judgment
chain (§1–§2).
- Success, permanent automatic rejection, system-busy retry, and their
records (§3).
- Campaign whitelist, batch-manageable IP blacklist list, and
Backoffice management (§4, §6).
- Concurrency, idempotency, fail-close behavior, and monitoring (§5,
Appendix C).
Explicitly excluded
- Payday scheduled payouts (§1).
- A new claim-IP field or use of
login_ip_snapshot as
judgment input (§2–§3).
- IPv6 other than normalized IPv4-mapped values (§2).
- Using IP-list Invalid Time as a gate. Delete All removes list data
only; it does not remove claimed records or permanent account-rejection
records (§6).
- Client HTML; the existing campaign page, Toast, and Message Center
remain (§3).
- Backfilling claimed or rejected history before launch; every new
aid starts empty (§3).
Audience: Backoffice frontend, backend, QA, Operations, and
Audit.
1. Scope, Entry, and Priority
1.1
Configuration Entry and Prototype Evidence
| Item |
Rule |
| Location |
Campaign Template Basic Info, shared condition “Block
users sharing the same IP.” |
| Trigger |
User manually clicks type-1 Apply or type-2
Claim. |
| Switch OFF |
Do not run this rule and do not fall back to legacy same-IP
behavior. |
| Axure |
更新2_Promo List_活动管理列表 is the
shared-condition/list-entry functional reference; an exact Requirement
06 page is not expected. |
| Conflict rule |
This PRD controls behavior. For example, Axure’s “Claim Time” label
becomes “Trigger Time.” |
1.2 Evaluation Priority
- Run existing campaign-validity, eligibility, identity, and
idempotency prechecks.
- After prechecks, read the campaign whitelist first; a match bypasses
both permanent-rejection and same-IP judgment and proceeds to
payout.
- Only after a whitelist miss, read the permanent-rejection record; an
existing record returns automatic rejection immediately.
- Only after a whitelist miss and no permanent rejection, acquire the
campaign lock and run same-IP judgment.
- A read failure or timeout at any step returns system busy; it must
not be treated as “not found.”
2. Same-IP Judgment
2.1 Scope and Data Sets
| Item |
Sole Rule |
| Isolation key |
brand + aid, not campaign template ID. |
| Lookback |
Upper bound is the judgment time after acquiring the campaign lock.
Default: previous 90 days, inclusive lower bound, second precision;
final value is OP-3. |
| Claimant |
Read every distinct login IP inside the window to form
Set_A. |
| Rewarded side |
Reverse-lookup accounts using any IP in Set_A inside
the same window, then intersect with claimed accounts for this
brand + aid. |
| Self exclusion |
related = candidates ∩ claimed_users − {self}. |
| No login record |
Set_A = ∅ means incomplete evidence; return system busy
and never allow the claim. |
2.2 IP Normalization
- Compare login IPs only; never use the claim request IP.
- Normalize IPv4 before forming sets; for example,
192.000.002.001 equals 192.0.2.1.
- Match the full IP exactly; never use
/24,
string-prefix, or geographic matching.
- Convert IPv4-mapped IPv6 to IPv4; other IPv6 values are out of
scope.
2.3 Decision
| Condition |
Outcome |
related = ∅ |
Payout succeeds and the claimed list is written. |
related ≠ ∅ |
Write the permanent rejection record; do not pay. |
| Read, lock, or transaction failure |
System busy; do not pay and do not write permanent rejection. |
The first claimant in each shared-IP group may succeed. This is a
known first-come-first-served boundary; copy must not promise that every
account sharing an IP is denied.
3. Outcomes, Copy, and Records
3.1 Three Outcomes and
Player Copy
| Outcome |
Player Toast |
Message |
Retry |
Trace |
| Claim succeeds |
Bonus claimed successfully. |
Reload Bonus success message |
— |
Claimed list. |
| Automatic rejection |
Your account is no longer eligible for this promotion. See Messages for details. |
Send Bonus claim failed once |
No; permanent |
One unique rejection record. |
| System busy |
Something went wrong. Please try again later. |
No synchronous message |
Yes |
Runtime log only; no eligibility record. |
Success body:
An amount of {Bonus Amount}PHP has been credited to your account. To view the details of this transaction, please check Balance Record.
Rejection body:
Your Reload Bonus of {Bonus Amount}PHP on {Claim Time} was not successful.
/ You are no longer eligible for this promotion.
{Claim Time} is server time when Apply/Claim is clicked,
formatted YYYY-MM-DD HH:mm:ss. Toasts, messages, and APIs
must never expose IPs, related accounts, counts, matched rules, or a
review promise.
3.2 Permanent Rejection
Record
| Item |
Rule |
| Unique key |
(brand, aid, user_hash). |
| Lifecycle |
Never delete, expire, or reverse; a new aid does not
inherit it. |
| Repeat click |
Only after the current whitelist lookup misses, return the existing
rejection immediately; do not re-evaluate, queue, add a record, or
resend the message. If the account was later whitelisted, apply the
whitelist-first rule in §1.2. |
| Claim button |
Remains visible and clickable; clicking returns the same rejection
outcome. |
login_ip_snapshot |
Single latest-login-IP evidence at click time; never judgment
input. |
| Existing history |
No backfill; rejection and claimed data start empty at launch. |
For an automatic rejection, write
Related claimed accounts: {total}; First 5: {sorted usernames}
to Remarks. Deduplicate accounts, use stable sorting, list
the first five plus the total, and never include an IP. The field must
hold the worst-case estimate of about 112 characters
(OP-4).
4. Whitelist
4.1 Effect and Priority
- Whitelist data is scoped by
aid; every Campaign List
row may provide an entry.
- Read the whitelist only after existing prechecks pass; an expired
campaign or ineligible account is not paid.
- A whitelist match bypasses same-IP judgment and proceeds through the
existing payout path.
- Adding to the whitelist does not delete permanent rejection; after
removal, original eligibility resumes and an existing permanent
rejection still rejects.
- The whitelist remains effective until manually removed; optionally
include the account’s downline.
4.2 Management Behavior
| Action |
Rule |
| Add |
Username required; “Whitelist downline” defaults to No; Remarks
optional, up to 200 Unicode characters with equal weighting across
languages. |
| Delete one/all |
Secondary confirmation; remove whitelist data only, without changing
rejection or claimed records. |
| Import |
UTF-8 CSV with headers
用户名 / 下线是否加白(Y·N)/ 备注; return row number and
reason for each invalid row. |
| Export |
Export every row in the current filtered result, independent of
pagination; exclude the Operation column. |
| Edit |
Not provided; delete and add again. |
5.1 Concurrency and
Idempotency
| Constraint |
Observable Result |
| Single-operation idempotency |
Replays or duplicate requests from the same Apply/Claim operation
pay, write, and send once; later requests for that operation return its
first result. A new legitimate claim is not a replay and re-runs the
full rule. |
Campaign serialization for brand + aid |
Two same-IP accounts claiming concurrently yield exactly one success
and one rejection. |
| Critical section |
Reverse lookup → intersection → payout → claimed-list write are
protected together. |
| Atomicity |
Payout and claimed-list write share one transaction; any failure
rolls everything back and returns system busy. |
| Rejection path |
Release the campaign lock after writing rejection; messages and
Remarks are written outside the lock. |
| Whitelist path |
Current rule bypasses the campaign lock and relies on account
idempotency and existing atomic payout; ordering against a normal
claimant is OP-8. |
5.2 Fail-Close and Cache
- Persistent data is authoritative. A normal-data cache failure falls
back to the source; source failure returns system busy.
- Whitelist read, lock service, or login-data failure returns system
busy and never counts as “not found.”
- The DDoS rejection prefilter may be read only after the current
whitelist lookup misses. A cached hit for an already rejected account/IP
may then return automatic rejection without deep queries. Adding,
removing, or importing a whitelist entry must first invalidate the
rejection cache for the same
brand + aid + user_hash; if
the prefilter is unavailable, current behavior is system busy.
- System busy records a fixed reason tag in runtime logs, but no
rejection record or rejection message.
Judgment target: p99 < 50 ms. Reverse lookup depends on a
composite IP-and-time index and must scale with |Set_A|;
never load every rewarded user’s entire history one by one. Evaluate
async only if measured p99 exceeds 800 ms. In async mode, send “not
processed” only after automatic retries are exhausted without a
result.
6. Backoffice Pages and
Fields
6.1 Page Map
| Page |
Requirement 06 Difference |
| Campaign List |
Follow Axure columns and actions; do not add a Same-IP Restriction
column. Modify or New Campaign opens M1 Basic Information. |
| Campaign M1 Basic Information |
Place
Block users sharing the same IP from participating in the
M1 area for New/Modify Campaign only. |
| Campaign Blacklist |
Keep existing User Blacklist batch behavior. Login IP Blacklist
provides IP/Username search, export, and Matching Accounts drill-down
only; it has no Delete All, Import, batch edit, or import-template
download. The left navigation still shows Campaign List only. |
| Campaign Whitelist |
Add search, delete one/all, import, export, and template download.
Add opens a full-page Add User form matching the Axure structure. |
6.2 Login IP Blacklist
Fields
| Level |
Field |
Definition |
| List |
ID |
Login IP Blacklist record ID. |
| List |
Login IP / IP |
Exact complete IPv4 value. |
| List |
Matching Accounts |
Underlined clickable count that opens the matching-account
list. |
| List |
Created Time |
First blacklisted time. |
| List |
Invalid Time |
Date of the latest claim judgment that reverse-related this IP plus
the lookback window, at 23:59:59; view-only and never
judgment behavior. |
| Drill-down |
Username |
One account per row. |
| Drill-down |
Last Login Time |
Latest login time for that account. |
| Drill-down |
Trigger Time |
Time Apply/Claim was clicked; replaces Axure’s “Claim Time.” |
| Drill-down |
Rejected Time |
Latest rejection-record time. |
Search Login IP Blacklist by IP or Username.
Download/Export sits beside Search and exports
all rows under the current filter. This tab has no Delete All, Import,
batch edit, or Download Import Template.
Blacklist and whitelist headings follow
List Type — [Campaign Name]. The campaign name is carried
from the row clicked on Campaign List and must never be a hardcoded
example.
6.3 Whitelist Fields
| Field |
Definition |
| Username |
One account per aid. |
| Downline Whitelisted |
Yes/No. |
| Added Time |
Successful add time. |
| Administrator |
Operator who added the current row. |
| Remarks |
0–200 Unicode characters. |
The whitelist batch-action row follows Axure: Delete All Data on the
left, then Import Data, Export Data, and Download Import Template on the
right. Add opens a full-page form containing Username, Whitelist
Downline (default No), Remarks, Confirm, and Cancel.
The whitelist Excel import template follows the supplied Axure
screenshot with fixed columns 用户名 / 下线是否加白 / 备注;
the second column accepts Y / N only. Download Import
Template must download a real, openable .xlsx, not only
show a success message.
6.4 Page States
Campaign List, blacklist tabs, drill-down, and whitelist must each
support Content, Loading, Empty, and Error; Error provides Retry. Delete
confirmation states only that removal restores the account’s original
eligibility state; it must not promise that participation will or will
not be allowed.
6.5 Verbatim Backoffice
Copy
| Scenario |
Chinese |
English |
| Error |
资料读取失败,本次不显示旧资料。 |
Failed to load data. Stale data is not shown. |
| IP drill-down empty state |
没有关联拒绝账号 |
No related rejected accounts |
| Required-Username error |
Username 为必填。 |
Username is required. |
| Login IP list notice |
失效时间不影响领取判断;点击匹配用户数可查看详情。 |
Invalid Time does not change claim judgment. Select Matching Accounts to view details. |
| Sensitive drill-down |
敏感资料:只供已授权运营/稽核查看,并记录查询日志。 |
Sensitive data: authorized Operations/Audit only; access is logged. |
| Delete-one confirmation |
移除后只恢复该账号原本的资格状态;不承诺其一定可以或不可以参与。永久拒绝记录不会删除。 |
Removal only restores the account's original eligibility state and makes no participation promise. Permanent rejection is not deleted. |
| Delete-all confirmation |
这会移除当前活动的全部白名单。各账号只恢复原资格状态;永久拒绝与已领奖记录均不会删除。 |
This removes every whitelist entry for this campaign. Each account returns only to its original eligibility; permanent rejection and claimed records remain. |
| Success |
操作成功,并写入 Admin Action Log。 |
Success. The action was recorded in the Admin Action Log. |
7. Permissions,
Audit, and Data Boundaries
7.1 Permission Contract
Final permission keys are OP-6. Separate controls are
required for campaign-list view, Login IP drill-down/export, whitelist
add/delete, and whitelist Import/Export/template download. User
Blacklist batch actions retain existing permissions. Login IP Blacklist
defines no delete, import, or batch-edit permission.
7.2 Admin Action Log
User Blacklist and Whitelist mutations retain existing audit
behavior. Login IP drill-down and export are sensitive access and log
viewer, time, aid, and search criteria. Logs must not copy
full export content.
7.3 Brand and Privacy
Administrators see only authorized brands and campaigns. Player APIs
never return IPs or other accounts. Backoffice IP/account data is
limited to authorized Operations and Audit roles.
Appendix A: Acceptance Criteria
| # |
P |
Acceptance Point |
| AC1 |
P0 |
After the same account succeeds, a new legitimate claim excludes
self and may succeed again. |
| AC2 |
P0 |
A colliding IP used only once inside the window still causes
rejection. |
| AC3 |
P0 |
Both sides use symmetric windows; with the default, 80-day data
counts and 95-day data does not. |
| AC4 |
P0 |
192.000.002.001 equals 192.0.2.1;
adjacent but different full IPs do not match. |
| AC5 |
P0 |
BRAND_A claimed data never affects BRAND_B. |
| AC6 |
P0 |
A new aid from the same template does not inherit old
permanent rejection. |
| AC7 |
P0 |
The first claimant on a shared IP may succeed; a later related
account is rejected. |
| AC8 |
P0 |
Empty Set_A returns system busy, never allows, and
writes no permanent record. |
| AC9 |
P0 |
Rejection-read, whitelist-read, or lock failure returns system busy
without permanent trace. |
| AC10 |
P0 |
If claimed-list write fails after payout work begins, the entire
transaction rolls back. |
| AC11 |
P0 |
Normal cache failure may fall back to source; unavailable source
returns system busy. |
| AC12 |
P0 |
System busy writes runtime logs only and sends no synchronous
message. |
| AC13 |
P0 |
Two same-IP accounts claiming within 50 ms produce exactly one
success and one rejection. |
| AC14 |
P0 |
Replaying the same operation, even with different idempotency keys,
pays, writes, and sends once; a later legitimate claim still re-runs the
full rule. |
| AC15 |
P0 |
Transaction failure releases the campaign lock and leaves no
occupancy residue. |
| AC16 |
P0 |
If whitelist and permanent rejection coexist, precheck-passing
claims pay while rejection remains. |
| AC17 |
P0 |
A whitelisted account is not paid after campaign end. |
| AC18 |
P0 |
Removing whitelist restores original eligibility; existing permanent
rejection still rejects. |
| AC19 |
P0 |
Rejection Toast, message, and API expose no IP, account, count,
rationale, or review promise. |
| AC20 |
P0 |
Backoffice Remarks shows total and stable first five usernames,
without IP. |
| AC21 |
P0 |
IP-view expiry never changes judgment, which reads login and claimed
sources. |
| AC22 |
P0 |
Whitelist and existing-rejection short circuits do not refresh
IP-view Invalid Time. |
| AC23 |
P0 |
After a current whitelist miss, a rejected account’s repeat click
returns immediately without re-evaluation or a new message; an account
whitelisted later follows AC16. |
| AC24 |
P0 |
Login IP Blacklist exposes only IP/Username search, export, and
Matching Accounts drill-down; Delete All, Import, batch edit, and
Download Import Template are absent. |
| AC25 |
P0 |
Whitelist Add enforces required/default/200-character rules with
equal Unicode counting. |
| AC26 |
P0 |
Login IP Blacklist and whitelist exports cover all filtered rows and
ignore pagination; only existing User Blacklist/Whitelist flows retain
import-template download. |
| AC27 |
P0 |
All four page states are reachable; Retry restores the current page
and filters. |
| AC28 |
P0 |
Missing permission hides actions; direct requests still fail and
write security logs. |
Appendix B: Key Decision Table
| Precheck |
Whitelist |
Permanent Rejection |
Same-IP Result |
Final Outcome |
| Fail |
Any |
Any |
Not run |
Existing precheck failure. |
| Pass |
Hit |
Any |
Not run |
Whitelist wins first; pay directly and preserve rejection
record. |
| Pass |
Miss |
Exists |
Not run |
Reject immediately only after the whitelist misses. |
| Pass |
Miss |
None |
related = ∅ |
Payout succeeds. |
| Pass |
Miss |
None |
related ≠ ∅ |
Write permanent rejection and reject. |
| Pass |
Read fails |
Any |
Cannot complete |
System busy; no permanent trace. |
Appendix C: Monitoring and Open Points
C.1 | Launch Monitoring
| Signal |
Threshold |
Action |
| Claim rate on IPs hit by rejected users |
< 30% |
Disable the rule and review false positives. |
| Campaign participation rate |
> 20% |
Reassess false-positive risk. |
Internal/test accounts receive no judgment exemption. Test or staging
may provide a controlled reset tool that atomically clears permanent
rejection, claimed occupancy/cache, materialized IP-view data, and DDoS
keys for a specified brand + aid + user_hash. Production
provides no such entry.
C.2 | Open Points
| # |
Question |
Owner |
Due |
OP-1 |
Actual login-log table and IP+time composite index. |
Engineering |
Before technical review |
OP-2 |
Campaign-lock mechanism, TTL, and short-retry parameters. |
Engineering |
Before technical review |
OP-3 |
Final lookback; default 90 days and never below 30. |
Engineering / Operations |
Before technical review |
OP-4 |
Whether production Remarks type/length holds about 112
characters. |
Engineering |
Before technical review |
OP-5 |
Whitelist cache, real-time/materialized IP view, and DDoS
keys/TTL. |
Engineering |
Before technical review |
OP-6 |
Real permission keys and role matrix for list view, drill-down, and
each batch action. |
Product / BO Engineering |
Before technical review |
OP-7 |
Direct vs preview import, batch limit, duplicate-row, and
concurrent-duplicate rules. |
Product / Engineering |
Before technical review |
OP-8 |
Whether a whitelisted success must occupy the IP before a concurrent
normal claimant. |
Product / Engineering |
Before technical review |
OP-9 |
Real tables, cache keys, and permission for the test reset
tool. |
Engineering / QA |
Before integration testing |
Appendix D: Prototype Visual Inventory
| Visual ID |
Surface |
Purpose |
Evidence |
VIS-BO-001 |
BO |
Campaign Template Basic Info shared switch, Campaign List, blacklist
tabs/IP drill-down, whitelist management, and four states. |
§1.1, §4.2, §6.1–§6.5 |
D.1 | Required Deliverables
| Delivery ID |
Deliverable |
Required Coverage |
File |
INFO-ZH |
Chinese infographic |
Shared switch, same-IP judgment, whitelist priority, permanent
rejection, and list lifecycle |
infographic/prd_v1.10_infographic.png |
INFO-EN |
English infographic |
Same product rules as the Chinese infographic |
infographic/prd_en_v1.10_infographic.png |
BO-SHARED-CONDITION |
BO HTML |
Campaign Template Basic Info shared switch, Campaign List, lists,
and four states; Axure is a functional reference, not an exact
Requirement 06 page |
prototype/Html_BO_v*_sameIpClaimRestriction.html |
| Client (N/A) |
Client HTML |
Not delivered: player-facing behavior reuses the
existing campaign page, Toast, and Message Center; no new Client page is
introduced |
N/A |
The table above is the machine-readable count contract for HTML
content images/placeholders; D.1 is the complete
human-readable deliverable list. When Client HTML is not delivered,
“Client (N/A)” states that directly and no fictitious Client visual slot
is created.
Repository Translation Glossary (not additional requirements)
Canonical shared-repository terms referenced by the Chinese source
are: Successfully Credited, Override, Disabled, Selectable, Maximum,
Pending, Others, Draw, Order By, Risk Tag, Personal Message, Operating
Log, Tier, Distribute, Hide, Yes, Show, and Confirm.
Document version: v1.15 | Date: 2026-10-06 | Author: Luke | Status:
In Progress