## ADDED Requirements ### Requirement: 退款申请数据模型 系统 SHALL 提供 `tb_refund_request` 表存储退款申请,包含退款单号(唯一)、关联订单 ID、店铺 ID(数据权限过滤)、实收金额、申请退款金额、审批退款金额、状态、审批人、审批时间、佣金回扣标记、退款后资产处理标记等字段。 #### Scenario: 创建退款申请 - **WHEN** 平台管理员提交退款申请,填写订单 ID、实收金额、申请退款金额、退款原因 - **THEN** 系统 SHALL 生成唯一退款单号(格式 RF+日期时间+随机数),创建 `status=1(待审批)` 的退款记录,`shop_id` 从关联订单自动读取 #### Scenario: 仅针对已支付套餐订单 - **WHEN** 管理员对非已支付订单或充值订单发起退款 - **THEN** 系统 SHALL 返回错误,拒绝创建 #### Scenario: 重复退款防护 - **WHEN** 管理员对已有待审批/已通过/已退回退款记录的订单再次发起退款 - **THEN** 系统 SHALL 返回错误,拒绝创建 - **WHEN** 管理员对仅有已拒绝退款记录的订单重新发起退款 - **THEN** 系统 SHALL 允许创建新的退款申请 ### Requirement: 退款状态流转 退款单状态 SHALL 按以下规则流转:待审批(1) → 已通过(2)/已拒绝(3)/已退回(4);已退回(4) → 待审批(1)。已通过和已拒绝为终态。 #### Scenario: 审批通过 - **WHEN** 审批人对待审批退款单执行通过操作 - **THEN** 状态 SHALL 变为 2(已通过),记录审批人和审批时间,异步触发资产处理和佣金回扣 #### Scenario: 审批拒绝 - **WHEN** 审批人对待审批退款单执行拒绝操作,填写拒绝原因 - **THEN** 状态 SHALL 变为 3(已拒绝),记录拒绝原因 #### Scenario: 退回重提 - **WHEN** 审批人退回退款申请,申请人修改后重新提交 - **THEN** 状态 SHALL 从 4(已退回)变回 1(待审批) #### Scenario: 非法状态变更被拒绝 - **WHEN** 对已通过或已拒绝的退款单执行任何状态变更 - **THEN** 系统 SHALL 返回错误,状态不变 ### Requirement: 仅平台账号可操作 退款的发起和审批 SHALL 限制为平台用户(user_type IN 1,2)。同一人可以既发起又审批。