跳转到主要内容
在配置好 Extraction Rules 活动后,我们可以添加业务规则来验证并规范化 field 值。

调整医生 ID

首先,我们将调整“Doctor ID”字段的属性。Extraction Rules 活动处理的是预识别结果,这些结果可能包含 Optical Character Recognition (OCR) 错误和不必要的字符。定位到字段区域后,可以在字段属性中指定正则表达式以进一步调整字段值。数据将被重新提取,并消除 OCR 错误。
  1. 单击 Skill 名称,然后转到 Fields 选项卡。
  2. 展开“Doctor”组,单击其旁边的设置 icon,打开“Doctor ID”字段设置。
  3. 在字段属性的 Value 部分,单击 Regular expression 选项旁的添加 icon。
  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. 点击数据表单下方的添加 icon。将打开 New Rule 对话框。
注意: 如果你看不到添加 icon,请切换到文档图像上方的 Reference 部分。
  1. 选择 Advanced Script Rule 并点击 Next
  2. 将规则重命名为 “Check validity”。
  3. 在 fields 列表中选择 “Date”、“Start Date” 和 “End Date” field。
  4. 点击 Next
  5. 将以下脚本粘贴到脚本编辑器中:
// 为所有要访问的字段创建变量
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;

//检查文档中是否找到了"Start Date"字段
if (startDate && issueDate)
{
   //检查签发日期是否超过开始日期3天以上
    if ((issueDate.getTime() - startDate.getTime()) / 3600000 / 24 > 3)
    {
        Context.CheckSucceeded = false;
        Context.ErrorMessage = "病假条签发时间过晚";
    }
}
  1. 点击 Save,查看该规则在集合中的不同文档上如何运行。要检查该规则如何处理错误,您可以在数据表单的 field 中手动输入测试值。每次更改 field 的值时,规则都会被重新应用。

检查病假时长

我们将使用病假的开始日期和结束日期来计算时长。如果文档中已注明时长,我们将检查其是否与计算结果一致;如果文档未包含时长,我们会将计算值写入相应的field。
  1. 在数据表单下方点击添加icon以创建规则。
  2. 选择Advanced Script Rule并点击Next
  3. 将规则重命名为“Check duration”。
  4. 在fields列表中选择“Start Date”“End Date”和“Duration”字段。务必在两列中都选择这些字段,因为我们不仅要读取field值,还可能在必要时对其进行更正。
  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);

   //如果未找到时长字段或无法将其解析为数字,则将计算值传递给该字段
   if (!durationField.Value)
       durationField.Value = length; 

   //如果找到了时长字段,则将其值与计算的时长进行比较
   else if (durationField.Value != length)
   {
       Context.CheckSucceeded = false;
       Context.ErrorMessage = "\"Duration\"字段的值与实际病假时长不匹配";
       durationField.AddSuggestion(length.toString());
   }
}
  1. 点击 Save,查看该规则在集合中不同文档上的效果。要检查规则如何处理错误,您可以在数据表单中的 field 中手动输入测试值。每次更改 field 的值时,规则都会被重新应用。