# 公式库
######版本：V0.0.1

本文档按各个资产进行公式整理，用于绘管家对应资产的费用计算。

## 名词定义
* __判断变量__：取值为`布尔`类型，当该值为`true`时，表示关联的资产应当收取此项费用；为`false`时表示关联的资产不收取此项费用。
* __计算变量__：参与费用计算公式计算的变量，例如__房屋面积__参与__物业服务费__的计算。
* __阶梯价格__：不同计算变量在不同区间的单价不一样，类似阶梯逐级上升，例如阶梯电费。
* __折扣__：对计算的结果进行打折处理，取值范围为`[0,1]`，其中1对应100%，当折扣小于1时，与原费用的差额计为__减免金额__。
* __按房屋分摊倍数分摊__：公摊费用分摊方式的一种，此项费用按照关联的房屋的分摊倍数（大多为1）进行平均分摊。
* __据实分摊__：公摊费用分摊方式的一种，此项费用按照关联仪表的实际行度多少进行分摊，即住户仪表行度越大，分摊费用越多。
* __按房屋面积分摊__：公摊费用分摊方式的一种，此项费用按照关联的房屋面积进行分摊。
* __一次性费用__：该费用仅收取一次，如装修垃圾费。

## 房屋
房屋涉及到的费用有物业服务费，装修垃圾转运费。各项费用常见公式如下：

* 物业服务费：

```
物业服务费(F) = 房屋面积(A) * 计费单价(P)
```

* 装修垃圾转运费

```
装修垃圾转运费(F) = 房屋面积(A) * 计费单价(P)
```

## 电表
电表一般按照行度进行计费，部分地区实行阶梯价格，不按阶梯计价的计算方式如下：

```
电费(F) = 电表行度(R) * 计费单价(P)
```

阶梯计费的费用计算方式如下，假设最大价格阶梯为P4，最小阶梯为P1，共4级阶梯：

```php
if 电表行度 <= P1
   	阶梯费用 = 电表行度 * 计费单价P1
else if 电表行度 <= P2
	阶梯费用 = P1 * 计费单价P1 + (电表行度 - P1) * 计费单价P2
else if 电表行度 <= P3
	阶梯费用 = P1 * 计费单价P1 + (P2 - P1) * 计费单价P2 + (电表行度 - P2) * 计费单价P3
else
	阶梯费用 = P1 * 计费单价P1 + (P2 - P1) * 计费单价P2 + (P3 - P2) * 计费单价P3 + (电表行度 - P3) * 计费单价P4
endif
```

## 水表
水表一般按照行度进行计费，部分地区实行阶梯价格，不按阶梯计价的计算方式如下：

```
水费(F) = 水表行度(R) * 计费单价(P)
```

阶梯计费的费用计算方式如下，假设最大价格阶梯为P4，最小阶梯为P1，共4级阶梯：

```php
if 水表行度 <= P1
   	阶梯费用 = 水表行度 * 计费单价P1
else if 水表行度 <= P2
	阶梯费用 = P1 * 计费单价P1 + (水表行度 - P1) * 计费单价P2
else if 水表行度 <= P3
	阶梯费用 = P1 * 计费单价P1 + (P2 - P1) * 计费单价P2 + (水表行度 - P2) * 计费单价P3
else
	阶梯费用 = P1 * 计费单价P1 + (P2 - P1) * 计费单价P2 + (P3 - P2) * 计费单价P3 + (水表行度 - P3) * 计费单价P4
endif
```


## 条件单价
在收费标准中，有些参与计算的单价是依据不同的条件设定的，例如按照楼层高低，按照是否装修等。目前已知的具有条件单价的公式有柳州的风情港，其二次加压电费是按照住户水表读数进行据实分摊，如果不存在条件单价，其计算公式如下：

```
二次加压电费(F) = 二次加压电表读数(M) * 计费单价(P) * 住户水表读数(HM) / 关联房屋住户水表总读数(THM)
```

在绘管家系统中，将二次加压电表与相应的房屋关联，收费标准设置为`按水表计费行度分摊`即可。然而，该小区为了提现不同楼层加压送水的成本不一样，针对不同楼层设置的不同的收费单价，如下表所示：

| 楼层           | 单价 (元/度) | 
|:-------------:|:-----------:|
|  7-15         | 1.4        | 
|  16-25        | 1.7        | 
|  26-36        | 2.4        | 
|  37以上        | 3          |

针对该项需求，需要开发__条件单价设置__功能供客户使用，在计算时应当先计算完数量后再根据房屋满足的条件读取单价进行费用合计计算，涉及的功能调整如下。

* 表单设置：在单价旁增加一个条件单价勾选项，勾选后弹出判断公式和单价两个表单及一个添加条件按钮。
	* 判断公式用于约束该条件单价的适用范围，单价用于设置该条件下的计费单价
	* 添加条件按钮用于添加新的条件单价
* 费用计算：先计算该收费标准的房屋数量（如电表行度，分摊数量，面积，车辆数，车位数等），然后再根据房屋相关属性或读数判断该房屋费用使用于何种计价条件，读取符合条件的单价再乘以数量得出最终的费用。
* 示例：以风情港二次加压电费为例，其收费公式将调整为：

```
二次加压电费(F) = 二次加压电表读数(M) * 条件计费单价(CP) * 住户水表读数(HM) / 关联房屋住户水表总读数(THM)
```

其中条件计费单价是根据某个房屋所满足的条件对应的计费单价。例如，假设该房屋的`楼层`为20层，则该房屋的`条件计费单价`为__1.7元/度__。