6.6 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 · prepaid · 场景 - 余额清零后不自动关,业户决定 |
|
|
|
已发布 | prepaid | 2026-05-25 | 2026-05-22 |
场景:余额清零后不自动关,业户决定
业户预存款账户余额自然变为 0(消费抵扣完 / 退款完),账户保持 Active,等业户决定继续充值复用,还是主动 close-resident-moveout。突出 prepaid 与 deposit 在零余额行为上的关键差异。
典型情境
[!example] 真实情境 张阿姨预存款账户余额 ¥800,5 月物业费账单 ¥800,业务人员抵扣后余额 = 0。
账户仍 Active —— 系统没自动关。张阿姨有 3 个选择:
- 继续用:下月再充值,账户复用,啥都不操作
- 主动关账:不想用预存款了,联系物业关账
- 不管:留 Active 零余额账户,以后想用再充
业户视角
您会感受到什么
- 推送通知:"5 月物业费 ¥800 已抵扣,余额 ¥0"
- 小程序"我的预存款"显示 "✅ Active,余额 ¥0"
- 账户没关,仍可用(若有钱)
您要做什么(三选一)
选项 1:继续用(默认,推荐)
什么都不用做。下次想用预存款付账单,先充值:
- 走 deposit-additional-topup
- 充值后余额非 0,继续抵账单
适合:长期居住业户,预存款是日常工具。
选项 2:主动关账
如果决定不再使用预存款(例如转用现金 / 微信付每月账单):
- 联系物业(电话 / 微信 / 前台)
- 业务人员走 close-resident-moveout 流程
适合:业户偏好不变(决定不再用预存款服务)、搬走等长期事件。
[!warning] 关账后想反悔? 关账永久不可逆。如果以后又想用,理论上重开,但一户一账约束阻塞(详见 one-account-per-resident "已知设计 gap")。保险起见:不确定就不要关。
选项 3:留 Active 不管
什么都不做。账户保持 Active + 余额 0:
- 不影响业户
- 占用一条数据库记录(微不足道)
- 后续可能在 audit-low-balance-and-overdue 里被标记"长期零余额",业务人员可能主动联系您确认
适合:犹豫(可能以后会用)、短期没决定。
业务人员视角
通常无需操作
零余额 Active 账户默认保留,不主动清理。理由:
| 理由 | 说明 |
|---|---|
| 业户随时可能继续充值 | 关了再开成本大(一户一账约束) |
| 业务上无伤害 | 账户余额 0,不挂账、不欠款、不占资金 |
| 清理意义低 | 数据量不大,清理工时 > 收益 |
| 自动关风险大 | "自动关账后业户充值要重新开,体验差" |
何时主动关
只在以下情况业务人员主动关:
| 情况 | 关账理由 |
|---|---|
| 业户搬走 | 业务终结,清爽 |
| 业户明确说"不再用预存款" | 用户决定 |
| 账户长期闲置(>2 年)且业户长期失联 | 清账类似 audit-low-balance-and-overdue 处理 |
操作
走 close-resident-moveout 流程,Modal 表单 memo 填具体原因。
与 deposit 的关键差异(再次强调)
| 维度 | deposit 零余额 | prepaid 零余额(本场景) |
|---|---|---|
| 自动关账 | ✅ 是,最后一笔 refund/forfeit 触发 | ❌ 保持 Active |
| 业户感知 | 收到最后一张红字收据 + 自动关账通知 | 无感(余额 0 但账户 Active) |
| 业务人员介入 | 不需要 | 视需求决定 |
| 设计哲学 | 押金 = 业务节点性,完结即关 | 预存款 = 长期工具,清零不等于终结 |
系统流程(消费导致清零)
sequenceDiagram
participant 业户
participant 业务
participant Filament
participant Account
participant 数据库
Note over Account: balance=800,有 800 物业费账单
业务->>Filament: ConsumeAction(800)
Filament->>Account: consume(bill, 800)
Account->>数据库: 建 CO(type=Bill, +800) + PrepaidTransaction(consume, 800→0)
Account->>数据库: **balance=0, status=Active(不变)**
Account->>监听器: 触发 CollectionOrderCompleted
监听器->>数据库: 建 Receipt("物业费 ¥800")
Account->>数据库: 提交
Note over Account: balance=0 但 Active
Filament-->>业务: 完成
业务-->>业户: 推送"5 月物业费已抵扣,余额 ¥0"
Note over 业户: 业户选择:继续用 / 关账 / 不管
流水台账(本场景)
| 流水 | type | amount | balance_before | balance_after | 备注 |
|---|---|---|---|---|---|
| ... | (前面省略) | ||||
| N | consume | 800 | 800 | 0 | 5 月物业费抵扣 |
账户 status 保持 Active,无关账动作。
常见问题
[!question] 为什么 prepaid 设计成不自动关账? 详见 account-state-machine "零余额不自动关账" 段。简言之:
- 一户一账,关了重开成本大(unique 约束)
- 业户长期可能复用
- 业务高频,频繁开关无意义
[!question] 系统层面有"零余额超 N 个月自动关账" job 吗? 没有,也不推荐加。零余额 Active 账户无害,自动关账反而引发业户"为什么我账户被关了"的客服压力。
[!question] 业户登录小程序看到余额 0,会困惑吗? 不会(理论上)。小程序界面应清楚显示:
- 余额:¥0
- 状态:Active
- 行动按钮:"立即充值"(显眼)
- 流水:可看历史
业户清楚看到"我可以充值继续用"。
[!question] 业户问"我账户还在用吗?" 看状态:
- Active + 余额 > 0:正常用
- Active + 余额 = 0:仍在用,但需要充值才能抵账单
- Frozen:暂停中,联系物业了解
- Closed:已关闭,不再使用
[!question] 退到 0 的退款流程跟消费到 0 的流程一样吗? 状态机层面完全一样 —— 都保持 Active。不同点:
- 消费到 0:走 consume-monthly-property-bill 等抵扣场景
- 退款到 0:走 refund-full-resident-moveout 或 refund-partial-after-consume 之类的退款场景
两种动作都不触发自动关账。
异常分支
- 业户决定关账 → close-resident-moveout
- 业户决定继续用 → deposit-additional-topup
- 长期零余额累积成审计问题 → audit-low-balance-and-overdue