- 新增六对成对迁移 000232–000237:H5 弹窗类型、退款结算标识与申请人备注、优先轮询事实字段与两个新终态、通道阈值命中留痕、手机号最近解绑人、提现资格校验留痕 - 退款:原因必填与申请人备注、来源支付与渠道流水冻结、线下处理流水号补录审计、按订单查询可选退款方式、企微审批材料补齐且新增字段缺失映射即明确失败 - 优先轮询:人工关闭、有效期到期独立周期任务、失败与过期人工重触发、事实字段与异常重试查询、资产解析端点只读投影 - 通道阈值:命中事实同事务留痕与命中记录查询;员工账单:列表筛选与详情投影;商户池:列表投影与统计周期语义;H5:弹窗类型与类别排序 - 手机号:有效关联数量与最近解绑人、短信验证码失败次数限制;导出:佣金明细十五列与报表序号列 - 时间筛选:三处新增筛选纳入统一严格解析契约,员工账单产生时间参数改名 - 同步 12 份主 Spec 需求、两端点与异步任务证据链,门禁 context-health 与 OpenSpec 校验通过
5.9 KiB
Purpose
按原始需求(111.md §15.7)为后台关联查看补齐「绑定资产数量」与「最近解绑人」两个投影字段,使运营无需逐条计数即可判断某手机号还可绑定多少资产、并在解绑后直接看到处理人。
MODIFIED Requirements
Requirement: 后台查看关联
仅超级管理员和平台用户可在其资产数据范围内查看关联手机号。资产详情 MUST 列出该资产全部当前关联手机号;资产列表、卡与设备两类导出以及批量任务结果中,具备资产数据权限的账号可见完整关联手机号,不做脱敏。按资产查询 MUST 一次批量聚合完成。后台 MUST NOT 提供补录或修改关联的入口。
关联查询 SHALL 额外返回两项投影:该手机号当前有效关联资产数量,以及每条关系的最近解绑人与最近解绑时间。数量口径 MUST 与该手机号「最多关联十项」的上限判定完全一致(只统计当前有效关系、卡与设备分别计一项),MUST 按当页涉及的手机号集合一次批量聚合,MUST NOT 逐手机号或逐资产放大查询次数。最近解绑人 MUST 取最近一次解除该关系的后台账号名称与账号标识快照,并随既有解绑方式、解绑时间、解绑原因一并返回;关系仍有效时该字段为空,MUST NOT 以创建人或最后更新人填充。以上字段 MUST 只读,MUST NOT 改变既有解绑、换绑、上限判定与审计规则。
Scenario: 数据范围外不可见
- WHEN 平台用户查询其资产数据范围之外的资产的关联手机号
- THEN 系统不返回该资产的关联手机号
Scenario: 列表一次聚合
- WHEN 请求一页包含多项资产的列表
- THEN 系统按该页资产集合一次读取关联手机号并按资产装配,不逐资产查询
Scenario: 解绑后仍可查看完整快照
- WHEN 一次批量解绑任务执行完成、关系已失效后查看该任务结果
- THEN 结果中仍返回该次解除时记录的完整手机号快照
Scenario: 两类导出均含关联手机号
- WHEN 导出 IoT 卡场景或设备场景
- THEN 两类导出均包含关联手机号列,且设备导出列组解析对新增列保持正确
Scenario: 数量与上限口径一致
- GIVEN 某手机号当前有效关联十项资产
- WHEN 查询其中任一关联
- THEN 返回的当前有效关联资产数量为十,与上限判定使用的计数相同
Scenario: 已解绑关系展示解绑人
- GIVEN 一条关系已被后台账号 A 通过单项解绑失效
- WHEN 查询该关系
- THEN 返回最近解绑人为 A 的名称与标识、解绑时间与解绑原因
Scenario: 有效关系无解绑人
- WHEN 查询一条仍有效的关联
- THEN 最近解绑人与最近解绑时间均为空,且不以创建人或更新时间填充
Scenario: 数量批量聚合
- GIVEN 一页返回多项资产或手机号的关联
- WHEN 查询该页
- THEN 系统按该页涉及的手机号集合一次读取计数,查询次数不随行数线性增长
ADDED Requirements
Requirement: 短信验证码校验失败次数限制
系统 SHALL 对短信验证码校验实施失败次数限制,作用域覆盖注册、绑定、换绑与换证的全部短信验证码校验流程:失败计数按窗口续期维护——每次校验失败在窗口内累加计数并重置窗口时长,相邻两次失败间隔不超过窗口时长即持续累加;计数达到上限后短时间内的后续校验 MUST 被拒绝并返回可定位的限流错误码与提示;校验成功 MUST 清零该手机号的失败计数。失败计数与锁定 MUST 以手机号维度按原子操作维护,并发提交 MUST NOT 绕过计数;锁定检查 MUST 先于验证码比对,锁定期内即使提交正确验证码也 MUST NOT 通过;锁定期为自计数达到上限起的一个窗口时长,锁定期间的提交在比对前即被拒绝且不再计数,因此锁定不因再次提交而续期;锁定到期后 MUST 自动恢复可校验状态,MUST NOT 需要人工解锁。阈值与窗口 MUST 为固定常量或既有服务端配置,MUST NOT 新增对外可配置项或接口。错误提示 MUST NOT 泄露验证码正确性、剩余失败次数或内部键名。
失败计数的写入或读取失败 MUST NOT 阻断校验流程的成功路径:计数不可用时系统 MUST 放行并记录,MUST NOT 因限流计数故障阻断注册、绑定、换绑、换证与登录的成功路径。发送侧既有频率限制、验证码有效期与一次性消费语义 MUST 保持不变;校验失败 MUST NOT 消费验证码,MUST NOT 影响既有链路的成功结果。
Scenario: 连续失败达到上限
- WHEN 同一手机号在窗口内连续提交错误验证码达到上限
- THEN 后续校验被拒绝并返回限流错误,即使提交的是正确验证码也不通过
Scenario: 锁定到期恢复
- GIVEN 某手机号因失败次数达到上限被短时锁定
- WHEN 锁定窗口结束且提交正确验证码
- THEN 系统正常通过校验
Scenario: 成功后清零
- GIVEN 某手机号已有若干次失败计数但未达上限
- WHEN 一次校验成功
- THEN 该手机号失败计数被清零,后续失败重新计数
Scenario: 并发提交不绕过计数
- WHEN 同一手机号并发提交多个错误验证码
- THEN 失败计数按实际提交次数累加,不因并发而丢失计数
Scenario: 失败不消费验证码
- WHEN 一次校验因验证码错误或限流失败
- THEN 该验证码保持可再次校验(在有效期与计数限制允许范围内),不产生任何业务事实
Scenario: 计数不可用不阻断成功路径
- GIVEN 失败计数所依赖的存储不可用
- WHEN 注册、绑定、换绑、换证或登录提交正确验证码
- THEN 校验正常通过,不因计数故障被拒绝,且计数不可用的事实被记录