# Package Series Allocation Spec Delta

## MODIFIED Requirements

### Requirement: 套餐系列分配列表查询

系统 SHALL 提供套餐系列分配列表查询功能,支持按店铺、系列和状态筛选,返回包含新佣金配置的分配信息。

#### Scenario: 成功获取分配列表

- **WHEN** 用户请求套餐系列分配列表
- **THEN** 系统返回分配列表,每项包含:
  - 基本信息: id, series_id, series_name, shop_id, shop_name
  - 分配者信息: allocator_shop_id, allocator_shop_name
  - 佣金配置: base_commission (mode, value), enable_tier_commission
  - 状态和时间: status, created_at, updated_at
- **AND** 响应结构为: `{ list, page, page_size, total, total_pages }`

#### Scenario: 按条件筛选分配列表

- **WHEN** 用户提供筛选条件 (shop_id, series_id, status)
- **THEN** 系统返回符合条件的分配列表
- **AND** 支持分页参数 (page, page_size)

### Requirement: 创建套餐系列分配

系统 SHALL 允许用户创建套餐系列分配,配置基础返佣和可选的梯度返佣规则。

#### Scenario: 创建基础返佣分配

- **WHEN** 用户提交创建请求,包含:
  - series_id: 套餐系列ID
  - shop_id: 被分配的店铺ID
  - base_commission: { mode: "fixed"/"percent", value: number }
- **THEN** 系统创建分配记录
- **AND** 返回完整的分配信息包含 allocator_shop_id 和 allocator_shop_name

#### Scenario: 创建带梯度返佣的分配

- **WHEN** 用户提交创建请求,包含:
  - series_id, shop_id, base_commission (同上)
  - enable_tier_commission: true
  - tier_config: { period_type, tier_type, tiers[] }
    - period_type: "monthly"/"quarterly"/"yearly"
    - tier_type: "sales_count"/"sales_amount"
    - tiers: [{ threshold, mode, value }]
- **THEN** 系统创建分配记录并保存梯度配置
- **AND** 梯度档位按阈值升序存储

#### Scenario: 验证梯度档位阈值递增

- **WHEN** 用户提交的梯度档位阈值不是递增的
- **THEN** 系统返回400错误
- **AND** 错误消息说明阈值必须递增

### Requirement: 更新套餐系列分配

系统 SHALL 允许用户更新现有分配的佣金配置,包括基础返佣和梯度返佣。

#### Scenario: 更新基础返佣配置

- **WHEN** 用户提交更新请求,包含新的 base_commission
- **THEN** 系统更新分配记录
- **AND** 返回更新后的完整信息

#### Scenario: 启用或禁用梯度返佣

- **WHEN** 用户更新 enable_tier_commission 标志
- **THEN** 系统更新配置
- **AND** 如果启用,必须提供有效的 tier_config
- **AND** 如果禁用,tier_config 可以为空

#### Scenario: 更新梯度返佣配置

- **WHEN** 用户提交包含新 tier_config 的更新请求
- **THEN** 系统替换整个梯度配置
- **AND** 验证新档位阈值递增
- **AND** 返回更新后的信息

### Requirement: 删除套餐系列分配

系统 SHALL 允许用户删除套餐系列分配记录。

#### Scenario: 成功删除分配

- **WHEN** 用户请求删除指定ID的分配
- **THEN** 系统删除该分配记录
- **AND** 返回成功响应 (200)

#### Scenario: 删除不存在的分配

- **WHEN** 用户请求删除不存在的分配ID
- **THEN** 系统返回404错误
- **AND** 错误消息说明分配不存在

### Requirement: 获取套餐系列分配详情

系统 SHALL 提供单个分配记录的详细信息查询。

#### Scenario: 成功获取详情

- **WHEN** 用户请求指定ID的分配详情
- **THEN** 系统返回完整的分配信息,包括:
  - 所有基本字段
  - base_commission 对象
  - enable_tier_commission 标志
  - tier_config (如果启用了梯度返佣)

### Requirement: 更新套餐系列分配状态

系统 SHALL 允许用户启用或禁用套餐系列分配。

#### Scenario: 切换分配状态

- **WHEN** 用户提交状态更新请求 (status: 1启用/2禁用)
- **THEN** 系统更新分配状态
- **AND** 返回成功响应

#### Scenario: 禁用分配后的行为

- **WHEN** 分配被禁用 (status: 2)
- **THEN** 该分配不再参与佣金计算 (由后端业务逻辑保证)
- **AND** 前端列表中状态显示为"禁用"

## REMOVED Requirements

### Requirement: 定价模式配置

**Reason**: 旧的定价模式 (pricing_mode, pricing_value) 已被新的佣金模型替代

**Migration**: 旧数据通过后端迁移脚本转换为基础返佣配置:

- pricing_mode="fixed" → base_commission.mode="fixed"
- pricing_mode="percentage" → base_commission.mode="percent"
- pricing_value → base_commission.value (需要单位转换)

### Requirement: 一次性佣金配置

**Reason**: 一次性佣金配置 (one*time_commission*\*) 已被梯度返佣系统替代

**Migration**: 旧的一次性佣金通过以下方式迁移:

- 如果设置了一次性佣金,转换为单档位的梯度返佣
- trigger → tier_type mapping (first_activation → sales_count, cumulative_recharge → sales_amount)
- threshold → tiers[0].threshold
- amount → tiers[0].value (mode设为fixed)

### Requirement: 计算成本价字段

**Reason**: calculated_cost_price 字段在新模型中不再使用

**Migration**: 该字段不再返回,成本计算由后端业务逻辑内部处理

## ADDED Requirements

### Requirement: 基础返佣配置

系统 SHALL 为每个分配提供基础返佣配置,包含返佣模式和返佣值。

#### Scenario: 固定金额返佣

- **WHEN** base_commission.mode = "fixed"
- **THEN** base_commission.value 表示固定返佣金额(单位:分)
- **AND** 每笔交易返佣该固定金额

#### Scenario: 百分比返佣

- **WHEN** base_commission.mode = "percent"
- **THEN** base_commission.value 表示返佣百分比的千分比 (如200表示20%)
- **AND** 每笔交易返佣 = 交易金额 \* (value / 1000)

### Requirement: 梯度返佣配置

系统 SHALL 支持可选的梯度返佣配置,根据周期内的销量或销售额分档返佣。

#### Scenario: 按销量分档返佣

- **WHEN** tier_config.tier_type = "sales_count"
- **THEN** 系统根据周期内的销售数量匹配档位
- **AND** 达到档位阈值后,该档位的返佣规则生效

#### Scenario: 按销售额分档返佣

- **WHEN** tier_config.tier_type = "sales_amount"
- **THEN** 系统根据周期内的销售金额(分)匹配档位
- **AND** 达到档位阈值后,该档位的返佣规则生效

#### Scenario: 月度返佣周期

- **WHEN** tier_config.period_type = "monthly"
- **THEN** 系统按自然月统计销量或销售额
- **AND** 每月初重置计数

#### Scenario: 季度返佣周期

- **WHEN** tier_config.period_type = "quarterly"
- **THEN** 系统按季度统计销量或销售额
- **AND** 每季度初重置计数

#### Scenario: 年度返佣周期

- **WHEN** tier_config.period_type = "yearly"
- **THEN** 系统按年度统计销量或销售额
- **AND** 每年初重置计数

### Requirement: 梯度档位管理

系统 SHALL 支持多个返佣档位,每个档位有独立的阈值和返佣规则。

#### Scenario: 多档位返佣

- **WHEN** 配置了多个档位 (tiers数组)
- **THEN** 系统按阈值从低到高排列档位
- **AND** 当销量/销售额超过某档位阈值时,使用该档位的返佣规则

#### Scenario: 档位阈值唯一性

- **WHEN** 用户提交包含重复阈值的档位
- **THEN** 系统返回400错误
- **AND** 错误消息说明阈值必须唯一

#### Scenario: 档位返佣模式

- **WHEN** 档位的 mode = "fixed"
- **THEN** value 表示固定返佣金额(分)
- **WHEN** 档位的 mode = "percent"
- **THEN** value 表示返佣百分比的千分比
