## ADDED Requirements

### Requirement: 价格配置状态与原始值分离

系统 MUST 同时保存套餐价格的原始配置值和价格配置状态，且 MUST 区分以下三种语义：未配置、赠送 0、已配置为非 0。普通可售套餐 MUST NOT 显式配置 0 作为售卖价，0 仅可用于赠送语义。配置页与编辑页 SHALL 展示原始值，不能用生效价覆盖原始值。

#### Scenario: 未配置价格与 0 价必须可区分
- **WHEN** 管理员创建两个套餐，一个建议零售价未配置，一个已被标记为赠送且建议零售价显式配置为 0
- **THEN** 系统 MUST 为两者保存不同的价格配置状态
- **THEN** 系统 MUST NOT 仅依赖数值 0 判断价格是否已配置

#### Scenario: 普通可售套餐显式 0 被拒绝
- **WHEN** 管理员创建或编辑一个普通可售套餐，并将建议零售价填写为 0
- **THEN** 系统 MUST 拒绝保存
- **THEN** 系统 MUST 返回普通可售套餐不允许显式 0 的错误

#### Scenario: 配置页展示原始值
- **WHEN** 管理员进入套餐详情或编辑页
- **THEN** 页面 SHALL 展示原始建议成本价和原始建议零售价

---

### Requirement: 普通可售套餐的生效售价回退

系统 SHALL 对普通可售套餐计算生效售价。若建议零售价未配置，生效售价 MUST 回退为成本价。该规则 MUST 适用于后台采购、C 端展示与下单、自动购包以及所有依赖套餐成交价的链路。

#### Scenario: 建议零售价未配置时回退到成本价
- **WHEN** 普通可售套餐的建议零售价未配置，成本价为 8000 分
- **THEN** 系统返回的生效售价 MUST 为 8000 分

#### Scenario: 建议零售价已配置时保持原值
- **WHEN** 普通可售套餐的建议零售价已配置为 12000 分，成本价为 8000 分
- **THEN** 系统返回的生效售价 MUST 为 12000 分

---

### Requirement: 历史数据回填与迁移

系统 MUST 对存量套餐、分配记录和订单相关价格快照执行迁移回填，补齐价格配置状态和生效价字段。迁移后，只有能被正向识别为赠送 0 的记录才保留为赠送 0，其余历史 0 数据 MUST 转为未配置并进入人工复核清单。

#### Scenario: 存量未配置价格被回填为未配置状态
- **WHEN** 迁移执行前某套餐历史上从未配置过建议零售价
- **THEN** 迁移后该套餐 MUST 保持未配置状态
- **THEN** 其生效售价 MUST 按成本价回填

#### Scenario: 正向识别的赠送 0 被保留
- **WHEN** 迁移执行前某套餐的建议零售价为 0，且历史记录能明确证明其为赠送语义
- **THEN** 迁移后系统 MUST 保留赠送 0 状态

#### Scenario: 模糊旧 0 转为未配置并进入人工复核
- **WHEN** 迁移执行前某套餐的建议零售价为 0，但历史记录无法明确证明其为赠送语义
- **THEN** 迁移后系统 MUST 将其转为未配置状态
- **THEN** 系统 MUST 将该记录加入人工复核清单

#### Scenario: 历史快照按生效价展示
- **WHEN** 用户查询历史订单或历史分配记录
- **THEN** 系统 SHALL 使用迁移后的生效价字段进行展示
