vault backup: 2026-05-25 22:22:37
This commit is contained in:
182
prop-acc/scenarios/deposit/refund-full-no-damage.md
Normal file
182
prop-acc/scenarios/deposit/refund-full-no-damage.md
Normal file
@@ -0,0 +1,182 @@
|
||||
---
|
||||
title: prop-acc · deposit · 场景 - 装修完无损全额退还
|
||||
aliases:
|
||||
- 全额退还押金
|
||||
- 无损装修退押
|
||||
- refund-full-no-damage
|
||||
- 场景-押金全额退还
|
||||
tags:
|
||||
- 场景
|
||||
- prop-acc
|
||||
- 保证金
|
||||
- 退款
|
||||
audience:
|
||||
- 业户
|
||||
- 业务人员
|
||||
status: 已发布
|
||||
sub_feature: deposit
|
||||
last_review: 2026-05-25
|
||||
code_version: 2026-05-22
|
||||
---
|
||||
|
||||
# 场景:装修完无损全额退还
|
||||
|
||||
最常见、最理想的退押场景。业户装修完物业验收**无损坏无违约**,押金原额退还,账户自动关闭。
|
||||
|
||||
## 典型情境
|
||||
|
||||
> [!example] 真实情境
|
||||
> 张阿姨家装修完了(花了 6 周),物业例行验收公共走道、电梯、楼栋出入口,**没有任何损坏**。张阿姨当初交了 ¥5,000 装修保证金,现在物业要全额退给她。
|
||||
|
||||
## 业户视角
|
||||
|
||||
### 第 1 步:装修完通知物业验收
|
||||
|
||||
- 微信通知物业管家 / 直接到前台说"我家装修完了,来验收一下退押金"
|
||||
- 通常物业 2-3 个工作日内派人到现场
|
||||
|
||||
### 第 2 步:验收无损,等退款
|
||||
|
||||
- 验收员检查公共区域、电梯、楼道、出入口
|
||||
- 无损 → 出验收报告"无损,准予退押"
|
||||
- 物业财务凭报告办理退款
|
||||
|
||||
### 第 3 步:收到退款
|
||||
|
||||
退款方式取决于您当初**怎么交的押金**:
|
||||
|
||||
| 当初缴款方式 | 退款方式 |
|
||||
|---|---|
|
||||
| 微信扫码 | 退微信 / 银行卡 |
|
||||
| 现金 | 通常退到您银行卡(物业转账)|
|
||||
| 银行转账 | 原账户回款 |
|
||||
| POS 刷卡 | 原卡原路退 |
|
||||
|
||||
> [!info] 一两个工作日内到账
|
||||
> 退款不是即时,物业财务批量处理(通常隔日)。
|
||||
|
||||
### 第 4 步:收到红字收据
|
||||
|
||||
您会收到一张**红字收据**:
|
||||
> "装修保证金退还 ¥-5,000"
|
||||
|
||||
- 金额前的负号表示"退款"
|
||||
- 这是中国会计的"红字凭证"标准写法
|
||||
- 妥善保管,可作税务凭证
|
||||
|
||||
> [!success] 完成
|
||||
> 账户自动关闭,不会再有变动。短信/微信通知:"您的押金账户已结清,余额 0"。
|
||||
|
||||
## 业务人员视角(物业财务)
|
||||
|
||||
### 第 1 步:核对验收报告
|
||||
|
||||
确认装修完验收通过、无损坏、无未结违约。
|
||||
|
||||
### 第 2 步:打开账户
|
||||
|
||||
后台 → 保证金 → 账户列表 → 找到张阿姨的账户(Active,balance=5000)→ 点击进入 `ViewDepositAccount`。
|
||||
|
||||
### 第 3 步:点击 `RefundAction`(标签"退款")
|
||||
|
||||
右上角状态管理组里。Modal 表单:
|
||||
|
||||
| 字段 | 填什么 |
|
||||
|---|---|
|
||||
| **退款金额** | ¥5,000(默认带入当前余额,可改) |
|
||||
| **退款渠道(PaymentChannel)** | 选张阿姨指定的回款方式(微信 / 银行转账 / POS) |
|
||||
| **退款备注** | 选填,如 "装修验收无损,全额退还" |
|
||||
|
||||
> [!warning] 按钮可见性
|
||||
> `RefundAction` 加了 `->authorize('refund')` Policy 守护:`update` 权限 + `canWithdraw()` 状态(Active only)。Frozen / Closed 账户该按钮灰化。
|
||||
|
||||
### 第 4 步:提交
|
||||
|
||||
系统调 `RefundFromDepositAccountAction`,事务内:
|
||||
|
||||
1. 校验账户 `canWithdraw()`(Active only)
|
||||
2. 校验金额 ≤ 当前余额
|
||||
3. 建 `CollectionOrder`(`actual_amount=-5000` 红字,`status=Completed`)
|
||||
4. 加 `DepositTransaction`(`type=refund`,`amount=5000`,`balance_before=5000`,`balance_after=0`,关联红字 CO)
|
||||
5. 更新 `DepositAccount.balance=0`
|
||||
6. **余额清零自动关账** → 账户 `status=Closed`
|
||||
7. 触发 `CollectionOrderCompleted` → Listener 建红字 Receipt"装修保证金退还 ¥-5,000"
|
||||
|
||||
### 第 5 步:走线下退款流程
|
||||
|
||||
- 微信 / POS 退款:在对应支付网关后台操作
|
||||
- 银行转账:导出回款指令交银行
|
||||
- 现金退款(罕见):张阿姨到前台领现金
|
||||
|
||||
### 第 6 步:把红字收据交给张阿姨
|
||||
|
||||
后台找到红字 Receipt → 打印 / 发微信。
|
||||
|
||||
## 系统流程
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant 业户
|
||||
participant 财务
|
||||
participant Filament
|
||||
participant RefundFromDepositAccountAction
|
||||
participant 数据库
|
||||
participant 监听器
|
||||
|
||||
业户->>财务: 装修完了,验收无损,退押金
|
||||
财务->>Filament: ViewDepositAccount → RefundAction(modal)
|
||||
Filament->>RefundFromDepositAccountAction: handle(account, 5000, channel)
|
||||
RefundFromDepositAccountAction->>RefundFromDepositAccountAction: canWithdraw()? (Active=true)
|
||||
RefundFromDepositAccountAction->>RefundFromDepositAccountAction: amount ≤ balance? (5000≤5000)
|
||||
RefundFromDepositAccountAction->>数据库: 开启事务
|
||||
RefundFromDepositAccountAction->>数据库: 1. 建 CollectionOrder (-5000 红字, Completed)
|
||||
RefundFromDepositAccountAction->>数据库: 2. 建 DepositTransaction (refund, 5000→0)
|
||||
RefundFromDepositAccountAction->>数据库: 3. balance=0,自动 status=Closed
|
||||
RefundFromDepositAccountAction->>监听器: 4. 触发 CollectionOrderCompleted
|
||||
监听器->>数据库: 5. 建 Receipt (装修保证金退还 ¥-5,000 红字)
|
||||
RefundFromDepositAccountAction->>数据库: 提交事务
|
||||
Filament-->>财务: 成功通知
|
||||
财务-->>业户: 银行/微信退款 + 红字收据
|
||||
```
|
||||
|
||||
> [!info] 自动关账
|
||||
> 余额清零时,系统自动把账户翻成 `Closed`,不需要再单独走一次 [[close-after-zero-balance|关账]] 操作。
|
||||
|
||||
## 常见问题
|
||||
|
||||
> [!question] 业户当初付现金,退款必须退现金吗?
|
||||
> 不强制。退款时选 `PaymentChannel` 可以与缴款时不同。常见做法是退到业户银行卡,详见 [[refund-with-payment-channel-switch]]。
|
||||
|
||||
> [!question] 退一半就行可以吗?
|
||||
> 可以,Modal 表单的"退款金额"字段可以改成任意 ≤ 余额的数字。剩余款还在账户里,账户保持 Active。后续可继续退或扣或关。
|
||||
|
||||
> [!question] 退款后红字收据上的"-"是什么意思?
|
||||
> 中国会计的"红字凭证"。负数表示资金方向是"从物业流出 / 回到业户",与缴款时的"+"对称。详见 [[red-receipt-design]]。
|
||||
|
||||
> [!question] 业户拿到红字收据后觉得"扣了我的钱"?
|
||||
> 给业户解释:
|
||||
> - "-5,000" 不是"扣 5,000",是"退还 5,000"
|
||||
> - 黑字(无负号)是物业收到的钱,红字(有负号)是物业退给您的钱
|
||||
> - 这是会计标准做法
|
||||
|
||||
> [!question] 退款失败(银行退回 / 微信渠道异常)怎么办?
|
||||
> 当前系统**不处理这种回调**。物业财务需要在线下沟通业户,重新指定退款渠道,然后:
|
||||
> - 如果账户已关:开新账户(不推荐)或 tinker 改流水(运维介入)
|
||||
> - 推荐:**业务流程上避免** —— 退款前与业户确认渠道有效
|
||||
|
||||
> [!question] 已关账户能反悔吗?
|
||||
> 不能。`canBeReopened()` 永远 false。详见 [[account-state-machine]] "为什么不允许 Reopen" 段。如果业户反悔继续装修要再交押金,**开新账户**。
|
||||
|
||||
## 异常分支
|
||||
|
||||
- 有损坏 → 先扣 [[forfeit-damage-public-area]],再走 [[refund-partial-after-forfeit]]
|
||||
- 退款渠道与缴款不同 → [[refund-with-payment-channel-switch]]
|
||||
- 退款时账户 Frozen → 走 [[force-close-refund]] 强制关并退
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [[deposit-account-vs-transaction]]
|
||||
- [[account-state-machine]]
|
||||
- [[red-receipt-design]]
|
||||
- [[refund-partial-after-forfeit]]
|
||||
- [[close-after-zero-balance]]
|
||||
Reference in New Issue
Block a user