vault backup: 2026-05-25 23:22:55
This commit is contained in:
187
prop-acc/scenarios/prepaid/deposit-first-time.md
Normal file
187
prop-acc/scenarios/prepaid/deposit-first-time.md
Normal file
@@ -0,0 +1,187 @@
|
||||
---
|
||||
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]]
|
||||
Reference in New Issue
Block a user