> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ステップ 9. ビジネス ルールを構成する

> 抽出された field の値を検証して正規化するためのビジネス ルールを追加します。regular expression で Doctor ID を調整し、スクリプト ルールで病欠証明書の有効性を確認します。

Extraction Rules のアクティビティを構成したら、field の値を検証および正規化するためのビジネス ルールを追加します。

<div id="adjust-the-doctors-id">
  ## Doctor ID の調整
</div>

**Doctor ID** field のプロパティを調整して、事前認識の結果から OCR エラーや不要な文字を取り除きます。field region が見つかった後、field プロパティ内の regular expression によってデータが再抽出され、OCR ノイズが除去されます。

<Steps>
  <Step title="Doctor ID field の設定を開く">
    1. Skill 名をクリックし、**Fields** タブに移動します。
    2. 「Doctor」Group を展開し、その横にある設定アイコンをクリックして「Doctor ID」field の設定を開きます。
  </Step>

  <Step title="正規表現を追加する">
    1. field プロパティの **Value** セクションで、**Regular expression** オプションの横にある追加アイコンをクリックします。
    2. 次の式を **Regular Expression Editor** に貼り付けます。

       ```
       [0-9]{1}[\/.-]{1}[0-9]{5}[\/.-]{1}[0-9]{2}[\/.-]{1}[0-9]{3}
       ```

    <Note>
      このエディターでは、Extraction Rules Activity Editor で使用される表記とは異なる一般的な表記を使用します。詳しくは、**Regular Expression Editor** で **Syntax help** をクリックしてください。
    </Note>
  </Step>

  <Step title="変更を保存する">
    **Save** をクリックして **Regular Expression Editor** を閉じ、その後もう一度 **Save** をクリックして field プロパティを閉じます。
  </Step>
</Steps>

<div id="check-whether-the-sick-note-is-valid">
  ## 病欠証明書の有効性を確認する
</div>

患者は、発病開始日から3日以内に病欠証明書を受け取る必要があります。つまり、発行日は開始日の3日後まででなければなりません。

この制約を適用するには、スクリプト ルールを使用します。

<Steps>
  <Step title="New Ruleダイアログを開く">
    データ フォームの下にある追加のiconをクリックします。**New Rule**ダイアログが開きます。

    <Note>
      追加のiconが表示されない場合は、ドキュメント画像上部の**Reference**セクションに切り替えてください。
    </Note>
  </Step>

  <Step title="ルールの種類とfieldを設定する">
    1. **Advanced Script Rule**を選択し、**Next**をクリックします。
    2. ルール名を「Check validity」に変更します。
    3. fieldsの一覧で「Start Date」と「Date」のfieldを選択します。
    4. **Next**をクリックします。
  </Step>

  <Step title="有効性確認のスクリプトを追加する">
    次のスクリプトをスクリプト エディタに貼り付けます:

    ```javascript theme={null}
    // アクセスするすべてのfieldの変数を作成
    var startField = Context.GetField("Start Date") ;
    var dateField = Context.GetField("Date");

    if (dateField && dateField.Value && startField && startField.Value)
    {
       var date = dateField.Value;
       var startDate = startField.Value;

       //取り得る最も早い開始日を計算
       date.setDate(date.getDate() - 3);

       if (startDate < date)
       {
           Context.CheckSucceeded = false;
           Context.ErrorMessage = "病欠証明書の発行が遅すぎます";
       }
    }
    ```

    **Save** をクリックし、セット内のさまざまなドキュメントでルールの動作を確認します。ルールのエラー処理の挙動を確認するには、データ フォーム上の field にテスト値を手動で入力します。field の値を変更するたびに、ルールが再適用されます。
  </Step>
</Steps>

<div id="check-the-sick-leave-duration">
  ## 病欠期間を確認する
</div>

病欠の開始日と終了日を使って病欠期間を計算します。文書に期間が指定されている場合は、その値が計算した期間と一致するかどうかを確認します。文書に期間が含まれていない場合は、計算した値を対応する fields に書き込みます。

<Steps>
  <Step title="New Rule ダイアログを開く">
    ルールを作成するには、データ フォームの下にある追加 icon をクリックします。
  </Step>

  <Step title="ルールの種類と fields を設定する">
    1. **Advanced Script Rule** を選択し、**Next** をクリックします。
    2. ルール名を「Check duration」に変更します。
    3. fields の一覧で、「Start Date」「End Date」「Duration」の fields を選択します。fields 値を読み取るだけでなく、必要に応じて修正も行うため、両方の列で fields を選択しておくことが重要です。
    4. **Next** をクリックします。
  </Step>

  <Step title="期間のスクリプトを追加する">
    次のスクリプトをスクリプト エディタに貼り付けます。

    ```javascript theme={null}
    // アクセスするすべてのfieldの変数を作成する
    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」のfieldがDocumentで見つかったか確認する
    if (endField && endDate && startField && startDate)
    {
       //病気休暇の期間を計算する
       var length = (1 + (endDate.getTime() - startDate.getTime()) / 3600000 / 24);

       //期間のfieldが見つからなかった場合、または数値として解析できなかった場合、計算値をfieldに渡す
       if (!durationField.Value)
           durationField.Value = length; 

       //期間のfieldが見つかった場合、その値と計算された期間を比較する
       else if (durationField.Value != length)
       {
           Context.CheckSucceeded = false;
           Context.ErrorMessage = "\"Duration\" fieldの値が実際の病気休暇期間と一致しません";
           durationField.AddSuggestion(length.toString());
       }
    }
    ```

    **Save** をクリックし、セット内のさまざまなドキュメントでルールがどのように動作するかを確認します。ルールがエラーをどのように処理するかを確認するには、データ フォーム上の fields にテスト値を手動で入力します。fields の値を変更するたびに、ルールが再適用されます。
  </Step>
</Steps>

<div id="whats-next">
  ## 次に行うこと
</div>

<CardGroup cols={2}>
  <Card title="ステップ 10. Skill をテストして公開する" icon="arrow-right" href="/ja/vantage/documentation/advanced-designer/tutorial/tutorial-step-10">
    設定した Skill をテストし、Vantage server に公開します。
  </Card>

  <Card title="チュートリアルの概要" icon="circle-info" href="/ja/vantage/documentation/advanced-designer/tutorial/tutorial">
    チュートリアルの概要に戻ります。
  </Card>
</CardGroup>
