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