# 加氢站管理 · 站点信息 — 对账与结算 PRD

> 本模块与「车辆氢费明细」配合完成**站点侧氢费结算闭环**。

---

## 1. 数据来源

对账单明细取自 **车辆氢费明细** 中同时满足以下条件的记录：

1. 对账状态 = **已对账**（台账已完成「完成对账」）
2. **尚未**被本站点历史对账单结算过（未绑定 `statementRecordId`）
3. 加氢时间落在用户选择的 **[账单开始日期, 账单结束日期]** 内
4. 加氢站名称与当前操作站点一致

> 对账单明细**仅展示成本字段**（加氢量、成本单价、成本总价等），不展示加氢单价、加氢总价。

---

## 2. 两阶段交互

#### 生成对账单 · 业务逻辑

1. 选择**账单开始日期**与**账单结束日期**后，从**车辆氢费明细**获取该时间段内、对应当前站点的加氢记录（已对账且尚未结算）。
2. 点击「**生成对账单**」时弹出**二次确认**，提示：生成对账单后，车辆氢费明细中对应记录将自动标记为已对账且无法修改。
3. 确认后进入结算阶段，填写**收票日期**、**收票金额**及**发票附件**（对账日期在提交时由系统自动回写）。
4. 点击「**提交对账单**」后，本批明细在车辆氢费明细中锁定为已对账/已结算状态，不可再修改。

**阶段一 · 选期生成**

- 日期区下方展示：**上次对账单结束时间**（无历史则「暂无」）
- 默认开始日期建议 = 上次结束日 + 1 天
- 点击「生成对账单」时弹出**二次确认**：提示生成后车辆氢费明细对应记录将标记为已对账且无法修改；确认后进入阶段二，日期锁定不可改
- 无符合条件记录时提示调整日期

**阶段二 · 结算提交**

统计卡（明细表上方）：

| 指标 | 说明 |
|---|---|
| 加氢次数 | 本账单包含的已对账记录笔数 |
| 加氢总量 | kg 合计 |
| 成本总金额 | 成本总价合计 |

明细表下方**必填**结算项：

| 字段 | 规则 |
|---|---|
| 结算后加氢站预付款余额 | **只读**，= 当前预付余额 − 成本总金额；不足为负并标「已欠费」 |
| 收票日期 | 必填 |
| 收票金额 | 必填，默认填入成本总金额 |
| 发票附件 | 必填，支持上传 |

---

## 3. 提交后的系统行为

提交成功后需**原子性**完成：

1. 写入对账历史（供「查看对账记录」查询）
2. 扣减站点预付余额
3. 标记台账记录已结算（绑定 `statementRecordId`）
4. **回写车辆氢费明细**：

| 车辆氢费明细字段 | 回写值 |
|---|---|
| 对账日期 | 操作完成时间 |
| 收票日期 | 操作完成日期 |
| 加氢站付款状态 | 已付款 |

原型通过 `H2_STATION_STATEMENT_LEDGER_UPDATES` / `h2VehicleLedgerBridge` 模拟跨页回写。

---

## 4. 查看对账记录

入口：列表操作列 → 更多 → **查看对账记录**

历史列表：对账日期、对账人、账单区间、加氢次数、加氢金额、结算后余额、查看明细。

查看明细：账单区间、统计三卡、收票信息、发票附件、成本明细表。

---

## 5. 校验与异常

| 场景 | 处理 |
|---|---|
| 日期未填 / 开始晚于结束 | 阻止生成 |
| 区间内无已对账未结算记录 | 阻止生成，提示调整日期 |
| 点击「生成对账单」未确认 | 不进入结算阶段 |
| 收票日期/金额/附件未填 | 阻止提交 |
| 收票金额 ≤ 0 | 阻止提交 |
| 预付余额结算后为负 | 允许提交，标「已欠费」 |

---

## 6. 研发要点

1. **对账单幂等**：同一笔已对账记录只能进入一次成功提交的对账单
2. **上次结束时间**：取该站点已成功提交对账单的最大 `endDate`
3. **余额计算**：`balanceAfter = prepaidBalance - sum(costTotal)`
4. **跨模块同步**：生产对接统一台账；原型使用 Bridge Store
5. **明细字段范围**：对账弹窗不展示客户侧加氢单价/总价
