仪表管理需求文档
===

**1. 流程图**
---

---

### [仪表管理-操作流程](https://pro.modao.cc/app/ea38650adb1b43bac2e9285f68cdc9dd352ba444)

```flow
st=>start: 创建仪表
cond1=>condition:  查看仪表
cond2=>condition: 抄表
op3=>operation: 编辑仪表
op4=>operation: 换表
op5=>operation: 仪表度数
e=>end: 实际行度

st->cond1(yes)
op5->e
op3->cond1
op4->cond2
cond1(yes)->cond2(yes)
cond1(no)->op3
cond2(yes)->op5
cond2(no)->op4
```

---

**2. 产品原型**
---

---

### [原型链接](https://pro.modao.cc/app/ea38650adb1b43bac2e9285f68cdc9dd352ba444)

涉及页面为：*住户表管理及其子页面*、*公共表管理及其子页面*

---

**3. 业务说明**
---

---

**1）新建仪表**

- **选择位置：**左侧楼栋结构信息决定了当前页面的内容，创建仪表之前需手动选择所要创建的仪表所在的具体位置（具体位置至少选择小区，楼栋，单元等信息可在创建页面进行修改）。

  ![住户列表](image/住户列表.png)

  - **创建仪表（住户表）：**

![创建仪表（住户表）](image/创建仪表（住户表）.png)

* 1.住户表管理功能下，创建仪表会默认创建住户表。

* 2.所属位置：会根据点击创建仪表时所查看的页面（具体房屋下，仪表查看页面）来自动填写，当没有具体的房屋位置时（只点击上级位置，未点击房屋），则继承小区、楼栋、单元信息，由使用者手动选择房间号。住户表位置需要精确到房间号。

  ![创建仪表（住户表）（所属位置选择）](image/创建仪表（住户表）（所属位置选择）.png)

* 3.表名称：表名称是仪表日常使用中展现的名称，需要保证小区级别的唯一性，推荐命名方式为手动输入：房间号+表类型+编号。系统不做自动命名或自动生成房屋号前缀。

* 4.倍数：倍数用以计算实际行度，默认倍数为1。

* 5.仪表回程：仪表回程非必填项，其中机械仪表一般会有最大读数，对大读数用于抄表进位计算。电子仪表可无最大读数。

* 6.初始度数：作为仪表的第一次读数，用以显示和计算后续抄表产生的实际行度。

* 7.计费模式：仅做属性判断标签，包含：抄表计费，预充值计费。

* **创建仪表（公共表）：**

  ![创建仪表（公共表）](image/创建仪表（公共表）.png)

* 1.公共表管理功能下，创建仪表会默认创建公共表。

* 2.所属位置：与住户表所属位置整体逻辑一致，但公共表位置的精确度级别为：小区、楼栋或单元。不可精确到房间。

* 3.分摊方式：分摊仅仅作为一个仪表属性判断标签。

* 4.下级表：下级表可以同时选择公共表和住户表，根据实际从属关系进行编辑。

**2）仪表筛选/查找**

* **住户表管理：**通过左侧小区楼栋列表进行选择，选择的小区、楼栋、单元或房屋在顶部展示，页面内展示属于主体范围内的所有仪表。仪表排列顺序优先根据更新时间倒叙排列（最近更新的仪表在前），时间一致时根据楼栋与房屋的排序依据进行排列，同房屋仪表根据创建时间先后再进行排序。

* **筛选仪表：**现在可通过两个维度进行仪表筛选。

* 1.更新时间维度，按照日期进行区间选择，筛选出时间区间内更新过读数的仪表。

  ![筛选（时间区间）](image/筛选（时间区间）.png)

* 2.表类型维度，按照水电表类型进行筛选。

  ![筛选（表类型）](image/筛选（表类型）.png)

**3）仪表信息查看/修改**
  ![仪表信息（缩略与详情）](image/仪表信息（缩略与详情）.png)

* **仪表信息列表缩略：**仪表管理页面默认查看列表缩略。
  * 1.表名称/表类型：表名称与创建仪表中的表名称一致，不存在系统自动加入房屋号前缀的情况。表类型以标签形式存在，当前只存在四种标签，两类：水表、电表、住户表、公共表。

    ![表属性](image/表属性.png)
  * 2.更新时间与当前读数：最近一次的抄表读数与抄表时间进行显示，时间格式为YYYY/MM/DD HH:MM:SS
  * 3.下级表（公共表）：公共表的表标签后可直接点击查看已经关联的下级表。

    ![关联仪表](image/关联仪表.png)
  * **仪表信息列表详情：**点击仪表列表缩略的空白处可展开仪表，同时只支持展开一个仪表详情。展开后按照时间倒叙排列（最近操作在前），记录抄表信息，其中换表操作用标签标注。默认展开最近六次的抄表信息，点击查看更多再展开六条记录，以此类推，无上限。
  * **仪表信息：**点击仪表名称可查看仪表信息弹窗。 

    ![仪表信息](image/仪表信息.png)
* **仪表信息编辑：**仪表信息弹窗可点击编辑，可对仪表的设置信息进行修改，修改原则与创建仪表一致，但已有读数的仪表无法设置初始度数与倍数。

  ![仪表编辑](image/仪表编辑.png)

**4）抄表/换表**

* **在线抄表：**列表缩略状态下可点击仪表的当前读数，点击后弹出抄表弹窗，填写表单完成抄表

  ![在线抄表](image/在线抄表.png)
* 1.当前读数：不可编辑，数据来源为最近的仪表读数，第一次抄表时的当前读数应为创建仪表时输入的初始读数。
* 2.实际行度：实际行度计算公式参考下面的字段说明公式。
* 3.上传凭证：凭证为图片上传，非必须。
* 4.抄表时间：时间记录格式为YYYY/MM/DD HH:MM:SS，系统默认根据弹窗弹出时间自动生成抄表时间。
* **在线换表：**换表与抄表在实际操作中属于同一状态下的衍生操作，换表中就同时完成了一次抄表（同理，创建仪表时的初始读数也可视为进行了一次抄表） 

  ![在线换表](image/在线换表.png)
* 1.所属位置，表名称：保留原表信息，不可更改。
  * 2.表编号：可变内容，进行唯一性检测，小区级别不可重复。
* 3.类型不可变，倍数可变，在换表时计算实际行度根据旧表倍数进行计算。
* 4.初始读数：新表初始度数作用与新建仪表保持一致，不参与和旧表读数间的行度计算。
* 5.换表体现：在仪表信息列表详情中，换表会以标签形态标注在抄表记录中。

  ![换表标签](image/换表标签.png)
* **抄表导出：**创建仪表按键下拉隐藏按键包含抄表导出

  ![抄表导出](image/抄表导出.png)
* 1.类型选择：选择表类型，仅可选择一种。
* 2.范围选择：与公共表选择下级表同类关联，可同时选择住户表与公共表同时导出。
* 3.导出模板：模板文件**抄表电子表格20190108131421**
* **模板文件：

  ![抄表导出（模板）](image/抄表导出（模板）.png)
* 1.文件名称：名称格式，**抄表电子表格+表格导出时间（时间精确到秒）**。表格内标题为**抄表电子表格，首行包括导出时间、导出表类型、导出表数量、导出操作人**。
* 2.表格内容（不可编辑）：小区、楼栋、房间号、表名称、表编号、表类型、最大读数、当前读数（最近一次抄表读数）、更新时间（最近一次抄表时间）这些数据自动生成，表格内无法编辑。
* 3.表格内容（可编辑）：最新读数（抄表数）、更新时间（手动填写，可只填写至日期，系统导入时默认补齐至日期0点）、操作员（需保持和系统内员工名称一致）。
* 4.表格内容（自动生成）：通过当前读数与最新读数进行行度计算，计算规则与行度计算公式一致。
* **抄表导入：**创建仪表按键下拉隐藏按键包含抄表导入，使用已经填写完成的抄表导出文件进行导入。

  ![抄表导入](image/抄表导入.png)
* 1.选择文件：选择本地文件进行导入。
* 2.重新选择：上传中与上传完成状态时可选择重新上传，自动打断当前的上传动作或数据对比状态。
* 3.数据对比：上传完成后系统自动进行数据对比，判断导入数据是否能成功录入，其中对比成功数据无误状态可直接完成导入操作。当数据错误时则需要在线表格预览，对错误数据进行查看，进而判断后续操作。
* 4.数据对比错误详情：页面待定。

---

**4. 字段说明**
---

| 字段名称   | 备注                                                                                                                                               | 是否必填 | 字段限制                                                     |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ---- | -------------------------------------------------------- |
| 所属位置   | 同时包含小区、楼栋、单元、房号等级别的位置信息，用以确认表与系统资产间的关系，其中住户表需精确到房号，公共表则可属于除房号外的任何一级。                                                                             | 是    | 住户表位置必包含字段：小区、楼栋、单元、房号。公共表位置最多包含三个字段：小区、楼栋（非必须）、单元（非必须）。 |
| 表名称    | 用以描述表所在位置及基础属性的名称，需保证唯一性（1.0中保证唯一性的方法是自动在表名称前加入所在房号，2.0中表名称不进行此方式）通过提示用户输入保证唯一性                                                                  | 是    | 支持文字、数字、符号、字母。最大支持12位                                    |
| 表编号    | 小区真实的仪表资产编号或者出厂时的产品编号（后续用来生成二维码或者用于资产管理）保证唯一性                                                                                                    | 是    | 支持数字、符号、字母。最大支持12位                                       |
| 表类型    | 当前仅有两种表类型：水表m³、电表KW·H                                                                                                                            | 是    | 水表m³、电表KW·H                                              |
| 表属性    | 表属性在创建时就已经选择（根据所属页面不同进行操作时就会区分），两种属性：住户表、公共表                                                                                                     | 是    | 住户表、公共表                                                  |
| 倍数     | 当前仪表的读数与实际用量之间的倍数关系（默认为1），倍数可选择：1、10、100、1000。如：小区总表的倍数是100，抄表读数后实际行度为抄表差值的100倍，而非两次抄表的差值                                                        | 是    | 1、10、100、1000                                            |
| 仪表回程   | 仪表的最大读数，仅在机械表中有最大值需求，超过后涉及到表重置计算（1.0有相同概念），而电子表无最大读数，可根据是否有最大读数判断是否自动重置表读数                                                                       | 否    | 最大支持8位数字（可使用小数点）                                         |
| 计费模式   | 仅做属性判断标签，包含：抄表计费、预充值计费                                                                                                                           | 是    | 抄表计费、预充值计费                                               |
| 初始度数   | 创建仪表时的基础读数                                                                                                                                       | 是    | 最大支持8位数字（可使用小数点）                                         |
| 抄表读数   | 抄表读数                                                                                                                                             | -    | 最大支持8位数字（可使用小数点）                                         |
| 当前读数   | 最近的读数信息                                                                                                                                          | -    | 最大支持8位数字（可使用小数点）                                         |
| 换表     | 在进行抄表操作时可同时进行换表的相关操作（线下实际的操作逻辑就是同时进行）                                                                                                            | -    |                                                          |
| 旧表最终读数 | 旧表在被更换时的最终读数或者推测读数（表损坏时可能会进行读数推测但不影响系统计算逻辑）                                                                                                      | 是    | 最大支持8位数字（可使用小数点）                                         |
| 新表初始读数 | 新表在被更换时的最初读数（可为0）                                                                                                                                | 是    | 最大支持8位数字（可使用小数点）                                         |
| 更新时间   | 每次操作都需要有精确到秒的时间记录                                                                                                                                | -    | 格式YYYY/MM/DD HH:MM:SS，时间根据抄表操作创建时间自动填写                   |
| 实际行度   | 本次抄表读数与上次读数的差值【计算公式：（本次读数-上次读数）倍数】，可为0，但不可为负数。在有最大读数的表下，当计算结果为负数时，根据最大值进行重置计算【计算公式：（最大值-上次读数+本次读数）倍数】，换表操作时显示当前读数为新表初始度数【计算公式：（旧表最终读数-上次读数）旧表倍数】 | -    | 计算得出最大支持12位数字                                            |
| 凭证     | 在抄表时可选择照片等方式进行凭证收集，非必填内容，根据小区管理自行规范                                                                                                              | 否    | 图片文件（jpg、png等）                                           |
| 操作员    | 当前操作的工作人员账号名称，系统自动记录。在进行抄表导入时，可根据表格填写的操作员进行自动录入                                                                                                  | -    |                                                          |
| 分摊方式   | 此分摊方式仅作为仪表属性标注，不影响实际的算法和算法相关的分摊                                                                                                                  | 是    |                                                          |
| 下级表    | 与此公共表相关的所有下级表，下级表可为住户表或者其他公共表（暂定），此关联关系作为分摊相关算法的数据来源                                                                                             | -    | 用量分摊、损耗分摊                                                |

## **5. 使用场景**

---

**1）创建仪表**

- **场景描述：**小区新建过程中首次创建仪表，或在小区运营中有新增加的仪表等情况进行操作，所有已经创建的仪表均为小区的固定资产，有唯一识别编号。

- **操作流程：**

**2）正常抄表**

- **场景描述：**小区在日常工作中，会进行在线抄表或者导出抄表。

- **操作流程：**

**3）修改仪表基础数据**

- **场景描述：**仪表录入发生错误时进行的操作，出现频率很小，错误仪表当前版本不可删除，仅仅可以部分修改。在此仪表未产生抄表数据情况下，所有仪表数据均可更改。产生抄表数据后，仅有部分数据可进行更改，可更改数据包括：所属位置、表名称、表编号、计费模式、分摊方式、仪表关联。其他字段均不可修改。

- **操作流程：**

**4）读数错误情况**

- **场景描述：**可能出现读数录入错误的情况，当前可对最近未生成账单的仪表读数进行删除，删除后不保留错误读数操作记录。已产生费用的仪表读数无法删除。

- **操作流程：**

**5）换表操作**

- **场景描述：**仪表进行更换或维修产生数据的重新计算时可进行换表操作，换表后依然在原有仪表的数据记录基础上继续记录。

- **操作流程：**
