8.2. OpenRules で取引先に対する与信枠や信用度を評価するルールを作成する¶
OpenRules では、 Glossary で登録した項目の値同士を比較して条件や計算を行うことができます。このハンズオンでは、取引先与信管理フローをサンプルに、 OpenRules で以下の処理を実行するための設定方法を確認します。
- 条件( Conclusion )での「○○以上△△未満」で評価する
- 異なる DecisionTable の結果を比較する
- Glossary の項目を使って計算を実行する
- 評価結果を再評価して変更する
ハンズオンで扱っている OpenRules の記法は、高度な内容を含んでおります。適宜「 OpenRules のキーワードリファレンス 」を参照しながら進めるようにしてください。
ルールを定義するExcelファイルを作成する手順
このシナリオで作成するルールの概要¶
作成するルールの内容
サンプル会社では、取引先の与信管理を以下のように評価しており、取引先の情報に基づいて与信枠や信用度を決定しています。このハンズオンでは、与信枠の計算や信用度の評価を OpenRules を利用して実行します。評価基準1
評価基準2
- 評価基準1と評価基準2の結果を比較し、与信枠が小さい方を最終結果とする。ただし、与信枠が負数となった場合には、0に設定する。
OpenRules で 数値の範囲指定や計算を行う方法¶
このハンズオンを開始する前に、ハンズオンで作成するルールに必要な OpenRules の記法を確認しましょう。
条件として数値の範囲を指定する¶
このハンズオンでは、評価基準1・評価基準2の条件で「~以上で~未満の場合」というものがあります。このような数値型の項目の特定の値の範囲を条件に指定するためには、「 演算子 」の「Within」とさまざまな記号を組み合わせて設定します。
Glossary で定義した項目の値を取得する¶
このハンズオンでは、評価基準1・評価基準2の結果を比較し、与信枠の小さい方の値を最終的な与信枠の結果として設定します。複数の DecisionTable の結果を設定した項目から別の項目に値をセットするには、 $(getString) などの「マクロ」という記法を利用します。“$”で開始する「マクロ」を利用せずに項目名を記述した場合には、その項目名は項目名と扱われずに、書いたとおりの「文字列の値」として扱います。
OpenRules が提供するマクロ(一部抜粋) マクロの形式 対応する項目のデータ型 ${項目名(論理名)} 文字型(java.lang.String) $I{項目名(論理名)} 整数型(int) $R{項目名(論理名)} 浮動小数点数型(double) 上記のマクロを利用するには、 「 Datatype 」で定義したデータ型に対応したマクロを利用してください。このハンズオンでは、マクロを使い、値の取得方法や値の計算を行います。
OpenRules の処理中に計算を行う¶
DecisionTable では、条件に合致した場合の評価として、計算を行うことができます。このハンズオンでは、各評価基準の条件に合わせて与信枠を Conclusion で設定していきます。OpenRules では、Javaで利用できる演算子(+,-,*,/,%)を用いた計算を実行できます。計算式の先頭には”::=”を記述してください。
Glossary で定義した項目同士の値を比較する¶
これまでのハンズオンでは、項目と特定の値を比較する条件を扱いましたが、このハンズオンでの「評価基準1の与信枠と評価基準2の与信枠の比較」のような項目同士の比較を行う場合には、項目同士を比較するためのキーワードを利用します。「 ConditionIntOperInt 」や「 ConditionRealOperReal 」などのキーワードを利用すると、2つの項目の値同士の比較をすることができます。異なる項目同士の比較を行う場合には、サブヘッダに「Condition[データ型]Oper[データ型]」というキーワードを利用します。比較のキーワードは、データ型に対応して以下の種類が提供されています。
int
ConditionIntOperIntreal(double)
ConditionRealOperRealDate
ConditionDateOperDate
1つの DecisionTable の処理中に結果を変更する¶
このハンズオンでは、「評価基準1の与信枠と評価基準2の与信枠を比較して、小さい方の値を与信枠に設定するが、 負数の場合には、0をセットする 」という要件があります。この要件を実現するためには、 DecisionTable の評価後に再度負数かどうかの評価を行う必要があります。一度評価した結果の再評価を実行する方法の1つとして、 DecisionTable2 を利用すると、後から評価された条件の結果によって先に評価された結果を変更することができます。DecisionTable2 (DecisionTableMultiHit)では、一度評価した項目の値を変更することができます。
ルールのExcelファイルを作成する手順¶
今回は、 OpenRules のテンプレート の「汎用テンプレート」を変更しながらルール定義のExcelファイルを作成します。このシナリオでは、以下の図の流れで作成していきます。
取引先に対する与信枠や信用度を評価するルールの作成の手順
取引先与信管理のハンズオンを開始するための準備¶
汎用テンプレートの編集を開始する¶
このハンズオンでは、ダウンロードの章で公開しているテンプレートを変更しながら、 OpenRules で動的処理者設定を定義していきます。まずは、テンプレートファイルを入手しましょう。
OpenRules のテンプレート から「汎用テンプレート」をダウンロードしてください。 ファイルを別名で保存した後に、ファイルの編集を開始してください。(この手順では、例としてファイル名を「yoshinkanri.xls」として進めます。)
作成するルールの構成を決める¶
今回のハンズオンは、評価基準1の評価→評価基準2の評価など、複数の DecisionTable の実行を行う必要があるため、最初に DecisionTable の順序や単位といったルールの構成を決めます。このハンズオンでのフォーム(画面)と OpenRules の値の受け渡しは、以下のイメージです。上記の処理を実現するためには、以下の図のように、複数の DecisionTable をExcel上にまとめていきます。ハンズオンで実行したいルールの処理を整理すると、以下のように4つの DecisionTable を定義して実現できることが分かります。
Decisiontable(1)評価基準1の与信枠を計算するための「正味運転資本」の計算
- 入力・・・流動資産、流動負債
- 出力・・・正味運転資本
Decisiontable(2)評価基準1(流動比率に基づく信用度・与信枠の設定)の評価
- 入力・・・「Decisiontable(1)」で算出した流動比率
- 出力・・・信用度1、与信枠1(評価基準1に基づく信用度と与信枠の値)
Decisiontable(3)評価基準2(自己資本比率に基づく信用度・与信枠の設定)の評価
- 入力・・・自己資本比率
- 出力・・・信用度2、与信枠2(評価基準2に基づく信用度と与信枠の値)
Decisiontable(4)評価基準1と評価基準2の結果の比較に基づく結果(信用度・与信枠)の設定
- 入力・・・「Decisiontable(2)」と「Decisiontable(3)」で取得した信用度と与信枠
- 出力・・・入力で設定した与信枠と信用度の比較結果
DecisionTable の実行順を Decision にまとめる¶
上の手順で確認した通り、今回のハンズオンでは、4つの DecisionTable を利用することと実行順序がわかりましたので、 Decision にまとめていきましょう。
編集中のExcelファイルの「Main」シートを表示してください。 Decision のテーブル名を「creditAdministration」に変更してください。 Decision に記載済みの「評価の実行」の行を削除してください。代わりにハンズオンで作成する4つの DecisionTable 分の行として、4行追加してください。 追加した行には、実行順に合わせて処理名と DecisionTable の名前を記述してください。 これで Decision ができましたので、ファイルを保存してください。引き続き、 DecisionTable を作成していきましょう。
ルールの構成でまとめた4つの DecisionTable を作成する¶
上の手順で確認した構成に含まれる4つの DecisionTable を順番に作成していきましょう。
正味運転資本を算出する DecisionTable を作成する¶
最初に DecisionTable の列を必要な形にし、条件と評価の項目名を設定していきましょう。
編集中のExcelファイルの「DecisionTable」シートを表示してください。 テンプレートには、説明が添付されていますので、枠で囲まれた部分を削除してください。 テンプレートの DecisionTable をコピーして作成できるように、テーブルのヘッダの先頭に “//”を記述してください。 先ほどヘッダを変更した DecisionTable をコピーして、1列・1行以上空けて貼り付けてください。 テーブル名から、コメントアウトの”//”を削除し、 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に設定する」処理を設定します。ここで作成する DecisionTable では、比較を行い、最後の結果を0にする処理まで行います。テーブル名からコメントアウトの”//”を削除し、テーブルのキーワードを DecisionTable2 に変更してください。コラム
DecisionTable2 は、今までのハンズオンで作成してきた DecisionTable と処理方法が少し異なります。詳細については「 OpenRules のキーワードリファレンス 」で確認してください。 テーブル名を Decision で設定した名前(compareResult)に変更してください。また、サブヘッダや明細の内容を以下の内容に変更してください。このとき、1番左の列が空白となっている点と、 Condition と Conclusion に「与信枠」が2度登場している点については、後で説明していきますので、そのままにしておいてください。 最初に「評価基準1の実行」の結果と「評価基準2の実行」の結果を比較する条件を記述してください。項目同士の比較を条件に指定する場合には、 Condition ではなく専用のキーワードを利用します。今回の「与信枠1」「与信枠2」は、double型として扱うため、 ConditionRealOperReal と入力してください。 ConditionRealOperReal では、「左の比較対象の項目名」「演算子」「右の比較対象の項目名」という3つの項目で構成します。テーブルに1列挿入し、 ConditionRealOperReal の列が3つのセルとなるように設定してください。このとき、ヘッダから列がはみ出した場合には、セル結合を実行してすべての列がヘッダの列の範囲に含まれるようにしてください。 サブヘッダの内容には、 わかりやすくするために「評価基準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)については、すべて数値項目で構成されています。そのまま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 の画面(フォーム)と連携するための設定を行っていきましょう。