24 · 代理盈亏 · 优惠与净利润 ·
PRD
作者 Luke 版本
v1.7 日期 2026-09-16 状态
待开发评审 平台 BRAND_A &
BRAND_B 类 R
需求编号 24 英文 slug
agentPnlNetIncome 模板基准
prd
模板调整说明:沿用 prd 的元信息、L0
四件、规则正文、折叠附录与视觉清单;以中英文 ImageGen 资讯图取代未渲染的
Mermaid,并把重复说明收敛到唯一章节。本需求没有 Client 交付物。
版本记录
| 版本 |
日期 |
变更摘要 |
| v1.7 |
2026-09-16 |
§2.3:补齐 Sonnet 对需求原文 3.2 的单点发现——字段备注可注明「亦作 NGR」,但不得作为栏名;BO 只同步上游互链至 v1.18,画面与行为不变。 |
| v1.6 |
2026-09-16 |
L0、§1、§3.3:补齐 Sonnet 第 1/5 次指出的三条既定边界:新增三栏须在每层下钻重算、分页器不变、本需求不新建账变类型;BO 只同步上游互链至 v1.17,画面与行为不变。 |
| v1.5 |
2026-09-16 |
L0:English PRD HTML 的资讯图移至英文快速掌握区,与中文版同构;BO 升 v1.16,筛选区保持完整可见,宽表只在结果列表内横向滚动。 |
| v1.4 |
2026-09-16 |
§2.3:52 Manual Deposit Promo 纳入
Promo,现行基线 22 → 23;报表改读统一 Promo
账变类型组,合格新类型自动纳入。§1:以 ImageGen
中英文资讯图取代 Mermaid 源码;精简 PRD 与 BO 右侧说明,BO 升
v1.14。 |
| v1.3 |
2026-09-16 |
L0 与附录套用正式模板
v1.0,新增 English PRD、双语 PRD HTML、关键算例与 BO v1.13。 |
| v1.2 |
2026-08-22 |
§5落下既有无资料文案
No More Data,不新增提示语。 |
| v1.1 |
2026-08-21 |
§2.1把 Promo
时间口径由发放时间改为领取/入账时间;§2.5补齐跨报表差异。 |
| v1.0 |
2026-08-21 |
§2与§3定义新增三列、会员范围、计算规则与 21
列零值判定。 |
目录
[TOC]
L0 · 快速掌握
① 一句话需求
Backoffice ▸ ReportManagement ▸ 代理盈亏 在
公司盈亏金额 后新增:
GGR Margin → 优惠 → 净利润
全表 18 → 21
列。页面、六项筛选、下钻入口与分页器不变;新增三列在每层下钻重新计算,并自动进入既有导出。

② 术语写死表
| 词 |
唯一含义 |
出处 |
| 优惠 / Promo |
统一 Promo 类型组中,记入该代理线会员的活动奖金(含人工补发)与 VIP
奖励;现行基线 23 项 |
§2.3 |
| 净利润 |
公司盈亏金额 − 优惠;表头不得写 NGR |
§2.3 |
| 领取/入账时间 |
账变落库时间。一般活动是会员领取时间;52
是人工补发入账时间 |
§2.1 |
| 团队 |
既有第 5–15 列包含自己与以下代理/会员;Promo 只算会员 |
§2.2 |
③ 全局红线表
| 不变量 |
违反后果 |
验证 |
| G1 Promo
只算会员取得的奖励;代理取得的一律不算 |
代理佣金被误扣成推广成本 |
AC1–AC2 |
G2
净利润 = 公司盈亏金额 − 优惠,不减其他成本 |
三栏无法对账 |
AC3–AC4 |
| G3 Promo 按领取/入账时间,GGR 按结算时间 |
成本被提前或漏记 |
AC5–AC6 |
| G4 每日 05:00 先跑 VIP 升降级,再跑前一日返水 |
返水套到旧等级 |
AC7 |
| G5 报表读取统一 Promo 类型组,不硬编码 23 个
ID;符合条件的新类型自动纳入 |
新活动上线后报表漏成本 |
AC8–AC9 AC21–AC23 |
G6 公司视角正绿负红;用户盈亏金额
维持会员视角正黑负红 |
盈亏方向被读反 |
AC10–AC11 |
| G7 21 列全为 0 才隐藏该行 |
只有 Promo 的成本行消失 |
AC12 |
④ 适用范围与不做边界
| 本期做(§2–3) |
明确不做(§2–3) |
| 新增三列、每层下钻重算、Promo 类型组、21 列零值判定、导出新增三列(§2–3) |
不加合计行;不加 StatisticsMethod;不拆
Promo/返水/NGR(§3) |
| 保留当前 23 项作为可审计基线、7 项排除理由(§2.3) |
不改六项筛选、下钻入口、分页器、第 14 列、既有四个金额/投注字段;不新建账变类型(§3) |
后续符合条件的启用类型自动纳入(G5) |
不改代理策略
Company NGR;不波及「累计有效活跃会员」(§3.3) |
type=96 完成且建立合格账变类型后由 Promo 组纳入(§2.3) |
未上线、代理奖励、负向扣减与非奖金类型不纳入(AC23) |
L1 · 完整规格
1. 实现导航
- BO 送出现有报表类型、日期区间与其余四项筛选。
- 投注/结算流水按结算时间计算既有 15 列。
- 账变流水按领取/入账时间读取统一 Promo
类型组,只聚合会员。
- 计算
GGR Margin = 公司盈亏金额 ÷ 投注额。
- 计算
净利润 = 公司盈亏金额 − 优惠。
- 每次「查看下级」都按该层代理及其团队范围重新计算新增三列。
- 21 列全为 0 才丢弃该行;其余回传 BO。
| 开发区块 |
唯一口径 |
最大风险 |
| Promo 查询 |
§2.1–2.3 |
硬编码 ID 或混入代理奖励 |
| 批次 |
§2.4 |
返水早于 VIP 升降级 |
| 展示/导出 |
§3 |
正负视角、零值行或导出范围做错 |
2. 取数口径
2.1 时间口径
| 列/来源 |
归属时间 |
公司盈亏金额、投注额、GGR Margin |
结算时间(既有) |
| 一般活动与 VIP 奖励 |
会员领取、钱入账、账变落库的时间 |
52 Manual Deposit Promo |
人工补发入账、账变落库的时间 |
净利润 |
由同区间 GGR 与 Promo 相减,不另取时间 |
2.1.1 已发放但会员尚未领取的奖励不计入。设计上,日报的净利润允许同时包含结算时间与领取/入账时间;不得把
Promo 回溯分摊到投注日(G3)。
2.2 范围口径
| 列 |
算谁 |
| 既有第 5–15 列 |
当前代理+以下全部下级;含代理与会员 |
GGR Margin |
随既有 公司盈亏金额 与 投注额 |
优惠 |
该代理线下全部层级会员;代理本人及下级代理取得的奖励不计 |
净利润 |
继承本行 公司盈亏金额 与上述 Promo |
2.2.1 账号后来被冻结、封禁或停用,不影响期间内已入账记录。449
属会员邀请会员,不另加代理过滤。
| 新列 |
定义/公式 |
格式 |
GGR Margin |
公司盈亏金额 ÷ 投注额;分母不是有效投注额 |
百分比 2 位 |
优惠 / Promo |
Promo 类型组中,记入会员的正向奖励合计 |
金额 2 位 |
净利润 / Company Net Income |
公司盈亏金额 − 优惠;字段备注可注明「亦作 NGR」,但不得作为栏名 |
金额 2 位 |
现行 23 项基线
| 类别 |
编号与名称 |
| 活动类 19 项 |
250 Turnover Bonus;268 Referral
Bonus;300 Lucky Wheel Bonus;301 Register
Promo;309 Deposit Bonus;317 Red Envelope
Rain;437 First Deposit Promo;438 First
Deposit Bonus(Fixed);442 PayDay Bonus;448
Referrer Welcome Bonus;449 Milestone Achievement
Bonus;450 Referee Welcome Bonus;456 Download
App Bonus;457 Buddy Total Flow Bonus;458
Buddy Assist Reward;493 Luck Revival
Bonus;498 Reload Bonus;499 REDEMPTION
BONUS;501 Check-in Bonus |
| VIP 类 3 项 |
221 VIP Upgrade Bonus;451 VIP Birthday
Bonus;452 VIP Cashback Bonus |
| 人工补发 1 项 |
52 Manual Deposit
Promo(活动奖金人工补发;不是充值) |
自动纳入规则
2.3.1 报表不得硬编码上述编号,必须读取统一的
Promo
账变类型组。新增或启用的类型同时满足以下条件时,由主数据加入该组,报表自动纳入,不再修改查询逻辑:
- 性质是会员活动奖金(含人工补发)或 VIP 奖励;
- 是正向入账;
- 对应功能已启用,且记入会员。
明确排除 7 项
| 编号 |
名称 |
排除理由 |
302 |
Register Promo(出帐) |
负向人工扣减,现已不用 |
443/444 |
First Deposit Rebate/Loss Rebate |
其他平台遗留,本平台不用 |
453 |
VIP Level Retention Bonus |
本平台没有保级奖金 |
323 |
Commission |
代理佣金 |
454/455 |
Agent Achievement/Growth Bonus |
代理奖励 |
2.3.2 类型组中若出现负值,该笔剔除并记录「优惠为负、已剔除」运行日志;不得用负数冲减
Promo。type=96 尚无完成的账变类型,现阶段不纳入。
2.4 计算顺序
2.4.1 每天 05:00 计算前一日:先完成 VIP
升降级,再跑返水。两批完成后才读取当日完整 Promo。
2.5 与其他报表的差异
| 报表 |
Promo 范围 |
| 本表 |
指定代理线下会员;排除代理取得的奖励 |
PlatformReport |
全平台,可能包含代理 |
UserReport |
按会员属性统计,不以代理属性过滤 |
2.5.1 三张表回答的问题不同,数字不必强行相等。
3. 页面与展示
3.1 栏位顺序
… 用户盈亏金额 → 公司盈亏金额 → GGR Margin → 优惠 → 净利润 → 实体站 → 用户线路 → 操作
3.2 格式与配色
| 列 |
显示 |
用户盈亏金额 |
既有会员视角:正黑、负红 |
公司盈亏金额、净利润 |
公司视角:正绿、负红 |
GGR Margin、优惠 |
一律黑字 |
3.2.1 金额用千分位与 2 位小数;Margin 用百分比与 2
位小数。Margin 允许低于 −100%,不夹到
0;公司盈亏金额 = 0 时显示 0.00%。
3.3 下钻、零值行、导出与相邻报表
3.3.1
- 21 列全为 0 才隐藏;只有 Promo 不为 0 的行必须显示。
- 每层「查看下级」都以该层代理及其团队范围重新计算新增三列,不沿用上层汇总值;下钻入口与分页器维持既有行为。
Export
导出当前查询的全部命中结果,不是当前页;包含新增三列,排除「用户线路」与「操作」。
- 「累计有效活跃会员」独立报表的栏位、计算、权限、导出与入口均不变。
- 23 项基线与 7 项排除均消费既有账变主数据;本需求不新建账变类型。
4. 权限
不新增权限点。新增三列随代理盈亏既有查看权限出现;无权限时入口不显示,后端仍须拒绝请求。导出沿用既有行为。
5. 提示语
本需求不新增提示语。纯展示栏位没有自己的错误或空态;沿用代理盈亏既有提示:
| 场景 |
文案 |
出处 |
| 查无资料 |
No More Data |
PRE 实机画面,2026-08-22 确认 |
6. 待确认项
无。Promo 自动纳入规则已于 2026-09-16 确认。
附录 A:验收标准(默认折叠)
验收标准
| # |
P |
验收点 |
| AC1 |
P0 |
代理取得的奖励不计入 Promo(G1) |
| AC2 |
P0 |
代理线下全部层级会员的合格奖励计入(G1) |
| AC3 |
P0 |
每行
净利润 = 公司盈亏金额 − 优惠(G2) |
| AC4 |
P0 |
Promo 为 0 时,净利润等于公司盈亏金额(G2) |
| AC5 |
P0 |
D−3 发放、D 领取只落在
D(G3) |
| AC6 |
P0 |
已发放但未领取的奖励不计(G3) |
| AC7 |
P0 |
VIP 升降级先于返水(G4) |
| AC8 |
P0 |
323/454/455 不计入
Promo(G5) |
| AC9 |
P0 |
302/443/444/453
不计入 Promo(G5) |
| AC10 |
P0 |
Player GGR 与 Company GGR 的视角、颜色正确(G6) |
| AC11 |
P0 |
Net Income 正绿负红;Margin 与 Promo
一律黑字(G6) |
| AC12 |
P0 |
只有 Promo 不为 0 的行仍显示(G7) |
| AC13 |
P1 |
Margin 分母为 Bet Amount,不是 Valid Bet Amount |
| AC14 |
P1 |
Company GGR 为 0 时 Margin 显示 0.00% |
| AC15 |
P1 |
Margin 可低于 −100%,不夹到 0 |
| AC16 |
P1 |
21 列全为 0 才隐藏 |
| AC17 |
P1 |
导出全部命中结果,含新增三列、不含 Line/Operation |
| AC18 |
P1 |
「累计有效活跃会员」独立报表不变 |
| AC19 |
P1 |
Promo 与 GGR 使用不同时间字段 |
| AC20 |
P1 |
本表与 PlatformReport/UserReport 的 Promo 可不同 |
| AC21 |
P0 |
52 Manual Deposit Promo 计入
Promo(G5) |
| AC22 |
P0 |
新增合格类型只改 Promo 主数据即可进入报表(G5) |
| AC23 |
P0 |
代理奖励、负向、非奖金或未上线类型即使新增编号也不计(G5) |
| AC24 |
P0 |
每层下钻都按该层代理团队范围重新计算新增三列,不沿用上层值 |
| AC25 |
P1 |
分页器维持既有行为,且本需求不新建账变类型 |
附录 B:关键算例(默认折叠)
GGR 123,456,789.00、Bet 1,000,000,000.00、Promo 23,456,789.00
→ Margin 12.35%、Net Income
100,000,000.00。
GGR −10,000.00、Bet 5,000.00 → Margin
−200.00%。
- 其余 20 列为 0、Promo
1,000.00 → 行保留,Net Income
−1,000.00、Margin 0.00%。
D−3 发放、D 领取 → 只计
D。
- 建立新的正向会员活动奖励类型并加入 Promo 组 → 不改报表代码即可出现在
Promo;改成代理奖励或负向类型则不计。
附录 C:原型视觉清单(默认折叠)
原型视觉清单
| 视觉 ID |
载体 |
用途 |
证据 |
VIS-BO-NONE |
BO |
报表不使用内容图片槽位;表格、骨架与标注符号不算内容视觉 |
BO v1.18 |
VIS-CLIENT-NONE |
Client |
本需求没有 Client 页面 |
L0 ④ |
文档版本:v1.7 | 日期: 2026-09-16 | 作者: Luke |
文档状态:待开发评审
Requirement ID 24 Slug
agentPnlNetIncome Author
Luke Version v1.7 Date
2026-09-16 Status Pending Development
Review Platforms BRAND_A &
BRAND_B Class R Template Base
prd
Template adjustment: Keep the prd
metadata, four-part L0, rule body, collapsed appendices, and visual
inventory. Replace the unrendered Mermaid source with a dedicated
English ImageGen infographic and remove repeated explanations. No Client
deliverable is required.
Version history
| Version |
Date |
Summary |
| v1.7 |
2026-09-16 |
Added the one permission from source rule 3.2 identified by Sonnet: a field remark may state “also known as NGR,” but NGR must not be the column header. BO v1.18 only synchronizes the upstream PRD link; its screen and behavior are unchanged. |
| v1.6 |
2026-09-16 |
Added the three established boundaries found by Sonnet round 1/5: recalculate all three new columns at every drill-down level, keep the paginator unchanged, and create no transaction type. BO v1.17 only synchronizes the upstream PRD link; its screen and behavior are unchanged. |
| v1.5 |
2026-09-16 |
Moved the English infographic into L0 so the bilingual PRD HTML uses the same information hierarchy in both languages. Released BO v1.16 with the complete filter area kept in view and horizontal scrolling limited to the result table. |
| v1.4 |
2026-09-16 |
Added 52 Manual Deposit Promo, changing the current
Promo baseline from 22 to 23 types. The report now reads a shared Promo
transaction-type group instead of hardcoded IDs; future enabled
positive-entry member campaign and VIP reward types are included
automatically. Replaced Mermaid source with Chinese and English ImageGen
infographics, shortened the PRD and BO notes, and released BO
v1.14. |
| v1.3 |
2026-09-16 |
Applied formal template v1.0 and added the English PRD, bilingual
PRD HTML, collapsed acceptance appendices, deterministic examples, and
BO v1.13. |
| v1.2 |
2026-08-22 |
Recorded the existing no-data copy No More Data; no new
message was introduced. |
| v1.1 |
2026-08-21 |
Changed Promo from payout time to claim/posting time and clarified
cross-report differences. |
| v1.0 |
2026-08-21 |
Initial version: three new columns, member-only Promo scope,
formulas, and the 21-column all-zero rule. |
Table of contents
L0 · Quick read
① One-sentence requirement
Add three columns after Company GGR in
Backoffice ▸ ReportManagement ▸ Agent P&L:
GGR Margin → Promo →
Company Net Income
The table grows from 18 to 21 columns. Keep the
page, six filters, drill-down entry, and paginator unchanged. Recalculate all three new
columns at every drill-down level and include them in the existing export.

② Locked terminology
| Term |
Sole meaning |
Source |
| Promo |
Campaign rewards, including manual promo credits, and VIP rewards
posted to members under the agent line through the shared Promo group;
current baseline: 23 types |
§2.3 |
| Company Net Income |
Company GGR − Promo. Do not use NGR as the
column name |
§2.3 |
| Claim / posting time |
Transaction posting time. For normal campaigns it is the member
claim time; for type 52 it is the manual credit time |
§2.1 |
| Team |
Existing columns 5–15 include the current agent and all descendant
agents and members. Promo includes members only |
§2.2 |
③ Global guardrails
| Invariant |
Failure if broken |
Verification |
| G1 Promo includes member rewards only; agent
rewards contribute zero |
Agent commission is misclassified as promotion cost |
AC1–AC2 |
G2
Company Net Income = Company GGR − Promo; subtract no other
cost |
The displayed values no longer reconcile |
AC3–AC4 |
| G3 Promo uses claim/posting time; GGR uses
settlement time |
Cost is recorded early or omitted |
AC5–AC6 |
| G4 At 05:00, complete VIP level changes before
previous-day cashback |
Cashback uses the old VIP level |
AC7 |
| G5 Read the shared Promo group; do not hardcode 23
IDs. Future eligible types are auto-included |
New campaigns are missing from Promo |
AC8–AC9, AC21–AC23 |
| G6 Company GGR and Net Income use company
perspective: positive green, negative red. Player GGR keeps player
perspective: positive black, negative red |
Readers reverse profit and loss |
AC10–AC11 |
| G7 Hide a row only when all 21 columns are
zero |
A Promo-only cost row disappears |
AC12 |
④ Scope and exclusions
| In scope |
Out of scope |
| Three columns, recalculation at every drill-down level, the shared Promo group, 21-column all-zero check, and
export |
No total row; no StatisticsMethod filter; do not split
Promo / Cashback / NGR |
| Current 23-type audit baseline and reasons for 7 exclusions |
Do not change the six filters, drill-down entry, paginator, Player GGR, or existing
wager / GGR fields; create no transaction type |
| Automatic inclusion of future eligible enabled types |
Do not change Agent Strategy Company NGR or Cumulative
Valid Active Players |
Type 96 enters only after it has a completed eligible
reward type |
Exclude inactive types, negative adjustments, non-rewards, and agent
rewards |
1. Implementation guide
- BO submits the existing ReportType, DateRange, and four other
filters.
- Wager and settlement records produce the existing 15 columns by
settlement time.
- Reward transactions produce Promo by claim/posting
time from the shared Promo group, members only.
- Calculate
GGR Margin = Company GGR ÷ Bet Amount.
- Calculate
Company Net Income = Company GGR − Promo.
- For every “View Subordinates” level, recalculate the three new columns for that level's agent-team scope.
- Drop a row only when all 21 columns are zero; return all other
rows.
| Work area |
Source of truth |
Primary risk |
| Promo query |
§§2.1–2.3 |
Hardcoding IDs or including agent rewards |
| Batch order |
§2.4 |
Cashback runs before VIP level changes |
| Display / export |
§3 |
Perspective, zero-row, or export scope is wrong |
2. Data scope and
calculations
2.1 Time basis
| Column / source |
Time basis |
| Company GGR, Bet Amount, GGR Margin |
Settlement time, unchanged |
| Standard campaign and VIP rewards |
Member claim, credit, and transaction posting time |
52 Manual Deposit Promo |
Manual reward credit and transaction posting time |
| Company Net Income |
Difference between GGR and Promo in the same query interval; no
separate timestamp |
An issued but unclaimed reward contributes zero. Daily Net Income
intentionally combines settlement-time GGR and claim/posting-time Promo;
do not back-allocate Promo to wager dates.
2.2 Population scope
| Column |
Population |
| Existing columns 5–15 |
Current agent plus all descendants, agents and members |
| GGR Margin |
Inherits Company GGR and Bet Amount |
| Promo |
Members at every level under the agent line; exclude the agent and
descendant agents |
| Company Net Income |
Uses this row's Company GGR and the member-only Promo above |
Later account freezes, bans, or deactivation do not remove a
transaction posted during the period. Type 449 is
member-to-member referral reward and needs no additional agent
filter.
| New column |
Definition / formula |
Format |
GGR Margin |
Company GGR ÷ Bet Amount; not Valid Bet Amount |
Percentage, 2 decimals |
Promo |
Eligible positive member rewards in the Promo group |
Amount, 2 decimals |
Company Net Income |
Company GGR − Promo; a field remark may say “also known as NGR,” but NGR must not be the column header |
Amount, 2 decimals |
Current 23-type audit baseline
| Category |
IDs and names |
| 19 campaign types |
250 Turnover Bonus; 268 Referral Bonus;
300 Lucky Wheel Bonus; 301 Register Promo;
309 Deposit Bonus; 317 Red Envelope Rain;
437 First Deposit Promo; 438 First Deposit
Bonus(Fixed); 442 PayDay Bonus; 448 Referrer
Welcome Bonus; 449 Milestone Achievement Bonus;
450 Referee Welcome Bonus; 456 Download App
Bonus; 457 Buddy Total Flow Bonus; 458 Buddy
Assist Reward; 493 Luck Revival Bonus; 498
Reload Bonus; 499 REDEMPTION BONUS; 501
Check-in Bonus |
| 3 VIP types |
221 VIP Upgrade Bonus; 451 VIP Birthday
Bonus; 452 VIP Cashback Bonus |
| 1 manual promo type |
52 Manual Deposit Promo, a manual campaign reward
credit rather than a deposit |
Automatic inclusion rule
The report must read one shared Promo transaction-type
group, not hardcode the IDs above. Add a new or enabled type to
the group, and therefore to the report without query-code changes, only
when all conditions hold:
- It is a member campaign reward, including a manual promo credit, or
a VIP reward.
- It is a positive entry.
- The corresponding function is enabled and the entry is posted to a
member.
Seven explicit exclusions
| ID |
Name |
Reason |
302 |
Register Promo debit |
Legacy negative adjustment |
443 / 444 |
First Deposit Rebate / Loss Rebate |
Unused migration residue |
453 |
VIP Level Retention Bonus |
No retention bonus on this platform |
323 |
Commission |
Agent commission |
454 / 455 |
Agent Achievement / Growth Bonus |
Agent rewards |
If a negative value reaches the Promo group, exclude that record and
log “negative Promo excluded”; never net it against Promo. Campaign
type=96 has no completed transaction type and remains
excluded.
2.4 Batch order
At 05:00 each day, process the previous day. Complete VIP level
changes before cashback, and read daily Promo only after both batches
finish.
2.5 Expected
differences from other reports
| Report |
Promo population |
| Agent P&L |
Members under one agent line; agent rewards excluded |
| PlatformReport |
Entire platform; may include agents |
| UserReport |
Member attribute scope without agent-attribute filtering |
These reports answer different questions; their Promo totals need not
match.
3. Page and display
3.1 Column order
… Player GGR → Company GGR → GGR Margin → Promo → Company Net Income → Gaming Venue → Line → Operation
| Column |
Display |
| Player GGR |
Existing player perspective: positive black, negative red |
| Company GGR, Company Net Income |
Company perspective: positive green, negative red |
| GGR Margin, Promo |
Always black |
Amounts use thousands separators and 2 decimals. Margin uses a
percentage with 2 decimals, may be below −100%, and is not
clamped. When Company GGR is zero, display 0.00%.
3.3 Drill-down, zero rows, export,
and adjacent report
- Hide a row only when all 21 columns are zero. A Promo-only row must
remain visible.
- At every “View Subordinates” level, recalculate the three new columns for that level's agent-team scope; never reuse the parent aggregate. Keep the drill-down entry and paginator behavior unchanged.
- Export the complete matching result set, not only the current page.
Include all three new columns; exclude Line and Operation.
- Cumulative Valid Active Players keeps its columns, formulas,
permissions, export, and entry point unchanged.
- The 23-type baseline and 7 exclusions consume existing transaction-type master data; this requirement creates no transaction type.
4. Permissions
Add no permission point. The columns follow the existing Agent
P&L view permission; hide the entry and reject the request when
unauthorized. Export keeps its existing behavior.
5. Messages
This requirement introduces no message. Use the existing Agent
P&L no-data copy:
| Scenario |
Copy |
Source |
| No results |
No More Data |
PRE screen, confirmed 2026-08-22 |
6. Open points
None. The Promo auto-inclusion rule was confirmed on 2026-09-16.
Appendix A: Acceptance criteria
| Group |
P0 |
P1 |
| Population |
AC1 agent rewards excluded; AC2
all descendant-member rewards included; AC8–AC9 all
seven exclusions contribute zero |
— |
| Time / batch |
AC5 issued on D−3 and claimed on
D appears only on D; AC6
unclaimed reward contributes zero; AC7 VIP level change
precedes cashback |
AC19 Promo and GGR use different time fields |
| Formula |
AC3 Net Income equals GGR − Promo row by row;
AC4 zero Promo makes both equal |
AC13 Margin uses Bet Amount; AC20
cross-report values may differ |
| Display |
AC10–AC11 perspective and colors are correct;
AC12 Promo-only row remains visible |
AC14 zero GGR shows 0.00%; AC15
Margin may be below −100%; AC16 hide only when all 21
are zero |
| Export / boundary |
AC24 recalculate the three new columns at every drill-down level for that level's agent-team scope |
AC17 export all matching rows with the three new
columns and without Line / Operation; AC18 adjacent
report unchanged; AC25 keep the paginator unchanged and create no transaction type |
| Promo group |
AC21 type 52 contributes to Promo;
AC22 a new eligible type appears after only a Promo
master-data change; AC23 agent, negative, non-reward,
or inactive types remain excluded |
— |
Appendix B: Deterministic examples
- GGR
123,456,789.00, Bet 1,000,000,000.00,
Promo 23,456,789.00 → Margin 12.35% and Net
Income 100,000,000.00.
- GGR
−10,000.00, Bet 5,000.00 → Margin
−200.00%.
- All other 20 columns zero, Promo
1,000.00 → keep row,
Net Income −1,000.00, Margin 0.00%.
- Issued on
D−3 and claimed on D → include
only on D.
- Add a new positive member campaign reward to the Promo group → it
appears without report-code changes; reclassify it as agent, negative,
or inactive → it contributes zero.
Appendix C: Prototype visual inventory
| Visual ID |
Surface |
Purpose |
Evidence |
VIS-BO-NONE |
BO |
The report has no content-image slot; tables, skeletons, and
annotation markers are not content visuals |
BO v1.18 |
VIS-CLIENT-NONE |
Client |
No Client page is delivered |
L0 ④ |
Document version: v1.7 | Date: 2026-09-16 | Author: Luke | Status:
Pending Development Review