--- title: prop-acc · deposit · 场景 - 主动关账(已无业务往来) aliases: - 主动关账 - 手工关押金账户 - close-manual-with-zero-balance - 场景-押金账户主动关账 tags: - 场景 - prop-acc - 保证金 - 结清 audience: - 业务人员 status: 已发布 sub_feature: deposit last_review: 2026-05-25 code_version: 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)`,事务内: 1. 校验 `canBeClosed()` 2. 更新 `status=Closed` 3. 在 `meta.close_memo` 记关账事由 4. 在 `meta.closed_at` 记关账时间 **不产生** `DepositTransaction`(没有资金流水)、**不产生** `CollectionOrder`、**不产生** `Receipt`。 ### 第 4 步:无需通知业户 业务上无变化,业户无感知。如果业务上认为需要(例如告知业户"我们这边把账户归档了,以后要装修请重新申请开户"),走线下沟通,不走系统通知。 ## 系统流程 ```mermaid 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]] ## 相关文档 - [[close-after-zero-balance]] - [[account-state-machine]] - [[deposit-first-time-renovation]] - [[audit-long-pending-accounts]]