agent-spec 0.3.0

AI-native BDD/Spec verification tool for contract-driven agent coding
spec: task
name: "退款功能"
inherits: project
tags: [payment, refund]
---

## 意图

为支付网关添加退款功能,支持全额和部分退款。
退款需要管理员权限,且必须在原始交易后 90 天内发起。

## 约束

- 退款金额不得超过原始交易金额
- 退款操作需要管理员权限
- 退款必须在原交易后 90 天内发起
- 退款状态机: pending -> processing -> completed | failed
- 退款接口响应时间不超过 500ms

## 验收标准

场景: 全额退款
  测试: test_full_refund_flow
  假设 存在一笔金额为 "100.00" 元的已完成交易 "TXN-001"
  并且 当前用户具有管理员权限
  当 用户对 "TXN-001" 发起全额退款
  那么 退款状态变为 "processing"
  并且 原始交易状态变为 "refunding"

场景: 部分退款
  测试: test_partial_refund_flow
  假设 存在一笔金额为 "100.00" 元的已完成交易 "TXN-002"
  当 用户对 "TXN-002" 发起 "30.00" 元的部分退款
  那么 剩余可退金额为 "70.00" 元
  并且 允许后续再次部分退款

场景: 退款拒绝 - 超期
  测试: test_refund_rejects_expired_transaction
  假设 存在一笔 91 天前完成的交易 "TXN-003"
  当 用户对 "TXN-003" 发起退款
  那么 系统拒绝退款
  并且 返回错误信息包含 "超过退款期限"

场景: 退款拒绝 - 金额超限
  测试: test_refund_rejects_amount_exceeding_original
  假设 存在一笔金额为 "100.00" 元的已完成交易 "TXN-004"
  当 用户对 "TXN-004" 发起 "150.00" 元的退款
  那么 系统拒绝退款
  并且 返回错误码 "REFUND_EXCEEDS_ORIGINAL"

## 排除范围

- 登录功能
- 密码重置
- 第三方支付对接