{
  "documentVersion": 1,
  "format": "axhub-annotation-source",
  "data": {
    "version": 2,
    "prototypeName": "lease-business-detail",
    "pageId": "list",
    "updatedAt": 1783800844965,
    "nodes": [
      {
        "id": "lbd-filter",
        "index": 1,
        "title": "筛选条件",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-filter\"]"
          ],
          "fingerprint": "lbd-filter",
          "path": []
        },
        "aiPrompt": "统计月份、部门、业务员、客户、状态、车牌筛选。",
        "annotationText": "## 2. 筛选区\n\n默认展示 5 项（一行），「更多筛选」展开车牌多选。\n\n| 筛选项 | 说明 |\n|---|---|\n| 统计月份 | `YYYY-MM` 格式，精确匹配年份+月份 |\n| 业务部门 | 精确匹配 |\n| 业务员 | 精确匹配 |\n| 客户名称 | 模糊包含 |\n| 状态 | 已结清 / 部分收款 / 未收款（按实收与应收合计计算） |\n| 车牌号码 | 多选精确匹配（更多筛选） |\n\n查询按钮触发筛选；KPI 与表尾汇总基于**全量筛选结果**（非当前页）。\n\n---",
        "hasMarkdown": true,
        "color": "#2563eb",
        "images": [],
        "createdAt": 1783488000000,
        "updatedAt": 1783612156632,
        "controls": []
      },
      {
        "id": "lbd-kpi",
        "index": 2,
        "title": "KPI 汇总",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-kpi\"]"
          ],
          "fingerprint": "lbd-kpi",
          "path": []
        },
        "aiPrompt": "7 项关键指标口径。",
        "annotationText": "## 3. KPI 统计卡片（7 张）\n\n顶部展示关键指标；完整 23 项金额合计见列表底部汇总行。\n\n| KPI | 汇总字段 |\n|---|---|\n| 应收总计 | receivableTotal |\n| 押金总计 | deposit（仅数值型） |\n| 实收总计 | receivedAmount |\n| 里程减免总计 | mileageDeduction |\n| 其他减免总计 | otherDeduction |\n| 未收总计 | outstanding（>0 标红） |\n| 盈亏总计 | profitLoss（正负着色） |\n\n---",
        "hasMarkdown": true,
        "color": "#059669",
        "images": [],
        "createdAt": 1783488000000,
        "updatedAt": 1783612156632,
        "controls": []
      },
      {
        "id": "lbd-toolbar",
        "index": 3,
        "title": "批量导入导出",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-toolbar\"]"
          ],
          "fingerprint": "lbd-toolbar",
          "path": []
        },
        "aiPrompt": "导入模板与导出列范围。",
        "annotationText": "## 4. 列表工具栏\n\n| 按钮 | 行为 |\n|---|---|\n| 批量导入 | 下载模板（36 列手工录入）→ 上传 Excel → 公式列自动计算 |\n| 批量导出 | 导出当前筛选结果（完整 47 列，含公式列结果） |\n\n导入必填见模板说明。\n\n### 权限\n\n- 默认业管人员可编辑、删除明细记录\n- 主管预览：URL 追加 `?role=supervisor`（可修改已锁定记录）\n\n---",
        "hasMarkdown": true,
        "color": "#7c3aed",
        "images": [],
        "createdAt": 1783488000000,
        "updatedAt": 1783612156632,
        "controls": []
      },
      {
        "id": "lbd-table",
        "index": 4,
        "title": "明细列表",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-table\"]"
          ],
          "fingerprint": "lbd-table",
          "path": []
        },
        "aiPrompt": "48 列宽表、状态列、汇总行与交互。",
        "annotationText": "## 5. 明细列表（48 列）\n\n表头顺序严格对齐 Excel「2.租赁车辆收入明细表」，并在月份列左侧增加「状态」列。\n\n### 交互\n\n- 横向滚动；左冻结：**状态 + 月份 + 车牌号码**\n- 仅**日期类列**表头支持正序/倒序排序\n- 公式列（calculated）浅灰底色，导入模板不含\n- 表尾**汇总行**：23 个金额列 SUBTOTAL，月份列显示「汇总」\n- 未收 > 0 单元格标红；盈亏正负着色\n- 底部分页：10 / 20 / 50 / 100\n\n### 收款状态（状态列）\n\n| 状态 | 判定规则 |\n|---|---|\n| 未收款 | 实收金额 = 0 或未录入 |\n| 部分收款 | 实收金额 > 0 且 < 应收合计 |\n| 已结清 | 实收金额 ≥ 应收合计 |\n\n### 表尾汇总（23 项）\n\n押金、合同标的租金、应收合计、应收租金、月度收入、月度租金、维保包干收入、保险上浮费、运维费（收入）、其他收入、里程减免金额、其他减免金额、实收金额、未收、车辆标准成本、车辆实际成本、保险费、氢费、运维费（成本）、居间费、其他、总成本、盈亏。\n\n---",
        "hasMarkdown": true,
        "color": "#ea580c",
        "images": [],
        "createdAt": 1783488000000,
        "updatedAt": 1783612156632,
        "controls": []
      },
      {
        "id": "lbd-col-receivable-total",
        "index": 5,
        "title": "应收合计",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-col-receivable-total\"]"
          ],
          "fingerprint": "lbd-col-receivable-total",
          "path": []
        },
        "aiPrompt": "应收合计字段计算口径。",
        "annotationText": "## 应收合计\n\n**计算方式**：维保包干收入 + 保险上浮费 + 运维费（收入）+ 其他收入 + 里程减免金额（负数）+ 其他减免金额（负数）。\n**录入方式**：系统自动计算，只读。\n\n---",
        "hasMarkdown": true,
        "color": "#64748b",
        "images": [],
        "createdAt": 1783612752344,
        "updatedAt": 1783612752344,
        "controls": []
      },
      {
        "id": "lbd-col-outstanding",
        "index": 6,
        "title": "未收",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-col-outstanding\"]"
          ],
          "fingerprint": "lbd-col-outstanding",
          "path": []
        },
        "aiPrompt": "未收字段计算口径。",
        "annotationText": "## 未收\n\n**计算方式**：应收合计 − 实收金额。\n**录入方式**：系统自动计算，只读。\n\n---",
        "hasMarkdown": true,
        "color": "#64748b",
        "images": [],
        "createdAt": 1783612752344,
        "updatedAt": 1783612752344,
        "controls": []
      },
      {
        "id": "lbd-col-vehicle-actual-cost",
        "index": 7,
        "title": "车辆实际成本",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-col-vehicle-actual-cost\"]"
          ],
          "fingerprint": "lbd-col-vehicle-actual-cost",
          "path": []
        },
        "aiPrompt": "车辆实际成本字段计算口径。",
        "annotationText": "## 车辆实际成本\n\n**计算方式**：车辆实际成本 = 车辆标准成本 × 平均天数。\n**录入方式**：系统自动计算，只读。\n\n---",
        "hasMarkdown": true,
        "color": "#64748b",
        "images": [],
        "createdAt": 1783612752344,
        "updatedAt": 1783612752344,
        "controls": []
      },
      {
        "id": "lbd-col-total-cost",
        "index": 8,
        "title": "总成本",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-col-total-cost\"]"
          ],
          "fingerprint": "lbd-col-total-cost",
          "path": []
        },
        "aiPrompt": "总成本字段计算口径。",
        "annotationText": "## 总成本\n\n**计算方式**：总成本 = 车辆实际成本 + 保险费 + 氢费 + 运维费（成本）+ 居间费 + 其他。\n**录入方式**：系统自动计算，只读。\n\n---",
        "hasMarkdown": true,
        "color": "#64748b",
        "images": [],
        "createdAt": 1783612752344,
        "updatedAt": 1783612752344,
        "controls": []
      },
      {
        "id": "lbd-col-profit-loss",
        "index": 9,
        "title": "盈亏",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-col-profit-loss\"]"
          ],
          "fingerprint": "lbd-col-profit-loss",
          "path": []
        },
        "aiPrompt": "盈亏字段计算口径。",
        "annotationText": "## 盈亏\n\n**计算方式**：盈亏 = 月度收入 − 总成本。\n**录入方式**：系统自动计算，只读。\n\n---",
        "hasMarkdown": true,
        "color": "#64748b",
        "images": [],
        "createdAt": 1783612752344,
        "updatedAt": 1783612752344,
        "controls": []
      },
      {
        "id": "lbd-col-hydrogen-fee",
        "index": 10,
        "title": "氢费",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-col-hydrogen-fee\"]"
          ],
          "fingerprint": "lbd-col-hydrogen-fee",
          "path": []
        },
        "aiPrompt": "氢费字段汇总口径与明细弹窗。",
        "annotationText": "## 氢费\n\n**计算方式**：车辆氢费明细中，该车牌在「提车日期」与「退车日期」之间、承担方式为「我司承担」的加氢记录「加氢总价（元）」求和。\n**表头提示**：显示该车牌号码对应客户名称，所有加氢记录，承担方式为我司承担的记录「加氢总价（元）」总和。\n**交互**：金额不为零时可点击，弹出加氢明细列表。\n**录入方式**：系统自动汇总，只读。\n\n---",
        "hasMarkdown": true,
        "color": "#64748b",
        "images": [],
        "createdAt": 1783612752344,
        "updatedAt": 1783612752344,
        "controls": []
      },
      {
        "id": "lbd-col-status",
        "index": 12,
        "title": "状态",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-col-status\"]"
          ],
          "fingerprint": "lbd-col-status",
          "path": []
        },
        "aiPrompt": "收款状态列：未收款 / 部分收款 / 已结清。",
        "annotationText": "## 状态\n\n按**实收金额**与**应收合计**自动计算，只读展示。\n\n| 状态 | 判定规则 |\n|---|---|\n| **未收款** | 实收金额 = 0 或未录入 |\n| **部分收款** | 实收金额 > 0 且 < 应收合计 |\n| **已结清** | 实收金额 ≥ 应收合计 |\n\n列位置：月份列左侧；左冻结。\n\n---",
        "hasMarkdown": true,
        "color": "#0d9488",
        "images": [],
        "createdAt": 1783656452224,
        "updatedAt": 1783656452224,
        "controls": []
      },
      {
        "id": "lbd-changelog-modal",
        "index": 13,
        "title": "变更日志",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"lbd-changelog-modal\"]"
          ],
          "fingerprint": "lbd-changelog-modal",
          "path": []
        },
        "aiPrompt": "变更日志弹窗标题与列表字段。",
        "annotationText": "## 变更日志\n\n弹窗标题仅显示「变更日志」；表格上方展示记录条数，列表字段为操作时间、操作人、字段、修改前、修改后。\n\n---",
        "hasMarkdown": true,
        "color": "#64748b",
        "images": [],
        "createdAt": 1783612752344,
        "updatedAt": 1783612752344,
        "controls": []
      }
    ],
    "directory": {
      "roots": [
        {
          "id": "root-list",
          "label": "租赁业务明细",
          "children": [
            {
              "id": "route-list",
              "type": "route",
              "route": "list"
            }
          ]
        }
      ],
      "markdownNodes": []
    }
  },
  "markdownMap": {
    "lbd-filter": "## 2. 筛选区\n\n默认展示 5 项（一行），「更多筛选」展开车牌多选。\n\n| 筛选项 | 说明 |\n|---|---|\n| 统计月份 | `YYYY-MM` 格式，精确匹配年份+月份 |\n| 业务部门 | 精确匹配 |\n| 业务员 | 精确匹配 |\n| 客户名称 | 模糊包含 |\n| 状态 | 已结清 / 部分收款 / 未收款（按实收与应收合计计算） |\n| 车牌号码 | 多选精确匹配（更多筛选） |\n\n查询按钮触发筛选；KPI 与表尾汇总基于**全量筛选结果**（非当前页）。\n\n---",
    "lbd-kpi": "## 3. KPI 统计卡片（7 张）\n\n顶部展示关键指标；完整 23 项金额合计见列表底部汇总行。\n\n| KPI | 汇总字段 |\n|---|---|\n| 应收总计 | receivableTotal |\n| 押金总计 | deposit（仅数值型） |\n| 实收总计 | receivedAmount |\n| 里程减免总计 | mileageDeduction |\n| 其他减免总计 | otherDeduction |\n| 未收总计 | outstanding（>0 标红） |\n| 盈亏总计 | profitLoss（正负着色） |\n\n---",
    "lbd-toolbar": "## 4. 列表工具栏\n\n| 按钮 | 行为 |\n|---|---|\n| 批量导入 | 下载模板（36 列手工录入）→ 上传 Excel → 公式列自动计算 |\n| 批量导出 | 导出当前筛选结果（完整 47 列，含公式列结果） |\n\n导入必填见模板说明。\n\n### 权限\n\n- 默认业管人员可编辑、删除明细记录\n- 主管预览：URL 追加 `?role=supervisor`（可修改已锁定记录）\n\n---",
    "lbd-table": "## 5. 明细列表（48 列）\n\n表头顺序严格对齐 Excel「2.租赁车辆收入明细表」，并在月份列左侧增加「状态」列。\n\n### 交互\n\n- 横向滚动；左冻结：**状态 + 月份 + 车牌号码**\n- 仅**日期类列**表头支持正序/倒序排序\n- 公式列（calculated）浅灰底色，导入模板不含\n- 表尾**汇总行**：23 个金额列 SUBTOTAL，月份列显示「汇总」\n- 未收 > 0 单元格标红；盈亏正负着色\n- 底部分页：10 / 20 / 50 / 100\n\n### 收款状态（状态列）\n\n| 状态 | 判定规则 |\n|---|---|\n| 未收款 | 实收金额 = 0 或未录入 |\n| 部分收款 | 实收金额 > 0 且 < 应收合计 |\n| 已结清 | 实收金额 ≥ 应收合计 |\n\n### 表尾汇总（23 项）\n\n押金、合同标的租金、应收合计、应收租金、月度收入、月度租金、维保包干收入、保险上浮费、运维费（收入）、其他收入、里程减免金额、其他减免金额、实收金额、未收、车辆标准成本、车辆实际成本、保险费、氢费、运维费（成本）、居间费、其他、总成本、盈亏。\n\n---",
    "lbd-doc-formulas": "## 6. 公式列（系统自动计算）\n\n对齐 Excel 表内公式；实现见 `utils/calc-detail.ts`。\n\n| 字段 | 计算方式 |\n|---|---|\n| **应收合计** | 维保包干收入 + 保险上浮费 + 运维费（收入）+ 其他收入 + 里程减免金额（负数）+ 其他减免金额（负数） |\n| **月度收入** | 月度租金 + 维保包干收入 + 保险上浮费 + 运维费（收入）+ 其他收入 + 里程减免 + 其他减免 |\n| **未收** | 应收合计 − 实收金额 |\n| **车辆实际成本** | 车辆标准成本 × 平均天数 |\n| **总成本** | 车辆实际成本 + 保险费 + 氢费 + 运维费（成本）+ 居间费 + 其他 |\n| **盈亏** | 月度收入 − 总成本 |\n\n减免金额在 Excel 中以负数录入；导入时填负数即可。\n\n---",
    "lbd-doc-boundary": "## 模块边界\n\n### 与「租赁业务台账」的分工\n\n| 模块 | 定位 |\n|---|---|\n| **租赁业务明细**（本模块） | 对齐业管 Excel 运营台账宽表；手工列导入维护；6 个公式列自动计算；**不**做收款关联与账单状态 |\n| **租赁业务台账** | 账单维度维护、关联收款记录、收款状态（未收/部分/已收）、归档与角色数据范围 |\n\n下游 **业务部台账 / 业务汇总分析** 中「租赁业绩」数据来源为本模块明细。\n\n### 不做范围（当前原型）\n\n- 「租赁业务盈亏月度汇总」独立 Tab\n- 行内编辑、删除、服务端持久化\n- 关联收款记录自动回写实收\n- 员工/主管数据权限隔离\n\n---",
    "lbd-doc-overview": "## 1. 模块定位\n\n| 项 | 说明 |\n|---|---|\n| 模块名称 | 台账数据 — 租赁业务明细 |\n| 目标用户 | 业务二部业管 / 运营人员 |\n| 核心任务 | 按 Excel 样表维护租赁车辆收入明细、查询汇总、批量导入导出 |\n| 页面结构 | 筛选区 + 7 项 KPI + 工具栏 + 47 列宽表（表尾 23 项汇总）+ 分页 |\n| 设计基底 | vm-page + ldb-page + lc-page |\n\n对齐 Excel《2026年业务二部运营台账总表》「2.租赁车辆收入明细表」。\n\n---",
    "lbd-col-receivable-total": "## 应收合计\n\n**计算方式**：维保包干收入 + 保险上浮费 + 运维费（收入）+ 其他收入 + 里程减免金额（负数）+ 其他减免金额（负数）。\n**录入方式**：系统自动计算，只读。\n\n---",
    "lbd-col-outstanding": "## 未收\n\n**计算方式**：应收合计 − 实收金额。\n**录入方式**：系统自动计算，只读。\n\n---",
    "lbd-col-vehicle-actual-cost": "## 车辆实际成本\n\n**计算方式**：车辆实际成本 = 车辆标准成本 × 平均天数。\n**录入方式**：系统自动计算，只读。\n\n---",
    "lbd-col-total-cost": "## 总成本\n\n**计算方式**：总成本 = 车辆实际成本 + 保险费 + 氢费 + 运维费（成本）+ 居间费 + 其他。\n**录入方式**：系统自动计算，只读。\n\n---",
    "lbd-col-profit-loss": "## 盈亏\n\n**计算方式**：盈亏 = 月度收入 − 总成本。\n**录入方式**：系统自动计算，只读。\n\n---",
    "lbd-col-hydrogen-fee": "## 氢费\n\n**计算方式**：车辆氢费明细中，该车牌在「提车日期」与「退车日期」之间、承担方式为「我司承担」的加氢记录「加氢总价（元）」求和。\n**表头提示**：显示该车牌号码对应客户名称，所有加氢记录，承担方式为我司承担的记录「加氢总价（元）」总和。\n**交互**：金额不为零时可点击，弹出加氢明细列表（加氢时间、加氢站名称、客户名称、车牌号码、加氢量、加氢单价、加氢总价）。\n**录入方式**：系统自动汇总，只读。\n\n---",
    "lbd-col-status": "## 状态\n\n按**实收金额**与**应收合计**自动计算，只读展示。\n\n| 状态 | 判定规则 |\n|---|---|\n| **未收款** | 实收金额 = 0 或未录入 |\n| **部分收款** | 实收金额 > 0 且 < 应收合计 |\n| **已结清** | 实收金额 ≥ 应收合计 |\n\n列位置：月份列左侧；左冻结。\n\n---",
    "lbd-changelog-modal": "## 变更日志\n\n弹窗标题仅显示「变更日志」；表格上方展示记录条数，列表字段为操作时间、操作人、字段、修改前、修改后。\n\n---"
  },
  "assetMap": {},
  "directory": {
    "nodes": [
      {
        "type": "folder",
        "id": "lbd-doc-root",
        "title": "租赁业务明细说明",
        "defaultExpanded": true,
        "children": [
          {
            "type": "markdown",
            "id": "lbd-doc-overview",
            "title": "模块总览",
            "markdown": "## 1. 模块定位\n\n| 项 | 说明 |\n|---|---|\n| 模块名称 | 台账数据 — 租赁业务明细 |\n| 目标用户 | 业务二部业管 / 运营人员 |\n| 核心任务 | 按 Excel 样表维护租赁车辆收入明细、查询汇总、批量导入导出 |\n| 页面结构 | 筛选区 + 7 项 KPI + 工具栏 + 47 列宽表（表尾 23 项汇总）+ 分页 |\n| 设计基底 | vm-page + ldb-page + lc-page |\n\n对齐 Excel《2026年业务二部运营台账总表》「2.租赁车辆收入明细表」。\n\n---"
          },
          {
            "type": "link",
            "id": "lbd-link-self",
            "title": "租赁业务明细原型",
            "href": "./index.html",
            "target": "self"
          },
          {
            "type": "markdown",
            "id": "lbd-doc-prd",
            "title": "PRD 全文",
            "markdown": "# 租赁业务明细 · 产品需求说明（PRD）\n\n> 对齐 Excel《2026年业务二部运营台账总表》「2.租赁车辆收入明细表」；业管人员按月份维护运营明细，公式列系统自动计算。\n\n---\n\n## 1. 模块定位\n\n| 项 | 说明 |\n|---|---|\n| 模块名称 | 台账数据 — 租赁业务明细 |\n| 原型路径 | `src/prototypes/lease-business-detail` |\n| 预览地址 | `/prototypes/lease-business-detail` |\n| 目标用户 | 业务二部业管 / 运营人员 |\n| 核心任务 | 按 Excel 样表维护租赁车辆收入明细、查询汇总、批量导入导出 |\n| 页面结构 | 筛选区 + 7 项 KPI + 工具栏 + 47 列宽表（表尾 23 项汇总）+ 分页 |\n| 设计基底 | `vm-page` + `ldb-page` + `lc-page`（见 `ledger-shared/DESIGN.md`） |\n\n### 与「租赁业务台账」的分工\n\n| 模块 | 定位 |\n|---|---|\n| **租赁业务明细**（本模块） | 对齐业管 Excel 运营台账宽表；手工列导入维护；6 个公式列自动计算；**不**做收款关联与账单状态 |\n| **租赁业务台账** | 账单维度维护、关联收款记录、收款状态（未收/部分/已收）、归档与角色数据范围 |\n\n下游 **业务部台账 / 业务汇总分析** 中「租赁业绩」数据来源为本模块明细（见 `oneos-web-data-analysis/05-业务部台账`）。\n\n### 不做范围（当前原型）\n\n- 「租赁业务盈亏月度汇总」独立 Tab（Legacy 数据分析页有，本原型待规划）\n- 行内编辑、删除、服务端持久化\n- 关联收款记录自动回写实收\n- 员工/主管数据权限隔离\n\n---\n\n## 2. 筛选区\n\n默认展示 4 项（一行），「更多筛选」展开车牌多选。\n\n| 筛选项 | 说明 |\n|---|---|\n| 统计月份 | `YYYY-MM` 格式，精确匹配年份+月份 |\n| 业务部门 | 精确匹配 |\n| 业务员 | 精确匹配 |\n| 客户名称 | 模糊包含 |\n| 车牌号码 | 多选精确匹配（更多筛选） |\n\n查询按钮触发筛选；KPI 与表尾汇总基于**全量筛选结果**（非当前页）。\n\n---\n\n## 3. KPI 统计卡片（7 张）\n\n顶部展示关键指标；完整 23 项金额合计见列表底部汇总行。\n\n| KPI | 汇总字段 |\n|---|---|\n| 应收总计 | `receivableTotal` |\n| 押金总计 | `deposit`（仅数值型） |\n| 实收总计 | `receivedAmount` |\n| 里程减免总计 | `mileageDeduction` |\n| 其他减免总计 | `otherDeduction` |\n| 未收总计 | `outstanding`（>0 标红） |\n| 盈亏总计 | `profitLoss`（正负着色） |\n\n---\n\n## 4. 列表工具栏\n\n| 按钮 | 行为 |\n|---|---|\n| 批量导入 | 下载模板（仅手工录入列）→ 上传 Excel → 公式列自动计算 |\n| 批量导出 | 导出当前筛选结果（完整 47 列，含公式列结果） |\n\n导入必填：**年份、月份、车牌号码**。\n\n---\n\n## 5. 明细列表（47 列）\n\n表头顺序严格对齐 Excel「2.租赁车辆收入明细表」：\n\n年份、月份、业务部门、业务员、付款日期、车牌号码、车型、客户名称、增值服务、享免政策、提车日期、合同生效日期、合同到期日期、起始日期、退车日期、平均天数、押金、合同标的租金、应收合计、应收租金、月度收入、月度租金、维保包干收入、保险上浮费、运维费（收入）、其他收入、里程减免金额、其他减免金额、实收金额、未收、开票日期、实际付款日期、付款方式、车辆标准成本、车辆实际成本、保险费、氢费、运维费（成本）、居间费、其他、总成本、盈亏、GPS里程、其他减免金额明细内容、资产归属、签约公司、备注。\n\n### 交互\n\n- 横向滚动；左冻结：**年份 + 车牌号码**\n- 仅**日期类列**表头支持正序/倒序排序\n- 公式列（`calculated`）浅灰底色，表示系统计算、导入模板不含\n- 表尾**汇总行**：23 个金额列 SUBTOTAL，首列显示「汇总」\n- 未收 > 0 单元格标红；盈亏正负着色\n- 底部分页：10 / 20 / 50 / 100\n\n### 表尾汇总（23 项）\n\n押金、合同标的租金、应收合计、应收租金、月度收入、月度租金、维保包干收入、保险上浮费、运维费（收入）、其他收入、里程减免金额、其他减免金额、实收金额、未收、车辆标准成本、车辆实际成本、保险费、氢费、运维费（成本）、居间费、其他、总成本、盈亏。\n\n---\n\n## 6. 公式列（系统自动计算）\n\n对齐 Excel 表内公式；实现见 `utils/calc-detail.ts`。\n\n| 字段 | 计算方式 |\n|---|---|\n| **应收合计** | 应收租金 + 维保包干收入 + 保险上浮费 + 运维费(收入) + 其他收入 + 里程减免 + 其他减免 |\n| **月度收入** | 月度租金 + 同上调整项 |\n| **未收** | 应收合计 − 实收金额 |\n| **车辆实际成本** | 车辆标准成本 × 平均天数 |\n| **总成本** | 车辆实际成本 + 保险费 + 氢费 + 运维费(成本) + 居间费 + 其他 |\n| **盈亏** | 月度收入 − 总成本 |\n\n减免金额在 Excel 中以负数录入；导入时填负数即可。\n\n### 导入模板\n\n- **含**：41 列手工录入字段（不含上述 6 列）\n- **不含**：应收合计、月度收入、未收、车辆实际成本、总成本、盈亏\n- 导入后调用 `applyDetailCalculations` 统一重算\n\n---\n\n## 7. 样例数据\n\n- 文件：`data/rows.json`\n- 来源：Excel《2026年业务二部运营台账总表6.17 - 新版》2026 年 1–6 月明细\n- 条数：553 条；汇总与 Excel SUBTOTAL 行一致\n\n---\n\n## 8. 源码入口\n\n| 类型 | 路径 |\n|---|---|\n| 主入口 | `index.tsx` |\n| 标注源 | `annotation-source.json` |\n| 列定义 | `components/tableColumns.ts` |\n| 筛选 / KPI 汇总 | `utils/detail.ts` |\n| 公式计算 | `utils/calc-detail.ts` |\n| 导入导出 | `utils/batch-io.ts` |\n| 类型 | `types.ts` |\n| 组件 | `components/FilterPanel.tsx`、`DetailKpiRow.tsx`、`DetailTable.tsx`、`DetailImportModal.tsx` |\n\n---\n\n## 9. 验收重点\n\n1. 表头 47 列顺序与 Excel 样表一致；双「运维费」列位置正确\n2. 筛选后 KPI、表尾汇总与明细行合计一致\n3. 下载导入模板无 6 个公式列；导入后公式列自动计算且与 Excel 同口径\n4. 导出为完整 47 列\n5. 横向滚动与左冻结（年份、车牌）正常\n6. 未收 > 0 标红；盈亏正负着色\n\n---\n\n## 10. 待规划项（评审记录）\n\n详见 `.spec/prototype-review.md`：\n\n- P1：盈亏月度汇总 Tab\n- P1：与租赁业务台账 / 收款模块集成口径\n- P2：导入重复键（年+月+车牌）处理策略\n- P2：导入行级校验与实收 ≤ 应收校验\n",
            "markdownPath": "src/prototypes/lease-business-detail/.spec/requirements-prd.md"
          },
          {
            "type": "folder",
            "id": "lbd-doc-page-annotations",
            "title": "页面标注",
            "defaultExpanded": true,
            "children": [
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-filter",
                "title": "筛选条件",
                "markdown": "## 2. 筛选区\n\n默认展示 5 项（一行），「更多筛选」展开车牌多选。\n\n| 筛选项 | 说明 |\n|---|---|\n| 统计月份 | `YYYY-MM` 格式，精确匹配年份+月份 |\n| 业务部门 | 精确匹配 |\n| 业务员 | 精确匹配 |\n| 客户名称 | 模糊包含 |\n| 状态 | 已结清 / 部分收款 / 未收款（按实收与应收合计计算） |\n| 车牌号码 | 多选精确匹配（更多筛选） |\n\n查询按钮触发筛选；KPI 与表尾汇总基于**全量筛选结果**（非当前页）。\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-kpi",
                "title": "KPI 汇总",
                "markdown": "## 3. KPI 统计卡片（7 张）\n\n顶部展示关键指标；完整 23 项金额合计见列表底部汇总行。\n\n| KPI | 汇总字段 |\n|---|---|\n| 应收总计 | receivableTotal |\n| 押金总计 | deposit（仅数值型） |\n| 实收总计 | receivedAmount |\n| 里程减免总计 | mileageDeduction |\n| 其他减免总计 | otherDeduction |\n| 未收总计 | outstanding（>0 标红） |\n| 盈亏总计 | profitLoss（正负着色） |\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-toolbar",
                "title": "批量导入导出",
                "markdown": "## 4. 列表工具栏\n\n| 按钮 | 行为 |\n|---|---|\n| 批量导入 | 下载模板（仅 41 列手工录入）→ 上传 Excel → 公式列自动计算 |\n| 批量导出 | 导出当前筛选结果（完整 47 列，含公式列结果） |\n\n导入必填：**年份、月份、车牌号码**。\n\n### 导入模板列范围\n\n- **含**：41 列手工录入字段\n- **不含**：应收合计、月度收入、未收、车辆实际成本、总成本、盈亏（6 个公式列）\n- 导入后调用 `applyDetailCalculations` 统一重算\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-table",
                "title": "明细列表",
                "markdown": "## 5. 明细列表（47 列）\n\n表头顺序严格对齐 Excel「2.租赁车辆收入明细表」。\n\n### 交互\n\n- 横向滚动；左冻结：**年份 + 车牌号码**\n- 仅**日期类列**表头支持正序/倒序排序\n- 公式列（calculated）浅灰底色，导入模板不含\n- 表尾**汇总行**：23 个金额列 SUBTOTAL，首列显示「汇总」\n- 未收 > 0 单元格标红；盈亏正负着色\n- 底部分页：10 / 20 / 50 / 100\n\n### 表尾汇总（23 项）\n\n押金、合同标的租金、应收合计、应收租金、月度收入、月度租金、维保包干收入、保险上浮费、运维费（收入）、其他收入、里程减免金额、其他减免金额、实收金额、未收、车辆标准成本、车辆实际成本、保险费、氢费、运维费（成本）、居间费、其他、总成本、盈亏。\n\n---"
              }
            ]
          },
          {
            "type": "folder",
            "id": "lbd-doc-specs",
            "title": "规格说明",
            "defaultExpanded": false,
            "children": [
              {
                "type": "markdown",
                "id": "lbd-doc-formulas",
                "title": "公式列",
                "markdown": "## 6. 公式列（系统自动计算）\n\n对齐 Excel 表内公式；实现见 `utils/calc-detail.ts`。\n\n| 字段 | 计算方式 |\n|---|---|\n| **应收合计** | 维保包干收入 + 保险上浮费 + 运维费（收入）+ 其他收入 + 里程减免金额（负数）+ 其他减免金额（负数） |\n| **月度收入** | 月度租金 + 维保包干收入 + 保险上浮费 + 运维费（收入）+ 其他收入 + 里程减免 + 其他减免 |\n| **未收** | 应收合计 − 实收金额 |\n| **车辆实际成本** | 车辆标准成本 × 平均天数 |\n| **总成本** | 车辆实际成本 + 保险费 + 氢费 + 运维费（成本）+ 居间费 + 其他 |\n| **盈亏** | 月度收入 − 总成本 |\n\n减免金额在 Excel 中以负数录入；导入时填负数即可。\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-boundary",
                "title": "模块边界",
                "markdown": "## 模块边界\n\n### 与「租赁业务台账」的分工\n\n| 模块 | 定位 |\n|---|---|\n| **租赁业务明细**（本模块） | 对齐业管 Excel 运营台账宽表；手工列导入维护；6 个公式列自动计算；**不**做收款关联与账单状态 |\n| **租赁业务台账** | 账单维度维护、关联收款记录、收款状态（未收/部分/已收）、归档与角色数据范围 |\n\n下游 **业务部台账 / 业务汇总分析** 中「租赁业绩」数据来源为本模块明细。\n\n### 不做范围（当前原型）\n\n- 「租赁业务盈亏月度汇总」独立 Tab\n- 行内编辑、删除、服务端持久化\n- 关联收款记录自动回写实收\n- 员工/主管数据权限隔离\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-col-receivable-total",
                "title": "应收合计",
                "markdown": "## 应收合计\n\n**计算方式**：维保包干收入 + 保险上浮费 + 运维费（收入）+ 其他收入 + 里程减免金额（负数）+ 其他减免金额（负数）。\n**录入方式**：系统自动计算，只读。\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-col-outstanding",
                "title": "未收",
                "markdown": "## 未收\n\n**计算方式**：应收合计 − 实收金额。\n**录入方式**：系统自动计算，只读。\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-col-vehicle-actual-cost",
                "title": "车辆实际成本",
                "markdown": "## 车辆实际成本\n\n**计算方式**：车辆实际成本 = 车辆标准成本 × 平均天数。\n**录入方式**：系统自动计算，只读。\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-col-total-cost",
                "title": "总成本",
                "markdown": "## 总成本\n\n**计算方式**：总成本 = 车辆实际成本 + 保险费 + 氢费 + 运维费（成本）+ 居间费 + 其他。\n**录入方式**：系统自动计算，只读。\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-col-profit-loss",
                "title": "盈亏",
                "markdown": "## 盈亏\n\n**计算方式**：盈亏 = 月度收入 − 总成本。\n**录入方式**：系统自动计算，只读。\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-col-status",
                "title": "状态",
                "markdown": "## 状态\n\n按**实收金额**与**应收合计**自动计算，只读展示。\n\n| 状态 | 判定规则 |\n|---|---|\n| **未收款** | 实收金额 = 0 或未录入 |\n| **部分收款** | 实收金额 > 0 且 < 应收合计 |\n| **已结清** | 实收金额 ≥ 应收合计 |\n\n列位置：月份列左侧；左冻结。\n\n---"
              },
              {
                "type": "markdown",
                "id": "lbd-doc-lbd-col-hydrogen-fee",
                "title": "氢费",
                "markdown": "## 氢费\n\n**计算方式**：车辆氢费明细中，该车牌在「提车日期」与「退车日期」（未退车取账单月末）之间、承担方式为「我司承担」的加氢记录「加氢总价（元）」求和。\n**交互**：金额不为零时可点击，弹出加氢明细列表。\n**录入方式**：系统自动汇总，只读。\n\n---"
              }
            ]
          }
        ]
      }
    ]
  }
}
