HANDOFF.md
@@ -21,6 +21,45 @@
  1. **【需用户】轮换已泄露的 DeepSeek key**(控制台新建 + 删旧 → 跑 `set-secrets.ps1`);
  2. **【需用户】服务器换包**:删旧包/zip → 拷 `traffic-audit-deploy-20260927` → 改 `backend\application.yml` 数据库三处(需要 AI 分析再填 `deepseek.api-key`)→ `start-backend.cmd`;
  3. P0 三项不变:P0-2 亿元投资项目按 Q7 按月追列、P0-3 导出前基数体检 +《数据缺失清单》页、P0-4 缺 2026-06/09 母版;
  3.1 **汇总大表现状复核(2026-09-27 实测,母版 `docs/生成汇总大表/2026年8月道路运输量汇总表.xlsx` + 最近生成件)**:
      - **累计列公式没覆盖到当期(实测 306 格)未落实**,确切位置(母版 `docs/生成汇总大表/2026年8月道路运输量汇总表.xlsx`):
        · `公交!U5:U76`、`出租!U5:U76`、`网约车!U5:U76` 各 72 格 = 216 格,公式 `=V5+X5+Z5+AB5+AD5+AF5`(只累加 2025 年 1~6 月;U 列表头为空,位置在"2025年1月"块左侧,对应 2026 块的 `S` 列"2026年累计",语义即"2025 年累计");
        · `城市客运!U4:U39` 36 格(同模式,只 6 个月);`班线包车!DU4:DU57` 54 格(`DU2` 表头直接写"1-3月累计",只 3 个月——属版式未随月份扩展)。
        → 业务口径为"可清空留空";**生成件与母版逐格相同**(证实程序只补当期列、不碰历史列)。09-22 差异报告按另一分页口径统计为"304 格(含中口径明细 88 格)",本次按公式模式定位到的是上述 306 格,两者为同一类问题、分页归类不同。
      - **2026-09-27 已处置:母版里的"人工核算草稿累计列"整体清空**(用户确认"这一列都可以留空,是人工核算时弄的草稿")。清空范围共 **577 格**:`公交/出租/网约车!U5:U76`、`城市客运!U4:U39`、`班线包车!DU4:DU57`(含表头 `DU2`"1-3月累计")、`中口径明细!U99:U188`、`中口径客运量!AB5:AB188`。
        · 依据:这些列在整本工作簿里**没有任何公式引用**(全簿扫描 0 命中),且程序**不写它们**(生成件与母版逐格相同)→ **只改母版即可,无需改代码**。
        · 做法:直接改 xlsx 内部 XML(只去对应单元格的 `<f>/<v>`、保留样式),**避免 openpyxl 保存导致全簿公式缓存值丢失**(该坑已实测复现:用 openpyxl 存一次后 `公交!S5` 由 98460.97 变 None,会破坏"中口径排名用母版 2025 静态列")。
        · 验证:重新生成 2026-08(母版变更使缓存自动失效,`staleCache=true`)→ 新旧生成件逐格比对:**仅这 577 格变为空,19 页签与尺寸不变,其它一律不动**;依赖母版缓存值的口径(中口径排名 M3、道路运输周转量 G4、货运量排名 B4、城市汇总 B3、公交 S5/Q5、中口径明细 C99、班线包车 Q4)**全部一致**。
        · 备份(本地保留、不入库):`docs/生成汇总大表/_bak_202608母版清空草稿累计列前_20260927.xlsx`;新生成件已存 `D:\桌面\生成数据\生成_道路运输量汇总表_2026-08 (4).xlsx`。
        · **表头措辞修复(按人工定稿为准)**:`轨道、轮渡!R2`、`R11` 由母版自带的"8月与去年同比"改为"同比"(与该页 `T2/T11`"累计同比"体例一致、与手工定稿一致;程序不写这两格,故只改母版)。
          验证:重新生成 2026-08 → 新旧生成件逐格比对 **仅这 2 格文字变化,19 页签与尺寸不变、其它一律不动**。
        · **判定为"程序正确、不改"的两处**:① `道路运输周转量!A23` 程序"2026年8月全省完成交通周转量情况"(该块是**当月值**:全省 2,301,720 vs 累计块 17,749,657 万吨公里)→ 手工定稿多写了"累计";② ` 货运!EA92:EA112` 2022 年累计同比 10 条(业务已确认软件口径正确)。
        · **文本型数字统一为数值(用户口径"按程序对的改")**:母版 157 格文本型数字 → 数值(`公交` 153 = AF 68 + M 68 + G 17;`轨道、轮渡` 4 = M 2 + E 2),仍用 XML 精准改类型(缓存值全部保留)。重新生成 2026-08 → 与上一版比对:**仅 68 格类型变化(str→数值、数值相同),无任何值/尺寸变化**(其余 89 格程序本就会写数值)。注:比对里另有 286 条"文本型数字"差异在**手工定稿侧**(手工存文本),需手工侧统一或忽略。
        · **排名页"两个块顺序对调"(实为顺序问题,不是多了一张表)**:程序 以模板 `docs/货运/生成_货运量排名.xlsx`(模板本身=累计块在行1、当月块在行23)填充 → `货运量排名` 程序=行1累计/行22当月,手工=行1当月("2026年8月各市州货运量排名")/行22累计;`货运周转量排名` 程序 44×18(累计在前)vs 手工 51×18(当月在前、且多 7 行待细看)。**用户口径:手工为准** → 需改模板(两块对调)+ 相应代码(块定位/标题写法 `ReportExportService:961-966/1315/1575-1583`)+ 市州名由 `RegionUtil.shortName()` 改全名;估 0.5~1 天含回归,待开工。
        · **手工多出的"辅助列"清单**:` 货运` 多 1 列(无表头,位于"同比"之后、2025 年 1 月之前 → 实为 `U` 列"2025 年 1-8 月累计"辅助列,74 格,从 V 列起手工整体右移);`城市客运` 多 `AJ`="2025年1-7月累计"(母版 09-20 已删、程序已不输出);`班线包车` 多 `DU`="1-3月累计"(即本次清空的草稿列);`道路运输周转量` 末尾多 2 列(Z/AA,**表头与内容均为空**)。
        · 取整尾差 194 条:用户明确"不用管"。
        · **仍待业务定的版式/措辞项**:`货运量排名`/`货运周转量排名` 的标题、表头(程序"累计完成(万吨)" vs 手工"规上货运量(万吨)")与市州名(程序按设计用短名"武汉/恩施/林区"、手工用"武汉市"等全名)——需业务确认以哪版为准。
        · ⚠ **待同事确认**:手工定稿侧也把这些草稿列留空,否则比对会从"程序有值/手工有值"变成"程序空/手工有值"(同类差异、方向相反)。
        · **清空的 7 列对照表(供同事复核;引用数为清空前的全簿扫描)**:
        | 页签 | 列 / 范围 | 清空格数 | 原表头 | 公式语义 | 清空前缓存值(首行样例) | 同页引用 | 跨页引用 |
        | --- | --- | ---: | --- | --- | --- | ---: | ---: |
        | 公交 | `U`(U5:U76) | 72 | (无表头) | `=V5+X5+Z5+AB5+AD5+AF5` → 2025 年 1~6 月累计 | 88908.91 | 0 | 0 |
        | 出租 | `U`(U5:U76) | 72 | (无表头) | `=V5+X5+Z5+AB5+AD5+AF5` → 2025 年 1~6 月累计 | 39797.94 | 0 | 0 |
        | 网约车 | `U`(U5:U76) | 72 | (无表头) | `=V5+X5+Z5+AB5+AD5+AF5` → 2025 年 1~6 月累计 | 16384.07 | 0 | 0 |
        | 城市客运 | `U`(U4:U39) | 36 | (无表头) | `=V4+X4+Z4+AB4+AD4+AF4` → 2025 年 1~6 月累计 | 206639.67 | 0 | 0 |
        | 班线包车 | `DU`(DU4:DU57) | 54 | 1-3月累计 | `=DO4+DQ4+DS4` → 1~3 月累计 | 5566.8922 | 0 | 0 |
        | 中口径明细 | `U`(U99:U188) | 90 | (无表头) | `=V99+X99+Z99+AB99+AD99+AF99+AH99` → 2025 年 1~7 月累计 | 1102278.385724 | 0 | 0 |
        | 中口径客运量 | `AB`(AB5:AB188) | 184 | (无表头) | `=AC5+AE5` → 2024 年 1~2 月累计 | 6088.1871 | 0 | 0 |
        · **⚠ 同名列别清错(反例对照)**:`中口径明细!AB3 = "2025年4月"` 是**正常月份列**,被 **700+ 处同页 + 34 处跨页公式引用**(例如 `中口径明细!J5 = I5/AB5-1` 2026 年 4 月同比、`T5 = S5/SUM(V5,X5,Z5,AB5,…)-1` 累计同比、`AT5 = X5+V5+Z5+AB5+…` 2025 累计、`中口径客运量!I11 = 中口径明细!AB11`),**本次未动、也不能清**。判据:该列**有表头**、**被引用数远大于 0**、公式语义是"被别的格引用"而不是引用其它月份列。
      - **生成件里错误值 356 个 `#DIV/0!` + 13 个 `#REF!`**:班线包车 228+8、中口径明细 64+2、货运 38+3、中口径客运量 26;业务口径未定(是否清成空白)。
      - **城市客运页表头仍是日期序列号(确证未修)**:母版与生成件第 2 行第 3 个月起均为序列号(G2=46082、I2=46113…),1、2 月是文字;`fixCityMonthHeaderText()` 未覆盖该页 → "按表头文字匹配列"方案在该页失效。(此前文档标"待核实",现已确证。)
      - 缺 2026-09 母版(目录仅 7 月/8 月/版式原型 + 2 个 `_bak_*`)→ 9 月出表会 `ready=false`,需拍板方案 A(程序扩列)/ B(Excel 小工具)。
  4. 汇总大表 304 格「2025 累计列少加 7、8 月」清空(业务已确认口径,待执行);
  5. 本机历史临时目录待清(`outputs/` 41MB、`_shots/`、`_test_check*`、`_test_passenger`、`.tmp_*`、`_tmp_codexhome`);`_给同事_2026-09-21/`(52MB 全库备份)属交付件,未动。