5.4 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 |
场景:主动关账(已无业务往来)
账户余额本来就是 0(从未缴款、或之前已通过其他流程退完),物业财务想把账户主动归档,走 CloseAction 手工关账。比 close-after-zero-balance 罕见,但 UI 仍提供。
典型情境
[!example] 真实情境 一年前物业为某业户开了押金账户,但业户最终没装修(改主意了),账户始终余额 0、状态 Active。一年后清理账户列表时,物业财务想把这种"挂着但没用过"的账户关掉,避免长期占列。
业务人员视角(本场景业户无感)
[!info] 业户视角 业户从未缴款、也没动账户,完全感受不到这个操作。不会收到通知,也不会拿到收据(没有资金流水,Listener 不触发)。
适用前提
- 账户
status = Active - 账户
balance == 0 - 业务上已确认确实无后续业务(联系业户确认或长期无动静)
第 1 步:打开账户
后台 → 保证金 → 账户列表 → 按"余额=0 + 状态=Active"过滤 → 找到目标账户。
第 2 步:点击 CloseAction(标签"关账")
右上角状态管理组。Modal 表单:
| 字段 | 填什么 |
|---|---|
| 关账事由(memo) | 必填,如 "账户未缴款,业户已确认无装修计划" |
[!warning] Policy 守护
CloseAction调canBeClosed():
balance == 0✅status !== Closed✅ 满足这两条即可关,不要求 Active(理论上 Frozen + balance==0 也行,但 Frozen 状态下通常先解冻再关)。
第 3 步:提交
系统调 DepositAccount::close($memo),事务内:
- 校验
canBeClosed() - 更新
status=Closed - 在
meta.close_memo记关账事由 - 在
meta.closed_at记关账时间
不产生 DepositTransaction(没有资金流水)、不产生 CollectionOrder、不产生 Receipt。
第 4 步:无需通知业户
业务上无变化,业户无感知。如果业务上认为需要(例如告知业户"我们这边把账户归档了,以后要装修请重新申请开户"),走线下沟通,不走系统通知。
系统流程
sequenceDiagram
participant 财务
participant Filament
participant 数据库
Note over 财务: 找到一年前开的空账户
财务->>Filament: ViewDepositAccount → CloseAction(modal, memo)
Filament->>数据库: 校验 canBeClosed() (balance==0, status!=Closed) → true
Filament->>数据库: 更新 status=Closed + meta.close_memo + meta.closed_at
数据库-->>Filament: ok
Filament-->>财务: 成功通知
Note over 数据库: 无 Transaction,无 CO,无 Receipt
流水台账(本场景完整记录)
| 流水 | 说明 |
|---|---|
| (无) | 账户从开户到关账,无任何 DepositTransaction |
只有账户本身的 status 字段从 Active 变 Closed,meta 加几个审计字段。
常见问题
[!question] 没有流水的账户也算有效记录吗? 算。
DepositAccount本身是审计对象,记录了开户时间、缴款人信息、关账事由,具备完整的"开-关"生命周期文档,即使中间没有资金往来。
[!question] 业务上常见这种"开了不缴"的账户吗? 不应常见。如果一个物业项目积累了很多空账户,说明开户流程有问题(业户开始装修前就开账户,但有相当比例改主意)。建议改流程为"业户决定装修当天才开账户",降低空账户产生率。
[!question] 主动关账后能反悔重开吗? 不能。
canBeReopened()永远 false。如果业户后来真的要装修,开新账户。
[!question] 余额非 0 主动关账可以吗? 不能。
canBeClosed()要求balance==0。如果账户有余额但要终结:
- Active + 有余额 → 走 refund-full-no-damage 或 forfeit-damage-public-area 清零后自动关
- Frozen + 有余额 → 走 force-close-refund / force-close-forfeit / force-close-retain 强制关账
[!question] 主动关账和自动关账的区别? 主要区别在触发方式和业务背景:
维度 自动关账(close-after-zero-balance) 主动关账(本场景) 触发 最后一笔 Refund / Forfeiture 使余额变 0 手工 CloseAction业务背景 有缴款也有退/扣的完整生命周期 通常无缴款,只是清理 流水台账 有 无 业户感知 收到最后一张红字收据 无感 频率 大量(每个正常退还都触发) 罕见(清理用)
[!question] 批量关账(同时关多个空账户)有功能吗? 当前没有。如果要清理 100+ 空账户,需要在 List 页加批量操作,或运维 tinker。
异常分支
- 余额非 0 想强制关 → force-close-refund / force-close-forfeit / force-close-retain
- 已关账户想恢复使用 → 不可逆,开新账户
- Frozen 账户余额 0 想关 → 先 unfreeze-after-mediation 再走本流程,或直接走 force-close-retain