國家資料新鮮度是一個很少被主動討論、卻幾乎每次稽核都會被問到的題目。國名會更替、貨幣會變、行政區劃會調整,只要資料是靜態的,它就一定有一天會與現實不符。問題從來不是「會不會過期」,而是「過期的時候你知不知道、能不能解釋」。以下說明怎麼把這件事變成可管理的流程。
國家資料為什麼會過期?
因為它描述的是會變動的現實。名稱、貨幣、行政層級、投遞體系、電信編碼,這些都不是自然常數,而是由人或機構決定的約定,只要相關機構做出決定,資料就會在一夜之間變得過時。
更棘手的是,過期通常不會產生錯誤訊息。舊的資料照樣能通過格式檢查,照樣能存進資料庫,只是它指向的現實已經不在了。於是問題會累積,直到某一天在報表或對外文件上被外人發現。
還有一種不明顯的過期:不是值錯了,而是適用範圍變了。某個欄位以前只在部分地區適用,現在變成全面適用;這種變化不會改變任何一筆既有資料,卻會讓既有的判定規則失效。
這一類變化最難被發現,因為它沒有任何一筆資料需要修改。要抓到它,只能靠定期把判定規則本身拿出來檢視,而不是只檢查資料的內容是否還在,以及看起來是否仍然合理。
改名、貨幣與行政區劃的變動
變動可以分成幾種類型,它們的處理方式不同,因此值得先分類再決定流程。
| 變動類型 | 影響的欄位 | 主要風險 |
|---|---|---|
| 名稱更替 | 顯示名稱與別名 | 舊資料與新資料被當成兩個對象 |
| 貨幣變更 | 與金額相關的欄位 | 歷史金額被重新解讀 |
| 行政區劃調整 | 上層選單與對照關係 | 舊值找不到對應的上層 |
| 投遞體系變更 | 郵遞區號相關欄位 | 既有格式突然不再適用 |
這幾類變動的共同點是:它們都會讓「同一個識別碼在不同時間代表不同內容」。因此只記住值是不夠的,還要記住這個值是在什麼時間點被認定為正確的。
分類的另一個好處是能對應到不同的檢查。名稱更替要做的是別名對照,貨幣變更要做的是歷史金額的說明,行政區劃調整要做的是父子關係的修補。把它們全部當成同一種更新,就會在某一類上漏掉必要的處理。
取數日期為什麼必須存下來
沒有取數日期,就無法判斷一條差異是「我們錯了」還是「它舊了」。這兩種情況的處置完全不同:前者要修,後者只是時間差,而時間差在對外溝通時是可以被解釋的。
因此每一筆記錄都建議帶著三樣東西:來源、取數日期、適用範圍。來源回答「這是誰說的」,取數日期回答「什麼時候說的」,適用範圍回答「這句話涵蓋哪些情況」。三者缺一,這筆記錄在爭議時就無法自證。
| 欄位 | 回答的問題 | 缺少時的後果 |
|---|---|---|
| 來源 | 這個值是誰提供的 | 無法追溯,也無法判斷權威性 |
| 取數日期 | 這個值是什麼時候取得的 | 無法區分錯誤與時間差 |
| 適用範圍 | 這個值涵蓋哪些情形 | 過度套用,產生看起來合理的錯誤 |
取數日期還有一個實際用途:它可以被用來排定重新檢視的順序。日期越久、影響面越大的記錄,越應該優先被確認,而不是平均分配檢視資源。
檢視週期也建議依影響面分級。影響面大的記錄縮短週期,影響面小的可以拉長;如果全部套用同一個週期,最後不是浪費人力,就是重要的那幾筆也被拖著一起等。
歷史訂單不該被新資料改寫?
不該。已經成立的交易、已經開立的文件,都應該保留當時的快照。如果它們會隨著目錄更新而變動,歷史紀錄就會失真,而失真的歷史紀錄無論對內對外都沒有說服力。
實務上常見的錯誤是只存代碼不存快照。這樣做短期很省空間,但當某個名稱變更之後,所有歷史文件都會跟著顯示新名稱,於是「當時那份文件上寫的是什麼」永遠無法回答。
正確的做法是分兩層:主檔提供最新的值,交易層在成立當下把需要的值複製一份留存。這樣更新目錄時不會動到歷史,而新的交易又能用到最新的資料。
分兩層還有一個附帶要求:快照要能被查詢,而不只是被保存。如果快照只能整批匯出、無法針對單一筆交易調閱,那麼它在處理客訴時的實際價值會大打折扣。
同樣的邏輯也適用於別名。當一個名稱變更時,舊名稱應該被保留為別名,而不是被刪除;否則以舊名稱輸入的既有資料會突然找不到對應,而使用者只知道「以前可以,現在不行」。
兩個來源衝突時怎麼辦
先選一個當基線,並把例外寫成清單。臨時裁決看起來很有效率,但它把知識留在個人身上,下次遇到同一個衝突時還要再吵一次。
- 指定一個主要來源作為基線,並在文件中說明選擇它的理由。
- 少數與基線不同的情況寫進例外清單,並記錄依據與日期。
- 清單要有負責人與檢視週期,否則例外會慢慢變成事實上的第二套標準。
- 每次衝突都用同一套流程處理,不要因為誰先發現就依誰的版本。
來源本身的權威性也要分清楚。官方機構發布的變更通報適合當時間錨點,因為它有明確的發布時間;網頁快照或二手整理則只適合作為線索,不適合作為最終依據。
給開發者:把來源與日期當成欄位
既然來源與日期是判斷的前提,就別把它們留在文件或註解裡,讓它們成為資料的一部分。
- 每一筆記錄都帶著來源標識與取數日期。
- 交易層保存成立當下的值,而不是只存指標。
- 別名只增不刪,並標明每個別名有效的期間。
- 更新流程區分全量替換、增量補丁與按需修正,並記錄這一輪用的是哪一種。
- 讓「這筆資料多久沒被檢視」成為可查詢的條件。
文中的來源名稱、取數日期與版本標示都只是為了示範流程而編造的合成示例,不指向任何真實資料來源,也不代表任何真實系統的更新時程或作業規範。要接著看規模化之後怎麼管理這些例外,可以讀跨國家擴充測試資料;而現況該怎麼量,起點在國家資料覆蓋率清單。
下一步
挑一份你手上最舊的對照資料,替它補上來源、取數日期與適用範圍三欄。補的過程通常會發現有些記錄根本說不出來源,而這正是這一輪最該處理的部分。各地方目前的欄位樣貌,可以在國家與地區目錄查閱,或先從日本國家頁開始對照。