Files
uniprop-manual/prop-acc/scenarios/prepaid/close-with-zero-balance-decision.md
2026-05-25 23:32:57 +08:00

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 · 场景 - 余额清零后不自动关,业户决定
零余额不自动关账
余额 0 决策
close-with-zero-balance-decision
场景-预存款零余额决策
场景
prop-acc
预存款
结清
业户
业务人员
已发布 prepaid 2026-05-25 2026-05-22

场景:余额清零后不自动关,业户决定

业户预存款账户余额自然变为 0(消费抵扣完 / 退款完),账户保持 Active,等业户决定继续充值复用,还是主动 close-resident-moveout。突出 prepaid 与 deposit 在零余额行为上的关键差异。

典型情境

[!example] 真实情境 张阿姨预存款账户余额 ¥800,5 月物业费账单 ¥800,业务人员抵扣后余额 = 0

账户仍 Active —— 系统没自动关。张阿姨有 3 个选择:

  1. 继续用:下月再充值,账户复用,啥都不操作
  2. 主动关账:不想用预存款了,联系物业关账
  3. 不管:留 Active 零余额账户,以后想用再充

业户视角

您会感受到什么

  • 推送通知:"5 月物业费 ¥800 已抵扣,余额 ¥0"
  • 小程序"我的预存款"显示 " Active,余额 ¥0"
  • 账户没关,仍可用(若有钱)

您要做什么(三选一)

选项 1:继续用(默认,推荐)

什么都不用做。下次想用预存款付账单,先充值:

适合:长期居住业户,预存款是日常工具。

选项 2:主动关账

如果决定不再使用预存款(例如转用现金 / 微信付每月账单):

适合:业户偏好不变(决定不再用预存款服务)、搬走等长期事件。

[!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。不同点:

两种动作都不触发自动关账。

异常分支

相关文档