# qicheng-migration-package-lifecycle-overrides Specification ## Purpose 为奇成迁移中状态字段无法唯一表达套餐先后关系的少量资产,提供逐卡、可审计且不影响其他资产的套餐生命周期裁决能力。 ## Requirements ### Requirement: 迁移配置支持逐卡套餐生命周期覆盖 系统 SHALL 支持在奇成迁移映射配置中,以完整 ICCID 和 `tbl_card_life` 生命周期记录 ID 指定唯一当前生效套餐,以及待生效或跳过的套餐记录。 #### Scenario: 指定当前与待生效套餐 - **WHEN** 某 ICCID 的覆盖指定一个当前生效记录和一个待生效记录 - **THEN** step2 生成结果 SHALL 将前者迁移为生效套餐、后者迁移为待生效套餐,且不再以多个当前生效套餐阻断该资产 #### Scenario: 指定跳过套餐 - **WHEN** 某 ICCID 的覆盖将一个未来正式套餐记录指定为跳过 - **THEN** step2 SHALL 不为该记录生成套餐使用数据,并在审核产物中记录其跳过裁决 ### Requirement: 覆盖必须完整且可验证 系统 MUST 拒绝生命周期记录不存在、重复引用、状态互相冲突、未指定唯一当前生效记录,或未明确裁决其他原本可迁移正式套餐的覆盖。 #### Scenario: 覆盖引用不存在的记录 - **WHEN** 覆盖中的生命周期记录 ID 不属于对应 ICCID 的 `tbl_card_life` 记录 - **THEN** step2 SHALL 将该 ICCID 记入错误产物且不生成该资产的套餐迁移数据 #### Scenario: 覆盖遗漏另一条可迁移套餐 - **WHEN** 覆盖指定当前生效记录但遗漏同卡另一条原本会迁移的正式套餐 - **THEN** step2 SHALL 将该 ICCID 记入错误产物且不猜测其状态 ### Requirement: 未覆盖资产维持严格冲突阻断 系统 SHALL 对未配置生命周期覆盖的资产维持现有套餐状态分类和多个当前生效正式套餐阻断行为。 #### Scenario: 未覆盖资产存在多个当前生效套餐 - **WHEN** 未配置覆盖的 ICCID 仍有多条当前生效正式套餐 - **THEN** step2 SHALL 输出 `multiple_active_packages` 错误且不迁移该资产的套餐