# Prototype Review

- 审查目标：`src/prototypes/lease-business-detail`（页面 `list`）
- 用户资料/参考资料：
  - 对话中已确认的 Excel《2026年业务二部运营台账总表6.17 - 新版》「2.租赁车辆收入明细表」字段顺序、23 项汇总、6 项公式列与 7 项 KPI 口径
  - `src/resources/oneos-web-legacy/数据分析/租赁车辆收入明细.jsx`
  - `src/prototypes/oneos-web-data-analysis/pages/08-租赁车辆收入明细.jsx`
  - `src/prototypes/oneos-web-data-analysis/pages/05-业务部台账.jsx`（租赁业绩数据来源说明）
  - `src/prototypes/lease-business-ledger/.spec/requirements-prd.md`（对照模块）
  - 原型源码、`annotation-source.json`、`data/rows.json`
- 生成时间：2026-07-09 16:18

## 总体点评

原型在「租赁运营明细宽表」主路径上已具备可运行闭环：筛选 → 7 项 KPI → 47 列分页列表 → 23 项表尾汇总 → 批量导入/导出，且公式列（应收合计、月度收入、未收、车辆实际成本、总成本、盈亏）与 Excel SUBTOTAL 逻辑一致，553 条 2026 年样例数据汇总与台账样表核对无偏差。列表字段、双运维费列、左冻结年份/车牌、日期列排序等近期决策在实现中落地较完整。

主要缺口集中在**模块边界与资料体系**：相对 `src/resources` 中「租赁车辆收入明细」双 Tab 结构，当前仅实现明细列表，缺少「租赁业务盈亏月度汇总」；相对 `lease-business-ledger`，本原型未说明「明细维护」与「台账收款关联」的分工，实收仍为导入手工列。导入流程可完成演示，但缺少重复数据与行级校验策略，长期批量维护存在数据质量风险。整体适合作为 Excel 明细表的交互原型，尚不足以单独支撑数据分析侧完整用户旅程。

## P0-P3 优先级问题

### P1 - 缺少「租赁业务盈亏月度汇总」Tab / 页面

- 证据：`src/resources/oneos-web-legacy/数据分析/租赁车辆收入明细.jsx` 与 `src/prototypes/oneos-web-data-analysis/pages/08-租赁车辆收入明细.jsx` 均包含「租赁业务明细」+「租赁业务盈亏月度汇总」两个 Tab；当前 `index.tsx` 仅单页 `list`，`annotation-source.json` 目录也只有一条路由。
- 影响：需要按月查看盈亏汇总、对比年度趋势的用户无法在本原型完成核心分析任务，与既有产品资料表达不一致。
- 修复方向：在 `.spec` 明确是否纳入本原型范围；若纳入，增加第二 Tab 或子路由，按年份聚合月份级押金/应收/实收/未收/收入/成本/盈亏，并保留导出。

### P1 - 与「租赁业务台账」边界不清，实收口径未闭环

- 证据：`lease-business-ledger` PRD 定义收款关联、`calcReceivedAmountFromReceipts`、明细状态；本原型 `receivedAmount` 为导入手工列（`batch-io.ts`），无关联收款、无「未收款/部分收款/已收款」状态；`oneos-web-data-analysis/05-业务部台账.jsx` 注明租赁业绩来自「租赁业务明细」。
- 影响：业务方可能混淆两个模块职责；实收可任意填写导致未收/盈亏与真实收款脱节，下游汇总分析可信度下降。
- 修复方向：在 `.spec/requirements-prd.md` 写清「明细表 = 业管 Excel 维护」「台账 = 收款闭环」或统一为一条链路；至少增加实收 ≤ 应收合计校验，并标注与台账/收款模块的集成计划。

### P2 - 批量导入仅追加，无重复键与覆盖策略

- 证据：`index.tsx` 导入成功后 `setRecords((prev) => [...imported, ...prev])`；`parseDetailImportFile` 仅以「年份 + 月份 + 车牌号码」判空跳过，不检测同键已存在行。
- 影响：业管重复导入同月同车数据会产生重复行，KPI 与表尾汇总被放大，难以恢复。
- 修复方向：定义业务主键（建议 `year + month + plateNo`，是否加业务员待确认）；导入时支持跳过/覆盖/报错三种策略，并返回行级结果摘要。

### P2 - 导入与计算缺少行级校验反馈

- 证据：导入失败仅 Toast（`未解析到有效数据` / `导入失败`）；无字段格式、数值范围、必填组合（如平均天数为 0 时成本为 0）的逐行报告；`receivedAmount` 可大于 `receivableTotal` 产生负未收且无提示。
- 影响：大批量维护时难以定位问题行，错误数据静默进入列表。
- 修复方向：导入结果弹层展示成功/跳过/失败行数与原因；对实收超额、非法日期、押金格式等做行级校验清单。

### P3 - 缺少正式需求文档，annotation 未覆盖字段与公式说明

- 证据：`.spec/` 仅有空的 `prototype-comments.json`，无 `requirements-prd.md`；`annotation-source.json` 仅 4 个区块简述，未像 `lease-business-ledger` 那样标注各列口径、公式列只读规则、与 Excel 样表映射。
- 影响：评审、测试与后续开发缺少单一事实来源，跨模块对齐成本高。
- 修复方向：补充 `.spec/requirements-prd.md`（用户、范围、不做项、验收清单）；扩展 annotation 对公式列、导入模板列、KPI/汇总口径的说明。

## 完整性与项目对齐

| 维度 | 结论 |
|------|------|
| 核心用户 | 隐含为业务二部业管/运营人员（样例数据均为「业务二部」），未在 `.spec` 明文写出 |
| 核心任务 | **已覆盖**：按条件查询明细、查看 KPI 与表尾汇总、Excel 模板导入与导出 |
| 主流程入口 | 侧边栏 `prototypes/lease-business-detail`（`sidebar-tree.json`） |
| 主流程出口 | 导出当前筛选结果；无保存至服务端、无返回上游分析页导航 |
| 范围边界 | **已对齐**：47 列宽表、6 公式列自动计算、7+23 汇总结构、2026 样例 1–6 月 |
| 范围缺口 | **未覆盖**：盈亏月度汇总 Tab；行内编辑/删除；持久化；收款关联 |
| 与 ledger 关系 | **待确认**：两模块均处理租赁运营金额，字段模型不同（明细 47 列 vs 台账账单字段），需产品定稿分工 |
| 与数据分析关系 | `05-业务部台账` 声明租赁业绩取自本明细；当前原型未暴露 API/聚合接口，仅本地 JSON，**集成待确认** |
| 资料冲突 | Legacy 数据分析页为简化列（应收/实收/自然月收入等 ~20 列），本原型已升级为 Excel 运营台账 47 列——**以对话与 Excel 样表为准**，Legacy 作交互参考而非字段真相 |

## 业务逻辑连贯性

- **筛选逻辑**：`statMonth`（`YYYY-MM`）、业务部门、业务员精确匹配，客户名称模糊匹配，车牌多选；查询按钮触发 `appliedFilters`，与 KPI/汇总联动，逻辑自洽。
- **汇总口径**：KPI 7 项与表尾 23 项均基于**全量筛选结果**（非当前页），与 Excel SUBTOTAL 语义一致；分页仅影响表格 body，不影响汇总，合理。
- **公式链路**：`calc-detail.ts` 与 Excel 公式一致（应收合计、月度收入、未收、车辆实际成本、总成本、盈亏）；加载种子数据与导入后均调用 `applyDetailCalculations`，避免公式列脏读。
- **状态迁移**：无「草稿/已提交/归档」；导入即入库（内存），无版本与审计轨迹。
- **角色权限**：未实现员工/主管数据范围（`lease-business-ledger` 有 `filterRecordsByRole`），本原型全员可见全部 553 条。
- **跨页一致性**：单页原型，无跨路由状态问题。

## 状态、异常、边界与恢复

| 场景 | 现状 | 评价 |
|------|------|------|
| 空数据 | 表格区展示空状态文案 + 导入引导 | 已覆盖 |
| 加载 | 筛选查询 280ms 骨架屏 | 已覆盖（模拟） |
| 导入成功 | Toast + 关闭弹窗 + 重置页码 | 已覆盖 |
| 导入无有效行 | Toast 提示检查模板 | 已覆盖，但无行级原因 |
| 导入异常 | 通用「导入失败」Toast | 偏弱 |
| 导出 | 导出筛选结果 + Toast | 已覆盖 |
| 重复导入 | 直接追加 | **缺恢复路径** |
| 实收 > 应收 | 允许，未收为负 | **缺业务提示** |
| 刷新页面 | 恢复种子数据，导入丢失 | 原型可接受，需标注 |
| 宽表横向滚动 | `lbd-table-wrap` overflow 修复 | 已覆盖 |
| 并发/权限 | 未涉及 | 不适用 |

## 证据与评估说明

- **用户资料优先级**：本轮无新的用户附件；以对话中 Excel 对齐决策为主。与 Legacy 简化列模型存在差异，已在「完整性与项目对齐」标记，**不视为 P0 冲突**。
- **读取范围**：`rules/prototype-review-guide.md`；`index.tsx`、`types.ts`、`utils/calc-detail.ts`、`utils/batch-io.ts`、`utils/detail.ts`、`components/*`、`data/rows.json`、`annotation-source.json`；`src/resources/oneos-web-legacy/数据分析/租赁车辆收入明细.jsx`；`lease-business-ledger/.spec/requirements-prd.md`；`oneos-web-data-analysis/pages/05-业务部台账.jsx`（片段）；`.axhub/make/sidebar-tree.json`。
- **独立评估**：`degraded`（未使用双子代理；在同一审查内先建立业务基线再对照源码，结论仍基于双源交叉验证）。
