Files
junhong_cmp_fiber/openspec/changes/add-direct-exchange-flow/specs/asset-generation/spec.md
Break 27fba9160c
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 56s
提案
2026-06-04 09:39:20 +08:00

2.7 KiB
Raw Blame History

MODIFIED Requirements

Requirement: 资产表新增代际字段

系统 MUST 在资产主表新增 generation int NOT NULL DEFAULT 1 字段,覆盖 IotCardDevice

Scenario: 新资产默认代际为 1

  • WHEN 创建新的 IoT 卡或设备
  • THEN 系统 MUST 将 generation 初始化为 1

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

系统 MUST 在以下关联业务表新增 generation int NOT NULL DEFAULT 1 字段:OrderPackageUsageAssetRechargeRecord

Scenario: 新关联记录默认代际为 1

  • WHEN 创建订单、套餐使用记录或资产充值记录
  • THEN 系统 MUST 将记录的 generation 默认为 1

Requirement: 写时快照代际规则

系统 MUST 在创建关联记录时执行代际写时快照从当前资产IoT 卡/设备)的 generation 复制到新建的 OrderPackageUsageAssetRechargeRecord 记录。

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