vault backup: 2026-05-25 22:32:40

This commit is contained in:
Willie
2026-05-25 22:32:40 +08:00
parent 963d432d62
commit 68ea6dfbe9
6 changed files with 833 additions and 5 deletions

View File

@@ -0,0 +1,170 @@
---
title: prop-acc · deposit · 场景 - 调解结束后解冻
aliases:
- 解冻押金账户
- 调解完成解冻
- unfreeze-after-mediation
- 场景-押金账户解冻
tags:
- 场景
- prop-acc
- 保证金
- 冻结
audience:
- 业户
- 业务人员
status: 已发布
sub_feature: deposit
last_review: 2026-05-25
code_version: 2026-05-22
---
# 场景:调解结束后解冻
[[freeze-during-dispute|冻结]] 期间纠纷调解出结果,业户与物业达成一致,账户解冻、回到 Active,然后按调解结果执行后续(退 / 扣 / 部分扣余下退)。
## 典型情境
> [!example] 真实情境
> 陈先生家押金账户因墙面损坏归责纠纷被冻结 2 周。期间物业找施工方核实,发现损坏**确实是装修期间造成的**(有施工照片为证)。陈先生最终同意:扣 ¥500(原本物业要扣 ¥800,部分妥协),剩余 ¥4,500 退还。
>
> 物业财务先解冻,再按 [[refund-partial-after-forfeit]] 走"扣 500 + 退 4500"两步。
## 业户视角
### 您会感受到什么
- 收到通知:"您的押金账户已解冻"
- 小程序"我的押金账户"显示 "✅ Active"
- 后续按调解结果走 —— 收到红字扣罚收据 + 退款 + 退款收据
### 您要做什么
- 配合提供退款渠道(银行卡 / 微信)
- 接收红字收据并妥善保管
- 任何后续意见在系统外沟通(账户已按调解结果处置,不可逆)
## 业务人员视角(物业财务)
### 第 1 步:确认调解结果有书面凭证
- 调解协议书(双方签字)
- 微信 / 录音确认(辅助)
> [!warning] 没有凭证不要解冻
> 解冻后立即可做扣 / 退,如果调解没书面凭证、业户事后反悔,物业很被动。
### 第 2 步:打开账户
后台 → 保证金 → 账户列表 → 找到 Frozen 账户 → 进入 `ViewDepositAccount`
> 状态显示 "🧊 Frozen",右上角只有 `UnfreezeAction` 和 `ForceCloseAction` 可点(其他都灰)。
### 第 3 步:点击 `UnfreezeAction`(标签"解冻")
Modal 表单:
| 字段 | 填什么 |
|---|---|
| **解冻事由(reason)** | 必填,如 "调解协议:扣 ¥500,退 ¥4,500" |
> [!warning] Policy 守护
> `UnfreezeAction` 调 `canBeUnfreezed()`:仅 Frozen 状态可解。Active / Closed 状态下按钮灰化。
### 第 4 步:提交
系统调 `DepositAccount::unfreeze(reason)`,事务内:
1. 校验 `canBeUnfreezed()`(Frozen only)
2. 更新 `status=Active`
3.`meta.unfreeze_reason` 记解冻事由
4.`meta.unfrozen_at` 记解冻时间
5. (可选)在 `meta.freeze_history[]` 追加这次冻结-解冻的完整记录
**不产生 DepositTransaction**(同冻结,只是状态变更)。
### 第 5 步:按调解结果做后续
- 扣 ¥500 → `ForfeitureAction`(详见 [[forfeit-damage-public-area]])
- 退 ¥4,500 → `RefundAction`(详见 [[refund-full-no-damage]])
- 余额清零自动 Closed
两步顺序:**先扣再退**,因为扣罚事由要清楚,退款是处理剩余款。
### 第 6 步:通知业户
短信 / 微信告知调解结果已执行 + 退款已到账 + 收据已发。
## 系统流程
```mermaid
sequenceDiagram
participant 业户
participant 调解
participant 财务
participant Filament
participant 数据库
Note over 业户,财务: 冻结 2 周后调解出结果:扣 500 + 退 4500
调解-->>财务: 提供书面调解协议
财务->>Filament: ViewDepositAccount → UnfreezeAction(modal, reason)
Filament->>数据库: 校验 canBeUnfreezed() (Frozen=true, ok)
Filament->>数据库: 更新 status=Active + meta.unfreeze_reason
数据库-->>财务: 已解冻
财务->>Filament: ForfeitureAction(500, "墙面损坏调解结果")
Filament->>数据库: 建 CO(-500) + Transaction(forfeiture, 5000→4500) + Receipt
财务->>Filament: RefundAction(4500, 业户银行卡)
Filament->>数据库: 建 CO(-4500) + Transaction(refund, 4500→0) + Receipt
数据库-->>数据库: balance=0, 自动 status=Closed
财务-->>业户: 2 张红字收据 + 退款到账
```
## 流水台账(本场景完整记录)
| 流水 | type | amount | balance_before | balance_after | 备注 |
|---|---|---|---|---|---|
| 1 | deposit | 5000 | 0 | 5000 | 首次缴款 |
| 2 | forfeiture | 500 | 5000 | 4500 | 调解结果扣罚(墙面损坏)|
| 3 | refund | 4500 | 4500 | 0 | 调解结果退还 |
`status` 变化:`Active → Frozen → Active → Closed`(自动)。
## 常见问题
> [!question] 解冻后能立即做扣罚 / 退款吗?
> 能。解冻是事务内同步操作,提交后立即生效。后续 `ForfeitureAction` / `RefundAction` 可立即触发。
> [!question] 解冻后忘了执行后续(扣 / 退)怎么办?
> 账户停留 Active 状态,余额仍是冻结前的数。可任何时候继续操作。**业务上不应该**长期停留 Active 不处理 —— 应在解冻后立即完成调解结果。
> [!question] 解冻后业户反悔调解结果怎么办?
> 解冻 + 已执行扣 / 退 → 已执行的不可逆。如果业户反悔:
> - 走司法程序(系统不参与)
> - 物业可选择补退一笔(走 deposit 反向冲)以化解纠纷
>
> **预防**:解冻前务必拿到书面调解协议。
> [!question] 解冻和重新冻结(同一账户多次冻结)可以吗?
> 可以。账户可以在 `Active ↔ Frozen` 之间多次来回。如果业务上常发生,`meta.freeze_history[]` 数组就是用来记历次冻结的事由和时间。
> [!question] 调解时间过长,业户失联怎么办?
> 走 [[force-close-retain]] —— 不解冻,直接从 Frozen 强制关账并保留余额,等业户出现再处理。
## 异常分支
- 调解失败长期僵持 → [[force-close-refund]] / [[force-close-forfeit]] / [[force-close-retain]]
- 业户失联 → [[force-close-retain]]
- 误冻结(其实没纠纷)→ UnfreezeAction(reason "误操作解除")
- 解冻后业户立即提退 → 走 [[refund-full-no-damage]]
## 相关文档
- [[freeze-during-dispute]]
- [[account-state-machine]]
- [[forfeit-damage-public-area]]
- [[refund-partial-after-forfeit]]
- [[force-close-retain]]