医疗索赔处理和测试保单(BizTalk Server 示例)
“医疗索赔处理和测试保单”示例演示如何创建包含多个规则的规则集,这些规则检查从数据库表和入站文档推断得出的事实,并使用基于 .NET 的对象记录索赔处理结果。
此示例演示了使用简单 的 声明处理方案的端到端执行。基于 NET 的应用程序,它使用业务规则引擎针对传入声明运行医疗声明规则集,以确定声明的状态和状态的 REASON。
注意
此示例还演示如何使用调试跟踪文件跟踪业务规则引擎执行。
本示例的用途
此示例将以下规则序列应用于提交的声明:
如果声明的总金额超过策略允许的最大值,则拒绝该声明。
如果客户住院时间超过策略允许的最长天数,则拒绝索赔。
如果声明的日期是将来,则拒绝该声明。
如果策略无效,则拒绝声明。
如果策略已过期,请使用策略 ID 和客户名称将潜在顾客发送到销售部门。
否则,批准声明。
本示例所在的位置
<示例路径>\业务规则\医疗声明处理和测试策略\
下表显示了本示例中的文件及其用途说明:
文件 | 说明 |
---|---|
Cleanup.bat | 用于取消部署程序集并从全局程序集缓存 (GAC) 删除这些程序集。 删除发送和接收端口。 根据需要删除 Microsoft Internet 信息服务 (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) 的main可执行文件的此示例部分的项目、解决方案、源和相关文件,以编程方式定义和存储规则集、构造示例事实,然后使用 PolicyTester 对象运行规则集。 |
\RulesForMedicalClaims 文件夹的内容: MedicalClaims.xsd |
定义提交到此示例的示例医疗声明的结构的架构文件。 |
\RulesForMedicalClaims 文件夹的内容: sampleClaim.xml |
符合 MedicalClaims.xsd 文件中定义的架构的示例输入文件。 |
生成和初始化此示例
生成并初始化“医疗索赔处理和测试保单”示例
确保您的计算机上具有 Northwind 数据库。
重要
若要运行此示例,必须具有 Northwind SQL Server示例数据库。 若要下载,请转到 Northwind and pubs 示例数据库 for Microsoft SQL Server。
在命令窗口中,导航到下面的文件夹:
<示例路径>\业务规则\医疗声明处理和测试策略\
运行 Setup.bat 文件,该文件将执行以下操作:
- 编译和部署此示例的 Visual Studio 项目,包括 Claims.dll、FactRetrieverForClaimsProcessing.dll 和 RulesForMedicalClaims.dll。
注意
在尝试运行本示例前,您应确认在生成和初始化过程中 BizTalk Server 未报告任何错误。
注意
如果选择在不运行文件 Setup.bat 的情况下打开并生成此示例中的项目,则必须首先使用.NET Framework强名称实用工具 (sn.exe) 创建强名称密钥对。 使用该密钥对可以对生成的程序集签名。
使用 SQL 查询分析器Create_PolicyValidity_Table.sql 运行提供的 SQL 脚本。 该脚本在 Northwind 示例数据库中创建包含两个示例行的表 PolicyValidity。 此表有两列:ID 和 PolicyStatus。
创建并绑定 BizTalk Server 发送端口和接收端口。
启用接收位置并启动发送端口。
登记并启动业务流程。
注意
若要撤销 Setup.bat 所做的更改,请运行 Cleanup.bat。 必须在第二次运行 Setup.bat 之前运行 Cleanup.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 无效的声明 (,例如,通过将 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、Nights 和 Date。
A .基于 NET 的类库 (Claims) ,使用 ClaimResults 类使用属性记录声明的状态和 REASON,如果策略无效,) 通过调用具有 ID 和名称作为参数的 SendLeads 方法发送潜在顾客 (。
根据这些事实来源,可以非正式地描述为此方案定义的规则,如下所示:
检查传入声明是否有效。 如果金额超过声明的允许限制,如果策略已过期, (通过检查数据库表) 进行验证,如果天数已超过允许的最大限制,以及声明是在将来的某个日期进行的,则声明无效。 如果声明已确定为无效,请相应地设置声明的 STATUS 和 REASON。
如果传入声明的策略 ID 已过期,请将具有策略 ID 和客户名称) 的潜在顾客 (发送给策略续订部门。
如果声明有效,请相应地设置声明的 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