# 财务域功能详细设计文档（反推自代码）

**文档类型**: 反推设计文档（基于实际代码逆向分析）
**生成日期**: 2026-04-23
**分析方法**: 全量搜索 ether-pms 后端代码 + ether-admin 前端代码
**对比基线**: `ether-docs/02-DESIGN/domains/04-FINANCE.md`

---

## 一、领域概述（当前实现状态）

### 1.1 总体结论

**财务域核心功能（FeeItem / FeeBill / FeePayment / FeeRefund）均未实现。** 不存在 `module-finance` 模块，不存在任何 `fin_*` 数据库表，不存在任何收费/账单/支付/退款相关的后端实体、服务或控制器。

当前已实现的与财务域有间接关联的功能，仅有 **能耗计量管理**（EnergyMeter / EnergyConsumption），归属在 `module-mdm` 模块中，实现了能耗数据的采集和简单费用计算（消耗量 × 单价），但未与账单系统对接。

### 1.2 实现状态总览

| 功能模块 | 设计文档状态 | 实际代码状态 | 差异 |
|---------|------------|------------|------|
| FeeItem（收费项目） | 🟢 已实现 | 🔴 **未实现** | 设计文档与实际代码不符 |
| FeeBill（收费账单） | 🟢 已实现 | 🔴 **未实现** | 设计文档与实际代码不符 |
| FeePayment（支付记录） | 🟢 已实现 | 🔴 **未实现** | 设计文档与实际代码不符 |
| FeeRefund（退款记录） | 🔴 未实现 | 🔴 未实现 | 一致 |
| 费用催缴定时任务 | 🟢 已实现 | 🔴 **未实现** | 设计文档与实际代码不符 |
| 滞纳金计算 | 🟢 已实现 | 🔴 **未实现** | 设计文档与实际代码不符 |
| 能耗计量管理 | 未在设计文档中 | 🟢 **已实现** | 在 module-mdm 中实现 |
| 能耗费用计算 | 未在设计文档中 | 🟢 **已实现** | 简单的 consumption × unitPrice |
| 支付网关对接 | 🔴 未实现 | 🔴 未实现 | 一致 |
| 财务报表 | 🔴 未实现 | 🔴 未实现 | 一致 |

### 1.3 关键发现

1. **`module-finance` 模块不存在** — 在 `ether-pms` 中无此目录
2. **`fin_*` 数据库表不存在** — 无 FeeItem / FeeBill / FeePayment / FeeRefund 对应的表
3. **设计文档 04-FINANCE.md 标注"已实现"的功能实际未实现** — 文档中 FeeItem/FeeBill/FeePayment 标记为 🟢 已实现，但代码中找不到任何对应实体
4. **能耗管理在 module-mdm 中实现** — EnergyMeter / EnergyConsumption 实体、服务、控制器、前端页面均已实现
5. **前端无任何财务相关页面** — ether-admin 中无 fee/bill/payment/refund 相关视图，仅有 energy 相关视图
6. **员工端/业主端无财务功能** — ether-app-employee 和 ether-app-owner 中无任何财务相关代码

---

## 二、已实现的数据结构（能耗计量相关实体）

### 2.1 EnergyMeter（能源计量点）

**所在模块**: `module-mdm`
**数据库表**: `ops_energy_meter`
**源码位置**: `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/entity/EnergyMeter.java`

| 字段名 | 类型 | 数据库列名 | 约束 | 说明 |
|--------|------|-----------|------|------|
| id | UUID | id | PK | 主键 |
| projectId | UUID | project_id | NOT NULL | 所属项目 |
| meterCode | String | meter_code | NOT NULL, UNIQUE | 计量点编码（自动生成：EM + yyyyMMddHHmmss） |
| meterName | String | meter_name | NOT NULL | 计量点名称 |
| energyType | EnergyType | energy_type | NOT NULL | 能源类型枚举 |
| spaceNodeId | UUID | space_node_id | — | 关联空间节点 |
| installationLocation | String | installation_location | — | 安装位置 |
| ratedCapacity | BigDecimal(10,2) | rated_capacity | — | 额定容量 |
| unitPrice | BigDecimal(10,4) | unit_price | — | 单价（用于费用计算） |
| status | Status | status | NOT NULL | 状态枚举，默认 ACTIVE |
| createdAt | LocalDateTime | created_at | — | 创建时间 |
| updatedAt | LocalDateTime | updated_at | — | 更新时间 |

**枚举定义**:

```java
public enum EnergyType {
    LIGHTING("照明插座用电"),
    HVAC("空调用电"),
    POWER("动力用电"),
    SPECIAL("特殊用电"),
    WATER("给排水"),
    GAS("燃气");
}

public enum Status {
    ACTIVE, INACTIVE
}
```

**与原设计文档的差异**:

| 项目 | 原设计（04-FINANCE.md） | 实际实现 | 差异说明 |
|------|------------------------|---------|---------|
| 所属模块 | ether-finance | module-mdm | 归属不同模块 |
| 能源类型 | FeeType: PROPERTY/PARKING/WATER/ELECTRICITY/GAS/HEATING/REPAIR_FUND/OTHER | EnergyType: LIGHTING/HVAC/POWER/SPECIAL/WATER/GAS | 实际更细分（按用电分项），但缺少供暖、物业费等 |
| 单价精度 | NUMERIC(12,2) | BigDecimal(10,4) | 实际精度更高（4位小数） |
| 计费方式 | BillingMethod: FIXED/AREA/USAGE/CUSTOM | 无 | 未实现计费方式枚举 |
| 账期/到期日 | billDay/dueDay/overdueDay | 无 | 未实现账期管理 |
| 滞纳金 | enableLateFee/lateFeeRate/maxLateFee | 无 | 未实现滞纳金 |

### 2.2 EnergyConsumption（能耗记录）

**所在模块**: `module-mdm`
**数据库表**: `ops_energy_consumption`
**源码位置**: `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/entity/EnergyConsumption.java`

| 字段名 | 类型 | 数据库列名 | 约束 | 说明 |
|--------|------|-----------|------|------|
| id | UUID | id | PK | 主键 |
| projectId | UUID | project_id | NOT NULL | 所属项目 |
| meterId | UUID | meter_id | NOT NULL | 关联计量点 |
| consumptionDate | LocalDate | consumption_date | NOT NULL | 记录日期 |
| previousReading | BigDecimal(12,2) | previous_reading | — | 上次读数 |
| currentReading | BigDecimal(12,2) | current_reading | — | 当前读数 |
| consumption | BigDecimal(12,2) | consumption | NOT NULL | 消耗量 = current − previous |
| amount | BigDecimal(10,2) | amount | — | 费用 = consumption × unitPrice |
| recordedBy | UUID | recorded_by | — | 记录人 |
| recordMethod | RecordMethod | record_method | — | 记录方式，默认 MANUAL |
| remarks | String(1000) | remarks | — | 备注 |
| createdAt | LocalDateTime | created_at | — | 创建时间 |

**数据库索引**:

```sql
idx_ec_meter_date   -- (meter_id, consumption_date)
idx_ec_project_date -- (project_id, consumption_date)
```

**枚举定义**:

```java
public enum RecordMethod {
    MANUAL,  // 手动录入
    IOT      // IoT自动采集
}
```

**与原设计文档的差异**:

| 项目 | 原设计（FeeBill） | 实际实现（EnergyConsumption） | 差异说明 |
|------|------------------|---------------------------|---------|
| 实体性质 | 账单（应收费用单据） | 能耗记录（抄表数据） | 本质不同，能耗记录不是账单 |
| 账单编号 | billNo | 无 | 无账单编号 |
| 关联业主 | ownerId | 无 | 未关联业主 |
| 关联房产 | spaceNodeId | 间接通过meter.spaceNodeId | 未直接关联 |
| 账期 | billPeriod/billDate/dueDate/overdueDate | consumptionDate | 无账期概念 |
| 金额体系 | amount/lateFee/discount/payableAmount/paidAmount | amount（仅计算值） | 无应收/已付/优惠/滞纳金 |
| 状态流转 | UNPAID/PARTIAL_PAID/PAID/OVERDUE/CANCELLED | 无状态 | 无支付状态 |
| 用量单位 | usageAmount + usageUnit | consumption | 无独立用量单位 |

---

## 三、已实现的API接口

### 3.1 后端API（EnergyController）

**基础路径**: `/api/ops/energy`
**源码位置**: `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/controller/EnergyController.java`

#### 3.1.1 计量点管理

| 方法 | 路径 | 说明 | 请求参数 | 响应类型 |
|------|------|------|---------|---------|
| POST | `/meters` | 创建计量点 | EnergyMeter JSON | `ApiResponse<EnergyMeter>` |
| GET | `/meters` | 查询计量点列表 | projectId(必填), energyType(可选) | `ApiResponse<List<EnergyMeter>>` |
| GET | `/meters/{id}` | 获取计量点详情 | path: id | `ApiResponse<EnergyMeter>` |
| PUT | `/meters/{id}` | 更新计量点 | path: id, EnergyMeter JSON | `ApiResponse<EnergyMeter>` |
| DELETE | `/meters/{id}` | 删除计量点（软删除） | path: id | `ApiResponse<Void>` |

#### 3.1.2 能耗记录

| 方法 | 路径 | 说明 | 请求参数 | 响应类型 |
|------|------|------|---------|---------|
| POST | `/consumption` | 录入能耗数据 | `{meterId, currentReading, recordedBy}` | `ApiResponse<EnergyConsumption>` |
| GET | `/consumption/{meterId}` | 查询能耗记录 | path: meterId, startDate(可选), endDate(可选) | `ApiResponse<List<EnergyConsumption>>` |

#### 3.1.3 能耗统计

| 方法 | 路径 | 说明 | 请求参数 | 响应类型 |
|------|------|------|---------|---------|
| GET | `/statistics/by-type` | 按类型统计消耗 | projectId, month(yyyy-MM-dd) | `ApiResponse<Map<EnergyType, BigDecimal>>` |
| GET | `/statistics/unit-consumption` | 单方能耗 | projectId, month(yyyy-MM-dd) | `ApiResponse<BigDecimal>` |

### 3.2 前端API封装

**源码位置**: `ether-admin/src/api/energy.ts`

| 函数名 | HTTP方法 | URL | 说明 |
|--------|---------|-----|------|
| `getEnergyMeters` | GET | `/api/ops/energy/meters` | 获取计量点列表 |
| `getEnergyMeter` | GET | `/api/ops/energy/meters/{id}` | 获取计量点详情 |
| `createEnergyMeter` | POST | `/api/ops/energy/meters` | 创建计量点 |
| `updateEnergyMeter` | PUT | `/api/ops/energy/meters/{id}` | 更新计量点 |
| `deleteEnergyMeter` | DELETE | `/api/ops/energy/meters/{id}` | 删除计量点 |
| `recordEnergyConsumption` | POST | `/api/ops/energy/consumption` | 录入能耗 |
| `getEnergyConsumption` | GET | `/api/ops/energy/consumption/{meterId}` | 获取能耗记录 |
| `getConsumptionByType` | GET | `/api/ops/energy/statistics/by-type` | 按类型统计 |
| `getUnitConsumption` | GET | `/api/ops/energy/statistics/unit-consumption` | 单方能耗 |

### 3.3 前端页面路由

**源码位置**: `ether-admin/src/router/index.ts`

| 路径 | 路由名 | 组件 | 说明 |
|------|--------|------|------|
| `energy/meters` | EnergyMeters | `views/energy/MeterList.vue` | 计量点管理 |
| `energy/consumption` | EnergyConsumption | `views/energy/ConsumptionRecord.vue` | 能耗录入 |
| `energy/statistics` | EnergyStatistics | `views/energy/EnergyStatistics.vue` | 能耗统计 |

---

## 四、已实现的业务规则

### 4.1 计量点管理规则

| 规则 | 实现位置 | 说明 |
|------|---------|------|
| 编码自动生成 | `EnergyMeterServiceImpl.generateMeterCode()` | 格式：`EM` + `yyyyMMddHHmmss`，确保唯一性（冲突时追加后缀） |
| 默认状态 | `EnergyMeterServiceImpl.createMeter()` | 新建计量点默认状态为 ACTIVE |
| 软删除 | `EnergyMeterServiceImpl.deleteMeter()` | 删除操作将状态设为 INACTIVE，非物理删除 |
| 查询过滤 | `EnergyMeterRepository.findByProjectIdAndStatus()` | 按项目查询时仅返回 ACTIVE 状态的计量点 |
| 部分更新 | `EnergyMeterServiceImpl.updateMeter()` | 仅更新非空字段 |

### 4.2 能耗录入规则

| 规则 | 实现位置 | 说明 |
|------|---------|------|
| 仪表状态校验 | `EnergyConsumptionServiceImpl.recordConsumption()` | 只能对 ACTIVE 状态的仪表进行抄表（错误码 6102） |
| 读数递增校验 | `EnergyConsumptionServiceImpl.recordConsumption()` | 当前读数不能小于上次读数（错误码 6103） |
| 仪表存在性校验 | `EnergyConsumptionServiceImpl.recordConsumption()` | 仪表不存在时抛出异常（错误码 6101） |
| 自动获取上次读数 | `EnergyConsumptionServiceImpl.recordConsumption()` | 从最近一条记录获取 previousReading，首次抄表为 0 |
| 自动计算消耗量 | `EnergyConsumptionServiceImpl.recordConsumption()` | consumption = currentReading − previousReading |
| 自动计算费用 | `EnergyConsumptionServiceImpl.recordConsumption()` | amount = consumption × meter.unitPrice（单价为空时为 0） |
| 默认手动录入 | `EnergyConsumptionServiceImpl.recordConsumption()` | recordMethod 默认设为 MANUAL |

### 4.3 能耗统计规则

| 规则 | 实现位置 | 说明 |
|------|---------|------|
| 按月统计 | `EnergyConsumptionServiceImpl.getConsumptionByType()` | 根据 month 参数计算月份起止日期 |
| 类型初始化 | `EnergyConsumptionServiceImpl.getConsumptionByType()` | 所有 EnergyType 初始化为 BigDecimal.ZERO |
| 按类型汇总（简化） | `EnergyConsumptionServiceImpl.getConsumptionByType()` | ⚠️ 当前实现将项目总消耗全部归入 LIGHTING 类型，未按 meter.energyType 真正分项汇总 |
| 单方能耗 | `EnergyConsumptionServiceImpl.getUnitConsumption()` | 遍历项目所有 ACTIVE 计量点，累加月度消耗量 |

### 4.4 已知实现缺陷

| 缺陷 | 严重度 | 说明 |
|------|--------|------|
| 按类型统计不准确 | 🔴 高 | `getConsumptionByType()` 将总消耗全部归入 LIGHTING，代码注释也承认"实际业务中应按 meter.energyType 汇总" |
| 前后端能源类型不一致 | 🟡 中 | 后端 EnergyType 枚举为 LIGHTING/HVAC/POWER/SPECIAL/WATER/GAS，前端 energyTypeMap 为 ELECTRICITY/WATER/GAS/CENTRAL_HEATING/CENTRAL_COOLING |
| 无账期概念 | 🟡 中 | 能耗记录只有 consumptionDate，无账单周期、到期日等概念 |
| 费用仅为计算值 | 🟡 中 | amount 字段仅是 consumption × unitPrice 的计算结果，非正式账单金额 |
| 无支付流程 | 🔴 高 | 无支付记录、支付状态、支付方式等 |
| 无业主关联 | 🟡 中 | 能耗记录不关联业主，无法按业主统计费用 |

---

## 五、与原需求文档 04-FINANCE.md 的差异对比表

### 5.1 实体级差异

| 设计项 | 04-FINANCE.md 设计方案 | 实际代码实现 | 差异等级 |
|--------|----------------------|------------|---------|
| **FeeItem 实体** | 已定义完整实体（code/name/type/billingMethod/unitPrice/unit/billDay/dueDay/overdueDay/enableLateFee/lateFeeRate/maxLateFee） | ❌ 不存在 | 🔴 完全缺失 |
| **FeeBill 实体** | 已定义完整实体（billNo/feeItemId/spaceNodeId/ownerId/billPeriod/billDate/dueDate/overdueDate/usageAmount/amount/lateFee/discount/payableAmount/paidAmount/status） | ❌ 不存在 | 🔴 完全缺失 |
| **FeePayment 实体** | 已定义完整实体（paymentNo/amount/method/thirdPartyNo/status/failReason/paymentTime） | ❌ 不存在 | 🔴 完全缺失 |
| **FeeRefund 实体** | 已定义完整实体（refundNo/amount/reason/status/approverId/approveTime/thirdPartyRefundNo/refundTime） | ❌ 不存在 | 🔴 完全缺失 |
| **fin_fee_item 表** | 已定义 DDL | ❌ 不存在 | 🔴 完全缺失 |
| **fin_fee_bill 表** | 已定义 DDL | ❌ 不存在 | 🔴 完全缺失 |
| **fin_fee_payment 表** | 已定义 DDL | ❌ 不存在 | 🔴 完全缺失 |
| **fin_fee_refund 表** | 已定义 DDL | ❌ 不存在 | 🔴 完全缺失 |
| **EnergyMeter 实体** | 未在设计文档中 | ✅ 在 module-mdm 中实现 | 🟡 设计文档遗漏 |
| **EnergyConsumption 实体** | 未在设计文档中 | ✅ 在 module-mdm 中实现 | 🟡 设计文档遗漏 |
| **ops_energy_meter 表** | 未在设计文档中 | ✅ 已创建 | 🟡 设计文档遗漏 |
| **ops_energy_consumption 表** | 未在设计文档中 | ✅ 已创建 | 🟡 设计文档遗漏 |

### 5.2 功能级差异

| 功能 | 04-FINANCE.md 状态 | 实际状态 | 差异说明 |
|------|-------------------|---------|---------|
| 收费项目管理（CRUD） | 🟢 已实现 | 🔴 未实现 | 无 FeeItem 代码 |
| 账单生成 | 🟢 已实现 | 🔴 未实现 | 无 FeeBill 代码 |
| 账单状态流转 | 🟢 已实现 | 🔴 未实现 | 无状态机 |
| 支付处理 | 🟢 已实现 | 🔴 未实现 | 无 FeePayment 代码 |
| 费用催缴（定时任务） | 🟢 已实现 | 🔴 未实现 | 无 FeeReminderJob 代码 |
| 滞纳金计算 | 🟢 已实现 | 🔴 未实现 | 无计算逻辑 |
| 退款流程 | 🔴 未实现 | 🔴 未实现 | 一致 |
| 支付网关对接 | 🔴 未实现 | 🔴 未实现 | 一致 |
| 财务报表 | 🔴 未实现 | 🔴 未实现 | 一致 |
| 能耗计量点管理 | 未提及 | 🟢 已实现 | 设计文档遗漏 |
| 能耗抄表录入 | 未提及 | 🟢 已实现 | 设计文档遗漏 |
| 能耗费用计算 | 未提及 | 🟢 已实现（简化） | 设计文档遗漏 |
| 能耗统计分析 | 未提及 | 🟢 已实现（有缺陷） | 设计文档遗漏 |

### 5.3 枚举差异

| 枚举 | 04-FINANCE.md 定义 | 实际代码定义 | 差异 |
|------|-------------------|------------|------|
| 收费类型 FeeType | PROPERTY/PARKING/WATER/ELECTRICITY/GAS/HEATING/REPAIR_FUND/OTHER | ❌ 不存在 | 完全缺失 |
| 计费方式 BillingMethod | FIXED/AREA/USAGE/CUSTOM | ❌ 不存在 | 完全缺失 |
| 账单状态 BillStatus | UNPAID/PARTIAL_PAID/PAID/OVERDUE/CANCELLED | ❌ 不存在 | 完全缺失 |
| 支付方式 PaymentMethod | WECHAT/ALIPAY/CASH/BANK_TRANSFER/CARD | ❌ 不存在 | 完全缺失 |
| 支付状态 PaymentStatus | PENDING/SUCCESS/FAILED/REFUNDED | ❌ 不存在 | 完全缺失 |
| 退款状态 RefundStatus | PENDING/APPROVED/REJECTED/REFUNDED | ❌ 不存在 | 完全缺失 |
| 能源类型 EnergyType | 未定义 | LIGHTING/HVAC/POWER/SPECIAL/WATER/GAS | 设计文档遗漏 |
| 记录方式 RecordMethod | 未定义 | MANUAL/IOT | 设计文档遗漏 |

---

## 六、待实现功能清单

### 6.1 P0 — 核心财务功能（必须实现）

| 编号 | 功能 | 说明 | 依赖 | 预估工作量 |
|------|------|------|------|-----------|
| FIN-001 | 创建 module-finance 模块 | 独立的财务模块，包含 entity/service/controller/repository 分层 | 无 | 0.5天 |
| FIN-002 | FeeItem 收费项目实体 | 含 code/name/type/billingMethod/unitPrice/unit/billDay/dueDay/overdueDay/enableLateFee/lateFeeRate/maxLateFee | FIN-001 | 1天 |
| FIN-003 | FeeItem CRUD API | 创建/查询/更新/禁用收费项目 | FIN-002 | 1.5天 |
| FIN-004 | FeeBill 账单实体 | 含 billNo/feeItemId/spaceNodeId/ownerId/billPeriod/billDate/dueDate/overdueDate/amount/lateFee/discount/payableAmount/paidAmount/status | FIN-002 | 1.5天 |
| FIN-005 | 账单自动生成 | 根据收费项目规则，按账期自动生成账单 | FIN-003, FIN-004 | 3天 |
| FIN-006 | 账单状态流转 | UNPAID → PARTIAL_PAID → PAID / OVERDUE → CANCELLED | FIN-004 | 1天 |
| FIN-007 | FeePayment 支付记录实体 | 含 paymentNo/amount/method/thirdPartyNo/status/failReason/paymentTime | FIN-004 | 1天 |
| FIN-008 | 支付记录 API | 线下收款登记、支付记录查询 | FIN-007 | 1.5天 |
| FIN-009 | 能耗数据与账单对接 | 将 EnergyConsumption 的 amount 作为按用量计费的账单数据来源 | FIN-005, 能耗模块 | 2天 |
| FIN-010 | 财务管理前端页面 | 收费项目/账单/支付记录的管理页面 | FIN-003, FIN-006, FIN-008 | 4天 |

### 6.2 P1 — 重要功能（近期实现）

| 编号 | 功能 | 说明 | 依赖 | 预估工作量 |
|------|------|------|------|-----------|
| FIN-011 | 费用催缴定时任务 | 到期提醒（3天内）、逾期催缴、周汇总 | FIN-006 | 2天 |
| FIN-012 | 滞纳金自动计算 | 逾期天数 × 日利率，不超过上限 | FIN-006, FIN-002 | 1.5天 |
| FIN-013 | FeeRefund 退款实体与流程 | 退款申请 → 审批 → 执行 | FIN-007 | 3天 |
| FIN-014 | 业主端缴费功能 | 业主查看账单、在线缴费 | FIN-006, FIN-008 | 3天 |
| FIN-015 | 修复能耗按类型统计 | getConsumptionByType() 应按 meter.energyType 真正分项汇总 | 无 | 0.5天 |
| FIN-016 | 统一前后端能源类型枚举 | 后端 LIGHTING/HVAC/POWER/SPECIAL/WATER/GAS 与前端 ELECTRICITY/WATER/GAS/CENTRAL_HEATING/CENTRAL_COOLING 对齐 | 无 | 0.5天 |

### 6.3 P2 — 增强功能（中期实现）

| 编号 | 功能 | 说明 | 依赖 | 预估工作量 |
|------|------|------|------|-----------|
| FIN-017 | 支付网关对接 | 微信支付/支付宝 SDK 集成 | FIN-008 | 5天 |
| FIN-018 | 财务报表 | 收费统计、欠费分析、收入趋势 | FIN-006, FIN-008 | 4天 |
| FIN-019 | 按面积计费 | 根据房产面积 × 单价计算物业费 | FIN-002, 空间节点面积数据 | 2天 |
| FIN-020 | 固定金额计费 | 每月固定金额的收费项目（如停车费） | FIN-002 | 1天 |
| FIN-021 | 批量账单生成 | 一次性为项目所有业主生成账单 | FIN-005 | 2天 |
| FIN-022 | 账单导出 | 导出 Excel/PDF 格式账单 | FIN-006 | 1.5天 |
| FIN-023 | IoT 自动抄表 | 对接 IoT 平台自动采集能耗数据 | 能耗模块 | 3天 |

### 6.4 P3 — 远期规划

| 编号 | 功能 | 说明 | 依赖 | 预估工作量 |
|------|------|------|------|-----------|
| FIN-024 | 自定义计费规则 | 支持阶梯电价、分时计费等复杂规则 | FIN-002 | 5天 |
| FIN-025 | 预缴费管理 | 业主预存费用、自动扣款 | FIN-008 | 3天 |
| FIN-026 | 发票管理 | 开票申请、发票打印 | FIN-008 | 3天 |
| FIN-027 | 对账功能 | 支付流水与银行流水对账 | FIN-017 | 3天 |
| FIN-028 | 财务审批流 | 大额退款、减免审批流程 | FIN-013 | 4天 |

---

## 七、架构建议

### 7.1 模块归属调整

当前能耗管理（EnergyMeter / EnergyConsumption）放在 `module-mdm` 中，建议：

- **方案A（推荐）**: 保持能耗管理在 module-mdm，财务域通过接口引用能耗数据。能耗是基础数据（MDM），费用计算是业务逻辑（Finance），职责分离清晰。
- **方案B**: 将能耗管理迁移至 module-finance。耦合度高，不推荐。

### 7.2 数据流设计

```
EnergyMeter (module-mdm)          FeeItem (module-finance)
       │                                │
       ▼                                ▼
EnergyConsumption ──费用计算──→ FeeBill (自动/手动生成)
  (抄表数据)                        │
                                    ▼
                              FeePayment (支付记录)
                                    │
                                    ▼
                              FeeRefund (退款记录)
```

### 7.3 设计文档修正建议

04-FINANCE.md 中标记 FeeItem/FeeBill/FeePayment 为"🟢 已实现"与实际代码不符，建议：

1. 将 FeeItem/FeeBill/FeePayment/FeeReminderJob 的状态修正为"🔴 未实现"
2. 补充 EnergyMeter / EnergyConsumption 的设计说明
3. 明确能耗管理与财务计费的边界和对接方式

---

## 八、代码文件索引

### 8.1 后端文件

| 文件 | 路径 |
|------|------|
| EnergyMeter 实体 | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/entity/EnergyMeter.java` |
| EnergyConsumption 实体 | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/entity/EnergyConsumption.java` |
| EnergyController | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/controller/EnergyController.java` |
| EnergyMeterService | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/service/EnergyMeterService.java` |
| EnergyMeterServiceImpl | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/service/impl/EnergyMeterServiceImpl.java` |
| EnergyConsumptionService | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/service/EnergyConsumptionService.java` |
| EnergyConsumptionServiceImpl | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/service/impl/EnergyConsumptionServiceImpl.java` |
| EnergyMeterRepository | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/repository/EnergyMeterRepository.java` |
| EnergyConsumptionRepository | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/repository/EnergyConsumptionRepository.java` |
| EnergyMeterServiceTest | `ether-pms/module-mdm/src/test/java/com/ether/pms/mdm/service/EnergyMeterServiceTest.java` |

### 8.2 前端文件

| 文件 | 路径 |
|------|------|
| 能耗 API | `ether-admin/src/api/energy.ts` |
| 计量点管理页面 | `ether-admin/src/views/energy/MeterList.vue` |
| 能耗录入页面 | `ether-admin/src/views/energy/ConsumptionRecord.vue` |
| 能耗统计页面 | `ether-admin/src/views/energy/EnergyStatistics.vue` |
| 路由配置（能耗部分） | `ether-admin/src/router/index.ts` (L121-135) |

### 8.3 文档文件

| 文件 | 路径 |
|------|------|
| 原设计文档 | `ether-docs/02-DESIGN/domains/04-FINANCE.md` |
| 特性清单 | `ether-docs/01-REQUIREMENTS/FEATURE_LIST.md` |

---

> **文档说明**: 本文档基于 2026-04-23 对 ether-pms 和 ether-admin 代码库的全量搜索结果生成。核心结论：财务域的 FeeItem/FeeBill/FeePayment/FeeRefund 四大实体及所有相关功能均未在代码中实现，仅能耗计量管理（EnergyMeter/EnergyConsumption）在 module-mdm 中有完整实现。04-FINANCE.md 中标注"已实现"的状态需修正。
