vault backup: 2026-05-26 00:13:05

This commit is contained in:
Willie
2026-05-26 00:13:05 +08:00
parent 293a2d2685
commit 7987adb131
4 changed files with 577 additions and 5 deletions

View File

@@ -0,0 +1,153 @@
---
title: prop-acc · meter · 场景 - 单独新增一张表
aliases:
- 新增计量表
- 单录建表
- register-single-meter
- 场景-新增计量表
tags:
- 场景
- prop-acc
- 计量表
- 表管理
audience:
- 业务人员
status: 已发布
sub_feature: meter
last_review: 2026-05-26
code_version: 2026-05-22
---
# 场景:单独新增一张表
社区**已经初始化完成**(走过 [[init-new-community-batch]] 或老社区已有数据),后续个别新装一张表(新业户入住装表 / 旧业户加装电表分户 / 商铺新进驻装表),走**后台单录**而非批量。
## 典型情境
> [!example] 真实情境
> 嘉禾花园 12-3-501 业户陈先生最近**装修后想加装一个独立电表**(主表外的厨房专用电表,方便核算厨房电费)。物业财务王主管要在系统建这张新表。
## 业务人员视角
### 第 1 步:确认装表信息
向陈先生 / 抄表员李师傅核实:
- 房号 / 资产编号:12-3-501(对应 asset)
- 费用类型:电费(对应 FeeType)
- 物理表编号:E-501-K(物业自编,K 表示厨房)
- 倍率:1(普通家用单相表)
- 安装日期:今天(2026-05-26)
- **初始读数**:抄表员现场看物理表读数,假设 0(全新表)
### 第 2 步:打开后台
后台 → 计量表 → 列表 → 右上角 **"新建"** 按钮 → 进 `CreateMeter` 页面。
### 第 3 步:填表单(`MeterForm`)
| 字段 | 填什么 |
|---|---|
| **社区(community_id)** | 嘉禾花园 |
| **绑定房屋(asset_id)** | 12-3-501(下拉选)|
| **费用类型(fee_type_id)** | 电费(下拉选)|
| **表编号(code)** | `E-501-K` |
| **倍率(multiplier)** | 1.0 |
| **初始读数(initial_reading)** | 0.0 |
| **安装日期(installed_at)** | 2026-05-26 |
| **是否在役(is_active)** | ✅ 是(默认)|
| **替换上一代(replaced_meter_id)** | 留空(全新表,不是换表)|
| 备注 | "陈先生厨房分户表" |
### 第 4 步:提交
系统:
1. 校验 asset / fee_type 存在
2. 校验 code 在该社区不重复(若有 unique 约束)
3. 建 Meter 记录(`is_active=true`, `replaced_meter_id=null`)
4. **可选**:是否同时建一条 `initial_reading` 的 MeterReading?看 `CreateMeter` 实现 —— 若 form 有"初始读数"字段(目前应该有),`installed_at` 当天会建一条 `MeterReading(current_reading=0)` 作为起点,这样下次抄表算用量有 previous 可对照
### 第 5 步:启用 + 抄表
新表建好后,下次抄表周期就纳入正常流程(`MetersNeedingReadingListWidget` 会显示)。
## 系统流程
```mermaid
sequenceDiagram
participant 王主管
participant Filament
participant CreateMeter
participant 数据库
王主管->>Filament: ListMeters → 新建按钮
Filament->>CreateMeter: 渲染 form
王主管->>CreateMeter: 填字段 + 提交
CreateMeter->>数据库: 校验 asset / fee_type / code
CreateMeter->>数据库: 建 Meter(is_active=true)
alt form 含 initial_reading
CreateMeter->>数据库: 建 MeterReading(current=initial, source=manual, operated_by=王主管)
end
CreateMeter-->>Filament: 跳转 ViewMeter
Filament-->>王主管: 显示新表详情
```
## 与批量导入的对比
| 维度 | [[init-new-community-batch|批量导入]] | **单录(本场景)** |
|---|---|---|
| 触发场景 | 新社区接管 / 一次性大批量 | 个别新装 / 后续补建 |
| 数量级 | 100+ | 1 |
| UI | Excel 导入 | Filament `CreateMeter` 表单 |
| 时长 | 几分钟 / 小时 | 1-2 分钟 |
| 出错容忍 | 单行失败 / 部分行可独立处理 | 单条提交,错就改了再交 |
| 业务人员熟练度 | 需熟悉 Excel 模板 | 任何人填表都行 |
## 常见问题
> [!question] 业主已经有主电表,加装分表合规吗?
> **业务问题**,看物业政策 / 法律法规:
>
> - 国家电网通常**禁止**业主自己装"二次表"用于电费分摊
> - 但**物业内部**核算可以(例如商铺租户共用一个主表,物业按业主装的分表算各自费用)
>
> 系统层面**只管记录**,不判断合规性。
> [!question] 同一房屋有主表也有分表怎么办?
> 系统允许同一 `asset_id` + 同一 `fee_type_id` 下有多张表(不像 prepaid 的"一户一账"约束)。每张表独立抄表 + 独立账单。
>
> 但**业务上要清楚谁付谁的钱**:
> - 主表账单给业主
> - 分表账单给租户 / 厨房承包人(看场景)
>
> 这要业务方明确**账单收方**,系统按 `community_asset_users` 关系找业户。
> [!question] 单录时填错 code 怎么办?
> 表创建后可走 `EditMeter`(`is_active=true` 时允许)修改。但若**已抄过表 / 生成 Bill**,改 code 会让"历史照片上的表号"与"系统 code"对不上 → 强烈不推荐改。详见 [[decommission-and-locking]]"为什么退役表不能改"段。
> [!question] 单录后没抄表就发现错了能删吗?
> 看 `MeterPolicy::delete()`:**仅允许"已退役 + 无任何读数"**的表被删。
>
> 处理流程:
> 1. 先退役表(`is_active=false`, `decommission_reason=Removed`)
> 2. 走删除(若 Policy 允许 + 没读数)
> 3. 重新建正确的表
>
> 详见 [[decommission-and-locking]]。
> [!question] 单录的表如何同步给抄表员?
> `MetersNeedingReadingListWidget` 会自动显示新表(下个抄表周期)。无需手工通知。
## 异常分支
- 大批量 → [[init-new-community-batch]]
- 换表(旧表退役 + 新表建)→ [[replace-broken-meter]]
- 错了删表 → [[decommission-without-replacement]]
## 相关文档
- [[meter-vs-meter-reading]]
- [[init-new-community-batch]]
- [[replace-broken-meter]]
- [[decommission-and-locking]]