編輯 | 究查 | 歷程 | 原始

業務邏輯與資料解析模組 (Business Logic & Parser) 深度分析

CB_IMGPSScanImp.pas 中,「業務邏輯與資料解析模組」扮演了將底層掃描影像與上層銀行/保險業務需求結合的橋樑。它將前端網頁傳入的原始設定資料,轉換為系統可理解的「案件 (Case)」、「文件 (Document)」與「表單 (Form)」結構,並執行極度複雜的業務規則檢核 (OMR 檢核)。

若要將此模組進一步細拆,其內部組成可分為以下四大子分類:


1. 系統參數與組態儲存庫 (Config & Parameter Repository)

職責:負責解析由 Web 端透過字串傳入的各類系統設定表(通常以 !@! 等特殊符號分隔),並將其儲存於記憶體中供全局查詢。
核心實作特性
* 字串表解析:大量使用 TStringList 作為輕量級的記憶體資料庫 (SetSQLData, GetSQLData, FindSQLData)。
* 系統設定下載與維護 (GetSetInf1 ~ GetSetInf7):
* DOC_INF:文件設定檔(定義文件類型、是否需入庫等)。
* FORM_INF:表單設定檔(定義條碼對應、長寬、十字定位點、最大頁數)。
* DM_FORM_INF:相依與互斥規則檔。
* CHECK_RULE_INF:檢核規則錯誤訊息定義檔。
* WORK_INF:系統與硬體掃描的預設參數。

2. 領域實體對映與結構管理器 (Entity Mapping & Structure Manager)

職責:將抽象的條碼 (Barcode) 對映至具體的業務實體,並在檔案系統上維護「案件 -> 文件分份 -> 頁面」的實體目錄與虛擬樹狀結構 (.dat 索引檔)。
核心實作特性
* 條碼解析對映BarCode2FormIDBarCode2CaseIDFormCode2DocNoDocNo2DocName
* 虛擬檔案系統維護
* 處理文件是否需要拆分多份 (DocNoNeedDiv)。
* 管理 Context.datCaseDocNo.datCaseDocNo_Copies.dat 等索引檔,以記錄掃描影像與業務文件的歸屬關係。
* 封裝資訊產生器CreateDocNo_InfoCreateCustDocNo_Info (將目錄結構轉換回 Web 端所需的特定字串格式)。

3. OMR 與業務規則檢核引擎 (OMR & Business Rule Engine)

職責:整個系統最龐大且複雜的業務邏輯核心,負責確保掃描進來的影像完全符合進件規定,防止缺件或矛盾。
核心實作特性 (OMRCheckCase):
* 文件級別檢核 (Document-Level Rules)
* 主文件檢核:檢查主要文件是否齊全、頁數是否符合資料庫預期。
* 相依/互斥檢核:依據 DM_FORM_INF,判斷若存在 A 文件,是否遺漏了必附的 B 文件,或錯誤附上了互斥的 C 文件。
* 生命週期檢核:判斷表單條碼是否已超過停用日期、或超過允許的最大掃描頁數。
* OMR 畫記與欄位級別檢核 (Field-Level OMR Rules) (透過 Xmltool 解析 .xml 設定檔,並計算指定 (X, Y) 座標的黑白像素點 GetSiteOMR):
* settype1 (必填檢核):特定的 OMR 區塊必須有畫記。
* settype3 (有值連動必填):A 欄位有畫記時,相關的 B 欄位也必須畫記。
* settype8 (有值連動互斥):A 欄位有畫記時,相關的 B 欄位不能畫記。
* settype4 (有值相依文件):特定欄位有畫記時,系統必須檢查是否已附上指定的文件。
* settype5 (有值互斥文件):特定欄位有畫記時,系統必須檢查不能附上指定的文件。
* settype6 (強制備註):特定欄位有畫記時,要求使用者必須手動輸入備註說明。
* settype7 (OMR 帶值提取):讀取畫記並轉換為特定的業務數值 (GetValue.xml),隨後傳回後端。

4. 案件異動與舊案引用處理器 (Case Modification & Legacy Handler)

職責:處理「補件 (ESCAN)」、「重掃 (RSCAN)」、「引用舊件」等極度複雜的邊界狀態與跨案件資料流動。
核心實作特性
* 文件引用管理SetUseCaseGetUseCase 記錄與追蹤不同案件之間文件的借用與引用關係 (記錄於 UseCase.ini)。
* 版本相容與轉換OldCasetoNewCaseErrFormtoCurrentForm (處理舊系統升級或表單版本更迭時的自動替換邏輯)。
* 防呆與鎖定DeleteDocNoFileForESCAN 等邏輯,防止在補件模式下誤刪非當次掃描的既有影像。


💡 未來重構與微服務化建議

若要將此「業務邏輯模組」進行現代化重構,強烈建議引入以下設計模式:

  1. Repository Pattern (儲存庫模式):將目前散落的 FindSQLDataTStringList 查詢,封裝為 FormConfigRepositoryDocConfigRepository 等強型別介面,隔離底層字串處理細節。
  2. Rule Engine (規則引擎):將 OMRCheckCase 內部數百行的 if/else 與 XML 巡覽,拆分為獨立的實體類別(例如 RequiredFieldRule, DependencyDocumentRule, MutexFieldRule),並透過統一的 Validator 介面依序執行,大幅提升可測試性 (Testability) 與維護性。
  3. Domain Driven Design (領域驅動設計):將依賴實體 .dat 檔案的狀態管理,重構成記憶體中的 TCase, TDocument, TPage 領域物件,只有在最終儲存或打包時才寫入實體檔案系統。