醫療理賠處理和測試原則 (BizTalk Server 範例)
「醫療理賠處理和測試原則」範例示範如何建立一組規則集,其中多個規則會檢查衍生自資料庫資料表的事實和輸入文件,並使用 .NET 架構物件來記錄理賠處理的結果。
這個範例會示範端對端執行理賠處理的實例,透過使用「商務規則引擎」的簡單 .NET 架構應用程式,對輸入的理賠申請執行醫療理賠規則集,判斷理賠申請的 STATUS 及其 REASON。
注意
這個範例也會示範如何使用偵錯追蹤檔案,追蹤「商務規則引擎」的執行狀況。
此範例的用途
這個範例會將下列一連串規則套用至提交的理賠申請:
如果理賠申請的總金額超過原則允許的上限,則拒絕理賠申請。
如果客戶住院天數超過原則允許的上限,則拒絕理賠申請。
如果理賠申請上的日期是在未來,則拒絕理賠申請。
如果原則無效則拒絕理賠申請。
如果原則已過期,則傳送線索給銷售部門並附上原則識別碼和客戶名稱。
否則核准理賠申請。
可在何處找到此範例
< 範例路徑>\商務規則\醫療宣告處理和測試原則\
下表顯示此範例中的檔案,並描述其用途。
檔案 | Description |
---|---|
Cleanup.bat | 用來解除部署組件,並將這些組件從全域組件快取 (GAC) 移除。 移除傳送埠和接收埠。 視需要移除 Microsoft Internet Information Services (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 檔中定義的結構描述相符。 |
建置和初始化此範例
若要建置及初始化醫療理賠處理和測試原則範例
確定您的電腦上已安裝 Northwind 資料庫。
重要
若要執行此範例,您必須有 Northwind SQL Server範例資料庫。 若要下載,請移至Northwind 和 pubs 範例資料庫,以取得 Microsoft SQL Server。
在命令視窗中,瀏覽至下列資料夾:
< 範例路徑>\商務規則\醫療宣告處理和測試原則\
執行檔案 Setup.bat,這會執行下列動作:
- 編譯及部署此範例的 Visual Studio 專案,包括 Claims.dll、FactRetrieverForClaimsProcessing.dll 和 RulesForMedicalClaims.dll。
注意
在嘗試執行此範例之前,您應該確認 BizTalk Server 沒有在建置和初始化程序期間報告任何錯誤。
注意
若您選擇不執行 Setup.bat 檔案就開啟和建置此範例中的專案,您必須先使用 .NET Framework Strong Name Utility (sn.exe) 建立強式名稱金鑰組。 使用此金鑰組簽署所產生的組件。
使用 SQL Query Analyzer 執行所提供的 SQL 指令碼 Create_PolicyValidity_Table.sql。 此指令碼會使用 Northwind 範例資料庫中的兩個範例資料列來建立資料表 PolicyValidity。 此資料表有兩個數據行:ID 和 PolicyStatus。
建立並繫結 BizTalk Server 傳送和接收埠。
啟用接收位置並啟動傳送埠。
登錄和啟動協調流程。
注意
若要復原 Setup.bat 所進行的變更,請執行 Cleanup.bat。 您必須先執行 Cleanup.bat 才能再度執行 Setup.bat。
執行此範例
若要執行醫療理賠處理和測試原則範例
在命令視窗中,瀏覽至下列資料夾:
< 範例路徑>\Business Rules\Medical Claims Processing and Testing Policies\RulesForMedicalClaims\bin\Debug\
在命令列上執行檔案 RulesForMedicalClaims.exe。
注意
您可以變更範例理賠申請檔案 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 元素變更為因為原則到期而具有值為 2) ,則會取得下列輸出:
Sending to Renewal Department for Customer Smir with Policy # 2 Status: REJECTED! Reason: Policy ID is invalid
對於有效的理賠申請,會取得下列輸出:
Status: Claim Accepted! Reason:
注意
每次您執行這個範例時,都會在資料夾 ...\RulesForMedicalClaims\bin\Debug 中建立文字檔 outputtrace.txt。 它包含規則執行的偵錯追蹤,每個執行循環之後都會在資料夾 \RulesForMedicalClaims\bin\Debug 中建立。 您可以檢查這個檔案來查看規則執行的追蹤輸出。
註解
評估規則集時,所使用的事實來源如下:
長期事實擷取器,也就是 。實作 IFactReriever 介面的 NET 應用程式內建在 FactRetrieverForClaimsProcessing 資料夾中。 醫療理賠處理原則會使用它從 PolicyValidity 資料庫擷取資料 (資料集格式),用於評估規則條件。
宣告的格式為 XML 檔,其中包含下列資訊,並儲存在同層級元素中:Name、ID、Amount、以日期為單位。
A .NET 型類別庫 (Claims) , 使用 ClaimResults 類別來記錄宣告的 STATUS 和 REASON,並使用屬性來傳送潛在客戶 (,如果原則無效,) 方法是叫用識別碼和名稱為參數的 SendLeads 方法,以傳送潛在客戶 (。
根據這些事實來源,您可以將針對此實例所定義的規則非正式地描述如下:
檢查輸入的理賠申請是否有效。 如果理賠申請金額超過允許的上限、如果原則已過期 (可檢查資料庫資料表來驗證)、如果住院天數超過允許的上限,而且如果理賠申請的日期是在未來,則理賠申請無效。 如果判斷理賠申請無效,則適當地設定理賠申請的 STATUS 和 REASON。
如果輸入的理賠申請的原則識別碼已過期,則傳送線索給原則更新部門 (並附上原則識別碼和客戶名稱)。
如果理賠申請有效,則適當地設定理賠申請的 STATUS 和 REASON。
規則及其條件繫結的正式表示如下:
規則 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