From 2e6830bcf59c01f29f040652b3e5209a7f21238e Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期一, 21 九月 2026 10:23:50 +0800
Subject: [PATCH] feat(投资): 投资系统导出新模板按表头解析 + 审核基准缺失保护 + 十堰源文件清理

---
 /dev/null                                                                                       |    0 
 docs/功能测试报告/功能测试报告_投资系统新模板按表头解析与审核基准缺失保护_2026-09-21.md                                          |   65 +++++++++++++++++++++
 docs/交接文档_2026-09-21.md                                                                         |   13 +++-
 traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java   |   67 +++++++++++++++++----
 docs/工作日结/工作日结_2026-09-21.md                                                                    |   15 ++++
 docs/投资/输入/物流(物流园区)/8月/湖北省十堰交通物流基础设施投资统计汇总表(月报)(2026年8月).xls                                    |    0 
 traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java |   15 +++-
 docs/投资/输出/源文件备份/湖北省十堰交通物流基础设施投资统计汇总表(月报)(2026年8月)_原始含武汉黄石_20260921.xls                         |    0 
 8 files changed, 152 insertions(+), 23 deletions(-)

diff --git "a/docs/\344\272\244\346\216\245\346\226\207\346\241\243_2026-09-21.md" "b/docs/\344\272\244\346\216\245\346\226\207\346\241\243_2026-09-21.md"
index 9dcd74f..03533e3 100644
--- "a/docs/\344\272\244\346\216\245\346\226\207\346\241\243_2026-09-21.md"
+++ "b/docs/\344\272\244\346\216\245\346\226\207\346\241\243_2026-09-21.md"
@@ -11,8 +11,10 @@
 ## 0. 鍏堣杩欎竴椤碉紙鎺ユ墜鐨勭 1 灏忔椂锛�
 
 1. **鍏堟妸绯荤粺璺戣捣鏉�**锛屽啀璋堟敼浠g爜銆傝 搂7.1锛堜竴閿剼鏈紝蹇呴』鍦ㄦ矙绠卞鎵ц锛夈��
-2. **褰撳墠鏈�绱ф�ョ殑 4 浠朵簨**锛堣瑙� 搂4 P0锛夛細鈶� 8 鏈堝崄鍫扮墿娴佹簮鏂囦欢閲岀殑銆岄潪鍗佸牥娈点�嶄細鍙嶅鎶� 31 涓」鐩甫鍥炲簱锛涒憽 銆婁嚎鍏冩姇璧勯」鐩�嬫湀浠藉垪姣忔湀瑕嗙洊涓婃湀锛�
-   鈶� 瀵煎嚭鍓嶃�屽熀鏁颁綋妫� + 寮圭獥 +銆婃暟鎹己澶辨竻鍗曘�嬮〉銆嶅彧鍋氫簡涓�鍗婏紱鈶� 缂� 2026-06 / 2026-09 姣嶇増锛岄偅涓ゆ湡鍑轰笉浜嗚〃銆�
+2. **褰撳墠鏈�绱ф�ョ殑 4 浠朵簨**锛堣瑙� 搂4 P0锛夛細鈶� 銆婁嚎鍏冩姇璧勯」鐩�嬫湀浠藉垪姣忔湀瑕嗙洊涓婃湀锛堢敤鎴� Q7 瑕佺殑銆屽姞涓�鍒椼�嶆湭鍋氾級锛�
+   鈶� 瀵煎嚭鍓嶃�屽熀鏁颁綋妫� + 寮圭獥 +銆婃暟鎹己澶辨竻鍗曘�嬮〉銆嶅彧鍋氫簡涓�鍗婏紱鈶� 缂� 2026-06 / 2026-09 姣嶇増锛岄偅涓ゆ湡鍑轰笉浜嗚〃锛�
+   鈶� 姹囨�诲ぇ琛ㄣ�屼腑鍙e緞鎺掑悕 vs 涓彛寰勬槑缁嗐�嶅巻鍙插悓姣斿熀鏁板弻杞ㄥ埗锛�16 涓競宸炴湁宸級銆�
+   > 鍘熴��8 鏈堝崄鍫扮墿娴佹簮鏂囦欢鍚潪鍗佸牥娈点�嶅凡浜� 2026-09-21 闂幆锛岃 搂4 P0-1銆�
 3. **鍒嚜宸辨媿鏉夸笟鍔″彛寰�**锛岀 5 绔犲垪鐨勬槸蹇呴』涓氬姟纭鐨勪簨銆�
 4. 鏀瑰畬蹇呴』锛氬啓銆婂姛鑳芥祴璇曟姤鍛娿�嬧啋 鏇存柊銆婂伐浣滄棩缁撱�嬧啋 鍙屼粨搴撴帹閫侊紙搂7.4锛夈�傝繖鏄湰椤圭洰鐨勭‖瑙勭煩銆�
 
@@ -41,6 +43,7 @@
 | `freight_turnover_import` | **234** | 18 琛�/鏈� 脳 13 鏈燂紙2021-12 ~ 2026-08锛� |
 | `h2031_enterprise_monthly` | 15811 | 鍏矾鏃呭锛堜腑鍙e緞缁村害 1 鐨勬潵婧愪箣涓�锛� |
 | `h2032_enterprise_monthly` | 13056 | 璐ц繍浼佷笟鏈堟姤 |
+| `investment_system` | 2026-07: 148 / **2026-08: 129** | 鎶曡祫绯荤粺瀵煎嚭锛堟姇璧勫鏍哥殑姣斿鍩哄噯锛夛紱08 鏈熺敤**鏂版ā鏉�**瀵煎叆 |
 | `import_batch` | 417 | 瀵煎叆鎵规鍙拌处锛堝紓姝ュ鍑虹殑銆屾暟鎹増鏈畧鍗�嶇敤瀹冿級 |
 
 - **2026-09 鑴忔湡宸叉竻鐞嗗共鍑�**锛堟湰娆℃牳瀹烇細`h204_vehicle_quarterly` 鍙湁 2026-07/08锛沗audit_run`/`audit_result` 鍙湁 2026-05~08锛沗investment_monthly` 鍙湁 06~08锛夈��
@@ -55,7 +58,7 @@
 | HEAD | `a08c70d feat(鎶曡祫): 甯傚窞鏈堟姤缁熶竴濉姤妯℃澘 + 鍘�(甯傘�佸尯)鍒楄В鏋� + 琛ㄥご琛屽垽瀹氭敹绱 |
 | 涓汉杩滅 | `origin` 鈫� `https://gitee.com/zhizhijie/traffic-audit.git`锛堝垎鏀� `master`锛� |
 | 鍏徃杩滅 | `gitea` 鈫� `http://61.183.254.94:3000/r/trafficAudit.git`锛堝垎鏀� `main`锛岃处鍙� zyj锛� |
-| 鏈彁浜ゆ枃浠� | 鏈氦鎺ュ綋鏃剁殑鏈窡韪枃浠讹細`docs/闂姹囨��/姹囨�诲ぇ琛ㄩ棶棰樹氦鎺2026-09-21.md`銆乣docs/宸ヤ綔鏃ョ粨/宸ヤ綔鏃ョ粨_2026-09-21.md`銆乣docs/鎶曡祫/杈撳叆/2026骞�8鏈堟姇璧勭郴缁熼」鐩槑缁�.xls`銆乣docs/浜ゆ帴鏂囨。_2026-09-21.md`锛堥殢鏈浜ゆ帴涓�骞舵彁浜わ級 |
+| 宸ヤ綔鍖虹姸鎬� | 骞插噣锛堜氦鎺ユ枃妗c�佹眹鎬诲ぇ琛ㄩ棶棰樹氦鎺ャ�佹棩缁撱�佹姇璧勭郴缁熸柊妯℃澘鏀寔鍧囧凡鎻愪氦骞舵帹閫佷袱绔級 |
 
 ### 1.4 鍏抽敭鐩綍
 
@@ -182,7 +185,7 @@
 
 | # | 浜嬮」 | 鐜拌薄 / 褰卞搷 | 鐜扮姸涓庤瘉鎹� | 涓嬩竴姝� | 鐘舵�� |
 | --- | --- | --- | --- | --- | --- |
-| P0-1 | **8 鏈堝崄鍫扮墿娴佹眹鎬昏〃鍚�岄潪鍗佸牥娈点��** | 璇ユ枃浠朵竴涓〉绛炬敹浜嗗叏鐪侊細8 鏈堣繖浠� 38 琛岄噷鍙湁 **7 琛屾槸鍗佸牥**锛屽彟 **27 琛屾姹� + 4 琛岄粍鐭�**銆傜▼搴忕壒鎰忔敮鎸併�屾寜灏忚妭琛屽垏甯傚窞銆嶏紝鎵�浠ユ瘡娆¢噸瀵� 8 鏈堢墿娴侀兘浼氭妸杩� 31 涓」鐩缓鍒版姹�/榛勭煶鍚嶄笅锛�09-20 宸插疄娴嬪鐜� +31 椤圭洰锛岀敓鎴愯〃姝︽眽鐗╂祦娈典細澶� 27 琛岋級 | 搴撳凡娓呭共鍑�锛�152 椤圭洰 / 284 鏈堝害鏁帮紝2026-08 鏈堝害鏁� 136 琛屼笌閲嶅鍓嶉�愬�间竴鑷达級锛�**婧愭枃浠舵湭娓�** | 鐢ㄦ埛纭鍚庣敱鎺ユ墜浜哄垹娈碉紙鍏堝浠藉埌 `docs/鎶曡祫/杈撳嚭/`锛夛紝鎴栫敤鎴疯嚜琛屽湪 Excel 鍒犻櫎璇ヤ袱娈� | 鉂� |
+| P0-1 | ~~8 鏈堝崄鍫扮墿娴佹眹鎬昏〃鍚�岄潪鍗佸牥娈点�崀~ | 鈥斺�� | **宸查棴鐜紙2026-09-21锛�**锛氱敤鎴风‘璁ゃ�屾竻闄ゆ帀銆嶁啋 鐢� Excel COM 鍒犻櫎婧愭枃浠剁 11~63 琛岋紙姝︽眽 27 + 榛勭煶 4锛夛紝鍘熶欢澶囦唤 `docs/鎶曡祫/杈撳嚭/婧愭枃浠跺浠�/鈥鍘熷鍚姹夐粍鐭砡20260921.xls`锛涢噸瀵奸獙璇佽鏂囦欢 38 鈫� **7 鏉�**锛�8 鏈堢墿娴� 128 鈫� 97锛屽簱鍐呬粛 152 椤圭洰 / 136 鏉� 2026-08 鏈堝害鏁� | 鏃犻渶鍐嶅鐞嗭紙鍚庣画鑻ュ啀鍔犲洖闈炴湰鏂囦欢甯傚窞娈碉紝闇�閲嶆柊娓呯悊锛� | 鉁� |
 | P0-2 | **銆婁嚎鍏冩姇璧勯」鐩�嬭涓婇」鐩〃鏈堜唤鍒椾細琚鐩�** | 浠g爜鍙噸鍐欒〃澶存枃瀛楋紙`ReportExportService.java:6128-6139` 鍐� `col5`/`col23`锛夛紝妯℃澘 row2 绗� 24 鍒楀師鏈槸銆�2026骞�7鏈堝疄闄呭畬鎴愭姇璧勩�嶃��8 鏈堝鍑烘妸瀹冩敼鎴愩��2026骞�8鏈堚�︺�嶅苟鍐� 8 鏈堟暟 鈫� **7 鏈堥偅涓�鍒楃殑鏁版嵁娑堝け** | 鐢ㄦ埛宸插湪銆婂緟纭娓呭崟銆婹7 鏄庣‘锛氥�屽彧鏇存柊 F 鍒� + 鍦� 2026骞碭鏈堝疄闄呭畬鎴愭姇璧勫悗**鍔犱竴鍒�** 2026骞碭+1鏈堝疄闄呭畬鎴愭姇璧勩�嶁啋 鏈疄鐜� | 鎸� Q7 鏀逛负銆屾寜鏈堣拷鍔犱竴鍒椼�嶏紱鍚岃〃鍏跺畠鍐欐鏈堜唤鍒楋紙1-3鏈�/4鏈�/5鏈�/6鏈�/绗簩瀛e害锛夊悓鏍疯涓�璧风湅 | 鉂� |
 | P0-3 | **瀵煎嚭鍓嶃�屽熀鏁颁綋妫� + 寮圭獥 +銆婃暟鎹己澶辨竻鍗曘�嬮〉銆嶏紙B4锛�** | 鍘诲勾鍚屾湀鍩烘暟娈嬬己鏃剁▼搴忕収绠楋紝鏇炬妸涓彛寰勬帓鍚嶅叏鐪佺疮璁″悓姣旂畻鎴� **+73.89%**锛堢湡鍊� +5.81%锛夈�傚姞浣撴鍚庡彲鏍规不澶嶅彂 | 鍚庣宸叉敹闆嗛棶棰樻竻鍗� `midIssues`锛坄ReportExportService.java:2436`锛変笌 `dbProblems`锛屼絾 **`getLastMidIssues()` 娌℃湁浠讳綍璋冪敤鏂�**锛屽墠绔篃鏃犳秷璐癸紝娌℃湁銆婃暟鎹己澶辨竻鍗曘�嬮〉 鈫� 鍙仛浜� B5锛堟棩蹇楋級涓� B3锛堝畬澶囨�ф牎楠岋級 | 鈶� 灏辩华/棰勮鎺ュ彛杩斿洖 issues锛涒憽 瀵煎嚭鍓嶅脊绐楋紱鈶� 鐢熸垚浠惰拷鍔犮�婃暟鎹己澶辨竻鍗曘�嬮〉 | 馃敹 |
 | P0-4 | **缂� 2026-06 / 2026-09 姣嶇増** | 杩欎袱鏈熼瑙� `ready=false`銆屾湭鎵惧埌妯℃澘鏂囦欢銆嶏紝鍑轰笉浜嗚〃 | `docs/鐢熸垚姹囨�诲ぇ琛�/` 涓嬪彧鏈� 2026骞�7鏈� / 2026骞�8鏈� + 鐗堝紡鍘熷瀷锛涚▼搴�**鍙寜鏂囦欢鍚嶇簿纭尮閰�**銆佷笉浼氳嚜寤� | 鐢ㄦ埛 Q13 宸叉殏缂擄紙瑕侀棶鍚屼簨銆岃兘涓嶈兘鐢ㄦ瘝鐗堣嚜鍔ㄧ敓鎴愬悗缁瘡鏈堟ā鏉裤�嶏級銆傜煭鏈燂細浜哄伐鏀句竴浠� 9 鏈堟瘝鐗堬紱闀挎湡锛氭墿鍒楀櫒锛堣瑙佹眹鎬诲ぇ琛ㄤ氦鎺� P0-2锛� | 鈴� |
@@ -203,6 +206,7 @@
 | P1-10 | 杩愯緭閲� 2026-01~07 鐨� `last_*` 涓虹┖ / H203-1 2026-01~07 鐨� `unified_credit_code`銆乣report_unit` 涓虹┖ | 鍓嶈�呮槸鏀瑰姩鍓嶅氨涓虹┖锛屽悗鑰呮槸鏂板垪鏈湡鎵嶈鍙栵紱鏄惁琛�/閲嶅寰呯‘璁� | 鈴� |
 | P1-11 | 璐ц繍銆屾寔缁湪瑙� 545 瀹躲�峷s銆屽畼鏂瑰叏鍙e緞銆嶄袱鐗堝悓姣旓紙+2.90% vs +4.54%锛� | 鍙e緞涓嶅悓锛屽凡鍒嗗埆娉ㄦ槑锛涜嫢瑕侀殢銆婂樊寮傜巼姹囨�昏〃銆嬩笂鎶ワ紝寤鸿鍔犳敞宸紓鍘熷洜 | 鈴� |
 | P1-12 | 楂橀�熻繍璺濆悓姣旓紙鐢ㄦ埛琛ㄦ牸 O 鍒楋級鐨勬潵婧�/鏈熼棿寰呯‘璁� | 纭鍚庢柟鍙畻銆岃繍璺濆閫熷樊銆� | 馃敀 绛夌敤鎴� |
+| P1-13 | 鎶曡祫绯荤粺瀵煎嚭鐨�**鏂版ā鏉�**锛坄2026骞碭鏈堟姇璧勭郴缁熼」鐩槑缁哷锛� | 宸叉敮鎸佹寜琛ㄥご瀹氫綅瑙f瀽锛�09-21锛�129 鏉″叆搴擄級銆�**寰呭畾**锛氣憼 鏂版ā鏉垮鍑虹殑銆岄」鐩墍澶勯樁娈点�嶆湭钀藉簱锛屽闇�姣斿寤鸿闃舵瑕佸姞鍒楀苟鍚屾 `docs/init.sql`/`docs/database.md`锛涒憽 鏂版ā鏉�**娌℃湁銆岃嚜骞村垵绱銆嶅垪**锛岃缁村害瀹℃牳宸叉敼涓恒�屽熀鍑嗙己澶卞嵆璺宠繃 + WARN 鏃ュ織銆嶏紙RULE_I002 瀹炴祴 0 鏉★級锛岃嫢涓氬姟浠嶈姣斿闇�妯℃澘琛ュ洖璇ュ垪 | 馃敹 |
 
 ### P2 鈥斺�� 宸ョ▼涓庢暣娲�
 
@@ -316,3 +320,4 @@
 | 鏃ユ湡 | 鍙樻洿 |
 | --- | --- |
 | 2026-09-21 | 棣栨鎴愭枃锛氭暣鍚堟眹鎬诲ぇ琛ㄤ氦鎺ワ紙`docs/闂姹囨��/姹囨�诲ぇ琛ㄩ棶棰樹氦鎺2026-09-21.md`锛変笌鎶曡祫/璐ц繍/瀹㈣繍鍚勭嚎閬楃暀 |
+| 2026-09-21锛堜笅鍗堬級 | P0-1 闂幆锛堝崄鍫版簮鏂囦欢宸插垹娈� + 閲嶅楠岃瘉锛夛紱鏂板 P1-13锛堟姇璧勭郴缁熸柊妯℃澘鏀寔锛夛紱鏁版嵁蹇収琛� `investment_system` 琛� |
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\347\263\273\347\273\237\346\226\260\346\250\241\346\235\277\346\214\211\350\241\250\345\244\264\350\247\243\346\236\220\344\270\216\345\256\241\346\240\270\345\237\272\345\207\206\347\274\272\345\244\261\344\277\235\346\212\244_2026-09-21.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\347\263\273\347\273\237\346\226\260\346\250\241\346\235\277\346\214\211\350\241\250\345\244\264\350\247\243\346\236\220\344\270\216\345\256\241\346\240\270\345\237\272\345\207\206\347\274\272\345\244\261\344\277\235\346\212\244_2026-09-21.md"
new file mode 100644
index 0000000..78c1dcf
--- /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\347\263\273\347\273\237\346\226\260\346\250\241\346\235\277\346\214\211\350\241\250\345\244\264\350\247\243\346\236\220\344\270\216\345\256\241\346\240\270\345\237\272\345\207\206\347\274\272\345\244\261\344\277\235\346\212\244_2026-09-21.md"
@@ -0,0 +1,65 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡_鎶曡祫绯荤粺鏂版ā鏉挎寜琛ㄥご瑙f瀽涓庡鏍稿熀鍑嗙己澶变繚鎶2026-09-21
+
+## 涓�銆佸姛鑳借鏄�
+
+| # | 鍔熻兘 | 璇存槑 |
+| --- | --- | --- |
+| 1 | 鎶曡祫绯荤粺瀵煎嚭**鎸夎〃澶村畾浣�**瑙f瀽 | 鐢ㄦ埛 2026-09-21 鎶娿�屼笌鎶曡祫绯荤粺姣斿鐨勬槑缁嗚〃銆嶆崲鎴愪簡鏂版ā鏉裤��2026骞�8鏈堟姇璧勭郴缁熼」鐩槑缁嗐�嬶紙澶氫竴鍒椼�岄」鐩墍澶勯樁娈点�嶃�佸皯涓�鍒椼�岃嚜骞村垵绱銆嶏紝鏁翠綋鍙崇Щ锛夈�傚師瀹炵幇鍐欐 8 鍒楀垪浣嶏紝閬囨柊妯℃澘蹇呯劧鎶ャ�岃〃澶翠笌绯荤粺妯℃澘涓嶄竴鑷淬�嶃�傛湰娆℃敼涓烘寜琛ㄥご鍏抽敭瀛楀疄鏃跺畾浣嶅垪锛屽吋瀹规柊鏃т袱绉嶆ā鏉� |
+| 2 | 瀹℃牳姣斿銆屽熀鍑嗙己澶便�嶄繚鎶� | 鏂版ā鏉挎病鏈夈�岃嚜骞村垵绱銆嶅垪 鈫� `investment_system.year_cum` 涓� NULL銆傚師瀹炵幇鐢� `nvl()` 鎶� NULL 褰� 0锛屼細鎶� 100+ 涓」鐩叏閮ㄨ鍒や负銆屽樊寮傘�嶃�傛敼涓猴細鍩哄噯涓� NULL 鏃惰烦杩囪瀛楁姣斿骞惰 WARN 鏃ュ織 |
+| 3 | 鍗佸牥鐗╂祦姹囨�昏〃婧愭枃浠舵竻鐞嗭紙鏁版嵁澶勭疆锛岄潪浠g爜锛� | 鎸夌敤鎴� 2026-09-21銆屾竻闄ゆ帀銆嶇殑瑕佹眰锛屽垹闄よ鏂囦欢閲岀殑姝︽眽娈碉紙27 涓」鐩級涓庨粍鐭虫锛�4 涓」鐩級锛屽彧淇濈暀鍗佸牥娈� |
+
+鏀瑰姩鏂囦欢锛�
+- `traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java`锛坄importInvestmentSystem` 閲嶅啓 + 鏂板 `findColByKeywords` / `headerText`锛�
+- `traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java`锛坄checkInvestCrossDiff` 鍩哄噯缂哄け淇濇姢锛�
+
+## 浜屻�佹祴璇曠幆澧�
+
+- 鍚庣 Spring Boot 8090锛岄噸鍚姞杞芥柊浠g爜锛歚backend.log` **2026-09-21 10:20:30 Started TrafficAuditApplication**锛涘墠绔� 8080
+- 鏁版嵁搴� MySQL 3308 / `traffic_audit`
+- 鏂版棫妯℃澘鍒楃粨鏋勫鐓э紙`xlrd` 璇诲彇锛夛細
+
+| 鍒� | 鑰佹ā鏉裤�婃ā鏉縚鏌ヨ缁撴灉(鎶曡祫绯荤粺-瀹㈣繍+鐗╂祦 2026.7).xls銆� | 鏂版ā鏉裤��2026骞�8鏈堟姇璧勭郴缁熼」鐩槑缁�.xls銆� |
+| --- | --- | --- |
+| 1 | 琛屽彿 | 琛屽彿 |
+| 2 | 鍗曚綅 | **鎶曡祫椤圭洰** |
+| 3 | 鏃舵湡 | 鏃舵湡 |
+| 4 | 璁″垝鎬绘姇璧� | **椤圭洰鎵�澶勯樁娈�**锛堟柊澧烇級 |
+| 5 | 鑷紑濮嬬疮璁� | 璁″垝鎬绘姇璧� |
+| 6 | 鏈勾璁″垝鎶曡祫 | 鏈勾璁″垝鎶曡祫 |
+| 7 | 鑷勾鍒濈疮璁� | 鑷紑濮嬪缓璁捐嚦鏈勾锛堟湀锛夊簳-绱瀹屾垚鎶曡祫 |
+| 8 | 褰撴湀瀹屾垚鎶曡祫 | 褰撴湀瀹屾垚鎶曡祫 |
+| 鈥� | 鈥� | **鏃犮�岃嚜骞村垵绱銆嶅垪** |
+
+## 涓夈�佺敤渚嬭〃
+
+| # | 鐢ㄤ緥 | 杈撳叆 | 棰勬湡 | 瀹為檯 | 缁撹 |
+| --- | --- | --- | --- | --- | --- |
+| T01 | 鍗佸牥婧愭枃浠舵竻鐞�-缁撴瀯 | 鍘熴�婃箹鍖楃渷鍗佸牥鈥︽眹鎬昏〃锛堟湀鎶ワ級锛�2026骞�8鏈堬級.xls銆� | 鍙繚鐣欏崄鍫版锛屾姹�/榛勭煶娈垫秷澶� | 琛屾暟 86 鈫� **33**锛涘崄鍫版绗� 10 琛岃捣銆�7 涓」鐩�佸悎璁¤淇濈暀锛涙姹�/榛勭煶娈� 0 琛� | 閫氳繃 |
+| T02 | 鍗佸牥婧愭枃浠舵竻鐞�-澶囦唤 | 鍚屼笂 | 鍘熶欢鍏堝浠藉埌杈撳嚭鐩綍 | `docs/鎶曡祫/杈撳嚭/婧愭枃浠跺浠�/鈥鍘熷鍚姹夐粍鐭砡20260921.xls`锛�108544 瀛楄妭锛� | 閫氳繃 |
+| T03 | 8 鏈堢墿娴侀噸瀵硷紙姝e悜锛� | `POST /api/import/investCityBatch?period=2026-08&category=鐗╂祦鍥尯` | 鍗佸牥鍙嚭 7 鏉★紝涓嶅啀浜х敓姝︽眽/榛勭煶椤圭洰 | total=97銆乻uccess=97銆乫ail=0锛涘崄鍫版枃浠� **ok=7**锛堟敼鍓� 38锛夛紱姝︽眽/榛勭煶 0 鏉� | 閫氳繃 |
+| T04 | 閲嶅鍚庡簱鏍稿 | 鍚屼笂 | 椤圭洰/鏈堝害鏁颁笉澧炰笉鍑� | `investment_project` = **152**銆�2026-08 鏈堝害鏁� = **136**銆佸崄鍫扮墿娴� = 7锛堜笌娓呯悊鍓嶄竴鑷达級 | 閫氳繃 |
+| T05 | 鏂版ā鏉垮鍏ワ紙姝e悜锛� | 鏂版ā鏉� 129 琛屾暟鎹� | 鍏ㄩ儴鍏ュ簱 | 杩斿洖銆屾姇璧勭郴缁熷鍑哄鍏ユ垚鍔�, 鍏� **129** 鏉¤褰曘�嶏紱`investment_system` 2026-08 = 129銆�2026-07 = 148 涓嶅彈褰卞搷 | 閫氳繃 |
+| T06 | 瀛楁鏄犲皠鎶芥煡 | 鍚屼笂 | 閫愬垪绛変簬婧愭枃浠� | 婀栧寳鐪佺患鍚堣繍杈撴湇鍔$珯鍙婂�欒溅浜細12721.5 / 10306.2 / 10316.1 / 93.5锛涙眽鍙e杩愪腑蹇冿細315700 / 30000 / 178235.4 / 550 | 閫氳繃 |
+| T07 | 缂哄垪澶勭悊锛堣礋鍚戯級 | 鍚屼笂锛堟棤銆岃嚜骞村垵绱銆嶅垪锛� | year_cum 鐣欑┖锛�**涓嶅緱**鎶娿�岃嚜寮�濮嬪缓璁锯�︺�嶅垪璇綋鑷勾鍒濈疮璁� | 129 琛� year_cum 鍏ㄤ负 NULL锛堟湭閿欏~锛� | 閫氳繃 |
+| T08 | 鑰佹ā鏉垮吋瀹癸紙鍥炲綊锛� | 鑰佹牸寮忚〃澶� | 浠嶈兘瀵煎叆 | 鑰佹枃浠跺凡涓嶅湪杈撳叆鐩綍锛涙敼涓烘寜琛ㄥご瀹氫綅鍚庯紝鑰佹ā鏉� 8 鍒楀叧閿瓧锛堝崟浣�/璁″垝鎬绘姇璧�/鑷紑濮嬪缓璁�/鏈勾璁″垝鎶曡祫/鑷勾鍒�/褰撴湀瀹屾垚鎶曡祫锛夊叏閮ㄥ彲鍛戒腑锛堜唬鐮佸鏌ワ級锛涘瓨閲� 2026-07 = 148 琛屾湭鍙楀奖鍝� | 閫氳繃锛堥潤鎬侊級 |
+| T09 | 瀹℃牳鍩哄噯缂哄け淇濇姢 | `POST /api/audit/execute?period=2026-08&reportType=INVEST` | 鑷勾鍒濈疮璁¤鍒欎笉鍐嶄骇鐢熻鎶� | RULE_I002 缁撴灉 **0 鏉�**锛涙棩蹇楀嚭鐜般�屾姇璧勬瘮瀵硅烦杩囷紙鎶曡祫绯荤粺鍩哄噯缂哄け锛夛細rule=RULE_I002 鈥� field=鑷勾鍒濈疮璁°�� | 閫氳繃 |
+| T10 | 瀹℃牳鍏跺畠瑙勫垯鏈彈褰卞搷 | 鍚屼笂 | 姝e父鍑虹粨鏋� | RULE_I001锛堣嚜寮�濮嬪缓璁剧疮璁★級2 鏉°�丷ULE_I003锛堟湰鏈堝畬鎴愶級1 鏉°�丷ULE_I004锛堝瓨鍦ㄦ�э級25 鏉★紝鍚堣 28 鏉� | 閫氳繃 |
+| T11 | 瀹℃牳骞傜瓑 | 鍚屼笂閲嶅鎵ц | 鍙竻 INVEST 鏃х粨鏋溿�佷笉閲嶅鍫嗙Н | 涓ゆ鎵ц缁撴灉鏉℃暟涓�鑷达紙28 鏉★級 | 閫氳繃 |
+
+## 鍥涖�佸彂鐜扮殑闂涓庡缃�
+
+| # | 闂 | 澶勭疆 |
+| --- | --- | --- |
+| P1 | 鏂版ā鏉垮鍑恒�岄」鐩墍澶勯樁娈点�嶅垪锛屼絾搴撹〃 `investment_system` 娌℃湁瀵瑰簲瀛楁 | **鏈涓嶈惤搴�**銆傝嫢涓氬姟瑕佹瘮瀵广�屽缓璁鹃樁娈点�嶏紝闇�鍔犲垪骞跺悓姝� `docs/init.sql`銆乣docs/database.md`锛堟寜椤圭洰瑙勭煩涓夊鍚屾锛� |
+| P2 | 鏂版ā鏉�**娌℃湁銆岃嚜骞村垵绱銆嶅垪** 鈫� 璇ョ淮搴︽棤娉曟瘮瀵� | 宸叉敼涓恒�屽熀鍑嗙己澶卞嵆璺宠繃 + WARN 鏃ュ織銆嶏紝涓嶄骇鐢熻鎶ャ�傝嫢涓氬姟浠嶈姣斿鑷勾鍒濈疮璁★紝闇�鏂版ā鏉胯ˉ鍥炶鍒楋紙鎴栫‘璁ゆ敼鐢ㄣ�岃嚜寮�濮嬪缓璁剧疮璁°�嶅彛寰勶級 |
+| P3 | 鑰佹ā鏉挎枃浠� `妯℃澘_鏌ヨ缁撴灉(鎶曡祫绯荤粺-瀹㈣繍+鐗╂祦 2026.7).xls` 宸蹭笉鍦� `docs/鎶曡祫/杈撳叆/`锛堣鐢ㄦ埛鏇挎崲锛� | 2026-07 鐨� 148 琛屼负鑰佸彛寰勫瓨閲忔暟鎹紝淇濈暀涓嶅姩锛涘悗缁湀浠界粺涓�鐢ㄦ柊妯℃澘 |
+| P4 | 瀹℃牳鏂板 25 鏉°�屾姇璧勭郴缁熷鍑轰腑涓嶅瓨鍦ㄣ�� | 澶氫负涔¢晣缁煎悎杩愯緭鏈嶅姟绔欎笌閮ㄥ垎鐗╂祦椤圭洰锛堝 妗傝姳闀�/椹ˉ闀�/楂樻ˉ闀囩患鍚堣繍杈撴湇鍔$珯銆侀儜涓囬珮閾佸反涓滅患鍚堝杩愭灑绾姐�佹綔姹熶紶鍖栧叕璺腐椤圭洰鈥︼級锛屽睘鎶曡祫绯荤粺鏈敹褰曠殑瀹㈣宸紓锛屼緵涓氬姟鍒ゆ柇锛岄潪鏈鏀瑰姩寮曞叆 |
+| P5 | 婧愭枃浠朵负 `.xls` 涓斿惈鍚堝苟鍗曞厓鏍� | 鐢� Excel 16.0 COM 鏁磋鍒犻櫎锛堢 11~63 琛岋級锛屼繚瀛樺悗 `xlrd` 澶嶆牳琛屾暟 86 鈫� 33锛涜剼鏈粨鏉熸竻鐞嗕簡鏈鏂板缓鐨勫鍎� EXCEL 杩涚▼ |
+
+## 浜斻�佺粨璁�
+
+- 鏂版ā鏉裤��2026骞�8鏈堟姇璧勭郴缁熼」鐩槑缁嗐�嬪凡鍙甯稿鍏ワ紙129 鏉★級锛屽瓧娈甸�愬垪瀵归綈锛岀己鍒椾笉璇~锛�
+- 瀹℃牳涓嶅啀鍥犮�屽熀鍑嗙己澶便�嶆垚鐗囪鎶ワ紙RULE_I002 鐢� 100+ 鏉¢檷涓� 0 鏉★級锛屽叾浣欎笁鏉� INVEST 瑙勫垯缁撴灉姝e父锛�28 鏉★級锛�
+- 鍗佸牥鐗╂祦姹囨�昏〃婧愭枃浠跺凡娓呴櫎姝︽眽/榛勭煶娈碉紙澶囦唤鐣欐。锛夛紝閲嶅楠岃瘉锛氬崄鍫板彧鍑� 7 鏉★紝搴撳唴椤圭洰/鏈堝害鏁颁笉澧炰笉鍑忥紝**璇ユ畫鐣欓棶棰橀棴鐜�**銆�
+
+娴嬭瘯浜猴細Codex锛圓I锛夈��娴嬭瘯鏃ユ湡锛�2026-09-21
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-21.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-21.md"
index 29aef90..160722d 100644
--- "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-21.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-21.md"
@@ -58,9 +58,22 @@
      **瀵煎嚭銆屾寜鏈堝垎鐩綍 + 鑷姩澶囦唤 + 杩愯鏃ュ織/鏍¢獙鎶ラ敊銆嶆湭瀹炵幇**锛圦10 宸茬瓟鍚屾剰锛夛紱
   6. 瀵煎嚭鍓嶅熀鏁颁綋妫�锛圔4锛夊彧鍋氫簡涓�鍗婏細鍚庣 `getLastMidIssues()` **鏃犱换浣曡皟鐢ㄦ柟**锛屽墠绔湭娑堣垂銆佹棤銆婃暟鎹己澶辨竻鍗曘�嬮〉銆�
 
+### 5. 鍗佸牥鐗╂祦婧愭枃浠舵竻鐞嗭紙鐢ㄦ埛銆屾竻闄ゆ帀銆嶏級+ 鎶曡祫绯荤粺鏂版ā鏉挎敮鎸�
+
+- **鍗佸牥婧愭枃浠舵竻鐞嗭紙鏁版嵁澶勭疆锛�**锛歚docs/鎶曡祫/杈撳叆/鐗╂祦锛堢墿娴佸洯鍖猴級/8鏈�/婀栧寳鐪佸崄鍫颁氦閫氱墿娴佸熀纭�璁炬柦鎶曡祫缁熻姹囨�昏〃锛堟湀鎶ワ級锛�2026骞�8鏈堬級.xls`
+  閲岀殑姝︽眽娈碉紙27 涓」鐩級涓庨粍鐭虫锛�4 涓」鐩級鐢� Excel COM 鏁磋鍒犻櫎锛堢 11~63 琛岋級锛屽彧鐣欏崄鍫版锛�7 涓」鐩級锛�
+  鍘熶欢鍏堝浠藉埌 `docs/鎶曡祫/杈撳嚭/婧愭枃浠跺浠�/鈥鍘熷鍚姹夐粍鐭砡20260921.xls`銆�
+  閲嶅楠岃瘉锛氳鏂囦欢鐢� **38 鏉� 鈫� 7 鏉�**锛�8 鏈堢墿娴� total 128 鈫� 97锛屽簱鍐呬粛鏄� 152 涓」鐩� / 136 鏉� 2026-08 鏈堝害鏁帮紙涓嶅涓嶅噺锛夆啋 **娈嬬暀闂闂幆**銆�
+- **鎶曡祫绯荤粺瀵煎嚭鏂版ā鏉�**锛氱敤鎴锋妸姣斿鏄庣粏琛ㄦ崲鎴愩��2026骞�8鏈堟姇璧勭郴缁熼」鐩槑缁嗐�嬶紙澶氥�岄」鐩墍澶勯樁娈点�嶃�佸皯銆岃嚜骞村垵绱銆嶏紝鍒椾綅鏁翠綋鍙崇Щ锛夈��
+  鍘熷疄鐜板啓姝� 8 鍒� 鈫� 鏀逛负**鎸夎〃澶村叧閿瓧瀹氫綅**锛坄findColByKeywords`锛夛紝鍏煎鏂版棫妯℃澘锛涚己鍒楁椂 `year_cum` 鐣欑┖鑰屼笉鏄敊濉��
+  鏂版ā鏉� 129 鏉″凡鍏ュ簱锛坄investment_system` 2026-08 = 129锛�2026-07 = 148 涓嶅彈褰卞搷锛夛紝瀛楁閫愬垪鎶芥煡涓�鑷淬��
+- **瀹℃牳銆屽熀鍑嗙己澶便�嶄繚鎶�**锛氭柊妯℃澘娌℃湁銆岃嚜骞村垵绱銆嶏紝鍘� `nvl()` 浼氭妸 NULL 褰� 0 鈫� 100+ 鏉¤鎶ャ�傛敼涓哄熀鍑嗕负 NULL 鏃惰烦杩囧苟璁� WARN 鏃ュ織銆�
+  瀹炴祴锛歊ULE_I002 鐢便�屾瘡涓」鐩竴鏉°�嶉檷涓� **0 鏉�**锛汻ULE_I001 2 鏉°�丷ULE_I003 1 鏉°�丷ULE_I004锛堝瓨鍦ㄦ�э級25 鏉★紝鍚堣 28 鏉″潎涓虹湡瀹炲樊寮傘��
+
 ## 浜屻�佹祴璇曠粨鏋滄憳瑕�
 
-- 鏈**鏃犱唬鐮佹敼鍔�**锛屾棤銆婂姛鑳芥祴璇曟姤鍛娿�嬶紙浠呮湁鏁版嵁鏍告煡锛夈��
+- 瑙併�婂姛鑳芥祴璇曟姤鍛奯鎶曡祫绯荤粺鏂版ā鏉挎寜琛ㄥご瑙f瀽涓庡鏍稿熀鍑嗙己澶变繚鎶2026-09-21.md銆嬶細**11 鏉$敤渚嬮�氳繃**锛堟鍚� 6 / 璐熷悜 1 / 鍥炲綊 4锛夈��
+- 涓婂崐鏃ワ紙姹囨�诲ぇ琛ㄥ弻杞ㄥ埗瀹氫綅锛夛細鏈**鏃犱唬鐮佹敼鍔�**锛屾棤銆婂姛鑳芥祴璇曟姤鍛娿�嬶紙浠呮湁鏁版嵁鏍告煡锛夈��
 - 鏁版嵁鏍告煡鍙e緞锛氬叏閮ㄧ粨鏋滀笌搴撳唴 `h2031_enterprise_monthly` / `passenger_individual_monthly` /
   `city_bus_monthly` / `city_taxi_monthly` / `wyc_order_monthly` 鐜扮畻鍊奸�愪綅姣斿锛�17 甯傚窞 脳 8 涓湀锛�
   涓�鑷存�ц揪 1e-9锛涘鐜拌剼鏈笌涓棿杈撳嚭宸茬暀妗o紙瑙佷笂锛夈��
diff --git "a/docs/\346\212\225\350\265\204/\350\276\223\345\205\245/\346\250\241\346\235\277_\346\237\245\350\257\242\347\273\223\346\236\234\050\346\212\225\350\265\204\347\263\273\347\273\237-\345\256\242\350\277\220+\347\211\251\346\265\201 2026.7\051.xls" "b/docs/\346\212\225\350\265\204/\350\276\223\345\205\245/\346\250\241\346\235\277_\346\237\245\350\257\242\347\273\223\346\236\234\050\346\212\225\350\265\204\347\263\273\347\273\237-\345\256\242\350\277\220+\347\211\251\346\265\201 2026.7\051.xls"
deleted file mode 100644
index e401235..0000000
--- "a/docs/\346\212\225\350\265\204/\350\276\223\345\205\245/\346\250\241\346\235\277_\346\237\245\350\257\242\347\273\223\346\236\234\050\346\212\225\350\265\204\347\263\273\347\273\237-\345\256\242\350\277\220+\347\211\251\346\265\201 2026.7\051.xls"
+++ /dev/null
Binary files differ
diff --git "a/docs/\346\212\225\350\265\204/\350\276\223\345\205\245/\347\211\251\346\265\201\357\274\210\347\211\251\346\265\201\345\233\255\345\214\272\357\274\211/8\346\234\210/\346\271\226\345\214\227\347\234\201\345\215\201\345\240\260\344\272\244\351\200\232\347\211\251\346\265\201\345\237\272\347\241\200\350\256\276\346\226\275\346\212\225\350\265\204\347\273\237\350\256\241\346\261\207\346\200\273\350\241\250\357\274\210\346\234\210\346\212\245\357\274\211\357\274\2102026\345\271\2648\346\234\210\357\274\211.xls" "b/docs/\346\212\225\350\265\204/\350\276\223\345\205\245/\347\211\251\346\265\201\357\274\210\347\211\251\346\265\201\345\233\255\345\214\272\357\274\211/8\346\234\210/\346\271\226\345\214\227\347\234\201\345\215\201\345\240\260\344\272\244\351\200\232\347\211\251\346\265\201\345\237\272\347\241\200\350\256\276\346\226\275\346\212\225\350\265\204\347\273\237\350\256\241\346\261\207\346\200\273\350\241\250\357\274\210\346\234\210\346\212\245\357\274\211\357\274\2102026\345\271\2648\346\234\210\357\274\211.xls"
index 87b509d..e4b06ae 100644
--- "a/docs/\346\212\225\350\265\204/\350\276\223\345\205\245/\347\211\251\346\265\201\357\274\210\347\211\251\346\265\201\345\233\255\345\214\272\357\274\211/8\346\234\210/\346\271\226\345\214\227\347\234\201\345\215\201\345\240\260\344\272\244\351\200\232\347\211\251\346\265\201\345\237\272\347\241\200\350\256\276\346\226\275\346\212\225\350\265\204\347\273\237\350\256\241\346\261\207\346\200\273\350\241\250\357\274\210\346\234\210\346\212\245\357\274\211\357\274\2102026\345\271\2648\346\234\210\357\274\211.xls"
+++ "b/docs/\346\212\225\350\265\204/\350\276\223\345\205\245/\347\211\251\346\265\201\357\274\210\347\211\251\346\265\201\345\233\255\345\214\272\357\274\211/8\346\234\210/\346\271\226\345\214\227\347\234\201\345\215\201\345\240\260\344\272\244\351\200\232\347\211\251\346\265\201\345\237\272\347\241\200\350\256\276\346\226\275\346\212\225\350\265\204\347\273\237\350\256\241\346\261\207\346\200\273\350\241\250\357\274\210\346\234\210\346\212\245\357\274\211\357\274\2102026\345\271\2648\346\234\210\357\274\211.xls"
Binary files differ
diff --git "a/docs/\346\212\225\350\265\204/\350\276\223\345\207\272/\346\272\220\346\226\207\344\273\266\345\244\207\344\273\275/\346\271\226\345\214\227\347\234\201\345\215\201\345\240\260\344\272\244\351\200\232\347\211\251\346\265\201\345\237\272\347\241\200\350\256\276\346\226\275\346\212\225\350\265\204\347\273\237\350\256\241\346\261\207\346\200\273\350\241\250\357\274\210\346\234\210\346\212\245\357\274\211\357\274\2102026\345\271\2648\346\234\210\357\274\211_\345\216\237\345\247\213\345\220\253\346\255\246\346\261\211\351\273\204\347\237\263_20260921.xls" "b/docs/\346\212\225\350\265\204/\350\276\223\345\207\272/\346\272\220\346\226\207\344\273\266\345\244\207\344\273\275/\346\271\226\345\214\227\347\234\201\345\215\201\345\240\260\344\272\244\351\200\232\347\211\251\346\265\201\345\237\272\347\241\200\350\256\276\346\226\275\346\212\225\350\265\204\347\273\237\350\256\241\346\261\207\346\200\273\350\241\250\357\274\210\346\234\210\346\212\245\357\274\211\357\274\2102026\345\271\2648\346\234\210\357\274\211_\345\216\237\345\247\213\345\220\253\346\255\246\346\261\211\351\273\204\347\237\263_20260921.xls"
new file mode 100644
index 0000000..87b509d
--- /dev/null
+++ "b/docs/\346\212\225\350\265\204/\350\276\223\345\207\272/\346\272\220\346\226\207\344\273\266\345\244\207\344\273\275/\346\271\226\345\214\227\347\234\201\345\215\201\345\240\260\344\272\244\351\200\232\347\211\251\346\265\201\345\237\272\347\241\200\350\256\276\346\226\275\346\212\225\350\265\204\347\273\237\350\256\241\346\261\207\346\200\273\350\241\250\357\274\210\346\234\210\346\212\245\357\274\211\357\274\2102026\345\271\2648\346\234\210\357\274\211_\345\216\237\345\247\213\345\220\253\346\255\246\346\261\211\351\273\204\347\237\263_20260921.xls"
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 63dfe69..c2dba2b 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
@@ -690,23 +690,30 @@
         if (sys == null) return null; // 缂哄け鐢� EXISTENCE_SYS 瑙勫垯鎻愮ず
         String field = rule.getCheckField();
         double actual;
-        double reference;
+        Double referenceObj;
         String fieldName;
         if ("startCum".equals(field)) {
             actual = nvl(monthly.getStartCum());
-            reference = nvl(sys.getStartCum());
+            referenceObj = sys.getStartCum();
             fieldName = "鑷紑濮嬪缓璁剧疮璁�";
         } else if ("yearCum".equals(field)) {
             actual = nvl(monthly.getYearCum());
-            reference = nvl(sys.getYearCum());
+            referenceObj = sys.getYearCum();
             fieldName = "鑷勾鍒濈疮璁�";
         } else if ("monthDone".equals(field)) {
             actual = nvl(monthly.getMonthDone());
-            reference = nvl(sys.getMonthDone());
+            referenceObj = sys.getMonthDone();
             fieldName = "鏈湀瀹屾垚";
         } else {
             return null;
         }
+        // 鍩哄噯缂哄け锛堝鏂版ā鏉裤��2026骞碭鏈堟姇璧勭郴缁熼」鐩槑缁嗐�嬫病鏈夈�岃嚜骞村垵绱銆嶅垪锛夆啋 涓嶅叿澶囧彲姣旀�э紝璺宠繃骞惰鏃ュ織锛�
+        // 涓嶈兘鎶� null 褰撴垚 0 鍘绘瘮瀵癸紝鍚﹀垯浼氭垚鐗囪鎶ャ��
+        if (referenceObj == null) {
+            log.warn("鎶曡祫姣斿璺宠繃锛堟姇璧勭郴缁熷熀鍑嗙己澶憋級锛歳ule={} project={} field={}", rule.getRuleCode(), projectName, fieldName);
+            return null;
+        }
+        double reference = referenceObj;
         String[] parts = rule.getThreshold().split("\\|");
         double absThreshold = parts.length > 0 ? parseDoubleSafe(parts[0], 50) : 50;
         double pctThreshold = parts.length > 1 ? parseDoubleSafe(parts[1], 5) : 5;
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 c694e75..446043d 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
@@ -1808,6 +1808,35 @@
         }
     }
 
+    /** 鎸夎〃澶村叧閿瓧瀹氫綅鍒楀彿锛氫粠绗� 1 鍒楀悜鍙虫壂锛屽懡涓换涓�鍏抽敭瀛楀嵆杩斿洖璇ュ垪锛涙湭鍛戒腑杩斿洖 -1 */
+    private int findColByKeywords(Row header, String... keywords) {
+        if (header == null) return -1;
+        for (int c = 0; c <= header.getLastCellNum(); c++) {
+            Cell cell = header.getCell(c);
+            if (cell == null) continue;
+            String h = FORMATTER.formatCellValue(cell).trim();
+            if (h.isEmpty()) continue;
+            for (String k : keywords) {
+                if (h.contains(k)) return c;
+            }
+        }
+        return -1;
+    }
+
+    /** 琛ㄥご琛屾枃鏈紙鎶ラ敊鎻愮ず鐢級锛屾渶澶氬彇 12 鍒� */
+    private String headerText(Row header) {
+        if (header == null) return "绌�";
+        StringBuilder sb = new StringBuilder();
+        for (int c = 0; c < Math.min(header.getLastCellNum(), 12); c++) {
+            Cell cell = header.getCell(c);
+            String h = cell == null ? "" : FORMATTER.formatCellValue(cell).trim();
+            if (h.isEmpty()) continue;
+            if (sb.length() > 0) sb.append(" | ");
+            sb.append(h);
+        }
+        return sb.length() == 0 ? "绌�" : sb.toString();
+    }
+
     /** 鎸夎〃澶村悕绉板缓绔嬪垪鍙锋槧灏勶紝鍏煎鏂版棫妯℃澘鍒椾綅宸紓 */
     private Map<String, Integer> buildHeaderMap(Row header) {
         Map<String, Integer> colMap = new HashMap<>();
@@ -2931,32 +2960,42 @@
             this.monthly = monthly;
         }
     }
-    /** 鎶曡祫绯荤粺瀵煎嚭瀵煎叆锛堝鏍告瘮瀵瑰熀鍑嗭級锛屽浐瀹�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 =
-        {"琛屽彿", "鍗曚綅", "鏃舵湡", "璁″垝鎬绘姇璧�", "鑷紑濮嬪缓璁�", "鏈勾璁″垝鎶曡祫", "鑷勾鍒�", "褰撴湀瀹屾垚鎶曡祫"};
-
+    /** 鎶曡祫绯荤粺瀵煎嚭瀵煎叆锛堝鏍告瘮瀵瑰熀鍑嗭級銆�
+     *  鍒椾綅**鎸夎〃澶村叧閿瓧瀹氫綅**锛屽吋瀹逛袱绉嶆ā鏉匡細
+     *   - 鑰佹ā鏉裤�婃ā鏉縚鏌ヨ缁撴灉(鎶曡祫绯荤粺-瀹㈣繍+鐗╂祦 2026.7).xls銆嬶細琛屽彿/鍗曚綅/鏃舵湡/璁″垝鎬绘姇璧�/鑷紑濮嬪缓璁剧疮璁�/鏈勾璁″垝鎶曡祫/鑷勾鍒濈疮璁�/褰撴湀瀹屾垚鎶曡祫
+     *   - 鏂版ā鏉裤��2026骞碭鏈堟姇璧勭郴缁熼」鐩槑缁�.xls銆嬶紙鐢ㄦ埛 2026-09-21 鏇存崲锛夛細琛屽彿/鎶曡祫椤圭洰/鏃舵湡/椤圭洰鎵�澶勯樁娈�/璁″垝鎬绘姇璧�/鏈勾璁″垝鎶曡祫/鑷紑濮嬪缓璁捐嚦鏈勾锛堟湀锛夊簳-绱瀹屾垚鎶曡祫/褰撴湀瀹屾垚鎶曡祫
+     *  鏂版ā鏉�**娌℃湁銆岃嚜骞村垵绱銆嶅垪** 鈫� year_cum 鐣欑┖锛堝鏍告椂鎸夈�屽熀鍑嗙己澶便�嶈烦杩囷紝涓嶅啀褰撴垚 0 鍙備笌姣斿锛夈�� */
     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);
+            requireHeaderKeyword(sheet, "鎶曡祫绯荤粺瀵煎嚭", "鎶曡祫椤圭洰", "椤圭洰鍚嶇О", "鍗曚綅", "璁″垝鎬绘姇璧�");
+            Row header = sheet.getRow(0);
+            int cName = findColByKeywords(header, "鎶曡祫椤圭洰", "椤圭洰鍚嶇О", "鍗曚綅");
+            int cTotal = findColByKeywords(header, "璁″垝鎬绘姇璧�");
+            int cYearPlan = findColByKeywords(header, "鏈勾璁″垝鎶曡祫");
+            int cStartCum = findColByKeywords(header, "鑷紑濮嬪缓璁�");
+            int cYearCum = findColByKeywords(header, "鑷勾鍒�");
+            int cMonthDone = findColByKeywords(header, "褰撴湀瀹屾垚鎶曡祫");
+            if (cName < 0 || cTotal < 0 || cYearPlan < 0 || cStartCum < 0 || cMonthDone < 0) {
+                throw new RuntimeException("鎵�閫夋暟鎹被鍨嬨�愭姇璧勭郴缁熷鍑恒�戣〃澶村垪涓嶅畬鏁达細闇�瑕併�屾姇璧勯」鐩�(鎴栧崟浣�)銆佽鍒掓�绘姇璧勩�佹湰骞磋鍒掓姇璧勩��"
+                    + "鑷紑濮嬪缓璁锯�︾疮璁″畬鎴愭姇璧勩�佸綋鏈堝畬鎴愭姇璧勩�嶇瓑鍒楋紝瀹為檯琛ㄥご涓恒��" + headerText(header)
+                    + "銆嶃�傝浣跨敤绯荤粺妯℃澘銆�2026骞碭鏈堟姇璧勭郴缁熼」鐩槑缁嗐�嬫垨銆婃ā鏉縚鏌ヨ缁撴灉(鎶曡祫绯荤粺-瀹㈣繍+鐗╂祦)銆嬫暣鐞嗗悗鍐嶅鍏�");
+            }
             for (int r = 1; r <= sheet.getLastRowNum(); r++) {
                 Row row = sheet.getRow(r);
                 if (row == null) continue;
-                String name = getString(row, 1);
+                String name = getString(row, cName);
                 if (name == null || name.trim().isEmpty()) continue;
                 InvestmentSystem sys = new InvestmentSystem();
                 sys.setReportPeriod(period);
                 sys.setProjectName(name.trim());
-                sys.setTotalInvestment(getDecimal(row, 3));
-                sys.setStartCum(getDecimal(row, 4));
-                sys.setYearPlan(getDecimal(row, 5));
-                sys.setYearCum(getDecimal(row, 6));
-                sys.setMonthDone(getDecimal(row, 7));
+                sys.setTotalInvestment(getDecimal(row, cTotal));
+                sys.setStartCum(getDecimal(row, cStartCum));
+                sys.setYearPlan(getDecimal(row, cYearPlan));
+                sys.setYearCum(cYearCum < 0 ? null : getDecimal(row, cYearCum));
+                sys.setMonthDone(getDecimal(row, cMonthDone));
                 list.add(sys);
             }
         } catch (Exception e) {

--
Gitblit v1.9.1