Files
uniprop-manual/prop-acc/scenarios/meter/audit-meters-needing-reading.md
Willie 92f3c6698e meter 子模块 · 轮 2:14 场景 + 知识地图收尾
写 14 个场景到 prop-acc/scenarios/meter/,覆盖 4 类业务:

📦 表管理(4):
- init-new-community-batch(新社区批量建表 + 初始读数 Excel 导入,
  走 MeterInitializationImporter + BaseImporter chunk rollback)
- register-single-meter(单独新增一张表,陈先生厨房分户表)
- replace-broken-meter(换表场景,旧表 5000 → 新表 -R1 后缀 + initial 5000 继承,
  ReplaceMeterAction 完整流程)
- decommission-without-replacement(退役不换表,3 种典型情境:
  房屋拆除 / 商铺撤店 / 法定年限到)

📊 抄表(4):
- read-single-meter-manual(后台单录,李师傅集抄掉线补抄)
- read-batch-via-excel-import(MeterReadingsImporter + 模板下载流程 +
  双义列名 silent corruption 已知风险)
- read-via-iot-remote-source(集抄系统对接,API + 防重放 + 与 deposit/prepaid 集成)
- read-with-photo-proof(物理表头照片,业户争议时关键凭证)

💰 账单生成(3):
- generate-bill-tiered-pricing(progressive 累进算法完整算例 35 吨水的三段计算,
  对比 full-tier 简陋实现)
- generate-bill-with-multiplier(工业表 multiplier=10 算例 + 抄表员录入注意事项)
- generate-bill-min-max-cap(漏水 max 封顶 + 零用量 min 兜底 + 正常范围三情境)

🛡️ 异常/审计(3):
- exception-high-consumption(HighConsumptionReadingsListWidget 预警 +
  分级处置 + 完整排查流程)
- exception-readings-locked-after-bill(双锁机制下的修正流程,当前手工 +
  未来 VoidBillAction 设计目标态,issue.md Q5 待补)
- audit-meters-needing-reading(MetersNeedingReadingListWidget +
  月度完成率 99% 目标 + 月度报告模板)

每篇结构:典型情境 → 业户/抄表员/业务人员视角 → 系统流程(mermaid)→
对比表 / 算例 → 常见问题 → 异常分支 → 相关文档(WikiLinks)。

meter 模块特性在场景中持续强调:
- 物理硬件维度(非抽象账户)
- 不直接产 Receipt(走 Bill 中转)
- 三层业务分层(Calculator + Service + Action)
- 双锁机制(创建即不可改 + 有 Bill 更严)
- 抄表来源 + 拍照存证 + 集抄对接
- progressive 累进 vs full-tier 简陋实现的设计正确性
- 倍率 + 阶梯 + min/max 三层叠加算法

收尾:
- prop-acc/maps/meter-knowledge-map.md:14 场景全部 ,加完成 callout
- prop-acc/maps/knowledge-map.md:meter 行状态改 " 21 篇"
- prop-acc/index.md:同步

meter 子模块完整覆盖:6 概念 + 14 场景 + 1 知识地图 = 21 篇。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 00:31:08 +08:00

7.8 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 · meter · 场景 - 待抄表清单 + 月度抄表完成率
待抄表清单
抄表完成率
audit-meters-needing-reading
MetersNeedingReadingListWidget
场景-待抄表审计
场景
prop-acc
计量表
审计
业务人员
财务
抄表员
已发布 meter 2026-05-26 2026-05-22

场景:待抄表清单 + 月度抄表完成率

物业月底核对:本月应抄多少张表(在役表数)vs 已抄多少张(本月有 reading 的表)。差额 = 待抄表清单(可能是抄表员漏抄 / 集抄掉线)。MetersNeedingReadingListWidgetMeterDashboard 实时显示。

典型情境

[!example] 真实情境 5 月 28 日王主管打开 MeterDashboard,看 MetersNeedingReadingListWidget:

  • 嘉禾花园在役表 1,200 张
  • 本月已抄 1,150 张
  • 待抄 50 张

分析:

  • 30 张:集抄掉线(source=remote 应自动推但没推)
  • 15 张:抄表员遗漏(手抄区域漏了)
  • 5 张:业户家无人无法入户读表

5/30 截止前必须补齐(否则当月账单缺漏)。

业务人员视角

Widget 显示

MetersNeedingReadingListWidget(MeterDashboard):

内容
业户 / 资产 房号 + 业户姓名
表编号 meter code
费用类型 水/电/燃气
上次抄表日期 上月 read_at
抄表来源 manual / remote(看历史)
状态 未抄 / 部分缺漏
操作 链接到该 meter 的录入入口

排序:按上次抄表日期升序(最久没抄的优先,可能问题最大)。

完成率计算

本月完成率 = 本月已抄表数 / 在役表总数
        = 1150 / 1200
        = 95.8%

业务上通常目标 > 99%(漏抄太多说明流程有问题)。

分级处置

待抄类型 数量 处置
集抄掉线 30 联系集抄运营商 + 抄表员现场补抄
抄表员漏抄 15 抄表员立即补抄
业户无人 5 多次上门 / 与业户约时间 / 估算用量(罕见)

处理流程

flowchart TD
  A[Widget 显示 50 张待抄] --> B{分类}

  B -->|集抄掉线 30 张| C[联系集抄运营商]
  C --> D{原因}
  D -->|网关故障| E[运营商修复 → 重推数据]
  D -->|个别表故障| F[抄表员现场补抄 + 走 replace-broken-meter]

  B -->|抄表员漏抄 15 张| G[立即补抄]

  B -->|业户无人 5 张| H[多次上门 / 约时间]
  H --> I{约不上}
  I -->|是| J[估算用量 / 用 min_amount 兜底 / 延后处理]
  I -->|否| G

  E --> K[完成率回升]
  F --> K
  G --> K

月度执行清单

每月最后一周(25-30 号),业务人员清单:

  • 25 号:看 Widget,记录待抄数 + 分类
  • 26-28 号:跟进集抄运营商 + 抄表员补抄
  • 29 号:再看 Widget,核对剩余待抄
  • 30 号:截止前完成 99%+,剩余的特殊处理
  • 月初(1 号):看完成率报告 + 触发账单生成

抄表员视角(李师傅)

自己的清单

抄表员手机 App 上显示本月分配的清单(类似 widget 但只显示自己负责的区域)。

每天进度:

  • 上午:看清单 + 规划路线
  • 现场抄表 + 拍照 + 录入
  • 下午回办公室:补录 / 同步

完成度自我管理。月底向王主管报告:"本月我负责的 X 张表已完成 Y 张,剩 Z 张是 [原因] 需 [协助]"。

MetersNeedingReadingListWidget 实现

[!info] 当前实现的逻辑

SQL 大概:

-- 在役表里,本月没有 reading 的
SELECT m.*, MAX(r.read_at) AS last_read_at
FROM acc_meters m
LEFT JOIN acc_meter_readings r ON r.meter_id = m.id
WHERE m.is_active = true
  AND m.community_id = ?
  -- 本月起没有 reading
  AND m.id NOT IN (
    SELECT meter_id FROM acc_meter_readings
    WHERE read_at BETWEEN '2026-05-01' AND '2026-05-31 23:59:59'
  )
GROUP BY m.id
ORDER BY last_read_at ASC;

关键:

  • 只看在役表(退役表 is_active=false 不算)
  • "本月没 reading" = 待抄
  • "上次抄表日期久远" = 优先级高

报表 / 周报

王主管月初出报告(给物业总经理 / 财务总监):

# 2026 年 5 月 嘉禾花园抄表完成率报告

## 总览
- 在役表:1,200 张
- 本月已抄:1,200 张(目标 99%,实际 100%)
- 完成率:100% ✅

## 抄表来源分布
- 集抄(remote):1,160 张(96.7%)
- 手抄(manual):40 张(3.3%)
  - 集抄掉线补抄:30 张
  - 业户无人后多次上门:10 张

## 异常事件
- 集抄掉线高峰:5/25 一天 30 张(网关故障 4 小时,运营商已修)
- 单户长期无人:王先生(15-7-203),已联系成功 + 补抄

## 趋势
- 4 月完成率 99.8%(漏 2 张次月补)
- 5 月完成率 100%(全部当月完成)
- 集抄稳定性提升(运营商升级了网关)

## 建议
- 与集抄运营商签更严的 SLA(网关掉线 < 1 小时)
- 给抄表员增加"无人户备份方案"(预约 + 业户授权代抄)

业户视角

业户通常不感知这个审计动作。极少数情况:

业户场景 业户感知
业户无人导致漏抄,下月补 收到的下月账单可能比往常高(两个月用量)
集抄掉线导致补抄 物业可能上门 / 微信问"麻烦看下您家水表读数发我下"
长期补不上 物业按"平均月用量"估算账单(业户可能不爽)

与其他审计的对比

审计场景 关注什么 频率
本场景(待抄表) 月度抄表完成率 月度
[[exception-high-consumption 高用量预警]] 异常用量预防
[[../deposit/audit-monthly-deposit-balance 押金月度对账]] 账面 vs 银行平衡
[[../prepaid/audit-low-balance-and-overdue 预存款低余额]] 业户预存款健康度

各模块审计频率与关注点不同,本场景是 meter 模块的最重要月度审计

常见问题

[!question] 完成率 < 95% 的常见原因?

  • 集抄设备大面积故障
  • 抄表员人手不足
  • 业户长期无人 / 拒绝抄表
  • 系统 bug(meter 状态错乱)

长期完成率低 → 升级集抄 / 改流程 / 加人手。

[!question] 漏抄的表下月一起算可以吗? 可以,但业户体验差(账单突然翻倍)。推荐:

  • 当月尽量补齐
  • 实在补不齐 → 让业户自报读数(业务上接受,需核对)
  • 估算用量(罕见,看物业政策)

[!question] 业户长期无人怎么办?

  • 多次上门(2-3 次)
  • 业户授权代抄(物业拿钥匙 / 业户邻居代抄)
  • 估算用量(按往月平均算)
  • 长期(> 6 个月)无人 → 标记为"特殊处理户",月度估算 / 等业户回来再补

[!question] 集抄运营商频繁掉线,物业如何制约? 合同 SLA:

  • 集抄运营商承诺 99% 在线率
  • 违约罚款(掉线超 X 小时罚 Y 元)
  • 严重违约 → 解约换供应商

[!question] 漏抄但已经生成账单(只是少了 N 户)能补充生成吗? 可以。补抄 → 录 reading → 触发 bill-generation-pipeline 对新 reading 生成 Bill。已有 Bill 不受影响。

升级机会(待补)

MetersNeedingReadingListWidget 当前简版,可升级为:

  • 更精准的"待抄"判定(按抄表周期,不一定按月)
  • 完成率趋势图(月度趋势线)
  • 抄表员效率排名(谁抄得快 / 准)
  • 预警机制(月底前 7 天若完成率 < 90% 自动告警)

异常分支

相关文档