IM-BIS for Accel Platform / OpenRules for IM-BIS 連携ガイド 第2版 2015-08-01

8.2. OpenRules で取引先に対する与信枠や信用度を評価するルールを作成する

OpenRules では、 Glossary で登録した項目の値同士を比較して条件や計算を行うことができます。
このハンズオンでは、取引先与信管理フローをサンプルに、 OpenRules で以下の処理を実行するための設定方法を確認します。
  • 条件( Conclusion )での「○○以上△△未満」で評価する
  • 異なる DecisionTable の結果を比較する
  • Glossary の項目を使って計算を実行する
  • 評価結果を再評価して変更する
ハンズオンで扱っている OpenRules の記法は、高度な内容を含んでおりますので、適宜「 OpenRules のキーワードリファレンス 」を参照しながら進めるようにしてください。

このシナリオで作成するルールの概要

  • 作成するルールの内容

    サンプル会社では、取引先の与信管理を以下のように評価しており、取引先の情報に基づいて与信枠や信用度を決定しています。
    このハンズオンでは、与信枠の計算や信用度の評価を OpenRules を利用して実行します。
    • 評価基準1

      • 取引先企業の流動資産・流動負債に基づく流動比率に応じて、信用度・与信枠を以下のように設定する

        ../../_images/decision_criteria_1.png
    • 評価基準2

      • 取引先企業の総資本・自己資本に基づく自己資本比率に応じて、信用度・与信枠を以下のように設定する

        ../../_images/decision_criteria_2.png
    • 評価基準1と評価基準2の結果を比較し、与信枠が小さい方を最終結果とする
      ただし、与信枠が負数となった場合には、0に設定する

OpenRules で 数値の範囲指定や計算を行う方法

このハンズオンを開始する前に、ハンズオンで作成するルールに必要な OpenRules の記法を確認しましょう。

条件として数値の範囲を指定する

このハンズオンでは、評価基準1・評価基準2の条件で「~以上で~未満の場合」というものがあります。
このような数値型の項目の特定の値の範囲を条件に指定するためには、「 演算子 」の「Within」とさまざまな記号を組み合わせて設定します。
  • 項目Aが10以上、20以下を条件とする場合

    ../../_images/equal_comparison.png
  • 項目Aが10以上、20未満を条件とする場合

    ../../_images/less_comparison.png

Glossary で定義した項目の値を取得する

このハンズオンでは、評価基準1・評価基準2の結果を比較し、与信枠の小さい方の値を最終的な与信枠の結果として設定します。
複数の DecisionTable の結果を設定した項目から別の項目に値をセットするには、 $(getString) などの「マクロ」という記法を利用します。
“$”で開始する「マクロ」を利用せずに項目名を記述した場合には、その項目名は項目名と扱われずに、書いたとおりの「文字列の値」と扱われます。
../../_images/openrules_macro.png
このハンズオンでは、マクロを使い、値の取得方法や値の計算を行います。

OpenRules の処理中に計算を行う

DecisionTable では、条件に合致した場合の評価として、計算を行うことができます。
このハンズオンでは、各評価基準の条件に合わせて与信枠を Conclusion で設定していきます。
../../_images/calculation.png

Glossary で定義した項目同士の値を比較する

これまでのハンズオンでは、項目と特定の値を比較する条件を扱いましたが、このハンズオンでの「評価基準1の与信枠と評価基準2の与信枠の比較」のような項目同士の比較を行う場合には、項目同士を比較するためのキーワードを利用します。
ConditionIntOperInt 」や「 ConditionRealOperReal 」などのキーワードを利用すると、2つの項目の値同士の比較をすることができます。
../../_images/variable_comparison.png

1つの DecisionTable の処理中に結果を変更する

このハンズオンでは、「評価基準1の与信枠と評価基準2の与信枠を比較して、小さい方の値を与信枠に設定するが、 負数の場合には、0をセットする 」という要件があります。
この要件を実現するためには、 DecisionTable の評価後に再度負数かどうかの評価を行う必要があります。
一度評価した結果の再評価を実行する方法の1つとして、 DecisionTable2 の形式を利用すると、すべての条件を評価し、後から評価された条件の結果で先に合致した条件の結果を変更することができます。
../../_images/decisiontable2.png

ルールのExcelファイルを作成する手順

今回は、 OpenRules のテンプレート の「汎用テンプレート」を変更しながらルール定義のExcelファイルを作成します。
このシナリオでは、以下の図の流れで作成していきます。
../../_images/procedure5.png

取引先与信管理のハンズオンを開始するための準備

汎用テンプレートの編集を開始する

このハンズオンでは、ダウンロードの章で公開しているテンプレートを変更しながら、 OpenRules で動的処理者設定を定義していきます。
まずは、テンプレートファイルを入手しましょう。
  1. OpenRules のテンプレート から「汎用テンプレート」をダウンロードしてください。
  2. ファイルを別名で保存した後に、ファイルの編集を開始します。
    (この手順では、例としてファイル名を「yoshinkanri.xls」として進めていきます。)

作成するルールの構成を決める

今回のハンズオンは、評価基準1の評価→評価基準2の評価など、複数の DecisionTable の実行を行う必要があるため、最初に DecisionTable の順序や単位といったルールの構成を決めます。
このハンズオンでのフォーム(画面)と OpenRules の値の受け渡しは、以下のようなイメージになります。
../../_images/io_image.png
ハンズオンで実行したいルールの処理を整理すると、以下のように4つの DecisionTable が必要になることがわかります。
  1. 評価基準1の与信枠を計算するための「正味運転資本」の計算
  2. 評価基準1(流動比率に基づく信用度・与信枠の設定)の処理
  3. 評価基準2(自己資本比率に基づく信用度・与信枠の設定)の処理
  4. 評価基準1と評価基準2の結果の比較に基づく結果(信用度・与信枠)の設定
おおまかには、以下の図のように、複数の DecisionTable をExcel上にまとめていきます。
../../_images/rule_structure.png

DecisionTable の実行順を Decision にまとめる

上の手順で確認した通り、今回のハンズオンでは、4つの DecisionTable を利用することと実行順序がわかりましたので、 Decision にまとめていきましょう。
  1. 編集中のExcelファイルの「Main」シートを表示します。
    ../../_images/dt_order_1.png
  2. Decision のテーブル名を「creditAdministration」にします。
    ../../_images/dt_order_2.png
  3. Decision に書いてある「評価の実行」を削除し、代わりに作成する DecisionTable の数の分の行(4行)を挿入します。
    また、同時にサブヘッダもわかりやすくするために日本語の名称に変更していきます。
    ../../_images/dt_order_3.png
  4. 挿入した行には、先に決めた順番の通りに DecisionTable の名前を記述していきましょう。
    ../../_images/dt_order_4.png

    ActionPrint

    ActionExecute

    処理名

    実行する処理

    正味運転資本の算出

    computeNetWorkingCapital

    評価基準1の実行

    evaluateDecisionCriteria1

    評価基準2の実行

    evaluateDecisionCriteria2

    評価基準1と評価基準2の比較

    compareResult

  5. これで Decision ができましたので、ファイルを保存します。
    引き続き、 DecisionTable を作成していきましょう。

ルールの構成でまとめた4つの DecisionTable を作成する

上の手順で確認した構成に含まれる4つの DecisionTable を順番に作成していきましょう。

正味運転資本を算出する DecisionTable を作成する

最初に DecisionTable の列を必要な形にし、条件と評価の項目名を設定していきましょう。
  1. 編集中のExcelファイルの「DecisionTable」シートを表示します。
    (このタイミングでテンプレート上の説明が不要な場合にはコメントの吹き出しを削除しておきます。)
    ../../_images/net_working_capital_1.png
  2. テンプレートの DecisionTable をコピーして作成できるように、テーブルのヘッダの先頭に “//”を記述します。
    ../../_images/net_working_capital_2.png

    コラム

    OpenRules のコメントアウトの方法

    OpenRules で実行時に参照させたくないテーブルに対して、コメントアウトすることができます。
    参照させたくないテーブルのメインヘッダに”//”を追加すると、そのテーブルは実行時に参照されません。
  3. 先ほどヘッダを変更した DecisionTable をコピーして、必要な空白を空けて貼り付けてください。
    ../../_images/net_working_capital_3.png
  4. この DecisionTable は、評価基準1の実行に先行して、必ず実行させる必要があるため、 Conclusion だけの2列のレイアウトにします。
    ../../_images/net_working_capital_4.png
  5. テーブル名から、コメントアウトの”//”を削除し、 Decision で設定した名前(computeNetWorkingCapital)に変更します。
    ../../_images/net_working_capital_5.png
  6. 設定する項目名(論理名)と式を以下のように設定します。
    この DecisionTable では、1つの式を実行させる処理だけを記述しますので、式を書いたら残りの行は削除します。
    項目同士の計算を行うには、 $R(getReal) を利用して式を書くようにしましょう。
    今回のハンズオンで使用する数値項目は、double型で定義しますので、 $R(getReal) としています。
    int型の数値を扱う場合は、 $I(getInt) になります。
    ../../_images/net_working_capital_6.png

    DecisionTable

    computeNetWorkingCapital

     

    Conclusion

     

    正味運転資本

    =

    ::= $R{流動資産}-$R{流動負債}

  7. これで正味運転資本を算出するための DecisionTable ができましたので、保存します。
    続いて、評価基準1の処理を行う DecisionTable を作成しましょう。

評価基準1を実行する DecisionTable を作成する

流動比率に基づいて、先ほど算出した正味運転資本から与信枠を計算し、信用度とともに返却する DecisionTable をまとめます。
  1. 先ほどと同様の手順で、テンプレートの DecisionTable をコピーして任意の場所に貼り付けます。
    ../../_images/decision_criteria1_1.png
  2. この DecisionTable は、入力項目に「流動比率」、出力項目に「信用度」「与信枠」を配置できるように、 Condition を1列、 Conclusion を2列にしましょう。
    このとき、テーブルの2行目、3行目のサブヘッダ部分の結合セルの設定を解除した場合には、忘れずにセルの結合を行ってください。
    ../../_images/decision_criteria1_2.png
  3. テーブル名から、コメントアウトの”//”を削除し、 Decision で設定した名前(evaluateDecisionCriteria1)に変更します。
    ../../_images/decision_criteria1_3.png
  4. 設定する項目名(論理名)を以下のように設定します。
    ../../_images/decision_criteria1_4.png

    DecisionTable evaluateDecisionCriteria1

    Condition

    Conclusion

    Conclusion

    流動比率

    信用度1

    与信枠1

  5. 流動比率が70%未満の条件と評価を以下のように設定しましょう。
    ../../_images/decision_criteria1_5.png

    DecisionTable evaluateDecisionCriteria1

    Condition

    Conclusion

    Conclusion

    流動比率

    信用度1

    与信枠1

    < 70

    = 取引停止

    = ::= $R{正味運転資本}*0*1000

  6. 続いて、流動比率が「○○以上△△未満」となる3つの条件と評価を設定しましょう。
    このハンズオンの最初で確認した通り、「○○以上△△未満」を表現する場合には、演算子に”Within”を指定し、”[“と”)”を組み合わせて表現します。
    //「○○以上△△未満」の記法
    
    [<下限値>,<上限値>)
    ../../_images/decision_criteria1_6.png

    DecisionTable evaluateDecisionCriteria1

    Condition

    Conclusion

    Conclusion

    流動比率

    信用度1

    与信枠1

    Within [70,110)

    = 慎重

    = ::= $R{正味運転資本}*0.7*1000

    Within [110,160)

    = 現状維持

    = ::= $R{正味運転資本}*1*1000

    Within [160,200)

    = 積極

    = ::= $R{正味運転資本}*1.4*1000

  7. 流動比率が200%以上となる条件と評価を設定しましょう。
    ../../_images/decision_criteria1_7.png

    DecisionTable evaluateDecisionCriteria1

    Condition

    Conclusion

    Conclusion

    流動比率

    信用度1

    与信枠1

    >= 200

    = 最優先

    = ::= $R{正味運転資本}*2*1000

  8. これで評価基準1を行うための DecisionTable ができましたので、保存します。
    続いて、評価基準2の処理を行う DecisionTable を作成しましょう。

評価基準2を実行する DecisionTable を作成する

自己資本比率に基づいて、与信枠を計算し、信用度とともに返却する DecisionTable をまとめます。
  1. 先の手順で作成した DecisionTable 「evaluateDecisionCriteria1」と似たレイアウトのテーブルを作成していきますので、先に作成したテーブルをコピーして貼り付けます。
    ../../_images/decision_criteria2_1.png
  2. テーブル名を Decision で設定した名前(evaluateDecisionCriteria2)に変更します。
    また、計算式などを誤って直し忘れることのないように明細の行の内容を削除しておきます。
    ../../_images/decision_criteria2_2.png
  3. 設定する項目名(論理名)を以下のように設定します。
    ../../_images/decision_criteria2_3.png

    DecisionTable evaluateDecisionCriteria2

    Condition

    Conclusion

    Conclusion

    自己資本比率

    信用度2

    与信枠2

  4. 評価基準1の DecisionTable と同様に、条件と評価を設定しましょう。
    ../../_images/decision_criteria2_4.png

    DecisionTable evaluateDecisionCriteria2

    Condition

    Conclusion

    Conclusion

    自己資本比率

    信用度2

    与信枠2

    < 0

    = 取引停止

    = ::= $R{自己資本}*0*1000

    Within [0,20)

    = 慎重

    = ::= $R{自己資本}*0.3*1000

    Within [20,40)

    = 現状維持

    = ::= $R{自己資本}*0.7*1000

    Within [40,70)

    = 積極

    = ::= $R{自己資本}*1*1000

    >= 70

    = 最優先

    = ::= $R{自己資本}*1.5*1000

  5. これで評価基準2を行うための DecisionTable ができましたので、保存します。
    この後は、評価基準1と評価基準2の比較を行う DecisionTable を作成しましょう。

評価基準1の結果と評価基準2の結果を比較する DecisionTable を作成する

これまで作成した評価基準1の DecisionTable の結果と、評価基準2の DecisionTable の結果を比較する DecisionTable を作成していきましょう。
  1. テンプレートの DecisionTable をコピーして任意の場所に貼り付けます。
    ../../_images/decisioncriteria_1.png
  2. この DecisionTable では、評価基準1の結果と評価基準2の結果を比較した後に、「与信枠が負数となるときには0に設定する」処理を行う必要があります。
    比較を行い、最後の結果を0にする処理までを、1つの DecisionTable で行えるようにするために、テーブル名からコメントアウトの”//”を削除し、テーブルのキーワードを DecisionTable2 とします。
    ../../_images/decisioncriteria_2.png

    コラム

    DecisionTable2 は、今までのハンズオンで作成してきた DecisionTable と処理方法が少し異なります。
    詳細については「 OpenRules のキーワードリファレンス」で確認してください。
  3. テーブル名を Decision で設定した名前(compareResult)に変更します。
    また、サブヘッダや明細の内容を同時に以下の内容に変更します。
    このとき、1番左の列が空白となっている点と、 ConditionConclusion に「与信枠」が2度登場している点については、後で説明していきますので、そのままにしておいてください。
    ../../_images/decisioncriteria_3.png

    DecisionTable2 compareResult

     

    Condition

    Conclusion

    Conclusion

     

    与信枠

    信用度

    与信枠

  4. 最初に「評価基準1の実行」の結果と「評価基準2の実行」の結果を比較する条件を記述します。
    項目同士の比較を条件に指定する場合には、 Condition ではなく専用のキーワードを利用します。
    今回の「与信枠1」「与信枠2」は、double型として扱うため、 ConditionRealOperReal と入力します。
    ../../_images/decisioncriteria_4.png
  5. ConditionRealOperReal では、「左の比較対象の項目名」「演算子」「右の比較対象の項目名」という3つの項目で構成します。
    テーブルに1列挿入し、 ConditionRealOperReal の列が3つのセルとなるように設定しましょう。
    このとき、ヘッダから列がはみ出した場合には、セル結合を実行してすべての列がヘッダに入るようにしましょう。
    ../../_images/decisioncriteria_5.png
  6. サブヘッダの内容について、 OpenRules でのルールはありませんので、わかりやすくするために「評価基準1と評価基準2の比較」と入力しましょう。
    ../../_images/decisioncriteria_6.png
  7. 条件について、「評価基準1の結果が大きい」パターンと「評価基準2の結果が同じか等しくなる」パターンに分けて条件を入力しましょう。
    結果については、 Conclusion を設定し、値が小さい方の評価基準の項目を設定するようにします。
    ../../_images/decisioncriteria_7.png

    DecisionTable2 compareResult

    ConditionRealOperReal

    Condition

    Conclusion

    Conclusion

    評価基準1と評価基準2の比較

    与信枠

    信用度

    与信枠

    与信枠1

    >

    与信枠2

     

    = ::= ${信用度2}

    = ::= ${与信枠2}

    与信枠1

    <=

    与信枠2

     

    = ::= ${信用度1}

    = ::= ${与信枠1}

  8. 最後に、比較した結果からセットした「与信枠」が負数の場合には0をセットするという処理を追加します。
    この処理を追加するために、条件( Condition)とした与信枠に「0未満」を表す条件を設定しましょう。
    ../../_images/decisioncriteria_8.png

    DecisionTable2

    compareResult

           
     

    ConditionRealOperReal

     

    Condition

    Conclusion

    Conclusion

     

    評価基準1と評価基準2の比較

     

    与信枠

    信用度

    与信枠

         

    < 0

     

    = ::= 0

  9. これで必要な DecisionTable をすべて作成しましたので、保存します。

実行に必要な定義を設定する

ルールの中心となる DecisionDecisionTable が完成しましたので、実行に必要なその他の定義を設定していきましょう。

Glossary に利用する項目を定義する

DecisionTable で使っている項目を確認しながら、 Glossary を定義していきましょう。
  1. 最初に、今回作成した DecisionTable で登場した項目名を確認しましょう。
    4つの DecisionTable では、以下の項目が必要です。
    • 正味運転資本の算出

      • 流動資産
      • 流動負債
      • 正味運転資本
    • 評価基準1の実行

      • 流動比率
      • 信用度1
      • 与信枠1
      • 正味運転資本
    • 評価基準2の実行

      • 自己資本比率
      • 信用度2
      • 与信枠2
      • 自己資本
    • 評価基準1と評価基準2の比較

      • 与信枠1
      • 与信枠2
      • 信用度1
      • 信用度2
      • 与信枠
      • 信用度
  2. 上で洗い出した項目について、「画面から渡される項目」を「入力項目のグループ」(RequestObject)、「画面に返却する項目」を「出力項目のグループ」(ResponseObject)、「どちらにも属さない項目」を「処理用のグループ」(Internal)に分類しましょう。
    • 入力項目のグループ(RequestObject)

      • 流動資産
      • 流動負債
      • 流動比率
      • 自己資本
      • 自己資本比率
    • 出力項目のグループ(ResponseObject)

      • 与信枠
      • 信用度
    • 処理のグループ(Internal)

      • 信用度1
      • 信用度2
      • 与信枠1
      • 与信枠2
      • 正味運転資本
  3. Glossary を作成するために、「Definition」シートを表示しましょう。
    ../../_images/glossary_1.png
  4. 整理した項目と分類に基づいて、Glossary を作成していきますが、「入力項目のグループ」(RequestObject)については、すべて数値項目で構成されており、そのまま作成すると OpenRules のルールに抵触するため、String項目として、「企業名」を追加して作成します。
    ../../_images/glossary_2.png
  5. Glossary が作成できましたので、保存します。
    引き続き、 Glossary に基づいて、 DatatypeData/Variable を定義しましょう。

Glossary から DatatypeData/Variable を定義する

Glossary を利用して DatatypeData/Variable を定義していきましょう。
  1. 作成した Glossary から「入力項目のグループ」(RequestObject)の定義を作成します。
    • Datatype

      Datatype RequestObject

       

      String

      companyName

      double

      currentAssets

      double

      currentLiabilities

      double

      currentRatio

      double

      equityCapital

      double

      capitalAdequacyRatio

    • Data/Variable

      Data RequestObject requestObj

         

      companyName

      企業名

      テスト企業

      currentAssets

      流動資産

      1000000

      currentLiabilities

      流動負債

      400000

      currentRatio

      流動比率

      40

      equityCapital

      自己資本

      2000000

      capitalAdequacyRatio

      自己資本比率

      40

    ../../_images/requestobject.png

    コラム

    Data/Variable は、このハンズオンのように項目数が多くなると、横に長くなって表示しづらくなるため、行・列を入れ替えて設定することができます。
    この場合にも、メインヘッダが必要な列を含む形でセル結合を忘れずに行ってください。
  2. 作成した Glossary から「出力項目のグループ」(ResponseObject)の定義を作成します。
    • Datatype

      Datatype ResponseObject

       

      String

      creditworthiness

      double

      credit

    • Data/Variable

      Data ResponseObject

      responseObj

       

      creditworthiness

      信用度

      信用度初期値

      credit

      与信枠

      0

    ../../_images/responseobject.png
  3. 作成した Glossary から「処理のグループ」(Internal)の定義を作成します。
    • Datatype

      Datatype Internal

       

      String

      creditworthiness1

      String

      creditworthiness2

      double

      credit1

      double

      credit2

      double

      netWorkingCapital

    • Data/Variable

      Data Internal internal

         

      creditworthiness1

      信用度1

      信用度初期値

      creditworthiness2

      信用度2

      信用度初期値

      credit1

      与信枠1

      0

      credit2

      与信枠2

      0

      netWorkingCapital

      正味運転資本

      0

    ../../_images/internal.png

DecisionObject を定義してルールを完成させる

最後に DecisionObject を定義して、Excelのルール定義ファイルを完成させましょう。
  1. 「Main」シートを表示しましょう。
    ../../_images/decisionobject_1.png
  2. 「Main」シートで DecisionObject を設定していきます。
    入力項目、出力項目のオブジェクトについては、テンプレートと同じ設定となっているため、その下に内部項目のオブジェクト用に1行追加します。
    ../../_images/decisionobject_2.png
  3. 追加した行には、以下のように設定しましょう。

    DecisionObject decisionObjects

     

    Business Concept

    Business Object

    Internal

    := internal[0]

    ../../_images/decisionobject_3.png
  4. これで、 OpenRules で取引先の与信管理をするためにExcelのルール定義ファイルの設定が完了しましたので、ファイルを保存します。
    IM-BIS の画面(フォーム)と連携するための設定を行っていきましょう。