5.9 KiB
title, aliases, tags, audience, status, sub_feature, last_review, code_version
| title | aliases | tags | audience | status | sub_feature | last_review | code_version | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| prop-acc · deposit · 场景 - 调解结束后解冻 |
|
|
|
已发布 | deposit | 2026-05-25 | 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),事务内:
- 校验
canBeUnfreezed()(Frozen only) - 更新
status=Active - 在
meta.unfreeze_reason记解冻事由 - 在
meta.unfrozen_at记解冻时间 - (可选)在
meta.freeze_history[]追加这次冻结-解冻的完整记录
不产生 DepositTransaction(同冻结,只是状态变更)。
第 5 步:按调解结果做后续
- 扣 ¥500 →
ForfeitureAction(详见 forfeit-damage-public-area) - 退 ¥4,500 →
RefundAction(详见 refund-full-no-damage) - 余额清零自动 Closed
两步顺序:先扣再退,因为扣罚事由要清楚,退款是处理剩余款。
第 6 步:通知业户
短信 / 微信告知调解结果已执行 + 退款已到账 + 收据已发。
系统流程
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