医疗索赔处理和测试保单(BizTalk Server 示例)

“医疗索赔处理和测试保单”示例演示如何创建包含多个规则的规则集,这些规则检查从数据库表和入站文档推断得出的事实,并使用基于 .NET 的对象记录索赔处理结果。

此示例演示了使用简单 的 声明处理方案的端到端执行。基于 NET 的应用程序,它使用业务规则引擎针对传入声明运行医疗声明规则集,以确定声明的状态和状态的 REASON。

注意

此示例还演示如何使用调试跟踪文件跟踪业务规则引擎执行。

本示例的用途

此示例将以下规则序列应用于提交的声明:

  1. 如果声明的总金额超过策略允许的最大值,则拒绝该声明。

  2. 如果客户住院时间超过策略允许的最长天数,则拒绝索赔。

  3. 如果声明的日期是将来,则拒绝该声明。

  4. 如果策略无效,则拒绝声明。

  5. 如果策略已过期,请使用策略 ID 和客户名称将潜在顾客发送到销售部门。

  6. 否则,批准声明。

本示例所在的位置

<示例路径>\业务规则\医疗声明处理和测试策略\

下表显示了本示例中的文件及其用途说明:

文件 说明
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 文件中定义的架构的示例输入文件。

生成和初始化此示例

生成并初始化“医疗索赔处理和测试保单”示例

  1. 确保您的计算机上具有 Northwind 数据库。

    重要

    若要运行此示例,必须具有 Northwind SQL Server示例数据库。 若要下载,请转到 Northwind and pubs 示例数据库 for Microsoft SQL Server

  2. 在命令窗口中,导航到下面的文件夹:

    <示例路径>\业务规则\医疗声明处理和测试策略\

  3. 运行 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。

运行本示例

运行“医疗索赔处理和测试保单”示例

  1. 在命令窗口中,导航到下面的文件夹:

    <示例路径>\Business Rules\Medical Claims Processing and Testing Policies\RulesForMedicalClaims\bin\Debug\

  2. 在命令行 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 方法发送潜在顾客 (。

    根据这些事实来源,可以非正式地描述为此方案定义的规则,如下所示:

  1. 检查传入声明是否有效。 如果金额超过声明的允许限制,如果策略已过期, (通过检查数据库表) 进行验证,如果天数已超过允许的最大限制,以及声明是在将来的某个日期进行的,则声明无效。 如果声明已确定为无效,请相应地设置声明的 STATUS 和 REASON。

  2. 如果传入声明的策略 ID 已过期,请将具有策略 ID 和客户名称) 的潜在顾客 (发送给策略续订部门。

  3. 如果声明有效,请相应地设置声明的 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  
    
    

另请参阅

业务规则(BizTalk Server 示例文件夹)