第329章 聯調翻車!嵌套合併單元格!四十八小時極限修復!

投票推薦 加入書籤 小說報錯

  三月二十一號。周日。

  早上八點。遠望工作室。

  趙強比林遠先到。

  聯調環境昨晚已經搭好了——隔離機器上跑著預處理管線和模板引擎,兩份德勤真實數據已經加載到輸入隊列。

  "準備?"林遠放下書包。

  "隨時。"趙強打開監控面板。"流程是:原始數據→預處理管線(中文大寫轉換+級聯填充+日期識別)→模板引擎(IFRS三十九欄位映射)→標準JSON輸出。"

  "從應收帳款明細開始。四千八百行,髒度最高。"

  "好。"

  趙強點擊運行。

  預處理管線啟動。屏幕上刷出一行行處理日誌——

  "第1行:格式識別→逗號型金額→轉換完成。"

  "第2行:格式識別→純數字金額→轉換完成。"

  "第3行:格式識別→中文大寫金額→轉換完成。"

  前兩百行全部綠色。

  然後——

  "第217行:錯誤。中文大寫金額轉換失敗。輸入值:'零壹佰零叄元伍角'。"

  趙強停了程序。

  "'零壹佰零叄元伍角'。"林遠湊過來看,"開頭有個零。"

  "中文大寫金額不應該以零開頭。"趙強說,"這是審計師手工錄入的錯誤——多打了一個'零'字。"

  "預處理模塊怎麼處理這種異常?"

  "現在的邏輯是——遇到無法解析的金額,直接標記為'轉換失敗',欄位值保留原始文本。"

  "不行。"林遠說,"審計數據里這種錄入錯誤非常普遍。預處理模塊要有糾錯能力——開頭的零自動去掉,然後再解析。"

  "如果中間有連續的零呢?比如'壹零零零叄元'?"

  "那是10003——兩個單位字之間的零是跳位標記,不是多餘輸入。"林遠想了一下,"規則這樣寫:開頭的零視為錄入錯誤,自動去除;兩個單位字之間的零視為跳位,保留。區分標準是——零後面跟的是單位字還是數字字。"

  "明白。"趙強已經開始改代碼。

  上午十一點。第一個bug修完。

  重新跑應收帳款明細。

  【寫到這裡我希望讀者記一下我們域名𝚃𝚆看書網→𝚜𝚑𝚞.𝚝𝚠】

  前五百行全部通過。

  然後——

  "第531行:錯誤。級聯填充異常。欄位'資產類別'值繼承鏈斷裂。"

  趙強調出原始數據。

  "看這裡。"他指著屏幕,"合併單元格的層級——第一行'固定資產'合併了A1到A5,第二行'機器設備'合併了A6到A12。但在A13——又出現了'固定資產',沒有合併標記,是一個普通單元格。"

  "三級嵌套。"林遠皺眉。

  "對。前兩級的合併單元格有XML標記,級聯填充能處理。但第三級——A13是普通單元格,不是合併區域的一部分。級聯填充把它當成一個獨立的新值,覆蓋了前面的繼承鏈。後面A14到A20全是空值,應該繼承A13的'固定資產',但繼承鏈斷了。"

  "問題出在哪?"

  "級聯填充只處理了合併單元格區域的向前填充。遇到非合併區域的獨立單元格打斷繼承鏈的情況——沒有處理。"

  林遠坐下來想了一分鐘。

  "加一層邏輯。"他說,"在級聯填充之前,先做一次'繼承錨點'掃描。不管是不是合併單元格,只要某個單元格的值和上一行相同或者屬於同一分類體系——就認定為同一個繼承域。"

  "怎麼判斷'屬於同一分類體系'?"

  "關鍵詞匹配。"林遠說,"固定資產台帳里的分類是有層級的——一級分類就那幾個:固定資產、無形資產、投資性房地產。二級分類在一級下面。如果遇到一個值能匹配到一級分類的關鍵詞——它就是新的錨點,不管它是不是合併單元格。"

  "用關鍵詞白名單?"

  "對。先把一級分類的關鍵詞提取出來——從數據本身統計。出現頻率最高、且後面跟著大量空值行的那些值,就是一級分類。"

  趙強點頭。"這個思路好。不依賴Excel的合併標記,而是從數據本身的分布推斷層級結構。"

  "改多久?"

  "兩個小時。"

  "中午之前能搞定?"

  "能。"

  下午兩點。

  第二個bug修完。趙強加了繼承錨點掃描模塊——先從數據里自動提取一級分類關鍵詞,然後在級聯填充時以這些關鍵詞為錨點重建繼承鏈。

  重新跑。

  前兩千行——全部綠色。

  趙強臉上露出了一絲放鬆的表情。

  然後——

  "第2147行:錯誤。日期格式識別失敗。輸入值:'二〇〇三年十二月三十一日'。"

  "中文日期。"林遠說。

  "之前的日期識別模塊覆蓋了四種格式——斜槓分隔、短橫線、純數字、'12月31日2003年'。但這種用中文數字寫的——'二〇〇三年'——沒有覆蓋。"

  "中文數字和中文大寫不一樣。"趙強說,"大寫是'壹貳叄',這裡是'一二三'——用的是普通漢字數字。而且年份用的是'〇'不是'零'。"

  "加一組規則。"林遠說,"中文日期格式:'X年Y月Z日',其中X是中文年份(用'〇一二三四五六七八九'),Y和Z是中文月份和日期(可能用'十''二十''三十')。"

  "轉換邏輯?"

  "先用一個映射表把中文數字轉成阿拉伯數字——〇=0,一=1,二=2……十=10。然後處理組合——'十二'=12,'二十'=20,'二十三'=23。最後輸出標準格式YYYY-MM-DD。"

  "不複雜,但組合情況多。"

  "先覆蓋這批數據里出現的格式。"林遠說,"不要過度設計。把德勤三份數據里所有日期格式的樣本抽出來,逐一覆蓋。"

  趙強用腳本跑了個統計。"三份數據里一共有七種日期格式。之前的模塊覆蓋了四種。剩下三種——中文日期、帶中文月份的混合格式、還有一個用'.'分隔的——'2003.12.31'。"

  "兩種要新寫規則,一種加個分隔符匹配就行。"

  "一個小時。"

  晚上七點。

  三個bug全部修完。

  趙強重新運行全量測試。

  八千九百多行數據,三份文件,全部進入預處理管線。

  日誌瘋狂刷屏。

  趙強盯著屏幕,一行一行看。

  十分鐘。

  二十分鐘。

  "最後一行——"

  日誌停住了。

  趙強的心跳快了一拍。

  三秒後——

  "處理完成。總行數:8,927。成功:8,927。失敗:0。"

  零失敗。

  林遠靠在椅背上,長長地呼了一口氣。

  "過模板引擎。"

  趙強把預處理後的數據導入模板引擎。IFRS三十九欄位映射開始運行。

  又是十分鐘的等待。

  "轉換完成。總行數:8,927。成功:8,927。平均耗時:五十三毫秒。欄位完整率:百分之九十九點二。"

  "百分之九十九點二——剩下的0.8%是什麼?"

  "原始數據中確實不存在的欄位。不是轉換失敗,是源數據本身就沒有這個信息。容錯標記為'未披露'。"

  "正確行為。"林遠說,"引擎不該憑空編造數據。源數據沒有,就標'未披露'。"

  他看了一眼時間。晚上七點二十五分。

  三月二十一號,周日。距離截止日還有——

  "不到二十四小時。"趙強說。

  "夠了。"林遠站起來,"跑第二輪全量回歸。我從頭到尾看一遍輸出樣本。確認每個欄位的映射邏輯都沒問題。"

  "好。"

  三月二十二號。周一。

  早上九點。

  林遠把全量測試報告打包,發給陳嘉怡。

  附件包含三部分內容——

  第一,數據質量分析報告:三份數據的髒度統計、七種日期格式、四種金額格式、三級嵌套合併單元格。

  第二,適配方案文檔:預處理管線架構、中文大寫金額轉換器、級聯填充算法(含繼承錨點掃描)、日期格式自動識別、容錯處理邏輯。

  第三,全量測試結果:8,927行數據,零轉換失敗,欄位完整率99.2%,平均轉換耗時53毫秒。

  郵件最後附了一句話——

  "模板適配完成。隨時可以進行實操Demo。"

  發送。

  趙強靠在椅子上。"兩天。從零開始到全量通過——兩天。"

  "不是從零開始。"林遠說,"模板引擎的架構是兩周前就設計好的。我們做的不是造引擎——是給引擎裝零件。三個預處理模塊加兩個bug修復。架構不變,零件按需加。"

  "這就是你說的'加一套模板就支持一套新標準'?"

  "不只是加模板。"林遠說,"是加預處理能力。每處理一種髒數據,引擎就多一種適應性。PwC的SOC 2數據教了引擎處理非標準Syslog。德勤的IFRS數據教了引擎處理中文大寫、合併單元格、多種日期格式。這些能力是通用的——下一家客戶,不管用什麼標準,引擎都能接。"

  趙強想了想。"引擎在進化。"

  "對。"林遠說,"每處理一種真實數據,就進化一次。


章節目錄