本域总览见《账号计费中心 · 结构大纲》。本文为该域完整设计:定位与边界 / 角色与依赖 / 数据模型 / 核心流程 / 接口契约 / 关键约束与验收标准。
排序说明:先数据模型(事实结构)→ 再核心流程(结构之上的运行路径)→ 最后接口契约(流程的对外投影)。
定位:资金流出的唯一闸门与资损防线的最后一道。回答三个问题——「这笔钱该不该退、由谁批准」(审批链与二审门禁)、「钱到底出去了多少」(以渠道实退为准的冲销口径)、「账实是否相符」(渠道账单与本地流水的双向对账)。
核心概念
| 概念 | 承载 | 语义 |
|---|---|---|
| 退款申请 | customer_orders 的 refunding 状态 |
申请只改状态不动钱;申请人不等于审批人 |
| 本次定额 | customer_orders.refund_amount |
审批时定格,重试与人工收敛沿用;后续不得超原额 |
| 累计已退 | customer_orders.refunded_amount |
部分与多次退款的唯一计数器,出款成功才累计 |
| 剩余可退 | 派生量 refundable_of |
订单金额 − 累计已退,是每单上限而非全局常量 |
| 退款请求号 | customer_orders.refund_request_no |
渠道幂等键(订单号加序号),同号只退一次 |
| 冲销流水 | customer_transactions 的 refund 类型行 |
只增反转行,金额为负;账务真相源 |
| 对账差异 | risk_events 台账(属风控域) |
本域产生与收敛,台账归风控域 |
| 待线下打款 | customer_orders.offline_paid_confirmed_at |
纯台账语义,不动账、不改状态 |
关键口径
边界
归属口径
能力矩阵
| 能力 | 门户用户 | 运营面 | 计费路由(router) | 数据面网关 |
|---|---|---|---|---|
| 自助申请退款 | ✓(本人订单) | ✓(代客申请) | ✗ | ✗ |
| 审批通过 / 驳回 | ✗ | ✓(实人门禁) | ✗ | ✗ |
| 二审登记 / 复审 | ✗ | ✓(须不同操作人) | ✗ | ✗ |
| 重试 / 人工结清 / 放弃 / 线下确认 | ✗ | ✓ | ✗ | ✗ |
| 触发轮询与渠道对账 | ✗ | ✗ | ✗ | ✗(部署侧定时与进程内扫描触发) |
上游依赖
| 上游 | 依赖内容 | 语义 |
|---|---|---|
| 订购与支付域 | 订单行、状态与 paid_at、渠道、支付时点 |
可退订单来源;只退已支付、未退尽的充值单 |
| 钱包与账务域 | 现金余额、只增流水、欠费标记重算 | 冲销的落账目标;余额为负是正常态 |
| 外部资金通道 | 退款接口、单笔退款查询、日账单 | 出款真相与对账账单一侧 |
| 运营管理域 | 平台员工与权限范围 | 出款资格与四眼原则的身份真相 |
下游被引用
| 引用方 | 引用内容 | 语义 |
|---|---|---|
| 风控与合规域 | 退款异常与渠道差异信号 | 落处置台账并分级处置 |
| 通知与触达域 | 到账 / 失败 / 线下打款文案 | 成功与失败触达的投递 |
| 账户状态与准入域 | 冲销后的余额变更事件 | 退款是解封路径,须即时发布状态 |
| 订购与支付域 | 退款进度状态与归一原因码 | 订单列表与详情展示「部分已退 / 待二审」标记 |
本域无自有表:退款以订单行的退款相关列与资金流水的退款类型行承载,对账差异落风控处置台账。
退款请求号落流水明细而非独立表:冲销行的唯一索引以「订单号 + 明细中的退款请求号」为键,部分索引收窄到退款类型,历史无该键的行天然不受影响。
| 表 | 读写 | 关键字段 |
|---|---|---|
customer_orders |
读写 | order_no / customer_id / type / channel / status / amount / refund_amount / refunded_amount / refund_request_no / refund_failed_reason / refund_second_review_by / refund_second_review_amount / refund_last_attempt_at / offline_paid_confirmed_at |
customer_transactions |
写(只增)+ 读 | customer_id / type / amount / ref_order / detail / created_at |
customers |
只读 | cash_balance(画像与推负判定)/ overdue_since(派生标记,不作债务判据) |
operation_logs |
读(频控计数)+ 写(留痕) | actor_id / action / target_id / created_at / detail |
risk_events |
写(差异与异常落台账) | rule_id / customer_id / organization_id / status / triggered_at |
platform_staff |
只读 | user_id / status / scopes(出款资格) |
refunding / refund_processing / refunded / refund_failed / refund_unknown 五值,状态列宽须容纳最长值;部分退款完成后回 paid,故不得用订单终态判退款幂等,幂等一律以退款请求号为准。/api/account)| 方法 | 路径 | 语义 |
|---|---|---|
| POST | /api/account/orders/{order_no}/refund-apply |
客户自助退款申请:本人已支付充值订单 → 待审批;跨用户订单按订单不存在处理;滚动 24h 上限超限与同单驳回冷却内分别拒绝;期望金额仅审计参考 |
/internal)| 方法 | 路径 | 语义 |
|---|---|---|
| POST | /internal/orders/{order_no}/refund-request |
运营侧发起退款申请(对账冲正 / 代客申请) |
| POST | /internal/orders/{order_no}/refund-approve |
审批通过:金额定额 + 二审门禁 + 渠道出款;返回已退款 / 回已支付 / 处理中 / 失败 |
| POST | /internal/orders/{order_no}/refund-reject |
审批驳回:待审批 → 已支付,无冲销 |
| POST | /internal/orders/refunds/poll |
退款轮询(幂等):扫处理中到点单查渠道收敛;供部署侧定时与手动兜底 |
| POST | /internal/orders/refunds/reconcile-channel |
渠道退款对账(汇总级 + 逐笔,幂等):指定账单日、模式与渠道;供手动补跑 |
| GET | /internal/orders/refunds/offline-pending |
待线下打款核对清单:对公转账已退款单,可按已确认过滤 |
/api/account/ops)| 方法 | 路径 | 语义 |
|---|---|---|
| POST | /api/account/ops/orders/{order_no}/refund-request |
运营发起退款(实人令牌,操作人恒为令牌本人) |
| POST | /api/account/ops/orders/{order_no}/refund-approve |
审批通过(同 5.2 语义) |
| POST | /api/account/ops/orders/{order_no}/refund-reject |
审批驳回 |
| POST | /api/account/ops/orders/{order_no}/refund-retry |
同号重提;不可重试类拒绝 |
| POST | /api/account/ops/orders/{order_no}/refund-manual-settle |
人工结清:依据与状态强绑定;幂等 |
| POST | /api/account/ops/orders/{order_no}/refund-abandon |
终止退款:失败态回已支付;处理中与未知态拒绝 |
| POST | /api/account/ops/orders/{order_no}/refund-offline-confirm |
线下打款确认:台账语义,幂等 |
| GET | /api/account/ops/orders/{order_no}/refund-risk |
审批前风险画像(只读) |
| GET | /api/account/ops/orders/refunds/offline-pending |
待线下打款核对清单(与 5.2 同源) |
| # | 验收口径 |
|---|---|
| 1 | 非已支付状态或非充值类型订单申请退款:拒绝,状态不变、无流水落库、不进入待审批;剩余可退为零时同样被拒 |
| 2 | 同一客户滚动 24h 内申请次数达上限:门户路径被拒、运营路径不受限;同单驳回后冷却窗内再次申请被拒 |
| 3 | 审批定额超过剩余可退或精度超过等效 2 位小数:拒绝且不落款、不改状态 |
| 4 | 首笔大额退款(达阈值):返回待二审,订单保持待审批、不落流水、余额不变 |
| 5 | 第一审批人自行复审或换金额复审:均不给过且标记保留;第二位操作人按定格金额复审:出款成立、标记清空 |
| 6 | 部分退款出款成功:累计已退等于本次定额、订单回已支付、剩余可退为差额并可再审批;全部退完后置已退款终态、再申请被拒 |
| 7 | 渠道明确拒绝:置失败并带归一原因码、余额与流水均不变、产生告警 |
| 8 | 渠道报成功但实退金额不符:不冲销、转结果未知、出告警与审计;查询不可用或网络异常:保持处理中交轮询收敛,绝不置失败 |
| 9 | 未知单按「线下已打款」结清被拒、按「渠道账单核实已退」结清成功且幂等;处理中订单终止或人工结清均被拒;可能已退过的原因终止被拒而重试可行 |
| 10 | 轮询:自最近尝试起超 24 小时无结论的单转结果未知并告警且不再查询;同日重复触发不产生新流水与状态变更 |
| 11 | 并发两次收敛同一笔退款:恰有一条冲销流水、累计已退不重复累加,后到者返回幂等 |
| 12 | 对公转账审批通过即冲销并进入待线下打款清单(未确认视图),确认后转入已确认视图且不产生新的资金动作 |
| 13 | 对账:本地侧只统计本次对账渠道(另一渠道不落假差异);渠道独有行归为账单独有、本地流水无对应订单行时归为孤儿差异且不被忽略;两侧皆同时平账并同日重跑一致 |
| 14 | 渠道无账单能力时跳过且不计失败;暂态失败在累计重试达上限后当日落定并告警、终态失败告警后当日落定、跨日计数归零 |
| 15 | 全程落审计(申请 / 驳回 / 首审批 / 复审 / 退回 / 放弃);出款类端点缺操作人、非标识格式、不在册、已停用或无出款权限时一律按无权限拒绝;凭据缺失的网关型退款直接置失败且不动账 |