Files
uniprop-manual/prop-acc/scenarios/meter/read-single-meter-manual.md
2026-05-26 00:18:06 +08:00

6.8 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 · 场景 - 单张表后台手动录入
手动抄表单录
单张表录入
read-single-meter-manual
场景-单张表手动抄表
场景
prop-acc
计量表
抄表
业务人员
抄表员
已发布 meter 2026-05-26 2026-05-22

场景:单张表后台手动录入

抄表员单张表录入读数。最基础的抄表方式 —— 适合小规模物业 / 个别补抄 / 集抄掉线的兜底。

典型情境

[!example] 真实情境 嘉禾花园抄表员李师傅本月集抄系统有 5 户掉线(IoT 表故障 / 信号不好)。这 5 户他亲自上门读表,然后回办公室后台单条录入。

本场景:其中一户(张阿姨 12-3-501 的电表 E-501,本月读数 5,280)。

抄表员视角

第 1 步:现场读表

到张阿姨家:

  1. 找到电表(通常装在玄关 / 门外配电箱)
  2. 看清表头数字:5280
  3. 拍照存证(photo_url,见 reading-source-and-photo-proof + read-with-photo-proof)
  4. 记录(写在抄表本子上或手机备忘)

第 2 步:回办公室录入

打开手机 App / 浏览器后台 → 计量表 → 找 E-501 → 进 ViewMeter → 滚动到下方"抄表读数"(MeterReadingsRelationManager)→ 点 "新增" 按钮。

替代路径:抄表员手机 App 直接现场录入,无需回办公室。当前若有此 App 走集成接口,无此 App 走后台。

第 3 步:填表单

字段 填什么
抄表日期(read_at) 2026-05-26(默认今天)
当前读数(current_reading) 5280(物理表头数字)
来源(source) manual(默认)
拍照(photo_url) 上传现场照片(若有要求)
操作员(operated_by) 自动填李师傅(当前登录用户)
备注(memo) 选填,如 "集抄掉线手动补抄"

[!info] previous_reading 不用填 系统自动从该 meter 最近一条 reading 取(或从 Meter.initial_reading 取)作为 previous,自动算 consumption = (current - previous) × multiplier

例:上次抄表 5050 → previous=5050 → consumption = (5280 - 5050) × 1 = 230 度

第 4 步:提交

系统:

  1. 校验 meter.is_active=true(退役表不能抄,详见 decommission-and-locking)
  2. 校验 current_reading >= previous_reading(若有此守护;否则即"读数倒走"异常,见 exception-high-consumption 相关)
  3. 算 consumption
  4. 建 MeterReading(bill_id=null,即未生成账单)
  5. (可选)若配置了"抄表即生成账单",自动调 GenerateBillsFromMeterReadingsAction(详见 bill-generation-pipeline)

提交后跳回 ViewMeter,新 reading 显示在列表第一条。

业务人员视角

业务人员通常不直接抄表,但会做:

  • 审核抄表员录入的数据(看高用量异常,见 exception-high-consumption)
  • 生成账单(批量,月底统一,走 GenerateBillsFromMeterReadingsAction)
  • 核对抄表完成率(MetersNeedingReadingListWidget)

系统流程

sequenceDiagram
    participant 李师傅[抄表员]
    participant Filament
    participant MeterReadingsRelationManager
    participant 数据库

    Note over 李师傅: 现场读表 5280

    李师傅->>Filament: ViewMeter(E-501) → 新增 reading
    Filament->>MeterReadingsRelationManager: 渲染 form
    李师傅->>MeterReadingsRelationManager: 填 current=5280 + 上传照片 + 提交
    MeterReadingsRelationManager->>数据库: 校验 meter.is_active=true
    MeterReadingsRelationManager->>数据库: 查 previous_reading(上次 5050)
    MeterReadingsRelationManager->>数据库: 算 consumption=(5280-5050)*1=230
    MeterReadingsRelationManager->>数据库: 建 MeterReading(source=manual, operated_by=李师傅, photo_url, bill_id=null)
    Filament-->>李师傅: 显示新 reading 230 度

业户视角

业户无感知 —— 张阿姨可能根本不知道李师傅上门读了表。

下个月物业账单出来,显示"5 月电费:用电 230 度,¥XXX",业户看明白即可。如果有异议 → 物业拿出 photo_url 照片证明。

何时用本场景

场景 用本场景?
集抄系统正常运行 read-via-iot-remote-source
集抄系统某户掉线 个别补抄
小规模物业未上集抄(全靠人工) 但建议升级到 [read-batch-via-excel-import]
抄表数据需要事后修正 Reading 不可改,见 exception-readings-locked-after-bill
业户家暂时无人,无法抄 抄表员标"未抄",月底再补

常见问题

[!question] 读数倒走(current < previous)怎么办? 看 Form 是否有守护。若允许提交:系统建 reading,consumption 是负数 → 后续生成 Bill 时 Calculator 可能抛错 / 给 0 / 给 min_amount。

业务上读数倒走通常意味着:

[!question] 读完一户表才发现没拍照怎么办? 看物业政策严格度:

  • 必须拍照:回去补拍 → 上传(理论上事后照片也是凭据,但不如当场)
  • 建议拍照:本次录入时备注"未拍照" → 业户事后无异议则 OK

长期不拍照 = 业户争议时无凭证 = 物业被动。

[!question] 抄表日期填错了能改吗? Reading 不可改(decommission-and-locking 第 2 锁)。若 read_at 填错且没生成 Bill → 见 Policy 是否允许删 + 重建。若已生成 Bill → 复杂,走作废 Bill 流程(exception-readings-locked-after-bill)。

预防:Form 默认带入今天日期,改之前确认。

[!question] 一次录多张表(几十户)用单录效率太低? 是的。read-batch-via-excel-import 批量导入read-via-iot-remote-source IoT 自动。本场景适合 1-10 张表的个别情况。

[!question] 录入后立即生成 Bill 吗? 看配置:

  • 抄表即生成 Bill:Form 提交后自动调 GenerateBillsFromMeterReadingsAction(每条 reading 立即变 Bill)
  • 月底批量生成 Bill:Form 提交后只建 reading,月底业务人员统一触发批量生成

当前实现看具体 Filament 配置,两种都支持。

异常分支

相关文档