fix(设备实名): 无当前卡时按绑定卡实名回退并初始化单槽当前卡
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 6m26s

- 设备资产解析外层 real_name_status:存在当前使用卡时沿用该卡状态,无任何当前卡时任一有效绑定卡已实名即视为已实名
- 手工绑定与设备导入:设备最大槽位为 1 且有效绑定唯一时,在同一事务内将该绑定初始化为当前使用卡;多卡设备不推断
- 同步 asset-device、personal-customer 主 Spec;归档变更并附存量核对清单(75 条单槽唯一待修复绑定,其中 16 条已实名)
This commit is contained in:
2026-09-18 17:48:17 +08:00
parent 30c6e5bb78
commit 1f2fe4a61a
12 changed files with 465 additions and 3 deletions

View File

@@ -68,6 +68,52 @@
- **WHEN** 生产者向公共可靠事件存储提交超过字段上限的事件标识或父事件标识
- **THEN** 系统在持久化边界返回明确的参数错误而不是数据库字段错误
### Requirement: 单槽单卡设备绑定时初始化当前卡标识
系统 SHALL 在设备最大槽位为 1 且该设备绑定的有效卡唯一时,将该绑定标记为当前使用卡;绑定成功后的设备卡列表 SHALL 把该卡作为当前卡对外返回。对多卡设备,系统 MUST NOT 在绑定时推断当前使用卡,其当前卡标识仍由运营商设备观测或显式切卡结果决定。系统 MUST 保证同一设备同一时刻至多一条有效绑定被标记为当前使用卡;解绑 SHALL 清除该绑定的当前卡标识。
#### Scenario: 单槽设备绑定唯一卡
- **GIVEN** 设备最大槽位为 1 且当前没有有效绑定卡
- **WHEN** 管理员为该设备绑定一张有效卡
- **THEN** 该绑定被标记为当前使用卡
- **AND** 后续设备卡列表中该卡返回为当前卡
#### Scenario: 多卡设备绑定不推断当前卡
- **GIVEN** 设备最大槽位大于 1
- **WHEN** 管理员为该设备绑定一张卡
- **THEN** 绑定结果不改变该设备既有的当前使用卡标识
#### Scenario: 解绑清除当前卡标识
- **GIVEN** 某有效绑定被标记为当前使用卡
- **WHEN** 该绑定被解绑
- **THEN** 该设备不再存在被标记为当前使用卡的有效绑定
### Requirement: 存量当前卡标识的核对与受控修复
系统 SHALL 提供只读核对口径,用于按「设备最大槽位为 1、有效绑定唯一、当前无任何当前卡标识」识别需要修复的存量绑定。受控修复 SHALL 仅将符合该口径的绑定标记为当前使用卡MUST NOT 修改其他绑定、MUST NOT 使同一设备出现多条当前使用卡。修复后设备卡列表 SHALL 反映该当前卡标识,设备实名判定 SHALL 按绑定卡事实返回。
#### Scenario: 只读核对识别待修复设备
- **GIVEN** 设备最大槽位为 1、存在唯一有效绑定且没有任何当前卡标识
- **WHEN** 维护者按核对口径查询
- **THEN** 该设备出现在待修复结果中,且查询本身不产生任何写入
#### Scenario: 受控修复后当前卡可见
- **GIVEN** 已按核对口径确认的设备
- **WHEN** 维护者执行受控修复
- **THEN** 该设备的唯一有效绑定被标记为当前使用卡
- **AND** 该设备的卡列表与资产信息按最新绑定事实返回
#### Scenario: 多卡设备不在修复范围
- **GIVEN** 设备最大槽位大于 1 或有效绑定多于一条
- **WHEN** 维护者按核对口径查询
- **THEN** 该设备不出现在待修复结果中
## 可达操作索引
本节只用于入口导航,不是行为 Requirement业务义务以上述 Requirements 为准。

View File

@@ -32,6 +32,35 @@
- **WHEN** 查询资产列表或详情
- **THEN** 返回该客户可见的资产而不包含其他客户资产
### Requirement: 缺少当前使用卡时的设备实名判定
系统 SHALL 在个人客户查询设备资产 `GET /api/c/v1/asset/info` 时按下述规则返回外层 `real_name_status`:存在有效绑定卡的当前使用标识时,返回该卡的实名状态;不存在任何当前使用卡时,只要该设备存在任一已实名(`real_name_status=1`的有效绑定卡SHALL 返回已实名,否则返回未实名。返回的 `real_name_status_name` SHALL 与 `real_name_status` 保持一致。卡列表中的逐卡实名状态 MUST 保持按卡返回,不受本判定影响。该判定 MUST NOT 因运营商实时接口调用失败或超时而改变。
#### Scenario: 无当前使用卡但绑定卡已实名
- **GIVEN** 设备存在有效绑定卡且其中至少一张已实名,且该设备没有任何 `is_current=true` 的有效绑定卡
- **WHEN** 已认证个人客户请求该设备的 `GET /api/c/v1/asset/info`
- **THEN** 响应外层 `real_name_status` 返回 `1``real_name_status_name` 为已实名
- **AND** 卡列表中该已实名卡仍按其自身实名状态返回
#### Scenario: 无当前使用卡且绑定卡均未实名
- **GIVEN** 设备存在有效绑定卡且全部未实名,且该设备没有任何 `is_current=true` 的有效绑定卡
- **WHEN** 已认证个人客户请求该设备的 `GET /api/c/v1/asset/info`
- **THEN** 响应外层 `real_name_status` 返回 `0``real_name_status_name` 为未实名
#### Scenario: 有当前使用卡时沿用该卡状态
- **GIVEN** 设备存在一张 `is_current=true` 的未实名绑定卡,同时存在另一张已实名绑定卡
- **WHEN** 已认证个人客户请求该设备的 `GET /api/c/v1/asset/info`
- **THEN** 响应外层 `real_name_status` 返回该当前使用卡的未实名状态
#### Scenario: 运营商实时查询失败不改变实名判定
- **GIVEN** 设备的运营商实时状态查询失败或超时
- **WHEN** 已认证个人客户请求该设备的 `GET /api/c/v1/asset/info`
- **THEN** 响应仍按绑定卡事实返回外层实名状态,不因实时查询失败而返回未实名
## 可达操作索引
本节只用于入口导航,不是行为 Requirement业务义务以上述 Requirements 为准。