## 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 使用迁移后的生效价字段进行展示