6.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 · prepaid · 场景 - 首次开户充值 5000 |
|
|
|
已发布 | prepaid | 2026-05-25 | 2026-05-22 |
场景:首次开户充值 5000
业户第一次开预存款账户并充值。一户一账约束:同业户在同社区只能开一个,系统在提交时校验。
典型情境
[!example] 真实情境 张阿姨(12-3-501)每月物业费 ¥800,觉得月月去前台缴麻烦,跟物业管家说:"我一次充半年,以后从这里自动扣行不行?"
物业管家:"行,我帮您开个预存款账户,您充 ¥5,000 进去,以后账单出来自动从这里扣。"
业户视角
第 1 步:跟物业说要充值
- 到前台 / 物业管家微信 / 小程序(若开通)
- 表达"我想预存,以后自动扣账单"
第 2 步:确认充值金额
通常建议:3-6 个月账单的金额。少了频繁充值,多了占用资金。
- 月物业费 ¥800 → 充 ¥3,000-¥5,000(够 3-6 个月)
- 加水电费一起 → 充 ¥5,000-¥10,000
第 3 步:付款
支付方式:
- 现金
- 微信扫码
- POS 刷卡
- 银行转账
第 4 步:拿收据
"预付款充值 ¥5,000"。
[!info] 这张收据是普通正数收据 跟付物业费的收据长一样,只是文案不同。详见 transaction-types。
第 5 步:后续
- 物业费账单出来 → 业务人员手动 / (未来)自动抵扣 → 您收到"物业费 ¥800" 收据
- 余额 ¥4,200 留账户里,下月继续扣
业务人员视角
第 1 步:核实业户身份
- 业户档案存在(否则要先建)
- 业户当前社区(决定 community_id)
第 2 步:打开后台
后台 → 预存款 → 新建账户(ListPrepaidAccounts 的 Create 按钮)。
第 3 步:填表单
| 字段 | 填什么 |
|---|---|
业户档案(community_user_profile_id) |
通过房号 / 手机号 / 姓名找到张阿姨 |
社区(community_id) |
自动带入业户所在社区(或手动选) |
| 首次充值金额 | ¥5,000 |
| 支付方式 | 现金 / 微信 / POS / 银行转账 |
| 收款银行账户 | 微信/POS/转账选对应银行;现金可空 |
| 备注 | 选填,如 "业户要求月度自动扣账" |
[!warning] 一户一账校验 系统提交时检查
(community_id, community_user_profile_id)是否已存在:
- 已有 Active → 提示"该业户在本社区已有预存款账户,请直接充值" → 引导到 deposit-additional-topup
- 已有 Frozen → 提示"账户冻结中,请先解冻"
- 已有 Closed → 当前阻塞(见 one-account-per-resident "已知设计 gap" 段)
- 无 → 正常建账
第 4 步:提交
系统在事务内:
- 建
PrepaidAccount(status=Active,balance=5000) - 建
CollectionOrder(collection_type=Prepaid,actual_amount=+5000,status=Completed) - 建
PrepaidTransaction(type=deposit,amount=5000,balance_before=0,balance_after=5000,关联 CO) - 触发
CollectionOrderCompleted事件 - Listener
generatePrepaidReceiptItems建 Receipt + ReceiptItem"预付款充值 ¥5,000"
第 5 步:打印 / 发收据
后台收据列表找到新生成 Receipt → 打印 / 微信发业户。
系统流程
sequenceDiagram
participant 业户
participant 前台
participant Filament
participant 数据库
participant 监听器
业户->>前台: 充 5000 预存款
前台->>Filament: ListPrepaidAccounts → Create
Filament->>数据库: 校验 unique(community_id, profile_id) → 通过
Filament->>数据库: 开启事务
Filament->>数据库: 1. 建 PrepaidAccount (Active, balance=5000)
Filament->>数据库: 2. 建 CollectionOrder (type=Prepaid, +5000, Completed)
Filament->>数据库: 3. 建 PrepaidTransaction (deposit, 0→5000, 关联 CO)
Filament->>监听器: 4. 触发 CollectionOrderCompleted
监听器->>数据库: 5. 建 Receipt ("预付款充值 ¥5,000")
Filament->>数据库: 提交事务
Filament-->>前台: 成功 + 显示新账户
前台->>业户: 给收据
与 deposit 首次缴款的对比
| 维度 | 押金首次缴款 | 预存款首次充值 |
|---|---|---|
| 表单字段 | payer_type / fee_type / asset 等多个 | 只需 community_user_profile |
| 业户/缴款人差异 | 缴款人可与业户不同(装修公司代缴) | 缴款人必须是业户本人 |
| CollectionType | Deposit | Prepaid |
| 同业户多账户 | ✅ 多种费类多账户 | ❌ 一户一账 |
| 关账机制 | 退完自动 Closed | 退完仍 Active(可继续充) |
常见问题
[!question] 业户已有 Closed 账户,如何开新? 当前系统阻塞(unique 约束)。可选:
- 联系运维 tinker 改账户名(罕见)
- 业务上说服业户用现金 / 微信付,不开新预存账户
- 系统层加
WHERE status != 'closed'软约束(待业务方拍板)详见 one-account-per-resident "已知设计 gap" 段。
[!question] 跨社区业户(同时住两个小区)怎么开? 各社区独立账户(各自 unique)。在 A 社区开一个、B 社区开一个,各自独立余额。
[!question] 充值金额有上限吗? 系统层面无硬性上限。业务上建议:
- 不超过 12 个月账单合计(避免资金被冻在物业账上太久)
- 单笔大额(>10000)走银行转账,留银行流水
- 单笔超 50000 需财务上报(防风险)
[!question] 充错金额(把 5000 录成 50000)怎么办? 不要改流水。建一笔
Refund¥45,000(走 refund-partial-after-consume 流程),业户拿到红字"预付款退款 ¥-45,000",事后审计完整可追。
[!question] 业户不知道这账户怎么用,需要培训吗? 关键点:
- 余额能抵物业费 / 水电费 / 其他账单
- 余额随时可查(小程序 / 微信对账单)
- 余额随时可退(业务人员后台操作)
- 余额不够时账单不会自动扣 → 业户仍需补缴
异常分支
- 业户已有账户 → deposit-additional-topup
- 业户充错金额想撤 → [refund-partial-after-consume]
- 业户后悔不想用预存了 → refund-full-resident-moveout + close-resident-moveout