diff --git a/prop-acc/index.md b/prop-acc/index.md index 4e521c7..e224b19 100644 --- a/prop-acc/index.md +++ b/prop-acc/index.md @@ -26,7 +26,7 @@ last_review: 2026-05-25 | **一次性收费** | IC 卡、装修证、泳票等单次购买 | [adhoc 知识地图](maps/adhoc-knowledge-map.md) | ✅ 28 篇 | | **保证金** | 装修押金等代管资金,完工后退还 | [deposit 知识地图](maps/deposit-knowledge-map.md) | ✅ 25 篇 | | **预存款** | 业户预存,自动抵扣月度账单 | [prepaid 知识地图](maps/prepaid-knowledge-map.md) | ✅ 23 篇 | -| **计量表** | 水表/电表/燃气表,抄表生成账单 | [meter 知识地图](maps/meter-knowledge-map.md) | 🟡 6 概念已完成,14 场景待补 | +| **计量表** | 水表/电表/燃气表,抄表生成账单 | [meter 知识地图](maps/meter-knowledge-map.md) | ✅ 21 篇 | | **账单** | 周期性账单 + 计量账单 | _待补_ | 🚧 | | **收款订单** | 一次收款的支付方式、银行账户记录 | _待补_ | 🚧 | | **收据** | 成功收款后生成的凭证 | _待补_ | 🚧 | diff --git a/prop-acc/maps/knowledge-map.md b/prop-acc/maps/knowledge-map.md index dac166c..da429a4 100644 --- a/prop-acc/maps/knowledge-map.md +++ b/prop-acc/maps/knowledge-map.md @@ -22,7 +22,7 @@ last_review: 2026-05-25 | adhoc | 一次性收费 | IC 卡、装修证、泳票等单次购买 | [adhoc 知识地图](adhoc-knowledge-map.md) | ✅ 25 场景 + 3 概念 | | prepaid | 预存款 | 业户预存,自动抵扣月度账单 | [prepaid 知识地图](prepaid-knowledge-map.md) | ✅ 16 场景 + 6 概念 + 1 地图 = 23 篇 | | deposit | 保证金 | 装修押金等代管资金,完工后退还 | [deposit 知识地图](deposit-knowledge-map.md) | ✅ 18 场景 + 6 概念 + 1 地图 = 25 篇 | -| meter | 计量表 | 水表/电表/燃气表,抄表生成账单 | [meter 知识地图](meter-knowledge-map.md) | 🟡 6 概念已完成,14 场景待补 | +| meter | 计量表 | 水表/电表/燃气表,抄表生成账单 | [meter 知识地图](meter-knowledge-map.md) | ✅ 14 场景 + 6 概念 + 1 地图 = 21 篇 | | billing | 账单 | 周期性账单 + 计量账单 | _待补_ | 🚧 | | payment-order | 收款订单 | 一次收款的支付方式、银行账户记录 | _待补_ | 🚧 | | receipt | 收据 | 成功收款后生成的凭证 | _待补_ | 🚧 | diff --git a/prop-acc/maps/meter-knowledge-map.md b/prop-acc/maps/meter-knowledge-map.md index fe78fe2..2d1eb0f 100644 --- a/prop-acc/maps/meter-knowledge-map.md +++ b/prop-acc/maps/meter-knowledge-map.md @@ -60,35 +60,33 @@ code_version: 2026-05-22 | [抄表来源与拍照存证](../concepts/meter/reading-source-and-photo-proof.md) | `manual` 手抄 vs `remote` 集抄 + `photo_url` 凭证,业户争议时的证据 | | [表退役与读数锁定](../concepts/meter/decommission-and-locking.md) | 5 种退役原因 + Reading 双锁机制(创建即不可改,有 Bill 更不可改) | -## 场景手册(14 篇,**待补充 ✋**) - -> 🚧 概念骨架已就位,场景文档将在下一轮(轮 2)产出。预定结构如下。 +## 场景手册(14 篇,**全部完成 ✅**) ### 📦 表管理(4 篇) -- 🚧 [新社区批量建表 + 初始读数 Excel 导入](../scenarios/meter/init-new-community-batch.md) -- 🚧 [单独新增一张表(后台单录)](../scenarios/meter/register-single-meter.md) -- 🚧 [换表:旧表故障/退役,新表带 -R1 后缀,初始读数继承](../scenarios/meter/replace-broken-meter.md) -- 🚧 [退役不换表(房屋拆除 / 业户永久弃用)](../scenarios/meter/decommission-without-replacement.md) +- ✅ [新社区批量建表 + 初始读数 Excel 导入](../scenarios/meter/init-new-community-batch.md) +- ✅ [单独新增一张表(后台单录)](../scenarios/meter/register-single-meter.md) +- ✅ [换表:旧表故障/退役,新表带 -R1 后缀,初始读数继承](../scenarios/meter/replace-broken-meter.md) +- ✅ [退役不换表(房屋拆除 / 业户永久弃用)](../scenarios/meter/decommission-without-replacement.md) ### 📊 抄表(4 篇) -- 🚧 [单张表后台手动录入](../scenarios/meter/read-single-meter-manual.md) -- 🚧 [一次导入整月所有读数(Excel 批量)](../scenarios/meter/read-batch-via-excel-import.md) -- 🚧 [集抄系统自动推送(`source=remote`)](../scenarios/meter/read-via-iot-remote-source.md) -- 🚧 [抄表拍照存证(物理表头照片)](../scenarios/meter/read-with-photo-proof.md) +- ✅ [单张表后台手动录入](../scenarios/meter/read-single-meter-manual.md) +- ✅ [一次导入整月所有读数(Excel 批量)](../scenarios/meter/read-batch-via-excel-import.md) +- ✅ [集抄系统自动推送(`source=remote`)](../scenarios/meter/read-via-iot-remote-source.md) +- ✅ [抄表拍照存证(物理表头照片)](../scenarios/meter/read-with-photo-proof.md) ### 💰 账单生成(3 篇) -- 🚧 [阶梯水电价生成账单(progressive 累进算例)](../scenarios/meter/generate-bill-tiered-pricing.md) -- 🚧 [工业表 10x 倍率生成账单](../scenarios/meter/generate-bill-with-multiplier.md) -- 🚧 [单笔账单上下限封顶(防异常用量爆账)](../scenarios/meter/generate-bill-min-max-cap.md) +- ✅ [阶梯水电价生成账单(progressive 累进算例)](../scenarios/meter/generate-bill-tiered-pricing.md) +- ✅ [工业表 10x 倍率生成账单](../scenarios/meter/generate-bill-with-multiplier.md) +- ✅ [单笔账单上下限封顶(防异常用量爆账)](../scenarios/meter/generate-bill-min-max-cap.md) ### 🛡️ 异常 / 审计(3 篇) -- 🚧 [高用量异常(漏水 / 电器故障),`HighConsumptionReadingsListWidget` 预警](../scenarios/meter/exception-high-consumption.md) -- 🚧 [已生成 Bill 的 Reading 锁定,要修正需作废 Bill](../scenarios/meter/exception-readings-locked-after-bill.md) -- 🚧 [待抄表清单 + 月度抄表完成率(`MetersNeedingReadingListWidget`)](../scenarios/meter/audit-meters-needing-reading.md) +- ✅ [高用量异常(漏水 / 电器故障),`HighConsumptionReadingsListWidget` 预警](../scenarios/meter/exception-high-consumption.md) +- ✅ [已生成 Bill 的 Reading 锁定,要修正需作废 Bill](../scenarios/meter/exception-readings-locked-after-bill.md) +- ✅ [待抄表清单 + 月度抄表完成率(`MetersNeedingReadingListWidget`)](../scenarios/meter/audit-meters-needing-reading.md) ## 跨域引用 @@ -129,6 +127,9 @@ code_version: 2026-05-22 --- -> [!info] 概念已完成,场景待补 -> 本轮(轮 1)产出:6 个概念 + 本子模块地图 + 域总图更新。 -> 下一轮(轮 2)产出:14 个场景文档,基于本知识地图骨架填充。 +> [!success] meter 子模块:6 概念 + 14 场景 + 1 知识地图 = **21 篇完成** +> +> 写作日期:2026-05-26 +> 对应代码版本:2026-05-22(详见 `packages/prop-acc/issue.md` Q5 段) +> +> 如果发现遗漏的场景或需要补充的细节,告诉我,可以单独补充新文档。 diff --git a/prop-acc/scenarios/meter/audit-meters-needing-reading.md b/prop-acc/scenarios/meter/audit-meters-needing-reading.md new file mode 100644 index 0000000..17bed48 --- /dev/null +++ b/prop-acc/scenarios/meter/audit-meters-needing-reading.md @@ -0,0 +1,261 @@ +--- +title: prop-acc · meter · 场景 - 待抄表清单 + 月度抄表完成率 +aliases: + - 待抄表清单 + - 抄表完成率 + - audit-meters-needing-reading + - MetersNeedingReadingListWidget + - 场景-待抄表审计 +tags: + - 场景 + - prop-acc + - 计量表 + - 审计 +audience: + - 业务人员 + - 财务 + - 抄表员 +status: 已发布 +sub_feature: meter +last_review: 2026-05-26 +code_version: 2026-05-22 +--- + +# 场景:待抄表清单 + 月度抄表完成率 + +物业**月底**核对:本月**应抄**多少张表(在役表数)vs **已抄**多少张(本月有 reading 的表)。差额 = **待抄表清单**(可能是抄表员漏抄 / 集抄掉线)。`MetersNeedingReadingListWidget` 在 `MeterDashboard` 实时显示。 + +## 典型情境 + +> [!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 | 多次上门 / 与业户约时间 / 估算用量(罕见) | + +### 处理流程 + +```mermaid +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 大概: +> +> ```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" = 待抄 +> - "上次抄表日期久远" = 优先级高 + +## 报表 / 周报 + +王主管月初出报告(给物业总经理 / 财务总监): + +```markdown +# 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|GenerateBills]] 对新 reading 生成 Bill。已有 Bill 不受影响。 + +## 升级机会(待补) + +`MetersNeedingReadingListWidget` 当前简版,可升级为: + +- **更精准的"待抄"判定**(按抄表周期,不一定按月) +- **完成率趋势图**(月度趋势线) +- **抄表员效率排名**(谁抄得快 / 准) +- **预警机制**(月底前 7 天若完成率 < 90% 自动告警) + +## 异常分支 + +- 高用量预警(完成抄表后)→ [[exception-high-consumption]] +- 已生成 Bill 的 reading 错(本场景兜底)→ [[exception-readings-locked-after-bill]] +- 集抄系统 → [[read-via-iot-remote-source]] +- 单录补抄 → [[read-single-meter-manual]] + +## 相关文档 + +- [[bill-generation-pipeline]] +- [[exception-high-consumption]] +- [[exception-readings-locked-after-bill]] +- [[read-via-iot-remote-source]] +- [[read-single-meter-manual]] +- [[../deposit/audit-monthly-deposit-balance]](类似月度对账模式)