## MODIFIED Requirements ### Requirement: 套餐实体定义 系统 SHALL 定义套餐(Package)实体,包含套餐的基本属性、定价、流量配置,以及用于展示映射的内部比例字段。 **实体字段**: - `real_data_mb`: 真流量额度(MB,套餐真实总量) - `virtual_data_mb`: 虚流量额度(MB,业务停机阈值,必须大于 0 且小于等于 `real_data_mb`) - `virtual_ratio`: 内部展示映射比例,定义为 `real_data_mb / virtual_data_mb` - `enable_virtual_data`: 是否启用虚流量(未启用时 `virtual_ratio = 1.0`) **约束**: - `enable_virtual_data = true` 时,`virtual_data_mb` MUST 大于 0 - `enable_virtual_data = true` 时,`virtual_data_mb` MUST 小于等于 `real_data_mb` - `virtual_ratio` 由 Service 层自动计算并存储,不由调用方传入 #### Scenario: 创建启用虚流量的套餐 - **WHEN** 平台创建套餐,`real_data_mb=100`、`virtual_data_mb=70`、`enable_virtual_data=true` - **THEN** 系统自动计算并存储 `virtual_ratio = 100 / 70 ≈ 1.428571` #### Scenario: 创建虚流量大于真流量的套餐失败 - **WHEN** 平台创建套餐,`real_data_mb=100`、`virtual_data_mb=120`、`enable_virtual_data=true` - **THEN** 系统拒绝保存并返回参数错误 ### Requirement: 套餐流量类型和真虚流量共存 系统 SHALL 支持同一套餐同时定义真实总量和业务阈值,但 `virtual_data_mb` 不再表示与真流量相加的“另一份总量”,而是展示映射与停机判断所依赖的阈值。 **流量类型定义**: - **真流量(real_data_mb)**: 套餐真实总量 - **虚流量(virtual_data_mb)**: 业务停机阈值和展示映射基准 - **未启用虚流量**: `virtual_data_mb` 视为等于 `real_data_mb` #### Scenario: 真总量与虚阈值并存 - **WHEN** 平台创建套餐,`real_data_mb=100`、`virtual_data_mb=70` - **THEN** 系统将其解释为“真实总量 100、业务阈值 70”,而不是“总量 170” #### Scenario: 不允许纯虚流量套餐 - **WHEN** 平台尝试创建 `real_data_mb=0` 且 `virtual_data_mb>0` 的套餐 - **THEN** 系统拒绝保存并返回参数错误