# 租赁业务明细 · 产品需求说明（PRD）

> 对齐 Excel《2026年业务二部运营台账总表》「2.租赁车辆收入明细表」；业管人员按月份维护运营明细，公式列系统自动计算。

---

## 1. 模块定位

| 项 | 说明 |
|---|---|
| 模块名称 | 台账数据 — 租赁业务明细 |
| 原型路径 | `src/prototypes/lease-business-detail` |
| 预览地址 | `/prototypes/lease-business-detail` |
| 目标用户 | 业务二部业管 / 运营人员 |
| 核心任务 | 按 Excel 样表维护租赁车辆收入明细、查询汇总、批量导入导出 |
| 页面结构 | 筛选区 + 7 项 KPI + 工具栏 + 48 列宽表（表尾 23 项汇总）+ 分页 |
| 设计基底 | `vm-page` + `ldb-page` + `lc-page`（见 `ledger-shared/DESIGN.md`） |

### 与「租赁业务台账」的分工

| 模块 | 定位 |
|---|---|
| **租赁业务明细**（本模块） | 对齐业管 Excel 运营台账宽表；手工列导入维护；6 个公式列自动计算；收款状态按实收/应收展示 |
| **租赁业务台账** | 账单维度维护、关联收款记录、收款状态（未收/部分/已收）、归档与角色数据范围 |

下游 **业务部台账 / 业务汇总分析** 中「租赁业绩」数据来源为本模块明细（见 `oneos-web-data-analysis/05-业务部台账`）。

### 不做范围（当前原型）

- 「租赁业务盈亏月度汇总」独立 Tab（Legacy 数据分析页有，本原型待规划）
- 服务端持久化、员工/主管数据权限隔离（主管预览：`?role=supervisor`）
- 关联收款记录自动回写实收

---

## 2. 筛选区

默认展示 5 项（一行），「更多筛选」展开车牌多选。

| 筛选项 | 说明 |
|---|---|
| 统计月份 | `YYYY-MM` 格式，精确匹配年份+月份 |
| 业务部门 | 精确匹配 |
| 业务员 | 精确匹配 |
| 客户名称 | 模糊包含 |
| 状态 | 已结清 / 部分收款 / 未收款（按实收与应收合计计算） |
| 车牌号码 | 多选精确匹配（更多筛选） |

查询按钮触发筛选；KPI 与表尾汇总基于**全量筛选结果**（非当前页）。

---

## 3. KPI 统计卡片（7 张）

顶部展示关键指标；完整 23 项金额合计见列表底部汇总行。

| KPI | 汇总字段 |
|---|---|
| 应收总计 | `receivableTotal` |
| 押金总计 | `deposit`（仅数值型） |
| 实收总计 | `receivedAmount` |
| 里程减免总计 | `mileageDeduction` |
| 其他减免总计 | `otherDeduction` |
| 未收总计 | `outstanding`（>0 标红） |
| 盈亏总计 | `profitLoss`（正负着色） |

---

## 4. 列表工具栏

| 按钮 | 行为 |
|---|---|
| 批量导入 | 下载模板（36 列手工录入）→ 上传 Excel → 公式列自动计算 |
| 批量导出 | 导出当前筛选结果（完整 48 列，含公式列结果） |

### 行内操作

编辑、删除、变更日志（操作列）；已锁定记录仅主管可改（`?role=supervisor`）。

---

## 5. 明细列表（48 列）

表头顺序对齐 Excel「2.租赁车辆收入明细表」，并在月份列左侧增加「状态」列。

### 交互

- 横向滚动；左冻结：**状态 + 月份 + 车牌号码**
- 仅**日期类列**表头支持正序/倒序排序
- 公式列（`calculated`）浅灰底色，导入模板不含
- 表尾**汇总行**：23 个金额列 SUBTOTAL，月份列显示「汇总」
- 未收 > 0 单元格标红；盈亏正负着色
- 底部分页：10 / 20 / 50 / 100

### 收款状态（状态列）

| 状态 | 判定规则 |
|---|---|
| 未收款 | 实收金额 = 0 或未录入 |
| 部分收款 | 实收金额 > 0 且 < 应收合计 |
| 已结清 | 实收金额 ≥ 应收合计 |

### 表尾汇总（23 项）

押金、合同标的租金、应收合计、应收租金、月度收入、月度租金、维保包干收入、保险上浮费、运维费（收入）、其他收入、里程减免金额、其他减免金额、实收金额、未收、车辆标准成本、车辆实际成本、保险费、氢费、运维费（成本）、居间费、其他、总成本、盈亏。

---

## 6. 公式列（系统自动计算）

对齐 Excel 表内公式；实现见 `utils/calc-detail.ts`。

| 字段 | 计算方式 |
|---|---|
| **应收合计** | 维保包干收入 + 保险上浮费 + 运维费（收入）+ 其他收入 + 里程减免 + 其他减免 |
| **月度收入** | 月度租金 + 维保包干收入 + 保险上浮费 + 运维费（收入）+ 其他收入 + 里程减免 + 其他减免 |
| **未收** | 应收合计 − 实收金额 |
| **车辆实际成本** | 车辆标准成本 × 平均天数 |
| **总成本** | 车辆实际成本 + 保险费 + 氢费 + 运维费（成本）+ 居间费 + 其他 |
| **盈亏** | 月度收入 − 总成本 |

减免金额在 Excel 中以负数录入；导入时填负数即可。

---

## 7. 样例数据

- 文件：`data/rows.json`
- 来源：Excel《2026年业务二部运营台账总表6.17 - 新版》2026 年 1–6 月明细
- 条数：553 条；汇总与 Excel SUBTOTAL 行一致

---

## 8. 源码入口

| 类型 | 路径 |
|---|---|
| 主入口 | `index.tsx` |
| 标注源 | `annotation-source.json` |
| 列定义 | `components/tableColumns.ts` |
| 筛选 / KPI 汇总 | `utils/detail.ts` |
| 收款状态 | `utils/payment-status.ts` |
| 公式计算 | `utils/calc-detail.ts` |
| 导入导出 | `utils/batch-io.ts` |
| 变更日志 | `utils/change-log.ts` |
| 类型 | `types.ts` |
| 组件 | `FilterPanel.tsx`、`DetailKpiRow.tsx`、`DetailTable.tsx`、`DetailImportModal.tsx`、`DetailEditModal.tsx`、`DetailChangeLogModal.tsx` |

---

## 9. 验收重点

1. 筛选区含「状态」；状态列展示未收款 / 部分收款 / 已结清
2. 筛选后 KPI、表尾汇总与明细行合计一致
3. 左冻结：状态 + 月份 + 车牌号码
4. 氢费非零可点击明细；编辑/删除/变更日志可用
5. 未收 > 0 标红；盈亏正负着色

---

## 10. 待规划项（评审记录）

详见 `.spec/prototype-review.md`：

- P1：盈亏月度汇总 Tab
- P1：与租赁业务台账 / 收款模块集成口径
- P2：导入重复键（年+月+车牌）处理策略
