Files
uniprop-manual/prop-acc/scenarios/deposit/close-manual-with-zero-balance.md
2026-05-25 22:32:40 +08:00

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 · 场景 - 主动关账(已无业务往来)
主动关账
手工关押金账户
close-manual-with-zero-balance
场景-押金账户主动关账
场景
prop-acc
保证金
结清
业务人员
已发布 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 守护 CloseActioncanBeClosed():

  • balance == 0
  • status !== Closed 满足这两条即可关,不要求 Active(理论上 Frozen + balance==0 也行,但 Frozen 状态下通常先解冻再关)。

第 3 步:提交

系统调 DepositAccount::close($memo),事务内:

  1. 校验 canBeClosed()
  2. 更新 status=Closed
  3. meta.close_memo 记关账事由
  4. 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 字段从 ActiveClosed,meta 加几个审计字段。

常见问题

[!question] 没有流水的账户也算有效记录吗? 算。DepositAccount 本身是审计对象,记录了开户时间、缴款人信息、关账事由,具备完整的"开-关"生命周期文档,即使中间没有资金往来。

[!question] 业务上常见这种"开了不缴"的账户吗? 不应常见。如果一个物业项目积累了很多空账户,说明开户流程有问题(业户开始装修前就开账户,但有相当比例改主意)。建议改流程为"业户决定装修当天才开账户",降低空账户产生率。

[!question] 主动关账后能反悔重开吗? 不能canBeReopened() 永远 false。如果业户后来真的要装修,开新账户

[!question] 余额非 0 主动关账可以吗? 不能canBeClosed() 要求 balance==0。如果账户有余额但要终结:

[!question] 主动关账和自动关账的区别? 主要区别在触发方式业务背景:

维度 自动关账(close-after-zero-balance) 主动关账(本场景)
触发 最后一笔 Refund / Forfeiture 使余额变 0 手工 CloseAction
业务背景 有缴款也有退/扣的完整生命周期 通常无缴款,只是清理
流水台账
业户感知 收到最后一张红字收据 无感
频率 大量(每个正常退还都触发) 罕见(清理用)

[!question] 批量关账(同时关多个空账户)有功能吗? 当前没有。如果要清理 100+ 空账户,需要在 List 页加批量操作,或运维 tinker。

异常分支

相关文档