vault backup: 2026-05-25 22:27:38
This commit is contained in:
161
prop-acc/scenarios/deposit/refund-partial-after-forfeit.md
Normal file
161
prop-acc/scenarios/deposit/refund-partial-after-forfeit.md
Normal file
@@ -0,0 +1,161 @@
|
||||
---
|
||||
title: prop-acc · deposit · 场景 - 部分扣罚后退还差额
|
||||
aliases:
|
||||
- 扣罚后退差额
|
||||
- 部分退款
|
||||
- refund-partial-after-forfeit
|
||||
- 场景-押金扣罚后退差额
|
||||
tags:
|
||||
- 场景
|
||||
- prop-acc
|
||||
- 保证金
|
||||
- 退款
|
||||
- 扣罚
|
||||
audience:
|
||||
- 业户
|
||||
- 业务人员
|
||||
status: 已发布
|
||||
sub_feature: deposit
|
||||
last_review: 2026-05-25
|
||||
code_version: 2026-05-22
|
||||
---
|
||||
|
||||
# 场景:部分扣罚后退还差额
|
||||
|
||||
业户装修**有损坏**,物业扣一部分赔偿,剩下的部分退还。两步流水:先 [[forfeit-damage-public-area|扣罚]] 再 refund,账户余额清零自动关闭。
|
||||
|
||||
## 典型情境
|
||||
|
||||
> [!example] 真实情境
|
||||
> 陈先生家装修完了,公共走道墙面被工人撞坏一小块,**修复成本 ¥800**(物业找人修)。陈先生当初交了 ¥5,000 装修保证金,扣 ¥800 后退还 ¥4,200。
|
||||
|
||||
## 业户视角
|
||||
|
||||
### 第 1 步:装修完通知验收
|
||||
|
||||
同 [[refund-full-no-damage|无损退还]] 第 1 步。
|
||||
|
||||
### 第 2 步:验收发现损坏
|
||||
|
||||
- 物业验收员拍照、定损、出具修复报价
|
||||
- 给您看证据,告知"墙面修复需 ¥800,从您押金扣"
|
||||
- 您可选:
|
||||
- **同意扣罚** → 走本流程,扣 800 退 4200
|
||||
- **不同意** → 进入纠纷,账户冻结(走 [[freeze-during-dispute]])
|
||||
|
||||
### 第 3 步:扣罚后等退款
|
||||
|
||||
物业先扣 ¥800,再退 ¥4,200。
|
||||
|
||||
### 第 4 步:收到 2 张红字收据
|
||||
|
||||
- 红字收据 1:"装修保证金扣罚 ¥-800(公共走道墙面损坏)"
|
||||
- 红字收据 2:"装修保证金退还 ¥-4,200"
|
||||
|
||||
> [!info] 为什么是两张?
|
||||
> 系统每笔流水生成一张独立收据,**扣罚和退款是两件事**。各自有金额、各自有事由,合并到一张反而看不清。详见 [[transaction-types]]。
|
||||
|
||||
## 业务人员视角(物业财务)
|
||||
|
||||
### 第 1 步:做扣罚(`ForfeitureAction`)
|
||||
|
||||
详见 [[forfeit-damage-public-area]]。要点:
|
||||
|
||||
- Modal 表单填扣罚金额 ¥800、事由"公共走道墙面损坏"
|
||||
- 系统建红字 CollectionOrder + DepositTransaction(forfeiture)+ Receipt
|
||||
- 账户余额从 ¥5,000 变 ¥4,200
|
||||
|
||||
### 第 2 步:做退款(`RefundAction`)
|
||||
|
||||
详见 [[refund-full-no-damage]]。要点:
|
||||
|
||||
- Modal 表单**退款金额自动带入当前余额 ¥4,200**
|
||||
- 选退款渠道
|
||||
- 系统建红字 CollectionOrder + DepositTransaction(refund)+ Receipt
|
||||
- 账户余额从 ¥4,200 变 ¥0
|
||||
- **自动关账**(status=Closed)
|
||||
|
||||
### 第 3 步:走线下退款 + 给收据
|
||||
|
||||
- 银行 / 微信退 ¥4,200
|
||||
- 把 2 张红字收据 + 1 张扣罚说明(可选,详细解释扣罚事由)交业户
|
||||
|
||||
## 系统流程
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant 业户
|
||||
participant 财务
|
||||
participant Filament
|
||||
participant ForfeitFromDepositAccountAction
|
||||
participant RefundFromDepositAccountAction
|
||||
participant 数据库
|
||||
|
||||
Note over 业户,财务: 验收发现墙面损坏
|
||||
|
||||
业户->>财务: 同意扣 800
|
||||
财务->>Filament: ViewDepositAccount → ForfeitureAction(modal)
|
||||
Filament->>ForfeitFromDepositAccountAction: handle(account, 800, reason)
|
||||
ForfeitFromDepositAccountAction->>数据库: 建红字 CO + DepositTransaction(forfeiture)
|
||||
数据库-->>数据库: balance 5000→4200
|
||||
|
||||
Note over 业户,财务: 接着退差额
|
||||
|
||||
财务->>Filament: ViewDepositAccount → RefundAction(modal, 默认 4200)
|
||||
Filament->>RefundFromDepositAccountAction: handle(account, 4200, channel)
|
||||
RefundFromDepositAccountAction->>数据库: 建红字 CO + DepositTransaction(refund)
|
||||
数据库-->>数据库: balance 4200→0, status→Closed
|
||||
财务-->>业户: 2 张红字收据 + 银行/微信退 4200
|
||||
```
|
||||
|
||||
> [!info] 两步分别提交
|
||||
> 扣罚和退款**是两次独立操作**,各自一笔流水、一张收据、一个 CollectionOrder。这样保留独立审计痕迹,任何一步出问题不影响另一步。
|
||||
|
||||
## 流水台账(本场景完整记录)
|
||||
|
||||
| 流水 ID | type | amount | balance_before | balance_after | 关联 CO | 凭证 Receipt |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | deposit | 5000 | 0 | 5000 | CO #1(+5000)| "装修保证金缴纳 ¥5,000" |
|
||||
| 2 | forfeiture | 800 | 5000 | 4200 | CO #2(-800)| "装修保证金扣罚 ¥-800(公共走道墙面损坏)" |
|
||||
| 3 | refund | 4200 | 4200 | 0 | CO #3(-4200)| "装修保证金退还 ¥-4,200" |
|
||||
|
||||
`SUM(actual_amount of all CO) = +5000 - 800 - 4200 = 0` —— 账面平,物业代管资金净流入为 0,800 通过扣罚转入物业收入,4200 退还业户。
|
||||
|
||||
## 常见问题
|
||||
|
||||
> [!question] 业户不同意扣罚怎么办?
|
||||
> 不要强扣。**先 [[freeze-during-dispute|冻结账户]]**,等沟通 / 调解结果再操作:
|
||||
> - 调解结果"业户责任" → [[unfreeze-after-mediation|解冻]] → 走本场景
|
||||
> - 调解结果"物业误判" → 解冻 → 走 [[refund-full-no-damage|全额退还]]
|
||||
> - 调解结果"双方妥协金额" → 解冻 → 按妥协金额走本场景
|
||||
> - **调解陷入僵局,业户失联或拒绝沟通** → 走 [[force-close-forfeit]] 或 [[force-close-retain]]
|
||||
|
||||
> [!question] 扣罚 + 退款必须连续做吗?
|
||||
> 不必须。可以:
|
||||
> - 验收当天先扣罚(留账户 Active 余额 ¥4,200)
|
||||
> - 第二天业户提供回款账号后再退
|
||||
> 中间间隔多久都行,只要账户保持 Active。
|
||||
|
||||
> [!question] 扣罚的钱去哪了?
|
||||
> 扣罚的 CollectionOrder 是红字,`actual_amount=-800`,但**这笔钱实际上从"代管负债"科目转入"装修维修收入"科目**(物业收入)。账上的资金从未离开物业账户,只是性质从"代管"变为"收入"。
|
||||
|
||||
> [!question] 一次扣罚不够后续追加可以吗?
|
||||
> 可以。例如先扣 ¥500,事后发现另有损坏再扣 ¥300。每次独立 `ForfeitureAction`,账户余额累计减少。
|
||||
|
||||
> [!question] 扣罚 + 退款后业户反悔说"墙是装修前就坏的"?
|
||||
> 走 [[freeze-during-dispute|冻结]] 已晚(账户已 Closed)。线下沟通 + 财务通过 tinker / 后端补正(走 deposit 一笔反向流水冲),业务上属"事后追溯",系统不主动支持。
|
||||
|
||||
## 异常分支
|
||||
|
||||
- 全无损 → [[refund-full-no-damage]]
|
||||
- 全是损坏要全扣 → 只走 [[forfeit-damage-public-area]],不退,账户余额 0 自动关
|
||||
- 业户拒绝扣罚进入纠纷 → [[freeze-during-dispute]]
|
||||
- 账户 Frozen 时被迫处置 → [[force-close-refund]] / [[force-close-forfeit]]
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [[refund-full-no-damage]]
|
||||
- [[forfeit-damage-public-area]]
|
||||
- [[transaction-types]]
|
||||
- [[red-receipt-design]]
|
||||
- [[freeze-during-dispute]]
|
||||
Reference in New Issue
Block a user