# 套餐真流量/虚流量共存机制

## ADDED Requirements

### Requirement: 真流量必填

创建或更新套餐时，系统 SHALL 要求 `real_data_mb`（真实流量额度）为必填字段，且 MUST 大于 0。

#### Scenario: 创建套餐时提供真流量
- **WHEN** 创建套餐请求包含 `real_data_mb = 1000`
- **THEN** 系统 SHALL 保存该套餐
- **AND** `real_data_mb` 记录为 1000 MB

#### Scenario: 创建套餐时缺少真流量
- **WHEN** 创建套餐请求未提供 `real_data_mb` 字段
- **THEN** 系统 SHALL 拒绝请求
- **AND** 返回参数验证失败错误

### Requirement: 虚流量可选开关

系统 SHALL 提供 `enable_virtual_data` 开关控制是否启用虚流量。启用时 MUST 提供 `virtual_data_mb`，且该值 MUST 小于等于 `real_data_mb`。

#### Scenario: 启用虚流量
- **WHEN** 创建套餐请求包含 `enable_virtual_data = true`
- **AND** `virtual_data_mb = 800`
- **AND** `real_data_mb = 1000`
- **THEN** 系统 SHALL 保存该配置
- **AND** `enable_virtual_data` 记录为 true
- **AND** `virtual_data_mb` 记录为 800 MB

#### Scenario: 启用虚流量但未提供额度
- **WHEN** 创建套餐请求包含 `enable_virtual_data = true`
- **AND** 未提供 `virtual_data_mb`
- **THEN** 系统 SHALL 拒绝请求
- **AND** 返回"启用虚流量时必须提供虚流量额度"错误

#### Scenario: 虚流量超过真流量
- **WHEN** 创建套餐请求包含 `enable_virtual_data = true`
- **AND** `virtual_data_mb = 1200`
- **AND** `real_data_mb = 1000`
- **THEN** 系统 SHALL 拒绝请求
- **AND** 返回"虚流量不能超过真实流量"错误

#### Scenario: 不启用虚流量
- **WHEN** 创建套餐请求包含 `enable_virtual_data = false`
- **THEN** 系统 SHALL 保存该配置
- **AND** `virtual_data_mb` 可为空或忽略

### Requirement: 停机判断目标值

轮询停机模块在判断是否停机时，系统 SHALL 根据 `enable_virtual_data` 选择目标值：启用虚流量时使用 `virtual_data_mb`，否则使用 `real_data_mb`。

#### Scenario: 启用虚流量的停机判断
- **WHEN** 套餐配置 `enable_virtual_data = true`
- **AND** `virtual_data_mb = 800`
- **AND** `real_data_mb = 1000`
- **THEN** 停机判断的目标流量值 SHALL 为 800 MB

#### Scenario: 未启用虚流量的停机判断
- **WHEN** 套餐配置 `enable_virtual_data = false`
- **AND** `real_data_mb = 1000`
- **THEN** 停机判断的目标流量值 SHALL 为 1000 MB
