Files
uniprop-manual/prop-acc/scenarios/meter/generate-bill-with-multiplier.md
2026-05-26 00:23:07 +08:00

7.6 KiB
Raw Permalink Blame History

title, aliases, tags, audience, status, sub_feature, last_review, code_version
title aliases tags audience status sub_feature last_review code_version
prop-acc · meter · 场景 - 工业表 10x 倍率生成账单
工业表账单
multiplier 计算
generate-bill-with-multiplier
场景-倍率表生成账单
场景
prop-acc
计量表
账单生成
倍率
业务人员
财务
抄表员
已发布 meter 2026-05-26 2026-05-22

场景:工业表 10x 倍率生成账单

商铺 / 集团表 / 三相工业表的物理表头只显示用量的 1/10 或 1/100,需要乘以倍率(multiplier)才是实际用量。系统在 consumption = (current - previous) × multiplier 公式中自动处理。

典型情境

[!example] 真实情境 嘉禾花园 1 楼商铺(中式餐厅)装的是三相工业电表(multiplier=10)。本月抄表:

  • 上月 reading.current_reading = 280
  • 本月 reading.current_reading = 308
  • 物理表头读数差 = 28

实际用电量 = 28 × 10 = 280 度(不是 28 度!)

按电费阶梯(0-200 度 0.8 元,200+ 度 1.0 元)算:

段 1:200 × 0.8 = 160 元
段 2:80 × 1.0 = 80 元
合计:        240 元

商铺老板看到账单 ¥240 / 280 度。

如果没有 multiplier:

consumption = (308 - 280) × 1 = 28 度
amount = 28 × 0.8 = 22.4 元 ❌

少收 ¥217.6,商铺白用 252 度电。物业必须用倍率算账,这是工业表的天然属性

系统流程

sequenceDiagram
    participant 抄表员
    participant Filament
    participant Calc[MeterBillCalculator]
    participant 数据库

    抄表员->>Filament: 录入 reading current=308(物理表头)
    Filament->>Filament: 查 meter.multiplier=10
    Filament->>Filament: 查 previous_reading=280(上月)
    Filament->>Filament: consumption = (308 - 280) × 10 = 280 度
    Filament->>数据库: 建 MeterReading(consumption=280)

    Note over 数据库: 后续 GenerateBills

    Filament->>Calc: calculate(consumption=280, ratePlan)
    Calc->>Calc: 阶梯算法 200*0.8 + 80*1 = 240
    Calc-->>Filament: 240
    Filament->>数据库: 建 Bill(amount=240)

抄表员视角(李师傅)

抄表录入

抄表员看到物理表头是 308(不是 3080),录入时填 308

[!warning] 抄表员不应自己乘倍率

错误做法:抄表员看到 308 + 知道倍率 10 → 录入 3080

后果:系统再乘一次 10 → consumption = (3080 - 2800) × 10 = 2800 度 → 收业户 2800 度电费 → 业户疯狂投诉

正确做法:严格录入物理表头数字(308),倍率由系统自动处理。

Form 上应显示 meter 的 multiplier 提醒抄表员:

表编号:E-COMMERCIAL-1
倍率:10x(工业表)
上次读数:280

本次读数:[___] (请录入物理表头数字)

与家用表的对比

维度 家用表(multiplier=1) 工业表(multiplier=10/100/...)
抄表员录入 表头数字 = 实际用量 表头数字 ≠ 实际用量
是否需要换算 不需要 需要(系统自动)
抄表员错误风险 (可能录乘 / 不乘 10)
业务培训 简单 需培训(说清楚"录原始数字")

业务人员视角

配置倍率

建表时 MeterForm.multiplier 字段填:

表类型 推荐 multiplier
家用单相电表 1
家用水表 1
三相工业电表 10(常见)
大型工业电表(高压侧) 100 / 1000
工业大流量水表 10 / 100

具体看表的物理铭牌 + 设计图纸。

倍率改了如何处理

[!warning] 倍率改动影响极大 multiplier 改了不会重算历史 reading 的 consumption(那些数据已经存了)。但会影响后续抄表

何时可改 multiplier:

  • 表是 is_active=true(退役表不可改,见 decommission-and-locking)
  • 没有任何已生成 Bill 的 reading(若有,改 multiplier 让历史 vs 现在的算法不一致,审计困难)

推荐做法:倍率配错 → 退役旧表 → 建新表用正确 multiplier(不走更换链,因为不是物理换表)。详见 decommission-without-replacement

业户视角(商铺老板)

您看到的账单

2026 年 5 月电费账单

用电量:280 度
   (本月表头读数 308,上月 280,差 28 × 倍率 10)

明细:
  0-200 度段:200 × 0.8 = 160 元
  201+ 度段:  80 × 1.0 = 80 元
合计:240 元

[!info] 账单展示倍率信息 强烈推荐账单 / Receipt 展示"原始读数 + 倍率 + 计算公式",让业户看明白:

  • 业户看到差 28 度,但收 240 元,会疑惑(单价怎么算?)
  • 展示"28 × 倍率 10 = 280 度,按 280 算"业户秒懂

商铺老板的特殊关注

业户疑问 应答
"为什么我家是工业表不是家用表?" 商铺用电量大,法规要求工业表
"倍率是物业定的吗?" 不是,是物理表的属性,出厂时定
"可以换成家用表吗?" 不能,商铺合规上必须用工业表

倍率与阶梯的叠加

倍率先算,得到 consumption;然后 consumption 走阶梯。两者完全独立、按顺序应用。

完整公式:

consumption = (current - previous) × multiplier      # 第 1 层
amount = sum(段 i 用量 × 段 i 单价)                  # 第 2 层(阶梯)
amount = clamp(amount, min, max)                     # 第 3 层(min/max 封顶)

详见 multiplier-and-tiered-pricing 完整说明。

不同 multiplier 表的算例

表类型 multiplier 表头读数差 consumption 单价 0.8 账单
家用 1 280 280 224 224
三相工业 10 28 280 224 224
大工业(高压侧) 100 2.8 280 224 224

同样 280 度,账单相同,只是物理表头数字大小不同。系统的 multiplier 字段把这层差异隐藏在算法里。

常见问题

[!question] multiplier 必须是整数吗? 不必须。decimal(10,4) 精度,支持 0.5 / 1.25 等小数。但 1.0 / 10.0 / 100.0 是市场常见的"整数倍率"。

[!question] 同一表的 multiplier 会随时间变吗? 物理上不会。表的物理参数(变压比)是出厂时确定的,使用过程中不变。

系统层面可改字段(若 is_active=true 且无 Bill,Policy 允许),但不推荐改 —— 历史与现在的算法不一致,审计困难。

[!question] 抄表员录入时如何区分"录物理读数"vs"录乘倍率后读数"? Form 上明确显示倍率+ 标注"请录入物理表头数字"。培训抄表员严格遵守。系统统一存物理表头数字。

[!question] 集抄系统推过来的数据是物理读数还是乘了倍率? 看集抄运营商。通常是物理读数(IoT 设备读表头,不知道倍率)。本系统接收时按 meter.multiplier 算 consumption。

如果集抄推已乘倍率的数据 → 集抄端降级处理(本系统 multiplier 应该设为 1,避免重复乘)。需对接时讲清楚。

[!question] 配置错倍率(应该 10 配成 1)会怎样? 系统按 multiplier=1 算 → consumption 缩小 10 倍 → 业户账单缩小 10 倍 → 物业损失收入(直到发现)。

发现后修复:

  • 改 multiplier=10(若 Policy 允许)
  • 修复历史已欠收(走"补开账单"业务流程,系统不直接支持)
  • 通知业户 + 退还 / 补收差额

异常分支

相关文档