Files
uniprop-manual/prop-acc/scenarios/deposit/forfeit-damage-public-area.md
2026-05-25 22:27:38 +08:00

190 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: prop-acc · deposit · 场景 - 损坏公共走道墙面扣 800
aliases:
- 损坏扣罚
- 墙面损坏扣押金
- forfeit-damage-public-area
- 场景-损坏扣罚
tags:
- 场景
- prop-acc
- 保证金
- 扣罚
audience:
- 业户
- 业务人员
status: 已发布
sub_feature: deposit
last_review: 2026-05-25
code_version: 2026-05-22
---
# 场景:损坏公共走道墙面扣 800
最常见的扣罚场景。装修过程中工人**损坏了公共区域**(走道墙面、电梯轿厢、楼栋出入口等),物业凭损坏证据和修复成本从押金扣除。
## 典型情境
> [!example] 真实情境
> 陈先生家装修运输板材时,工人在 12 楼到 1 楼搬运过程中**撞坏了公共走道墙面**(凹陷一块,约 50cm × 30cm)。物业找施工方维修报价 ¥800(刮腻子重新粉刷)。陈先生当初交了 ¥5,000 装修保证金,要扣这 ¥800。
## 业户视角
### 第 1 步:物业告知发现损坏
通常装修验收时发现,或装修过程中物业巡查发现。物业会:
- 拍照(损坏部位、范围)
- 出**定损报价单**(找的施工方报价)
- 联系您说明情况
### 第 2 步:决定接受或拒绝
| 决定 | 后续 |
|---|---|
| **接受** | 物业从押金扣 ¥800,装修结束后剩余退还,本场景 |
| **拒绝** | 物业冻结账户进入纠纷,走 [[freeze-during-dispute]] |
> [!tip] 接受不等于"没事"
> 接受扣罚是同意"我损坏了,这 ¥800 修复成本由我承担"。如果对损坏归责有异议(可能是装修前就坏的、可能是其他业户损坏),应**先拒绝走调解**,而不是先接受再反悔(已扣的钱难以追回)。
### 第 3 步:收到红字收据
"装修保证金扣罚 ¥-800(公共走道墙面损坏)"
> [!info] 钱去哪了
> 这 ¥800 从物业**代管负债**科目转入**装修维修收入**科目。账上的资金没有离开物业账户,只是性质变了 —— 用于支付实际修复成本。
### 第 4 步:剩余款怎么办
账户里还剩 ¥4,200。可以:
- **当下退** → 走 [[refund-partial-after-forfeit]](合并扣罚+退款的完整场景)
- **暂留账户** → 万一装修后续还有问题,从余额继续扣;无问题再退
## 业务人员视角(物业财务)
### 第 1 步:准备扣罚证据
- 损坏照片(多角度)
- 定损报价单(第三方或物业内部维修队的)
- 业户书面同意(签字 / 微信确认截图)
> [!warning] 没有证据不能扣
> 没有上述材料就执行扣罚等于**单方面挪用代管资金**,审计大忌。即使业户口头同意也必须留书面凭证。
### 第 2 步:打开账户
后台 → 保证金 → 账户列表 → 找到陈先生账户(Active,balance=5000)→ 进入 `ViewDepositAccount`
### 第 3 步:点击 `ForfeitureAction`(标签"扣罚")
右上角状态管理组。Modal 表单:
| 字段 | 填什么 |
|---|---|
| **扣罚金额** | ¥800 |
| **扣罚事由(memo)** | "公共走道墙面损坏,12-1F 楼梯口,定损报价 ¥800" |
| **关联凭证(选填)** | 上传定损报价单 PDF / 损坏照片 |
> [!warning] Policy 守护
> `ForfeitureAction` 加了 `->authorize('forfeit')` 守护:`update` 权限 + `canWithdraw()` 状态。Frozen 账户该按钮灰化。
### 第 4 步:提交
系统调 `ForfeitFromDepositAccountAction`,事务内:
1. 校验账户 `canWithdraw()`(Active only)
2. 校验扣罚金额 ≤ 当前余额
3.`CollectionOrder`(`actual_amount=-800` 红字,`status=Completed`)
4.`DepositTransaction`(`type=forfeiture`,`amount=800`,`balance_before=5000`,`balance_after=4200`,关联红字 CO)
5. 更新 `DepositAccount.balance=4200`
6. 触发 `CollectionOrderCompleted` → Listener 建红字 Receipt"装修保证金扣罚 ¥-800(公共走道墙面损坏)"
注意:扣罚**不会自动关账**,因为余额非 0,账户保持 Active,后续可继续操作。
### 第 5 步:给业户红字收据
后台找到 Receipt → 打印 / 发微信 → 通知陈先生剩余款 ¥4,200。
## 系统流程
```mermaid
sequenceDiagram
participant 业户
participant 财务
participant Filament
participant ForfeitFromDepositAccountAction
participant 数据库
participant 监听器
财务->>业户: 拍照 + 定损 + 告知
业户->>财务: 接受扣 800
财务->>Filament: ViewDepositAccount → ForfeitureAction(modal)
Filament->>ForfeitFromDepositAccountAction: handle(account, 800, reason)
ForfeitFromDepositAccountAction->>ForfeitFromDepositAccountAction: canWithdraw()? (Active=true)
ForfeitFromDepositAccountAction->>ForfeitFromDepositAccountAction: 800 ≤ 5000? yes
ForfeitFromDepositAccountAction->>数据库: 开启事务
ForfeitFromDepositAccountAction->>数据库: 1. 建 CollectionOrder (-800 红字, Completed)
ForfeitFromDepositAccountAction->>数据库: 2. 建 DepositTransaction (forfeiture, 5000→4200)
ForfeitFromDepositAccountAction->>数据库: 3. balance=4200(不自动关账)
ForfeitFromDepositAccountAction->>监听器: 4. 触发 CollectionOrderCompleted
监听器->>数据库: 5. 建 Receipt (装修保证金扣罚 ¥-800)
ForfeitFromDepositAccountAction->>数据库: 提交事务
Filament-->>财务: 成功通知
财务-->>业户: 红字收据 + 余额通知
```
## 常见问题
> [!question] 扣罚金额 > 押金余额怎么办?
> 系统校验 `amount ≤ balance`,提交时会被守护拦截抛错。**业务上**:
> - 扣全部余额(走本流程,金额改成余额),账户余额 0 自动关
> - 不足的部分**需要业户单独补缴**(开新订单 / 走司法程序),系统不自动处理
>
> 物业不应"先借后扣"或"超额扣罚",任何缺口必须有独立追偿凭证。
> [!question] 扣罚后能撤销吗?
> **不能直接撤销**(`DepositTransaction` 不可变)。如果扣错了:
> - 走一笔 `Deposit` 反向冲回(等于"退还扣罚款")
> - 备注清楚写明"撤销 2026-XX-XX 扣罚误判"
> - 审计上能完整追溯"扣 → 撤" 全过程
>
> 这种做法虽然多两笔流水,但**每笔都有合规凭证**,不留信息空白。
> [!question] 多次损坏分多次扣可以吗?
> 可以。例如:
> - 周一:墙面损坏扣 ¥800
> - 周三:电梯按钮被砸扣 ¥200
> - 周五:楼栋玻璃损坏扣 ¥500
>
> 三笔独立 `ForfeitureAction`,各自有事由、各自有凭证。账户余额累计减少。
> [!question] 扣罚事由写多详细?
> 越详细越好。审计、复盘、纠纷都需要。推荐结构:
> - 损坏部位:"公共走道墙面,12-1F 楼梯口"
> - 损坏程度:"凹陷 50×30cm,需刮腻子重新粉刷"
> - 定损依据:"物业维修队报价 ¥800" 或 "第三方[xxx 装修公司] 报价单"
> - 业户确认:"业户陈某某 2026-XX-XX 微信确认接受"
> [!question] 业户拿到收据后反悔怎么办?
> 已扣的钱难追回。**预防胜于补救**:
> - 扣罚前务必拿到业户书面同意
> - 不要在业户犹豫时强扣
> - 复杂纠纷先 [[freeze-during-dispute|冻结]] 调解
## 异常分支
- 业户拒绝接受扣罚 → [[freeze-during-dispute]]
- 扣罚后退余款 → [[refund-partial-after-forfeit]]
- 扣全部余额清零关账 → 继续走 [[close-after-zero-balance]](本流程余额非零,不适用)
- 未申请直接动工的违约扣罚 → [[forfeit-violation-no-permit]]
## 相关文档
- [[transaction-types]]
- [[red-receipt-design]]
- [[forfeit-violation-no-permit]]
- [[refund-partial-after-forfeit]]
- [[freeze-during-dispute]]