# 03 — 同步购买链路创建不可变套餐计时快照

**What to build:** C 端购买、后台代购和代理囤货等同步订单路径，在创建正式主套餐或加油包使用记录时，通过同一套餐生命周期能力解析购买时有效的生效条件、周期类型和时长，并在创建事务中一次性保存完整快照。购买完成后再修改套餐或分配配置，不会改变这些使用记录承诺的计时规则。

**Blocked by:** `.scratch/ur55-package-expiry-base/issues/01-create-allocation-expiry-base-override.md` — 01 — 创建套餐分配时固化生效条件选择

**Status:** completed

- [x] 架构主通道为复杂写，Infrastructure 负责持久化；完整收口同步购买形成套餐使用记录时的计时条款解析，不迁移自动购包、激活接续、最终到期 Query 或未触碰的订单用例。
- [x] 套餐使用记录增加生效条件、周期类型、月数和天数四个购买快照字段；迁移包含中文注释和可逆向下迁移，不回填或猜测历史购买配置。
- [x] 套餐生命周期 Domain 提供 `PackageTermsSnapshot` 值对象或等价单一能力，校验并返回有效生效条件、周期类型、月数和天数；领域规则不依赖 Fiber、GORM 或 Redis。
- [x] 有分配覆盖时使用覆盖值，无覆盖时使用套餐默认值；解析结果必须是非空有效枚举，不能把 `NULL=跟随默认` 写成空快照。
- [x] C 端购买、后台代购、代理囤货及仓库中其他同步生产入口都调用同一快照能力，正式主套餐和加油包均保存四个字段。
- [x] 四个快照与套餐使用记录在同一数据库事务写入，不允许先创建空记录再异步补齐；解析、校验或持久化失败时不留下订单后处理产生的部分使用记录。
- [x] 快照写入后不因套餐默认值、套餐周期时长、分配覆盖或系列授权变化而更新。
- [x] 新同步购买记录若无法生成完整有效快照必须拒绝创建并记录中文上下文日志，不得静默退回读取套餐当前值。
- [x] 领域测试覆盖无覆盖、两个覆盖值、非法值、自然月和按天时长；集成测试逐一覆盖所有同步创建路径、主套餐、加油包、事务回滚及购买后配置变化不修改快照。
