Files
uniprop-manual/prop-acc/scenarios/prepaid/deposit-first-time.md
2026-05-25 23:22:55 +08:00

188 lines
6.4 KiB
Markdown

---
title: prop-acc · prepaid · 场景 - 首次开户充值 5000
aliases:
- 首次充值预存款
- 开预存款账户
- deposit-first-time
- 场景-首次充值预存款
tags:
- 场景
- prop-acc
- 预存款
- 充值
audience:
- 业户
- 业务人员
status: 已发布
sub_feature: prepaid
last_review: 2026-05-25
code_version: 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 步:提交
系统在事务内:
1.`PrepaidAccount`(`status=Active`,`balance=5000`)
2.`CollectionOrder`(`collection_type=Prepaid`,`actual_amount=+5000`,`status=Completed`)
3.`PrepaidTransaction`(`type=deposit`,`amount=5000`,`balance_before=0`,`balance_after=5000`,关联 CO)
4. 触发 `CollectionOrderCompleted` 事件
5. Listener `generatePrepaidReceiptItems` 建 Receipt + ReceiptItem"预付款充值 ¥5,000"
### 第 5 步:打印 / 发收据
后台收据列表找到新生成 Receipt → 打印 / 微信发业户。
## 系统流程
```mermaid
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]]
## 相关文档
- [[prepaid-account-vs-transaction]]
- [[account-state-machine]]
- [[one-account-per-resident]]
- [[transaction-types]]
- [[deposit-additional-topup]]
- [[consume-monthly-property-bill]]