# 套餐管理变更

## MODIFIED Requirements

### Requirement: 创建套餐

系统 SHALL 允许平台管理员创建套餐，包含套餐编码、套餐名称、所属系列、套餐类型、时长、流量配置（真流量必填、虚流量可选）、成本价和建议售价。套餐编码 MUST 全局唯一（排除已删除记录）。新创建的套餐默认为启用状态(1)和下架状态(2)。

**变更说明**：移除 `price`、`data_type`、`data_amount_mb` 参数，新增 `enable_virtual_data` 参数。

#### Scenario: 成功创建套餐
- **WHEN** 管理员提交有效的套餐信息
- **AND** 包含 `cost_price`、`suggested_retail_price`、`real_data_mb`
- **THEN** 系统创建套餐记录，状态为启用(1)，上架状态为下架(2)，返回创建的套餐详情

#### Scenario: 创建带虚流量的套餐
- **WHEN** 管理员提交套餐信息
- **AND** `enable_virtual_data = true`
- **AND** `virtual_data_mb = 800`
- **AND** `real_data_mb = 1000`
- **THEN** 系统创建套餐记录，虚流量配置正确保存

#### Scenario: 套餐编码重复
- **WHEN** 管理员提交的套餐编码已存在（未删除）
- **THEN** 系统返回错误 "套餐编码已存在"

#### Scenario: 关联不存在的套餐系列
- **WHEN** 管理员指定的系列 ID 不存在
- **THEN** 系统返回错误 "套餐系列不存在"

#### Scenario: 缺少必填字段
- **WHEN** 管理员未提供必填字段（套餐编码、套餐名称、套餐类型、时长、成本价、真流量）
- **THEN** 系统返回参数验证错误

---

### Requirement: Package 模型新增字段

系统 MUST 在 Package 模型中调整以下字段：
- 移除 `price` 字段
- 移除 `data_type` 字段
- 移除 `data_amount_mb` 字段
- 保留 `suggested_cost_price` 并重命名为 `cost_price`：成本价（分为单位）
- 保留 `suggested_retail_price`：建议售价（分为单位）
- 新增 `enable_virtual_data`：是否启用虚流量，布尔值，默认 false
- 保留 `real_data_mb`：真实流量（必填）
- 保留 `virtual_data_mb`：虚流量（启用时必填）
- 保留 `shelf_status`：上架状态，1-上架 2-下架，默认 2

#### Scenario: 创建套餐时设置价格
- **WHEN** 管理员创建套餐并设置成本价和建议售价
- **THEN** 系统保存 `cost_price` 和 `suggested_retail_price`

#### Scenario: 查询套餐时返回价格
- **WHEN** 管理员查询套餐详情或列表
- **THEN** 响应中包含 `cost_price`、`suggested_retail_price`、`shelf_status`、`enable_virtual_data` 字段
- **AND** 不再返回 `price`、`data_type`、`data_amount_mb` 字段

## REMOVED Requirements

### Requirement: price 字段

**Reason**: `price` 字段语义不清，与 `suggested_cost_price`、`suggested_retail_price` 混淆
**Migration**: 使用 `cost_price`（成本价）和 `suggested_retail_price`（建议售价）替代

### Requirement: data_type 字段

**Reason**: `data_type` 暗示真流量/虚流量二选一，但业务需求是共存
**Migration**: 使用 `enable_virtual_data` 开关控制是否启用虚流量

### Requirement: data_amount_mb 字段

**Reason**: 语义不清，不知道是真流量还是虚流量
**Migration**: 使用 `real_data_mb`（真流量）和 `virtual_data_mb`（虚流量）明确区分
