Files
junhong_cmp_fiber/openspec/specs/refund-commission-deduct/spec.md
huang f339fb1987
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m8s
fix: 资产钱包自动创建机制 — 修复C端购买时钱包不存在报错
- client_order: 新增 getOrCreateWallet 兜底,钱包不存在时自动创建
- device_import: 设备导入事务内同步创建设备钱包
- iot_card_import: IoT卡批量导入后批量创建卡钱包
- queue/handler: 传递 AssetWalletStore 给两个导入 handler
- migration 000098: 为存量IoT卡和设备补建资产钱包
2026-03-30 11:37:41 +08:00

27 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ADDED Requirements
### Requirement: 退款佣金全额回扣
退款审批通过后,系统 SHALL 查找该订单产生的所有已入账佣金记录(`tb_commission_record WHERE order_id=? AND status=1`,使用 `CommissionRecord` 模型的 `CommissionStatusReleased=1` 常量),全额从各代理佣金钱包(`wallet_type="commission"`)中扣减。扣减允许余额为负。
#### Scenario: 正常佣金全额回扣
- **WHEN** 退款审批通过,该订单有 N 条已入账佣金记录
- **THEN** 系统 SHALL 对每条佣金记录全额扣减 `deductAmount = commission.Amount`,从对应代理的佣金钱包扣减(使用 `GetCommissionWallet`,乐观锁更新),创建 `transaction_type="commission_deduct"` 的交易流水,全部完成后标记退款单 `commission_deducted=true`
#### Scenario: 无佣金记录
- **WHEN** 退款审批通过,但该订单无已入账佣金记录
- **THEN** 系统 SHALL 直接标记 `commission_deducted=true`,不执行扣减
#### Scenario: 回扣执行失败
- **WHEN** 佣金回扣过程中发生错误
- **THEN** 审批结果 SHALL NOT 受影响(已通过),`commission_deducted` 保持 `false`,记录 Error 日志
### Requirement: 佣金回扣交易流水
每次佣金扣减 SHALL 创建交易流水记录:`transaction_type``commission_deduct``reference_type``refund``reference_id` 为退款单 ID金额为负值`-commission.Amount`)。
#### Scenario: 交易流水格式
- **WHEN** 佣金回扣成功执行
- **THEN** `tb_agent_wallet_transaction` SHALL 新增记录:`shop_id=佣金所属代理, transaction_type=commission_deduct, amount=-commission.Amount, reference_type=refund, reference_id=退款单ID, remark=退款佣金回扣`
### Requirement: 佣金钱包为负对提现的影响
佣金钱包余额为负时,代理 SHALL NOT 能发起新的提现申请。后续新佣金入账会逐步补填负数。退款回扣时不考虑是否有正在审批的提现申请,正常扣减佣金钱包。