跳轉到主要內容
在完成 Extraction Rules 活動的設定之後,我們可以新增業務規則來驗證與正規化欄位值。

調整醫師 ID

首先,我們要先調整 “Doctor ID” 欄位的屬性。Extraction Rules 活動使用的是預先識別的結果,其中可能包含 OCR 錯誤和不必要的字元。在找到欄位區域後,我們可以進一步在欄位屬性中指定正規表示式,以調整欄位值。資料會重新擷取,並藉此消除 OCR 錯誤。
  1. 按一下 skill 名稱,然後前往 Fields 分頁。
  2. 展開 “Doctor” 群組,並按一下其旁邊的設定圖示,開啟 “Doctor ID” 欄位設定。
  3. 在欄位屬性的 Value 區段中,按一下 Regular expression 選項旁邊的新增圖示。
  4. 將下列表達式貼到 Regular Expression Editor 中:[0-9]{1}[\/.-]{1}[0-9]{5}[\/.-]{1}[0-9]{2}[\/.-]{1}[0-9]{3}
注意: 此編輯器使用的通用標記法與 Extraction Rules Activity Editor 使用的標記法不同。若需更多資訊,請在 Regular Expression Editor 中按一下 Syntax help。
  1. 按一下 Save 關閉 Regular Expression Editor,然後再按一下 Save 關閉欄位屬性。

檢查病假證明是否有效

病患應該在首次生病後 3 天內收到病假證明。這表示開立日期必須不晚於生病開始日期後的第 3 天。 若要檢查此條件,我們需要設定一個腳本規則。
  1. 按一下資料表單下方的新增圖示,會開啟 New Rule 對話方塊。
注意: 如果看不到新增圖示,請切換到文件影像上方的 Reference 區段。
  1. 選取 Advanced Script Rule,然後按一下 Next
  2. 將規則重新命名為「Check validity」。
  3. 在欄位清單中選取 “Date”、“Start Date” 和 “End Date” 欄位。
  4. 按一下 Next
  5. 將下列腳本貼到腳本編輯器中:
// Create variables for all the fields you're going to access
var dateField = Context.GetField("Date");
var startField = Context.GetField("Start Date");
var endField = Context.GetField("End Date");

var issueDate = dateField.Value;
var startDate = startField.Value;

//Check if the "Start Date" field was found on the document
if (startDate && issueDate)
{
   //Check if the issue date is not more than 3 days after the start date
    if ((issueDate.getTime() - startDate.getTime()) / 3600000 / 24 > 3)
    {
        Context.CheckSucceeded = false;
        Context.ErrorMessage = "病假單簽發時間過晚";
    }
}
  1. 按一下 Save,然後檢視此規則在該集合中不同文件上的運作方式。若要檢查規則如何處理錯誤,您可以在資料表單中的欄位中手動輸入測試值。每次您變更欄位值時,規則都會重新套用。

檢查病假期間

我們將使用病假開始與結束日期來計算病假期間。如果文件中指定了期間,我們會檢查它是否等於計算得出的期間。如果文件中沒有包含期間,我們會將計算值寫入對應的欄位中。
  1. 按一下資料表單下方的新增 icon 來建立規則。
  2. 選擇 Advanced Script Rule,然後按一下 Next
  3. 將規則重新命名為「Check duration」。
  4. 在欄位清單中選擇「Start Date」、「End Date」及「Duration」欄位。務必在兩欄中都選擇這些欄位,因為我們不僅要讀取欄位值,也會在必要時更正它們。
  5. 按一下 Next
  6. 將以下指令碼貼入指令碼編輯器中:
// 為所有要存取的欄位建立變數
var startField = Context.GetField("Start Date") ;
var endField = Context.GetField("End Date");
var durationField = Context.GetField("Duration");

var startDate = startField.Value;
var endDate = endField.Value;

//檢查文件上是否找到「Start Date」和「End Date」欄位
if (endField && endDate && startField && startDate)
{
   //計算病假天數
   var length = (1 + (endDate.getTime() - startDate.getTime()) / 3600000 / 24);

   //如果未找到 duration 欄位或無法解析為數字,則將計算值傳遞給該欄位
   if (!durationField.Value)
       durationField.Value = length; 

   //如果找到 duration 欄位,則將其值與計算的天數進行比較
   else if (durationField.Value != length)
   {
       Context.CheckSucceeded = false;
       Context.ErrorMessage = "「Duration」欄位的值與實際病假天數不符";
       durationField.AddSuggestion(length.toString());
   }
}
  1. 按一下 Save,並檢查此規則在該集合中不同文件上的運作方式。若要檢查規則如何處理錯誤,可以在資料表單上的欄位中手動輸入測試值。每次變更欄位值時,系統都會重新套用該規則。