PocketBuy 佣金系统需求文档

1. 目标、范围与唯一口径

佣金系统负责将合格订单、订单归属、组织关系、政策配置和风险系数快照转换为可审计的佣金台账和结算批次。

系统分为三层,必须独立配置、独立留痕:

  1. 每单基础佣金层:计算受益角色在单笔订单上的基础应得 B。
  2. 绩效调整层:消费风险系统返回的最终风险结果,计算最终应发 T = B × k。
  3. 结算层:按结算计划在次月计算并导出上月结算明细,不回写基础佣金或绩效结果。

H5、SA App 和后台列表只展示结果,不自行推导佣金、风险系数、应发或结算金额。

2. 角色、归属与资格

2.1 受益角色

角色代码受益人来源
CLERK资格事件时订单归属的、满足 06B 全部生效条件的店员
STORE_MANAGER资格事件时订单门店的、满足 06B 全部生效条件的有效主店长
SA订单显式绑定的 SA
SA_MANAGER资格事件时该 SA 的有效直属 SM
REGIONAL_MANAGER资格事件时该 SM 的有效直属 RM

SM、RM 可作为实际办单人直接办单。直接办单时,同一人员可同时获得“直办奖励组件”和其岗位对应的管理奖励组件:SM 为直办奖励 + SM 奖励,RM 为直办奖励 + RM 奖励;不得虚构下属 SA/SM,也不得因同一组件身份重合而重复记账。资格事件必须保存实际办单人 ID、实际办单人角色和每个命中组件的归属原因。

资格事件发生时,系统固化订单、门店、店员、店长、SA、SM、RM、政策和适用范围快照。人员调岗、离职、调店、资料编辑或后续政策发布,不得反向改写已固化台账。

SA/SM/RM 有效期关系以《06A-SA角色与组织层级管理迭代需求》及组织域输出为准;店长/店员是否有效以《06B-门店人员信息审核迭代需求》的人员审核、账号、门店关系、门店状态和必要工牌审核联合结果为准。佣金系统不得把 H5 SUBMITTED 或单独的人员审核 APPROVED 当作有效关系。

归属缺失、冲突、重复或无法证明时,记录 PENDING_SNAPSHOT 并等待上游数据补齐后重试;本期不建设 MANUAL_REVIEW,不得猜测受益人、部分发放或按零自动结算。

2.2 订单资格

本期唯一合格条件为订单完成交机;订单域应尽量实时投递资格事件。资格事件须具备 source_system + event_id 幂等键、事件时间、订单版本和撤销语义。MVP 不存在部分退,只有整单取消;整单取消须引用原订单/原资格事件并生成可追溯的撤销记录,不覆盖原台账。事件投递通道、系统边界和重试策略由技术方案确定。

3. 每单基础佣金层

3.1 配置模型

规则以“角色 → 场景 → 组件 → 条件调整 → 输出”配置:

配置对象必填内容
规则作用域角色、订单国家/区域、产品/SKU、渠道、资格事件、适用时间
场景条件字段、运算符、值/集合/区间、AND/OR 分组、缺失字段策略
佣金组件组件 ID、计算方式、金额/比例/公式、币种、优先级、叠加/互斥关系
调整MULTIPLIER、FIXED_ADD、FIXED_DEDUCT、RATE、CAP、FLOOR,及作用组件与顺序
输出earned_base_amount、命中规则/组件、调整前后金额、证据快照、舍入结果、异常码

MVP 支持固定金额、比例、条件档位、月度阶梯、加成/扣减、封顶/保底和显式组合顺序。所有 NGN 金额保留整数,在总额级按 ROUND_HALF_UP 舍入;接口与导出须返回舍入规则。复杂公式编辑器、佣金池、跨币种、预算控制和税费编排可保留模型,不是 MVP 上线依赖;本期仅输出税前计算明细,不计算或代扣税费。

3.2 初版基础佣金与当前政策

基础佣金可以由固定值或月度 ACH 档位确定。当前政策展示值如下;实际生效以发布的政策配置为准:

角色初版固定示例当前 ACH 三档政策
店员₦400<50%:₦400;50%–<80%:₦500;≥80%:₦600
店长₦850<50%:₦850;50%–<80%:₦1,100;≥80%:₦1,300
SA₦850<100%:₦850;100%–<120%:₦1,100;≥120%:₦1,300
SM早期能力示例 ₦30–₦50当前政策:₦100 / ₦110 / ₦120
RM早期能力示例 ₦20–₦30当前政策:₦25 / ₦30 / ₦35

SM/RM 的 ₦30–₦50、₦20–₦30 是历史“可配置区间/规则引擎能力”示例;当前 MVP 默认政策以当前政策栏为准。任何新金额必须以新政策版本发布,不能靠页面文案改变。

所有档位必须使用明确开闭区间:店员/店长为 [0,50) / [50,80) / [80,+∞);SA/SM/RM 为 [0,100) / [100,120) / [120,+∞)。订单在达到资格时点按当时 ACH 定档;后续 ACH 变化不回溯补差。SM/RM 的直办订单同时计入本人及团队 ACH。

3.3 通用条件调整:店员推荐订单 SA 九折

这是通用配置能力的首个业务实例,而不是硬编码分支:

条件:clerk_referral_id 存在
  AND referral_valid = true
  AND referral_store_id = order.store_id
  AND 推荐店员/门店关系在客户选择或扫码时有效
目标组件:SA_BASE
调整:MULTIPLIER = 0.9
顺序:SA 基础规则 → 九折调整 → 输出 SA 的 B → 绩效调整 → 结算

仅 SA_BASE 受影响,店员、店长、SM、RM 组件不受影响。证据缺失或关系无效按规则的 missing_policy 处理(不命中、阻断或保持待处理),禁止依据手机号或备注猜测。

店长也可作为推荐人。推荐证据必须显式保存 referrer_id、referrer_role=STORE_MANAGER、门店和关系版本;店长作为推荐人时只获得一次店长奖励,不再叠加店员/独立推荐人奖励,也不得生成两条内容相同的店长佣金。店员推荐仍按上文规则处理。若同一订单同时提交多个推荐人,服务端必须按已确认的唯一推荐证据处理,冲突时保持待处理。

3.4 复杂规则示例(配置能力)

场景可配置表达
SKU 比例与封顶/保底min(max(合格金额 × 1.5%, 300), 700)
SA 月度销量阶梯1–20 单 ₦700,21–50 单 ₦850,51+ 单 ₦1,000;可配置整月回溯或仅超额计价
SM 条件档位合格单数、取消率等条件组互斥命中;无命中走兜底档
活动加成与质量扣减max(0, 固定佣金 + 活动奖励 - 质量扣减),可配置每项上限
多角色奖金池奖励池、有效参与人、权重、分母为零异常策略、单人封顶

所有示例都必须配置作用域、生效时间、命中优先级、叠加/互斥、舍入方式、证据字段和异常策略。

4. 绩效调整层(风险系数)

4.1 统一口径

风险系统负责计算风险指标、适用系数和最终结果;佣金系统不自行推导 CPD7、D/E 或角色范围,只按受益人和统计周期读取风险系统最终计算结果并保存结果版本。

风险系数作用于每个受益人的基础应得:

最终应发 T = ROUND_HALF_UP(B × k, 0)

对外政策可显示 CPD7;存量资料中的 FPD7 作为兼容别名。新接口和台账不以展示名作为关键字段,统一保存风险系统返回的 risk_factor_snapshot_id、metric_code、factor、结果状态、结果版本和生成时间。当前默认展示指标为 CPD7;若风控确认采用其他指标代码,须以新版本参数发布,不改写历史快照。

4.2 当前系数区间(风险系统口径)

风险指标值系数 k业务含义
<5%1.2最终应发上浮 20%
≥5% 且 <10%1.1最终应发上浮 10%
≥10% 且 ≤15%1.0按基础应得发放
>15%0.8最终按基础应得的 80% 发放

系数区间、缺失、分母为零和口径不一致均由风险系统处理;佣金系统不得猜测系数。未取得最终结果的记录进入 WAITING_RISK_FACTOR,待结果可查询后再输出结算金额。

4.3 结果消费与快照

风险系统在其规则内处理角色范围、订单集合、金额口径及 D/E;佣金系统仅消费最终结果。每次消费必须固化风险结果快照 ID、角色/统计周期、指标代码、系数、结果状态、结果版本、生成时间和查询时间;人员关系变化不回写已固化结果。

5. 结算层

5.1 次月单阶段结算

结算层按资格月的次月计算并导出结算明细,不修改基础佣金或绩效结果。常规结算日暂定为每月 25 日前的某一工作日,具体日期由运营配置。结算金额统一为:

settlement_amount = monthly_receivable_amount - monthly_deductible_amount

其中,monthly_receivable_amount 为上月已计算的应收佣金,monthly_deductible_amount 为上月适用的应扣金额;应扣不存在时按 0 计算。结算按实际值计算并输出,结果可为正数、零或负数。若绩效数据延迟,受影响记录保持 WAITING_RISK_FACTOR,待数据可查询后再纳入输出。本期不采用两阶段预发/补差,也不发起付款、自动追扣或人工异常处理。

5.2 台账与结算批次

  • 一条佣金明细对应一笔订单和一个受益人,保存基础、风险、结算三层的引用与快照。
  • 一条佣金明细可分配至 0..n 个结算批次;一个月可有多个导出批次。
  • 结算状态至少包含:待资格、待风险系数、待结算、结算中、已导出、异常待处理。
  • 台账禁止原地修改;本期仅生成结算明细导出,不发起支付、不导入付款回执,也不处理支付重试、冲正或人工复核。

6. 后台 MVP

6.1 本期建设

  1. 规则列表、详情与生效状态查询。
  2. 角色/场景/组件、条件调整、档位、封顶保底、风险系数和结算比例配置。
  3. 规则校验:条件字段存在、边界连续互斥、同优先级冲突、币种/精度、循环引用、未覆盖兜底场景。
  4. 佣金台账、订单快照、风险结果快照、结算批次、导出状态和异常待处理查询。
  5. 组织关系与门店人员的只读历史查询,供归属解释和异常定位。
  6. 按角色导出绩效统计数据和绩效明细数据,覆盖 CLERK、STORE_MANAGER、SA、SA_MANAGER、REGIONAL_MANAGER。

绩效统计导出至少支持绩效月、角色、区域、SM/RM、门店、人员、快照状态和导出状态筛选,包含角色/人员、订单数、风险指标代码、风险系数、基础金额、最终应发、应收、应扣、结算计算结果及异常数。绩效明细导出需包含订单、资格时间、受益组件、归属快照、风险结果快照、政策版本、结算批次和状态;手机号、收款账号等敏感字段默认脱敏。导出使用独立权限 commission.performance.export,记录筛选条件、导出人、文件 hash、生成/过期时间和下载审计;大数据量异步生成,禁止前端拼接全量数据。

6.2 本期不建设

不建设后台规则版本详情、新建、复制模拟、定时发布等复杂交互;但数据模型必须预留 policy_version、effective_at、incremental_scope、supersedes_version 和审计字段。

6.3 生效和历史保护

  • 新规则默认仅作用于 effective_at 后达到资格的新订单,或明确指定的新结算批次。
  • 已产生的基础佣金、风险结果快照、结算批次和导出记录不可覆盖;台账禁止原地修改。
  • 每次执行保留规则版本、输入快照、输出金额、舍入方式和异常结果,支持重放和审计。

7. 核心数据与接口输出

7.1 佣金计算输入

至少包含订单、资格事件、产品/SKU、合同金额、门店/店员/店长/SA/SM/RM 归属快照、推荐关系、渠道、活动、整单取消状态、政策版本和计算时间。

7.2 佣金计算输出

{
  "commission_ledger_id": "CL-001",
  "order_id": "ORD-001",
  "beneficiary": {"role": "SA", "id": "SA-001"},
  "earned_base_amount": "765",
  "currency": "NGN",
  "matched_rule_versions": ["SA_BASE_V1", "CLERK_REFERRAL_SA_90_V1"],
  "attribution_snapshot_id": "ATTR-001",
  "status": "WAITING_RISK_FACTOR"
}

风险结果和结算输出分别带 risk_factor_snapshot_id、metric_code、factor、结果版本、monthly_receivable_amount、monthly_deductible_amount、settlement_amount、结算批次和导出状态;接口向 H5 返回角色范围内、已脱敏且可解释的数据。

8. 验收标准

  1. 同一资格事件重放不产生重复台账;整单取消引用原资格事件并生成可追溯撤销记录。
  2. 店长、店员、SA、SM、RM 均可按资格时点获得正确受益人快照;关系缺失保持待处理,不部分发放。
  3. SM/RM 直接办单时,直办奖励与本人岗位奖励正确叠加,且不虚构下级、不重复同一组件。
  4. 店员推荐订单仅使 SA_BASE 按 0.9 计算;店长可作为推荐人但店长奖励不叠加、不重复。
  5. 当前政策档位与风险系数区间连续互斥;订单按资格时点的 ACH 定档,后续 ACH 变化不回溯补差。
  6. 佣金系统仅消费风险系统的最终结果,并保存结果版本与消费快照;不自行计算角色范围或 D/E。
  7. 次月单阶段结算按“上月应收 - 上月应扣”以实际值生成结算明细;可输出负数,但不自动追扣。
  8. 五类角色的绩效统计与明细均可按权限导出,金额口径与台账一致且敏感字段脱敏。
  9. 新规则只对明确生效范围增量生效,历史台账和结算不可被覆盖。