Files
uniprop-manual/prop-acc/scenarios/billing/create-single-bill-manual.md
2026-05-26 01:03:15 +08:00

7.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 · billing · 场景 - 手动建单(临时收费/调整账单)
手动建账单
临时账单
create-single-bill-manual
场景-手动建账单
场景
prop-acc
账单
创建
业务人员
财务
已发布 billing 2026-05-26 2026-05-22

场景:手动建单(临时收费/调整账单)

业务上不属于周期任务、不属于抄表的临时收费,通过 CreateBill 后台手工建一张账单。例如:维修费分摊、特别活动费、单次罚款、跨期补开账单。

典型情境

[!example] 真实情境(一):公共维修费分摊 嘉禾花园 3 单元电梯坏了维修,总成本 ¥15,000。物业公司决定全单元 30 户业户分摊(每户 ¥500)。这种"临时性的、不属周期 / 抄表"的费用,业务人员逐户手工建账单(或选定业户清单后批量手工)。

[!example] 真实情境(二):个别业户的特别罚款 张阿姨违反小区车位管理规定(占用应急车位 1 小时),物业罚款 ¥100。业务人员单独给张阿姨建一张账单。

[!example] 真实情境(三):跨期补开账单 业务人员发现陈先生 4 月物业费没生成(系统月初批量时陈先生数据有问题),5 月才发现。需补开 4 月账单。

业务人员视角

第 1 步:打开 CreateBill

后台 → 账单 → 列表 → 顶部 "新建" 按钮 → 进 CreateBill 页面。

第 2 步:填表单(BillForm)

字段 填什么
社区(community_id) 嘉禾花园(若多社区可选)
业户(resident_id) 张阿姨(下拉选)
房屋(asset_id) 12-3-501(自动带入或手选)
费用类型(fee_type_id) 选合适的 FeeType(物业费 / 杂费 / 罚款 / ...)
账单类型(bill_type) 通常选 OneTimeAdjustment(看 BillType 枚举)
金额(amount) ¥500(电梯维修分摊)
期次 选填(临时账单可不填,或填发生月)
到期日(due_at) 6 月 15 日
备注(memo) 强烈推荐填,说明缘由,如 "3 单元电梯维修分摊(2026-05),总成本 ¥15,000 ÷ 30 户"

[!warning] Policy 守护 CreateBill 需要 bill.create 权限。

第 3 步:提交

系统:

  1. 校验字段(business / asset / fee_type 存在)
  2. 建 Bill(status=Unpaid,sourceable_type=null / 或自定义)
  3. 写 activitylog(单条 Bill 创建,subject=Bill)
  4. 跳到 ViewBill 页面

第 4 步:通知业户

通常需要业务人员单独通知(临时账单不在月度自动推送范围内):

  • 微信 / 短信:"张阿姨,您本月有一笔电梯维修分摊费 ¥500,请于 6 月 15 日前付清"
  • 附备注说明

第 5 步:批量手工建(电梯维修分摊场景)

如果是分摊给 30 户业户,逐户建效率低。当前没有"批量手动建" UI,只能:

  • 逐户走 CreateBill(30 次)
  • 或运维 tinker 脚本(SQL 批量 INSERT)
  • 或要求业务方加"批量手工建"功能

未来可加:BulkCreateBillsAction(给定业户清单 + 模板 → 批量建)。

系统流程

sequenceDiagram
    participant 业务[业务人员]
    participant Filament
    participant CreateBill
    participant Activity[activitylog]
    participant DB

    业务->>Filament: ListBills → 新建 → CreateBill
    Filament->>CreateBill: 渲染 form
    业务->>CreateBill: 填业户 / 金额 / 备注 / 提交
    CreateBill->>DB: 校验 fields
    CreateBill->>DB: 建 Bill(status=Unpaid, bill_type=OneTime, sourceable=null)
    CreateBill->>Activity: log(event=created, subject=Bill)
    CreateBill-->>Filament: 跳转 ViewBill
    Filament-->>业务: 显示新账单

业户视角

业户收到通知:

张阿姨您好,您本月有一笔账单:

  • 电梯维修分摊费:¥500
  • 备注:3 单元电梯维修分摊
  • 到期日:6 月 15 日

请通过微信小程序 / 前台 / 预存款 任选方式付款。

业户:

三种典型情境的不同处理

情境 1:电梯维修分摊

字段
bill_type OneTime
fee_type_id "维修分摊费"(若有此 FeeType,否则用通用"杂费")
amount ¥500
备注 详细说明(分摊依据 + 总成本)

业务上还要备齐资料:维修发票、户主同意决议(若有业主大会决议)、分摊依据。这些不在系统(物业备查)。

情境 2:违规罚款

字段
bill_type OneTime
fee_type_id "罚款"(若有此 FeeType)
amount ¥100
备注 违规事由 + 处罚依据(管理规定第 X 条)

业务上要 业户书面确认(违规事实),否则业户可能投诉 / 拒付。

情境 3:跨期补开

字段
bill_type Periodic(若是月物业费的补开)
period 填实际期次(4 月)
amount 同正常月物业费
备注 "4 月物业费补开,原因 XXX"

业务人员需要:

  • 确认陈先生 4 月确实欠物业费(没有遗漏)
  • 与陈先生沟通(突然补开他可能困惑)

与周期账单 / 计量账单的对比

维度 周期账单(create-periodic-property-fee) 计量账单(create-meter-bill-auto) 手动账单(本场景)
触发 业务人员批量生成 抄表完成自动 业务人员单笔手工
数量 一次 100-1000 张 一次 N 张(对应 reading 数) 一次 1 张
金额来源 RatePlan + 房屋参数 RatePlan + 用量计算 业务人员手填
业务场景 月度固定收费 抄表后变动收费 临时收费 / 调整
sourceable null / 周期任务 MeterReading null
频率 每月 1 次 每月 1 次 不定时

常见问题

[!question] 手动建单和周期账单的 fee_type 重复怎么办? 例如本月已经有"5 月物业费"账单,业务人员又手工建一张同 fee_type 同期次的 → 数据库 unique 约束可能拦截(若有),否则会有两张并存。

预防:手动建单前确认是否已有同类账单。

[!question] 手动建单金额没限制吗? 系统层面无限制。业务上应有审核流程(高金额 > X 元 应主管审批,但当前系统不强制此审批流)。

[!question] 跨期补开的账单影响月度报表吗? 看报表的查询:

  • created_at(账单创建时间)→ 影响 5 月报表(实际是 5 月创建)
  • billing_period_start(账单期次)→ 影响 4 月报表

不同报表用不同维度。月度对账通常按期次。

[!question] 手动建单后业户拒付? 走标准流程:

  • 沟通 → 协商
  • 不接受 → suspend-bill 等争议解决
  • 调解失败 → 物业法务介入(走线下,系统不参与司法)

[!question] 业务人员误建一张账单怎么撤? 若立即发现:delete-bill-unpaid(Unpaid 无付款)。 若已发出:[void-paid-bill|作废]

异常分支

相关文档