Medical Claims Processing and Testing Policies (BizTalk Server サンプル)
Medical Claims Processing and Testing Policies サンプルは、データベース テーブルおよび受信ドキュメントから派生したファクトを検証し、.NET ベースのオブジェクトを使用して請求処理の結果を記録する複数のルールを含むルール セットを作成する方法を示します。
このサンプルは、ビジネス ルール エンジンを使用して、受信した請求に対して医療費請求ルール セットを実行し、請求のステータスとそのステータスの理由を決定する .NET ベースのシンプルなアプリケーションを使用した請求処理シナリオのエンド ツー エンド実行を示します。
Note
このサンプルは、デバッグ トレース ファイルを使用してビジネス ルール エンジンの実行を追跡する方法も示します。
このサンプルの処理
このサンプルは、送信された請求に対して以下の順序でルールを適用します。
請求額がポリシーの最大限度額を超えている場合は、請求を拒否します。
患者の入院期間がポリシーの最長期間を超えている場合は、請求を拒否します。
請求日が将来の日付の場合は、請求を拒否します。
ポリシーが有効でない場合は、請求を拒否します。
ポリシーの有効期限が切れている場合は、情報がポリシー ID および患者名と共にセールス部門に送信されます。
上記以外の場合は、請求が承認されます。
このサンプルの場所
<サンプル パス>\ビジネス ルール\医療クレームの処理とテストのポリシー\
次の表は、このサンプルのファイルとその目的を示しています。
ファイル | 説明 |
---|---|
Cleanup.bat | アセンブリを展開解除し、グローバル アセンブリ キャッシュ (GAC) から削除するために使用されます。 送信ポートと受信ポートが削除されます。 必要に応じて、Microsoft インターネット インフォメーション サービス (IIS) の仮想ディレクトリが削除されます。 |
Create_PolicyValidity_Table.sql | PolicyValidity という新しいテーブルを Northwind サンプル データベースに追加する SQL スクリプトです。 |
Setup.bat | このサンプルをビルドおよび初期化するために使用されます。 |
\Claims フォルダー内のファイル : AssemblyInfo.cs、Claims.csproj、Claims.sln、Claims.cs |
要求処理の結果を記録するこのサンプルの部分のプロジェクト、ソリューション、ソース、および関連ファイル (規則の THEN 部分と呼ばれます)。 |
\FactRetrieverForClaimsProcessing フォルダー内のファイル : AssemblyInfo.cs、FactRetrieverForClaimsProcessing.cs、FactRetrieverForClaimsProcessing.csproj、FactRetrieverForClaimsProcessing.sln |
このサンプルで、このサンプルによって作成される PolicyValidity テーブルから情報を取得する長期間のファクト取得コンポーネントを提供する部分のプロジェクト、ソリューション、ソース、および関連ファイルです。 |
\RulesForMedicalClaims フォルダー内のファイル: App.ico、AssemblyInfo.cs、RulesForMedicalClaims.cs、RulesForMedicalClaims.csproj、RulesForMedicalClaims.sln |
このサンプルのメイン実行可能ファイル (RulesForMedicalClaims.exe) を構成し、プログラムによってルール セットを定義して格納し、サンプル ファクトを構築し、PolicyTester オブジェクトを使用してルール セットを実行する、このサンプルの部分のプロジェクト、ソリューション、ソース、および関連ファイル。 |
\RulesForMedicalClaims フォルダー内のファイル: MedicalClaims.xsd |
このサンプルに送信されるサンプル医療費請求の構造を決定するスキーマ ファイルです。 |
\RulesForMedicalClaims フォルダー内のファイル: sampleClaim.xml |
MedicalClaims.xsd ファイルで定義されているスキーマに準拠したサンプル入力ファイルです。 |
このサンプルのビルドと初期化
Medical Claims Processing and Testing Policies サンプルをビルドして初期化するには
コンピューターに Northwind データベースがインストールされていることを確認してください。
重要
このサンプルを実行するには、Northwind SQL Serverサンプル データベースが必要です。 ダウンロードするには、Microsoft SQL Server の Northwind と pubs のサンプル データベースに移動します。
コマンド ウィンドウで、次のフォルダーに移動します。
<サンプル パス>\ビジネス ルール\医療クレームの処理とテストのポリシー\
次のアクションを実行するファイル Setup.bat を実行します。
- Claims.dll、FactRetrieverForClaimsProcessing.dll、RulesForMedicalClaims.dll など、このサンプルの Visual Studio プロジェクトをコンパイルして展開します。
Note
このサンプルを実行する前に、ビルドと初期化のプロセス中に BizTalk Server でエラーが報告されていないことを確認する必要があります。
Note
ファイル Setup.bat を実行せずにこのサンプルのプロジェクトを開いてビルドする場合は、まず、.NET Framework厳密名ユーティリティ (sn.exe) を使用して厳密な名前キー ペアを作成する必要があります。 このキー ペアは、生成されたアセンブリの署名に使用します。
SQL Query Analyzer を使用して、Create_PolicyValidity_Table.sql という付属の SQL スクリプトを実行します。 このスクリプトによって、2 つのサンプル行を含む PolicyValidity というテーブルが Northwind サンプル データベースに作成されます。 このテーブルには、2 つの列 (ID および PolicyStatus) があります。
BizTalk Server の送信ポートおよび受信ポートを作成しバインドします。
受信場所を有効にし、送信ポートを開始します。
オーケストレーションを参加させ、開始します。
Note
Setup.bat によって行われた変更を元に戻すには、Cleanup.bat を実行します。 Setup.bat を 2 回目に実行する場合は、その前に Cleanup.bat を実行してください。
このサンプルの実行
Medical Claims Processing and Testing Policies サンプルを実行するには
コマンド ウィンドウで、次のフォルダーに移動します。
<サンプル パス>\Business Rules\Medical Claims Processing and Testing Policies\RulesForMedicalClaims\bin\Debug\
コマンド ラインで RulesForMedicalClaims.exe ファイルを実行します。
Note
サンプル請求ファイル sampleClaim.xml の個々の要素の値を変更して、サンプルを繰り返し実行できます。 これらの要素の値が異なるいくつかのシナリオの予期される出力を次の表に示します。
送信されたサンプル請求ファイル内の値のさまざまな組み合わせによって得られる出力シナリオは次のとおりです。
請求額が $1000 を超える場合、次の出力が得られます。
Status: REJECTED! Reason: Amount of claim has exceeded Policy limit
入院期間が 10 泊を超える請求の場合、次の出力が得られます。
Status: REJECTED! Reason: Amount of Nights has exceeded Policy limit
日付が無効な要求 (日付の現在の日付 > ) の場合、次の出力が取得されます。
Status: REJECTED! Reason: Cannot submit claims for future dates!
ポリシー ID が無効な要求の場合 (たとえば、ポリシーの有効期限が切れたために ID 要素の値が 2 に変更された場合)、次の出力が取得されます。
Sending to Renewal Department for Customer Smir with Policy # 2 Status: REJECTED! Reason: Policy ID is invalid
有効な請求の場合は、次の出力が得られます。
Status: Claim Accepted! Reason:
Note
このサンプルを実行するたびに、outputtrace.txt というテキスト ファイルが ...\RulesForMedicalClaims\bin\Debug フォルダに作成されます。 このテキスト ファイルには、ルール実行のデバッグ トレースが含まれます。このファイルは、各実行サイクルの後に \RulesForMedicalClaims\bin\Debug フォルダに作成されます。 このファイルを参照して、ルール実行の出力トレースを確認できます。
説明
ルール セットの評価に使用されるファクト ソースは次のとおりです。
長期的なファクト レトリーバー。 IFactReriever インターフェイスを実装する NET ベースのアプリケーションは、FactRetrieverForClaimsProcessing フォルダーに組み込まれています。 このコンポーネントは、PolicyValidity データベースからデータを (データセットの形式で) 取得し、ルール条件を評価するために Medical Claims Processing ポリシーによって使用されます。
請求の形式は、兄弟要素に保存された名前、ID、請求額、泊数、および日付の情報を含む XML ドキュメントです。
A。プロパティを使用して要求の STATUS と REASON を記録し、ID と名前をパラメーターとして SendLeads メソッドを呼び出して (ポリシーが無効な場合は) リードを送信するために、ClaimResults クラスを使用する NET ベースのクラス ライブラリ (Claims) が使用されます。
これらのファクト ソースに基づいて、このシナリオについて定義されたルールは、次のように説明できます。
受信した請求が有効かどうかをチェックします。 請求額が限度額を超えている場合、ポリシーの有効期限が切れている場合 (データベース テーブルをチェックすることによって確認)、入院日数が限度を超えている場合、および請求日が将来の日付である場合、請求は無効です。 請求が無効であると判断された場合、請求のステータスおよび理由を適宜設定します。
受信請求のポリシー ID の有効期限が切れている場合は、ポリシー更新部門に情報 (ポリシー ID および患者名) を送信します。
請求が有効な場合は、請求のステータスおよび理由を適宜設定します。
ルールとその条件のバインドをより形式的に表現すると次のようになります。
規則 1. 金額チェック
IF Amount in the XML document is > 1000 AND IF Claims.ClaimResults object has not been modified (if ClaimResults.RESULT = null) THEN Claims.ClaimResults.Status = "REJECTED"\ && Claims.ClaimResults.Reason = "Amount of claim has exceeded limit" && Assert this object back into working memory
規則 2. 病院で過ごした夜
IF number of nights in the XML document is > 10 AND IF Claims.ClaimResults object has not been modified (if ClaimResults.RESULT = null) THEN Claims.ClaimResults.Status = "REJECTED" && Claims.ClaimResults.Reason = "Amount of claim has exceeded limit" && Assert this object back into working memory
規則 3. 日付の有効性
IF date on the incoming XML claim is > Today AND IF Claims.ClaimResults object has not been modified (if ClaimResults.RESULT = null) THEN Claims.ClaimResults.Status = "REJECTED" && Claims.ClaimResults.Reason = "Cannot submit claims in the future!" && Assert this object back into working memory
ルール 4: ポリシーの有効性
IF Policy is invalid for the ID in the XML claim (check database) AND IF Claims.ClaimResults object has not been modified (if ClaimResults.RESULT = null) THEN Claims.ClaimResults.Status = "REJECTED" && Claims.ClaimResults.Reason = "Policy Invalid" && Assert this object back into working memory
ルール 5: 販売リード
IF Claim.ClaimResults.Reason = "Policy invalid" THEN send a lead to the policy department by invoking the function Claim.ClaimResults.SendLead with customer ID and Name from the incoming XML document.
規則 6. 受け入れられた要求
IF Claim.ClaimResults.Status = null THEN Set the claim status to be valid && Send the lead to the sales department