This commit is contained in:
26
openspec/specs/agent-series-package-options/spec.md
Normal file
26
openspec/specs/agent-series-package-options/spec.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# 代理系列授权套餐候选项当前行为
|
||||
|
||||
## Purpose
|
||||
|
||||
为代理系列授权页面提供与套餐管理列表隔离的候选套餐和授权状态,使前端能阻止重复授权。
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: 查询系列授权套餐候选项
|
||||
系统 SHALL 提供独立接口,按被授权店铺和套餐系列返回当前操作者可分配的非赠送套餐;每个候选项 MUST 包含与套餐列表一致的套餐字段,以及该店铺是否已授权该套餐的状态。
|
||||
|
||||
#### Scenario: 返回已授权与未授权候选项
|
||||
- **WHEN** 有权限的操作者查询指定店铺和套餐系列的候选套餐
|
||||
- **THEN** 系统返回该系列可分配套餐的完整套餐列表字段,且已存在有效授权记录的套餐标记为已授权
|
||||
|
||||
#### Scenario: 查询无权分配的套餐
|
||||
- **WHEN** 代理操作者查询其不具备上级授权的套餐系列
|
||||
- **THEN** 系统拒绝查询且不返回套餐候选项
|
||||
|
||||
## 可达操作索引
|
||||
|
||||
本节只用于入口导航,不是行为 Requirement;业务义务以上述 Requirements 为准。
|
||||
|
||||
### 代理系列授权套餐候选项
|
||||
|
||||
`GET /api/admin/shop-series-grants/package-options`(查询指定店铺和系列的候选套餐及授权状态)。
|
||||
@@ -26,6 +26,20 @@
|
||||
- **WHEN** 执行绑定或解绑
|
||||
- **THEN** 后续设备卡列表反映该关系变化
|
||||
|
||||
### Requirement: ICCID 按原始长度精确唯一
|
||||
|
||||
系统 SHALL 将未删除卡的 ICCID 唯一性按原始 ICCID 长度分别约束:原始长度为 19 的卡以 `iccid_19` 唯一;原始长度为 20 的卡以 `iccid_20` 唯一。20 位 ICCID 卡共享相同的前 19 位 SHALL 被视为有效数据。
|
||||
|
||||
#### Scenario: 20 位 ICCID 共享前缀
|
||||
|
||||
- **WHEN** 两张未删除卡具有不同的 20 位完整 ICCID,但其前 19 位相同
|
||||
- **THEN** 数据库接受两张卡,并通过各自的 `iccid_20` 保证完整 ICCID 唯一
|
||||
|
||||
#### Scenario: 19 位 ICCID 重复
|
||||
|
||||
- **WHEN** 两张未删除卡具有相同的 19 位完整 ICCID
|
||||
- **THEN** 数据库拒绝第二张卡的重复值
|
||||
|
||||
## 可达操作索引
|
||||
|
||||
本节只用于入口导航,不是行为 Requirement;业务义务以上述 Requirements 为准。
|
||||
|
||||
@@ -26,6 +26,22 @@
|
||||
- **WHEN** 再次执行单条或批量已读
|
||||
- **THEN** 通知保持原读取事实且不影响其他接收人的通知
|
||||
|
||||
### Requirement: 主钱包低余额跨阈值提醒
|
||||
|
||||
系统 SHALL 在店铺主钱包余额由不低于 100 元变为低于 100 元时,与扣款事实在同一事务创建面向当时有效业务员的低余额通知事件;余额持续低于 100 元时不得重复创建,余额恢复至不低于 100 元后再次跌破时 MUST 再次创建。
|
||||
|
||||
#### Scenario: 首次跌破阈值
|
||||
- **WHEN** 店铺主钱包扣款后余额从不低于 100 元变为低于 100 元,且存在有效业务员
|
||||
- **THEN** 系统在提交扣款事实时创建一条低余额通知事件,并由通知投递流程生成站内通知
|
||||
|
||||
#### Scenario: 持续低余额
|
||||
- **WHEN** 店铺主钱包余额已经低于 100 元且再次发生扣款
|
||||
- **THEN** 系统不创建新的低余额通知事件
|
||||
|
||||
#### Scenario: 回升后再次跌破
|
||||
- **WHEN** 店铺主钱包余额已恢复至不低于 100 元,随后扣款使其低于 100 元
|
||||
- **THEN** 系统创建新的低余额通知事件
|
||||
|
||||
## 可达操作索引
|
||||
|
||||
本节只用于入口导航,不是行为 Requirement;业务义务以上述 Requirements 为准。
|
||||
|
||||
@@ -26,6 +26,18 @@
|
||||
- **WHEN** 创建批量操作
|
||||
- **THEN** 同步操作直接返回结果;异步订购返回任务标识且可查询处理状态
|
||||
|
||||
### Requirement: 授权页面禁止重复选择套餐
|
||||
|
||||
系统 SHALL 使代理系列授权页面能够区分目标店铺已授权和未授权套餐;已授权套餐 MUST 以不可新增的状态返回,首次创建系列授权和既有系列新增套餐均适用。
|
||||
|
||||
#### Scenario: 首次创建前查询候选套餐
|
||||
- **WHEN** 操作者选择目标店铺和套餐系列以创建系列授权
|
||||
- **THEN** 系统返回可用于选择的候选套餐及其授权状态,前端可阻止选择已授权套餐
|
||||
|
||||
#### Scenario: 既有授权新增套餐前查询候选套餐
|
||||
- **WHEN** 操作者为已有系列授权添加套餐
|
||||
- **THEN** 系统返回同一店铺和系列的候选套餐及其授权状态,且不改变现有套餐管理提交接口的调价和删除语义
|
||||
|
||||
## 可达操作索引
|
||||
|
||||
本节只用于入口导航,不是行为 Requirement;业务义务以上述 Requirements 为准。
|
||||
@@ -44,7 +56,7 @@
|
||||
|
||||
### 代理系列授权
|
||||
|
||||
`GET /api/admin/shop-series-grants`(查询代理系列授权列表);`POST /api/admin/shop-series-grants`(创建代理系列授权);`DELETE /api/admin/shop-series-grants/{id}`(删除代理系列授权);`GET /api/admin/shop-series-grants/{id}`(查询代理系列授权详情);`PUT /api/admin/shop-series-grants/{id}`(更新代理系列授权);`PUT /api/admin/shop-series-grants/{id}/packages`(管理授权套餐(新增/更新/删除))。
|
||||
`GET /api/admin/shop-series-grants`(查询代理系列授权列表);`GET /api/admin/shop-series-grants/package-options`(查询代理系列授权套餐候选项);`POST /api/admin/shop-series-grants`(创建代理系列授权);`DELETE /api/admin/shop-series-grants/{id}`(删除代理系列授权);`GET /api/admin/shop-series-grants/{id}`(查询代理系列授权详情);`PUT /api/admin/shop-series-grants/{id}`(更新代理系列授权);`PUT /api/admin/shop-series-grants/{id}/packages`(管理授权套餐,支持新增、更新和删除)。
|
||||
|
||||
### 批量套餐分配
|
||||
|
||||
|
||||
Reference in New Issue
Block a user