## MODIFIED Requirements

### Requirement: 资产表新增代际字段

系统 MUST 在资产主表新增 `generation int NOT NULL DEFAULT 1` 字段，覆盖 `IotCard` 与 `Device`。

#### Scenario: 新资产默认代际为 1
- **WHEN** 创建新的 IoT 卡或设备
- **THEN** 系统 MUST 将 `generation` 初始化为 `1`

---

### Requirement: 关联业务表新增代际字段

系统 MUST 在以下关联业务表新增 `generation int NOT NULL DEFAULT 1` 字段：`Order`、`PackageUsage`、`AssetRechargeRecord`。

#### Scenario: 新关联记录默认代际为 1
- **WHEN** 创建订单、套餐使用记录或资产充值记录
- **THEN** 系统 MUST 将记录的 `generation` 默认为 `1`

---

### Requirement: 写时快照代际规则

系统 MUST 在创建关联记录时执行代际写时快照：从当前资产（IoT 卡/设备）的 `generation` 复制到新建的 `Order`、`PackageUsage`、`AssetRechargeRecord` 记录。

#### Scenario: 创建订单时复制资产代际
- **WHEN** 某资产当前 `generation=3`，并基于该资产创建订单
- **THEN** 该订单记录的 `generation` MUST 写入为 `3`

---

### Requirement: 查询过滤规则

系统 MUST 支持客户端按 `generation` 过滤历史数据；后台管理侧 MUST 不默认按 `generation` 过滤。

#### Scenario: 客户端按代际查看历史
- **WHEN** 客户端请求携带指定 `generation`
- **THEN** 系统 MUST 仅返回该代际的数据（在后续提案中实现）

#### Scenario: 后台查询不按代际裁剪
- **WHEN** 管理端查询订单或充值记录且未显式指定 `generation`
- **THEN** 系统 MUST 返回全部代际数据

---

### Requirement: 钱包流水不引入代际字段

系统 MUST NOT 在钱包流水相关表新增 `generation` 字段，因为钱包流水已通过 `wallet_id` 天然隔离。

#### Scenario: 钱包流水按钱包隔离
- **WHEN** 查询某资产钱包流水
- **THEN** 系统 MUST 仅依赖 `wallet_id` 完成数据隔离，不新增 `generation` 参与过滤

---

### Requirement: 换货与转新的代际边界

系统 SHALL 将换货链与代际链视为两条不同的业务语义链。

系统 MUST 满足：
- 换货完成时，旧资产 `generation` MUST NOT 变化
- 换货完成时，新资产 `generation` MUST NOT 变化
- 仅在 `renew` 时，旧资产 `generation` 才允许递增
- 新资产来源追溯 MUST 通过 `ExchangeOrder.old_* / new_*` 表达，而不是通过 `generation` 推导

#### Scenario: 换货完成不改变旧资产世代
- **WHEN** 后台完成一次换货
- **THEN** 旧资产 `generation` MUST 保持原值不变

#### Scenario: 转新时世代递增
- **WHEN** 后台执行 `renew`
- **THEN** 系统 MUST 将旧资产 `generation + 1`
