機械翻訳について

契約の重要な条件の分類

ビジネス固有のルールに基づいて、契約キー条件を分類または分類できます。 分類では、注意が必要な主要な用語を簡単にプレビューできます。 契約におけるリスクを強調し、標準ではない条件に注意を払い、契約における有利な条件および有利でない条件の概要を示します。

各キー用語の分類ルールは、Groovyで記述し、使用する前に検証できます。 独自の分類コード(標準、非標準、良、悪、中立など)を定義でき、組織に固有です。 たとえば、更新率のキー期間のルールは次のようになります:
  • 5を超える場合、分類は良好です
  • 3から5の間では、中立として分類される場合があります
  • 5未満の場合、分類は不良である可能性があります。

主要な条件は、契約文書から抽出された後に分類できます。 重要な用語を分類すると、利害関係者が情報に基づいたディシジョンを行うことができるように、契約から迅速なインサイトを得ることができます。

契約キー条件の分類機能の有効化

この機能は、オプトイン・タスクを使用して有効にします。 オファリングを構成する権限がある場合は、「新機能」ページを使用して、次のように機能をオプト・インできます:
  1. 「自分の企業」「オファリング」にナビゲートします。
  2. 「企業契約」オファリングをクリックします。
  3. 「オプトイン」をクリックします。
  4. 「機能」 (鉛筆アイコン)をクリックし、次のようにExtract Key Terms from Contract Documents Using Generative AI親機能に移動します:

    「機能の編集」UIの「契約キー条件の分類」機能を示すスクリーンショット

  5. 親を展開してClassify Contract Key Terms子機能を表示し、「有効化」列のチェック・ボックスを選択します。
    ノート: 親オプト・インを有効にしないと、子オプト・インを有効にできません。
  6. 「完了しました」をクリックして変更を保存し、「オファリング」ページに戻ります。

    詳細は、Oracle Help Center (docs.oracle.com)のOracle Applications Cloud - Functional Setup Managerの使用ガイドの「新機能オプトイン」セクションを参照してください。

主要な用語を分類するためのセキュリティおよび権限

次に、主要な用語を分類するためのアクセス要件を示します。 契約の「キー用語値」タブの「分類」ボタンは、次の権限がある場合にのみ有効になります:
  • キー用語値の編集(OKC_EDIT_KEY_TERM_VALUES_PRIV)
  • 営業での生成AI機能の使用(ZCA_USE_GENAI_IN_SALES_PRIV)
  • 契約の編集(OKC_EDIT_CONTRACT_PRIV)

分類コード参照

分類コードはユーザー定義であり、「主要条件分類コード」参照で追加できます。 ユーザー定義参照「主要条件分類メジャー」を使用して、時間、分、日数、パーセントなどのメジャーを入力します。 このフィールドは、出力タイプが「数値」の主要な用語でのみ使用できます。 たとえば、「更新期間」キー用語の場合、「更新値」は3、「メジャー」は年、「更新率」キー用語の場合、「更新値」は10、「メジャー」はパーセントです。

キー用語分類ルール

主要な用語を分類するためのGroovyスクリプトの構成は、スクリプトを開発およびテストするためのサンドボックスを使用してアプリケーション・コンポーザで実行されます。 サンドボックスを作成する方法を次に示します:

  1. 「構成」 > 「アプリケーション・コンポーザ」 > 「サンドボックス」にナビゲートします。
  2. 「サンドボックスの作成」をクリックします。
  3. 名前を指定し、「アプリケーション・コンポーザ」 > 「すべてのツール」を選択します。
  4. 「公開可能」フィールドで、「はい」を選択します。
  5. 作成して入る」をクリックして入力します
  6. 「アプリケーション・コンポーザ」アイコンをクリックします。
サンドボックスの詳細は、「サンドボックスの概要」を参照してください
サンプル・ルールは次のとおりです:
名前 説明
Rule 1 If the key term Renewal Cap Percentage is more than 2, then the key term is classified as Non-standard , else classified as Standard
Rule 2 If the key term Price Hold value is Yes, then the key term is classified as Present, else classified as Absent
ルール 3 If the contract type is Sell : No lines and Renewal Period is < 3 years, it’s Non-standard, if it’s >= 3 years it’s Standard

キー条件分類ルールをアクティブ化するフィールド・トリガーを作成する方法を次に示します。

  1. 「ナビゲータ」「構成」「アプリケーション・コンポーザ」をクリックします。
  2. 「アプリケーション」フィールドで、「ERPおよびSCM Cloud」を選択します。
  3. 「オブジェクト」領域から、次のように「契約キー条件抽出プロセス」 > 「サーバー・スクリプト」を選択します:

    アプリケーション・コンポーザの「サーバー・スクリプト」領域を強調表示したサンプル・スクリーンショット

  4. 「トリガー」タブの「フィールド・トリガー」リージョンで、「追加」をクリックして、次のように新しいフィールド・トリガーを作成します:

    アプリケーション・コンポーザの「フィールド・トリガーの編集」領域を強調表示したサンプル・スクリーンショット

  5. Groovyスクリプトを検証し、「保存してクローズ」をクリックします。

Groovyスクリプトを検証したら、次のように契約の「キー用語値」タブから主要な条件を分類できます:

「分類」ボタンおよび「分類」フィールドが強調表示された「キー条件値」UIの「抽出詳細」リージョンのサンプル・スクリーンショット

「分類」をクリックしてGroovyスクリプトをコールし、記述したルールに基づいて分類が発生し、「分類」フィールドに値が表示されます。 「更新値」フィールドに入力した値は、分類に使用できます。 LLMによって返されるレスポンスは、「抽出値」および「更新値」フィールドに移入されます。 レスポンスが分類の形式でない場合、「更新値」フィールドの値を変更し、その値を分類に使用できます。

キー用語分類ルールのサンプルGroovyスクリプト

ルールのサンプルGroovyスクリプトは、「キー用語分類ルール」の項で説明しています。

def typeName;
def count = 0;
 
def renewal;
def renewalCapVal;
def renewalCapPrcnt;
 
try{
//Below snippet will get Contract Type Name Using Id and MajorVersion of the 
Contract def vo = newView('ContractVO')
def vc = newViewCriteria(vo)
def vcr = vc.createRow()
 
def vci1 = vcr.ensureCriteriaItem('Id')
vci1.setOperator('=')
vci1.setValue(DnzChrId)
 
def vci2 = vcr.ensureCriteriaItem('MajorVersion')
vci2.setOperator('=')
vci2.setValue(MajorVersion)
 
vc.insertRow(vcr)
vo.appendViewCriteria(vc)
vo.executeQuery()
 
def row = vo.first();
if(row != null)
{
typeName = row.getAttribute('ContractTypeName')
}
 
//Iterate through KeyTerms to classify key terms such as Renewal Cap Percentage, 
//Based on the rules, user must populate ClassificationCode with appropriate Lookup Code
def contKeyTerms =  contractKeyTerms
while(contKeyTerms.hasNext()){
  def keyTermrow = contKeyTerms.next();
   
    
// Implementing Rule #1
  if(keyTermrow.getAttribute('KeyTermName') == 'Renewal Cap Percentage'){
    renewalCapPrcnt = keyTermrow.getAttribute('UpdatedValue')
    if(renewalCapPrcnt > '2')
      keyTermrow.setAttribute("ClassificationCode","OKC_CLASSIFY_NON_STD")
    else
      keyTermrow.setAttribute("ClassificationCode","OKC_CLASSIFY_STD")
  }
  
// Implementing Rule #2 
  if(keyTermrow.getAttribute('KeyTermName') == 'Price Hold'){
    if(keyTermrow.getAttribute('UpdatedValue') == 'Yes')
      keyTermrow.setAttribute("ClassificationCode","OKC_CLASSIFY_PRESENT")
    else
      keyTermrow.setAttribute("ClassificationCode","OKC_CLASSIFY_ABSENT")
  }

  
}

// Implementing Rule #3 
//Re-Iterate through KeyTerms to Classify the Renewal Period
def contKeyTermsUpd =  contractKeyTerms
while(contKeyTermsUpd.hasNext()){
  def keyTermUpdrow = contKeyTermsUpd.next();
  if(keyTermUpdrow.getAttribute('KeyTermName') == 'Renewal Period’){
    if(typeName == "Sell : No lines"){
      
      if(keyTermrow.getAttribute('UpdatedValue') < 3 != 'NONE'){
        keyTermUpdrow.setAttribute("ClassificationCode","OKC_CLASSIFY_NON_STD")
      }
      if(keyTermrow.getAttribute('UpdatedValue') >= 3){
        keyTermUpdrow.setAttribute("ClassificationCode","OKC_CLASSIFY_STD")
      }
    }
  }
}
}
catch(Exception e){
  def message = "There is an error in the implementation. Please contact Administrator";
  adf.error.warn(message)
}