8.2. OpenRules で取引先に対する与信枠や信用度を評価するルールを作成する¶
OpenRules では、 Glossary で登録した項目の値同士を比較して条件や計算を行うことができます。このハンズオンでは、取引先与信管理フローをサンプルに、 OpenRules で以下の処理を実行するための設定方法を確認します。
- 条件( Conclusion )での「○○以上△△未満」で評価する
- 異なる DecisionTable の結果を比較する
- Glossary の項目を使って計算を実行する
- 評価結果を再評価して変更する
ハンズオンで扱っている OpenRules の記法は、高度な内容を含んでおりますので、適宜「 OpenRules のキーワードリファレンス 」を参照しながら進めるようにしてください。
ルールを定義するExcelファイルを作成する手順
このシナリオで作成するルールの概要¶
作成するルールの内容
OpenRules で 数値の範囲指定や計算を行う方法¶
このハンズオンを開始する前に、ハンズオンで作成するルールに必要な OpenRules の記法を確認しましょう。
条件として数値の範囲を指定する¶
このハンズオンでは、評価基準1・評価基準2の条件で「~以上で~未満の場合」というものがあります。このような数値型の項目の特定の値の範囲を条件に指定するためには、「 演算子 」の「Within」とさまざまな記号を組み合わせて設定します。
Glossary で定義した項目の値を取得する¶
このハンズオンでは、評価基準1・評価基準2の結果を比較し、与信枠の小さい方の値を最終的な与信枠の結果として設定します。複数の DecisionTable の結果を設定した項目から別の項目に値をセットするには、 $(getString) などの「マクロ」という記法を利用します。“$”で開始する「マクロ」を利用せずに項目名を記述した場合には、その項目名は項目名と扱われずに、書いたとおりの「文字列の値」と扱われます。このハンズオンでは、マクロを使い、値の取得方法や値の計算を行います。
OpenRules の処理中に計算を行う¶
DecisionTable では、条件に合致した場合の評価として、計算を行うことができます。このハンズオンでは、各評価基準の条件に合わせて与信枠を Conclusion で設定していきます。
Glossary で定義した項目同士の値を比較する¶
これまでのハンズオンでは、項目と特定の値を比較する条件を扱いましたが、このハンズオンでの「評価基準1の与信枠と評価基準2の与信枠の比較」のような項目同士の比較を行う場合には、項目同士を比較するためのキーワードを利用します。「 ConditionIntOperInt 」や「 ConditionRealOperReal 」などのキーワードを利用すると、2つの項目の値同士の比較をすることができます。
1つの DecisionTable の処理中に結果を変更する¶
このハンズオンでは、「評価基準1の与信枠と評価基準2の与信枠を比較して、小さい方の値を与信枠に設定するが、 負数の場合には、0をセットする 」という要件があります。この要件を実現するためには、 DecisionTable の評価後に再度負数かどうかの評価を行う必要があります。一度評価した結果の再評価を実行する方法の1つとして、 DecisionTable2 の形式を利用すると、すべての条件を評価し、後から評価された条件の結果で先に合致した条件の結果を変更することができます。
ルールのExcelファイルを作成する手順¶
今回は、 OpenRules のテンプレート の「汎用テンプレート」を変更しながらルール定義のExcelファイルを作成します。このシナリオでは、以下の図の流れで作成していきます。
取引先与信管理のハンズオンを開始するための準備¶
汎用テンプレートの編集を開始する¶
このハンズオンでは、ダウンロードの章で公開しているテンプレートを変更しながら、 OpenRules で動的処理者設定を定義していきます。まずは、テンプレートファイルを入手しましょう。
OpenRules のテンプレート から「汎用テンプレート」をダウンロードしてください。 ファイルを別名で保存した後に、ファイルの編集を開始します。(この手順では、例としてファイル名を「yoshinkanri.xls」として進めていきます。)
作成するルールの構成を決める¶
今回のハンズオンは、評価基準1の評価→評価基準2の評価など、複数の DecisionTable の実行を行う必要があるため、最初に DecisionTable の順序や単位といったルールの構成を決めます。このハンズオンでのフォーム(画面)と OpenRules の値の受け渡しは、以下のようなイメージになります。ハンズオンで実行したいルールの処理を整理すると、以下のように4つの DecisionTable が必要になることがわかります。
- 評価基準1の与信枠を計算するための「正味運転資本」の計算
- 評価基準1(流動比率に基づく信用度・与信枠の設定)の処理
- 評価基準2(自己資本比率に基づく信用度・与信枠の設定)の処理
- 評価基準1と評価基準2の結果の比較に基づく結果(信用度・与信枠)の設定
おおまかには、以下の図のように、複数の DecisionTable をExcel上にまとめていきます。
DecisionTable の実行順を Decision にまとめる¶
上の手順で確認した通り、今回のハンズオンでは、4つの DecisionTable を利用することと実行順序がわかりましたので、 Decision にまとめていきましょう。
編集中のExcelファイルの「Main」シートを表示します。 Decision のテーブル名を「creditAdministration」にします。 Decision に書いてある「評価の実行」を削除し、代わりに作成する DecisionTable の数の分の行(4行)を挿入します。また、同時にサブヘッダもわかりやすくするために日本語の名称に変更していきます。 挿入した行には、先に決めた順番の通りに DecisionTable の名前を記述していきましょう。 これで Decision ができましたので、ファイルを保存します。引き続き、 DecisionTable を作成していきましょう。
ルールの構成でまとめた4つの DecisionTable を作成する¶
上の手順で確認した構成に含まれる4つの DecisionTable を順番に作成していきましょう。
正味運転資本を算出する DecisionTable を作成する¶
最初に DecisionTable の列を必要な形にし、条件と評価の項目名を設定していきましょう。
編集中のExcelファイルの「DecisionTable」シートを表示します。(このタイミングでテンプレート上の説明が不要な場合にはコメントの吹き出しを削除しておきます。) テンプレートの DecisionTable をコピーして作成できるように、テーブルのヘッダの先頭に “//”を記述します。 先ほどヘッダを変更した DecisionTable をコピーして、必要な空白を空けて貼り付けてください。 この DecisionTable は、評価基準1の実行に先行して、必ず実行させる必要があるため、 Conclusion だけの2列のレイアウトにします。 テーブル名から、コメントアウトの”//”を削除し、 Decision で設定した名前(computeNetWorkingCapital)に変更します。 設定する項目名(論理名)と式を以下のように設定します。この DecisionTable では、1つの式を実行させる処理だけを記述しますので、式を書いたら残りの行は削除します。項目同士の計算を行うには、 $R(getReal) を利用して式を書くようにしましょう。今回のハンズオンで使用する数値項目は、double型で定義しますので、 $R(getReal) としています。int型の数値を扱う場合は、 $I(getInt) になります。 これで正味運転資本を算出するための DecisionTable ができましたので、保存します。続いて、評価基準1の処理を行う DecisionTable を作成しましょう。
評価基準1を実行する DecisionTable を作成する¶
流動比率に基づいて、先ほど算出した正味運転資本から与信枠を計算し、信用度とともに返却する DecisionTable をまとめます。
先ほどと同様の手順で、テンプレートの DecisionTable をコピーして任意の場所に貼り付けます。 このとき、テーブルの2行目、3行目のサブヘッダ部分の結合セルの設定を解除した場合には、忘れずにセルの結合を行ってください。 テーブル名から、コメントアウトの”//”を削除し、 Decision で設定した名前(evaluateDecisionCriteria1)に変更します。 設定する項目名(論理名)を以下のように設定します。 流動比率が70%未満の条件と評価を以下のように設定しましょう。 続いて、流動比率が「○○以上△△未満」となる3つの条件と評価を設定しましょう。このハンズオンの最初で確認した通り、「○○以上△△未満」を表現する場合には、演算子に”Within”を指定し、”[“と”)”を組み合わせて表現します。 流動比率が200%以上となる条件と評価を設定しましょう。 これで評価基準1を行うための DecisionTable ができましたので、保存します。続いて、評価基準2の処理を行う DecisionTable を作成しましょう。
評価基準2を実行する DecisionTable を作成する¶
自己資本比率に基づいて、与信枠を計算し、信用度とともに返却する DecisionTable をまとめます。
先の手順で作成した DecisionTable 「evaluateDecisionCriteria1」と似たレイアウトのテーブルを作成していきますので、先に作成したテーブルをコピーして貼り付けます。 テーブル名を Decision で設定した名前(evaluateDecisionCriteria2)に変更します。また、計算式などを誤って直し忘れることのないように明細の行の内容を削除しておきます。 設定する項目名(論理名)を以下のように設定します。 評価基準1の DecisionTable と同様に、条件と評価を設定しましょう。 これで評価基準2を行うための DecisionTable ができましたので、保存します。この後は、評価基準1と評価基準2の比較を行う DecisionTable を作成しましょう。
評価基準1の結果と評価基準2の結果を比較する DecisionTable を作成する¶
テンプレートの DecisionTable をコピーして任意の場所に貼り付けます。 この DecisionTable では、評価基準1の結果と評価基準2の結果を比較した後に、「与信枠が負数となるときには0に設定する」処理を行う必要があります。比較を行い、最後の結果を0にする処理までを、1つの DecisionTable で行えるようにするために、テーブル名からコメントアウトの”//”を削除し、テーブルのキーワードを DecisionTable2 とします。コラム
DecisionTable2 は、今までのハンズオンで作成してきた DecisionTable と処理方法が少し異なります。詳細については「 OpenRules のキーワードリファレンス」で確認してください。 テーブル名を Decision で設定した名前(compareResult)に変更します。また、サブヘッダや明細の内容を同時に以下の内容に変更します。このとき、1番左の列が空白となっている点と、 Condition と Conclusion に「与信枠」が2度登場している点については、後で説明していきますので、そのままにしておいてください。 最初に「評価基準1の実行」の結果と「評価基準2の実行」の結果を比較する条件を記述します。項目同士の比較を条件に指定する場合には、 Condition ではなく専用のキーワードを利用します。今回の「与信枠1」「与信枠2」は、double型として扱うため、 ConditionRealOperReal と入力します。 ConditionRealOperReal では、「左の比較対象の項目名」「演算子」「右の比較対象の項目名」という3つの項目で構成します。テーブルに1列挿入し、 ConditionRealOperReal の列が3つのセルとなるように設定しましょう。このとき、ヘッダから列がはみ出した場合には、セル結合を実行してすべての列がヘッダに入るようにしましょう。 サブヘッダの内容について、 OpenRules でのルールはありませんので、わかりやすくするために「評価基準1と評価基準2の比較」と入力しましょう。 条件について、「評価基準1の結果が大きい」パターンと「評価基準2の結果が同じか等しくなる」パターンに分けて条件を入力しましょう。結果については、 Conclusion を設定し、値が小さい方の評価基準の項目を設定するようにします。 最後に、比較した結果からセットした「与信枠」が負数の場合には0をセットするという処理を追加します。この処理を追加するために、条件( Condition)とした与信枠に「0未満」を表す条件を設定しましょう。 これで必要な DecisionTable をすべて作成しましたので、保存します。
実行に必要な定義を設定する¶
ルールの中心となる Decision 、 DecisionTable が完成しましたので、実行に必要なその他の定義を設定していきましょう。
Glossary に利用する項目を定義する¶
DecisionTable で使っている項目を確認しながら、 Glossary を定義していきましょう。
最初に、今回作成した DecisionTable で登場した項目名を確認しましょう。4つの DecisionTable では、以下の項目が必要です。
正味運転資本の算出
- 流動資産
- 流動負債
- 正味運転資本
評価基準1の実行
- 流動比率
- 信用度1
- 与信枠1
- 正味運転資本
評価基準2の実行
- 自己資本比率
- 信用度2
- 与信枠2
- 自己資本
評価基準1と評価基準2の比較
- 与信枠1
- 与信枠2
- 信用度1
- 信用度2
- 与信枠
- 信用度
上で洗い出した項目について、「画面から渡される項目」を「入力項目のグループ」(RequestObject)、「画面に返却する項目」を「出力項目のグループ」(ResponseObject)、「どちらにも属さない項目」を「処理用のグループ」(Internal)に分類しましょう。
入力項目のグループ(RequestObject)
- 流動資産
- 流動負債
- 流動比率
- 自己資本
- 自己資本比率
出力項目のグループ(ResponseObject)
- 与信枠
- 信用度
処理のグループ(Internal)
- 信用度1
- 信用度2
- 与信枠1
- 与信枠2
- 正味運転資本
Glossary を作成するために、「Definition」シートを表示しましょう。 整理した項目と分類に基づいて、Glossary を作成していきますが、「入力項目のグループ」(RequestObject)については、すべて数値項目で構成されており、そのまま作成すると OpenRules のルールに抵触するため、String項目として、「企業名」を追加して作成します。 Glossary が作成できましたので、保存します。
Glossary から Datatype と Data/Variable を定義する¶
作成した Glossary から「入力項目のグループ」(RequestObject)の定義を作成します。
Datatype RequestObject
String
companyName
double
currentAssets
double
currentLiabilities
double
currentRatio
double
equityCapital
double
capitalAdequacyRatio
Data RequestObject requestObj
companyName
企業名
テスト企業
currentAssets
流動資産
1000000
currentLiabilities
流動負債
400000
currentRatio
流動比率
40
equityCapital
自己資本
2000000
capitalAdequacyRatio
自己資本比率
40
コラム
Data/Variable は、このハンズオンのように項目数が多くなると、横に長くなって表示しづらくなるため、行・列を入れ替えて設定することができます。この場合にも、メインヘッダが必要な列を含む形でセル結合を忘れずに行ってください。 作成した Glossary から「出力項目のグループ」(ResponseObject)の定義を作成します。
Datatype ResponseObject
String
creditworthiness
double
credit
Data ResponseObject
responseObj
creditworthiness
信用度
信用度初期値
credit
与信枠
0
作成した Glossary から「処理のグループ」(Internal)の定義を作成します。
Datatype Internal
String
creditworthiness1
String
creditworthiness2
double
credit1
double
credit2
double
netWorkingCapital
Data Internal internal
creditworthiness1
信用度1
信用度初期値
creditworthiness2
信用度2
信用度初期値
credit1
与信枠1
0
credit2
与信枠2
0
netWorkingCapital
正味運転資本
0
DecisionObject を定義してルールを完成させる¶
最後に DecisionObject を定義して、Excelのルール定義ファイルを完成させましょう。
「Main」シートを表示しましょう。 「Main」シートで DecisionObject を設定していきます。入力項目、出力項目のオブジェクトについては、テンプレートと同じ設定となっているため、その下に内部項目のオブジェクト用に1行追加します。 追加した行には、以下のように設定しましょう。 これで、 OpenRules で取引先の与信管理をするためにExcelのルール定義ファイルの設定が完了しましたので、ファイルを保存します。IM-BIS の画面(フォーム)と連携するための設定を行っていきましょう。