Skip to content

冲正/退款指引

本页说明

讲什么:入金冲正和出金冲正的操作流程、前置条件、风险提示 适合谁:有冲正权限的运营人员 前置阅读入金排障出金排障预计阅读:3 分钟 负责人:出金运营主管

核心要点:冲正是将已入账/已汇出的资金追回的反向操作,风险高且不可撤销——操作前必须确认银行侧状态,防止资金状态不一致。


冲正 vs 退款

术语方向含义
入金冲正证券账户 → 用户银行已入账的资金被撤回(如银行 chargeback、错误入账)
出金冲正用户银行 → 证券账户已汇出的资金被追回(如银行退回、错误出金)
BST 退款 (REFUNDED)入金成功后银行退回天星 BST 独有——银行事后发起退款

三者的共同点:都涉及已完成交易的反向资金操作,影响重大、不可二次撤销。


入金冲正

Runbook:入金冲正

触发:收到银行 chargeback / 发现错误入账 / 风控事后拦截 判断:确认申请状态=已完成(2),账户余额充足 操作:按下方步骤执行冲正 验证:按"冲正后验证步骤"逐项确认

前置条件

  • 入金申请状态必须为 2(已完成)
  • 需要权限:CASH_IN_TASK_REVERSE
  • 正在处理中(状态 1)的申请不允许冲正

操作步骤

  1. 在 OA 找到目标入金申请
    • CRM 路径:存入资金 → 已处理 → 找到对应入金任务 → 点击"冲正"
  2. 确认冲正原因:
    • 银行退款 (chargeback) — 银行方面要求退回资金
    • 错误入账 — 匹配错误,入账到了错误用户
    • 风控拦截 — 入账后风控发现异常
  3. 点击「冲正」发起操作
  4. 系统执行:
    • 更新申请状态为 5(已冲正)
    • SBA 执行反向 Procedure(从证券账户扣回资金)
    • 如果是通过绑卡入金的,同步解绑银行卡
    • 发送通知告知用户

冲正前核查清单

执行冲正前,逐项确认以下事项:

#检查项CRM 字段 / 查看方式通过条件
1申请状态Apply.status= 2(已完成),非处理中
2账户可用余额证券账户查询≥ 冲正金额(用户可能已用于交易)
3有无在途出金出金任务列表筛选同 UID无处理中的出金任务(避免余额冲突)
4有无持仓占用持仓查询确认冲正后余额仍足够覆盖持仓保证金
5冲正原因确认运营判断明确且可追溯的冲正理由(chargeback/错误入账/风控)
6大额确认Apply.amount超过 HKD 50 万建议先冻结账户再操作

冲正后验证步骤

冲正操作执行后,确认以下状态已正确更新:

#验证项预期结果
1申请状态Apply.status = 5(已冲正)
2SBA Procedure反向 Procedure 执行成功(查 SBA 日志)
3证券账户余额已扣减冲正金额
4银行卡绑定如果是绑卡入金,银行卡已解绑
5用户通知冲正通知已发送(App 推送 + 消息中心)

风险提示

冲正前必须确认

  • 用户证券账户是否有足够余额(如果用户已经用入金资金交易/出金,余额可能不足)
  • 冲正操作不可撤销——执行后无法再恢复
  • 如果涉及大额资金,建议先冻结账户再操作

出金冲正

Runbook:出金冲正

触发:银行退回资金 / 发现错误出金 / 风控事后拦截 判断:确认任务状态=已完成(4),资金已实际汇出 操作:按下方步骤执行冲正 验证:确认任务状态=已冲正(5),SBA 反向操作成功

前置条件

  • 出金任务状态必须为 4(已完成)
  • 资金已实际汇出到银行

操作步骤

  1. 在 OA 找到目标出金任务
  2. 确认冲正原因:
    • 银行退回 — 银行侧退回了已汇出的资金
    • 错误出金 — 出金信息有误(如出错了用户)
    • 风控事后拦截 — 出金完成后风控发现异常
  3. 发起冲正(动作:REVERSE)
  4. 系统执行:
    • 更新任务状态为 5(REVERSE)
    • SBA 执行反向资金操作
    • 通知用户出金已撤回

银行退回场景

银行退回资金是出金冲正最常见的触发原因。可能的情况:

  • 收款账户信息错误(账号/户名不匹配)
  • 收款银行拒绝入账
  • 跨境汇款被中转行退回

收到银行退回通知后:

  1. 确认退回资金已到达公司账户
  2. 执行出金冲正
  3. 通知用户,引导重新发起出金(如需更正银行信息)

BST 入金退款(REFUNDED)

Runbook:BST 退款

触发:收到天星 API REFUNDED 状态告警 判断:确认退款原因(天星 API 错误信息) 操作:核实余额回滚 → 通知用户 → 引导重新入金 验证:证券账户余额已正确扣减,用户已收到通知

这是天星 BST 独有的异常状态——招行/民生没有退款机制。

触发条件

  • 银行侧事后发现交易异常(合规问题)主动发起退款
  • 银行风控系统事后拦截

系统行为

  1. 收到天星 API 返回的 REFUNDED 状态
  2. 系统自动触发冲正:撤回已入账到证券账户的资金
  3. 更新入金记录状态
  4. 触发告警通知运营

运营操作

  1. 确认退款原因(查看天星 API 返回的错误信息)
  2. 核实用户证券账户余额是否已正确回滚
  3. 通知用户并说明原因
  4. 如需重新入金,引导用户发起新的入金操作

REFUNDED vs FAILED

  • FAILED — 银行拒绝入金指令,资金从未到账,无需冲正
  • REFUNDED — 入金已成功后银行退回,系统需执行冲正,更复杂

冲正操作对比

入金冲正出金冲正BST 退款
触发方运营主动运营主动 / 银行退回银行自动
资金方向从证券账户扣回退回到证券账户从证券账户扣回
前置状态已完成(2)已完成(4)已完成
结果状态已冲正(5)已冲正(5)REFUNDED
涉及银行所有所有仅天星
权限CASH_IN_TASK_REVERSE系统自动

流水退款操作

流水退款与任务冲正不同——它只标记银行流水状态,不影响证券账户余额。适用于银行流水尚未匹配入账的场景。

Runbook:流水退款

触发:孤立流水无法匹配 / 银行确认误转 / 错误流水需清理 判断:确认 Flow.status = 0(待处理),确认流水不应入账 操作:在 OA 对流水执行退款标记 验证:Flow.result = 3(RESULT_REFUND)

操作入口

操作OA 路径适用场景
单笔退款流水列表 → 选中 → 退款对单条流水标记退款
批量退款流水列表 → 批量选择 → 批量退款月末清理多条无法匹配的流水
解锁退款流水列表 → 已锁定流水 → 解锁并退款调查完成后确认需退款的锁定流水

操作后验证

#验证项预期结果
1流水处置结果Flow.result = 3(RESULT_REFUND)
2流水状态Flow.status = 1(已处理)
3证券账户余额不变(流水退款不影响证券账户)

流水退款 ≠ 资金退回

流水退款只是系统内部标记——银行侧的资金退回需要另行联系银行处理。标记退款后应通知银行关系团队安排实际退款。


退款管理模块

退款管理是独立于冲正的业务流程,用于处理需要将资金退还给客户的场景(如三方转账退款、不合规入金退款等)。

退款 vs 冲正

维度退款入金冲正
触发方客服/客户发起运营发起
影响退还客户资金到银行扣回已入账资金
流程三步审核制单步操作
CRM 模块退款管理存入资金 → 已处理

三步流程

第一步:登记退款

维度说明
触发客服收到客户退款请求
操作CRM → 退款管理 → 退款列表 → 登记退款
内容通过流水记录登记退款;关联相关入金指令;补充退款凭证材料
验证退款记录状态变为"待审核"

第二步:审核退款

维度说明
触发退款列表中出现待审核记录
操作CRM → 退款管理 → 退款列表 → 审核
判断审核退款材料是否完整合规
通过退款记录状态变为"待处理"
不通过退回客服,要求补充材料或重新联系客户

第三步:退款处理

维度说明
触发退款列表中出现待处理记录
操作CRM → 退款管理 → 退款转账 → 导出退款转账文件
执行业务人员手动处理退款转账(文件制)
验证退款完成后标记状态为"已处理";确认客户银行账户收到退款

退款转账是文件制

退款转账通过导出文件、上传网银的方式执行(与普通出金类似),不是系统自动转账。需要按照出金相同的双人授权流程完成。

退款操作要点

要点说明
退款与流水退还不同退款管理涉及实际资金退还给客户;流水退还(reversal-guide § 流水退款操作)仅标记流水状态,不退还资金
退款时效退款从登记到客户收到资金通常需要 3~5 个工作日(含审核+银行处理时间)
跨境退款跨境转账退款可能产生额外手续费,需提前告知客户
清算日影响冲正和退款会影响 T+1 结算报表。避免在清算日下午 16:00 后发起冲正/退款——跨清算日的资金变动会导致当日结算金额变化,需通知清算团队手工调整

冲正失败处理

常见失败原因与处理

失败原因表现处理方式预计恢复时间
证券账户余额不足SBA 返回余额不足错误冻结账户 → 联系用户释放资金 → 重试数小时~数天
SBA 服务异常Procedure 超时或系统错误确认 SBA 服务状态 → 服务恢复后重试分钟~小时
原 Procedure 状态异常PROCEDURE_STATUS_END_OK 校验不通过人工核实原入金 SBA 记录 → 手工补偿需开发协助
分步 Runbook:冲正失败恢复

第 1 分钟 — 确认失败现象

  1. 冲正按钮点击后,Apply.status 是否仍为 2(未变为 5)?
  2. 查看 OA 返回的错误信息

第 2~5 分钟 — 定位原因 3. 查 SBA 日志,搜索对应的 Task ID 4. 确认 CashDepositReverse Procedure 的执行结果 5. 如果是余额不足:查用户可用余额和持仓占用

第 5~15 分钟 — 恢复操作 6. 余额不足

  • 冻结用户账户(防止继续交易/出金)
  • 联系用户说明情况
  • 等用户卖出持仓 / 出金到账后,重新冲正
  1. SBA 异常
    • 确认 SBA 服务已恢复
    • 重新点击冲正
  2. Procedure 异常
    • 不要反复重试
    • 收集下方"升级信息清单"中的信息
    • 升级到入金开发团队

超过 15 分钟未恢复 → 升级到技术运维值班人员

升级开发时需提供的信息

冲正失败需升级开发时,一次性提供以下信息(减少来回沟通):

#信息获取方式
1Apply ID / Task IDCRM 入金/出金任务详情页顶部
2SBA Task ID任务详情页 → SBA 记录区域
3Procedure 名称和执行状态SBA 日志中搜索 Task ID
4错误信息截图CRM 冲正操作返回的报错页面
5用户当前可用余额证券账户查询页
6操作时间(精确到分钟)告警时间或操作时间
7是否有在途出金/持仓占用出金任务列表 + 持仓查询

冲正时效参考

操作正常耗时说明
入金冲正(余额充足)秒级SBA Procedure 通常几秒完成
入金冲正(余额不足)数小时~数天取决于用户配合释放资金的速度
出金冲正秒级资金退回证券账户
BST REFUNDED分钟级系统自动执行
银行侧实际退款1~5 工作日取决于银行和转账类型

批量冲正

当需要对多笔入金执行冲正(如批量错误入账):

  1. 在 OA 入金列表筛选目标申请
  2. 确认每笔申请都满足冲正前置条件(逐笔检查余额)
  3. 使用批量操作功能(/deposit/batch with action=reverse)
  4. 注意:批量冲正是逐笔执行的——如果某笔失败(如余额不足),不影响其他笔的冲正
  5. 冲正完成后,逐笔确认 Apply.status = 5

如果需求变更:修改冲正流程

代码位置

  • 入金冲正:deposit/src/app/Business/Deposit.php:877-935(reverse() 方法)
  • 出金冲正:withdraw/src/app/Business/Tasks/Handler/Reverse.php
  • SBA 反向 Procedure:deposit/src/app/Business/SOA/SBA/Deposit.php:309turnAround('CashDepositReverse')
  • 冲正中间件:deposit/src/app/Business/Tasks/Deposit.php:276-287

常见变更场景

  • 冲正前增加审批步骤 → 在冲正逻辑前添加审批检查(当前冲正是直接执行,无二次审批)
  • 冲正后不自动解绑银行卡 → 移除 reverse() 中的解绑逻辑
  • 增加冲正金额上限 → 在冲正前置校验中添加金额检查
  • 冲正通知模板修改 → 调整通知服务的消息模板

详细变更指南 → 入金变更指南 § 修改冲正流程 产品视角的退款机制 → 退款与冲正

读完之后

我想...去看
排查入金冲正的完整场景入金排障
排查出金冲正和银行退回出金排障
了解天星 REFUNDED 技术细节内银系 BST 总览
查冻结类型和出金规则出金规则手册
查状态码和错误码统一错误码中心
了解三种退款机制的产品逻辑退款与冲正
查冲正相关的状态码和 API入金规则速查 § 冲正参考数据
了解 CRM 各模块操作CRM 操作地图
了解 eDDA 扣款失败处理eDDA 排障指引
这个页面有帮助吗?

内部业务文档 · 仅限 moomoo 团队使用