From 573e11132bd4a404934c03f9fd0802200e2ccd30 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期四, 03 九月 2026 08:59:57 +0800
Subject: [PATCH] feat: 报表新版式(上累计+下当月)与导入校验增强、I004 保护 + 09-02 测试文档

---
 docs/功能测试报告/功能测试报告_运政车辆与轨迹里程导入回归_2026-09-02.md                                                          |   33 +
 docs/功能测试报告/功能测试报告_导入校验增强_2026-09-02.md                                                                 |   50 ++
 docs/工作日结/工作日结_2026-09-02.md                                                                            |   55 ++
 docs/能耗/能耗简化(2026年).xlsx                                                                                |    0 
 docs/货运/模板_货运量周转量.xlsx                                                                                  |    0 
 docs/货运/生成_周转量排名.xlsx                                                                                   |    0 
 traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java           |  290 ++++++++++--
 docs/公路旅客/生成_中口径排名.xlsx                                                                                 |    0 
 docs/功能测试报告/导入与生成模块体检问题清单_2026-09-02.md                                                                 |   63 ++
 docs/城市客运/生成_轨道轮渡客运量分市州明细.xlsx                                                                          |    0 
 docs/城市客运/生成_城市客运客运量分市州累计.xlsx                                                                          |    0 
 docs/能耗/生成_能运汇总表.xlsx                                                                                   |    0 
 traffic-audit-server/src/main/java/com/trafficaudit/common/util/RegionUtil.java                         |   26 +
 docs/导入功能体检报告.md                                                                                        |   75 +++
 docs/功能测试报告/功能测试报告_生成模板新版式_2026-09-02.md                                                                |   57 ++
 docs/功能测试报告/功能测试报告_2026-09-02_导入与报表生成回归.md                                                              |   57 ++
 docs/货运/货运简化工作.xlsx                                                                                     |    0 
 docs/城市客运/城市客运数据优化.docx                                                                                 |    0 
 docs/工作日结/模块功能验证状态矩阵_2026-09-02.md                                                                      |   82 +++
 docs/城市客运/客运简化.xlsx                                                                                     |    0 
 traffic-audit-web/src/views/DataImport.vue                                                              |    4 
 traffic-audit-server/src/main/java/com/trafficaudit/reportexport/controller/ReportExportController.java |    5 
 docs/公路旅客/模板_交企统H203-1表_公路旅客运输月度生产情况.xlsx                                                               |    0 
 traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java         |    6 
 docs/城市客运/生成_城市客运汇总.xlsx                                                                                |    0 
 docs/待业务用户确认清单_2026-09-02.md                                                                            |   51 ++
 docs/交接文档-20260831.md                                                                                   |   61 ++
 /dev/null                                                                                               |    0 
 docs/城市客运/生成_城市客运各市州明细表.xlsx                                                                            |    0 
 docs/货运/模板_轨迹里程.xlsx                                                                                    |    0 
 AGENTS.md                                                                                               |   12 
 traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java       |  300 ++++++++++++
 docs/功能测试报告/功能测试报告_投资审核I004基准缺失保护_2026-09-02.md                                                         |   29 +
 docs/功能测试报告/功能测试报告_投资市州月报多sheet识别与序号空格_2026-09-02.md                                                    |   36 +
 docs/货运/模板_规上规下拆分运输量.xlsx                                                                               |    0 
 docs/货运/生成_货运量排名.xlsx                                                                                   |    0 
 docs/公路旅客/生成_中口径分析.xlsx                                                                                 |    0 
 37 files changed, 1,215 insertions(+), 77 deletions(-)

diff --git a/AGENTS.md b/AGENTS.md
index 5e3065a..020d876 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -32,4 +32,14 @@
 
 ## 楠岃瘉娉ㄦ剰
 - 娌欑鍐� `Get-NetTCPConnection` 浼氬洜鏉冮檺鈥滄嫆缁濊闂�濊�岄潤榛樺け璐ワ紝**涓嶈**鎹鍒ゅ畾绔彛鏈洃鍚紱鍒ゆ柇鏈嶅姟鐘舵�佷互 backend.log / frontend.log 涓哄噯銆�
-- 鐢ㄦ埛瑕佹眰锛氫复鏃惰剼鏈�/鏂囦欢鏈粡鍚屾剰涓嶅垹锛涘鍏ュけ璐ヨ鍦ㄩ〉闈㈡樉绀鸿鍙凤紱AI 鍒嗘瀽缁撴灉瑕佺粰缁撴瀯鍖栨帓鐗� + 閫愬瓧杈撳嚭鍔ㄧ敾銆�
\ No newline at end of file
+- 鐢ㄦ埛瑕佹眰锛氫复鏃惰剼鏈�/鏂囦欢鏈粡鍚屾剰涓嶅垹锛涘鍏ュけ璐ヨ鍦ㄩ〉闈㈡樉绀鸿鍙凤紱AI 鍒嗘瀽缁撴灉瑕佺粰缁撴瀯鍖栨帓鐗� + 閫愬瓧杈撳嚭鍔ㄧ敾銆�
+
+## 宸ヤ綔瑙勮寖锛�2026-09-02 璧凤紝蹇呴』閬靛畧锛�
+1. **姣忓仛瀹屼竴涓姛鑳斤紝绔嬪嵆娴嬭瘯骞跺啓銆婂姛鑳芥祴璇曟姤鍛娿��**
+   - 娴嬭瘯鑷冲皯瑕嗙洊锛氭鍚戠敤渚嬶紙姝e父鏁版嵁锛夈�佽礋鍚戠敤渚嬶紙閿欑被鍨�/閿欏垪浣�/缂哄垪绛夛級銆佸叆搴撴娊鏌ワ紙涓庢簮鏂囦欢閫愰」瀵归綈锛夈��
+   - 鎶ュ憡鍐欏叆 `docs/鍔熻兘娴嬭瘯鎶ュ憡/`锛屽懡鍚嶏細`鍔熻兘娴嬭瘯鎶ュ憡_<鍔熻兘鍚�>_<YYYY-MM-DD>.md`銆�
+   - 鎶ュ憡椤诲寘鍚細鍔熻兘璇存槑銆佹祴璇曠幆澧冦�佺敤渚嬭〃锛堣緭鍏�/棰勬湡/瀹為檯/缁撹锛夈�佸彂鐜扮殑闂涓庡缃�佺粨璁恒��
+2. **姣忓ぉ涓嬬彮鍓嶅啓銆婂伐浣滄棩缁撱�嬶紝鍛藉悕闄勬棩鏈�**
+   - 鍐欏叆 `docs/宸ヤ綔鏃ョ粨/`锛屽懡鍚嶏細`宸ヤ綔鏃ョ粨_<YYYY-MM-DD>.md`銆�
+   - 鍐呭鑷冲皯鍖呭惈锛氫粖澶╁仛浜嗕粈涔堬紙鍔熻兘/淇锛夈�佹祴璇曠粨鏋滄憳瑕併�侀仐鐣欓棶棰樹笌寰呭姙銆佹槑澶╄鍒掋��
+   - 褰撳ぉ娌℃湁浠g爜/娴嬭瘯宸ヤ綔鏃讹紝涔熻鍐欙紙涓�鍙ヨ瘽璇存槑鈥滀粖鏃ユ棤浠g爜鏀瑰姩鈥濆嵆鍙級銆�
diff --git "a/docs/\344\272\244\346\216\245\346\226\207\346\241\243-20260831.md" "b/docs/\344\272\244\346\216\245\346\226\207\346\241\243-20260831.md"
new file mode 100644
index 0000000..7d5957f
--- /dev/null
+++ "b/docs/\344\272\244\346\216\245\346\226\207\346\241\243-20260831.md"
@@ -0,0 +1,61 @@
+# 浜ゆ帴鏂囨。锛�2026-08-31锛屾湰鍦板紑鍙戜細璇濓級
+
+> 鐢ㄩ�旓細鏂颁細璇濇棤缂濇帴鍔涖�傚紑鏂颁細璇濆悗璁� Codex 鍏堣鏈枃浠� + 椤圭洰鏍� `AGENTS.md`銆�
+> 娉ㄦ剰锛氭湰鏂囦欢涓烘湰鍦颁細璇濈嫭绔嬩氦鎺ワ紝**涓嶈瑕嗙洊/淇敼鍚屼簨鎺ㄩ�佺殑 `HANDOFF.md`**銆�
+
+## 涓�銆侀」鐩鍐�
+- 浜ら�氳揣杩愮粺璁″鏍哥郴缁燂紙婀栧寳璐ц繍閲�/鍛ㄨ浆閲忕瓑锛夈��
+- 鍚庣 Spring Boot锛坄traffic-audit-server`锛岀鍙� 8090锛夛紱鍓嶇 Vue2 + Element UI锛坄traffic-audit-web`锛岀鍙� 8080锛宍/api` 浠g悊 8090锛夈��
+- 涓�閿惎鍔細`powershell -NoProfile -ExecutionPolicy Bypass -File start-dev.ps1`锛堝繀椤绘矙绠卞杩愯锛涗細鑷姩妫�娴� 8090/8080锛屽凡鍦ㄨ窇鍒欒烦杩囷級銆�
+- 鏃ュ織锛氭牴鐩綍 `backend.log`銆乣traffic-audit-web/frontend.log`銆傛垚鍔熸爣蹇楋細鍚庣 `Started TrafficAuditApplication`+`Tomcat started on port(s): 8090`锛涘墠绔� `Compiled successfully`+`App running at:`銆�
+
+## 浜屻�佸綋鍓嶄唬鐮佺姸鎬�
+- 鏈湴 `main` 涓庢湇鍔″櫒涓�鑷达細`079d872`锛�8/31 鍚屼簨 5 涓柊鎻愪氦宸插悓姝ワ細sessionStorage 寮哄埗鐧诲綍 c62a61c銆�/import 涓� /report el-tabs 淇 684da41/d42a044銆佸穿婧冩牴鍥犳枃妗� f0597c2銆佷氦鎺ョ害瀹� 079d872锛夈��
+- 鍚屼簨 8/28 鏀瑰姩锛�
+  - `2bd663b` fix锛欵xplainReview.vue 閲嶅 components 閿紙AppHeader 琚� AiChatDialog 瑕嗙洊锛夊凡鍚堝苟锛汻uleManage/UserManage 甯冨眬缁熶竴涓� app-header 涓婁笅甯冨眬锛岀Щ闄よ彍鍗曞唴澶辨晥閫�鍑洪」銆�
+  - `37496dc` docs锛氱敤鎴� 4 闂锛堝鏍哥粨鏋滆彍鍗曚笉楂樹寒/妯爮缂哄け/閫�鍑轰笉鏄剧ず/寮哄埗鐧诲綍锛夆�斺�斺憽鈶㈠凡淇紱鈶� token 鏀� sessionStorage = 寰呭姙锛�**/import 鏁版嵁瀵煎叆椤� JS 涓荤嚎绋嬪崱姝绘柊鍙戠幇锛堟湭淇級**銆�
+- 鏈嶅姟褰撳墠**鍦ㄨ繍琛�**锛�8/31 浼氳瘽娌跨敤锛�8080/8090 鍧囧湪鐩戝惉锛宐ackend.log / frontend.log 姝e父锛夈�傞渶瑕侀噸鍚椂鐢� start-dev.ps1锛堟矙绠卞锛夈��
+
+## 涓夈�佽繍琛岀幆澧冿紙閲嶈锛�
+- 鏁版嵁搴擄細`localhost:3308`锛屽簱 `traffic_audit`锛宍root/123456`锛堣鏈湴 `traffic-audit-server/src/main/resources/application.yml`锛屼笉鍏ュ簱锛夈��
+  - 鈿狅笍 鍚屼簨 HANDOFF 閲屽啓鐨� `3305/root/root` 宸茶繃鏃讹紙3305 鏈洃鍚級锛屼互 application.yml 涓哄噯銆�
+  - 璇ュ簱涓� 8/27 鏅氬悓浜� Navicat 鍚堝苟鍚庣殑瀹屾暣搴擄紙27 琛ㄣ�佺害 6 涓囪锛泂ys_user 4 璐﹀彿 admin+zhangsan/lisi/wangwu锛�**鏈満搴撲腑 4 璐﹀彿瀵嗙爜鍧囦负 `123456`**锛�8/31 bcrypt+鐧诲綍鎺ュ彛瀹炴祴锛宎dmin/123456 杩斿洖 200锛涙枃妗f棫璁� admin/admin123 鍦ㄦ湰鏈轰笉鍖归厤锛屽嬁鍐嶇敤锛夈��
+- 鐧诲綍楠岃瘉鐮侊細鏈湴 `application.yml` 宸查厤 `app.captcha.required: false`锛堟祴璇曡烦杩囷紝鎺ュ彛 /api/auth/captcha-config 杩斿洖 false锛夈�傝閰嶇疆涓嶅叆搴擄紱**姝e紡鍙戝竷鍓嶆敼鍥� true**銆�
+- 瀹㈡埛绔細鏈満 MySQL 瀹㈡埛绔� `D:\mysql\mysql-5.7.41-winx64\bin\mysql.exe`锛堣繛 3308 鐢� root/123456锛夛紱HANDOFF 鎻愰啋姝e紡鐢� 8.0 瀹㈡埛绔紙鏈満 `C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe`锛夈��
+
+## 鍥涖�佹渶杩戝畬鎴愮殑浜嬮」- **璁よ瘉淇℃伅 localStorage 鈫� sessionStorage锛�8/31 瀹屾垚锛�**锛�
+  - 鐧诲綍鎬佸洓閿紙token/username/realName/modules锛夊叏閮ㄦ敼瀛� sessionStorage锛歀ogin.vue锛堝啓鍏ワ級銆乺outer/index.js锛堝畧鍗锛夈�乤pi/index.js锛堣姹傚ご璇� + 401 娓呴櫎锛夈�乵ain.js锛堝叏灞� mixin logout 娓� 4 閿級銆丄ppHeader.vue锛堢敤鎴峰悕鏄剧ず + 鐧诲嚭娓� 4 閿級銆丷eportExport.vue锛堢敤鎴峰悕/鐪熷疄鍚�/妯″潡璇诲彇 + 鐧诲嚭娓� 4 閿級銆�
+  - 鍋忓ソ绫讳繚鎸� localStorage锛欴ataImport 鐨� `dirLast_*`锛堢洰褰曡蹇嗭級銆丷eportExport 鐨� `report_note_*`锛堟姤琛ㄥ娉ㄨ崏绋匡級銆�
+  - 琛屼负锛氬悓鏍囩椤� F5 鍒锋柊淇濇寔鐧诲綍锛涘叧鏍囩椤�/鏂板紑鏍囩椤甸渶閲嶆柊鐧诲綍锛堝己鍒剁櫥褰曠敓鏁堬級锛涚櫥鍑烘竻绌� 4 閿洖鐧诲綍椤点��
+  - 楠岃瘉锛坧uppeteer锛宎dmin/123456 UI 鐧诲綍锛夛細鏃� token 璁块棶 /#/dashboard 涓� /#/audit 鍧囬噸瀹氬悜 /#/login锛涚櫥褰曞悗 sessionStorage 鏈� token銆乴ocalStorage 鏃� token锛涚櫥鍑烘竻绌猴紱/import 璇锋眰澶存惡甯� Bearer token銆佽〃鏍� 28 琛屾甯搞��
+
+- **/import 涓荤嚎绋嬪崱姝绘牴鍥犲畾浣嶅苟淇锛�8/31锛�**锛�
+  - 澶嶇幇锛坧uppeteer-core + 绯荤粺 Chrome锛孋DP锛夛細/import 鍦ㄧ獥鍙e搴� 鈮�1366 鏃� JS 涓荤嚎绋�**姘镐箙**鍗℃锛�800x600 / 1280x800 / 1366x768 鍧囧喕缁擄紝1440+ 姝e父锛夛紱鍚屾帰閽堜笅 /data /audit /report 鍏ㄥ搴︽甯搞��
+  - 鏍瑰洜锛欵lement UI `el-tabs`锛圱abNav锛塦updated()` 閽╁瓙閲岀殑 `update()` 鎸� DOM 娴嬮噺鍐欏搷搴斿紡 `scrollable`/`navOffset`銆傛湰椤靛竷灞�涓� `.el-tabs__nav-scroll` 瀹藉害鍦ㄩ潪 scrollable 鎬佸疄娴� 0銆佸姞婊氬姩鎸夐挳鍚庡疄娴� 998锛屽鑷� `scrollable` 鍦� false鈫攞} 闂存尟鑽� 鈫� 娓叉煋 watcher 鏃犻檺鑷叆闃燂紙`flushSchedulerQueue` 姘镐笉鎺掔┖锛夆啋 涓荤嚎绋嬫寰幆銆侰DP `Debugger.pause` 鎶撴爤锛歚flushSchedulerQueue鈫扺atcher.run鈫抲pdateComponent鈫抇render鈫抮ender` 涓� `updated鈫抲pdate鈫抮eactiveSetter(key=scrollable)`銆�
+  - 褰卞搷锛氬嵆銆屾暟鎹鍏ラ〉鏃犲搷搴斻�嶃�岀偣鏁版嵁瀵煎叆鑿滃崟娴忚鍣ㄦ棤鍝嶅簲銆嶏紱涔熻В閲娿�屽鏍哥粨鏋滆彍鍗曚笉楂樹寒銆嶏紙椤甸潰 JS 闃诲鈫掔偣鍑�/楂樹寒鏇存柊鍏ㄨ鍗′綇锛�/audit 椤佃嚜韬棤闂锛夈��
+  - 淇锛欴ataImport.vue 涓� ReportExport.vue 鐨� `el-tabs` 鎹㈡垚 `el-radio-group`/`el-radio-button` 鎸夐挳 + `v-show` 闈㈡澘锛堝悓浜嬫彁浜� 684da41/d42a044锛屾湰鏈哄凡鍚屾锛岀粫寮� TabNav 娴嬮噺寰幆锛夈��
+  - 楠岃瘉锛�800/1280/1366/1440/1920 鍏ㄥ搴︿袱椤靛潎涓嶅啀鍐荤粨锛�10s 鎸佺画 ping 姝e父锛夈�乀ab 鍒囨崲姝e父銆乥atches 琛ㄦ牸娓叉煋姝e父锛�/import 鐐瑰嚮銆屽鏍哥粨鏋溿�嶈彍鍗� 鈫� `#/audit` 楂樹寒姝e父銆�
+  - /report 铏芥祴璇曟湭鍐荤粨锛屼絾鍚岀粍浠舵祴閲忓悓鏍蜂笉鍙潬锛�1440x900 鏃� nav-wrap 浠� 97px锛夛紝宸蹭竴骞舵浛鎹㈤槻鍚岀被闅愭偅銆傛帰閽堣剼鏈湪 `outputs/pptr/`锛坧robe*.js銆乿erify_*.js锛夈��
+
+- 浠g爜鍚屾锛氬娆� fetch/pull 淇濇寔涓庢湇鍔″櫒涓�鑷达紱鍚屼簨鏂板鎻愪氦鍧囧凡鎷夊彇銆�
+- 鏈嶅姟绠$悊锛氬娆″仠鏃ц捣鏂帮紙绮剧‘鎸� PID 鍋滈摼锛氬悗绔� cmd鈫抦aven鈫抋pp锛屽墠绔� cmd鈫抧pm鈫抍md鈫抳ue-cli锛涗笉鏉� Codex 鍐呮牳/IDEA 缁堢锛夈��
+- 楠岃瘉鐮佸叧闂細鏈満閰嶇疆 `app.captcha.required: false` 骞堕噸鍚悗绔獙璇併��
+- 璐ц繍鏁版嵁涓�鑷存�ф牳瀵癸紙8/29锛夛細
+  - 瀵规瘮 `docs/璐ц繍闇�瀵煎叆鐨勬暟鎹�/璐ц繍/`锛�2025 鍏ㄥ勾 12 涓湀 + 2026 骞� 1-7 鏈堬紝鍏� 19 涓枃浠讹紝瀹炰负 xlsx 鏀� .xls 鎵╁睍鍚嶏級涓庡簱琛� `h2032_enterprise_monthly`銆�
+  - **18 涓湀浠藉畬鍏ㄤ竴鑷�**锛堜紒涓氭暟/杞﹁締/鍚ㄤ綅/璐ц繍閲�/鍛ㄨ浆閲忛�愰」鍖归厤锛夈��
+  - **2026-07 涓嶄竴鑷�**锛氬簱涓� 734 琛岋紝98 瀹朵紒涓氶噸澶嶏紙姣忔埛 2 琛岋級锛屾寚鏍囧悎璁″亸澶х害 12%锛沬mport_batch_id 鍏� NULL = 8/27 Navicat 鍚堝苟甯﹁繘锛堥潪绯荤粺瀵煎叆浜х敓锛夈�傛湭娓呯悊銆�
+  - 搴撲腑鍙︽湁 2026-08锛�664 琛岋紝8/26 娴嬭瘯瀵煎叆锛夛紝鐩綍鏃� 8 鏈堟枃浠躲��
+  - 瀵煎叆骞傜瓑宸茬‘璁わ細绯荤粺瀵煎叆鎸� report_period 鍏堝垹鍚庢彃锛屽啀娆″鍏ュ彧瀛樻渶鏂颁竴娆°��
+
+## 浜斻�佸緟鍔烇紙鏂颁細璇濅紭鍏堬級
+1. ~~/import 鏁版嵁瀵煎叆椤� JS 涓荤嚎绋嬪崱姝粇~锛�8/31 宸蹭慨澶嶏細el-tabs TabNav updated 閽╁瓙 scrollable 鎸崱 鈫� 鏃犻檺娓叉煋寰幆锛涘悓浜嬫彁浜ゅ凡鎹� el-radio-group 鎸夐挳 + v-show 闈㈡澘锛岃瑙佺鍥涜妭锛夈��
+2. ~~璁よ瘉淇℃伅 localStorage 鈫� sessionStorage锛堝己鍒剁櫥褰曪級~~锛�8/31 宸插畬鎴愬苟楠岃瘉锛岃瑙佺鍥涜妭锛夈��
+3. 2026-07 閲嶅 98 琛屾竻鐞嗭紙鍏堝浠藉啀鍒狅紝鎴栭噸鏂板鍏� 7 鏈堟枃浠讹級銆�
+4. `docs/鎵撳寘閮ㄧ讲璇存槑.docx` 绗叚鑺傘�屽缃� application.yml 闇�鍖呭惈瀹屾暣閰嶇疆銆嶆敼涓恒�屽睘鎬х骇鍚堝苟銆嶅悗閲嶆柊瀵煎嚭銆�
+5. 姝e紡鍙戝竷鍓嶏細captcha.required 鏀� true锛涘穿婧冩牴鍥犱互 access log 鍙栬瘉锛堝嬁瀹gО绾跨▼姹犲疄閿わ紝宸茶 3 鐢ㄦ埛鍦烘櫙鍙嶉┏锛夈��
+
+## 鍏�佸巻鍙茬粨璁轰笌鍧戯紙閬垮厤閲嶅韪╋級
+- 鏁版嵁瀵煎叆宕╂簝鎺掓煡锛氬厛璇瘖杩呴浄鎵╁睍 鈫� 鍚庡疄閿� Tomcat 绾跨▼姹� 鈫� 鍙堣 3 鐢ㄦ埛鍦烘櫙鍙嶉┏ 鈫� 鍚屼簨鍙戠幇鍓嶇涓荤嚎绋嬪崱姝伙紙鏈�鏂版柟鍚戯級銆�**瀵圭敤鎴蜂笉瑕佸绉扮嚎绋嬫睜瀹為敜**銆�
+- AGENTS.md 涓夊潙锛氣憼鏈満鍚屾椂瀛樺湪 Path/PATH 鍙岀幆澧冨彉閲忥紝绂佺敤 Start-Process锛堢敤 cmd.exe /c + ProcessStartInfo锛夛紱鈶ode 娌欑鍐呰闂� C:\Users 琚嫆锛岃剼鏈繀椤绘矙绠卞璺戯紱鈶笉瑕佸祵濂� powershell 寮曞彿銆�
+- 涓存椂鑴氭湰/鏂囦欢锛堥」鐩牴 `_probe*.py`銆乣_compare_freight.py`銆乣_probe*.sql`銆乣docs.zip`銆乣outputs/`銆佹墦鍖� zip锛夋湭缁忓悓鎰忎笉鍒犮��
+- 鎵撳寘 zip锛坱raffic-audit-deploy-20260827.zip 绛夛級鍐呭惈鐪熷疄 DeepSeek key / JWT secret锛屽嬁涓婁紶 git 鎴栧鍙戯紱浠撳簱鍙彁浜� `application.yml.example`銆�
\ No newline at end of file
diff --git "a/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\344\270\252\344\275\223\345\256\242\350\277\220\351\207\217\346\261\207\346\200\273.xlsx" "b/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\344\270\252\344\275\223\345\256\242\350\277\220\351\207\217\346\261\207\346\200\273.xlsx"
deleted file mode 100644
index 612d5af..0000000
--- "a/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\344\270\252\344\275\223\345\256\242\350\277\220\351\207\217\346\261\207\346\200\273.xlsx"
+++ /dev/null
Binary files differ
diff --git "a/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\346\250\241\346\235\277_\344\272\244\344\274\201\347\273\237H203-1\350\241\250_\345\205\254\350\267\257\346\227\205\345\256\242\350\277\220\350\276\223\346\234\210\345\272\246\347\224\237\344\272\247\346\203\205\345\206\265.xlsx" "b/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\346\250\241\346\235\277_\344\272\244\344\274\201\347\273\237H203-1\350\241\250_\345\205\254\350\267\257\346\227\205\345\256\242\350\277\220\350\276\223\346\234\210\345\272\246\347\224\237\344\272\247\346\203\205\345\206\265.xlsx"
index c3af5b3..d94e4d9 100644
--- "a/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\346\250\241\346\235\277_\344\272\244\344\274\201\347\273\237H203-1\350\241\250_\345\205\254\350\267\257\346\227\205\345\256\242\350\277\220\350\276\223\346\234\210\345\272\246\347\224\237\344\272\247\346\203\205\345\206\265.xlsx"
+++ "b/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\346\250\241\346\235\277_\344\272\244\344\274\201\347\273\237H203-1\350\241\250_\345\205\254\350\267\257\346\227\205\345\256\242\350\277\220\350\276\223\346\234\210\345\272\246\347\224\237\344\272\247\346\203\205\345\206\265.xlsx"
Binary files differ
diff --git "a/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\347\224\237\346\210\220_\344\270\255\345\217\243\345\276\204\345\210\206\346\236\220.xlsx" "b/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\347\224\237\346\210\220_\344\270\255\345\217\243\345\276\204\345\210\206\346\236\220.xlsx"
index 5181a4a..69a529e 100644
--- "a/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\347\224\237\346\210\220_\344\270\255\345\217\243\345\276\204\345\210\206\346\236\220.xlsx"
+++ "b/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\347\224\237\346\210\220_\344\270\255\345\217\243\345\276\204\345\210\206\346\236\220.xlsx"
Binary files differ
diff --git "a/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\347\224\237\346\210\220_\344\270\255\345\217\243\345\276\204\346\216\222\345\220\215.xlsx" "b/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\347\224\237\346\210\220_\344\270\255\345\217\243\345\276\204\346\216\222\345\220\215.xlsx"
index 4f1026c..4252670 100644
--- "a/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\347\224\237\346\210\220_\344\270\255\345\217\243\345\276\204\346\216\222\345\220\215.xlsx"
+++ "b/docs/\345\205\254\350\267\257\346\227\205\345\256\242/\347\224\237\346\210\220_\344\270\255\345\217\243\345\276\204\346\216\222\345\220\215.xlsx"
Binary files differ
diff --git "a/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_2026-09-02_\345\257\274\345\205\245\344\270\216\346\212\245\350\241\250\347\224\237\346\210\220\345\233\236\345\275\222.md" "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_2026-09-02_\345\257\274\345\205\245\344\270\216\346\212\245\350\241\250\347\224\237\346\210\220\345\233\236\345\275\222.md"
new file mode 100644
index 0000000..cda2d09
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_2026-09-02_\345\257\274\345\205\245\344\270\216\346\212\245\350\241\250\347\224\237\346\210\220\345\233\236\345\275\222.md"
@@ -0,0 +1,57 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡锛�2026-07 瀵煎叆涓庢姤琛ㄧ敓鎴愬洖褰掞紙2026-09-02锛�
+
+> 鐩殑锛氶獙璇佷粖鏃ヤ笁鏉℃暟鎹摼銆屽鍏モ啋鍏ュ簱鈫掓姤琛ㄣ�嶅叏绋嬪彲鐢�
+> 鈶� 鍑虹杩愭斂杞﹁締 7 鏈堬紙D:\妗岄潰\娴嬭瘯鏁版嵁\鍩庡競瀹㈣繍\鍑虹杞︿俊鎭垪琛� (2).xls锛�
+> 鈶� 涓綋瀹㈣繍閲�/鍛ㄨ浆閲� 7 鏈堬紙鏂板競宸炴眹鎬绘ā鏉匡細婀栧寳鐪佸叕璺梾瀹㈣繍杈撲釜浣撴埛鏈堝害鐢熶骇鎯呭喌锛�2026.7锛�.xlsx锛屽搴� docs\鍏矾鏃呭\妯℃澘_*.xlsx锛�
+> 鈶� 璐ц繍 7 鏈堟暟鎹綈鍏ㄥ悗鐨勬姤琛ㄥ彛寰勶紙D:\妗岄潰\娴嬭瘯鏁版嵁\璐ц繍\7鏈堬級
+> 椤哄甫瀹屾垚鏁版嵁姹℃煋娓呯悊 + 22 涓姤琛ㄦ帴鍙i敊璇崟鍏冩牸鍏ㄩ噺鎵弿銆�
+
+## 涓�銆佸鍏ュ姛鑳介獙璇�
+
+| 绫诲瀷 | 鎶ヨ〃鏈� | 婧愭枃浠� | 鎵规 | 鎬绘暟/鎴愬姛/澶辫触 | 鍏ュ簱鏍稿 |
+|---|---|---|---|---|---|
+| 鍑虹杩愭斂杞﹁締 CITY_TAXI_AUTH | 2026-07 | 鍑虹杞︿俊鎭垪琛� (2).xls锛堢湡瀹� 4.2 涓囪锛� | #188 | 42636 / 42636 / 0 | city_taxi_auth 2026-07 = 42636 琛屻��17 甯傚窞锛屼笌 2026-08锛�42636/17锛夊畬鍏ㄤ竴鑷� |
+| 涓綋瀹㈣繍閲� PASSENGER_INDIVIDUAL | 2026-07 | 婀栧寳鐪佸叕璺梾瀹㈣繍杈撲釜浣撴埛鏈堝害鐢熶骇鎯呭喌锛�2026.7锛�.xlsx锛堝競宸炴眹鎬绘ā鏉匡級 | #187 | 7 / 7 / 0 | passenger_individual_monthly 鍚堣 189998 浜� / 4584040.2 浜哄叕閲� = 婧愯〃鍏ㄧ渷鍚堣锛涙娊妫�榛勫唸 5886/175992銆佸瓭鎰� 19636/386845 绛変竴鑷� |
+| 璐ц繍閲�/鍛ㄨ浆閲忥紙鏁版嵁灞傝ˉ榻愶級 | 2026-07 | 2026骞�7鏈堝杩愰噺銆佽揣杩愰噺-5xlsx.xlsx | SQL 琛ラ綈 | 18 琛岋紙17 甯傚窞+婀栧寳鐪侊級 | 鍩庡競鏈堝悎璁� 16285.7105 涓� = 婀栧寳鐪� 16285.7105锛涘懆杞噺鍩庡競鍚堣 2181925.708 = 婀栧寳鐪� 2181925.71锛涙姹� 4940.9715/667561.3739 涓庢簮涓�鑷� |
+| 瑙勪笂瑙勪笅鎷嗗垎锛堟暟鎹眰閲嶅缓锛� | 2026-07 | 鍚屼笂 | SQL 閲嶅缓 | MONTH/CUMULATIVE 鍚� 18 琛� | MONTH 鍚堣鍛ㄨ浆閲� 2181925.71锛堣涓� 597278.64/瑙勪笅 1584647.07锛夈�丆UM 鍚堣 15222118.45锛涙姹� MONTH 204809.56/462751.81/667561.37 |
+
+琛ュ厖璇存槑锛�
+- 淇鍓� 2026-07 鏇惧瓨鍦ㄩ粍鐭崇瓑琛� freight_m07 涓� NULL 鈫� 鍒嗗競宸炴湀瀛e樊鍑虹幇 -323.97 绛夎礋鍊硷紝宸叉秷闄ゃ��
+- import_batch #177/#178/#179/#186 涓衡�滄ā鏉夸粎琛ㄥご/鏃фā鏉块璇曗�濅骇鐢熺殑 0 琛屾壒娆★紝鏈骇鐢熸暟鎹紝淇濈暀浣滃璁″巻鍙层��
+
+## 浜屻�佹姤琛ㄧ敓鎴愬洖褰掞紙period=2026-07&mode=month锛�
+
+- 22 涓鍑烘帴鍙e叏閮� HTTP 200锛岃緭鍑虹暀妗o細outputs\report_check\regression_2026-07\
+- 鍏ㄦ枃浠堕敊璇叕寮忔壂鎻忥紙鍚� 4 涓� series 鍖呭唴灞傦級锛�#REF! / #DIV/0! / #VALUE! 绛� **0 娈嬬暀**銆�
+- 鏁板�兼娊鏌ヤ笌瀹樻柟婧愯〃涓�鑷达細
+  - cityDetail锛氬叏鐪� 7 鏈堣揣杩愰噺 O5=16285.71銆佹姹� O11=4940.97銆佹姹� 1-7 绱 AA11=34306.78銆�
+  - turnoverRank锛氬叏鐪佺疮璁¤涓� 4357157.34 / 瑙勪笅 10864961.11 / 鍚堣 15222118.45锛屼笌 scale_split CUMULATIVE 閫愪綅涓�鑷淬��
+  - freightRank锛氭姹夌疮璁¤涓� 8905.15 / 瑙勪笅 25401.63 / 鍚堣 34306.78銆�
+  - 鍏氦/鍑虹/杞ㄩ亾杞浮涓夊紶琛細琛ㄥご涓恒��2026骞�1鏈堚��2026骞�7鏈堛��2026骞寸疮璁°�嶏紝鏃� 46082 鏁板瓧搴忓垪鍙凤紱杞ㄩ亾鍏ㄧ渷琛屾眰鍜� = 姝︽眽+榛勭煶锛�6 鏈� 11921.16 = 11886.3+34.86 鉁擄級銆�
+- 绯诲垪鍖咃紙cityPassengerSeries / passengerSeries / freightSeries / investSeries锛夊唴灞傚叏閮� clean銆�
+- 璇存槑锛氭姇璧勫洓寮� invest* 涓� HSSF 鑰佹牸寮忓鍑猴紙鎵╁睍鍚� .xlsx銆佸唴瀹逛负浜岃繘鍒� .xls锛孍xcel 鍙甯告墦寮�锛夛紝鏈棩鏈仛閫愭牸鍏紡鎵弿銆�
+
+## 涓夈�佹湰杞慨澶嶄笌娓呯悊
+
+浠g爜锛圧eportExportService.java 涓轰富锛夛細
+1. 鎶ヨ〃鍚屾湡鏁版嵁鎸� report_period 鍚屽勾杩囨护 鈥斺�� 淇 H2032 鍘诲勾鍚屾湀娣峰叆褰撳勾瀵艰嚧鈥滆涓婅揣杩愰噺脳2銆佽涓嬩负璐熷ぇ鍊尖�濈殑婧愬ご闂銆�
+2. fixCityMonthHeaderText锛氭湭鏍煎紡鍖栨棩鏈熷簭鍒楀彿锛�46082 绛夛級鈫掋�寉yyy骞碝鏈堛�嶃��
+3. clearFormulaErrorCells / clearFormulaErrorsAll锛氭竻绌烘眰鍊奸敊璇殑鍏紡缁撴灉锛堟ā鏉胯法绨�/璺ㄨ〃鍚屾瘮 #REF!銆佹棤鍘诲勾鏁版嵁 #DIV/0!锛夛紝涓嶆敼鍐欏叕寮忔枃鏈��
+4. 宸叉帴鍏ワ細exportCityByTemplate锛堝叕浜�/鍑虹锛夈�乪xportCityRailFerryDetail銆乪xportPassengerMidDetail銆乪xportEnergySummary銆乪xportCityPassengerCitySum銆乪xportCityPassengerDetailSum銆�
+5. DataImportService锛氫釜浣撳杩愬弻妯℃澘锛堜繚鐣欐棫鈥滀紒涓氬悕绉扳�濇ā鏉� + 鏂板甯傚窞姹囨�绘ā鏉挎寜鏍囬鍧楅�愯鍏ュ簱锛夛紱RegionUtil 澧炲姞甯傚窞鍚嶁啋6 浣嶅尯鍒掔爜鍙嶅悜瑙f瀽涓庣煭鍚嶅埆鍚嶃��
+
+鏁版嵁锛圫QL 宸叉墽琛岋紝鐣欐。 outputs\fill_2026-07_freight_scale.sql锛夛細
+- freight_turnover_import銆乻cale_split_transport 2026-07 琛ラ綈/閲嶅缓锛堣绗竴鑺傦級銆�
+- h2032_enterprise_monthly锛�2026-01~2026-08 鍚� 636 鎴枫��0 閲嶅锛�8/29 璁板綍鐨� 2026-07 鈥�734 琛� / 98 鎴烽噸澶嶁�濆凡娑堥櫎锛夛紱2025-01~12 鍚� 664 鎴蜂负鍘诲勾鍩烘湡锛屾甯搞��
+
+## 鍥涖�佸凡鐭ョ己鍙o紙鏁版嵁婧愰棶棰橈紝闈炰唬鐮佺己闄凤級
+
+- 鍩庡競瀹㈣繍鏈堝害鏁版嵁锛堝叕浜� U203/鍑虹 U402/杞ㄩ亾/杞浮锛夊簱鍐呭苟闈炴瘡鏈堥兘鏈夌湡瀹炲�硷細杞ㄩ亾 2026 骞翠粎 6銆�7 鏈堟湁鏁版嵁 鈫� 鎶ヨ〃 1-5 鏈堝垪鐣欑┖銆傝ˉ榻愬悇鏈堟簮鏂囦欢鍚庨噸鏂板鍏ュ嵆鍙畬鏁淬��
+- 缃戠害杞︽棤婧愭暟鎹紝妯℃澘鏍蜂緥宸叉竻绌猴紙璁捐涓婁笉璁″叆鍩庡競瀹㈣繍鍚堣锛夈��
+- 鍓嶇鈥滃鍏ヨ繘搴︽棤鏄剧ず鈥濓細鏈瀵煎叆鍧囪蛋鎺ュ彛骞舵垚鍔熻惤搴擄紙鎵规鍙煡锛夛紱4.2 涓囪澶ф枃浠跺湪椤甸潰涓婄殑杩涘害鎻愮ず鏈鐜版帓鏌ワ紝灞� UI 渚у緟鍔炪��
+
+## 浜斻�佺粨璁�
+
+- 瀵煎叆鍔熻兘锛氫笁鏉¢摼 0 澶辫触锛屽叆搴撳�间笌婧愭枃浠堕�愰」鏍稿涓�鑷� 鈫� 鍙敤銆�
+- 鎶ヨ〃鐢熸垚锛�22 鎺ュ彛鍙嚭鏁帮紝鏃� #REF!/#DIV/0! 姹℃煋锛岃揣杩� 7 鏈堟暟瀛椾笌瀹樻柟 workbook 涓�鑷� 鈫� 鍙敤銆�
+- 閬楃暀锛氬煄甯傚杩愮己鏈堟簮鏂囦欢琛ラ綈锛涙姇璧� .xls 鑰佹牸寮忓闇�褰诲簳鎵弿鍙﹁锛涢〉闈㈣繘搴︽潯 UI 澶嶇幇鎺掓煡銆�
diff --git "a/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\345\257\274\345\205\245\346\240\241\351\252\214\345\242\236\345\274\272_2026-09-02.md" "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\345\257\274\345\205\245\346\240\241\351\252\214\345\242\236\345\274\272_2026-09-02.md"
new file mode 100644
index 0000000..a2a3f25
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\345\257\274\345\205\245\346\240\241\351\252\214\345\242\236\345\274\272_2026-09-02.md"
@@ -0,0 +1,50 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡_瀵煎叆鏍¢獙澧炲己_2026-09-02
+
+## 1. 鍔熻兘璇存槑
+瀵规暟鎹鍏ユ湇鍔★紙`DataImportService`锛夊仛鈥滃鍏ュ墠缃牎楠� + 瑙f瀽鍋ュ.鎬р�濆寮猴紝閬垮厤鍍忚兘鑰椾簨鏁呴偅鏍封�滃垪閿欎綅闈欓粯瀵煎叆鈥濓細
+- 杩愭斂杞﹁締銆佽建杩归噷绋嬶細鐢扁�滃浐瀹氬垪浣嶁�濇敼涓�**琛ㄥご鍚嶇О鏄犲皠**锛堜笌 H2032 璐ц繍鏈堟姤涓�鑷达級鈥斺�斿垪椤哄簭鍙樺寲涔熻兘瀵煎叆锛岀己鍒�/鍒楀悕涓嶇鏄庣‘鎶ラ敊銆�
+- 鍩庡競鍏氦 U203銆佸贰娓稿嚭绉� U402銆佹姇璧勭郴缁熷鍑猴細鏂板**琛ㄥご鍒椾綅鏍¢獙**锛坄requireHeaderLayout`锛夛紝鍒椾綅閿欎綅鐩存帴鎷掔粷骞舵彁绀衡�滅 X 鍒楀簲涓衡�︹�濄��
+- 璐ц繍閲忓懆杞噺锛氭柊澧炶〃澶存牎楠岋紙棣栬椤讳负銆岃揣杩愰噺(涓囧惃)/1鏈堚�︺�嶅竷灞�锛夈��
+- 瑙勪笂瑙勪笅鎷嗗垎锛氭柊澧� sheet 甯冨眬鏍¢獙锛堢 2 琛屻�屽競宸�/瑙勪笂浼佷笟杩愯緭閲忋��+ 绗� 3 琛屻�屽懆杞噺/璐ц繍閲忋�嶅瓙琛ㄥご锛夈��
+
+## 2. 娴嬭瘯鐜
+- 鍚庣锛歋pring Boot锛�8090锛夛紝鏈湴鍚姩锛�2026-09-02 閲嶅惎鍚庣敓鏁堛��
+- 鏁版嵁搴擄細`traffic_audit`锛坙ocalhost:3308锛夈��
+- 鏂瑰紡锛歚curl /api/import/<type>` 鐩存帴璋冪敤锛屾祴璇曟姤琛ㄦ湡 `2026-HT` / `2026-06`锛堟祴鍚庡凡娓呯悊锛夈��
+- 鏂囦欢锛氬畼鏂规ā鏉匡紙docs/璐ц繍銆乨ocs/鍩庡競瀹㈣繍銆乨ocs/鎶曡祫锛�+ 鏋勯�犵敤渚嬶紙鍒楀簭鎵撲贡/閿欎綅鍒�/缂哄垪锛夈��
+
+## 3. 鐢ㄤ緥涓庣粨鏋�
+| # | 绫诲瀷 | 鐢ㄤ緥 | 棰勬湡 | 瀹為檯 | 缁撹 |
+|---|---|---|---|---|---|
+| 1 | 杩愭斂杞﹁締 | 妯℃澘鏂囦欢瀵煎叆 | 鎴愬姛瀵煎叆 | 鎴愬姛 2 鏉� | 鉁� |
+| 2 | 杩愭斂杞﹁締 | 鍒楅『搴忔墦涔憋紙鍒楀悕涓嶅彉锛� | 浠嶈兘瀵煎叆涓斿瓧娈靛榻� | 鎴愬姛 2 鏉★紝鍏ュ簱涓庢ā鏉块�愰」涓�鑷� | 鉁� |
+| 3 | 杩愭斂杞﹁締 | 缂恒�屾寕杞︽�诲惃浣�(鍚�)銆嶅垪 | 鏄庣‘鎶ラ敊 | 琛ㄥご缂哄皯蹇呴渶鍒椼�愭寕杞︽�诲惃浣�(鍚�)銆� | 鉁� |
+| 4 | 杞ㄨ抗閲岀▼ | 妯℃澘鏂囦欢瀵煎叆 | 鎴愬姛瀵煎叆 | 鎴愬姛 2 鏉� | 鉁� |
+| 5 | 杞ㄨ抗閲岀▼ | 鍒楅『搴忔墦涔� | 浠嶈兘瀵煎叆涓斿瓧娈靛榻� | 鎴愬姛 2 鏉� | 鉁� |
+| 6 | 杞ㄨ抗閲岀▼ | 鍒楀悕鏀广�屾湀搴﹂噷绋�(鍏噷)銆� | 鏄庣‘鎶ラ敊 | 琛ㄥご缂哄皯蹇呴渶鍒椼�愭湀搴︽�婚噷绋�(鍏噷)銆� | 鉁� |
+| 7 | 鍩庡競鍏氦 | 琛ㄥご绗� 6 鍒楁彃銆岄敊浣嶅垪銆� | 鎷掔粷骞舵彁绀哄垪浣� | 鈥滅 6 鍒楀簲涓恒�屽叕鍏辨苯鐢佃溅_杩愯惀杞︽暟銆嶁�� | 鉁� |
+| 8 | 宸℃父鍑虹 | 琛ㄥご绗� 5 鍒楁彃銆岄敊浣嶅垪銆� | 鎷掔粷骞舵彁绀哄垪浣� | 鈥滅 5 鍒楀簲涓恒�岃浇瀹㈣溅娆℃�绘暟銆嶁�� | 鉁� |
+| 9 | 鎶曡祫绯荤粺瀵煎嚭 | 绗� 1 鍒椼�岃鍙枫�嶆敼銆屽簭鍙枫�� | 鎷掔粷骞舵彁绀哄垪浣� | 鈥滅 1 鍒楀簲涓恒�岃鍙枫�嶁�� | 鉁� |
+| 10 | 鎶曡祫绯荤粺瀵煎嚭 | 姝g‘琛ㄥご | 鎴愬姛 | 鎴愬姛 0 鏉� | 鉁� |
+| 11 | 璐ц繍閲忓懆杞噺 | 妯℃澘鏂囦欢瀵煎叆 | 鎴愬姛瀵煎叆 | 鎴愬姛 18 鏉� | 鉁� |
+| 12 | 璐ц繍閲忓懆杞噺 | 閿欑被鍨嬫枃浠讹紙杩愭斂杞﹁締锛� | 鎷掔粷 | 鈥滆〃澶村簲涓恒�岃揣杩愰噺(涓囧惃)/1鏈堚�︺�嶅竷灞�鈥� | 鉁� |
+| 13 | 瑙勪笂瑙勪笅 | 妯℃澘鏂囦欢瀵煎叆 | 鎴愬姛瀵煎叆 | 鎴愬姛 36 鏉� | 鉁� |
+| 14 | 瑙勪笂瑙勪笅 | sheet 鍚嶅惈鈥滃綋鏈堚�濅絾甯冨眬閿欒 | 鎷掔粷 | 鈥渟heet銆屾祴璇曞綋鏈堛�嶆湭鎵惧埌銆屽競宸�/瑙勪笂鈥︺�嶈〃澶粹�� | 鉁� |
+| 15 | 鍏矾鏃呭杩愭斂杞﹁締鏁� | 妯℃澘瀵煎叆锛堜笂鍗堜綋妫�锛� | 鎴愬姛 | 767 鏉� 0 澶辫触 | 鉁� |
+| 16 | 涓綋瀹㈣繍閲� | 琛ㄥご璇嗗埆锛堟ā鏉夸粎琛ㄥご锛� | 0 鏉℃棤鎶ラ敊 | 鎴愬姛 0 鏉� | 鉁� |
+| 17 | 鍑虹杞﹁繍鏀� | 琛ㄥご璇嗗埆锛堟ā鏉夸粎琛ㄥご锛� | 0 鏉℃棤鎶ラ敊 | 鎴愬姛 0 鏉� | 鉁� |
+
+## 4. 鍏ュ簱鎶芥煡锛堜笌婧愭枃浠堕�愰」瀵归綈锛�
+- 杩愭斂杞﹁締锛堝垪搴忔墦涔卞悗锛夛細瀹夊悏姹借溅鐗╂祦 鐗靛紩 0/鎸� 96/鍏跺畠 96/鎸傝溅鍚ㄤ綅 1057.708/鍏跺畠鍚ㄤ綅 871.56 鉁�
+- 杞ㄨ抗閲岀▼锛氭箹鍖椾腑鍗囪繍杈� 鏈堝害閲岀▼ 150427.03/鏈夐噷绋嬭溅杈� 29 鉁�
+- 璐ц繍閲忓懆杞噺锛氭姹� 1 鏈�=5367.97597銆�6 鏈�=5041.04224銆佸幓骞� 1 鏈�=4656.86022 鉁�
+- 瑙勪笂瑙勪笅锛氭姹夊綋鏈� 瑙勪笂=241659.5295/瑙勪笅=445444.355/鍚堣=687103.884锛堢疮璁� sheet 涓�鑷达級鉁�
+
+## 5. 鍙戠幇鐨勯棶棰樹笌澶勭疆
+- 鏈彂鐜版柊缂洪櫡銆傞仐鐣欙細鍑虹杞﹁繍鏀挎ā鏉挎棤鏁版嵁琛岋紝浠呴獙璇佽〃澶磋瘑鍒紱2026-08 宸茬湡瀹炲鍏� 42636 鏉℃垚鍔燂紝寤鸿鍚庣画鐢ㄧ湡瀹炲ぇ鏂囦欢鍥炲綊涓�娆°��
+
+## 6. 缁撹
+- 鎵�鏈夊鍏ョ被鍨嬬幇鍦ㄩ兘鏈夌被鍨嬭瘑鍒�/鏍¢獙鍏滃簳锛涜繍鏀胯溅杈�/杞ㄨ抗閲岀▼鍏煎鍒楅『搴忓彉鍖栥�傚姛鑳藉彲鐢紝鍙氦浠樸��
+
+## 7. 鏁版嵁璇存槑
+- 娴嬭瘯鏁版嵁锛�2026-HT銆�2026-06 娴嬭瘯鏈燂級宸插叏閮ㄦ竻鐞嗭紱鏈Е纰� 2026-07/08 鐪熷疄鏁版嵁銆�
diff --git "a/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\346\212\225\350\265\204\345\256\241\346\240\270I004\345\237\272\345\207\206\347\274\272\345\244\261\344\277\235\346\212\244_2026-09-02.md" "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\346\212\225\350\265\204\345\256\241\346\240\270I004\345\237\272\345\207\206\347\274\272\345\244\261\344\277\235\346\212\244_2026-09-02.md"
new file mode 100644
index 0000000..dcfb7d9
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\346\212\225\350\265\204\345\256\241\346\240\270I004\345\237\272\345\207\206\347\274\272\345\244\261\344\277\235\346\212\244_2026-09-02.md"
@@ -0,0 +1,29 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡_鎶曡祫瀹℃牳I004鍩哄噯缂哄け淇濇姢_2026-09-02
+
+## 1. 鍔熻兘璇存槑
+闂锛�8 鏈堟姇璧勭墿娴佸洯鍖�/瀹㈣繍绔欏満瀵煎叆鍚庯紝瀹℃牳鍑虹幇澶ч噺 RULE_I004銆屾姇璧勭郴缁熼」鐩己澶辨牳瀹炪�嶈鎶ワ紙2026-08 鍏� 163 鏉★級锛屽師鍥犳槸鍚屾姤琛ㄦ湡鐨勬姇璧勭郴缁熷鍑哄熀鍑嗭紙investment_system 2026-08锛夊皻鏈鍏ワ紝搴撻噷鍙湁 2026-07 鍩哄噯锛汭001鈥揑003 缂哄熀鍑嗘椂浼氳烦杩囷紙sys==null 涓嶅姣旓級锛屼絾 I004锛坈heckInvestExistence锛夌己鍩哄噯鏃朵粛鎶婃瘡涓」鐩爣鎴愨�滄姇璧勭郴缁熷鍑轰腑涓嶅瓨鍦ㄢ�濄��
+淇锛圓uditEngineService锛夛細
+- executeInvestmentAudit锛氬悓鎶ヨ〃鏈熸姇璧勭郴缁熷熀鍑嗘暣鏈熺己澶憋紙sysMap 涓虹┖锛夋椂锛岃烦杩� EXISTENCE_SYS 绫昏鍒欙紝涓嶅啀鏁磋〃璇姤銆�
+- ruleSkipped锛歊ULE_I004 鍔犲叆鈥滃熀鍑嗘暣鏈熺己澶扁啋璺宠繃鈥濆垽瀹氾紝瑙勫垯缁熻椤垫爣璁� skipped=true锛堜笌 I001鈥揑003 涓�鑷达級銆�
+
+## 2. 娴嬭瘯鐜
+- 鍚庣锛歋pring Boot锛�8090锛夛紝2026-09-02 淇鍚庨噸鍚敓鏁堛��
+- 鏁版嵁搴擄細traffic_audit锛坙ocalhost:3308锛夈��
+- 鏂瑰紡锛歚/api/audit/execute?period=2026-08&reportType=INVEST` + 搴撹〃璁℃暟鏍稿銆�
+
+## 3. 鐢ㄤ緥涓庣粨鏋�
+| # | 鍦烘櫙 | 棰勬湡 | 瀹為檯 | 缁撹 |
+|---|---|---|---|---|
+| 1 | 鍩哄噯缂哄け锛�2026-08 鏃� investment_system 鏁版嵁锛夛紝閲嶈窇 8 鏈堝鏍� | I004 涓嶅啀鏁磋〃璇姤 | 淇鍓� 163 鏉� 鈫� 淇鍚� 0 鏉� | 鉁� |
+| 2 | 瑙勫垯缁熻 ruleStats锛堝熀鍑嗙己澶憋級 | I001鈥揑004 鍧� skipped=true | 4 鏉¤鍒欏叏閮� skipped=true锛宧it=0 | 鉁� |
+| 3 | 瀵煎叆娴嬭瘯鍩哄噯锛�7鏈堟ā鏉库啋2026-08锛�148 鏉★級鍚庨噸璺戝鏍� | I004 鎭㈠鐪熷疄缂哄け妫�娴� | I004=42 鏉★紝I001=35銆両002=54銆両003=37锛堝潎鎸夊熀鍑嗘甯稿姣旓級 | 鉁� |
+| 4 | 娓呯悊娴嬭瘯鍩哄噯鍚庨噸璺戝鏍� | 鍥炲埌 0 璇姤銆佷笉娈嬬暀娴嬭瘯鏁版嵁 | INVEST 缁撴灉 0 鏉★紝investment_system 2026-08 0 琛� | 鉁� |
+
+## 4. 鍙戠幇鐨勯棶棰樹笌澶勭疆
+- 鏃犳柊澧炵己闄枫�備慨澶嶅悗 8 鏈堝鏍哥粨鏋滃凡杩樺師涓哄共鍑�鐘舵�侊紙0 鏉★級锛岀瓑寰� 8 鏈堟姇璧勭郴缁熷鍑烘枃浠跺鍏ュ悗閲嶈窇瀹℃牳鍗冲彲鎭㈠瀹屾暣瀵规瘮銆�
+
+## 5. 缁撹
+- I004 涓� I001鈥揑003 琛屼负涓�鑷达細鍩哄噯鏈埌浣嶆椂涓嶈鎶ワ紙鏍囪璺宠繃锛夛紝鍩哄噯鍒颁綅鍚庢甯告娴嬨�傚姛鑳藉彲鐢紝鍙氦浠樸��
+
+## 6. 鏁版嵁璇存槑
+- 娴嬭瘯鍩哄噯锛坕nvestment_system 2026-08 148 鏉� + 瀵煎叆璁板綍锛夊凡娓呯悊锛�2026-07 鐪熷疄鍩哄噯鏈姩锛�2026-08 瀹℃牳缁撴灉宸查噸缃负 0 鏉°��
diff --git "a/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\346\212\225\350\265\204\345\270\202\345\267\236\346\234\210\346\212\245\345\244\232sheet\350\257\206\345\210\253\344\270\216\345\272\217\345\217\267\347\251\272\346\240\274_2026-09-02.md" "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\346\212\225\350\265\204\345\270\202\345\267\236\346\234\210\346\212\245\345\244\232sheet\350\257\206\345\210\253\344\270\216\345\272\217\345\217\267\347\251\272\346\240\274_2026-09-02.md"
new file mode 100644
index 0000000..813ea24
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\346\212\225\350\265\204\345\270\202\345\267\236\346\234\210\346\212\245\345\244\232sheet\350\257\206\345\210\253\344\270\216\345\272\217\345\217\267\347\251\272\346\240\274_2026-09-02.md"
@@ -0,0 +1,36 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡_鎶曡祫甯傚窞鏈堟姤澶歴heet璇嗗埆涓庡簭鍙风┖鏍糭2026-09-02
+
+## 鍔熻兘璇存槑
+淇銆屾姇璧勶紙鐗╂祦鍥尯/瀹㈣繍绔欏満锛夈�嶅競宸炴湀鎶ュ鍏ョ殑 2 涓棶棰橈細
+1. **澶� sheet 閫夎〃閿欒**锛歚绁炲啘鏋舵灄鍖虹墿娴佹姇璧勬湀鎶�2026.08.xlsx` 鍏� 46 涓� sheet锛堝墠 24 涓负鍘嗗彶"娼滄睙浼犲寲1鏈垀2021.8"閬楃暀 sheet锛屽悗 22 涓负绁炲啘鏋剁湡瀹炴湀鎶� `2024.10`鈥2026.8`锛夛紝鏃ч�昏緫鍙湅"8鏈�"瀛楁牱锛岃閫夊巻鍙� sheet銆屾綔姹熶紶鍖�8鏈堛�嶏紝璇诲嚭娼滄睙椤圭洰褰掑睘绁炲啘鏋� 鈫� 琚競宸炰竴鑷存�ф牎楠屾嫆缁濓紙瀵煎叆澶辫触锛夈��
+2. **搴忓彿涓虹┖鐨勯」鐩琚烦杩�**锛氱湡鏁版嵁 sheet `2026.8` 涓�岀鍐滄灦鐗╂祦鍥�嶉」鐩搴忓彿鍒椾负绌猴紝鏃цВ鏋愭妸绌哄簭鍙疯涓�寰嬪綋甯傚窞灏忚妭琛岃烦杩囷紝瀵艰嚧鐪熷疄鏁版嵁浠庢湭鍏ュ簱锛堝簱閲屽彧鏈夊杩愩�岀鍐滄灦鏋㈢航绔欍�嶏紝鏃犮�岀鍐滄灦鐗╂祦鍥�嶏級銆�
+
+## 淇鏂规锛圖ataImportService.java锛�
+- `investSheetMatchesPeriod`锛氭敮鎸佺偣鍙锋姤琛ㄦ湡锛坄2026.8`/`2026.08` 鈫� 褰掍竴鍖栦负杩炲瓧绗﹀啀鍖归厤锛夈��
+- 閫� sheet 鍔犲垎锛氬尮閰嶆姤琛ㄦ湡涓� sheet 鍚嶅惈骞翠唤鍓嶇紑锛坄2026`锛夋椂棰濆 +100000 鍒嗭紝浼樺厛閫夊綋鏈熺湡瀹炴姤琛紝鍘嗗彶绾湀浠藉悕 sheet 鏃犳鍔犲垎銆�
+- 瑙f瀽寰幆锛氱┖搴忓彿琛岃嫢闈炲競宸炲悕銆佷笖 `isLikelyInvestProjectName` 涓虹湡 鈫� 鎸夐」鐩澶勭悊锛涢潪绌洪潪鏁板瓧搴忓彿 鈫� 璺宠繃銆�
+- 鏂板 helper `isLikelyInvestProjectName`锛氶暱搴�>4銆侀潪甯傚窞鍚嶃�侀潪澶囨敞/璇存槑/娉細/濉〃/瀹℃牳/缁熻/璐熻矗寮�澶淬��
+- `countInvestRows` 鍚屾鏀寔绌哄簭鍙烽」鐩璁℃暟銆�
+
+## 娴嬭瘯鐜
+- 鍚庣锛歵raffic-audit-server锛圫pring Boot锛�8090锛夛紝浠g爜閲嶆柊缂栬瘧鍚庨噸鍚紙11:34 灏辩华锛夈��
+- 鏁版嵁搴擄細MySQL 3308 traffic_audit銆�
+- 鎺ュ彛锛歚POST /api/import/batch`锛坱ype=investmentLogistics锛宲eriod=2026-08锛夈��
+- 娴嬭瘯鏂囦欢锛歚D:\妗岄潰\娴嬭瘯鏁版嵁\鍏湀婧愭暟鎹甛鐗╂祦\绁炲啘鏋舵灄鍖虹墿娴佹姇璧勬湀鎶�2026.08.xlsx`銆乣娼滄睙2026.08.xlsx`銆�
+
+## 鐢ㄤ緥琛�
+
+| # | 鐢ㄤ緥 | 杈撳叆 | 棰勬湡 | 瀹為檯 | 缁撹 |
+|---|------|------|------|------|------|
+| 1 | 姝e悜锛氱鍐滄灦+娼滄睙涓ゆ枃浠舵壒閲忓鍏� | 绁炲啘鏋舵灄鍖虹墿娴佹姇璧勬湀鎶�2026.08.xlsx + 娼滄睙2026.08.xlsx | total=2, success=2, fail=0 | total=2, success=2, fail=0锛岀鍐滄灦鏋楀尯 1 鏉°�佹綔姹熷競 1 鏉� | 鉁� 閫氳繃 |
+| 2 | 鍏ュ簱楠岃瘉锛氱鍐滄灦鐗╂祦鍥」鐩� | 鈥� | investment_project 瀛樺湪銆岀鍐滄灦鐗╂祦鍥�嶏紝city=绁炲啘鏋舵灄鍖� | id=228锛宼otal_investment=7440.35锛宑ity=绁炲啘鏋舵灄鍖猴紝builder=鍥芥姇闆嗗洟浜ゆ姇鍏徃 | 鉁� 閫氳繃 |
+| 3 | 鍏ュ簱楠岃瘉锛氱鍐滄灦鐗╂祦鍥� 8 鏈堟湀搴︽暟鎹� | 鈥� | investment_monthly 2026-08 鏈夎褰� | year_plan=31锛寉ear_cum=26.1锛宮onth_done=0锛宻tart_cum=7535.45 | 鉁� 閫氳繃 |
+| 4 | 鍏ュ簱楠岃瘉锛氭綔姹熸枃浠朵笉鍙楀奖鍝� | 鈥� | 娼滄睙浼犲寲鍏矾娓」鐩� 2026-08 姝e父 | year_plan=12000锛寉ear_cum=5173锛宮onth_done=1440 | 鉁� 閫氳繃 |
+| 5 | 鍙嶅悜瀵圭収锛氭棫浠g爜璇ュ満鏅� | 鍚屼竴鎵规枃浠讹紙淇鍓� 11:32 璁板綍锛� | 鈥� | batch#170锛歴uccess=1, fail=1锛屾姤銆屾綔姹熶紶鍖栧叕璺腐椤圭洰銆嶅競宸為敊浣� | 鉁� 淇鐢熸晥 |
+
+## 鍙戠幇鐨勯棶棰樹笌澶勭疆
+- 鏃犳柊闂銆傚巻鍙查仐鐣欒鏄庯細`import_batch` #170锛�11:32:19锛変笌 #168锛�11:00:56锛変负淇鍓嶆棫閫昏緫鐨勫け璐ヨ褰曪紝灞炴祴璇曞鐓э紝涓嶅奖鍝嶆暟鎹��
+- 淇鍓嶅簱閲岀‘瀹炵己澶辩鍐滄灦鐗╂祦鍥� 6/7/8 鏈堟暟鎹紙鐪熷疄鏁版嵁涓�鐩存紡瀵硷級锛屾湰娆″鍏ュ悗 8 鏈堝凡琛ラ綈锛�6/7 鏈堝闇�琛ュ锛岄渶鐢ㄥ悓閫昏緫閲嶅鍘嗗彶鏂囦欢銆�
+
+## 缁撹
+鍏ㄩ儴鐢ㄤ緥閫氳繃銆傚 sheet 閫夎〃浼樺厛褰撴湡甯﹀勾浠� sheet銆佺┖搴忓彿椤圭洰琛屽彲姝g‘瑙f瀽銆佸競宸炰竴鑷存�ф牎楠屼笉鍐嶈浼ょ鍐滄灦鏂囦欢锛涙綔姹熸枃浠惰В鏋愪笉鍙楀奖鍝嶃��
diff --git "a/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\347\224\237\346\210\220\346\250\241\346\235\277\346\226\260\347\211\210\345\274\217_2026-09-02.md" "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\347\224\237\346\210\220\346\250\241\346\235\277\346\226\260\347\211\210\345\274\217_2026-09-02.md"
new file mode 100644
index 0000000..5ae47fe
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\347\224\237\346\210\220\346\250\241\346\235\277\346\226\260\347\211\210\345\274\217_2026-09-02.md"
@@ -0,0 +1,57 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡锛氱敓鎴愭ā鏉挎柊鐗堝紡鏀归�狅紙2026-09-02锛�
+
+> 鍔熻兘锛氭寜鐢ㄦ埛鎵嬪伐鏀瑰ソ鐨勨�滄柊鐗堝紡鈥濇ā鏉匡紙涓婂崐鍧椼��1-N鏈堢疮璁°��+ 涓嬪崐鍧椼�孨鏈堝綋鏈�/鍗曟湀銆嶏級璋冩暣璐ц繍銆佸叕璺梾瀹€�佸煄甯傚杩愪笁绫汇�婄敓鎴恄*.xlsx銆嬫姤琛ㄧ殑濉厖閫昏緫銆�
+> 鑼冨洿锛氬彧鏀规姤琛ㄧ敓鎴愪唬鐮佷笌搴曠寮曠敤锛屼笉娑夊強鏁版嵁瀵煎叆锛涗唬鐮佹湭鎻愪氦銆佹湭鎺ㄩ�併��
+
+## 涓�銆佸姛鑳借鏄庯紙浠g爜鏀瑰姩锛�
+
+### 1. 鍏矾鏃呭
+- `鐢熸垚_涓彛寰勫垎鏋�.xlsx`锛氫笅鍗婂潡鏍囬锛圓9锛夊姩鎬佸寲涓恒�孻YYY骞碝鏈堜腑鍙e緞瀹㈣繍閲忓強鍛ㄨ浆閲忋�嶏紱鏁版嵁琛� R11-R15 濉綋鏈堝杩愰噺/鍛ㄨ浆閲忥紙褰撴湀锛漀鏈堢疮璁♀垝N-1鏈堢疮璁★級涓庡綋鏈堝悓姣旓紱鍗犳瘮鍏紡 D/H 鐢辨寚鍚� B$3/F$3 鏀逛负鎸囧悜 B$11/F$11锛堝綋鏈堝潡鑷韩锛夈��
+- `鐢熸垚_涓彛寰勬帓鍚�.xlsx`锛氬彸渚у綋鏈堝潡 K1 鏍囬鍔ㄦ�佸寲銆孻YYY骞碝鏈堝叏鐪佸垎甯傚窞瀹屾垚閬撹矾瀹㈣繍鐢熶骇鎯呭喌銆嶏紱L/P 濉綋鏈堝�笺�丯/R 濉綋鏈堝悓姣旓紱宸︿晶浠嶄负 1-N 鏈堢疮璁″潡銆�
+
+### 2. 鍩庡競瀹㈣繍
+- `鐢熸垚_鍩庡競瀹㈣繍姹囨��.xlsx`锛氬簳閮ㄦ柊澧炲崟鏈堝潡锛堟爣棰� A11锛屾暟鎹 R13-R19锛氭�诲杩愰噺/鎬诲懆杞噺銆佸叕浜ゃ�佸嚭绉熴�佸贰娓稿嚭绉熴�佺綉绾﹁溅=0銆佽建閬撱�佽疆娓★級锛屽~褰撴湀瀹屾垚閲忥紝鍚屾瘮鐣欑┖銆�
+- `鐢熸垚_鍩庡競瀹㈣繍瀹㈣繍閲忓垎甯傚窞绱.xlsx`銆乣鐢熸垚_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx`锛氬綋鏈堝潡锛堝杩愰噺 R49-R66銆佸懆杞噺 R71-R88锛夋敼濉綋鏈堝�硷紙褰撴湀绱宸級锛涘綋鏈堝潡 RANK/鍗犳瘮/澧為�熸帓鍚嶅叕寮忕敱澶嶅埗绱鍧楄�屾潵锛屾敼鎸囧綋鏈堝潡鑷韩琛岋紱褰撴湀鏍囬 A45/A67 鍔ㄦ�佸寲銆�
+- 搴曠寮曠敤淇锛氬煄甯傚杩� 6 澶勫凡鍒犻櫎鐨勩�婂鍏ユā鏉縚鍩庡競鍏氦/宸℃父鍑虹/杞ㄩ亾杞浮/鍩庡競姹囨��/鍩庡競鍒嗗競宸�/鍚勫競宸炴槑缁嗚〃銆嬪叏閮ㄦ敼鍥炲悓鍚嶃�婄敓鎴恄*.xlsx銆嬶紙ReportExportService/Controller銆佷竴閿郴鍒楀寘鍐呭悓姝ワ級锛涘墠绔� DataImport.vue 鍩庡競鍏氦/宸℃父鍑虹鈥滀笅杞芥ā鏉库�濋摼鎺ュ悓姝ユ敼鎸囥�婄敓鎴恄*銆嬨��
+
+### 3. 璐ц繍
+- `鐢熸垚_璐ц繍閲忔帓鍚�.xlsx`銆乣鐢熸垚_鍛ㄨ浆閲忔帓鍚�.xlsx`锛歊23 鏍囬鍘绘帀鈥滅疮璁♀�濆瓧鏍� 鈫掋�孻YYY骞碝鏈堝叏鐪佸垎甯傚窞瀹屾垚鍏矾璐ц繍閲�/璐х墿杩愯緭鍛ㄨ浆閲忔儏鍐点�嶃��
+- **绗簩椤垫暟鎹敼濉�滃綋鏈堚�濆�硷紙2026-09-02 16:40 纭骞跺疄鐜帮級**锛氳揣杩愰噺绗簩椤靛悎璁�=妯℃澘_璐ц繍閲忓懆杞噺褰撴湀鍒楋紙freight_mN锛夈�佽涓�=H2032 褰撴湀鍚�/1e4銆佽涓�=宸�硷紝鍚屾瘮鍙栧幓骞村悓鏈堬紱鍛ㄨ浆閲忕浜岄〉鐩存帴鐢ㄦ媶鍒嗚〃 MONTH 琛岋紙鍚綋鏈堝悓姣斿瓧娈碉級銆�
+- 绗簩椤靛垪澶粹�滅疮璁″畬鎴� (涓囧惃/涓囧惃鍏噷锛夆�濆湪瀵煎嚭鏃跺唴瀛樻浛鎹负鈥滃綋鏈堝畬鎴愨�濓紙`renameRankMonthHeader`锛屼笉鏀规ā鏉挎簮鏂囦欢锛夈��
+
+## 浜屻�佹祴璇曠幆澧�
+- 鍚庣 8090 鏈湴杩愯锛涙暟鎹簱 mysql localhost:3308 traffic_audit銆�
+- 鏁版嵁鐜扮姸锛歨2031锛堝叕璺梾瀹紒涓氭湀鎶ワ級2026-03/07锛沜ity_bus/city_taxi 2026-06/07锛沨2032 2026-01~08 瀹屾暣銆�
+- 娴嬭瘯鎶ヨ〃鏈燂細2026-07锛宮ode=month銆備骇鐗╃暀妗o細outputs/report_check/regression_newtpl_2026-07/
+
+## 涓夈�佺敤渚嬭〃
+
+| # | 绫诲瀷 | 杈撳叆 | 棰勬湡 | 瀹為檯 | 缁撹 |
+|---|---|---|---|---|---|
+| 1 | 姝e悜 | passengerMidAnalysis 2026-07 | 涓婂崐鍧�=1-7鏈堢疮璁★紝涓嬪崐鍧�=7鏈堝綋鏈� | A1=銆�2026骞�1-7鏈堜腑鍙e緞鈥︺�岯3=6151.91 涓囦汉銆丗3=285634.95锛汚9=銆�2026骞�7鏈堜腑鍙e緞鈥︺�岯11=3078.86 涓囦汉銆丗11=141155.32锛汥12-H15 鍗犳瘮鍏紡鍒嗘瘝=B$11/F$11 | 閫氳繃 |
+| 2 | 姝e悜 | passengerMidRank 2026-07 | 宸﹀潡绱鏍囬銆佸彸鍧楀綋鏈堟爣棰樹笌褰撴湀鍊� | A1=1-7鏈堢疮璁℃爣棰橈紱K1=銆�2026骞�7鏈堝叏鐪佸垎甯傚窞瀹屾垚鈥︺�嶏紱L3=3078.86锛堝綋鏈堬級涓庡乏鍧� B 鍒楃疮璁℃暟鍊兼槑鏄惧尯鍒� | 閫氳繃 |
+| 3 | 姝e悜 | cityPassengerSummary 2026-07 | 搴曢儴鍗曟湀鍧�=搴撳唴 2026-07 鍚堣 | A11=銆�2026骞�7鏈堝叏鐪佸畬鎴愬煄甯傚杩愰噺鎯呭喌銆嶏紱B13=30612.85銆丏13=218186.08锛汢14=12974.73锛堝叕浜わ級銆丅15=5860.24锛堝嚭绉燂級銆丅18=11731.83锛堣建閬擄級銆丅19=46.05锛堣疆娓★級锛屼笌搴撳唴 city_bus/city_taxi 2026-07 鍒嗛」鍚堣閫愪綅涓�鑷� | 閫氳繃 |
+| 4 | 姝e悜 | cityPassengerCitySum 2026-07 | 褰撴湀鍧�=7鏈堝綋鏈堛�佸叕寮忔寚褰撴湀琛� | 褰撴湀瀹㈣繍閲忓潡姝︽眽 R50锛欸=4218.74锛堝叕浜わ級銆丩=1093.91锛堝嚭绉燂級銆乂=11701.74锛堣建閬擄級銆乆=46.05锛堣疆娓★級銆丅=17060.44锛屼笌 DB 2026-07 涓�鑷达紱C/H/M/R 鎺掑悕鍏紡鑼冨洿=B$50:B$66 绛夊綋鏈堣锛涚疮璁″潡涓庡綋鏈堝潡鏁板�煎尯鍒嗘槑鏄� | 閫氳繃 |
+| 5 | 姝e悜 | freightRank / turnoverRank 2026-07 | R23 鏍囬鏃犫�滅疮璁♀�濓紱绗簩椤�=褰撴湀鍊� | R23=銆�2026骞�7鏈堚�﹀畬鎴愨�︺�嶏紱涓婂崐鍧� 1-7 绱涓嶅彉锛涚浜岄〉 2026-07 褰撴湀鍊间笌搴撳唴閫愰」涓�鑷达紙瑙佺敤渚� 11锛� | 閫氳繃 |
+| 11 | 姝e悜 | freightRank/turnoverRank 2026-07 褰撴湀鐗堬紙浜у嚭 freightRank_褰撴湀鐗坃2026-07.xlsx / turnoverRank_褰撴湀鐗坃2026-07.xlsx锛� | 绗簩椤靛綋鏈堝�间笌 DB 涓�鑷淬�佸垪澶�=褰撴湀瀹屾垚 | 璐ц繍閲忕浜岄〉锛氬叏鐪� R26 B/G/L=3754.7823/12530.9282/16285.7105銆佹姹� R27 B=1227.5499锛圖B H2032 2026-07 姝︽眽鍚堣 1227.5499 鉁擄級銆丩=4940.9715锛涘懆杞噺绗簩椤碉細鍏ㄧ渷 R26=597278.64/1584647.07/2181925.71銆佹姹� R27=204809.5633/462751.8106/667561.3739锛屼笌 DB scale_split MONTH 琛屼竴鑷达紱B25/G25/L25 鍒楀ご=鈥滃綋鏈堝畬鎴愨�濓紱鏃犻敊璇叕寮� | 閫氳繃 |
+| 6 | 姝e悜 | 10 涓鍑烘帴鍙o紙鍚湭鍔ㄨ〃鐨勫叕浜�/鍑虹/杞ㄩ亾杞浮鏄庣粏锛�2026-07 | 鍏ㄩ儴鍙嚭鏁� | 鍏ㄩ儴 HTTP 200锛涘叏鏂囦欢閿欒鍏紡鎵弿 #REF!/#DIV/0!/#N/A = 0 娈嬬暀 | 閫氳繃 |
+| 7 | 璐熷悜 | 鏃犳暟鎹湀浠� period=2026-05锛坈itySummary/freightRank锛� | 涓嶆姤閿欍�佸綋鏈堝潡鐣欑┖ | HTTP 200锛岀┖琛ㄦ甯哥敓鎴愶紙浜х墿 neg_citySummary_2026-05_nodata.xlsx锛� | 閫氳繃 |
+| 8 | 璐熷悜 | 骞村垵鍗曟湀 period=2026-01锛坒reightRank锛� | 褰撴湀鍧�=1鏈堟暟鎹� | HTTP 200锛堜骇鐗� neg_freightRank_2026-01.xlsx锛� | 閫氳繃 |
+| 9 | 杈圭晫 | 瓒呰寖鍥存湀浠� period=2026-13 | 涓嶅穿銆佽蒋澶勭悊 | HTTP 200 姝e父鍑烘枃浠� | 閫氳繃锛堝鏉惧鐞嗭級 |
+| 10 | 璐熷悜 | 闈炴硶鎶ヨ〃鏈� period=bad-period | 鍙嬪ソ鎶ラ敊鎴� 400 | HTTP 500锛堟棤鍏ュ弬鏍¢獙锛涘墠绔负鍥哄畾涓嬫媺锛屾甯歌矾寰勪笉鍙揪锛� | 鍙戠幇缂洪櫡锛堜綆浼樺厛锛� |
+
+## 鍥涖�佸叆搴撴娊鏌ワ紙涓庢簮搴撻�愰」瀵归綈锛�
+- 鍩庡競瀹㈣繍姹囨�诲簳閮ㄥ崟鏈堝潡锛欱14/D14锛堝叕浜� 12974.73 / 87147.68锛夈�丅15/D15锛堝嚭绉� 5860.24 / 34236.60锛夈�丅18/D18锛堣建閬� 11731.83 / 96645.23锛夈�丅19/D19锛堣疆娓� 46.05 / 156.57锛�= SELECT SUM 2026-07 city_bus/city_taxi 閫愰」涓�鑷淬��
+- 鍩庡競瀹㈣繍褰撴湀鍧楀垎甯傚窞锛氭姹� R50 鍏氦 4218.74銆佸嚭绉� 1093.91 = DB 2026-07 姝︽眽甯傚悎璁★紱鍏朵綑 16 甯傚窞鍏氦鍊间笌 DB 閫愬競宸炰竴鑷达紙鎶芥煡 G 鍒� R50-R66锛夈��
+- 鍏矾鏃呭涓彛寰勪笅鍗婂潡 3078.86 涓囦汉 / 141155.32 涓囦汉鍏噷 = 2026-07 褰撴湀婧愬�硷紙绱宸彛寰勶紝涓庢棦鏈夊洖褰掑彛寰勪竴鑷达級銆�
+
+## 浜斻�佸彂鐜扮殑闂涓庡缃�
+1. **璐ц繍涓ゅ紶鎺掑悕琛ㄧ浜岄〉鈥滃綋鏈堚�濆~鍏咃紙宸插疄鐜板苟楠岃瘉锛�2026-09-02 16:40锛�**锛氫笟鍔$‘璁ょ浜岄〉瑕佸綋鏈堝�煎悗锛屽凡瀹炵幇褰撴湀濉厖锛堣揣杩愰噺锛氳涓�=H2032 褰撴湀/鍚堣=妯℃澘褰撴湀鍒�/瑙勪笅=宸�硷紱鍛ㄨ浆閲忥細鎷嗗垎琛� MONTH 琛岋級锛屽苟鎶婄浜岄〉鍒楀ご鍐呭瓨鏇挎崲涓衡�滃綋鏈堝畬鎴愨�濄��2026-07 鍥炲綊涓� DB 閫愰」涓�鑷淬�佹棤閿欒鍏紡銆傛ā鏉挎簮鏂囦欢锛坉ocs/璐ц繍/鐢熸垚_*.xlsx锛夋湰韬粛鍐欌�滅疮璁″畬鎴愨�濆瓧鏍凤紝濡傞渶婧愭枃浠朵竴骞舵敼鍙湪 Excel 涓彟瀛橈紙绋嬪簭瀵煎嚭宸茶嚜鍔ㄦ樉绀轰负鈥滃綋鏈堝畬鎴愨�濓級銆�
+2. **鍩庡競瀹㈣繍褰撴湀鍧� Q 鍧楄〃澶存涔夛紙寰呬笟鍔$‘璁わ級**锛氬綋鏈堝杩愰噺鍧楄〃澶磋 48 Q 鍒楀啓鈥滃叾涓細鍑虹鈥濄�佸綋鏈堝懆杞噺鍧楄〃澶磋 70 Q 鍒楀啓鈥滃叾涓細缃戠害杞︹�濓紝绋嬪簭鎸夆�滅綉绾﹁溅=0 鐣欑┖鈥濆~鍏咃紱闇�纭涓氬姟鍙e緞锛堝凡璁板叆寰呯‘璁ゆ竻鍗曪級銆�
+3. **澧為��/澧為�熸帓鍚嶅垪**锛欵/J/O/T/W/Y 鏃犲幓骞村悓鏈熸暟鎹椂鐣欑┖锛屽叾鎺掑悕鍏紡锛團/K/P/U 绛夛級淇濈暀锛涙棤鍘诲勾鏁版嵁鏃舵帓鍚嶆棤涓氬姟鎰忎箟锛屽緟妯℃澘鍙e緞纭鍚庡喅瀹氭槸鍚︽暣鍒楁竻绌恒��
+4. **闈炴硶 period 杩斿洖 500**锛氭姤琛ㄥ弬鏁版湭鍋氭牸寮忔牎楠岋紝鍓嶇鍥哄畾涓嬫媺涓嶅彲杈撅紝浣庝紭鍏堢骇锛屽缓璁悗缁粺涓�琛ャ��
+
+## 鍏�佺粨璁�
+- 鍏矾鏃呭銆佸煄甯傚杩愭柊鐗堝紡鏀归�犲凡钀藉湴锛氫笂鍗娾�滅疮璁♀��+涓嬪崐鈥滃綋鏈堚�濆弻鍧楃粨鏋勬纭�佸叕寮忚寖鍥存纭�佹暟鍊间笌搴撳唴 2026-07 鏁版嵁閫愰」瀵归綈锛屾棤閿欒鍏紡娈嬬暀 鈫� 鍙敤銆�
+- 璐ц繍涓ゅ紶鎺掑悕琛ㄧ浜岄〉鈥滃綋鏈堚�濆~鍏呭凡瀹炵幇骞堕�氳繃 2026-07 鍥炲綊锛堜笌搴撳唴 H2032 / freight_turnover_import / scale_split MONTH 琛岄�愰」涓�鑷达級銆�
+
diff --git "a/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\350\277\220\346\224\277\350\275\246\350\276\206\344\270\216\350\275\250\350\277\271\351\207\214\347\250\213\345\257\274\345\205\245\345\233\236\345\275\222_2026-09-02.md" "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\350\277\220\346\224\277\350\275\246\350\276\206\344\270\216\350\275\250\350\277\271\351\207\214\347\250\213\345\257\274\345\205\245\345\233\236\345\275\222_2026-09-02.md"
new file mode 100644
index 0000000..3bcb4d4
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\350\277\220\346\224\277\350\275\246\350\276\206\344\270\216\350\275\250\350\277\271\351\207\214\347\250\213\345\257\274\345\205\245\345\233\236\345\275\222_2026-09-02.md"
@@ -0,0 +1,33 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡_杩愭斂杞﹁締涓庤建杩归噷绋嬪鍏ュ洖褰抇2026-09-02
+
+## 鍔熻兘璇存槑
+鍥炲綊銆岃繍鏀胯溅杈嗐�嶃�岃建杩归噷绋嬨�嶅鍏ュ姛鑳斤紙瑙f瀽鏂瑰紡宸蹭簬 09-02 鏀逛负"琛ㄥご鍚嶇О鏄犲皠"锛屽垪椤哄簭鍙樺寲涔熻兘姝g‘瀵煎叆锛夈�傜敤 docs 閲岀殑 7 鏈堟暟鎹枃浠舵祴璇� 2026-08 鎶ヨ〃鏈燂紝楠岃瘉姝e悜瀵煎叆銆佸叆搴撳榻愩�佸垪涔卞簭銆侀敊绫诲瀷璐熷悜绛夊満鏅��
+
+## 娴嬭瘯鐜
+- 鍚庣锛歵raffic-audit-server锛圫pring Boot锛�8090锛夛紝13:21 閲嶅惎灏辩华銆�
+- 鏁版嵁搴擄細MySQL 3308 traffic_audit銆�
+- 鎺ュ彛锛歚POST /api/import/transportAuth`锛堣繍鏀胯溅杈嗭級銆乣POST /api/import/trackMileage`锛堣建杩归噷绋嬶級銆�
+- 娴嬭瘯鏂囦欢锛坉ocs 鍐呯湡瀹炴暟鎹揩鐓э級锛�
+  - `docs/璐ц繍/妯℃澘_杩愭斂杞﹁締.xlsx`锛堣〃澶达細浼佷笟鍚嶇О/鎬荤壍寮曡溅鏁�/鎬绘寕杞︽暟/鍏跺畠杞﹁締鏁�/鎸傝溅鎬诲惃浣�(鍚�)/鍏跺畠杞﹁締鎬诲惃浣�(鍚�)锛�635 琛屾暟鎹級
+  - `docs/璐ц繍/妯℃澘_杞ㄨ抗閲岀▼.xlsx`锛堣〃澶达細搴忓彿/浼佷笟鍚嶇О/鏈堝害鎬婚噷绋�(鍏噷)/鏈夐噷绋嬬殑杞﹁締鏁帮紝628 琛屾暟鎹級
+
+## 鐢ㄤ緥琛�
+
+| # | 鐢ㄤ緥 | 杈撳叆 | 棰勬湡 | 瀹為檯 | 缁撹 |
+|---|------|------|------|------|------|
+| 1 | 姝e悜锛氳繍鏀胯溅杈嗗鍏� | 妯℃澘_杩愭斂杞﹁締.xlsx 鈫� transportAuth, period=2026-08 | 鎴愬姛 635 鏉� | 635 鏉℃垚鍔燂紝0 澶辫触 | 鉁� 閫氳繃 |
+| 2 | 姝e悜锛氳建杩归噷绋嬪鍏� | 妯℃澘_杞ㄨ抗閲岀▼.xlsx 鈫� trackMileage, period=2026-08 | 鎴愬姛 628 鏉� | 628 鏉℃垚鍔燂紝0 澶辫触 | 鉁� 閫氳繃 |
+| 3 | 鍏ュ簱瀵归綈锛堣繍鏀匡級 | 鎶芥煡搴撲腑 2026-08 璁板綍 | 涓庢簮鏂囦欢閫愰」涓�鑷� | 瀹夊悏姹借溅鐗╂祦 0/96/96/1057.708/871.56 绛夊墠 3 瀹朵竴鑷� | 鉁� 閫氳繃 |
+| 4 | 鍏ュ簱瀵归綈锛堣建杩癸級 | 鎶芥煡搴撲腑 2026-08 璁板綍 | 涓庢簮鏂囦欢閫愰」涓�鑷� | 婀栧寳涓崌杩愯緭 150427.03/29 绛夊墠 3 瀹朵竴鑷� | 鉁� 閫氳繃 |
+| 5 | 鍒椾贡搴忎粛鍙鍏ワ紙杩愭斂锛� | 鎵撲贡 6 鍒楅『搴忕殑鍓湰 鈫� transportAuth | 635 鏉℃垚鍔燂紝鏁板�间笉閿欎綅 | 635 鏉℃垚鍔燂紝鎶芥煡鍊间笌婧愭枃浠朵竴鑷达紙骞傜瓑鍏堝垹鍚庢彃锛� | 鉁� 閫氳繃 |
+| 6 | 鍒椾贡搴忎粛鍙鍏ワ紙杞ㄨ抗锛� | 鎵撲贡骞跺幓鎺夊簭鍙峰垪鐨勫壇鏈� 鈫� trackMileage | 628 鏉℃垚鍔燂紝鏁板�间笉閿欎綅 | 628 鏉℃垚鍔燂紝鎶芥煡鍊间笌婧愭枃浠朵竴鑷� | 鉁� 閫氳繃 |
+| 7 | 璐熷悜锛氶敊绫诲瀷鏂囦欢 | 杩愭斂鏂囦欢璋� trackMileage | 鏄庣‘鎶ラ敊銆佸垪鍑虹己鍒� | 鎶�"琛ㄥご缂哄皯蹇呴渶鍒椼�愭湀搴︽�婚噷绋�(鍏噷)銆戙�愭湁閲岀▼鐨勮溅杈嗘暟銆戯紝璇风‘璁ゆ槸鍚﹂�夐敊浜嗘暟鎹被鍨�"锛屾湭璇垹鏁版嵁 | 鉁� 閫氳繃 |
+| 8 | 璐熷悜锛氶敊绫诲瀷鏂囦欢 | 杞ㄨ抗鏂囦欢璋� transportAuth | 鏄庣‘鎶ラ敊銆佸垪鍑虹己鍒� | 鎶�"琛ㄥご缂哄皯蹇呴渶鍒椼�愭�荤壍寮曡溅鏁般�戔��"锛屾湭璇垹鏁版嵁 | 鉁� 閫氳繃 |
+
+## 鍙戠幇鐨勯棶棰樹笌澶勭疆
+- 鏃犳柊澧為棶棰樸�傝鏄庯細娴嬭瘯鐢� 7 鏈堟暟鎹鍏ヤ簡 2026-08 鎶ヨ〃鏈燂紙transport_auth_vehicle / vehicle_track_mileage 鐨� 2026-08 = 635/628 鏉★級锛屽睘鍔熻兘娴嬭瘯鏁版嵁锛屽凡鍛婄煡鐢ㄦ埛锛屽闇�娓呯悊鍙垹闄ゅ搴旀姤琛ㄦ湡璁板綍銆�
+- 瀹樻柟鑳借�楁牸寮忥紙15 鍒�/缁勶紝濡� `閬撹矾璐ц繍杞﹁締鑳芥簮娑堣�楁儏鍐碉紙2026锛�2瀛e害.xls`锛夋寜鐢ㄦ埛纭鐨�"绯荤粺妯℃澘鏍煎紡"鍙e緞锛氫笉瀹炵幇瀹樻柟鏍煎紡鐩磋锛屽鍏ユ椂鐢辫〃澶村垪浣嶆牎楠屾嫆缁濆苟鎻愮ず"璇蜂娇鐢ㄧ郴缁熸ā鏉裤�婃ā鏉縚閬撹矾璐ц繍杞﹁締鑳芥簮娑堣�楁儏鍐碉紙2026锛�.xlsx銆嬫暣鐞嗗悗鍐嶅鍏�"锛堝疄娴嬫姤锛氱 22 鍒楀簲涓恒�岃溅鐗屽彿銆嶏紝瀹為檯涓恒�屸憽鍑哄巶骞翠唤锛堝勾锛夈�嶏級銆�
+- 椤哄甫琛ュ锛歚docs/鎶曡祫/杈撳叆/鐗╂祦锛堢墿娴佸洯鍖猴級/6鏈�/鏋楀尯鐗╂祦鎶曡祫鏈堟姤2026.06.xlsx`銆乣7鏈�/鏋楀尯鐗╂祦鎶曡祫鏈堟姤2026.07.24.xlsx` 瀵煎叆 2026-06/2026-07 鍚� 1 鏉℃垚鍔燂紝绁炲啘鏋剁墿娴佸洯 6/7/8 鏈堟暟鎹ˉ鍏紝涓旈獙璇佸 sheet 淇瀵� 6/7 鏈堟枃浠跺悓鏍风敓鏁堬紙7 鏈堟枃浠跺惈 `2026.6` 涓� `2026.7` 涓や釜 sheet锛屾纭�変腑 `2026.7`锛夈��
+
+## 缁撹
+鍏ㄩ儴鐢ㄤ緥閫氳繃銆傝繍鏀胯溅杈�/杞ㄨ抗閲岀▼鎸夎〃澶村悕绉版槧灏勮В鏋愭甯革紝鍒楅『搴忓彉鍖栦笉閿欎綅锛岄敊绫诲瀷鏂囦欢鏄庣‘鎶ラ敊涓嶈鍒犳暟鎹紱瀹樻柟鑳借�楁寜"绯荤粺妯℃澘鏍煎紡"鍙e緞鎷掔粷骞舵彁绀烘暣鐞嗐��
diff --git "a/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\257\274\345\205\245\344\270\216\347\224\237\346\210\220\346\250\241\345\235\227\344\275\223\346\243\200\351\227\256\351\242\230\346\270\205\345\215\225_2026-09-02.md" "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\257\274\345\205\245\344\270\216\347\224\237\346\210\220\346\250\241\345\235\227\344\275\223\346\243\200\351\227\256\351\242\230\346\270\205\345\215\225_2026-09-02.md"
new file mode 100644
index 0000000..3821208
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\257\274\345\205\245\344\270\216\347\224\237\346\210\220\346\250\241\345\235\227\344\275\223\346\243\200\351\227\256\351\242\230\346\270\205\345\215\225_2026-09-02.md"
@@ -0,0 +1,63 @@
+# 瀵煎叆涓庣敓鎴愭ā鍧椾綋妫�闂娓呭崟锛�2026-09-02锛�
+
+> 鏂瑰紡锛氶潤鎬佷唬鐮佸鏌� + 鏁版嵁搴撳彧璇绘牳瀵癸紙鏈姩妯℃澘銆佹湭閲嶅惎鍚庣锛夈�傛ā鏉挎枃浠舵鍦ㄧ敱鍙︿竴浼氳瘽淇敼锛屾秹鍙婃ā鏉胯仈鍔ㄧ殑闂鏍囨敞銆愬崗浣溿�戙��
+> 鐘舵�佸惈涔夛細P0=浼氶�犳垚瀵煎嚭/瀵煎叆鐩存帴澶辫触鎴栨暟鎹潤榛橀敊璇紱P1=杩濆弽闇�姹傦紙琛屽彿鎻愮ず/鍙拷婧級鎴栧鑷存姤琛ㄥ唴瀹规畫缂猴紱P2=浣撻獙/涓�鑷存��/娼滃湪璇垹銆�
+
+## 涓�銆丳0锛堜細鐩存帴鎸傛垨鏁版嵁闈欓粯閿欙級
+
+### 1.銆愬崗浣溿�戝煄甯傚杩� 6 寮犲鍑虹殑妯℃澘鏂囦欢宸茶鍒犻櫎锛屼唬鐮佸紩鐢ㄦ湭鍚屾
+- 璇佹嵁锛歚docs/鍩庡競瀹㈣繍/瀵煎叆妯℃澘_鍩庡競鍏氦.xlsx`銆乣瀵煎叆妯℃澘_宸℃父鍑虹.xlsx`銆乣瀵煎叆妯℃澘_杞ㄩ亾銆佽疆娓�.xlsx`銆乣瀵煎叆妯℃澘_鍩庡競鍒嗗競宸�.xlsx`銆乣瀵煎叆妯℃澘_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx`銆乣瀵煎叆妯℃澘_鍩庡競姹囨��.xlsx` 宸茶鍙︿竴浼氳瘽鍒犻櫎锛坓it 鏄剧ず D锛夛紝鎹㈡垚 `鐢熸垚_*.xlsx` 绯诲垪銆�
+- 褰卞搷锛歚ReportExportService.java` 浠嶇‖缂栫爜璇诲彇涓婅堪 6 涓枃浠跺悕锛坄resolveTemplate("docs/鍩庡競瀹㈣繍")`锛夛紝鏂囦欢涓嶅瓨鍦ㄦ椂瀵煎嚭鎶涒�滄湭鎵惧埌妯℃澘鏂囦欢鈥濃啋 cityBusDetail/cityTaxiDetail/cityRailFerryDetail/cityPassengerCitySum/cityPassengerDetailSum/cityPassengerSummary 閲嶅惎鍚庡繀 500銆�
+- 澶勭疆锛氭ā鏉夸細璇濆畾绋挎椂鎶婁唬鐮佸紩鐢ㄥ悓姝ヤ负鏂扮殑 `鐢熸垚_*.xlsx`锛堟垨鎭㈠鏃ф枃浠讹級锛屾湰浼氳瘽涓嶉噸澶嶆敼锛涘畾绋垮悗璺� v2 鍥炲綊銆�
+
+### 2. 鏁板�艰В鏋愰潪娉曟枃鏈潤榛樼疆 0锛坓etDecimal/getInt锛�
+- 璇佹嵁锛歚DataImportService.getDecimal()` 鎹曡幏 `NumberFormatException` 鍚庤繑鍥� `0.0`锛沗getInt()` 鍐嶅彇 intValue銆傝繍鏀胯溅杈�/杞ㄨ抗閲岀▼/瑙勪笂瑙勪笅/璐ц繍閲忓懆杞噺绛夊ぇ閲忚蛋 `gd()/gi()`銆�
+- 褰卞搷锛氭簮鏂囦欢鏌愭牸涓洪潪鏁板瓧鏂囨湰锛堝鈥滄湭濉�濃�溾�斺�濓級鏃朵笉鎶ラ敊銆佹棤琛屽彿锛岀洿鎺ュ叆搴� 0锛宻uccess 鐓ц 鈫� 鎶ヨ〃鏁板瓧鎮勬倓閿欙紝杩濊儗鈥滃鍏ュけ璐ユ樉绀鸿鍙封�濈殑瑕佹眰銆�
+- 澶勭疆寤鸿锛氶潪绌轰笖闈炴暟瀛楃殑鍗曞厓鏍兼寜鈥滃け璐ヨ + 琛屽彿 + 鍘熷洜鈥濊褰曪紙涓� H2032/H204 鐨� failDetails 涓�鑷达級锛岃�屼笉鏄潤榛� 0銆�
+
+## 浜屻�丳1
+
+### 3. 6 绫诲鍏ュけ璐ヤ笉璁拌鍙�/鍘熷洜锛坋rrorDetail=null锛�
+- 鑼冨洿锛歍RANSPORT_AUTH銆乀RACK_MILEAGE銆丼CALE_SPLIT銆丗REIGHT_TURNOVER銆両NVEST_SYSTEM銆丆ITY_TAXI_AUTH銆�
+- 璇佹嵁锛歚recordBatch(..., null)`锛涘け璐ヤ粎鍦ㄦ彃鍏� try/catch 涓� `failRows++`銆�
+- 褰卞搷锛氶〉闈⑩�滃鍏ョ粨鏋溾�濆彧鑳界湅鍒扳�滃け璐� N 鏉♀�濓紝鏃犲け璐ヤ綅缃�/鍘熷洜锛堝墠绔厹搴曟樉绀衡�滆鎵规鏃犲け璐ユ槑缁嗏�濓級銆�
+- 澶勭疆寤鸿锛氫笌 H2032/H2031/H204 瀵归綈锛屾敹闆嗚鍙�+浼佷笟鍚�/杞︾墝+鍘熷洜锛汣ITY_TAXI_AUTH 42636 琛屽垎鎵规彃鍏ュ挨鍏堕渶瑕佽绾уけ璐ユ敹闆嗐��
+
+### 4. import_batch_id 浠庢湭鍥炲~锛堟壒娆′笌涓氬姟鏁版嵁鏂摼锛�
+- 璇佹嵁锛歚freight_turnover_import` 18/18銆乣scale_split_transport` 36/36銆乣h2032_enterprise_monthly` 2026 骞� 5088/5088 琛� `import_batch_id` 鍏� NULL锛涗唬鐮佷腑鏃犱换浣� `setImportBatchId` 璋冪敤銆�
+- 褰卞搷锛氭棤娉曞洖绛斺�滆繖鎵规暟鎹潵鑷摢涓枃浠�/鍝瀵煎叆鈥濓紝鏃犳硶鎸夋壒娆¤拷婧笌鍥炴粴锛涙姤琛ㄦ牳瀵瑰彧鑳介潬 import_type+report_period 闂存帴鐚溿��
+- 澶勭疆寤鸿锛歚recordBatch()` 杩斿洖鎵规 id锛屽鍏ユ柟娉曟寜鏈熷洖濉埌涓氬姟琛紙琛ㄧ粨鏋勫凡鍏峰璇ュ垪锛夈��
+
+### 5. 鏈堝害/鍩烘湡鏁版嵁缂哄彛锛堝喅瀹氭姤琛ㄥ畬鏁村害锛岄潪浠g爜缂洪櫡锛�
+- 璇佹嵁锛歚city_bus_monthly`/`city_taxi_monthly` 浠� 2026-06銆�07锛�142/17 琛岋級锛沗h2031_enterprise_monthly` 浠� 2026-03銆�07锛�778/771锛夛紱2025 鍩烘湡鍏ㄥ簱鏃犲煄甯傚杩�/鍏矾鏃呭鏈堝害鏁版嵁銆�
+- 褰卞搷锛氬煄甯傚杩� 1-5 鏈堝垪绌恒�佸悓姣斿垪鍏ㄧ┖锛堝幓骞村熀鏈熺己澶憋級锛宍#REF!` 鍚屾瘮鍏紡鍙兘琚�滄竻绌衡�濆鐞嗭紱涓彛寰�/鍏矾鏃呭鎶ヨ〃澶氭暟鏈堜唤鏃犳暟鎹�傚厛琛ユ暟鎹紝鎶ヨ〃鎵嶆湁鎰忎箟銆�
+- 澶勭疆锛氬煄甯傚杩愭湀搴︼紙U203/U402锛変笌杞ㄩ亾/杞浮 2026 骞� 1-5 鏈堛��8 鏈堚�︽寜婧愭枃浠惰ˉ瀵硷紱鍏矾鏃呭 H2031 琛� 1/2/4/5/6/8 鏈堬紱鍘诲勾鍚屾湡锛�2025 鎴� 2025 鍚屾湡锛夋暟鎹ˉ瀵煎悗鍚屾瘮鑷姩鏈夊�硷紙闇�纭琛ㄧ粨鏋勬敮鎸佸幓骞村垪锛夈��
+
+## 涓夈�丳2
+
+### 6. 鍓嶇鈥滃鍏ヨ繘搴︹�濇槗璇樉绀衡�滄棤鏁版嵁鈥濓紝澶ф枃浠舵棤瀹炴椂杩涘害
+- 璇佹嵁锛歚DataImport.vue loadData()` 鐨� overview 鍙�**姣忎釜绫诲瀷鏈�鏂颁竴鏉℃壒娆�**锛涚┖鎵规锛�0 琛岋紝#177-179/#186 绛夛級浼氳鐩栨樉绀轰负鈥滄棤鏁版嵁鈥濓紱鎵规琛ㄥ彧灞曠ず 50 鏉°�佹棤鍒嗛〉锛涘崟鏂囦欢瀵煎叆浠� `status='uploading'`锛屾棤鐧惧垎姣旓紙42636 琛� 20-40 绉掑叏绋嬫棤鍙嶉锛屼綋鎰熲�滃崱姝�/鏃犺繘搴︹�濓級銆�
+- 澶勭疆寤鸿锛氣憼 overview 缁熻鏀逛负鈥滃悓绫诲瀷鏈�杩戜竴娆� total>0 鐨勬壒娆♀�濇垨鍚堣锛涒憽 鎵规鍒楄〃鍒嗛〉锛涒憿 澶ф枃浠剁粰闃舵鎻愮ず鎴栬疆璇㈣繘搴︼紱鈶� 瑙f瀽鍒� 0 琛岀殑鏂囦欢鏄庣‘鎻愮ず鈥滄枃浠舵棤鏈夋晥鏁版嵁琛屸�濊�岄潪闈欓粯鎴愬姛鎵规銆�
+
+### 7. 鍓嶇鈥滃勾鎶モ�濆垎缁� 11 涓被鍨嬪悗绔棤瀹炵幇
+- 璇佹嵁锛歚DataImport.vue groups` 鍚� annualCompanyBasic/annualEnterpriseFinance/鈥� 11 椤癸紱鍚庣 `DataImportService` switch 涓� Controller 鍧囨棤 annual* 鏀寔銆�
+- 澶勭疆锛氳涔堜粠椤甸潰绉婚櫎/绂佺敤锛堟湭寮�鏀撅級锛岃涔堣ˉ瀹炵幇锛涘惁鍒欑敤鎴风偣鍑诲嵆鈥滀笉鏀寔鐨勫鍏ョ被鍨嬧�濄��
+
+### 8. 杩愭斂杞﹁締/杞ㄨ抗閲岀▼骞傜瓑鍒犻櫎瀹℃牳缁撴灉鑼冨洿杩囧锛堟綔鍦ㄨ鍒狅級
+- 璇佹嵁锛歚importTransportAuth/importTrackMileage` 骞傜瓑澶勭洿鎺� `auditResultMapper.delete(reportPeriod=period)`锛堟湭鎸夎鍒� reportType 杩囨护锛夛紝鍏跺畠绫诲瀷鍧囪蛋 `deleteRuleResults(绫诲瀷,period)`銆�
+- 褰卞搷锛氬悓鎶ヨ〃鏈熻嫢鍏跺畠绫诲瀷宸插畬鎴愬鏍革紝鍐嶅杩愭斂杞﹁締浼氳繛甯︽竻鎺夊綋鏈堝叾瀹冪被鍨嬪鏍哥粨鏋滐紙褰撳墠澶氫负娴嬭瘯鏈熷奖鍝嶅皬锛夈��
+- 澶勭疆寤鸿锛氫笌鍏跺畠绫诲瀷缁熶竴涓烘寜 reportType 鐨勮鍒� id 鍒犻櫎銆�
+
+### 9. 鐢熸垚渚фā鏉胯仈鍔ㄩ闄╃偣锛堜緵妯℃澘浼氳瘽瀵圭収锛屽嬁閬楁紡锛�
+- 鎺掑悕妯℃澘锛氭爣棰樺啓姝� `row0/row22`銆佹暟鎹潡浠� `row3/row25` 璧凤紙freightRank/turnoverRank锛夆啋 澧炲垹琛屼細閿欎綅銆�
+- 璐ц繍鍒嗗競宸炴槑缁嗭細鏁版嵁鍖轰粠 0-based row4 璧凤紝鎸夆�滅渷 6 鎸囨爣 + 17 甯傚窞脳6 鎸囨爣鈥濊繛缁啓 108 琛屻��
+- 鑳借�楁眹鎬伙細鍏嬮殕鍩虹 sheet 鍚庢寜 0-based row2..7 鍐� 6 绉嶇噧鏂欙紙鏌存补/姹芥补/鈥�/鐕冩枡鐢垫睜锛夛紝D/J/L/M 涓哄叕寮忓垪涓嶅姩銆�
+- 涓彛寰勬槑缁嗭細Sheet1 鎸� 琛� 5..94/99..188 浜旀寮忓畾浣嶏紱Sheet2 鍘诲勾鏄庣粏椤垫畫鐣� #REF! 闇�闅忔ā鏉夸慨姝i噸鏂扮‘璁ゃ��
+- 鍩庡競瀹㈣繍锛氭暟鎹尯 鈮�75 琛屽畧鍗紱琛ㄥご鏈堜唤鈥滃湴鍖衡�濊瀹氫綅锛堝墠 20 琛岋級锛涘幓骞村垪浠� 19 璧锋瘡 2 鍒椼��
+- 鍏紡澶勭疆绾﹀畾锛氳法绨�/璺ㄨ〃姹備笉鍑哄�肩殑鍏紡鍙竻绌虹粨鏋滐紙涓嶅垹鍏紡鏂囨湰銆佷笉鏀瑰垪鍚嶏級鈥斺�旀ā鏉胯嫢鎶� #REF! 鏀逛负鐪熷疄寮曠敤锛岄渶鍚屾纭浠g爜鍐欑殑鍒椾綅缃竴鑷淬��
+
+## 鍥涖�佺粨璁�
+- 浠婃棩宸查獙璇佺殑瀵煎叆涓夐摼涓� 22 鎶ヨ〃缁撹浠嶆湁鏁堬紝浣�**鍩庡競瀹㈣繍 6 寮犲鍑轰緷璧栫殑妯℃澘鏂囦欢宸蹭笉鍦�**锛屾ā鏉夸細璇濆畾绋垮悗蹇呴』鍋氬紩鐢ㄥ悓姝� + v2 鍥炲綊锛堣剼鏈凡鐣欐。 outputs/report_check锛夈��
+- 浠g爜灞備紭鍏堜慨锛氶潪娉曟暟鍊奸潤榛� 0锛圥0-2锛夈�佸け璐ヨ鍙疯ˉ榻愶紙P1-3锛夈�佹壒娆� id 鍥炲~锛圥1-4锛夈�佽繍鏀�/杞ㄨ抗瀹℃牳缁撴灉璇垹鑼冨洿锛圥2-8锛夈��
+- 鏁版嵁灞備紭鍏堣ˉ锛氬煄甯傚杩� 1-5 鏈堜笌鍏矾鏃呭缂烘湀銆�2025 鍩烘湡锛圥1-5锛夆�斺�旇繖鏄姤琛ㄢ�滄湀鍒楃┖/鍚屾瘮绌衡�濈殑鏍瑰洜銆�
+- 鍓嶇浣撻獙锛氳繘搴﹀睍绀猴紙P2-6锛夈�佸勾鎶ュ叆鍙o紙P2-7锛夈��
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\237\216\345\270\202\345\256\242\350\277\220\346\225\260\346\215\256\344\274\230\345\214\226.docx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\237\216\345\270\202\345\256\242\350\277\220\346\225\260\346\215\256\344\274\230\345\214\226.docx"
index 8b15a4c..934f03c 100644
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\237\216\345\270\202\345\256\242\350\277\220\346\225\260\346\215\256\344\274\230\345\214\226.docx"
+++ "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\237\216\345\270\202\345\256\242\350\277\220\346\225\260\346\215\256\344\274\230\345\214\226.docx"
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\256\242\350\277\220\347\256\200\345\214\226.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\256\242\350\277\220\347\256\200\345\214\226.xlsx"
index f214984..adfe258 100644
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\256\242\350\277\220\347\256\200\345\214\226.xlsx"
+++ "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\256\242\350\277\220\347\256\200\345\214\226.xlsx"
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\345\205\254\344\272\244.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\345\205\254\344\272\244.xlsx"
deleted file mode 100644
index d482f29..0000000
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\345\205\254\344\272\244.xlsx"
+++ /dev/null
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\345\210\206\345\270\202\345\267\236.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\345\210\206\345\270\202\345\267\236.xlsx"
deleted file mode 100644
index 0c7c749..0000000
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\345\210\206\345\270\202\345\267\236.xlsx"
+++ /dev/null
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\345\256\242\350\277\220\345\220\204\345\270\202\345\267\236\346\230\216\347\273\206\350\241\250.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\345\256\242\350\277\220\345\220\204\345\270\202\345\267\236\346\230\216\347\273\206\350\241\250.xlsx"
deleted file mode 100644
index ab29de6..0000000
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\345\256\242\350\277\220\345\220\204\345\270\202\345\267\236\346\230\216\347\273\206\350\241\250.xlsx"
+++ /dev/null
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\346\261\207\346\200\273.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\346\261\207\346\200\273.xlsx"
deleted file mode 100644
index cf67b43..0000000
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\237\216\345\270\202\346\261\207\346\200\273.xlsx"
+++ /dev/null
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\267\241\346\270\270\345\207\272\347\247\237.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\267\241\346\270\270\345\207\272\347\247\237.xlsx"
deleted file mode 100644
index e995990..0000000
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\345\267\241\346\270\270\345\207\272\347\247\237.xlsx"
+++ /dev/null
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\350\275\250\351\201\223\343\200\201\350\275\256\346\270\241.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\350\275\250\351\201\223\343\200\201\350\275\256\346\270\241.xlsx"
deleted file mode 100644
index 14bee3d..0000000
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\345\257\274\345\205\245\346\250\241\346\235\277_\350\275\250\351\201\223\343\200\201\350\275\256\346\270\241.xlsx"
+++ /dev/null
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\345\220\204\345\270\202\345\267\236\346\230\216\347\273\206\350\241\250.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\345\220\204\345\270\202\345\267\236\346\230\216\347\273\206\350\241\250.xlsx"
index ab29de6..efbf925 100644
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\345\220\204\345\270\202\345\267\236\346\230\216\347\273\206\350\241\250.xlsx"
+++ "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\345\220\204\345\270\202\345\267\236\346\230\216\347\273\206\350\241\250.xlsx"
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\345\256\242\350\277\220\351\207\217\345\210\206\345\270\202\345\267\236\347\264\257\350\256\241.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\345\256\242\350\277\220\351\207\217\345\210\206\345\270\202\345\267\236\347\264\257\350\256\241.xlsx"
index 0c7c749..8a23731 100644
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\345\256\242\350\277\220\351\207\217\345\210\206\345\270\202\345\267\236\347\264\257\350\256\241.xlsx"
+++ "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\345\256\242\350\277\220\351\207\217\345\210\206\345\270\202\345\267\236\347\264\257\350\256\241.xlsx"
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\346\261\207\346\200\273.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\346\261\207\346\200\273.xlsx"
index cf67b43..b272b14 100644
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\346\261\207\346\200\273.xlsx"
+++ "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\345\237\216\345\270\202\345\256\242\350\277\220\346\261\207\346\200\273.xlsx"
Binary files differ
diff --git "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\350\275\250\351\201\223\350\275\256\346\270\241\345\256\242\350\277\220\351\207\217\345\210\206\345\270\202\345\267\236\346\230\216\347\273\206.xlsx" "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\350\275\250\351\201\223\350\275\256\346\270\241\345\256\242\350\277\220\351\207\217\345\210\206\345\270\202\345\267\236\346\230\216\347\273\206.xlsx"
index 14bee3d..c68dc09 100644
--- "a/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\350\275\250\351\201\223\350\275\256\346\270\241\345\256\242\350\277\220\351\207\217\345\210\206\345\270\202\345\267\236\346\230\216\347\273\206.xlsx"
+++ "b/docs/\345\237\216\345\270\202\345\256\242\350\277\220/\347\224\237\346\210\220_\350\275\250\351\201\223\350\275\256\346\270\241\345\256\242\350\277\220\351\207\217\345\210\206\345\270\202\345\267\236\346\230\216\347\273\206.xlsx"
Binary files differ
diff --git "a/docs/\345\257\274\345\205\245\345\212\237\350\203\275\344\275\223\346\243\200\346\212\245\345\221\212.md" "b/docs/\345\257\274\345\205\245\345\212\237\350\203\275\344\275\223\346\243\200\346\212\245\345\221\212.md"
new file mode 100644
index 0000000..91ddaef
--- /dev/null
+++ "b/docs/\345\257\274\345\205\245\345\212\237\350\203\275\344\275\223\346\243\200\346\212\245\345\221\212.md"
@@ -0,0 +1,75 @@
+# 瀵煎叆鍔熻兘浣撴鎶ュ憡锛�2026-09-02 寮�濮嬶級
+
+> 鐩殑锛氶�愮被鍨嬮獙璇�"瑙f瀽鍣ㄥ垪浣� 鈫� 瀹樻柟妯℃澘 鈫� 瀹炴祴瀵煎叆鏁版嵁"涓夎�呬竴鑷达紝娑堥櫎"鍏朵粬绫诲瀷浼氫笉浼氬儚鑳借�椾竴鏍峰嚭闂"鐨勭枒铏戙��
+> 鏂规硶锛氣憼闈欐�佸姣旇В鏋愬櫒鍒椾綅涓庡畼鏂规ā鏉胯〃澶� 鈫� 鈶$敤鐪熷疄妯℃澘鏂囦欢瀹炴祴瀵煎叆锛堟祴璇曟姤琛ㄦ湡锛夆啋 鈶㈡娊鏌ュ叆搴撴暟鎹笌婧愭枃浠堕�愰」瀵归綈 鈫� 鈶h褰曠己鍙c��
+
+## 缁撹鎬昏
+
+| 绫诲瀷 | 瑙f瀽鏂瑰紡 | 瀹炴祴 | 缁撹 | 椋庨櫓鐐� |
+|---|---|---|---|---|
+| 鑳借�� H204 瀛f姤 | 鍥哄畾鍒椾綅(18鍒�/缁�) | 7/8/9鏈堝悇1284鏉� 0澶辫触 | 鉁� 宸蹭慨澶�+鍒椾綅鏍¢獙 | 瀹樻柟鏍煎紡(15鍒�/缁�)鏆備笉鏀寔锛岄渶杞ā鏉� |
+| 鎶曡祫锛堝杩愮珯鍦�/鐗╂祦鍥尯锛� | 鍥哄畾鍒椾綅+甯傚窞鏍¢獙 | 6/7鏈堢湡瀹炴枃浠讹紙瀹㈣繍46+鐗╂祦133銆佸熀鍑�148锛� | 鉁� 鍘嗗彶浼氳瘽宸插ぇ閲忓疄娴� | 鍗曡〃"鍏ㄧ渷姹囨�诲ぇ琛�"璺緞寰呭鏍� |
+| 鍩庡競鍏氦 U203 | 鍥哄畾鍒椾綅(0-67) | 2026-04锛�142鏉� 0澶辫触锛涢敊浣嶆枃浠惰鎷� | 鉁� 宸插姞鍒椾綅鏍¢獙 | 鍒楅『搴忓彉鍖栦笉鏀寔锛堟嫆缁濊�岄潪瀵奸敊锛� |
+| 宸℃父鍑虹 U402 | 鍥哄畾鍒椾綅(0-40) | 2026-04锛�17鏉� 0澶辫触锛涢敊浣嶆枃浠惰鎷� | 鉁� 宸插姞鍒椾綅鏍¢獙 | 鍚屼笂 |
+| H2032 璐ц繍鏈堟姤 | 琛ㄥご鍚嶇О鏄犲皠 | 18涓湀涓�鑷存�ф牳瀵归�氳繃 | 鉁� 瀹夊叏 | 鈥� |
+| 鍏矾鏃呭鏈堟姤 H2031 | 琛ㄥご鍚嶇О鏄犲皠 | 7鏈堣ˉ瀵煎叆46鏉� | 鉁� 瀹夊叏 | 鈥� |
+| 杩愭斂杞﹁締 | 琛ㄥご鍚嶇О鏄犲皠锛堟湰娆℃敼閫狅級 | 妯℃澘2琛屸渽 鍒楀簭鎵撲贡鉁� 缂哄垪鎶ラ敊鉁� | 鉁� 涓庤揣杩愭湀鎶ュ悓鏂瑰紡 | 寤鸿鐪熷疄澶ф枃浠跺洖褰� |
+| 杞ㄨ抗閲岀▼ | 琛ㄥご鍚嶇О鏄犲皠锛堟湰娆℃敼閫狅級 | 妯℃澘2琛屸渽 鍒楀簭鎵撲贡鉁� 缂哄垪鎶ラ敊鉁� | 鉁� 涓庤揣杩愭湀鎶ュ悓鏂瑰紡 | 鍚屼笂 |
+| 鎶曡祫绯荤粺瀵煎嚭 | 鍥哄畾鍒椾綅(8鍒�) | 琛ㄥご鏍¢獙姝�/璐熺敤渚嬮�氳繃 | 鉁� 宸插姞鍒椾綅鏍¢獙 | 鍒椾綅鍥哄畾锛岄敊浣嶆嫆缁� |
+| 璐ц繍閲忓懆杞噺 | 鐗规畩甯冨眬(甯傚窞琛�+宸﹀彸骞存) | 2026-06锛�18鏉� 0澶辫触锛涢敊绫诲瀷鏂囦欢琚嫆 | 鉁� 宸茶ˉ琛ㄥご鏍¢獙 | 鍒楁暟闅忔湀浠藉彉鍖栵紝闈犻鍒楀競宸�+琛ㄥご璇嗗埆 |
+| 瑙勪笂瑙勪笅鎷嗗垎 | 鐗规畩甯冨眬(sheet鍚�+瀛愯〃澶�) | 2026-06锛�36鏉� 0澶辫触锛涢敊甯冨眬琚嫆 | 鉁� 宸茶ˉsheet甯冨眬鏍¢獙 | 渚濊禆sheet鍚嶅惈 褰撴湀/绱 |
+| 鍏矾鏃呭杩愭斂杞﹁締鏁� | 琛ㄥご鍚嶇О鏄犲皠 | 2026-06锛�767鏉� 0澶辫触 | 鉁� | 鈥� |
+| 涓綋瀹㈣繍閲� | 琛ㄥご鍚嶇О鏄犲皠 | 琛ㄥご璇嗗埆閫氳繃锛堟ā鏉夸粎琛ㄥご锛� | 鉁� | 鈥� |
+| 鍑虹杞﹁繍鏀胯溅杈� | 鍥哄畾鍒椾綅(0-20) | 琛ㄥご璇嗗埆閫氳繃锛堟ā鏉夸粎琛ㄥご锛� | 鉁� 宸叉湁杞︾墝鍏抽敭瀛楁牎楠� | 鐪熷疄4.2涓囪寤鸿鍥炲綊 |
+
+## 宸叉祴鏄庣粏
+
+### 鍩庡競鍏氦锛圲203 浜や紒缁� 2026骞�7鏈堟枃浠讹級
+- 瀵煎叆娴嬭瘯鎶ヨ〃鏈� 2026-04锛氭垚鍔� 142 鏉★紝澶辫触 0 鏉°��
+- 鎶芥煡锛氭姹変袱姹熻疆娓℃湁闄愯矗浠诲叕鍙� 鈫� 杩愯惀杞︽暟 0 / 瀹㈣繍閲� 0 / 濉〃浜� 浣欑 / 鐢佃瘽 15802725070锛屼笌婧愭枃浠堕�愰」涓�鑷� 鉁�
+
+### 宸℃父鍑虹锛圲402 浜よ缁� 2026鏂囦欢锛�
+- 瀵煎叆娴嬭瘯鎶ヨ〃鏈� 2026-04锛氭垚鍔� 17 鏉★紝澶辫触 0 鏉°��
+- 鎶芥煡锛氭姹夊競 鈫� 杞藉杞︽ 729.27 / 瀹㈣繍閲� 1093.91 / 濉〃浜� 鍒樻壃 / 鐢佃瘽 02768820261锛屼笌婧愭枃浠朵竴鑷� 鉁�
+
+### 杩愭斂杞﹁締锛坉ocs/璐ц繍/妯℃澘_杩愭斂杞﹁締.xlsx锛�
+- 鏈宸蹭粠"鍥哄畾鍒椾綅"鏀逛负"琛ㄥご鍚嶇О鏄犲皠"锛堜笌 H2032 璐ц繍鏈堟姤涓�鑷达級锛屽繀闇� 6 鍒楋細浼佷笟鍚嶇О/鎬荤壍寮曡溅鏁�/鎬绘寕杞︽暟/鍏跺畠杞﹁締鏁�/鎸傝溅鎬诲惃浣�(鍚�)/鍏跺畠杞﹁締鎬诲惃浣�(鍚�)銆�
+- 瀹炴祴锛堟祴璇曟姤琛ㄦ湡 2026-HT锛屾祴鍚庡凡娓呯悊锛夛細妯℃澘鍓� 2 琛屽鍏ユ垚鍔� 2 鏉★紱**鍒楅『搴忔墦涔卞悗浠嶆垚鍔熷鍏� 2 鏉�**锛屽叆搴撳瓧娈典笌妯℃澘閫愰」涓�鑷达紙瀹夊悏姹借溅鐗╂祦锛氱壍寮� 0/鎸� 96/鍏跺畠 96/鎸傝溅鍚ㄤ綅 1057.708/鍏跺畠鍚ㄤ綅 871.56锛夛紱鍒犻櫎銆屾寕杞︽�诲惃浣�(鍚�)銆嶅垪 鈫� 鎶�"琛ㄥご缂哄皯蹇呴渶鍒�"銆�
+
+### 杞ㄨ抗閲岀▼锛坉ocs/璐ц繍/妯℃澘_杞ㄨ抗閲岀▼.xlsx锛�
+- 鏈宸蹭粠"鍥哄畾鍒椾綅"鏀逛负"琛ㄥご鍚嶇О鏄犲皠"锛屽繀闇� 3 鍒楋細浼佷笟鍚嶇О/鏈堝害鎬婚噷绋�(鍏噷)/鏈夐噷绋嬬殑杞﹁締鏁般��
+- 瀹炴祴锛氭ā鏉垮墠 2 琛屽鍏ユ垚鍔� 2 鏉★紱鍒楅『搴忔墦涔卞悗浠嶆垚鍔� 2 鏉★紝鍏ュ簱涓�鑷达紙婀栧寳涓崌杩愯緭锛�150427.03/29锛夛紱鍒楀悕鏀广�屾湀搴﹂噷绋�(鍏噷)銆嶁啋 鎶�"琛ㄥご缂哄皯蹇呴渶鍒�"銆�
+
+### 鍥哄畾鍒椾綅妯″潡"鍒椾綅鏍¢獙"璐熷悜鐢ㄤ緥锛�2026-09-02锛�
+- 鍩庡競鍏氦锛氳〃澶寸 6 鍒楁彃銆岄敊浣嶅垪銆嶁啋 鎷掔粷锛�"绗� 6 鍒楀簲涓恒�屽叕鍏辨苯鐢佃溅_杩愯惀杞︽暟銆嶏紝瀹為檯涓恒�岄敊浣嶅垪銆�"銆�
+- 宸℃父鍑虹锛氳〃澶寸 5 鍒楁彃銆岄敊浣嶅垪銆嶁啋 鎷掔粷锛�"绗� 5 鍒楀簲涓恒�岃浇瀹㈣溅娆℃�绘暟銆嶏紝瀹為檯涓恒�岄敊浣嶅垪銆�"銆�
+- 鎶曡祫绯荤粺瀵煎嚭锛氱 1 鍒椼�岃鍙枫�嶆敼銆屽簭鍙枫�嶁啋 鎷掔粷锛�"绗� 1 鍒楀簲涓恒�岃鍙枫�嶏紝瀹為檯涓恒�屽簭鍙枫��"銆�
+
+### 璐ц繍閲忓懆杞噺 / 瑙勪笂瑙勪笅鎷嗗垎锛坉ocs/璐ц繍锛屾祴璇曟湡 2026-06锛屾祴鍚庡凡娓呯悊锛�
+- 璐ц繍閲忓懆杞噺锛�18 鏉� 0 澶辫触锛涙娊鏌ユ姹夊競 1鏈�=5367.97597銆�6鏈�=5041.04224銆佸幓骞�1鏈�=4656.86022锛屼笌妯℃澘閫愰」涓�鑷� 鉁�
+- 瑙勪笂瑙勪笅鎷嗗垎锛�36 鏉★紙褰撴湀+绱鍚� 18 涓競宸烇級0 澶辫触锛涙娊鏌ユ姹夊競褰撴湀 瑙勪笂=241659.5295/瑙勪笅=445444.355/鍚堣=687103.884锛岀疮璁″垪涓�鑷� 鉁�
+- 宸茶ˉ鏍¢獙锛�2026-09-02锛夛細璐ц繍閲忓懆杞噺妫�鏌ヨ〃澶淬�岃揣杩愰噺(涓囧惃)/1鏈堚�︺�嶏紱瑙勪笂瑙勪笅妫�鏌� sheet 绗�2琛屻�屽競宸�/瑙勪笂浼佷笟杩愯緭閲忋��+ 绗�3琛屻�屽懆杞噺/璐ц繍閲忋�嶅瓙琛ㄥご銆傝礋鍚戠敤渚嬶紙閿欑被鍨嬫枃浠�/閿欏竷灞� sheet锛夊潎琚槑纭嫆缁� 鉁�
+
+### 鍏矾鏃呭杩愭斂杞﹁締鏁� / 涓綋瀹㈣繍閲忥紙docs/鍏矾鏃呭锛屾祴璇曟湡 2026-06锛屾祴鍚庡凡娓呯悊锛�
+- 杩愭斂杞﹁締鏁帮紙妯℃澘_鍏矾鏃呭杩愭斂杞﹁締鏁�.xlsx锛夛細767 鏉� 0 澶辫触锛岃〃澶村悕绉版槧灏� 鉁�
+- 涓綋瀹㈣繍閲忥紙涓綋瀹㈣繍閲忔眹鎬�.xlsx锛屼粎琛ㄥご鏃犳暟鎹锛夛細琛ㄥご璇嗗埆閫氳繃锛屽鍏� 0 鏉� 鉁�
+
+### 鍑虹杞﹁繍鏀胯溅杈嗭紙docs/鍩庡競瀹㈣繍锛屾祴璇曟湡 2026-06锛屾祴鍚庡凡娓呯悊锛�
+- 瀵煎叆妯℃澘_鍑虹杞︿俊鎭�(杩愭斂杞﹁締淇℃伅).xlsx 浠呰〃澶存棤鏁版嵁琛岋細琛ㄥご璇嗗埆閫氳繃锛堝惈"杞︾墝"鍏抽敭瀛楁牎楠岋級锛屽鍏� 0 鏉� 鉁�
+- 2026-08 宸叉湁鐪熷疄 42636 鏉″巻鍙插鍏ユ暟鎹紝鏈疆鏈Е纰般��
+
+## 寰呮祴娓呭崟锛堜笅涓�姝ワ級
+- 鍏ㄩ儴绫诲瀷宸插疄娴嬪畬姣曘�傚墿浣欏缓璁」锛�
+  1. 鍑虹杞﹁繍鏀� 4.2 涓囪鐪熷疄澶ф枃浠跺洖褰掞紙姝ゅ墠鍘嗗彶瀵煎叆 42636 鏉★紝妯℃澘鏃犳暟鎹鏃犳硶鐢ㄦā鏉垮疄娴嬶級銆�
+
+## 寤鸿锛堟寜浼樺厛绾э級
+1. 鉁� 宸插畬鎴愶細鍥哄畾鍒椾綅绫诲瀷琛�"琛ㄥご鍒椾綅鏍¢獙"锛堣兘鑰�/鍏氦/鍑虹/鎶曡祫绯荤粺瀵煎嚭锛夛紱杩愭斂杞﹁締/杞ㄨ抗閲岀▼鏀逛负"琛ㄥご鍚嶇О鏄犲皠"锛堜笌璐ц繍鏈堟姤涓�鑷达級銆�
+2. 鉁� 宸插畬鎴愶細璐ц繍閲忓懆杞噺/瑙勪笂瑙勪笅琛ヨ〃澶存牎楠岋紝鎵�鏈夊鍏ョ被鍨嬬幇鍦ㄩ兘鏈夌被鍨嬭瘑鍒�/鏍¢獙鍏滃簳銆�
+3. 骞跺彂浜掓枼閿侊細鎸夐渶锛堣兘鑰楀凡鏈夛紱鍏朵粬绫诲瀷鍓嶇宸查槻杩炵偣锛夈��
+4. 瀹樻柟鑳借�楁牸寮忥紙15鍒�/缁勶級瑙f瀽锛氬緟涓氬姟纭鍚庡疄鐜帮紝鏇夸唬杞崲鑴氭湰銆�
+5. 杩愭斂杞﹁締/杞ㄨ抗閲岀▼瑙f瀽鏂瑰紡宸插彉鈥斺�斿缓璁敤鎴锋嬁鐪熷疄鏈堝害澶ф枃浠跺洖褰掍竴娆★紙鍒楅『搴忎笌妯℃澘涓�鑷存椂缁撴灉涓庢棫閫昏緫瀹屽叏鐩稿悓锛夈��
+
+## 娴嬭瘯鏁版嵁璇存槑
+- 2026-04 鎶ヨ〃鏈熺幇鏈夊煄甯傚叕浜� 142 鏉°�佸贰娓稿嚭绉� 17 鏉′负鏈浣撴娴嬭瘯鏁版嵁锛岄潪鐪熷疄鏁版嵁锛堝緟娓呯悊锛夈��
+- 2026-09-02 鏂板鐨� 2026-HT 娴嬭瘯鏈熸暟鎹紙杩愭斂/杞ㄨ抗鍚� 2 鏉� + 瀵煎叆缁撴灉璁板綍锛夊凡娓呯悊瀹屾瘯銆�
+- 2026-06 娴嬭瘯鏈熸暟鎹紙璐ц繍閲� 18 / 瑙勪笂瑙勪笅 36 / 鏃呭杩愭斂 767 + 瀵煎叆缁撴灉璁板綍锛夊凡娓呯悊瀹屾瘯锛屾湭瑙︾ 2026-07/08 鐪熷疄鏁版嵁銆�
diff --git "a/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-02.md" "b/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-02.md"
new file mode 100644
index 0000000..45f0157
--- /dev/null
+++ "b/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-02.md"
@@ -0,0 +1,55 @@
+# 宸ヤ綔鏃ョ粨_2026-09-02
+
+## 浠婃棩宸ヤ綔
+1. **鑳借�楀鍏ヤ簨鏁呭鐩樹笌澶勭疆锛堜笂鍗堬級**
+   - 鏍瑰洜锛氬畼鏂规牸寮忥紙15 鍒�/缁勶級涓庣郴缁熺畝鍖栨ā鏉匡紙18 鍒�/缁勶級涓嶅尮閰嶏紝鍥哄畾鍒椾綅瑙f瀽瀵艰嚧鏁磋〃閿欎綅銆�
+   - 澶勭疆锛氭竻鐞� 8/9 鏈堥敊浣嶈兘鑰楁暟鎹紙鍚� 1284 鏉★紝7 鏈堜繚鐣欙級锛涘畼鏂规牸寮忚浆妯℃澘鍚庨噸鏂板鍏� 2026-08/09 鍧� 1284 鏉� 0 澶辫触骞堕獙璇佸榻愩��
+2. **瀵煎叆鍔熻兘鍏ㄩ潰浣撴**锛坄docs/瀵煎叆鍔熻兘浣撴鎶ュ憡.md`锛�
+   - 瀹炴祴锛氬煄甯傚叕浜� 142 鏉°�佸贰娓稿嚭绉� 17 鏉°�佸叕璺梾瀹㈣繍鏀� 767 鏉°�佽揣杩愰噺鍛ㄨ浆閲� 18 鏉°�佽涓婅涓� 36 鏉°�佸嚭绉熻溅杩愭斂琛ㄥご璇嗗埆绛夛紝鎶芥煡鍏ュ簱鍧囦笌婧愭枃浠朵竴鑷淬��
+3. **瀵煎叆鏍¢獙澧炲己锛堜唬鐮佹敼鍔紝鏈彁浜�/鏈帹閫侊級**
+   - 鍩庡競鍏氦/宸℃父鍑虹/鎶曡祫绯荤粺瀵煎嚭琛モ�滆〃澶村垪浣嶆牎楠屸�濓紱杩愭斂杞﹁締/杞ㄨ抗閲岀▼鏀逛负鈥滆〃澶村悕绉版槧灏勨�濓紙鍒楅『搴忓彉鍖栦篃鑳藉鍏ワ級锛涜揣杩愰噺鍛ㄨ浆閲�/瑙勪笂瑙勪笅琛ヨ〃澶�/sheet 甯冨眬鏍¢獙銆�
+4. **寤虹珛宸ヤ綔瑙勮寖**
+   - 姣忓畬鎴愪竴涓姛鑳界珛鍗虫祴璇曞苟鍐欍�婂姛鑳芥祴璇曟姤鍛娿�嬶紱姣忓ぉ鍐欍�婂伐浣滄棩缁撱�嬶紙鍛藉悕闄勬棩鏈燂級銆傚凡鍐欏叆 AGENTS.md 骞跺垱寤� `docs/鍔熻兘娴嬭瘯鎶ュ憡/`銆乣docs/宸ヤ綔鏃ョ粨/` 鐩綍銆�
+5. **鎶曡祫瀹℃牳 I004 鍩哄噯缂哄け璇姤淇锛堜唬鐮佹敼鍔紝鏈彁浜�/鏈帹閫侊級**
+   - 闂锛�8 鏈堟姇璧勭墿娴佸洯鍖�/瀹㈣繍绔欏満瀹℃牳鍑虹幇 163 鏉� RULE_I004銆屾姇璧勭郴缁熼」鐩己澶辨牳瀹炪�嶈鎶モ�斺�斿悓鎶ヨ〃鏈熸姇璧勭郴缁熷熀鍑嗭紙2026-08锛夊皻鏈鍏ワ紝搴撻噷鍙湁 7 鏈堝熀鍑嗐��
+   - 淇锛氬悓鎶ヨ〃鏈熷熀鍑嗘暣鏈熺己澶辨椂璺宠繃 I004锛堜笌 I001鈥揑003 涓�鑷达級锛岃鍒欑粺璁℃爣璁� skipped锛涘熀鍑嗗瓨鍦ㄦ椂鎭㈠鐪熷疄妫�娴嬨��
+   - 楠岃瘉锛氶噸璺� 8 鏈堝鏍� 163 鏉� 鈫� 0 鏉★紱瀵煎叆娴嬭瘯鍩哄噯鍚� I004 姝e父鎶� 42 鏉$湡瀹炵己澶憋紱娓呯悊鍚庤繕鍘� 0 鏉°�傛祴璇曟姤鍛婏細`docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_鎶曡祫瀹℃牳I004鍩哄噯缂哄け淇濇姢_2026-09-02.md`銆�
+6. **鎶曡祫甯傚窞鏈堟姤澶� sheet 璇嗗埆涓庡簭鍙风┖鏍间慨澶嶏紙浠g爜鏀瑰姩锛屾湭鎻愪氦/鏈帹閫侊級**
+   - 闂锛歚绁炲啘鏋舵灄鍖虹墿娴佹姇璧勬湀鎶�2026.08.xlsx` 鎵撳紑鐪嬫槸绁炲啘鏋舵暟鎹紝鍗磋甯傚窞涓�鑷存�ф牎楠屾嫆缁濄��
+   - 鏍瑰洜 1锛氭枃浠� 46 涓� sheet锛屽墠 24 涓槸鍘嗗彶銆屾綔姹熶紶鍖�1鏈垀2021.8銆嶉仐鐣� sheet锛屾棫閫夎〃閫昏緫鍙湅銆�8鏈堛�嶅瓧鏍凤紝璇�夊巻鍙层�屾綔姹熶紶鍖�8鏈堛�嶁啋 璇诲嚭娼滄睙椤圭洰褰掑睘绁炲啘鏋� 鈫� 鏍¢獙鎷掔粷銆�
+   - 鏍瑰洜 2锛氱湡鏁版嵁 sheet `2026.8` 閲屻�岀鍐滄灦鐗╂祦鍥�嶉」鐩搴忓彿涓虹┖锛屾棫瑙f瀽鎶婄┖搴忓彿琛屼竴寰嬪綋甯傚窞灏忚妭琛岃烦杩囷紝鐪熷疄鏁版嵁浠庢湭鍏ュ簱锛堝簱閲屽彧鏈夊杩愮鍐滄灦鏋㈢航绔欙級銆�
+   - 淇锛氶�� sheet 鏀寔鐐瑰彿鎶ヨ〃鏈熷苟缁欍�屽甫骞翠唤鍓嶇紑銆嶇殑褰撴湡 sheet 鍔犲垎浼樺厛锛涚┖搴忓彿琛岃嫢鍍忛」鐩悕鍒欐寜椤圭洰瑙f瀽锛涙柊澧� `isLikelyInvestProjectName` 鍒ゆ柇銆�
+   - 楠岃瘉锛氱鍐滄灦+娼滄睙涓ゆ枃浠舵壒閲忓鍏� 2 鎴愬姛 0 澶辫触锛涚鍐滄灦鐗╂祦鍥凡鍏ュ簱锛堟�绘姇璧� 7440.35锛�8 鏈� 31/26.1/0/7535.45锛夛紱娼滄睙涓嶅彈褰卞搷銆傛祴璇曟姤鍛婏細`docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_鎶曡祫甯傚窞鏈堟姤澶歴heet璇嗗埆涓庡簭鍙风┖鏍糭2026-09-02.md`銆�
+7. **杩愭斂杞﹁締/杞ㄨ抗閲岀▼瀵煎叆鍥炲綊锛堜笅鍗堬紝鏃犱唬鐮佹敼鍔級**
+   - 鐢� docs 7 鏈堟暟鎹紙`妯℃澘_杩愭斂杞﹁締.xlsx` 635 瀹躲�乣妯℃澘_杞ㄨ抗閲岀▼.xlsx` 628 瀹讹級娴� 2026-08 鎶ヨ〃鏈燂細姝e悜 635/628 鎴愬姛锛屽叆搴撲笌婧愭枃浠堕�愰」涓�鑷达紱鏋勯�犲垪涔卞簭鍓湰瀵煎叆浠嶆垚鍔熶笖鏁板�间笉閿欎綅锛堥獙璇佽〃澶村悕绉版槧灏勶級锛涢敊绫诲瀷鏂囦欢鏄庣‘鎶ラ敊鍒楀嚭缂哄垪涓斾笉璇垹鏁版嵁銆�
+   - 瀹樻柟鑳借�楋紙15 鍒�/缁勶級锛氭寜鐢ㄦ埛纭銆岀郴缁熸ā鏉挎牸寮忋�嶅彛寰勶紝瀹炴祴瀹樻柟鏂囦欢琚〃澶村垪浣嶆牎楠屾嫆缁濆苟鎻愮ず鐢ㄦā鏉挎暣鐞嗭紝涓嶅仛瀹樻柟鏍煎紡鐩磋銆�
+   - 琛ュ锛歞ocs 鍐� `鎶曡祫/杈撳叆/鐗╂祦锛堢墿娴佸洯鍖猴級/6鏈堛��7鏈坄 鏋楀尯鐗╂祦鎶曡祫鏈堟姤瀵煎叆 2026-06/2026-07 鎴愬姛锛岀鍐滄灦鐗╂祦鍥� 6/7/8 鏈堟暟鎹ˉ鍏ㄥ苟涓庢簮鏂囦欢鏍稿涓�鑷达紙7 鏈堟枃浠跺惈 `2026.6`/`2026.7` 涓� sheet锛屾纭�変腑 `2026.7`锛夈��
+   - 娴嬭瘯鎶ュ憡锛歚docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_杩愭斂杞﹁締涓庤建杩归噷绋嬪鍏ュ洖褰抇2026-09-02.md`銆�
+
+
+8. **鐢熸垚妯℃澘鏂扮増寮忔敼閫狅紙鍏矾鏃呭/鍩庡競瀹㈣繍/璐ц繍鎺掑悕锛屼唬鐮佹敼鍔紝鏈彁浜�/鏈帹閫侊級**
+   - 鐢ㄦ埛宸叉寜鏂扮増寮忔墜宸ヨ皟鏁� docs 涓嬨�婄敓鎴恄*.xlsx銆嬶紙涓婂崐鈥滅疮璁♀��+涓嬪崐鈥滃綋鏈堚�濓級锛涚▼搴忔寜鏂扮増寮忚ˉ榻愬~鍏呯偣锛氫腑鍙e緞鍒嗘瀽涓嬪崐鍧楋紙鍗犳瘮鍏紡鏀规寚 B$11/F$11锛夈�佷腑鍙e緞鎺掑悕鍙充晶褰撴湀鍧椼�佸煄甯傚杩愭眹鎬诲簳閮ㄥ崟鏈堝潡銆佸煄甯傚垎甯傚窞绱/鍚勫競宸炴槑缁嗚〃褰撴湀鍧楋紙褰撴湀=绱宸紝RANK/鍗犳瘮/澧為�熸帓鍚嶅叕寮忔敼鎸囧綋鏈堣锛夛紱璐ц繍閲�/鍛ㄨ浆閲忔帓鍚� R23 鏍囬鍘烩�滅疮璁♀�濄��
+   - 鍩庡競瀹㈣繍瀵煎嚭搴曠浠庡凡鍒犻櫎鐨勩�婂鍏ユā鏉縚*銆嬪叏閮ㄦ敼鍥炪�婄敓鎴恄*銆嬶紙鏈嶅姟/鎺у埗鍣�/涓�閿寘鍚屾锛夛紝DataImport.vue 涓嬭浇妯℃澘閾炬帴涓�骞舵敼鎸囥��
+   - 楠岃瘉锛�10 鎺ュ彛 2026-07 鍏� 200銆侀敊璇叕寮� 0 娈嬬暀锛涘煄甯傛眹鎬诲綋鏈堝潡涓庡簱鍐� 2026-07 鍒嗛」鍚堣閫愪綅涓�鑷达紙鍏氦 12974.73 / 鍑虹 5860.24 / 杞ㄩ亾 11731.83 / 杞浮 46.05锛夛紱涓彛寰勪笅鍗婂潡=7 鏈堝綋鏈� 3078.86 涓囦汉 / 141155.32 涓囦汉鍏噷锛涜礋鍚�/杈圭晫锛堟棤鏁版嵁鏈� 2026-05銆佸勾鍒� 2026-01銆佽秴鑼冨洿 2026-13銆侀潪娉� bad-period锛夊凡娴嬪苟鐣欐。銆�
+   - **璐ц繍鎺掑悕涓よ〃绗簩椤碘�滃綋鏈堚�濆~鍏呭凡瀹炵幇锛�16:40 纭鍚庤ˉ鍋氾級**锛歟xportFreightRank/exportTurnoverRank 绗簩椤垫敼濉綋鏈堝�硷紙璐ц繍锛欻2032 褰撴湀瑙勪笂+妯℃澘褰撴湀鍚堣-宸�硷紱鍛ㄨ浆閲忥細鎷嗗垎琛� MONTH 琛岋級锛岀浜岄〉鍒楀ご瀵煎嚭鏃舵敼鈥滃綋鏈堝畬鎴愨�濓紱2026-07 鍥炲綊姝︽眽/鍏ㄧ渷涓� DB 閫愰」涓�鑷淬��0 閿欒鍏紡锛屼骇鐗� `freightRank_褰撴湀鐗坃2026-07.xlsx`銆乣turnoverRank_褰撴湀鐗坃2026-07.xlsx`銆�
+   - 寰呯‘璁わ細鍩庡競瀹㈣繍褰撴湀鍧� Q 鍒楄〃澶粹�滃嚭绉�/缃戠害杞︹�濇涔夛紱妯℃澘婧愭枃浠跺垪澶粹�滅疮璁″畬鎴愨�濆闇�涓�骞惰惤鐩樺彲鍦� Excel 鍙﹀瓨锛堝鍑哄凡鑷姩涓衡�滃綋鏈堝畬鎴愨�濓級銆�
+
+## 娴嬭瘯缁撴灉鎽樿
+- 鍔熻兘娴嬭瘯鎶ュ憡锛歚docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_瀵煎叆鏍¢獙澧炲己_2026-09-02.md`锛�17 涓/璐熷悜鐢ㄤ緥鍏ㄩ儴閫氳繃锛夈��
+- 鍔熻兘娴嬭瘯鎶ュ憡锛歚docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_鎶曡祫瀹℃牳I004鍩哄噯缂哄け淇濇姢_2026-09-02.md`锛�4 涓敤渚嬪叏閮ㄩ�氳繃锛夈��
+- 鍔熻兘娴嬭瘯鎶ュ憡锛歚docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_鎶曡祫甯傚窞鏈堟姤澶歴heet璇嗗埆涓庡簭鍙风┖鏍糭2026-09-02.md`锛�5 涓敤渚嬪叏閮ㄩ�氳繃锛夈��
+- 鍔熻兘娴嬭瘯鎶ュ憡锛歚docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_杩愭斂杞﹁締涓庤建杩归噷绋嬪鍏ュ洖褰抇2026-09-02.md`锛�8 涓敤渚嬪叏閮ㄩ�氳繃锛夈��
+- 鍔熻兘娴嬭瘯鎶ュ憡锛歚docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_鐢熸垚妯℃澘鏂扮増寮廮2026-09-02.md`锛�10 涓敤渚嬶細姝e悜 6 閫氳繃銆佽礋鍚�/杈圭晫 4 閫氳繃锛屽彟璁板綍 1 澶勪綆浼樼己闄凤細闈炴硶 period 杩斿洖 500 鏃犳牎楠岋級銆�
+- 杩愭斂杞﹁締/杞ㄨ抗閲岀▼ 2026-08锛�635/628 鏉★級涓� 7 鏈堟暟鎹祴璇曠棔杩癸紝淇濈暀涓庡惁寰呯敤鎴风‘璁わ紱鍏朵綑娴嬭瘯鏁版嵁宸叉竻鐞嗭紝鏈Е纰� 2026-06/07 鐪熷疄鎶曡祫鏁版嵁锛堟湰娆¤ˉ瀵间负鐪熷疄鏁版嵁锛夈��
+
+## 閬楃暀闂涓庡緟鍔�
+- 鍑虹杞﹁繍鏀匡細鍙︿竴浼氳瘽淇涓紝淇鍚庨渶鐪熷疄 4.2 涓囪澶ф枃浠跺洖褰掋��
+- 瀹樻柟鑳借�楋紙15 鍒�/缁勶級锛氬凡纭涓嶅疄鐜扮洿璇伙紝鎸夌郴缁熸ā鏉挎牸寮忔暣鐞嗗鍏ワ紙鐜扮姸琛屼负宸插疄娴嬶級銆�
+- 杩愭斂杞﹁締/杞ㄨ抗閲岀▼ 2026-08 鐩墠涓� 7 鏈堟暟鎹祴璇曠棔杩癸紙635/628 鏉★級锛屽闇�淇濈暀鐢ㄤ簬鍚庣画 8 鏈堝姛鑳芥祴璇曡鍛婄煡锛屽惁鍒欐竻鐞嗐��
+- **8 鏈堟姇璧勭郴缁熷鍑烘枃浠跺緟鐢ㄦ埛鎻愪緵**锛氭嬁鍒板悗瀵煎叆锛坕nvestmentSystem / period=2026-08锛夊苟閲嶈窇 8 鏈堝鏍革紝I001鈥揑004 鎭㈠瀹屾暣瀵规瘮銆�
+- 绁炲啘鏋剁墿娴佸洯 6/7/8 鏈堟暟鎹凡鍏ㄩ儴琛ュ叏锛坉ocs 鍐� 6/7 鏈堟枃浠跺凡瀵煎叆锛夈��
+
+## 鏄庡ぉ璁″垝锛堝緟鐢ㄦ埛纭锛�
+- 鐢ㄦ埛鐪熷疄鏂囦欢鎶芥煡鍥炲綊锛涙寜闇�缁х画涓氬姟鍔熻兘寮�鍙戙��
+
+
diff --git "a/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\346\250\241\345\235\227\345\212\237\350\203\275\351\252\214\350\257\201\347\212\266\346\200\201\347\237\251\351\230\265_2026-09-02.md" "b/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\346\250\241\345\235\227\345\212\237\350\203\275\351\252\214\350\257\201\347\212\266\346\200\201\347\237\251\351\230\265_2026-09-02.md"
new file mode 100644
index 0000000..b691bb6
--- /dev/null
+++ "b/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\346\250\241\345\235\227\345\212\237\350\203\275\351\252\214\350\257\201\347\212\266\346\200\201\347\237\251\351\230\265_2026-09-02.md"
@@ -0,0 +1,82 @@
+# 妯″潡 鈫� 鍔熻兘 鈫� 楠岃瘉鐘舵�佺煩闃碉紙2026-09-02 蹇収锛�
+
+> 鐘舵�佸彛寰勶細
+> 鉁� 宸查獙璇佸彲鐢紙鐪熷疄鏁版嵁/鍥炲綊璇佹嵁锛岃鈥滆瘉鎹�濆垪锛�
+> 鈿狅笍 鍔熻兘鍙敤浣嗘暟鎹簮鏈夌己鍙o紙缂烘湀/缂烘牸寮忥級锛岃ˉ鏁版嵁鍗冲畬鏁�
+> 馃煛 閮ㄥ垎楠岃瘉 / 鏈仛鍏ㄩ潰鍥炲綊
+> 鏁版嵁鑼冨洿锛氭湰鍦� traffic_audit 搴擄紙127.0.0.1:3308锛�+ 褰撴棩锛�2026-09-02锛�22 鎶ヨ〃鎺ュ彛鍥炲綊銆�
+
+## 璐ц繍锛堟牳蹇冩ā鍧楋紝浠婃棩鍥炲綊锛�
+
+| 鍔熻兘 | 楠岃瘉鐘舵�� | 璇佹嵁 / 澶囨敞 |
+|---|---|---|
+| 璐ц繍閲�/鍛ㄨ浆閲忔湀鎶ュ鍏ワ紙2026-07锛� | 鉁� | 18 琛� 0 澶辫触锛涘煄甯傚悎璁�=婀栧寳鐪� 16285.7105 涓� / 2181925.708 涓囧惃鍏噷锛涙姹� 4940.97/667561.37 |
+| 瑙勪笂瑙勪笅鎷嗗垎锛�2026-07锛� | 鉁� | MONTH/CUM 鍚� 18 琛岋紝鍚堣涓� workbook 涓�鑷达紙姝︽眽 MONTH 204809.56/462751.81/667561.37锛� |
+| H2032 浼佷笟鏈堟姤鏁版嵁 | 鉁� | 2026-01~08 鍚� 636 鎴锋棤閲嶅锛�2025 鍩烘湡 12 涓湀鍚� 664 鎴凤紙鍘诲勾姝e父锛� |
+| 鍒嗗競宸炴槑缁� cityDetail 瀵煎嚭 | 鉁� | 姝︽眽 7 鏈� 4940.97銆佺疮璁� 34306.78锛涙棤閿欒鏍� |
+| 鎺掑悕琛� freightRank / turnoverRank | 鉁� | 涓� scale_split 閫愪綅涓�鑷达紙绱 4357157.34/10864961.11/15222118.45锛� |
+| 璐ц繍绯诲垪 freightSeries锛坺ip锛� | 鉁� | 鍐呭眰 0 閿欒鏍� |
+| 杩愭斂杞﹁締 / 杞ㄨ抗閲岀▼瀵煎叆锛�2026-08锛� | 鉁� | 635 / 628 鏉★紝涔卞簭鍒� + 缂哄垪鎶ラ敊璐熶緥閫氳繃锛�8/31 浣撴鎶ュ憡锛� |
+
+## 鍩庡競瀹㈣繍
+
+| 鍔熻兘 | 楠岃瘉鐘舵�� | 璇佹嵁 / 澶囨敞 |
+|---|---|---|
+| 鍏氦 U203 瀵煎叆 | 鉁� | 2026-04 142 鏉� 0 澶辫触 + 閿欎綅鍒楄鎷掞紙浣撴鎶ュ憡锛� |
+| 宸℃父鍑虹 U402 瀵煎叆 | 鉁� | 2026-04 17 鏉� 0 澶辫触 + 閿欎綅鍒楄鎷� |
+| 鍑虹杩愭斂杞﹁締瀵煎叆锛�2026-07锛� | 鉁� | 42636 鏉� 0 澶辫触銆�17 甯傚窞锛屼笌 2026-08 涓�鑷达紙浠婃棩锛� |
+| 鍏氦 / 鍑虹鍒嗗競宸炴槑缁嗗鍑� | 鉁� | 琛ㄥご 2026 骞� 1-7 鏈堟甯搞��0 閿欒鏍硷紙浠婃棩锛� |
+| 杞ㄩ亾 / 杞浮鍒嗗競宸炴槑缁嗗鍑� | 鉁� | 0 閿欒鏍硷紱鍏ㄧ渷姹傚拰=姝︽眽+榛勭煶锛堟娊鏌ヤ竴鑷达級锛堜粖鏃ワ級 |
+| 杞ㄩ亾 / 杞浮鏈堝害鏁版嵁婧� | 鈿狅笍 | 搴撳唴 2026 骞翠粎 6銆�7 鏈堟湁鍊� 鈫� 鎶ヨ〃 1-5 鏈堜负绌猴紱琛ユ湀婧愭枃浠跺悗鍗冲畬鏁� |
+| 鍩庡競瀹㈣繍姹囨�� / 鍚勫競宸炵疮璁� / 鍩庡競绯诲垪 | 鉁� | 绱鍗犳瘮 #DIV/0! 宸叉竻锛堜粖鏃ワ級锛涚綉绾﹁溅鏃犳簮鐣欑┖ |
+
+## 鍏矾鏃呭
+
+| 鍔熻兘 | 楠岃瘉鐘舵�� | 璇佹嵁 / 澶囨敞 |
+|---|---|---|
+| H2031 鏈堟姤瀵煎叆 | 鉁� | 2026-07 琛ュ 46 鏉� |
+| 涓綋瀹㈣繍閲忥紙鏂板競宸炴眹鎬绘ā鏉匡紝2026-07锛� | 鉁� | 7 鏉� 0 澶辫触锛涘叏鐪佸悎璁� 189998 浜� / 4584040.2 浜哄叕閲� = 婧愯〃锛堜粖鏃ワ級 |
+| 涓綋瀹㈣繍閲忥紙鏃р�滀紒涓氬悕绉扳�濇ā鏉匡級 | 鉁� | 鍙屾ā鏉垮苟瀛橈紝鏃фā鏉垮吋瀹逛繚鐣� |
+| 鍏矾鏃呭杩愭斂杞﹁締鏁板鍏� | 鉁� | 2026-06 767 鏉� |
+| 鍒嗗競宸� / 涓彛寰勬槑缁� / 鎺掑悕 / 鍒嗘瀽瀵煎嚭 | 鉁� | 鏄庣粏鍘诲勾鍚屾湡椤� #REF! 宸叉竻锛堜粖鏃ワ級锛�0 閿欒鏍� |
+| 鍏矾鏃呭绯诲垪 passengerSeries锛坺ip锛� | 鉁� | 鍐呭眰 0 閿欒鏍硷紙浠婃棩锛� |
+| 涓彛寰勬湀搴︽暟鎹鐩� | 鈿狅笍 | 涓庢簮鏂囦欢鏈堜唤瀵归綈鎯呭喌鏈�愭湀鏍革紝瀵煎嚭鏃犻敊浣嗗缓璁ˉ鏁版嵁鍚庡鐪� |
+
+## 鑳借��
+
+| 鍔熻兘 | 楠岃瘉鐘舵�� | 璇佹嵁 / 澶囨敞 |
+|---|---|---|
+| H204 瀛f姤瀵煎叆 | 鉁� | 7/8/9 鏈堝悇 1284 鏉� 0 澶辫触锛堜綋妫�鎶ュ憡锛� |
+| 鑳借�楁眹鎬诲鍑� energySummary | 鉁� | 鏃犲幓骞存暟鎹殑 #DIV/0! 宸叉竻锛堜粖鏃ワ級 |
+
+## 鎶曡祫
+
+| 鍔熻兘 | 楠岃瘉鐘舵�� | 璇佹嵁 / 澶囨敞 |
+|---|---|---|
+| 瀹㈣繍绔欏満 / 鐗╂祦鍥尯瀵煎叆 | 鉁� | 6/7 鏈堢湡瀹炴枃浠讹紙瀹㈣繍 46 + 鐗╂祦 133 / 鍩哄噯 148锛� |
+| 鎶曡祫鎶ヨ〃 investPlan/Billion/County/FiveYear | 馃煛 | HTTP 200銆丒xcel 鍙墦寮�锛汬SSF 鑰佹牸寮忥紙.xls 浜岃繘鍒讹級锛屾湭鍋氶�愭牸鍏紡鎵弿 |
+| 鎶曡祫绯诲垪 investSeries锛坺ip锛� | 鉁� | 鍐呭眰 0 閿欒鏍� |
+
+## 鏁版嵁璐ㄩ噺 / 姹℃煋娓呯悊锛�2026-09-02锛�
+
+| 浜嬮」 | 楠岃瘉鐘舵�� | 璇存槑 |
+|---|---|---|
+| 鎶ヨ〃 #REF! / #DIV/0! 姹℃煋 | 鉁� 宸叉竻 | 鍏氦/鍑虹/杞ㄩ亾杞浮/鍩庡競绱/鑳借��/涓彛寰勬槑缁嗗叏閮� 0 娈嬬暀 |
+| 璐ц繍 2026-07 绌烘礊涓庤礋鍊� | 鉁� 宸蹭慨 | 榛勭煶绛� NULL 琛ラ綈锛涙湀瀛e樊 -323.97 璐熷�兼秷闄� |
+| H2032 2026-07 閲嶅锛�98 鎴�/734 琛岋級 | 鉁� 宸叉秷 | 鐜� 636 鎴� 0 閲嶅 |
+| 绌烘壒娆� #177-179 / #186 | 鈩癸笍 | 0 琛屾棤瀹筹紝淇濈暀瀹¤鍘嗗彶 |
+
+## 绯荤粺 / 鍏朵粬
+
+| 鍔熻兘 | 楠岃瘉鐘舵�� | 璇存槑 |
+|---|---|---|
+| 瀵煎叆鎺ュ彛 + 鎵规钀藉簱 | 鉁� | 浠婃棩涓夋壒锛�#187/#188 绛夛級鍧囪惤搴撳彲鏌� |
+| 瀵煎叆杩涘害 UI 鏄剧ず锛�4.2 涓囪澶ф枃浠讹級 | 馃煛 | 鐢ㄦ埛鍙嶉鈥滄棤鏄剧ず鈥濓紝鏈璧版帴鍙e鍏ユ垚鍔燂紱椤甸潰澶嶇幇鎺掓煡寰呭仛 |
+| 鐧诲綍 / 椤甸潰 / 瀹℃牳锛圓uditEngine锛� | 馃煛 | 涓嶅湪鏈鑼冨洿锛屾湭鍥炲綊 |
+
+## 寰呭姙锛堝缓璁笅涓�姝ワ級
+
+1. 琛ラ綈鍩庡競瀹㈣繍锛堝叕浜�/鍑虹鏈堝害銆佽建閬�/杞浮锛夌己鏈堟簮鏂囦欢骞堕噸鏂板鍏� 鈫� 鎶ヨ〃鏈堜唤鍒楀叏銆�
+2. /import 椤甸潰澶ф枃浠惰繘搴︽潯澶嶇幇鎺掓煡锛堢敤鎴峰彲瑙侀棶棰橈級銆�
+3. 濡傞渶鈥滄姇璧勫洓琛� .xls 鑰佹牸寮忊�濋�愭牸鎵弿锛岄渶瑕� xls 瑙f瀽/杞崲宸ュ叿锛圠ibreOffice 绛夛級銆�
+4. 鏈湴浠g爜鏀瑰姩鏈彁浜わ紙ReportExportService/DataImportService/RegionUtil + 2 浠芥姤鍛婃枃妗o級锛岀‘璁ゅ悗 commit銆�
diff --git "a/docs/\345\276\205\344\270\232\345\212\241\347\224\250\346\210\267\347\241\256\350\256\244\346\270\205\345\215\225_2026-09-02.md" "b/docs/\345\276\205\344\270\232\345\212\241\347\224\250\346\210\267\347\241\256\350\256\244\346\270\205\345\215\225_2026-09-02.md"
new file mode 100644
index 0000000..de22431
--- /dev/null
+++ "b/docs/\345\276\205\344\270\232\345\212\241\347\224\250\346\210\267\347\241\256\350\256\244\346\270\205\345\215\225_2026-09-02.md"
@@ -0,0 +1,51 @@
+# 寰呬笟鍔$敤鎴风‘璁ゆ竻鍗曪紙鎺掔増/鍙e緞锛�2026-09-02锛�
+
+> 鐢ㄩ�旓細鎵撳嵃鎴栧鐓э紝褰撻潰閫愭潯纭銆傗槄=鎺掔増绫伙紙涓氬姟浣跨敤鑰呭彲鐩存帴鎷嶆澘锛夛紱鈼�=鍙e緞/鏁版嵁绫伙紙闇�涓氬姟/缁熻瑙勫垯纭锛夛紱鈻�=鍔熻兘鑼冨洿銆�
+> 鐘舵�佸垪鐣欑┖寰呭~锛氣枴寰呯‘璁� / 鉁斿凡纭 / 鉁樹笉閲囩撼 / 鈼嬫敼鏈�
+
+## 涓�銆佸叕璺梾瀹紙鍚釜浣撳杩愶級鈽呴噸鐐�
+
+| # | 绫诲埆 | 鐜拌薄锛堢幇鐘惰瘉鎹級 | 闇�瑕佺‘璁ょ殑闂 | 寤鸿榛樿 |
+|---|---|---|---|---|
+| 1 | 鈽呮帓鐗� | 涓綋瀹㈣繍 2026-07 瀵煎叆 7 琛岋紝浣嗗彧瑕嗙洊 6 涓競宸烇紱瀛濇劅鍑虹幇 2 琛岋紙鍚堣绾� 21802/436433锛夛紝鍏朵綑甯傚窞鍚� 1 琛� | 妯℃澘绌剁珶鈥滀竴琛屼竴甯傚窞鈥濊繕鏄厑璁镐竴甯傚窞澶氳锛熷瓭鎰熶袱琛屾槸浠�涔堝彛寰勶紙鍩庡尯/鍘挎媶鍒� or 閲嶅锛夛紵鎶ヨ〃鏄惁瑕佲�滃叏鐪佸悎璁♀�濊锛� | 涓庛�婃ā鏉縚婀栧寳鐪佸叕璺梾瀹㈣繍杈撲釜浣撴埛鏈堝害鐢熶骇鎯呭喌锛�2026.7锛夈�嬪畬鍏ㄤ竴鑷撮�愯灞曠ず锛涜纭瀛濇劅涓よ褰掑睘 |
+| 2 | 鈽呮帓鐗�/鈼忓彛寰� | 涓綋瀹㈣繍鍙湁鈥滃競宸炴眹鎬昏〃鈥濇暟鎹紝绯荤粺鐩墠娌℃湁鍗曠嫭鐨勨�滀釜浣撳杩愬垎甯傚窞鎶ヨ〃鈥濓紱鍏矾鏃呭瀵煎嚭鐨勫垎甯傚窞/涓彛寰勬姤琛ㄥ彧鍚涓婁紒涓� | 涓綋瀹㈣繍鏄惁瑕佸苟鍏モ�滃叕璺梾瀹㈡�婚噺鈥濇姤琛紙瑙勪笂+涓綋鍚堣锛夛紵鑻ヨ锛岀増寮忔�庝箞鎺掞紙瑙勪笂鍧�+涓綋鍧�+鍚堣琛岋級锛涜嫢涓嶈锛屼釜浣撳杩愭暟鎹粎渚涘彴璐�/瀹℃牳锛� | 鍑轰竴浠解�滃叏鐪佹�婚噺=瑙勪笂+涓綋鈥濈殑鏍稿椤垫垨鎶ヨ〃锛屽厛闂笟鍔℃槸鍚︽湰鏈熼渶瑕� |
+| 3 | 鈼忓彛寰� | 浣犳彁鍒扳�滀釜浣撳杩愭暟鎹槸鏍规嵁鍩庡競瀹㈣繍鏁版嵁璁$畻寰楁潵鐨勨�� | 纭鎺ㄥ鍙e緞锛氫釜浣撳杩愰噺/鍛ㄨ浆閲� = 鍩庡競瀹㈣繍鍝釜鎸囨爣锛堝嚭绉燂紵鎬婚噺-鍏氦-杞ㄩ亾-杞浮锛熺郴鏁帮紵锛夛紝渚夸簬绯荤粺鍋氬嬀绋芥牎楠岋紙濡傛姇璧勯偅鏍峰鍏ュ悗寮圭獥鏍稿锛� | 鎻愪緵璁$畻寮忥紱绯荤粺鍔犫�滀釜浣� vs 鍩庡競瀹㈣繍鈥濅竴鑷存�ф牎楠� |
+| 4 | 鈼忔暟鎹� | 搴撳唴 H2031 鍏矾鏃呭浼佷笟鏈堟姤鍙湁 2026-03(778)銆�2026-07(771) | 1/2/4/5/6/8 鏈堟槸鍚﹀凡鏈変笂鎶ユ枃浠堕渶瑕佽ˉ瀵硷紵2025 鍩烘湡鏄惁鎻愪緵锛堝喅瀹氬悓姣斿垪锛夛紵 | 缂烘湀鏂囦欢琛ラ綈鍚庡啀鍑哄畬鏁� 1-N 鏈堟姤琛� |
+
+## 浜屻�佸煄甯傚杩愶紙鎺掔増閲嶇偣锛�
+
+| # | 绫诲埆 | 鐜拌薄 | 闇�瑕佺‘璁ょ殑闂 | 寤鸿榛樿 |
+|---|---|---|---|---|
+| 5 | 鈽呮帓鐗�/鈼忓彛寰� | 8/11銆婂煄甯傚杩愭暟鎹紭鍖栥�嬪啓鏄庘�滅綉绾﹁溅鎷嗗垎=閮ㄧ骇涓嬪彂鎬婚噺鎸夊贰娓稿嚭绉熸瘮渚嬫媶鍒板悇甯傚窞锛孍xcel 閲屾湁鎷嗗垎鍏紡鈥濓紱鑰岀郴缁熷鍑虹殑鍚勫競宸炵疮璁�/鏄庣粏琛ㄦ妸缃戠害杞﹀垪娓呯┖ | 鎶ヨ〃缃戠害杞﹀垪鏈湡瑕佷笉瑕佹寜鎷嗗垎鍏紡濉�硷紵鎷嗗垎鎵�闇�鐨勨�滈儴绾ф�婚噺/璁㈠崟鎬绘暟鈥濈敱璋佹彁渚涳紙鎵嬪伐琛� or 鎺ュ彛锛夛紵 | 鍏堢暀绌哄苟鏍囨敞鈥滄棤鏁版嵁婧愨�濓紱鑻ユ湰鏈熻锛岃鎻愪緵鎷嗗垎琛ㄦ牱鏈� |
+| 6 | 鈽呮帓鐗� | 鍏氦/鍑虹/杞ㄩ亾杞浮妯℃澘鐨勨��2025 骞� 1-12 鏈堚�濆垪涓庡悓姣斿垪鍥犳棤鍘诲勾鍩烘湡鏁版嵁 + 妯℃澘鍏紡 #REF!锛屽鍑鸿娓呯┖ | 鏈湡浜や粯鏄惁闇�瑕佸幓骞村垪涓庡悓姣旓紵闇�瑕佲啋璇锋彁渚� 2025 鍚屾湡鏁版嵁鎴栧幓骞存婧愯〃锛涗笉闇�瑕佲啋妯℃澘鍒犻櫎璇ュ垪锛岀増闈㈡洿骞插噣 | 鍏堟寜鈥滀笉闇�瑕併�佺暀绌衡�濅氦浠橈紝妯℃澘鐢卞彟涓�浼氳瘽鎸夋瑁佸壀 |
+| 7 | 鈼忔暟鎹� | 鍩庡競鍏氦/鍑虹鏈堝害鍙湁 2026-06銆�07锛涜建閬�/杞浮鏁版嵁浠� 6銆�7 鏈� | 1-5 鏈堛��8 鏈堚�︽簮鏂囦欢鍙惁琛ラ綈锛堝喅瀹氭姤琛ㄦ湀浠藉垪瀹屾暣搴︼級锛熻嫢鍙氦 7 鏈堬紝鎶ヨ〃鍙睍绀� 6-7 鏈堝垪鍙帴鍙楋紵 | 琛ラ綈鑳芥嬁鍒扮殑鏈堜唤锛涘叾浣欏垪鐣欑┖ |
+| 8 | 鈽呮帓鐗� | 杞ㄩ亾鍧楁ā鏉垮彧鎺掍簡 鍏ㄧ渷/姝︽眽/榛勭煶锛堥粍鐭� 6 鏈� 34.86銆�7 鏈� 30.09 鏈夊�硷級锛涜疆娓″潡鍙帓 鍏ㄧ渷/姝︽眽 | 鑻ユ湁鍏跺畠甯傚窞杞ㄩ亾/杞浮鏁版嵁锛屾ā鏉胯鏄惁瑕侀鐣�/鑷姩鎵╁睍锛熷綋鍓嶇増寮忔槸鍚︾鍚堜笂鎶ユ牸寮忥紵 | 涓庡畼鏂规牱寮犱竴鑷村嵆鍙紱璇峰綋鍦烘牳瀵规牱寮� |
+| 9 | 鈻查仐鐣� | docs/鍩庡競瀹㈣繍 涓嬫湁 8/14 绌烘枃浠垛�滃杩愰噺鐨勫悓姣旂幆姣旀槸0% 闇�鏍稿疄锛堜富瑕佸嚭鐜板湪鍏氦锛�.txt鈥� | 璇ユ牳瀹為」鏄惁宸插叧闂紵鍏氦鍚屾瘮/鐜瘮 0% 鏄惁浠嶅瓨鍦紙涓庣 6 鏉″幓骞存暟鎹己澶卞悓婧愶級锛� | 宸插叧闂垯鍒犲崰浣嶆枃浠讹紱鏈叧闂垯鍒楀叆瀹℃牳瑙勫垯楠岃瘉 |
+
+## 涓夈�佽揣杩愶紙鎺掔増閲嶇偣锛�
+
+| # | 绫诲埆 | 鐜拌薄 | 闇�瑕佺‘璁ょ殑闂 | 寤鸿榛樿 |
+|---|---|---|---|---|
+| 10 | 鈽呮帓鐗�/鈼忓彛寰� | `鐢熸垚_璐ц繍閲忔帓鍚�/鍛ㄨ浆閲忔帓鍚峘 鍒嗕袱椤碉細绗竴椤碘��1-7鏈堢疮璁♀�︹�濓紱绗簩椤垫爣棰樺凡鍘烩�滅疮璁♀�� | 鉁� 宸茬‘璁わ細绗簩椤靛~褰撴湀鍊硷紱9/2 16:40 宸插疄鐜板苟鍥炲綊锛堢浜岄〉褰撴湀鏁颁笌搴撲竴鑷达紝鍒楀ご瀵煎嚭鏃惰嚜鍔ㄦ敼鈥滃綋鏈堝畬鎴愨�濓級銆傛ā鏉挎簮鏂囦欢濡傞渶涓�骞惰惤鐩樺彲鍦� Excel 鍙﹀瓨 | 瀹屾垚 |
+| 11 | 鈽呮帓鐗� | `璐ц繍閲忓垎甯傚窞鏄庣粏`锛氬叏鐪� 6 鎸囨爣锛堟�婚噺/鍛ㄨ浆閲�/瑙勪笂/瑙勪笅鈥︼級+ 17 甯傚窞脳6 鎸囨爣锛�1-N 鏈�+绱 | 鎸囨爣椤哄簭銆佸崟浣嶏紙涓囧惃/涓囧惃鍏噷锛夈�佽闂磋窛鏄惁绗﹀悎涓婃姤鏍煎紡锛� | 瀵圭収瀹樻柟鏍峰紶纭 |
+| 12 | 鈽呮帓鐗� | 涓彛寰勬槑缁�/鎺掑悕/鍒嗘瀽妯℃澘姝h鍙︿竴浼氳瘽淇敼锛堝惈 Sheet2 鍘诲勾鏄庣粏椤� #REF! 琚竻绌猴級 | 涓彛寰勬姤琛ㄩ噷鐨勨�滃幓骞村悓鏈熼〉鈥濇湰鏈熸槸鍚﹂渶瑕佷繚鐣�/濉厖锛熷幓骞存暟鎹潵婧愶紵 | 鍏堢敱妯℃澘浼氳瘽鎸夆�滀笉闇�瑕佲�濆鐞嗭紝浜や粯鍓嶅啀鐩 |
+
+## 鍥涖�佽兘鑰� / 鎶曡祫
+
+| # | 绫诲埆 | 鐜拌薄 | 闇�瑕佺‘璁ょ殑闂 | 寤鸿榛樿 |
+|---|---|---|---|---|
+| 13 | 鈽呮帓鐗� | 鑳借�楁眹鎬昏〃鏃犲幓骞存暟鎹殑鍚屾瘮/鍗犳瘮鍏紡姹傚�煎け璐ュ悗琚竻绌猴紙濡� D4/J4/L4/M4锛� | 鐣欑┖鏄惁鍙帴鍙楋紵杩樻槸瑕佹樉绀衡�溾�斺�濇垨鈥滄殏鏃犳暟鎹�濆崰浣嶏紵 | 鐣欑┖锛堜笌缂哄幓骞村垪鐨勫叾瀹冩姤琛ㄤ竴鑷达級 |
+| 14 | 鈽呮帓鐗�/鈻� | 鎶曡祫鍥涘紶鎶ヨ〃瀵煎嚭涓鸿�佹牸寮� .xls锛圗xcel 鍙墦寮�锛夛紝鏈仛閫愭牸閿欒鎵弿 | 鏄惁鏈湡蹇呴』浜や粯 .xlsx锛熸帓鐗堟槸鍚︿繚鎸佹ā鏉垮師鏍峰嵆鍙紵 | 淇濇寔鐜扮姸锛屾ā鏉夸細璇濊嫢涓�骞跺鐞嗗垯浠ュ畠鐨勭増鏈负鍑� |
+
+## 浜斻�佸姛鑳借寖鍥� / 浣撻獙
+
+| # | 绫诲埆 | 鐜拌薄 | 闇�瑕佺‘璁ょ殑闂 | 寤鸿榛樿 |
+|---|---|---|---|---|
+| 15 | 鈻� | 瀵煎叆椤碘�滃勾鎶モ�濆垎缁勬湁 11 涓被鍨嬪叆鍙o紝鍚庣鏃犲疄鐜� | 骞存姤瀵煎叆浠婂勾鏄惁瑕佸仛锛� | 涓嶅仛灏遍殣钘�/绂佺敤鍏ュ彛锛岄伩鍏嶈鐐规姤閿� |
+| 16 | 鈻蹭綋楠� | 4.2 涓囪澶ф枃浠跺鍏� 20-40 绉掞紝椤甸潰鍙湁鈥滀笂浼犱腑鈥濇棤鐧惧垎姣旓紱渚ф爮鈥滄湰鏈堝鍏ヨ繘搴︹�濆彲鑳借绌烘壒娆℃樉绀烘垚鈥滄棤鏁版嵁鈥� | 鏈熸湜瀵煎叆涓樉绀衡�滃凡澶勭悊 N/M 琛屸�濆疄鏃惰繘搴︼紝杩樻槸瀹屾垚鍚庡脊绐楁眹鎬诲嵆鍙紵 | 瀹屾垚鍚庡脊绐�+渚ф爮鐘舵�侊紙褰撳墠锛夛紱濡傞渶瀹炴椂杩涘害鍐嶆帓鏈� |
+
+## 澶囨敞
+- 鏈鍙仛鈥滈棶棰樼‘璁も�濓紝浠g爜淇锛堟暟鍊奸潤榛� 0/澶辫触琛屽彿/鎵规鍥炲~/瀹℃牳璇垹绛夛級宸叉寜浣犺姹傚喕缁擄紝绛夊彟涓�浼氳瘽妯℃澘鏀瑰畬鍚庡啀鍋氥��
+- 妯℃澘鏂囦欢姝h鍙︿竴浼氳瘽淇敼锛屼互涓� 鈽呮帓鐗� 椤逛腑娑夊強妯℃澘鏍峰紡鐨勶紙6/8/10/12/14锛夊缓璁互鈥滃彟涓�浼氳瘽瀹氱鍚庣殑鐗堟湰鈥濆啀褰撻潰鏍稿涓�娆★紝閬垮厤閲嶅鏀逛袱閬嶃��
+
+
diff --git "a/docs/\350\203\275\350\200\227/\347\224\237\346\210\220_\350\203\275\350\277\220\346\261\207\346\200\273\350\241\250.xlsx" "b/docs/\350\203\275\350\200\227/\347\224\237\346\210\220_\350\203\275\350\277\220\346\261\207\346\200\273\350\241\250.xlsx"
index 437b561..ecd1b28 100644
--- "a/docs/\350\203\275\350\200\227/\347\224\237\346\210\220_\350\203\275\350\277\220\346\261\207\346\200\273\350\241\250.xlsx"
+++ "b/docs/\350\203\275\350\200\227/\347\224\237\346\210\220_\350\203\275\350\277\220\346\261\207\346\200\273\350\241\250.xlsx"
Binary files differ
diff --git "a/docs/\350\203\275\350\200\227/\350\203\275\350\200\227\347\256\200\345\214\226\357\274\2102026\345\271\264\357\274\211.xlsx" "b/docs/\350\203\275\350\200\227/\350\203\275\350\200\227\347\256\200\345\214\226\357\274\2102026\345\271\264\357\274\211.xlsx"
index d67247f..ac90f31 100644
--- "a/docs/\350\203\275\350\200\227/\350\203\275\350\200\227\347\256\200\345\214\226\357\274\2102026\345\271\264\357\274\211.xlsx"
+++ "b/docs/\350\203\275\350\200\227/\350\203\275\350\200\227\347\256\200\345\214\226\357\274\2102026\345\271\264\357\274\211.xlsx"
Binary files differ
diff --git "a/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\247\204\344\270\212\350\247\204\344\270\213\346\213\206\345\210\206\350\277\220\350\276\223\351\207\217.xlsx" "b/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\247\204\344\270\212\350\247\204\344\270\213\346\213\206\345\210\206\350\277\220\350\276\223\351\207\217.xlsx"
index 9f96679..53fdd8c 100644
--- "a/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\247\204\344\270\212\350\247\204\344\270\213\346\213\206\345\210\206\350\277\220\350\276\223\351\207\217.xlsx"
+++ "b/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\247\204\344\270\212\350\247\204\344\270\213\346\213\206\345\210\206\350\277\220\350\276\223\351\207\217.xlsx"
Binary files differ
diff --git "a/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\264\247\350\277\220\351\207\217\345\221\250\350\275\254\351\207\217.xlsx" "b/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\264\247\350\277\220\351\207\217\345\221\250\350\275\254\351\207\217.xlsx"
index 45c8cfa..64af982 100644
--- "a/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\264\247\350\277\220\351\207\217\345\221\250\350\275\254\351\207\217.xlsx"
+++ "b/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\264\247\350\277\220\351\207\217\345\221\250\350\275\254\351\207\217.xlsx"
Binary files differ
diff --git "a/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\275\250\350\277\271\351\207\214\347\250\213.xlsx" "b/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\275\250\350\277\271\351\207\214\347\250\213.xlsx"
index 5537734..d9962aa 100644
--- "a/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\275\250\350\277\271\351\207\214\347\250\213.xlsx"
+++ "b/docs/\350\264\247\350\277\220/\346\250\241\346\235\277_\350\275\250\350\277\271\351\207\214\347\250\213.xlsx"
Binary files differ
diff --git "a/docs/\350\264\247\350\277\220/\347\224\237\346\210\220_\345\221\250\350\275\254\351\207\217\346\216\222\345\220\215.xlsx" "b/docs/\350\264\247\350\277\220/\347\224\237\346\210\220_\345\221\250\350\275\254\351\207\217\346\216\222\345\220\215.xlsx"
index b048f4e..0abfdef 100644
--- "a/docs/\350\264\247\350\277\220/\347\224\237\346\210\220_\345\221\250\350\275\254\351\207\217\346\216\222\345\220\215.xlsx"
+++ "b/docs/\350\264\247\350\277\220/\347\224\237\346\210\220_\345\221\250\350\275\254\351\207\217\346\216\222\345\220\215.xlsx"
Binary files differ
diff --git "a/docs/\350\264\247\350\277\220/\347\224\237\346\210\220_\350\264\247\350\277\220\351\207\217\346\216\222\345\220\215.xlsx" "b/docs/\350\264\247\350\277\220/\347\224\237\346\210\220_\350\264\247\350\277\220\351\207\217\346\216\222\345\220\215.xlsx"
index 7195313..a72b2d8 100644
--- "a/docs/\350\264\247\350\277\220/\347\224\237\346\210\220_\350\264\247\350\277\220\351\207\217\346\216\222\345\220\215.xlsx"
+++ "b/docs/\350\264\247\350\277\220/\347\224\237\346\210\220_\350\264\247\350\277\220\351\207\217\346\216\222\345\220\215.xlsx"
Binary files differ
diff --git "a/docs/\350\264\247\350\277\220/\350\264\247\350\277\220\347\256\200\345\214\226\345\267\245\344\275\234.xlsx" "b/docs/\350\264\247\350\277\220/\350\264\247\350\277\220\347\256\200\345\214\226\345\267\245\344\275\234.xlsx"
index a24e4e9..911bce8 100644
--- "a/docs/\350\264\247\350\277\220/\350\264\247\350\277\220\347\256\200\345\214\226\345\267\245\344\275\234.xlsx"
+++ "b/docs/\350\264\247\350\277\220/\350\264\247\350\277\220\347\256\200\345\214\226\345\267\245\344\275\234.xlsx"
Binary files differ
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java b/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java
index 29bffc1..8d16e0c 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java
@@ -631,6 +631,8 @@
                     .eq(InvestmentSystem::getReportPeriod, reportPeriod))) {
             sysMap.computeIfAbsent(normInvestName(s.getProjectName()), k -> new ArrayList<>()).add(s);
         }
+        // 鍚屾姤琛ㄦ湡鎶曡祫绯荤粺鍩哄噯鏁存湡缂哄け鏃讹紝涓嶅仛"椤圭洰缂哄け鏍稿疄"锛堢己澶�=鍩哄噯鏈鍏ワ紝涓嶇瓑浜庨」鐩笉瀛樺湪锛夛紝閬垮厤鏁磋〃璇姤
+        boolean benchmarkMissing = sysMap.isEmpty();
 
         // 骞傜瓑锛氬彧娓呴櫎 INVEST 瑙勫垯鐨勬棫瀹℃牳缁撴灉
         List<Long> ruleIds = new ArrayList<>();
@@ -647,6 +649,7 @@
             String projectName = project == null ? "鏈煡椤圭洰" : project.getProjectName();
             InvestmentSystem sys = findInvestSystem(sysMap, projectName);
             for (AuditRule rule : rules) {
+                if (benchmarkMissing && "EXISTENCE_SYS".equals(rule.getCompareType())) continue;
                 AuditResult result = checkInvestRule(rule, monthly, projectName, sys);
                 if (result != null) {
                     result.setRuleName(rule.getRuleName());
@@ -1538,6 +1541,7 @@
             case "RULE_I001":
             case "RULE_I002":
             case "RULE_I003":
+            case "RULE_I004":
                 return investSystemMapper.selectCount(new LambdaQueryWrapper<InvestmentSystem>()
                     .eq(InvestmentSystem::getReportPeriod, period)) == 0;
             default:
@@ -2021,4 +2025,4 @@
         result.setStatus("PENDING");
         return result;
     }
-}
\ No newline at end of file
+}
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/common/util/RegionUtil.java b/traffic-audit-server/src/main/java/com/trafficaudit/common/util/RegionUtil.java
index a804f77..f02c9f1 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/common/util/RegionUtil.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/common/util/RegionUtil.java
@@ -42,6 +42,18 @@
         CODE_PREFIX_MAP.put("429006", "澶╅棬甯�");
         CODE_PREFIX_MAP.put("429021", "绁炲啘鏋舵灄鍖�");
 
+        ALIAS_MAP.put("姝︽眽", "姝︽眽甯�");
+        ALIAS_MAP.put("榛勭煶", "榛勭煶甯�");
+        ALIAS_MAP.put("鍗佸牥", "鍗佸牥甯�");
+        ALIAS_MAP.put("瀹滄槍", "瀹滄槍甯�");
+        ALIAS_MAP.put("瑗勯槼", "瑗勯槼甯�");
+        ALIAS_MAP.put("閯傚窞", "閯傚窞甯�");
+        ALIAS_MAP.put("鑽嗛棬", "鑽嗛棬甯�");
+        ALIAS_MAP.put("瀛濇劅", "瀛濇劅甯�");
+        ALIAS_MAP.put("鑽嗗窞", "鑽嗗窞甯�");
+        ALIAS_MAP.put("榛勫唸", "榛勫唸甯�");
+        ALIAS_MAP.put("鍜稿畞", "鍜稿畞甯�");
+        ALIAS_MAP.put("闅忓窞", "闅忓窞甯�");
         ALIAS_MAP.put("鎭╂柦", "鎭╂柦宸�");
         ALIAS_MAP.put("鎭╂柦甯�", "鎭╂柦宸�");
         ALIAS_MAP.put("鎭╂柦鍦熷鏃忚嫍鏃忚嚜娌诲窞", "鎭╂柦宸�");
@@ -103,6 +115,20 @@
         return CITY_LIST;
     }
 
+    /** 瑙勮寖甯傚窞鍚� -> 6 浣嶈鏀垮尯鍒掍唬鐮侊紙鏃犲尮閰嶆垨婀栧寳鐪佽繑鍥� null锛� */
+    public static String codeOfCity(String normalizedName) {
+        if (normalizedName == null) return null;
+        String name = normalizeCityName(normalizedName);
+        if (name == null || "婀栧寳鐪�".equals(name)) return null;
+        for (Map.Entry<String, String> e : CODE_PREFIX_MAP.entrySet()) {
+            if (e.getValue().equals(name)) {
+                String code = e.getKey();
+                return code.length() < 6 ? code + "00" : code;
+            }
+        }
+        return null;
+    }
+
     /** 鐢熸垚绌哄競宸炵粺璁ap */
     public static Map<String, BigDecimalStat> emptyStatMap() {
         Map<String, BigDecimalStat> map = new LinkedHashMap<>();
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java b/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java
index 41b922c..50b64f8 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java
@@ -407,41 +407,20 @@
 
 
 
-    /** 鍏矾鏃呭涓綋瀹㈣繍閲�/鍛ㄨ浆閲忥紙浼佷笟绾夸笅姹囨姤鏁版嵁锛屾寜鎵�灞炲湴鍖哄鍏ワ紝渚涘垎甯傚窞琛ㄤ釜浣撹濉厖锛� */
+    /** 鍏矾鏃呭涓綋瀹㈣繍閲�/鍛ㄨ浆閲忥紙瀵煎叆鍚庢寜甯傚窞姹囨�诲~鍏呭垎甯傚窞琛ㄤ釜浣撹锛夛紝鏀寔涓ょ妯℃澘锛�
+     *  鈶� 浼佷笟绾夸笅姹囨姤鏄庣粏锛堣〃澶村惈銆屼紒涓氬悕绉般�嶏級锛氶�愪紒涓氬叆搴擄紱
+     *  鈶� 鐪佸巺甯傚窞姹囨�昏〃銆婃箹鍖楃渷鍏矾鏃呭杩愯緭涓綋鎴锋湀搴︾敓浜ф儏鍐碉紙YYYY.M锛夈�嬶細
+     *     sheet 鍐呬负銆屽叏鐪丯鏈堜釜浣撳杩愰噺姹囨�昏〃銆嶆爣棰樺潡 + 銆屽競宸�/涓綋杞﹁締鏁�/鈥�/涓綋瀹㈣繍閲�/涓綋鏃呭鍛ㄨ浆閲忋�嶈〃澶达紝
+     *     鎸夊競宸為�愯鍏ュ簱锛堝悓涓�甯傚窞澶氳濡� 鍘垮唴鐝嚎+璺ㄥ幙鐝嚎 鍧囧叆搴擄紝鎶ヨ〃渚ф寜甯傚窞鑷姩姹囨�伙級銆� */
     public ImportResult importPassengerIndividual(MultipartFile file, String period) throws Exception {
         List<PassengerIndividualMonthly> rows = new ArrayList<>();
         try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
             Sheet sheet = wb.getSheetAt(0);
             Map<String, Integer> colMap = buildHeaderMap(sheet.getRow(0));
-            Integer codeCol = colMap.get("鎵�灞炲湴鍖�");
-            Integer entCol = colMap.get("浼佷笟浠g爜");
-            Integer nameCol = colMap.get("浼佷笟鍚嶇О");
-            Integer passCol = null;
-            Integer turnCol = null;
-            for (Map.Entry<String, Integer> e : colMap.entrySet()) {
-                String k = e.getKey();
-                if (k != null && k.contains("涓綋") && k.contains("瀹㈣繍閲�")) passCol = e.getValue();
-                if (k != null && k.contains("涓綋") && (k.contains("鍛ㄨ浆閲�") || k.contains("鍛ㄨ浆"))) turnCol = e.getValue();
-            }
-            if (passCol == null && turnCol == null) {
-                throw new RuntimeException("鏈壘鍒般�屼釜浣撳杩愰噺/涓綋鏃呭鍛ㄨ浆閲忋�嶅垪锛岃妫�鏌ユā鏉匡紙鍒楀悕闇�鍖呭惈鈥滀釜浣撳杩愰噺鈥濃�滀釜浣撳懆杞噺鈥濓級");
-            }
-            for (int r = 1; r <= sheet.getLastRowNum(); r++) {
-                Row row = sheet.getRow(r);
-                if (row == null) continue;
-                String name = nameCol != null ? getString(row, nameCol) : null;
-                if (name == null || name.trim().isEmpty()) continue;
-                Double pass = passCol != null ? getDecimalOrNull(row, passCol) : null;
-                Double turn = turnCol != null ? getDecimalOrNull(row, turnCol) : null;
-                if ((pass == null || pass == 0.0) && (turn == null || turn == 0.0)) continue;
-                PassengerIndividualMonthly entity = new PassengerIndividualMonthly();
-                entity.setReportPeriod(period);
-                entity.setRegionCode(codeCol != null ? getString(row, codeCol) : null);
-                entity.setEnterpriseCode(entCol != null ? getString(row, entCol) : null);
-                entity.setEnterpriseName(name.trim());
-                entity.setPassengerCount(pass);
-                entity.setTurnover(turn);
-                rows.add(entity);
+            if (colMap.containsKey("浼佷笟鍚嶇О")) {
+                parsePassengerIndividualEnterprise(sheet, colMap, period, rows);
+            } else {
+                parsePassengerIndividualCitySheet(sheet, period, rows);
             }
         } catch (Exception e) {
             log.error("Passenger individual parse error", e);
@@ -474,6 +453,101 @@
         recordBatch(file.getOriginalFilename(), "PASSENGER_INDIVIDUAL", period, rows.size(), success, failDetails.size(), errorDetail);
         log.info("Passenger individual imported: {} rows for {}", success, period);
         return new ImportResult(success, failDetails.size(), failDetails);
+    }
+
+    /** 鏃х増涓綋瀹㈣繍閲忔ā鏉匡紙浼佷笟绾夸笅姹囨姤鏄庣粏锛氭墍灞炲湴鍖�/浼佷笟浠g爜/浼佷笟鍚嶇О/鈥︿釜浣撳杩愰噺/鈥︿釜浣撴梾瀹㈠懆杞噺锛� */
+    private void parsePassengerIndividualEnterprise(Sheet sheet, Map<String, Integer> colMap, String period,
+                                                    List<PassengerIndividualMonthly> rows) {
+        Integer codeCol = colMap.get("鎵�灞炲湴鍖�");
+        Integer entCol = colMap.get("浼佷笟浠g爜");
+        Integer nameCol = colMap.get("浼佷笟鍚嶇О");
+        Integer passCol = null;
+        Integer turnCol = null;
+        for (Map.Entry<String, Integer> e : colMap.entrySet()) {
+            String k = e.getKey();
+            if (k != null && k.contains("涓綋") && k.contains("瀹㈣繍閲�")) passCol = e.getValue();
+            if (k != null && k.contains("涓綋") && (k.contains("鍛ㄨ浆閲�") || k.contains("鍛ㄨ浆"))) turnCol = e.getValue();
+        }
+        if (passCol == null && turnCol == null) {
+            throw new RuntimeException("鏈壘鍒般�屼釜浣撳杩愰噺/涓綋鏃呭鍛ㄨ浆閲忋�嶅垪锛岃妫�鏌ユā鏉匡紙鍒楀悕闇�鍖呭惈鈥滀釜浣撳杩愰噺鈥濃�滀釜浣撳懆杞噺鈥濓級");
+        }
+        for (int r = 1; r <= sheet.getLastRowNum(); r++) {
+            Row row = sheet.getRow(r);
+            if (row == null) continue;
+            String name = nameCol != null ? getString(row, nameCol) : null;
+            if (name == null || name.trim().isEmpty()) continue;
+            Double pass = passCol != null ? getDecimalOrNull(row, passCol) : null;
+            Double turn = turnCol != null ? getDecimalOrNull(row, turnCol) : null;
+            if ((pass == null || pass == 0.0) && (turn == null || turn == 0.0)) continue;
+            PassengerIndividualMonthly entity = new PassengerIndividualMonthly();
+            entity.setReportPeriod(period);
+            entity.setRegionCode(codeCol != null ? getString(row, codeCol) : null);
+            entity.setEnterpriseCode(entCol != null ? getString(row, entCol) : null);
+            entity.setEnterpriseName(name.trim());
+            entity.setPassengerCount(pass);
+            entity.setTurnover(turn);
+            rows.add(entity);
+        }
+    }
+
+    /** 鏂扮増甯傚窞姹囨�绘ā鏉匡細銆婂叏鐪丯鏈堜釜浣撳杩愰噺姹囨�昏〃銆嬫爣棰樿 鈫� 琛ㄥご琛岋紙甯傚窞/鈥�/涓綋瀹㈣繍閲�/涓綋鏃呭鍛ㄨ浆閲忥級鈫� 甯傚窞鏁版嵁琛� */
+    private void parsePassengerIndividualCitySheet(Sheet sheet, String period, List<PassengerIndividualMonthly> rows) {
+        int targetMonth;
+        try {
+            targetMonth = Integer.parseInt(period.split("-")[1]);
+        } catch (Exception e) {
+            throw new RuntimeException("鎶ヨ〃鏈熸牸寮忓簲涓� yyyy-MM锛�" + period);
+        }
+        int titleRow = -1;
+        for (int r = 0; r <= sheet.getLastRowNum(); r++) {
+            Row row = sheet.getRow(r);
+            if (row == null) continue;
+            String t = getString(row, 0);
+            if (t == null || !t.contains("鍏ㄧ渷") || !t.contains("鏈�")) continue;
+            java.util.regex.Matcher m = java.util.regex.Pattern.compile("鍏ㄧ渷(\\d+)鏈�").matcher(t);
+            if (!m.find()) continue;
+            if (Integer.parseInt(m.group(1)) == targetMonth) { titleRow = r; break; }
+            if (titleRow < 0) titleRow = r; // 鏍囬涓嶅惈鐩爣鏈堜唤鏃舵殏璁扮涓�涓爣棰樺潡鍏滃簳
+        }
+        if (titleRow < 0) {
+            throw new RuntimeException("鏈壘鍒般�屽叏鐪丯鏈堜釜浣撳杩愰噺姹囨�昏〃銆嶆爣棰樺潡锛岃浣跨敤銆婃ā鏉縚婀栧寳鐪佸叕璺梾瀹㈣繍杈撲釜浣撴埛鏈堝害鐢熶骇鎯呭喌锛圷YYY.M锛夈�嬫暣鐞嗗悗瀵煎叆");
+        }
+        Row header = sheet.getRow(titleRow + 1);
+        if (header == null) {
+            throw new RuntimeException("銆屽叏鐪�" + targetMonth + "鏈堚�︽眹鎬昏〃銆嶆爣棰樺悗缂哄皯琛ㄥご琛岋紙甯傚窞/涓綋瀹㈣繍閲�/涓綋鏃呭鍛ㄨ浆閲忥級");
+        }
+        int cityCol = -1, passCol = -1, turnCol = -1;
+        for (Cell c : header) {
+            String h = FORMATTER.formatCellValue(c).trim();
+            if (h.isEmpty()) continue;
+            if (h.contains("甯傚窞")) cityCol = c.getColumnIndex();
+            else if (h.contains("涓綋") && h.contains("瀹㈣繍閲�")) passCol = c.getColumnIndex();
+            else if (h.contains("涓綋") && (h.contains("鍛ㄨ浆閲�") || h.contains("鍛ㄨ浆"))) turnCol = c.getColumnIndex();
+        }
+        if (cityCol < 0 || (passCol < 0 && turnCol < 0)) {
+            throw new RuntimeException("鏈壘鍒般�屽競宸� / 涓綋瀹㈣繍閲� / 涓綋鏃呭鍛ㄨ浆閲忋�嶅垪锛岃浣跨敤绯荤粺妯℃澘鏁寸悊鍚庡鍏�");
+        }
+        int lastRow = Math.min(sheet.getLastRowNum(), titleRow + 40);
+        for (int r = titleRow + 2; r <= lastRow; r++) {
+            Row row = sheet.getRow(r);
+            if (row == null) continue;
+            String first = getString(row, cityCol);
+            if (first == null) break;
+            String t = first.trim();
+            if (t.isEmpty() || t.contains("鍚堣") || t.contains("鐜瘮") || t.contains("鍏ㄧ渷")) break;
+            String city = RegionUtil.normalizeCityName(t);
+            if (!RegionUtil.cityList().contains(city)) continue;
+            Double pass = passCol >= 0 ? getDecimalOrNull(row, passCol) : null;
+            Double turn = turnCol >= 0 ? getDecimalOrNull(row, turnCol) : null;
+            if ((pass == null || pass == 0.0) && (turn == null || turn == 0.0)) continue;
+            PassengerIndividualMonthly entity = new PassengerIndividualMonthly();
+            entity.setReportPeriod(period);
+            entity.setRegionCode(RegionUtil.codeOfCity(city));
+            entity.setEnterpriseName(city);
+            entity.setPassengerCount(pass);
+            entity.setTurnover(turn);
+            rows.add(entity);
+        }
     }
 
     /** 鍏矾鏃呭杩愭斂杞﹁締鏁帮紙鐙珛妯℃澘锛氫紒涓氫唬鐮�/浼佷笟鍚嶇О/杞﹁締鏁�/杞藉浣嶆暟锛� */
@@ -531,6 +605,10 @@
     /** 鑳借�楁槑缁嗘瘡缁勫浐瀹�18鍒楋紝杞︾墝鍙疯捣濮嬪垪锛�0-based锛夛細3,21,39,57,75 */
     private static final int[] ENERGY_GROUP_COLS = {3, 21, 39, 57, 75};
 
+    /** 鑳借�楁槑缁嗘ā鏉胯〃澶村叧閿垪锛�0-based锛夛細绋嬪簭鎸夊浐瀹氬垪浣嶈В鏋愶紝瑙f瀽鍓嶆牎楠岃〃澶达紝閿欎綅鐩存帴鎷掔粷 */
+    private static final int[] ENERGY_HEADER_COLS = {3, 4, 5, 21, 39, 57, 75};
+    private static final String[] ENERGY_HEADER_KEYWORDS = {"杞︾墝鍙�", "杞﹁締绫诲瀷", "鐕冩枡绫诲瀷", "杞︾墝鍙�", "杞︾墝鍙�", "杞︾墝鍙�", "杞︾墝鍙�"};
+
     /** 鑳借�楀鍏ユ寜鎶ヨ〃鏈熶簰鏂ラ攣锛圚204 鏄庣粏涓庤繍鏀夸俊鎭叡鐢紝閬垮厤鍚屾姤琛ㄦ湡骞跺彂閲嶅浜掔浉瑕嗙洊锛� */
     private Object energyLock(String period) {
         return energyImportLocks.computeIfAbsent(period == null ? "" : period, k -> new Object());
@@ -543,6 +621,7 @@
             // sheet0: 绗簩瀛e害璐ц溅鑳借�楁槑缁嗭紙姣忚宸﹀彸鍚�5缁勮溅杈嗭紝姣忕粍鍥哄畾18鍒楋級
             Sheet sheet = wb.getSheetAt(0);
             requireHeaderKeyword(sheet, "閬撹矾璐ц繍杞﹁締鑳芥簮娑堣�楁儏鍐�", "浼佷笟鍚嶇О", "杞︾墝鍙�");
+            requireEnergyHeaderLayout(sheet);
             for (int r = 1; r <= sheet.getLastRowNum(); r++) {
                 Row row = sheet.getRow(r);
                 if (row == null) continue;
@@ -665,6 +744,12 @@
         try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
             Sheet sheet = wb.getSheetAt(0);
             requireHeaderKeyword(sheet, "鑳借�楄溅杈嗚繍鏀夸俊鎭�", "杞︾墝鍙�");
+            Row authHeader = sheet.getRow(0);
+            String authH0 = authHeader == null ? null : FORMATTER.formatCellValue(authHeader.getCell(0)).trim();
+            if (authH0 == null || authH0.isEmpty() || !authH0.contains("杞︾墝鍙�")) {
+                throw new RuntimeException("鑳借�楄溅杈嗚繍鏀夸俊鎭〃澶翠笌绯荤粺妯℃澘涓嶄竴鑷达細绗� 1 鍒楀簲涓恒�岃溅鐗屽彿銆嶏紝瀹為檯涓恒��"
+                    + (authH0 == null || authH0.isEmpty() ? "绌�" : authH0) + "銆嶃�傝浣跨敤绯荤粺妯℃澘銆婃ā鏉縚鑳借�楄溅杈嗚繍鏀夸俊鎭�.xlsx銆嬫暣鐞嗗悗鍐嶅鍏�");
+            }
             for (int r = 1; r <= sheet.getLastRowNum(); r++) {
                 Row row = sheet.getRow(r);
                 if (row == null) continue;
@@ -730,25 +815,27 @@
 
     // ========== 杩愭斂杞﹁締 ==========
 
+    /** 杩愭斂杞﹁締瀵煎叆锛氫笌 H203-2 鏈堟姤涓�鑷达紝鎸夎〃澶村悕绉板畾浣嶅垪锛屽垪椤哄簭鍙樺寲涔熻兘姝g‘瀵煎叆 */
     public int importTransportAuth(MultipartFile file, String period) throws Exception {
         List<TransportAuthVehicle> list = new ArrayList<>();
         int failRows = 0;
         try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
             Sheet sheet = wb.getSheetAt(0);
-            requireHeaderKeyword(sheet, "杩愭斂杞﹁締", "浼佷笟鍚嶇О");
+            requireHeaderCols(sheet, "杩愭斂杞﹁締", "浼佷笟鍚嶇О", "鎬荤壍寮曡溅鏁�", "鎬绘寕杞︽暟", "鍏跺畠杞﹁締鏁�", "鎸傝溅鎬诲惃浣�(鍚�)", "鍏跺畠杞﹁締鎬诲惃浣�(鍚�)");
+            Map<String, Integer> colMap = buildHeaderMap(sheet.getRow(0));
             for (int r = 1; r <= sheet.getLastRowNum(); r++) {
                 Row row = sheet.getRow(r);
                 if (row == null) continue;
-                String name = getString(row, 0);
+                String name = gs(row, colMap, "浼佷笟鍚嶇О");
                 if (name == null || name.trim().isEmpty()) continue;
                 TransportAuthVehicle entity = new TransportAuthVehicle();
                 entity.setReportPeriod(period);
                 entity.setEnterpriseName(name);
-                entity.setTractorCount(getInt(row, 1));
-                entity.setTrailerCount(getInt(row, 2));
-                entity.setOtherCount(getInt(row, 3));
-                entity.setTrailerTons(getDecimal(row, 4));
-                entity.setOtherTons(getDecimal(row, 5));
+                entity.setTractorCount(gi(row, colMap, "鎬荤壍寮曡溅鏁�"));
+                entity.setTrailerCount(gi(row, colMap, "鎬绘寕杞︽暟"));
+                entity.setOtherCount(gi(row, colMap, "鍏跺畠杞﹁締鏁�"));
+                entity.setTrailerTons(gd(row, colMap, "鎸傝溅鎬诲惃浣�(鍚�)"));
+                entity.setOtherTons(gd(row, colMap, "鍏跺畠杞﹁締鎬诲惃浣�(鍚�)"));
                 list.add(entity);
             }
         } catch (Exception e) {
@@ -778,21 +865,23 @@
 
     // ========== 杞ㄨ抗閲岀▼ ==========
 
+    /** 杞ㄨ抗閲岀▼瀵煎叆锛氫笌 H203-2 鏈堟姤涓�鑷达紝鎸夎〃澶村悕绉板畾浣嶅垪锛屽垪椤哄簭鍙樺寲涔熻兘姝g‘瀵煎叆 */
     public int importTrackMileage(MultipartFile file, String period) throws Exception {
         List<VehicleTrackMileage> list = new ArrayList<>();
         int failRows = 0;
         try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
             Sheet sheet = wb.getSheetAt(0);
-            requireHeaderKeyword(sheet, "杞ㄨ抗閲岀▼", "浼佷笟鍚嶇О");
+            requireHeaderCols(sheet, "杞ㄨ抗閲岀▼", "浼佷笟鍚嶇О", "鏈堝害鎬婚噷绋�(鍏噷)", "鏈夐噷绋嬬殑杞﹁締鏁�");
+            Map<String, Integer> colMap = buildHeaderMap(sheet.getRow(0));
             for (int r = 1; r <= sheet.getLastRowNum(); r++) {
                 Row row = sheet.getRow(r);
                 if (row == null) continue;
-                String name = getString(row, 1);
+                String name = gs(row, colMap, "浼佷笟鍚嶇О");
                 if (name == null || name.trim().isEmpty()) continue;
                 VehicleTrackMileage entity = new VehicleTrackMileage();
                 entity.setEnterpriseName(name);
-                entity.setMonthlyMileage(getDecimal(row, 2));
-                entity.setTrackedVehicles(getInt(row, 3));
+                entity.setMonthlyMileage(gd(row, colMap, "鏈堝害鎬婚噷绋�(鍏噷)"));
+                entity.setTrackedVehicles(gi(row, colMap, "鏈夐噷绋嬬殑杞﹁締鏁�"));
                 entity.setReportPeriod(period);
                 list.add(entity);
             }
@@ -842,6 +931,20 @@
                 if (sheetName.contains("褰撴湀")) periodType = "MONTH";
                 else if (sheetName.contains("绱")) periodType = "CUMULATIVE";
                 if (periodType == null) continue;
+
+                // 鏍¢獙 sheet 甯冨眬锛氱2琛屽簲鍚�屽競宸�/瑙勪笂浼佷笟杩愯緭閲忋�嶏紝绗�3琛屽瓙琛ㄥご搴斿惈銆屽懆杞噺銆嶆垨銆岃揣杩愰噺銆嶏紙鎵╁睍甯冨眬锛�
+                Row headRow = sheet.getRow(1);
+                Row subHeadRow = sheet.getRow(2);
+                boolean layoutOk = headRow != null
+                    && getString(headRow, 0) != null && getString(headRow, 0).contains("甯傚窞")
+                    && getString(headRow, 1) != null && getString(headRow, 1).contains("瑙勪笂")
+                    && subHeadRow != null
+                    && ("璐ц繍閲�".equals(getString(subHeadRow, 0))
+                        || (getString(subHeadRow, 1) != null && getString(subHeadRow, 1).contains("鍛ㄨ浆閲�")));
+                if (!layoutOk) {
+                    throw new RuntimeException("鎵�閫夋暟鎹被鍨嬨�愯涓婅涓嬫媶鍒嗐�戜笌鏂囦欢鍐呭涓嶇锛歴heet銆�" + sheetName
+                        + "銆嶆湭鎵惧埌銆屽競宸�/瑙勪笂浼佷笟杩愯緭閲�/鍛ㄨ浆閲忋�嶈〃澶达紝璇风‘璁ゆ槸鍚﹂�夐敊浜嗘暟鎹被鍨�");
+                }
 
                 // 妫�娴嬪瓙琛ㄥご锛氭槸鍚﹀寘鍚揣杩愰噺鍒楋紙鎵╁睍甯冨眬锛�
                 Row subHeader = sheet.getRow(2);
@@ -925,6 +1028,12 @@
         int monthCount = Integer.parseInt(period.split("-")[1]);
         try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
             Sheet sheet = wb.getSheetAt(0);
+            Row header = sheet.getRow(0);
+            String h0 = header == null ? null : getString(header, 0);
+            String h1 = header == null ? null : getString(header, 1);
+            if (header == null || h0 == null || !h0.contains("璐ц繍閲�") || h1 == null || !h1.contains("鏈�")) {
+                throw new RuntimeException("鎵�閫夋暟鎹被鍨嬨�愯揣杩愰噺鍛ㄨ浆閲忋�戜笌鏂囦欢鍐呭涓嶇锛氳〃澶村簲涓恒�岃揣杩愰噺(涓囧惃)/1鏈堚��12鏈堛�嶅竷灞�锛岃纭鏄惁閫夐敊浜嗘暟鎹被鍨�");
+            }
             boolean cityRowFound = false;
             for (int r = 1; r <= Math.min(sheet.getLastRowNum(), 30); r++) {
                 Row rr = sheet.getRow(r);
@@ -1218,6 +1327,43 @@
             }
         }
         throw new RuntimeException("鎵�閫夋暟鎹被鍨嬨��" + typeLabel + "銆戜笌鏂囦欢鍐呭涓嶇锛氳〃澶存湭鍖呭惈銆�" + String.join("銆戙��", keywords) + "銆戠瓑鍒楋紝璇风‘璁ゆ槸鍚﹂�夐敊浜嗘暟鎹被鍨�");
+    }
+
+    /** 鑳借�楁槑缁嗚〃澶村垪浣嶆牎楠岋細绯荤粺妯℃澘涓衡�滃墠3鍒� + 5缁劽�18鍒椻�濓紝绋嬪簭鎸夊浐瀹氬垪浣嶈В鏋愶紝琛ㄥご閿欎綅浼氬鑷存暣琛ㄩ敊涔憋紝閿欎綅鏃剁洿鎺ユ嫆缁� */
+    private void requireEnergyHeaderLayout(Sheet sheet) {
+        Row header = sheet == null ? null : sheet.getRow(0);
+        if (header == null) {
+            throw new RuntimeException("鑳借�楁槑缁嗚〃澶寸己澶憋紝璇蜂娇鐢ㄧ郴缁熸ā鏉裤�婃ā鏉縚閬撹矾璐ц繍杞﹁締鑳芥簮娑堣�楁儏鍐碉紙2026锛�.xlsx銆嬫暣鐞嗗悗鍐嶅鍏�");
+        }
+        for (int i = 0; i < ENERGY_HEADER_COLS.length; i++) {
+            int col = ENERGY_HEADER_COLS[i];
+            String keyword = ENERGY_HEADER_KEYWORDS[i];
+            Cell cell = header.getCell(col);
+            String hv = cell == null ? null : FORMATTER.formatCellValue(cell).trim();
+            if (hv == null || hv.isEmpty() || !hv.contains(keyword)) {
+                throw new RuntimeException("琛ㄥご涓庣郴缁熸ā鏉夸笉涓�鑷达細绗� " + (col + 1) + " 鍒楀簲涓恒��" + keyword + "銆嶏紝瀹為檯涓恒��"
+                    + (hv == null || hv.isEmpty() ? "绌�" : hv) + "銆嶃�傝浣跨敤绯荤粺妯℃澘銆婃ā鏉縚閬撹矾璐ц繍杞﹁締鑳芥簮娑堣�楁儏鍐碉紙2026锛�.xlsx銆嬫暣鐞嗗悗鍐嶅鍏�");
+            }
+        }
+    }
+
+    /** 閫氱敤琛ㄥご鍒椾綅鏍¢獙锛氱▼搴忔寜鍥哄畾鍒椾綅瑙f瀽锛岃〃澶撮敊浣嶄細瀵艰嚧鏁磋〃閿欎贡锛岄敊浣嶆椂鐩存帴鎷掔粷瀵煎叆 */
+    private void requireHeaderLayout(Sheet sheet, String typeLabel, String templateHint,
+                                     int[] cols, String[] keywords) {
+        Row header = sheet == null ? null : sheet.getRow(0);
+        if (header == null) {
+            throw new RuntimeException("鎵�閫夋暟鎹被鍨嬨��" + typeLabel + "銆戞枃浠惰〃澶寸己澶憋紝璇蜂娇鐢ㄧ郴缁熸ā鏉裤��" + templateHint + "銆嬫暣鐞嗗悗鍐嶅鍏�");
+        }
+        for (int i = 0; i < cols.length; i++) {
+            int col = cols[i];
+            String keyword = keywords[i];
+            Cell cell = header.getCell(col);
+            String hv = cell == null ? null : FORMATTER.formatCellValue(cell).trim();
+            if (hv == null || hv.isEmpty() || !hv.contains(keyword)) {
+                throw new RuntimeException("琛ㄥご涓庣郴缁熸ā鏉夸笉涓�鑷达細绗� " + (col + 1) + " 鍒楀簲涓恒��" + keyword + "銆嶏紝瀹為檯涓恒��"
+                    + (hv == null || hv.isEmpty() ? "绌�" : hv) + "銆嶃�傛墍閫夋暟鎹被鍨嬨��" + typeLabel + "銆戣浣跨敤绯荤粺妯℃澘銆�" + templateHint + "銆嬫暣鐞嗗悗鍐嶅鍏�");
+            }
+        }
     }
 
     /** 鎸夎〃澶村悕绉板缓绔嬪垪鍙锋槧灏勶紝鍏煎鏂版棫妯℃澘鍒椾綅宸紓 */
@@ -1792,8 +1938,10 @@
         if (name == null || name.isEmpty()) return false;
         String norm = name.replace(" ", "");
         int month = Integer.parseInt(period.substring(5, 7));
+        String normDash = norm.replace('.', '-'); // "2026.8"/"2026.08" -> "2026-8"/"2026-08"
         return norm.contains(month + "鏈�") || norm.contains(String.format("%02d", month) + "鏈�")
-            || name.contains(period) || name.contains(period.replace("-0", "-"));
+            || name.contains(period) || name.contains(period.replace("-0", "-"))
+            || normDash.contains(period) || normDash.contains(period.replace("-0", "-"));
     }
 
     /** 瑙f瀽鍗曚釜甯傚窞鎶ヨ〃锛氶�� sheet锛堟姤琛ㄦ湡鍚嶄紭鍏� + 鏁版嵁琛屾暟锛夛紝鎸夊垪鍚嶆槧灏勬彁鍙栭」鐩 */
@@ -1808,6 +1956,11 @@
             if (col == null) continue;
             int cnt = countInvestRows(sh, col);
             int score = cnt + (cnt > 0 && investSheetMatchesPeriod(sh, period) ? 1000000 : 0);
+            if (cnt > 0 && investSheetMatchesPeriod(sh, period)) {
+                // 褰撴湡鐪熷疄鎶ヨ〃 sheet 鍚嶉�氬父甯﹀勾浠斤紙濡� 2026.8/2026骞�8鏈堬級锛屽巻鍙瞫heet澶氫负绾湀浠藉悕锛�8鏈堬級锛氬甫骞翠唤鐨勪紭鍏�
+                String norm = sh.getSheetName() == null ? "" : sh.getSheetName().replace(" ", "");
+                if (norm.contains(period.substring(0, 4))) score += 100000;
+            }
             if (score > bestScore) {
                 best = sh;
                 bestCol = col;
@@ -1852,10 +2005,12 @@
                 if (seq == null || seq.trim().isEmpty()) {
                     // 甯傚窞灏忚妭琛岋紙濡� "姝︽眽" "澶� 闂�"锛夛紝鏇存柊褰撳墠甯傚窞
                     String c = investmentCity(nt);
-                    if (c != null) currentCity = c;
+                    if (c != null) { currentCity = c; continue; }
+                    // 搴忓彿涓虹┖鐨勭湡瀹為」鐩锛堥儴鍒嗗競宸炴湀鎶ヤ笉濉簭鍙凤紝濡傜鍐滄灦鐗╂祦鍥級涔熸寜椤圭洰澶勭悊
+                    if (!isLikelyInvestProjectName(nt)) continue;
+                } else if (!seq.trim().matches("\\d+(\\.\\d+)?")) {
                     continue;
                 }
-                if (!seq.trim().matches("\\d+(\\.\\d+)?")) continue;
             } else {
                 // 鏃犲簭鍙峰垪锛堥殢宸炵瓑锛夛細椤圭洰鍚嶉潪绌哄嵆椤圭洰琛岋紝甯傚窞灏忚妭琛岀敤 investmentCity 璇嗗埆
                 String c = investmentCity(nt);
@@ -1980,7 +2135,11 @@
                 if (nt.length() > 4) count++;
             } else {
                 String seq = cellStr(row, seqCol);
-                if (seq != null && seq.trim().matches("\\d+(\\.\\d+)?")) count++;
+                if (seq != null && seq.trim().matches("\\d+(\\.\\d+)?")) {
+                    count++;
+                } else if ((seq == null || seq.trim().isEmpty()) && isLikelyInvestProjectName(nt)) {
+                    count++;
+                }
             }
         }
         return count;
@@ -2050,6 +2209,15 @@
             log.error("load five year project names error", e);
         }
         return names;
+    }
+
+    /** 搴忓彿涓虹┖鐨勯潪甯傚窞琛屾槸鍚﹀儚椤圭洰琛岋細闀垮害>4 涓旈潪澶囨敞/璇存槑绛夋潅椤� */
+    private boolean isLikelyInvestProjectName(String nt) {
+        if (nt == null || nt.length() <= 4) return false;
+        if (investmentCity(nt) != null) return false;
+        return !nt.startsWith("澶囨敞") && !nt.startsWith("璇存槑") && !nt.startsWith("娉細")
+            && !nt.startsWith("濉〃") && !nt.startsWith("瀹℃牳") && !nt.startsWith("缁熻")
+            && !nt.startsWith("璐熻矗");
     }
 
     /** 椤圭洰鍚嶈鑼冨寲锛氬幓绌虹櫧/鎹㈣/鎷彿鍐呭/鏍囩偣/銆岄」鐩�嶅悗缂�锛岀敤浜庡崄浜斾簲娓呭崟鍖归厤 */
@@ -2228,12 +2396,18 @@
         }
     }
     /** 鎶曡祫绯荤粺瀵煎嚭瀵煎叆锛堝鏍告瘮瀵瑰熀鍑嗭級锛屽浐瀹�8鍒楋細琛屽彿/鍗曚綅/鏃舵湡/璁″垝鎬绘姇璧�/鑷紑濮嬬疮璁�/鏈勾璁″垝/鑷勾鍒濈疮璁�/褰撴湀瀹屾垚 */
+    private static final int[] INVEST_SYSTEM_HEADER_COLS = {0, 1, 2, 3, 4, 5, 6, 7};
+    private static final String[] INVEST_SYSTEM_HEADER_KEYWORDS =
+        {"琛屽彿", "鍗曚綅", "鏃舵湡", "璁″垝鎬绘姇璧�", "鑷紑濮嬪缓璁�", "鏈勾璁″垝鎶曡祫", "鑷勾鍒�", "褰撴湀瀹屾垚鎶曡祫"};
+
     public int importInvestmentSystem(MultipartFile file, String period) throws Exception {
         List<InvestmentSystem> list = new ArrayList<>();
         int failRows = 0;
         try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
             Sheet sheet = wb.getSheetAt(0);
             requireHeaderKeyword(sheet, "鎶曡祫绯荤粺瀵煎嚭", "椤圭洰鍚嶇О", "璁″垝鎬绘姇璧�", "鍗曚綅");
+            requireHeaderLayout(sheet, "鎶曡祫绯荤粺瀵煎嚭", "妯℃澘_鏌ヨ缁撴灉(鎶曡祫绯荤粺-瀹㈣繍+鐗╂祦 2026.7).xls",
+                INVEST_SYSTEM_HEADER_COLS, INVEST_SYSTEM_HEADER_KEYWORDS);
             for (int r = 1; r <= sheet.getLastRowNum(); r++) {
                 Row row = sheet.getRow(r);
                 if (row == null) continue;
@@ -2271,15 +2445,18 @@
     }
 
     /** 鍩庡競鍏氦鏈堟姤瀵煎叆锛堝煄甯傚叕鍏变氦閫氭湀搴﹁繍钀ユ儏鍐碉紝浼佷笟绾ф槑缁嗭紝鍙栧叕鍏辨苯鐢佃溅瀛楁锛� */
+    /** 鍩庡競鍏氦锛圲203锛夋ā鏉垮叧閿垪浣嶏紙0-based锛夛細鎵�灞炲湴鍖�/浼佷笟浠g爜/浼佷笟鍚嶇О/杩愯惀杞︽暟/瀹㈣繍閲�/杞ㄩ亾瀹㈣繍閲�/杞浮瀹㈣繍閲�/骞冲潎杩愯窛/濉〃浜�/鑱旂郴鐢佃瘽/鎶ュ嚭鏃ユ湡 */
+    private static final int[] CITY_BUS_HEADER_COLS = {0, 1, 2, 5, 8, 13, 17, 19, 24, 25, 26};
+    private static final String[] CITY_BUS_HEADER_KEYWORDS =
+        {"鎵�灞炲湴鍖�", "浼佷笟浠g爜", "浼佷笟鍚嶇О", "鍏叡姹界數杞杩愯惀杞︽暟", "鍏叡姹界數杞瀹㈣繍閲�", "杞ㄩ亾浜ら�歘瀹㈣繍閲�",
+         "鍩庡競瀹㈣繍杞浮_瀹㈣繍閲�", "鍏叡姹界數杞﹀钩鍧囪繍璺�", "濉〃浜�", "鑱旂郴鐢佃瘽", "鎶ュ嚭鏃ユ湡"};
+
     public ImportResult importCityBus(MultipartFile file, String period) throws Exception {
         List<CityBusRow> rows = new ArrayList<>();
         try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
             Sheet sheet = wb.getSheetAt(0);
-            Row header = sheet.getRow(0);
-            if (header == null || getString(header, 2) == null
-                    || !getString(header, 2).contains("浼佷笟鍚嶇О")) {
-                throw new RuntimeException("鏈壘鍒拌〃澶磋锛堥渶鍖呭惈 浼佷笟鍚嶇О 鍒楋級");
-            }
+            requireHeaderLayout(sheet, "鍩庡競鍏氦", "妯℃澘_浜や紒缁烾203琛╛鍩庡競鍏叡浜ら�氭湀搴﹁繍钀ユ儏鍐碉紙2026骞�7鏈堬級.xls",
+                CITY_BUS_HEADER_COLS, CITY_BUS_HEADER_KEYWORDS);
             for (int r = 1; r <= sheet.getLastRowNum(); r++) {
                 Row row = sheet.getRow(r);
                 if (row == null) continue;
@@ -2383,15 +2560,18 @@
     }
 
     /** 宸℃父鍑虹鏈堟姤瀵煎叆锛堝競宸炵骇锛�17 琛岋紱鍚牳瀹炶鏄�/涓婃姤璇存槑/淇敼璁板綍锛� */
+    /** 宸℃父鍑虹锛圲402锛夋ā鏉垮叧閿垪浣嶏紙0-based锛夛細鎵�灞炲湴鍖�/浼佷笟浠g爜/浼佷笟鍚嶇О/杞藉杞︽鎬绘暟/瀹㈣繍閲�/鏃呭鍛ㄨ浆閲�/杩愯惀杞﹁締鏁�/骞冲潎杩愯窛/濉〃浜�/鑱旂郴鐢佃瘽/鎶ュ嚭鏃ユ湡 */
+    private static final int[] CITY_TAXI_HEADER_COLS = {0, 1, 2, 4, 6, 8, 10, 11, 15, 16, 17};
+    private static final String[] CITY_TAXI_HEADER_KEYWORDS =
+        {"鎵�灞炲湴鍖�", "浼佷笟浠g爜", "浼佷笟鍚嶇О", "杞藉杞︽鎬绘暟", "瀹㈣繍閲�", "鏃呭鍛ㄨ浆閲�", "杩愯惀杞﹁締鏁�",
+         "宸℃父鍑虹姹借溅骞冲潎杩愯窛", "濉〃浜�", "鑱旂郴鐢佃瘽", "鎶ュ嚭鏃ユ湡"};
+
     public ImportResult importCityTaxi(MultipartFile file, String period) throws Exception {
         List<TaxiRow> rows = new ArrayList<>();
         try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
             Sheet sheet = wb.getSheetAt(0);
-            Row header = sheet.getRow(0);
-            if (header == null || getString(header, 2) == null
-                    || !getString(header, 2).contains("浼佷笟鍚嶇О")) {
-                throw new RuntimeException("鏈壘鍒拌〃澶磋锛堥渶鍖呭惈 浼佷笟鍚嶇О 鍒楋級");
-            }
+            requireHeaderLayout(sheet, "宸℃父鍑虹", "妯℃澘_浜よ缁烾402琛�-宸℃父鍑虹姹借溅杩愯惀鏈嶅姟鎯呭喌鏈堟姤(2026).xls",
+                CITY_TAXI_HEADER_COLS, CITY_TAXI_HEADER_KEYWORDS);
             for (int r = 1; r <= sheet.getLastRowNum(); r++) {
                 Row row = sheet.getRow(r);
                 if (row == null) continue;
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/controller/ReportExportController.java b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/controller/ReportExportController.java
index 9594638..6560740 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/controller/ReportExportController.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/controller/ReportExportController.java
@@ -151,7 +151,7 @@
     public ResponseEntity<byte[]> exportCityPassengerCitySum(@RequestParam("period") String period,
                                                               @RequestParam(value = "mode", defaultValue = "month") String mode) throws Exception {
         logExport("鐢熸垚_鍩庡競瀹㈣繍瀹㈣繍閲忓垎甯傚窞绱.xlsx", period);
-        return buildResponse(reportService.exportCityPassengerCitySum("瀵煎叆妯℃澘_鍩庡競鍒嗗競宸�.xlsx", period, mode), "鐢熸垚_鍩庡競瀹㈣繍瀹㈣繍閲忓垎甯傚窞绱.xlsx");
+        return buildResponse(reportService.exportCityPassengerCitySum("鐢熸垚_鍩庡競瀹㈣繍瀹㈣繍閲忓垎甯傚窞绱.xlsx", period, mode), "鐢熸垚_鍩庡競瀹㈣繍瀹㈣繍閲忓垎甯傚窞绱.xlsx");
     }
 
     /** 鐢熸垚_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx锛堝煄甯傚杩愬悇甯傚窞鏄庣粏琛╛妯℃澘搴曠锛� */
@@ -159,7 +159,7 @@
     public ResponseEntity<byte[]> exportCityPassengerDetailSum(@RequestParam("period") String period,
                                                                 @RequestParam(value = "mode", defaultValue = "month") String mode) throws Exception {
         logExport("鐢熸垚_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx", period);
-        return buildResponse(reportService.exportCityPassengerCitySum("瀵煎叆妯℃澘_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx", period, mode), "鐢熸垚_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx");
+        return buildResponse(reportService.exportCityPassengerCitySum("鐢熸垚_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx", period, mode), "鐢熸垚_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx");
     }
 
     /** 鐢熸垚_鍩庡競瀹㈣繍姹囨��.xlsx锛堝煄甯傛眹鎬籣妯℃澘搴曠锛� */
@@ -275,5 +275,4 @@
             .body(data);
     }
 }
-
 
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
index 945a762..c1c3bd1 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
@@ -665,17 +665,58 @@
             totalYoy.put(city, freightCumYoy(ftMap.get(city), month));
         }
 
+
+        // ===== 绗簩椤碉紙褰撴湀锛夋暟鎹細瑙勪笂=H2032 褰撴湀銆佸悎璁�=妯℃澘_璐ц繍閲忓懆杞噺褰撴湀鍒椼�佽涓�=宸�硷紱鍚屾瘮=鍘诲勾鍚屾湀 =====
+        Map<String, Map<Integer, Double>> h2032MonthCur = loadH2032FreightByMonth(period);
+        String lastYearPeriod = (Integer.parseInt(year) - 1) + period.substring(4);
+        Map<String, Map<Integer, Double>> h2032MonthLast = loadH2032FreightByMonth(lastYearPeriod);
+        Map<String, Double> monthAbove = new HashMap<>();
+        Map<String, Double> monthBelow = new HashMap<>();
+        Map<String, Double> monthTotal = new HashMap<>();
+        Map<String, Double> monthAboveYoy = new HashMap<>();
+        Map<String, Double> monthBelowYoy = new HashMap<>();
+        Map<String, Double> monthTotalYoy = new HashMap<>();
+        double provMonthAbove = 0.0, provMonthAboveLast = 0.0;
+        for (String city : RegionUtil.cityList()) {
+            Double ma = monthFreightWan(h2032MonthCur, city, month);
+            Double maLast = monthFreightWan(h2032MonthLast, city, month);
+            Double mt = freightMonth(ftMap.get(city), month);
+            Double mtLast = lastFreightMonth(ftMap.get(city), month);
+            if (ma != null) provMonthAbove += ma;
+            if (maLast != null) provMonthAboveLast += maLast;
+            monthAbove.put(city, ma);
+            monthTotal.put(city, mt);
+            monthBelow.put(city, mt == null ? null : round(mt - (ma == null ? 0.0 : ma), 4));
+            monthAboveYoy.put(city, growthYoy(ma, maLast));
+            Double mb = monthBelow.get(city);
+            Double mbLast = mtLast == null ? null : round(mtLast - (maLast == null ? 0.0 : maLast), 4);
+            monthBelowYoy.put(city, growthYoy(mb, mbLast));
+            monthTotalYoy.put(city, freightYoy(ftMap.get(city), month));
+        }
+        Double provMonthAboveWan = provMonthAbove == 0.0 ? null : round(provMonthAbove, 4);
+        Double provMonthTotal = freightMonth(ftMap.get("婀栧寳鐪�"), month);
+        Double provMonthBelow = provMonthTotal == null ? null : round(provMonthTotal - provMonthAbove, 4);
+        Double provMonthAboveYoy = growthYoy(provMonthAbove == 0.0 ? null : provMonthAbove, provMonthAboveLast);
+        Double provMonthTotalLast = lastFreightMonth(ftMap.get("婀栧寳鐪�"), month);
+        Double provMonthBelowLast = provMonthTotalLast == null ? null
+            : round(provMonthTotalLast - provMonthAboveLast, 4);
+        Double provMonthBelowYoy = growthYoy(provMonthBelow, provMonthBelowLast);
+        Double provMonthTotalYoy = freightYoy(ftMap.get("婀栧寳鐪�"), month);
+
         // 浠� docs/璐ц繍/鐢熸垚_璐ц繍閲忔帓鍚�.xlsx 涓哄簳绋匡細淇濈暀琛ㄥご/鍚堝苟/鍒楀/鏍峰紡涓� Q/R 鍗犳瘮鍏紡锛屼粎鏇挎崲鏁版嵁
         File template = resolveFreightTemplate("鐢熸垚_璐ц繍閲忔帓鍚�.xlsx");
         try (InputStream in = new FileInputStream(template);
              XSSFWorkbook wb = new XSSFWorkbook(in)) {
             Sheet sheet = wb.getSheetAt(0);
             sheet.getRow(0).getCell(0).setCellValue(year + "骞�" + cumRange(month) + "鍏ㄧ渷鍒嗗競宸炵疮璁″畬鎴愬叕璺揣杩愰噺鎯呭喌");
-            sheet.getRow(22).getCell(0).setCellValue(year + "骞�" + month + "鏈堝叏鐪佸垎甯傚窞绱瀹屾垚鍏矾璐ц繍閲忔儏鍐�");
+            sheet.getRow(22).getCell(0).setCellValue(year + "骞�" + month + "鏈堝叏鐪佸垎甯傚窞瀹屾垚鍏矾璐ц繍閲忔儏鍐�");
             fillFreightRankBlock(sheet, 3, above, below, total, aboveYoy, belowYoy, totalYoy,
                 provAboveWan, provBelow, provTotal, provAboveYoy, provBelowYoy, provTotalYoy);
-            fillFreightRankBlock(sheet, 25, above, below, total, aboveYoy, belowYoy, totalYoy,
-                provAboveWan, provBelow, provTotal, provAboveYoy, provBelowYoy, provTotalYoy);
+            renameRankMonthHeader(sheet, 24);
+            fillFreightRankBlock(sheet, 25, monthAbove, monthBelow, monthTotal,
+                monthAboveYoy, monthBelowYoy, monthTotalYoy,
+                provMonthAboveWan, provMonthBelow, provMonthTotal,
+                provMonthAboveYoy, provMonthBelowYoy, provMonthTotalYoy);
             try {
                 wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
             } catch (Exception e) {
@@ -693,15 +734,27 @@
         Map<String, ScaleSplitTransport> cumMap = loadCumulativeMap(period);
         ScaleSplitTransport province = getProvinceCumulative(period);
 
+        // 褰撴湀锛堢浜岄〉锛夛細鍛ㄨ浆閲忔媶鍒嗚〃 MONTH 琛岋紙鍚綋鏈堝悓姣旓級
+        Map<String, ScaleSplitTransport> monthTurnover = new HashMap<>();
+        for (ScaleSplitTransport rec : scaleSplitMapper.selectList(
+                new LambdaQueryWrapper<ScaleSplitTransport>()
+                    .eq(ScaleSplitTransport::getPeriodType, "MONTH")
+                    .eq(ScaleSplitTransport::getReportPeriod, period))) {
+            String name = RegionUtil.normalizeCityName(rec.getRegionName());
+            if (name != null) monthTurnover.put(name, rec);
+        }
+        ScaleSplitTransport provinceMonth = monthTurnover.remove("婀栧寳鐪�");
+
         // 浠� docs/璐ц繍/鐢熸垚_鍛ㄨ浆閲忔帓鍚�.xlsx 涓哄簳绋匡細淇濈暀琛ㄥご/鍚堝苟/鍒楀/鏍峰紡锛屼粎鏇挎崲鏁版嵁锛決/R 鍗犳瘮涓烘ā鏉跨紦瀛樺�硷紝鎸夋柊鏁版嵁閲嶇畻
         File template = resolveFreightTemplate("鐢熸垚_鍛ㄨ浆閲忔帓鍚�.xlsx");
         try (InputStream in = new FileInputStream(template);
              XSSFWorkbook wb = new XSSFWorkbook(in)) {
             Sheet sheet = wb.getSheetAt(0);
             sheet.getRow(0).getCell(0).setCellValue(year + "骞�" + cumRange(month) + "鍏ㄧ渷鍒嗗競宸炵疮璁″畬鎴愬叕璺揣鐗╄繍杈撳懆杞噺鎯呭喌");
-            sheet.getRow(22).getCell(0).setCellValue(year + "骞�" + month + "鏈堝叏鐪佸垎甯傚窞绱瀹屾垚鍏矾璐х墿杩愯緭鍛ㄨ浆閲忔儏鍐�");
+            sheet.getRow(22).getCell(0).setCellValue(year + "骞�" + month + "鏈堝叏鐪佸垎甯傚窞瀹屾垚鍏矾璐х墿杩愯緭鍛ㄨ浆閲忔儏鍐�");
             fillTurnoverRankBlock(sheet, 3, cumMap, province);
-            fillTurnoverRankBlock(sheet, 25, cumMap, province);
+            renameRankMonthHeader(sheet, 24);
+            fillTurnoverRankBlock(sheet, 25, monthTurnover, provinceMonth);
             return toBytes(wb);
         }
     }
@@ -994,6 +1047,31 @@
         setFreightCell(row, cumCol + 1, cumYoy);
     }
 
+    /** H2032 瑙勪笂鏌愭湀鍚堣锛堝惃鈫掍竾鍚級锛涙棤璇ユ湀鏁版嵁杩斿洖 null */
+    private Double monthFreightWan(Map<String, Map<Integer, Double>> byCityMonth, String city, int month) {
+        Map<Integer, Double> byMonth = byCityMonth == null ? null : byCityMonth.get(city);
+        Double v = byMonth == null ? null : byMonth.get(month);
+        return v == null ? null : round(v / 10000.0, 4);
+    }
+
+    /** 鍚屾瘮 = (鏈湡-鍩烘湡)/鍩烘湡锛涗换涓�鏈熺己澶辨垨鍩烘湡涓� 0 杩斿洖 null */
+    private Double growthYoy(Double cur, Double last) {
+        if (cur == null || last == null || last == 0.0) return null;
+        return (cur - last) / last;
+    }
+
+    /** 鎺掑悕琛ㄧ浜岄〉鍒楀ご銆岀疮璁″畬鎴愩�嶁啋銆屽綋鏈堝畬鎴愩�嶏紙浠呭鍑哄唴瀛樻浛鎹紝妯℃澘鏂囦欢涓嶆敼锛� */
+    private void renameRankMonthHeader(Sheet sheet, int headerRowIdx) {
+        Row row = sheet.getRow(headerRowIdx);
+        if (row == null) return;
+        for (int col : new int[]{1, 6, 11}) {
+            Cell c = row.getCell(col);
+            if (c == null || c.getCellType() != CellType.STRING) continue;
+            String s = c.getStringCellValue();
+            if (s != null && s.contains("绱瀹屾垚")) c.setCellValue(s.replace("绱瀹屾垚", "褰撴湀瀹屾垚"));
+        }
+    }
+
     /** 璐ц繍閲忔帓鍚嶅潡濉厖锛氭ā鏉� 1-based r4 璧凤紙鍏ㄧ渷+17甯傚窞锛夛紝Q/R 鍗犳瘮鍏紡淇濈暀涓嶅姩 */
     private void fillFreightRankBlock(Sheet sheet, int start,
                                       Map<String, Double> above, Map<String, Double> below, Map<String, Double> total,
@@ -1163,9 +1241,12 @@
     /** H2032瑙勪笂: city -> month -> 璐ц繍閲�(鍚�) */
     private Map<String, Map<Integer, Double>> loadH2032FreightByMonth(String period) {
         Map<String, Map<Integer, Double>> result = new HashMap<>();
+        String yearPrefix = period.length() >= 4 ? period.substring(0, 4) : null;
         List<H2032EnterpriseMonthly> list = h2032Mapper.selectList(null);
         for (H2032EnterpriseMonthly record : list) {
             if (record.getReportPeriod() == null || record.getReportPeriod().compareTo(period) > 0) continue;
+            // H2032 琛ㄥ悓鏃跺瓨鏈夊線骞存湀鎶ワ紝缁熻褰撳勾瑙勪笂鍊兼椂鍙彇涓庢姤琛ㄦ湡鍚屽勾鐨勮褰曪紝閬垮厤鍘诲勾鏁版嵁鍙犲姞
+            if (yearPrefix != null && !record.getReportPeriod().startsWith(yearPrefix)) continue;
             String city = RegionUtil.cityByCode(record.getRegionCode());
             if (city == null) continue;
             int month = parseMonth(record.getReportPeriod());
@@ -1178,9 +1259,11 @@
     /** H2032瑙勪笂绱: city -> 璐ц繍閲�(鍚�) */
     private Map<String, Double> loadH2032FreightCumulative(String period) {
         Map<String, Double> result = new HashMap<>();
+        String yearPrefix = period.length() >= 4 ? period.substring(0, 4) : null;
         List<H2032EnterpriseMonthly> list = h2032Mapper.selectList(null);
         for (H2032EnterpriseMonthly record : list) {
             if (record.getReportPeriod() == null || record.getReportPeriod().compareTo(period) > 0) continue;
+            if (yearPrefix != null && !record.getReportPeriod().startsWith(yearPrefix)) continue;
             String city = RegionUtil.cityByCode(record.getRegionCode());
             if (city == null) continue;
             double freight = record.getFreightTotal() == null ? 0.0 : record.getFreightTotal();
@@ -1945,6 +2028,7 @@
             // 绱鍚屾瘮鍒楋紙妯℃澘 #REF! 鈫� 搴撳唴鍘诲勾 1..N 鏈堢疮璁″悓姣旀暟鍊硷級
             fillMidCumYoyColumn(sheet, mid, currentYear, fillMonths, extended ? 27 : 15);
             recalc(wb);
+            clearFormulaErrorsAll(wb); // 鍘诲勾鍚屾湡鏄庣粏椤垫畫鐣� #REF! 鍚屾瘮鍏紡 鈫� 娓呯┖
             return toBytes(wb);
         }
     }
@@ -2195,11 +2279,20 @@
                     title.getCell(0).setCellValue(currentYear + "骞�1-" + maxMonth + "鏈堝叏鐪佸垎甯傚窞绱瀹屾垚閬撹矾瀹㈣繍鐢熶骇鎯呭喌");
                 }
             }
+            // 鍙冲潡锛堝綋鏈堬級鏍囬 K1
+            if (title != null && title.getCell(10) != null) {
+                title.getCell(10).setCellValue(currentYear + "骞�" + maxMonth + "鏈堝叏鐪佸垎甯傚窞瀹屾垚閬撹矾瀹㈣繍鐢熶骇鎯呭喌");
+            }
             // 鍏ㄧ渷琛� r3锛欱3/F3 涓� SUM 鍏紡淇濈暀锛汥3/H3 鍚屾瘮濉�硷紙0-based 鍒� 3/7锛�
             setValOrBlank(sheet, 2, 3, yoyOf(midCumClass(mid, currentYear, "婀栧寳鐪�", maxMonth, 0, true),
                 midCumClass(mid, currentYear - 1, "婀栧寳鐪�", maxMonth, 0, true)));
             setValOrBlank(sheet, 2, 7, yoyOf(midCumClass(mid, currentYear, "婀栧寳鐪�", maxMonth, 0, false),
                 midCumClass(mid, currentYear - 1, "婀栧寳鐪�", maxMonth, 0, false)));
+            // 鍙冲潡鍏ㄧ渷琛� N3/R3锛氬綋鏈堝悓姣旓紙L3/P3 涓� SUM 鍏紡淇濈暀锛�
+            setValOrBlank(sheet, 2, 13, yoyOf(midClassVal(mid, currentYear, maxMonth, "婀栧寳鐪�", 0, true),
+                midClassVal(mid, currentYear - 1, maxMonth, "婀栧寳鐪�", 0, true)));
+            setValOrBlank(sheet, 2, 17, yoyOf(midClassVal(mid, currentYear, maxMonth, "婀栧寳鐪�", 0, false),
+                midClassVal(mid, currentYear - 1, maxMonth, "婀栧寳鐪�", 0, false)));
             // 甯傚窞琛� r4-20锛欱/F 绱鍊笺�丏/H 鍚屾瘮锛汣/E/G/I 鎺掑悕鍏紡淇濈暀
             List<String> cities = RegionUtil.CITY_LIST;
             for (int i = 0; i < cities.size(); i++) {
@@ -2213,6 +2306,15 @@
                 setValOrBlank(sheet, r0, 3, yoyOf(pass, lastPass));
                 setValOrBlank(sheet, r0, 5, turn == 0 ? null : round(turn, 4));
                 setValOrBlank(sheet, r0, 7, yoyOf(turn, lastTurn));
+                // 鍙冲潡褰撴湀锛歀/P 鍊笺�丯/R 褰撴湀鍚屾瘮锛圡/O/Q/S 鎺掑悕鍏紡淇濈暀锛�
+                double mPass = midClassVal(mid, currentYear, maxMonth, city, 0, true);
+                double mTurn = midClassVal(mid, currentYear, maxMonth, city, 0, false);
+                double mLastPass = midClassVal(mid, currentYear - 1, maxMonth, city, 0, true);
+                double mLastTurn = midClassVal(mid, currentYear - 1, maxMonth, city, 0, false);
+                setValOrBlank(sheet, r0, 11, mPass == 0 ? null : round(mPass, 4));
+                setValOrBlank(sheet, r0, 13, mPass == 0 ? null : yoyOf(mPass, mLastPass));
+                setValOrBlank(sheet, r0, 15, mTurn == 0 ? null : round(mTurn, 4));
+                setValOrBlank(sheet, r0, 17, mTurn == 0 ? null : yoyOf(mTurn, mLastTurn));
             }
             recalc(wb);
             return toBytes(wb);
@@ -2277,6 +2379,36 @@
                 setValOrBlank(sheet, r0, 2, yoyOf(pass, lastPass));
                 setValOrBlank(sheet, r0, 5, turn == 0 ? null : round(turn, 4));
                 setValOrBlank(sheet, r0, 6, yoyOf(turn, lastTurn));
+            }
+            // 涓嬪崐鍧楋紙褰撴湀锛夛細鏍囬琛�9銆佹暟鎹11-15锛�0-based 8銆�10-14锛�
+            Row bottomTitle = sheet.getRow(8);
+            if (bottomTitle != null && bottomTitle.getCell(0) != null) {
+                bottomTitle.getCell(0).setCellValue(currentYear + "骞�" + maxMonth + "鏈堜腑鍙e緞瀹㈣繍閲忓強鍛ㄨ浆閲�");
+            }
+            for (int i = 0; i < names.length; i++) {
+                int r0 = 10 + i;
+                double pass = midClassVal(mid, currentYear, maxMonth, "婀栧寳鐪�", dims[i], true);
+                double turn = midClassVal(mid, currentYear, maxMonth, "婀栧寳鐪�", dims[i], false);
+                double lastPass = midClassVal(mid, currentYear - 1, maxMonth, "婀栧寳鐪�", dims[i], true);
+                double lastTurn = midClassVal(mid, currentYear - 1, maxMonth, "婀栧寳鐪�", dims[i], false);
+                setValOrBlank(sheet, r0, 1, pass == 0 ? null : round(pass, 4));
+                setValOrBlank(sheet, r0, 2, pass == 0 ? null : yoyOf(pass, lastPass));
+                setValOrBlank(sheet, r0, 5, turn == 0 ? null : round(turn, 4));
+                setValOrBlank(sheet, r0, 6, turn == 0 ? null : yoyOf(turn, lastTurn));
+            }
+            // 涓嬪崐鍧楀崰姣斿叕寮忕敱鏍蜂緥鎸囧悜涓婂崐鍧楋紙B$3/F$3锛夛紝鏀瑰啓涓烘湰鍧楁�昏锛圔$11/F$11锛夛紝琛�12-15
+            for (int i = 1; i < names.length; i++) {
+                int r0 = 10 + i;
+                Row rr = sheet.getRow(r0);
+                if (rr == null) continue;
+                Cell dc = rr.getCell(3);
+                if (dc != null && dc.getCellType() == CellType.FORMULA) {
+                    dc.setCellFormula("B" + (r0 + 1) + "/B$11");
+                }
+                Cell hc = rr.getCell(7);
+                if (hc != null && hc.getCellType() == CellType.FORMULA) {
+                    hc.setCellFormula("F" + (r0 + 1) + "/F$11");
+                }
             }
             recalc(wb);
             return toBytes(wb);
@@ -2372,6 +2504,7 @@
                 fillEnergyTemplateSheet(s, agg);
             }
             recalc(wb);
+            clearFormulaErrorsAll(wb); // 鏃犲幓骞存暟鎹殑鍚屾瘮/澧為�熷叕寮� #DIV/0! 鈫� 娓呯┖
             return toBytes(wb);
         }
     }
@@ -2508,7 +2641,7 @@
     public byte[] exportCityBusDetail(String period, String mode) throws Exception {
         int year = Integer.parseInt(period.split("-")[0]);
         int month = monthOf(period, mode);
-        return exportCityByTemplate("瀵煎叆妯℃澘_鍩庡競鍏氦.xlsx", period, mode,
+        return exportCityByTemplate("鐢熸垚_鍩庡競鍏氦瀹㈣繍閲忓垎甯傚窞鏄庣粏.xlsx", period, mode,
             loadCityBusByMonth(year + "-", month),
             loadCityBusByMonth((year - 1) + "-", month));
     }
@@ -2562,7 +2695,7 @@
     public byte[] exportCityTaxiDetail(String period, String mode) throws Exception {
         int year = Integer.parseInt(period.split("-")[0]);
         int month = monthOf(period, mode);
-        return exportCityByTemplate("瀵煎叆妯℃澘_宸℃父鍑虹.xlsx", period, mode,
+        return exportCityByTemplate("鐢熸垚_宸℃父鍑虹瀹㈣繍閲忓垎甯傚窞鏄庣粏.xlsx", period, mode,
             loadCityTaxiByMonth(year + "-", month),
             loadCityTaxiByMonth((year - 1) + "-", month));
     }
@@ -2606,7 +2739,7 @@
         int year = Integer.parseInt(period.split("-")[0]);
         int month = monthOf(period, mode);
         Map<Integer, Map<String, double[]>> monthCity = loadCityRailFerryByMonth(year + "-", month);
-        File template = resolveTemplate("瀵煎叆妯℃澘_杞ㄩ亾銆佽疆娓�.xlsx");
+        File template = resolveTemplate("鐢熸垚_杞ㄩ亾杞浮瀹㈣繍閲忓垎甯傚窞鏄庣粏.xlsx");
         try (InputStream in = new FileInputStream(template);
              XSSFWorkbook wb = new XSSFWorkbook(in)) {
             Sheet sheet = wb.getSheetAt(0);
@@ -2616,6 +2749,8 @@
             // 杞浮锛氬杩愰噺琛� 13(鍏ㄧ渷)/15(姝︽眽)锛涙寚鏍� 2=杞浮瀹㈣繍閲� 3=杞浮鍛ㄨ浆閲�
             fillRailFerryBlock(sheet, monthCity, month, new String[][]{{"鍏ㄧ渷", "12"}, {"姝︽眽甯�", "14"}}, 2);
             recalc(wb);
+            clearFormulaErrorCells(sheet, 3, sheet.getLastRowNum(), 1, 39);
+            fixCityMonthHeaderText(sheet);
             return toBytes(wb);
         }
     }
@@ -2704,6 +2839,7 @@
         int year = Integer.parseInt(period.split("-")[0]);
         int month = monthOf(period, mode);
         Map<String, double[]> cum = loadCityPassengerCumulative(year + "-", month);
+        Map<String, double[]> monthMap = loadCityPassengerMonthMap(year + "-", month);
         File template = resolveTemplate(templateFileName);
         try (InputStream in = new FileInputStream(template);
              XSSFWorkbook wb = new XSSFWorkbook(in)) {
@@ -2712,9 +2848,24 @@
             List<String> areas = new java.util.ArrayList<>();
             areas.add("鍏ㄧ渷");
             areas.addAll(RegionUtil.cityList());
-            fillCitySumBlock(sheet, cum, areas, 4, 0);   // 瀹㈣繍閲忓尯锛堝崟浣嶏細涓囦汉娆★紝POI 0 鍩猴級
-            fillCitySumBlock(sheet, cum, areas, 26, 1);  // 鍛ㄨ浆閲忓尯锛堝崟浣嶏細涓囦汉娆″叕閲岋紝POI 0 鍩猴級
+            fillCitySumBlock(sheet, cum, areas, 4, 0);   // 绱瀹㈣繍閲忓尯锛堝崟浣嶏細涓囦汉娆★紝POI 0 鍩猴紝琛�5-22锛�
+            fillCitySumBlock(sheet, cum, areas, 26, 1);  // 绱鍛ㄨ浆閲忓尯锛堝崟浣嶏細涓囦汉娆″叕閲岋紝POI 0 鍩猴紝琛�27-44锛�
+            // 褰撴湀鍧楁爣棰橈紙0鍩鸿44/66锛変笌鏁版嵁锛�0鍩鸿48-65/70-87锛�
+            Row pTitle = sheet.getRow(44);
+            if (pTitle != null && pTitle.getCell(0) != null) {
+                pTitle.getCell(0).setCellValue("鍩庡競瀹㈣繍瀹㈣繍閲忓垎甯傚窞" + month + "鏈堟儏鍐�");
+            }
+            Row tTitle = sheet.getRow(66);
+            if (tTitle != null && tTitle.getCell(0) != null) {
+                tTitle.getCell(0).setCellValue("鍩庡競瀹㈣繍瀹㈣繍鍛ㄨ浆閲忓垎甯傚窞" + month + "鏈堟儏鍐�");
+            }
+            fillCitySumBlock(sheet, monthMap, areas, 48, 0);  // 褰撴湀瀹㈣繍閲忓尯锛堣49-66锛�
+            fillCitySumBlock(sheet, monthMap, areas, 70, 1);  // 褰撴湀鍛ㄨ浆閲忓尯锛堣71-88锛�
+            // 褰撴湀鍧楁帓鍚�/鍗犳瘮鍏紡鐢辩疮璁″潡澶嶅埗鑰屾潵锛孯ANK 鑼冨洿涓庡崰姣斿垎姣嶉渶鏀规寚褰撴湀鍧楄嚜韬
+            repairCityMonthRankShare(sheet, 50, 66, 49);
+            repairCityMonthRankShare(sheet, 72, 88, 71);
             recalc(wb);
+            clearFormulaErrorsAll(wb); // 鏃犲幓骞寸疮璁$殑鍗犳瘮/澧為�熷叕寮� #DIV/0! 鈫� 娓呯┖
             return toBytes(wb);
         }
     }
@@ -2744,6 +2895,33 @@
             setDataCell(sheet, rowIdx, 24, 0);
             rowIdx++;
         }
+    }
+
+    /** 褰撴湀鍧楁帓鍚�/鍗犳瘮鍏紡淇锛氭ā鏉垮綋鏈堝潡鐢辩疮璁″潡澶嶅埗鑰屾潵锛孯ANK 鑼冨洿涓庡崰姣斿垎姣嶉渶鏀规寚褰撴湀鍧楄嚜韬 */
+    private void repairCityMonthRankShare(Sheet sheet, int firstDataRow1, int lastDataRow1, int provRow1) {
+        String[] groups = {"B", "G", "L", "Q"};
+        String[] growth = {"E", "J", "O", "T"};
+        for (int r = firstDataRow1; r <= lastDataRow1; r++) {
+            int r0 = r - 1;
+            for (int g = 0; g < 4; g++) {
+                String base = groups[g];
+                String grow = growth[g];
+                setFormulaIfFormula(sheet, r0, 2 + g * 5,
+                    "RANK(" + base + r + "," + base + "$" + firstDataRow1 + ":" + base + "$" + lastDataRow1 + ")");
+                setFormulaIfFormula(sheet, r0, 3 + g * 5, base + r + "/" + base + "$" + provRow1);
+                setFormulaIfFormula(sheet, r0, 5 + g * 5,
+                    "RANK(" + grow + r + "," + grow + "$" + firstDataRow1 + ":" + grow + "$" + lastDataRow1 + ")");
+            }
+        }
+    }
+
+    /** 鍗曞厓鏍煎師涓哄叕寮忔椂鏀瑰啓鍏紡锛堟帓鍚�/鍗犳瘮鍒楋級锛岄潪鍏紡鍗曞厓鏍间笉鍔紙淇濇寔妯℃澘寮忔牱锛� */
+    private void setFormulaIfFormula(Sheet sheet, int rowIdx, int colIdx, String formula) {
+        Row row = sheet.getRow(rowIdx);
+        if (row == null) return;
+        Cell c = row.getCell(colIdx);
+        if (c == null || c.getCellType() != CellType.FORMULA) return;
+        c.setCellFormula(formula);
     }
 
     /** 鏌愬勾 1..limit 鏈堝煄甯傚杩愮疮璁★細city 鈫� [鍏氦瀹㈣繍閲�,鍏氦鍛ㄨ浆閲�,鍑虹瀹㈣繍閲�,鍑虹鍛ㄨ浆閲�,杞ㄩ亾瀹㈣繍閲�,杞ㄩ亾鍛ㄨ浆閲�,杞浮瀹㈣繍閲�,杞浮鍛ㄨ浆閲廬锛屽惈"鍏ㄧ渷" */
@@ -2784,6 +2962,23 @@
         return cum;
     }
 
+    /** 鏌愬勾鍗曟湀鍩庡競瀹㈣繍鏁版嵁锛歝ity 鈫� 8 缁存暟缁勶紙鍙e緞鍚岀疮璁★級锛屽惈"鍏ㄧ渷"锛�= month 绱 - (month-1) 绱 */
+    private Map<String, double[]> loadCityPassengerMonthMap(String yearPrefix, int month) {
+        Map<String, double[]> cum = loadCityPassengerCumulative(yearPrefix, month);
+        if (month <= 1) return cum;
+        Map<String, double[]> pre = loadCityPassengerCumulative(yearPrefix, month - 1);
+        Map<String, double[]> out = new HashMap<>();
+        for (Map.Entry<String, double[]> e : cum.entrySet()) {
+            double[] prev = pre.get(e.getKey());
+            double[] d = new double[8];
+            for (int i = 0; i < 8; i++) {
+                d[i] = e.getValue()[i] - (prev == null ? 0 : prev[i]);
+            }
+            out.put(e.getKey(), d);
+        }
+        return out;
+    }
+
     // ==================== 鍩庡競瀹㈣繍 鍏ㄧ渷姹囨�伙紙鍩庡競姹囨�籣妯℃澘锛� ====================
 
     /** 鐢熸垚_鍩庡競瀹㈣繍姹囨��.xlsx锛堜互 鍩庡競姹囨�籣妯℃澘.xlsx 涓哄簳绋匡紱2026 娈靛~搴撳唴 1..N 鏈堢疮璁★紝鍚屾瘮娓呯┖锛�2025/2024 娈典繚鐣欐ā鏉垮巻鍙插弬鑰冨�硷級 */
@@ -2795,7 +2990,7 @@
         double taxiPax = prov[2], taxiTurn = prov[3];
         double railPax = prov[4], railTurn = prov[5];
         double ferryPax = prov[6], ferryTurn = prov[7];
-        File template = resolveTemplate("瀵煎叆妯℃澘_鍩庡競姹囨��.xlsx");
+        File template = resolveTemplate("鐢熸垚_鍩庡競瀹㈣繍姹囨��.xlsx");
         try (InputStream in = new FileInputStream(template);
              XSSFWorkbook wb = new XSSFWorkbook(in)) {
             Sheet sheet = wb.getSheetAt(0);
@@ -2819,7 +3014,36 @@
                 setDataCell(sheet, r, 2, 0);
                 setDataCell(sheet, r, 4, 0);
             }
+            // 搴曢儴鍗曟湀琛紙鏂扮増寮忥級锛氭爣棰樿11锛�0鍩�10锛夈�佹暟鎹13-19锛�0鍩�12-18锛夛紝濉綋鏈堝畬鎴愰噺
+            Row mTitle = sheet.getRow(10);
+            if (mTitle != null && mTitle.getCell(0) != null) {
+                mTitle.getCell(0).setCellValue(year + "骞�" + month + "鏈堝叏鐪佸畬鎴愬煄甯傚杩愰噺鎯呭喌");
+            }
+            double[] mProv = loadCityPassengerMonthMap(year + "-", month).getOrDefault("鍏ㄧ渷", new double[8]);
+            double mBusPax = mProv[0], mBusTurn = mProv[1];
+            double mTaxiPax = mProv[2], mTaxiTurn = mProv[3];
+            double mRailPax = mProv[4], mRailTurn = mProv[5];
+            double mFerryPax = mProv[6], mFerryTurn = mProv[7];
+            setDataCell(sheet, 12, 1, mBusPax + mTaxiPax + mRailPax + mFerryPax); // B13 鎬诲杩愰噺
+            setDataCell(sheet, 12, 3, mBusTurn + mTaxiTurn + mRailTurn + mFerryTurn); // D13 鎬诲懆杞噺
+            setDataCell(sheet, 13, 1, mBusPax);   // B14 鍩庡競鍏氦
+            setDataCell(sheet, 13, 3, mBusTurn);  // D14
+            setDataCell(sheet, 14, 1, mTaxiPax);  // B15 鍩庡競鍑虹杞�
+            setDataCell(sheet, 14, 3, mTaxiTurn); // D15
+            setDataCell(sheet, 15, 1, mTaxiPax);  // B16 鍏朵腑宸℃父鍑虹
+            setDataCell(sheet, 15, 3, mTaxiTurn); // D16
+            setZeroCell(sheet, 16, 1);            // B17 鍩庡競缃戠害杞�
+            setZeroCell(sheet, 16, 3);            // D17
+            setDataCell(sheet, 17, 1, mRailPax);  // B18 杞ㄩ亾
+            setDataCell(sheet, 17, 3, mRailTurn); // D18
+            setDataCell(sheet, 18, 1, mFerryPax); // B19 杞浮
+            setDataCell(sheet, 18, 3, mFerryTurn);// D19
+            for (int r = 12; r <= 18; r++) {      // 鍗曟湀琛� C/E 鍚屾瘮锛氭棤涓婂勾鍗曟湀婧� 鈫� 娓呯┖鏍蜂緥
+                setDataCell(sheet, r, 2, 0);
+                setDataCell(sheet, r, 4, 0);
+            }
             recalc(wb);
+            clearFormulaErrorsAll(wb); // 鏃犲幓骞存暟鎹殑鍚屾瘮鍏紡 #DIV/0! 鈫� 娓呯┖
             return toBytes(wb);
         }
     }
@@ -2833,8 +3057,8 @@
             addZipEntry(zos, "鐢熸垚_鍩庡競鍏氦瀹㈣繍閲忓垎甯傚窞鏄庣粏.xlsx", exportCityBusDetail(period, mode));
             addZipEntry(zos, "鐢熸垚_宸℃父鍑虹瀹㈣繍閲忓垎甯傚窞鏄庣粏.xlsx", exportCityTaxiDetail(period, mode));
             addZipEntry(zos, "鐢熸垚_杞ㄩ亾杞浮瀹㈣繍閲忓垎甯傚窞鏄庣粏.xlsx", exportCityRailFerryDetail(period, mode));
-            addZipEntry(zos, "鐢熸垚_鍩庡競瀹㈣繍瀹㈣繍閲忓垎甯傚窞绱.xlsx", exportCityPassengerCitySum("瀵煎叆妯℃澘_鍩庡競鍒嗗競宸�.xlsx", period, mode));
-            addZipEntry(zos, "鐢熸垚_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx", exportCityPassengerCitySum("瀵煎叆妯℃澘_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx", period, mode));
+            addZipEntry(zos, "鐢熸垚_鍩庡競瀹㈣繍瀹㈣繍閲忓垎甯傚窞绱.xlsx", exportCityPassengerCitySum("鐢熸垚_鍩庡競瀹㈣繍瀹㈣繍閲忓垎甯傚窞绱.xlsx", period, mode));
+            addZipEntry(zos, "鐢熸垚_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx", exportCityPassengerCitySum("鐢熸垚_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx", period, mode));
             addZipEntry(zos, "鐢熸垚_鍩庡競瀹㈣繍姹囨��.xlsx", exportCityPassengerSummary(period, mode));
         }
         return bos.toByteArray();
@@ -2911,8 +3135,8 @@
             case "cityBusDetail": return exportCityBusDetail(period, mode);
             case "cityTaxiDetail": return exportCityTaxiDetail(period, mode);
             case "cityRailFerryDetail": return exportCityRailFerryDetail(period, mode);
-            case "cityPassengerCitySum": return exportCityPassengerCitySum("瀵煎叆妯℃澘_鍩庡競鍒嗗競宸�.xlsx", period, mode);
-            case "cityPassengerDetailSum": return exportCityPassengerCitySum("瀵煎叆妯℃澘_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx", period, mode);
+            case "cityPassengerCitySum": return exportCityPassengerCitySum("鐢熸垚_鍩庡競瀹㈣繍瀹㈣繍閲忓垎甯傚窞绱.xlsx", period, mode);
+            case "cityPassengerDetailSum": return exportCityPassengerCitySum("鐢熸垚_鍩庡競瀹㈣繍鍚勫競宸炴槑缁嗚〃.xlsx", period, mode);
             case "cityPassengerSummary": return exportCityPassengerSummary(period, mode);
             default: return null;
         }
@@ -2996,10 +3220,56 @@
             } catch (Exception e) {
                 log.warn("鍩庡競瀹㈣繍妯℃澘鍏紡姹傚�煎け璐�: {}", e.getMessage());
             }
+            clearFormulaErrorCells(sheet, 4, sheet.getLastRowNum(), 3, 39);
+            fixCityMonthHeaderText(sheet);
             return toBytes(wb);
         }
     }
 
+    /** 娓呯┖姹傚�肩粨鏋滀负閿欒鐨勫叕寮忓崟鍏冩牸锛堟ā鏉胯法绨垮悓姣斿叕寮忔畫鐣� #REF! 鏃剁Щ闄ゅ叕寮忥紝閬垮厤瀵煎嚭鏄剧ず閿欒锛� */
+    private void clearFormulaErrorCells(Sheet sheet, int startRow, int endRow, int startCol, int endCol) {
+        for (int r = startRow; r <= endRow; r++) {
+            Row row = sheet.getRow(r);
+            if (row == null) continue;
+            for (int c = startCol; c <= endCol; c++) {
+                Cell cell = row.getCell(c);
+                if (cell == null || cell.getCellType() != CellType.FORMULA) continue;
+                try {
+                    if (cell.getCachedFormulaResultType() == CellType.ERROR) cell.setBlank();
+                } catch (Exception ignore) {
+                    // 缂撳瓨绫诲瀷璇诲彇澶辫触鏃跺拷鐣�
+                }
+            }
+        }
+    }
+
+    /** 娓呯┖宸ヤ綔绨垮叏閮ㄥ伐浣滆〃鍐呮眰鍊肩粨鏋滀负閿欒鐨勫叕寮忓崟鍏冩牸锛堣法绨�/璺ㄨ〃 #REF!銆佺己鍘诲勾鏁版嵁 #DIV/0! 绛夛級 */
+    private void clearFormulaErrorsAll(XSSFWorkbook wb) {
+        for (int i = 0; i < wb.getNumberOfSheets(); i++) {
+            Sheet s = wb.getSheetAt(i);
+            clearFormulaErrorCells(s, 2, s.getLastRowNum(), 1, 60);
+        }
+    }
+
+    /** 鍩庡競瀹㈣繍绫绘ā鏉胯〃澶存湀浠藉垪鑻ヤ负鏈牸寮忓寲鏃ユ湡搴忓垪鍙凤紙濡� 46082锛夛紝鏀瑰啓涓恒�孻YYY骞碝鏈堛�嶆枃鏈� */
+    private void fixCityMonthHeaderText(Sheet sheet) {
+        for (int r = 0; r <= Math.min(sheet.getLastRowNum(), 20); r++) {
+            Row row = sheet.getRow(r);
+            if (row == null) continue;
+            Cell nameCell = row.getCell(0);
+            String nameText = nameCell == null ? null : cellText(nameCell);
+            if (nameText == null || !nameText.contains("鍦板尯")) continue;
+            for (int c = 2; c <= 40; c += 2) {
+                Cell cell = row.getCell(c);
+                if (cell == null || cell.getCellType() != CellType.NUMERIC) continue;
+                double v = cell.getNumericCellValue();
+                if (v < 40000 || v > 60000) continue;
+                java.util.Date d = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(v);
+                cell.setCellValue(new java.text.SimpleDateFormat("yyyy骞碝鏈�").format(d));
+            }
+        }
+    }
+
     /** 妯℃澘鏂囦欢瀹氫綅锛氶厤缃洰褰� 鈫� user.dir 鈫� user.dir/.. 閫愮骇鍥為�� */
     private File resolveTemplate(String fileName) throws Exception {
         return resolveAnyTemplate(templateDir, fileName);
diff --git a/traffic-audit-web/src/views/DataImport.vue b/traffic-audit-web/src/views/DataImport.vue
index 12d46de..53ee36b 100644
--- a/traffic-audit-web/src/views/DataImport.vue
+++ b/traffic-audit-web/src/views/DataImport.vue
@@ -272,8 +272,8 @@
         passengerIndividual: '鍏矾鏃呭/涓綋瀹㈣繍閲忔眹鎬�.xlsx',
         energyMonthly: '鑳借��/妯℃澘_閬撹矾璐ц繍杞﹁締鑳芥簮娑堣�楁儏鍐碉紙2026锛�.xlsx',
         energyAuth: '鑳借��/妯℃澘_鑳借�楄溅杈嗚繍鏀夸俊鎭�.xlsx',
-        cityBus: '鍩庡競瀹㈣繍/瀵煎叆妯℃澘_鍩庡競鍏氦.xlsx',
-        cityTaxi: '鍩庡競瀹㈣繍/瀵煎叆妯℃澘_宸℃父鍑虹.xlsx',
+        cityBus: '鍩庡競瀹㈣繍/鐢熸垚_鍩庡競鍏氦瀹㈣繍閲忓垎甯傚窞鏄庣粏.xlsx',
+        cityTaxi: '鍩庡競瀹㈣繍/鐢熸垚_宸℃父鍑虹瀹㈣繍閲忓垎甯傚窞鏄庣粏.xlsx',
         cityTaxiAuth: '鍩庡競瀹㈣繍/瀵煎叆妯℃澘_鍑虹杞︿俊鎭�(杩愭斂杞﹁締淇℃伅).xlsx',
         investment: '鎶曡祫/杈撳叆/瀹㈣繍锛堝杩愮珯锛�/鏇存柊_7鏈堝杩愮珯鎶曡祫鏄庣粏琛紙甯傚窞姹囨�诲ぇ琛紝缁欓瀵硷級.xlsx',
         investmentLogistics: '鎶曡祫/杈撳叆/鐗╂祦锛堢墿娴佸洯鍖猴級/鏇存柊_7鏈堢墿娴佺珯鍦烘姇璧勬槑缁�.xls',

--
Gitblit v1.9.1