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

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
首次充值预存款
开预存款账户
deposit-first-time
场景-首次充值预存款
场景
prop-acc
预存款
充值
业户
业务人员
已发布 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 步:提交

系统在事务内:

  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 → 打印 / 微信发业户。

系统流程

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] 业户不知道这账户怎么用,需要培训吗? 关键点:

  • 余额能抵物业费 / 水电费 / 其他账单
  • 余额随时可查(小程序 / 微信对账单)
  • 余额随时可退(业务人员后台操作)
  • 余额不够时账单不会自动扣 → 业户仍需补缴

异常分支

相关文档