--- 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]]