| | |
| | | { ============================================================================== |
| | | 方法名稱:GetSiteOMR |
| | | 引用相依:FindPoint, GetSiteOMR, Get_OMR, LoadFromFile |
| | | 方法描述:在指定影像文件的特定座標執行 OMR (光學標記辨識)。核心邏輯包含: |
| | | 1. 檢查並載入影像檔(若尚未載入),並呼叫 ClearLine 初始化黑白緩衝區。 |
| | | 2. 讀取影像的 DPI 與寬高資訊。 |
| | | 3. 使用 CM_Str2Rect 將 Site 字串轉為 TRect 矩陣,並參考定位點 (UpLPoi |
| | | nt) 進行位移計算。 |
| | | 4. 限制辨識區域座標不超出影像邊界。 |
| | | 5. 呼叫 Get_OMR 對黑白圖形緩衝區執行辨識並返回結果值(通常為 1 或 0)。 |
| | | 此方法是自動化資料檢核的重要工具。 |
| | | 引用相依:CM_Str2Rect, Get_OMR, ISB_BW, UpLPoint, ClearLine |
| | | 方法描述:【指定區域 OMR 辨識】 |
| | | 在影像的特定座標區域執行填塗辨識。 |
| | | 1. 影像準備:若傳入檔名與目前載入不同,則重新載入影像。 |
| | | 2. 預處理:呼叫 ClearLine 移除表格橫線,避免干擾辨識,並強制重繪。 |
| | | 3. 座標轉換:利用 CM_Str2Rect 將 XML 定義的相對座標(毫米或像素)結合 |
| | | 影像 DPI 與定位基準點 (UpLPoint) 轉換為實體 Rect。 |
| | | 4. 邊界校正:執行邊界檢查,確保 Rect 不超出影像實體寬高。 |
| | | 5. 辨識執行:呼叫核心 Get_OMR 演算法計算填塗黑點比例,回傳辨識結果。 |
| | | ============================================================================== } |
| | | function TCB_IMGPSScanX.GetSiteOMR(FileName,Site:String;bt: Integer): Integer; |
| | | var |
| | |
| | | |
| | | { ============================================================================== |
| | | 方法名稱:CheckRule2OMRErrInfo |
| | | 引用相依: |
| | | 方法描述:將檢核規則清單(CHECK_RULE_INF_List)中的資料轉換為內部的 OMRErrInfo R |
| | | ecord 陣列,設定各項規則的顯示類型(Display)、是否可忽略(Ignore)及提示 |
| | | 訊息與掃瞄模式。 |
| | | 引用相依:CHECK_RULE_INF_List, OMRErrInfo |
| | | 方法描述:【檢核規則元數據映射】 |
| | | 將從伺服器取得的 SQL 檢核規則(共 11 項)轉換為內部的 Record 結構。 |
| | | 1. 狀態映射:將 MESG_SHOW_TYPE (1:顯示, 2:隱藏) 轉為布林值。 |
| | | 2. 權限映射:將 MESG_DISP_TYPE (1:可忽略, 2:強制的) 轉為 Ignore 標記。 |
| | | 3. 內容填充:填入錯誤提示字串與該規則適用的掃瞄模式 (Mode)。 |
| | | 此方法確保前端 UI 與檢核引擎能依據伺服器下達的最新政策執行驗證。 |
| | | ============================================================================== } |
| | | Procedure TCB_IMGPSScanX.CheckRule2OMRErrInfo; //檢核規則填入OMRErrINFo Record |
| | | var i : Integer; |
| | |
| | | |
| | | { ============================================================================== |
| | | 方法名稱:DistinctFormCode |
| | | 引用相依:LoadFileGetMD5, LoadFromFile |
| | | 方法描述:從案件的 Context.dat 檔案中提取不重複的表單代碼(FormCode)並存入 OMRF |
| | | ileList。程序會遍歷上傳目錄下的所有檔案,檢查檔案是否存在且未被處理過。 |
| | | 接著比對 OMRFileList 中已有的表單代碼,若為新出現的表單代碼且檔案有效 |
| | | ,則將其加入清單中,用於後續 OMR 處理。 |
| | | 引用相依:reSizeExistImgList, ISExistImg, Context.dat |
| | | 方法描述:【提取待檢核表單清單】 |
| | | 從案件中篩選出不重複且需執行 OMR 的表單代碼。 |
| | | 1. 補件過濾:在補件模式 (FWH_category='N') 下,透過實體檔案存在性與 |
| | | MD5 排除清單 (reSizeExistImgList) 自動跳過歷史影像。 |
| | | 2. 去重邏輯:針對新掃入的影像,僅提取每種表單 ID 的第一頁 (Index 0), |
| | | 避免對多頁重複執行相同的表單級檢核。 |
| | | ============================================================================== } |
| | | Procedure TCB_IMGPSScanX.DistinctFormCode(CaseID:String); //從案件裡的FormCode取出第一頁 |
| | | var |
| | |
| | | |
| | | { ============================================================================== |
| | | 方法名稱:OMRCheckCase |
| | | 引用相依:FileExists, FindPoint, GetSiteOMR, ImageReSize_FormID, ImageResize, |
| | | LoadFromFile, SaveToFile |
| | | 方法描述:執行案件的自動化 OMR 規則檢核,這是確保掃瞄案件合規性的核心邏輯。程序 |
| | | 流程: |
| | | 1. 初始化檢核日誌。 |
| | | 2. 識別主文件並驗證必要文件是否缺漏、相依與互斥文件是否衝突、以及表單 |
| | | 是否已停用。 |
| | | 3. 檢查各文件類型是否超過預設的最大頁數。 |
| | | 4. 針對案件內每張影像,執行十字定位點縮放 (ImageReSize_FormID) 後,載 |
| | | 入對應表單的 XML 規則檔。 |
| | | 5. 執行欄位級檢核,包含必填項 (settype1)、跨文件欄位關聯 (settype3/set |
| | | type8)、相依文件需求 (settype4) 及備註填寫要求 (settype6) 等。 |
| | | 6. 將所有檢核失敗原因紀錄至 Checkerr.ini。最終返回案件是否通過所有檢 |
| | | 核規則。 |
| | | 引用相依:XML 規則檔, ImageReSize_FormID, OMRErr2ini, 檢核子系統 |
| | | 方法描述:【案件自動化合規性總檢核】 |
| | | 此為系統最核心的檢核引擎,負責串接所有驗證邏輯: |
| | | 1. 檔案層級檢核:驗證主文件是否存在、頁數是否符合規格 (GetDataDocNoPage)、 |
| | | 檢查相依文件需求與互斥文件衝突。 |
| | | 2. 版本與效期:檢查是否有已停用 (STOP_DATE) 或未註冊的表單 ID。 |
| | | 3. 表單級 OMR: |
| | | - 定位校正:對每張影像執行十字定位縮放 (ImageReSize_FormID)。 |
| | | - 載入 XML:依據 FormID 載入對應的欄位座標與辨識規則。 |
| | | - 欄位辨識:執行必填、跨文件關聯、相依文件欄位、及備註填寫要求等檢核。 |
| | | 4. 結果輸出:將所有失敗原因即時寫入 Checkerr.ini (UI 顯示) 或 |
| | | CheckMemo.dat (背景日誌)。 |
| | | 回傳案件是否通過所有「強制性」檢核項。 |
| | | ============================================================================== } |
| | | Function TCB_IMGPSScanX.OMRCheckCase(CaseID:String):Boolean; //OMR檢核 |
| | | var |
| | |
| | | |
| | | { ============================================================================== |
| | | 方法名稱:OMRErr2ini |
| | | 引用相依:FileExists, LoadFromFile, SaveToFile |
| | | 方法描述:紀錄 OMR 檢核失敗的詳細資訊。方法根據 Display 旗標決定紀錄方式:若為 T |
| | | rue,則在案件目錄下的 Checkerr.ini 中建立新的錯誤序號區段,詳細紀錄失 |
| | | 敗原因、檔案路徑、OMR 座標點、關聯檔案及定位點類型,用於後續 UI 呈現;若 |
| | | 為 False,則僅將錯誤原因字串附加於 CheckMemo.dat 純文字日誌中,作為背 |
| | | 景紀錄之用。 |
| | | 引用相依:Checkerr.ini, CheckMemo.dat |
| | | 方法描述:【檢核錯誤持久化】 |
| | | 將檢核失敗詳細資訊存檔。 |
| | | - UI 模式 (Display=True):在 Checkerr.ini 建立錯誤區段,記錄錯誤原因、 |
| | | 影像路徑、座標、關聯影像與定位點類型,供 ErrList 視窗點選定位。 |
| | | - 靜默模式:將原因字串附加至 CheckMemo.dat,用於傳送案件時的背景描述。 |
| | | ============================================================================== } |
| | | Procedure TCB_IMGPSScanX.OMRErr2ini(CaseID,Reason,FileName,Site,RelaFileName,RelaSite,Anchor,Anchor1:String;Del,Ingnore,Display:Boolean); //OMR檢核失敗寫入ini |
| | | var |
| | |
| | | |
| | | { ============================================================================== |
| | | 方法名稱:OMRErrini2List |
| | | 引用相依: |
| | | 方法描述:將檢核失敗紀錄從 INI 設定檔載入至 UI 介面。方法會讀取 Checkerr.ini,遍 |
| | | 歷所有錯誤紀錄,並過濾掉已標記為刪除 (Del) 的項目。將符合條件的錯誤原 |
| | | 因填入 ErrlistForm 中的 ListView 元件,供使用者查看與修正。若清單中仍 |
| | | 存在錯誤,會同步停用介面上的上傳按鈕以防止不合規案件送出。 |
| | | 引用相依:Checkerr.ini, ErrlistForm |
| | | 方法描述:【加載錯誤紀錄至 UI】 |
| | | 讀取 Checkerr.ini,過濾已刪除項,將錯誤原因填入 ErrlistForm 的 ListView。 |
| | | 若存在錯誤,則同步停用「立即上傳」按鈕以實施業務擋控。 |
| | | ============================================================================== } |
| | | Procedure TCB_IMGPSScanX.OMRErrini2List(CaseID:String;ErrlistForm:TErrlistForm); //OMR檢核失敗從ini寫入ListView |
| | | var |
| | |
| | | |
| | | { ============================================================================== |
| | | 方法名稱:OMRErrini2ListForLog |
| | | 引用相依:LoadFromFile |
| | | 方法描述:彙整系統中所有活動案件的 OMR 檢核錯誤訊息。方法讀取全域的 CaseList.da |
| | | t,依次遍歷每個案件子目錄下的 Checkerr.ini,收集所有未被移除的錯誤原因 |
| | | ,並將其合併為一個完整的文字區塊返回。此功能主要用於產生系統運行日誌, |
| | | 方便追蹤與審查多案件的檢核狀態。 |
| | | 引用相依:CaseList.dat, Checkerr.ini |
| | | 方法描述:【彙整所有待傳案件錯誤日誌】 |
| | | 遍歷本地 CaseList.dat 所有活動案件,讀取其 Checkerr.ini 彙整所有 |
| | | 未修正的錯誤原因,產出完整的文字報告供日誌記錄使用。 |
| | | ============================================================================== } |
| | | function TCB_IMGPSScanX.OMRErrini2ListForLog(CaseID: String): String; |
| | | var |