退费减免需求
1. 一期结论
一期提供“客户减免”和“客服退款”两类客诉补救能力,但不建设审批中心、不生成审批任务、不配置审批流。
系统控制重点是:专项权限、App 数据范围、关联工单、完整证据、账务复验、金额与费用范围限制、幂等执行、不可变审计和结果对账。客服无权直接修改本金、历史流水或任意账户余额。
2. 业务边界
2.1 客户减免
用于已核实的系统计费错误、重复收费或客诉补救,仅允许处理配置白名单内的利息、罚息、服务费、保险费等费用项。单笔客户减免处理单可以同时申请多个不同类型的费用项;每个费用项独立记录金额、校验结果和 FCS 调整结果,处理单同时保存所有费用项的申请/可执行合计。
一期不允许:
- 减免借款本金。
- 手工改写历史还款流水。
- 无借款、无期次、无工单的孤立调整。
- 在本后台发起催收减免;催收系统后续可复用底层账务调整接口。
2.2 客服退款
用于已核实的多还、重复扣款或服务补偿。退款必须关联原支付/还款流水,并优先退回已验证的原支付账户。
一期不允许:
- 退款到未验证的新账户。
- 以退款替代借款本金冲销或核销。
- 在缺少原交易、对账依据或客户身份核验时执行。
3. 角色与权限
| 角色 | 默认能力 |
|---|---|
| 客服 | 查询处理单;从客户/借款/工单创建草稿;不能执行 |
| 客服主管 | 查询、补充证据、取消未执行处理单;是否可创建由角色配置决定 |
| 财务运营 | 核验账务事实,执行退款指令或费用调整,处理失败重试与对账 |
| 系统管理员 | 配置角色和 App 范围;默认不能查看客户明文、创建或执行业务处理单 |
核心权限点:
waiver.application.readwaiver.customer.createwaiver.customer.executerefund.customer_service.createrefund.customer_service.executewaiver.execution.retrywaiver.audit.read
创建权限和执行权限独立配置。接口必须同时校验登录用户、动作权限、App 范围和目标业务对象归属。
4. 页面结构
退费减免
├─ 处理单列表
├─ 新建处理单
│ ├─ 客户减免
│ └─ 客服退款
└─ 处理单详情
├─ 客户/借款/工单上下文
├─ 证据与账务快照
├─ 执行动作
├─ Reverse Waiver(未成功误操作撤回)
├─ 执行结果
└─ 对账与审计记录入口包括:退费减免列表、客户 360 的关联工单、借款详情。退费减免列表页标题为 Waiver & Refund,页面标题右侧展示 Create Handling Case 按钮,位置和样式与工单中心的 New Ticket 保持一致。列表顶部展示 Ready to Execute、Processing、Effective、Exception / Failed 四类指标,便于运营快速定位待处理和异常单据。
列表筛选项包括关键词、App、类型、状态、费用/退款项、原因码、处理人,并提供 Query 和 Reset 操作。所有下拉选项必须支持输入筛选,选项来源优先使用数据库枚举、配置表或业务说明;一期没有配置来源时按本需求文档的固定枚举 mock。
点击处理单号或详情按钮时必须新开后台 tab 展示处理单详情,tab 标题为 Remedy: {处理单号},不在列表下方展开详情,避免长列表与详情操作互相干扰。
进入新建页时自动带入 App、客户、借款、期次和工单,不允许跨 App 拼接业务对象。
5. 处理单字段
| 字段 | 要求 |
|---|---|
| 处理单号 | 全局唯一,同时作为执行幂等键 |
| 类型 | 客户减免 / 客服退款 |
| App | 必填,来自业务对象 |
| 客户 | 必填,默认脱敏 |
| 借款与期次 | 必填 |
| 关联工单 | 必填,且工单归属同一客户和 App |
| 费用或退款项 | 客户减免支持一个或多个不同类型的费用项;每个费用项只能出现一次,并从白名单选择。客服退款按退款明细记录原交易/退款项 |
| 费用项明细 | 客户减免必填数组,至少包括 fee_item_type、requested_amount、executable_amount;保存逐项校验、账务前后快照和 FCS 流水 |
| 申请金额合计 | 客户减免各费用项 requested_amount 之和;大于 0,记录客服或财务发起时申请处理金额 |
| 可执行金额合计 | 客户减免各费用项 executable_amount 之和;服务端复验后的可处理金额,不得超过各项试算上限 |
| 原因码 | 必填,使用固定枚举 |
| 证据说明 | 必填;附件能力可后续补充 |
| 账务证据 | 必填,结构化记录原流水、差异原因和计算依据 |
| 校验结果 | 系统记录 App、客户、借款、期次、金额和重复单校验结果 |
| 执行保护规则 | 系统记录幂等、重试、账户和状态保护说明 |
| 原交易 | 客服退款必填,可多笔 |
| 退款账户 | 客服退款必填,必须是已验证账户 |
| 执行方式 | 自动入账 / 财务人工复核 / 退款网关转账 / 手工账务调整 / 渠道撤销 |
| 对账状态 | 未开始 / 已匹配 / 等待回调 / 待人工对账 / 金额不一致 / 渠道失败 / 渠道未知 / 已撤回 |
| 处理人 | 系统记录,可按处理人筛选 |
| 幂等键 | 默认使用处理单号;执行、重试和查询均复用 |
| Reverse Waiver 信息 | 撤回后记录撤回时间和原因;未撤回时为空 |
| 状态 | 见状态机 |
| 创建/更新时间 | 系统记录 |
新建和详情页字段必须尽量结构化展示,避免把金额、证据、校验结果、执行保护规则合并成不可解析的长文本。原型中不保留重复的通用 amount 字段,金额按 Requested Amount 和 Executable Amount 区分。
5.1 执行方式说明
执行方式表示处理单通过哪条业务链路落账或完成退款,不是单纯的展示字段。用户选择不同执行方式后,后续可填写字段、服务端校验、可点击动作、执行接口、结果回写和对账方式均不同。
| 执行方式 | 适用类型 | 业务理解 | 后续对应功能 |
|---|---|---|---|
| 自动入账 / Auto Posting | 客户减免 | 后台校验通过后直接调用 FCS 费用调整能力,将可减免金额入账到指定借款、期次和费用项 | 展示 FCS 试算结果;执行按钮调用 FCS;结果区展示费用项调整前后快照、FCS 流水、入账时间;成功后状态为 EFFECTIVE |
| 财务人工复核 / Finance Manual Review | 客户减免、客服退款 | 后台只生成待财务复核的处理单,财务确认账务事实和金额后再执行自动入账、退款网关转账或手工账务调整 | 状态仍按处理单状态机流转;详情页展示复核意见、复核人、复核时间;未复核前不可直接落账或退款;一期不生成审批中心任务 |
| 退款网关转账 / Refund Gateway Transfer | 客服退款 | 后台生成退款指令,经支付/退款网关退回原支付账户或已验证账户 | 必填原交易和退款账户;执行后进入 PROCESSING;等待网关回调或主动查询;成功后状态为 REFUNDED,并展示网关流水和对账状态 |
| 手工账务调整 / Manual Ledger Adjustment | 客户减免、客服退款 | 因历史账务、渠道结果或特殊差异无法自动处理时,由财务线下完成账务调整,再在后台登记结果和凭证 | 必填手工调整原因、凭证号、调整前后金额、财务处理人;系统记录人工结果,不允许客服直接填写为成功;必要时仍需调用 FCS 登记调整结果 |
| 渠道撤销 / Provider Reversal | 客服退款 | 对可撤销的重复扣款或异常支付,优先通过原支付渠道撤销原交易,而不是发起新退款 | 必填原交易;执行后进入 PROCESSING;等待渠道撤销结果;成功后状态为 REFUNDED 或按业务文案展示为已撤销;失败后进入 EXECUTION_FAILED 或 RECONCILE_EXCEPTION |
执行方式选择规则:
- 客户减免默认只允许选择
自动入账、财务人工复核、手工账务调整。 - 客服退款默认只允许选择
退款网关转账、财务人工复核、渠道撤销;如退款涉及 FCS 账务标记,可由后端在退款成功后触发 FCS 记录,不由客服选择。 自动入账和退款网关转账属于系统执行,必须有幂等键、执行结果查询和失败重试。财务人工复核不是审批流,只是处理单内的财务确认环节;后续如建设审批中心,再将复核动作迁移为审批节点。手工账务调整必须限制为财务运营角色,不允许客服角色执行或填写成功结果。
6. 一期处理流程
6.1 创建与校验
- 客服先定位客户和借款,并建立或关联客诉工单。
- 从工单或借款详情创建处理单,补充一个或多个费用项明细、各项金额、原因和证据。
- 服务端校验 App 范围、创建权限、客户/借款/期次/工单关系、允许处理范围和重复请求。
- 校验通过后生成
READY_TO_EXECUTE处理单;不生成审批实例或审批任务。
6.2 执行
- 具备执行权限的用户打开处理单。
- 服务端重新读取当前余额、还款入账、退款状态和在途处理单。
- 数据与处理单快照不一致时阻止执行,状态改为
VALIDATION_FAILED,要求重新核实。 - 客户减免调用 FCS 费用调整接口;客服退款生成独立退款指令并进入支付/账务执行。
- 执行请求使用处理单号作为幂等键,重复点击不得重复记账或退款。
- 回写执行结果、前后快照、外部流水号和对账状态,并更新关联工单。
如组织要求创建人与执行人分离,通过角色权限和 SOP 配置实现;一期不抽象为通用审批流。
6.3 后台收到减免需求后的 FCS 处理要求
本节仅描述“客户减免”进入 FCS 后的完整处理要求。客服退款原则上由退款/支付链路执行;如退款成功后需要同步客户还款、溢缴或账务备注,由后台或支付服务按 FCS 接口回写结果。
6.3.1 FCS 接收内容
后台向 FCS 发起客户减免时,必须提交结构化请求,至少包括:
| 字段 | 要求 |
|---|---|
| 处理单号 | 必填,作为 FCS 幂等键和业务关联号 |
| App | 必填,用于校验产品线和数据归属 |
| 客户 ID | 必填,用于校验借款归属 |
| 借款 ID | 必填,客户减免必须绑定具体借款 |
| 期次 | 必填,减免必须落到具体期次或明确的费用账务对象 |
| 费用项明细 | 客户减免必填数组;每项只允许一个白名单费用项,不允许本金,且同一处理单不得重复 |
| 申请减免金额 | 必填,来自各费用项 requested_amount 合计 |
| 可执行减免金额 | 必填,来自各费用项后台/FCS 试算结果合计;执行时仍按费用项逐项复验 |
| 原因码 | 必填,用于账务流水、审计和后续统计 |
| 关联工单号 | 必填,用于客诉闭环 |
| 操作人 | 必填,记录后台执行人 |
| trace_id | 必填,用于链路追踪 |
6.3.2 FCS 执行前校验
FCS 收到请求后必须重新校验,不得仅信任后台前端或后台服务的试算结果:
- 校验幂等键是否已处理;已成功的重复请求直接返回原成功结果,不重复入账。
- 校验 App、客户、借款、期次归属一致。
- 校验借款状态允许减免;已结清、已核销、账务锁定、正在还款入账或存在冲正中的借款不得直接减免。
- 逐项校验费用项属于减免白名单,且不是本金或本金衍生口径;校验同一处理单内费用项类型不重复。
- 重新计算当前未还费用、已还费用、在途还款、在途减免和可减免上限。
- 逐项校验可执行金额大于等于 0,且不超过该费用项当前可减免金额;至少一个费用项的可执行金额必须大于 0。
- 逐项校验同一客户、借款、期次、费用项不存在未完成的 FCS 减免处理。
- 校验原因码、操作人和关联工单号完整,缺失时拒绝执行。
任一校验失败时,FCS 不得落账,应返回标准失败码、失败原因、当前账务快照和建议处理动作。后台处理单状态更新为 VALIDATION_FAILED 或 EXECUTION_FAILED,由用户重新核实。
6.3.3 FCS 账务处理
FCS 校验通过后,应按原子事务完成以下处理:
- 按费用项明细生成减免流水,记录处理单号、费用项、金额、原因码、操作人和关联工单;处理单总额仅作为汇总,不替代逐项流水。
- 冻结或锁定当前借款/期次的相关费用账务对象,避免还款入账和减免同时修改同一金额。
- 调减指定费用项的应还金额或未还金额,不修改借款本金,不覆盖历史还款流水。
- 重新计算期次应还合计、剩余应还、逾期相关金额和借款汇总金额。
- 如果减免导致当前期次或借款达到结清条件,由 FCS 按既有账务规则更新期次/借款状态。
- 写入账务前后快照,包括调整前金额、调整金额、调整后金额、影响的费用项和期次。
- 释放账务锁,并返回 FCS 流水号、处理结果、最新还款计划摘要和账务快照。
FCS 不得直接删除或改写历史费用生成记录、历史还款流水、渠道流水和对账记录。减免应作为独立账务调整流水体现。
6.3.4 FCS 结果回写与查询
FCS 执行完成后,后台必须能够查询并展示以下结果:
- 各费用项对应的 FCS 减免流水号。
- 处理单号与 FCS 幂等键。
- 减免费用项、减免金额、币种。
- 调整前费用金额、调整后费用金额。
- 调整前应还合计、调整后应还合计。
- 借款状态和期次状态变化。
- 执行时间、执行人、原因码、关联工单号。
- FCS 返回码、返回信息和 trace_id。
后台收到 FCS 成功结果后,只有全部费用项均成功且处理单总额核对一致时,处理单状态才更新为 EFFECTIVE;对账状态更新为 已匹配或等待后续对账任务确认。任一费用项处理中或失败时,处理单保留对应状态并展示逐项结果。关联工单应写入处理结果摘要,供客服回访和关闭客诉。
6.3.5 FCS 异常处理
| 场景 | FCS 处理 | 后台处理单状态 |
|---|---|---|
| 幂等键已成功 | 返回原成功结果,不重复入账 | EFFECTIVE |
| 幂等键处理中 | 返回处理中和查询地址/查询标识 | PROCESSING |
| 账务状态变化 | 拒绝执行,返回最新快照和差异原因 | VALIDATION_FAILED |
| 可减免金额不足 | 拒绝执行,返回当前可减免金额 | VALIDATION_FAILED |
| 账务锁冲突 | 返回可重试失败或处理中 | PROCESSING 或 EXECUTION_FAILED |
| 系统异常或超时 | 不允许后台直接重发新单,必须先按幂等键查询 | PROCESSING |
| 部分写入不一致 | FCS 内部冲正或人工排查,后台不得手工改成功 | RECONCILE_EXCEPTION |
后台重试 FCS 执行时必须复用原处理单号和幂等键。不得因为超时或失败创建新的 FCS 减免单来绕过原结果查询。
6.4 Reverse Waiver(未成功误操作撤回)
用于处理单创建或校验后发现 App、客户、借款、期次、费用项、金额、原交易或证据选择错误的场景。
撤回规则:
- 前端按钮名称统一为
Reverse Waiver,业务含义是“未成功执行处理单的误操作撤回”,不是成功账务结果的反向冲正。 - 仅允许撤回未成功执行的处理单,包括
DRAFT、READY_TO_EXECUTE、VALIDATION_FAILED、EXECUTION_FAILED、RECONCILE_EXCEPTION等未产生最终成功账务结果的状态。 PROCESSING状态如账务/支付指令已经发出,前端按钮置灰;服务端查询幂等键和外部结果后收敛为成功、失败或对账异常,不直接撤回。EFFECTIVE或REFUNDED不允许直接撤回;若属于成功后的误操作,必须创建新的反向更正处理单,并保留原单不可变。- 撤回必须填写撤回原因,服务端记录撤回人、时间、原状态、撤回原因、设备/IP 和关联工单。
- 撤回后的处理单状态为
WITHDRAWN,只读,不允许执行、重试或再次撤回。 - 撤回不删除原处理单,不删除证据,不覆盖原校验结果和原执行尝试记录。
7. 状态机
7.1 状态流转图
stateDiagram-v2 [*] --> DRAFT: 创建草稿 DRAFT --> READY_TO_EXECUTE: 提交并校验通过 DRAFT --> VALIDATION_FAILED: 校验失败 DRAFT --> WITHDRAWN: Reverse Waiver VALIDATION_FAILED --> READY_TO_EXECUTE: 补充证据并重新校验通过 VALIDATION_FAILED --> WITHDRAWN: Reverse Waiver READY_TO_EXECUTE --> PROCESSING: Execute READY_TO_EXECUTE --> WITHDRAWN: Reverse Waiver READY_TO_EXECUTE --> REJECTED: 业务拒绝 READY_TO_EXECUTE --> CANCELLED: 执行前取消 PROCESSING --> EFFECTIVE: FCS 减免成功 PROCESSING --> REFUNDED: 退款/渠道撤销成功 PROCESSING --> EXECUTION_FAILED: 执行失败 PROCESSING --> RECONCILE_EXCEPTION: 对账异常 EXECUTION_FAILED --> PROCESSING: Retry EXECUTION_FAILED --> WITHDRAWN: Reverse Waiver RECONCILE_EXCEPTION --> PROCESSING: Retry / 查询原结果 RECONCILE_EXCEPTION --> WITHDRAWN: Reverse Waiver(确认未成功) EFFECTIVE --> [*] REFUNDED --> [*] REJECTED --> [*] CANCELLED --> [*] WITHDRAWN --> [*]
7.2 状态说明
| 状态 | 说明 | 允许动作 |
|---|---|---|
| DRAFT | 表单尚未提交 | 编辑、重新校验、Reverse Waiver |
| READY_TO_EXECUTE | 校验通过,等待有权限人员执行 | 执行、Reverse Waiver |
| VALIDATION_FAILED | 执行前复验失败 | 补充证据、重新校验、Reverse Waiver |
| PROCESSING | 已发送账务或退款指令 | 只读、查询结果 |
| EFFECTIVE | 减免已生效 | 只读、对账 |
| REFUNDED | 退款成功 | 只读、对账 |
| EXECUTION_FAILED | 执行失败 | 安全重试、Reverse Waiver、人工排查 |
| RECONCILE_EXCEPTION | 对账异常或渠道结果不一致 | 安全重试、Reverse Waiver、人工排查 |
| REJECTED | 业务拒绝 | 只读 |
| CANCELLED | 执行前取消 | 只读 |
| WITHDRAWN | 误操作撤回,且未形成最终成功账务结果 | 只读 |
任何状态变化都必须由服务端校验,不允许前端直接改状态。详情页操作按钮按状态和权限共同控制:Execute 仅 READY_TO_EXECUTE 可点,Retry 仅 EXECUTION_FAILED 和 RECONCILE_EXCEPTION 可点,Revalidate 仅 DRAFT 和 VALIDATION_FAILED 可点,Reverse Waiver 仅 DRAFT、READY_TO_EXECUTE、VALIDATION_FAILED、EXECUTION_FAILED、RECONCILE_EXCEPTION 可点。
8. 服务端安全控制
- 费用项白名单和金额上限由服务端配置,前端值不可信。
- 不允许本金减免;客服退款不得改变借款本金账务口径。
- 创建与执行均检查 App 数据范围和动作权限。
- 相同客户、借款、期次、费用项或原交易存在在途处理单时禁止重复创建。
- 执行前重新计算可减免金额或可退款金额,不使用前端试算作为最终依据。
- 退款账户必须来自已验证账户快照;账户变化需重新核验,不能直接执行。
- 所有执行接口支持幂等、超时查询、失败重试和结果对账。
Reverse Waiver接口必须复验当前执行状态;已成功生效或已成功退款的处理单不得撤回,只能通过新的反向更正单处理。- 记录操作前后快照、操作人、设备/IP、原因、工单、外部流水和结果。
9. 异常与对账
- 调用超时:先查询原幂等键结果,再决定是否重试。
- 账务状态变化:阻止执行并返回差异原因。
- 退款回调未知:保持
PROCESSING,由主动查询和对账任务收敛。 - 执行失败:保留失败原因和原指令,安全重试不得生成新业务单。
- 部分成功:禁止手工改为成功,由账务/支付查询结果收敛。
- Reverse Waiver:撤回前必须查询原幂等键和外部状态;若未成功则转为
WITHDRAWN,若已成功则禁止撤回并提示创建反向更正单。
日报或对账视图至少按 App、类型、原因、金额、状态、处理人和日期统计。
10. 审计事件
WAIVER_CASE_CREATEDWAIVER_CASE_VALIDATEDWAIVER_EXECUTION_SUBMITTEDWAIVER_EXECUTION_SUCCEEDEDWAIVER_EXECUTION_FAILEDREFUND_CASE_CREATEDREFUND_EXECUTION_SUBMITTEDREFUND_EXECUTION_SUCCEEDEDREFUND_EXECUTION_FAILEDHANDLING_CASE_CANCELLEDHANDLING_CASE_WITHDRAWNHANDLING_EXECUTION_RETRIED
前端 Reverse Waiver 操作对应审计事件 HANDLING_CASE_WITHDRAWN。
11. 一期验收标准
- 可从借款详情或关联工单创建客户减免/客服退款处理单,并自动带入业务上下文。
- 退费减免列表页标题右侧展示
Create Handling Case,位置和样式与工单中心New Ticket一致。 - 处理单列表支持关键词、App、类型、状态、费用/退款项、原因码、处理人筛选,所有下拉选择支持输入筛选。
- 点击处理单号或详情按钮必须新开后台 tab 展示详情,不在列表下方展示详情。
- 创建时必须校验工单、App、客户、借款、期次、金额、原因和证据。
- 单笔客户减免可以添加多个不同费用项;费用项类型不得重复,每项申请金额/可执行金额独立校验,处理单展示并校验两类金额合计。
- 新建和详情页字段必须结构化展示,金额区分申请金额和可执行金额,证据、校验结果、执行保护规则、执行方式、对账状态、幂等键和 Reverse Waiver 信息均可读。
- 一期流程不创建、查询或依赖审批实例、审批任务和审批流。
- 无创建权限不能建单,无执行权限不能调用执行接口。
- 客户减免不能减本金,客服退款必须关联原交易和已验证退款账户。
- 执行前账务复验失败时不得继续执行,并展示可理解的差异原因。
- 同一处理单重复提交、超时重试和重复回调均不得重复记账或退款。
- 未执行成功的处理单详情页必须展示可用操作按钮;至少包括
Execute、Retry、Revalidate和Reverse Waiver,并按状态和权限启用/禁用。 Reverse Waiver仅在DRAFT、READY_TO_EXECUTE、VALIDATION_FAILED、EXECUTION_FAILED、RECONCILE_EXCEPTION状态可点;在PROCESSING、EFFECTIVE、REFUNDED、REJECTED、CANCELLED、WITHDRAWN状态置灰。Reverse Waiver必须生成WITHDRAWN状态和审计记录;已成功生效或已退款的处理单不能撤回,只能创建反向更正单。- 执行结果、失败原因、前后快照、外部流水、对账结果和审计日志可查询。
- 处理结果可回写关联工单,支持客服回访和关闭客诉。
12. 一期下拉选项
原型按一期业务需要 mock 以下选项;后续如已有后台配置或字典表,前端应改为读取配置,但含义不得低于本清单完整度。
| 字段 | 选项 |
|---|---|
| 类型 | Customer Waiver、Customer Service Refund |
| 费用/退款项 | Service Fee、Management Fee、Interest、Penalty Interest、Overdue Interest、Insurance Fee、Channel Fee、Overpaid Principal、Duplicate Charge、Customer Service Compensation |
| 状态 | DRAFT、VALIDATION_FAILED、READY_TO_EXECUTE、PROCESSING、EFFECTIVE、REFUNDED、EXECUTION_FAILED、RECONCILE_EXCEPTION、REJECTED、CANCELLED、WITHDRAWN |
| 原因码 | DUPLICATE_CHARGE、OVERPAYMENT_CONFIRMED、SYSTEM_CALCULATION_ERROR、CUSTOMER_SERVICE_EXCEPTION、CHANNEL_REVERSAL_REQUIRED、PAYMENT_PROVIDER_ERROR、DISBURSEMENT_DELAY_COMPENSATION、MANUAL_ADJUSTMENT_DENIED、WRONG_COMPONENT_WITHDRAWN |
| 执行方式 | Auto Posting、Finance Manual Review、Refund Gateway Transfer、Manual Ledger Adjustment、Provider Reversal |
| 对账状态 | Not Started、Matched、Pending Callback、Pending Manual Reconcile、Amount Mismatch、Provider Failed、Provider Unknown、Reversed |
| 处理人 | cs.amina、cs.mary、support.lead、finance.grace、finance.ops、payment.ops |
| Reverse Waiver 原因 | Wrong customer selected、Wrong App selected、Wrong loan / period selected、Wrong fee component selected、Wrong amount entered、Duplicate case created、Evidence is insufficient、Provider result changed before execution |