# 佣金计算变更

## MODIFIED Requirements

### Requirement: 一次性佣金计算

系统 SHALL 按链式分配规则计算一次性佣金。每级代理实际获得的佣金 = 自己能拿到的金额 - 给下级的金额。

**变更说明**：从"直接发放给归属店铺"改为"链式分配给代理链上所有店铺"。

#### Scenario: 计算链式分配金额
- **WHEN** 触发一次性佣金
- **AND** 代理链为 平台 → A → A1 → A2
- **AND** 系列规则返20元
- **AND** A能拿到20元，给A1设置8元
- **AND** A1能拿到8元，给A2设置5元
- **THEN** A2实际获得 = 5元
- **AND** A1实际获得 = 8 - 5 = 3元
- **AND** A实际获得 = 20 - 8 = 12元

#### Scenario: 末端代理全额获得
- **WHEN** 触发一次性佣金
- **AND** A1是末端代理（无下级）
- **AND** A1能拿到10元
- **THEN** A1实际获得 = 10元（全额）

#### Scenario: 独吞场景
- **WHEN** 触发一次性佣金
- **AND** A给A1设置的一次性佣金金额为0元
- **THEN** A1实际获得 = 0元
- **AND** A实际获得 = 自己能拿到的全部金额

---

### Requirement: 梯度佣金计算

系统 SHALL 根据代理当前销量/销售额所在梯度档位计算一次性佣金金额。

**变更说明**：新增统计范围开关（仅自己/自己+下级），梯度升级后上级获得增量。

#### Scenario: 按梯度计算
- **WHEN** 触发一次性佣金
- **AND** 代理A当前销量150（适用">=100返10元"档位）
- **AND** A给A1设置5元
- **THEN** A1实际获得 = 5元
- **AND** A实际获得 = 10 - 5 = 5元

#### Scenario: 梯度升级
- **WHEN** 代理A销量从150升到210
- **AND** 适用档位从">=100返10元"变为">=200返20元"
- **AND** A给A1设置仍为5元
- **THEN** A1实际获得 = 5元（不变）
- **AND** A实际获得 = 20 - 5 = 15元（增量归上级）

#### Scenario: 统计范围-仅自己
- **WHEN** 梯度配置 `stat_scope = self`
- **THEN** 只统计该代理直接产生的销量/销售额

#### Scenario: 统计范围-自己+下级
- **WHEN** 梯度配置 `stat_scope = self_and_sub`
- **THEN** 统计该代理及所有下级代理的销量/销售额之和

---

### Requirement: 差价佣金计算

差价佣金计算规则不变：上级代理的佣金 = 下级成本价 - 自己成本价。

#### Scenario: 差价佣金计算
- **WHEN** 代理A1销售一单
- **AND** A的成本价120元，A1的成本价130元
- **THEN** A的差价佣金 = 130 - 120 = 10元
