Files
one-pipe-system/openspec/changes/update-refund-management/specs/refund-api/spec.md
2026-09-17 12:16:20 +08:00

4.5 KiB
Raw Blame History

ADDED Requirements

Requirement: 退款状态与退款方式等枚举

前端 MUST 定义并导出 RefundStatus1 待审批、2 已通过、3 已拒绝、4 已退回、5 原路退款处理中、6 原路退款失败)、RefundMethodoriginal_route/customer_account/asset_wallet/agent_wallet)、channel_refund_status0 未发起或不适用、1 处理中、2 已成功、3 已失败)与 failure_reasonchannel_rejected/credential_invalid/insufficient_balance/timeout_unknown/approval_rejected/revoked_after_approved/payment_fact_invalid)枚举,并提供状态名/Tag 映射与可重提规则。

Scenario: 状态 5/6 正常展示

  • GIVEN 退款申请状态为 5 或 6
  • WHEN 列表/详情渲染状态
  • THEN 前端 MUST 展示「原路退款处理中」或「原路退款失败」,不得回退为默认样式

Scenario: 原路退款失败可重提规则

  • GIVEN 退款申请状态为 6原路退款失败
  • WHEN anomaly_flag 为 1
  • THEN 前端 MUST 禁止重提并隐藏/禁用重提入口

Requirement: 退款响应新增字段

Refund 列表项与详情 MUST 支持 methodmethod_namefrozen_actual_received_amountcustomer_account_infochannel_refund_statuschannel_refund_status_namechannel_refund_nochannel_refund_request_nochannel_refund_amountchannel_refunded_atfailure_reasonfailure_reason_namefailure_messageanomaly_flaganomaly_reasonlatest_attempt_idlatest_approval_instance_idrefund_package_used_mbrefund_package_total_mb(单位 MB解析不到套餐为 0attempts[]

Scenario: 列表展示渠道退款与失败分类

  • GIVEN 列表接口返回新增字段
  • WHEN 渲染列
  • THEN 前端 MUST 展示退款方式、冻结实收金额、渠道退款状态、渠道退款流水号、渠道退款金额、失败分类与异常标记

Requirement: 审批尝试历史

详情响应 MUST 支持 attempts[],子字段为 idattempt_nomethodmethod_namerefund_amountfrozen_actual_received_amountrefund_reasoncustomer_account_infocustomer_voucher_keychannel_refund_request_nosubmitted_by_account_idapproval_instance_idapproval_statusapproval_status_namecreated_at;详情页 MUST 按时间倒序展示尝试记录。

Scenario: 展示多次尝试记录

  • GIVEN 详情返回多条 attempts 记录
  • WHEN 渲染尝试历史
  • THEN 前端 MUST 展示每条尝试的编号、退款方式、金额、审批状态与时间

Requirement: 创建退款请求契约

POST /api/admin/refunds 请求体 MUST 携带 method(必填)、order_idrequested_refund_amountpackage_usage_idrefund_reason,可选 customer_account_inforefund_voucher_keyMUST NOT 再提交 actual_received_amount(已废弃)。

Scenario: 客户收款信息方式校验

  • GIVEN 退款方式选择 customer_account
  • WHEN customer_account_info 为空或凭证数量为 0
  • THEN 前端 MUST 阻止提交并提示同时填写客户收款信息与至少 1 个凭证

Scenario: 非客户收款方式

  • GIVEN 退款方式为 original_route/asset_wallet/agent_wallet
  • WHEN 提交创建申请
  • THEN 客户收款信息与凭证 MUST 允许为空

Requirement: 重提退款请求契约与可重提规则

POST /api/admin/refunds/{id}/resubmit 请求体 MUST 支持可选 methodcustomer_account_info(不传沿用原值)、requested_refund_amountrefund_reasonrefund_voucher_key;可重提状态 MUST 为 3已拒绝/4已退回/6原路退款失败anomaly_flag=1 的申请必须禁止重提。

Scenario: 已拒绝申请允许重提

  • GIVEN 退款申请状态为 3已拒绝anomaly_flag 不为 1
  • WHEN 用户点击重新提交
  • THEN 前端 MUST 允许重提并支持可选携带 method / customer_account_info

Requirement: 审批接口封装与按钮保护

RefundService MUST 提供 approveRefundapproved_refund_amountremark)、rejectRefundreject_reason)、returnRefundremark);列表/详情审批按钮 MUST 在 approval_instance_id 存在时隐藏/禁用,仅存量无审批实例的申请可用。

Scenario: 已关联企微审批实例不可审批

  • GIVEN 退款申请已关联 approval_instance_id
  • WHEN 渲染审批操作
  • THEN 通过/拒绝/退回按钮 MUST 隐藏或禁用