BizTalk EDI 解决方案

使用 BizTalk Server 2010 处理医疗保健索赔

Mark Beckner

BizTalk Server 2010 引入了一个完全重新设计的平台,用于管理贸易合作伙伴之间的电子数据交换 (EDI) 文档的交换工作。如果您使用过此平台的早期版本,则可能在设置各方之间的文档交换方面遇到过一些难题。使用最新版本,您可以完全控制与在各方之间进行交换有关的文档设置的组织和配置。

此外,BizTalk Server 2010 还大大改进了开发人员在开发映射时的体验。

为了说明这些新功能,我将向您逐步介绍构建 EDI 解决方案所需的步骤。在 BizTalk Server 2010 中 开发的每个 EDI 解决方案都遵循一个基本模式:

  • 添加和修改基本的 EDI 架构。
  • 创建 EDI 文档和内部/外部消息之间的映射。
  • 实施业务流程以处理与处理 EDI 文档相关联的工作流。
  • 配置贸易合作伙伴设置,包括合作方、业务配置文件、协议和回执。
  • 配置端口以启用对文档的接收或传递(无论是通过 FTP、AS2 还是其他协议)。

为便于说明,下面我们将看一下医院和索赔处理部门之间的文档交换。双方之间交换的文档将是符合健康保险可转移性与责任法案 (HIPPA) 的 837 专业和机构文件。

使用架构

在大多数 EDI 解决方案中,您将使用两种基本类型的架构:EDI 架构(代表与贸易合作伙伴交换的平面文件)和内部架构(代表处理 EDI 文档中的数据时所需的文档类型)。

在本例中,解决方案与外部方交换 837 文档,但使用的文档格式与进行内部处理时使用的格式不同。内部架构代表 ECSIF 平面文件:索赔处理方的通用格式。我们可以将 BizTalk 附带的 837 架构添加到 Visual Studio 项目中,但是必须手动构建内部架构(例如 ECSIF)。

BizTalk Server 2010 附带了上千个现有架构,这些架构定义了大多数目前正在使用的 EDI 文档。要访问这些架构,需运行 $\Program Files\Microsoft BizTalk Server 2010\XSD_Schema\EDI 目录中的 MicrosoftEdiXSDTemplates.exe 可执行文件。对于本示例,我将使用 HIPAA\00501 文件夹中符合 HIPAA 的 837 专业和机构架构。通过将 XSD 文件添加到 Visual Studio 项目,可以使该文件被其他 BizTalk 组件引用和使用,最重要的是,可以被映射引用和使用。

图 1 显示了 Visual Studio 2010 中的 837 专业 5010 架构。请注意此架构上的节点数:837 是最复杂的 EDI 文档之一,并且很难使用。它包含数百个几乎完全相同的节点,代表订阅者和患者信息。

图 1 837 专业 5010 架构

图 2 显示了代表 ECSIF 格式的内部架构。此架构是使用平面文件架构向导生成的。该向导可指向一个有效的平面文件实例以创建一个 XSD。此架构中升级了 FileHeader 节点中的许多字段。升级后的字段提供了改进的筛选和映射选项。

图 2 目标 ECSIF 架构格式

定义架构并将其添加到 Visual Studio 项目中后,您就可以开始构建映射了。在本例中,我将查看在映射 837 文档时可使用的几种方案。

开发映射

BizTalk Server 2010 中的映射接口已得到彻底修订并引入了各种新功能。这些功能包括缩放、自动节点匹配和搜索功能。最显著的增强功能之一是可在行或 functoid 上单击,并且可使所有其他映射淡入到背景中。

正如任何 EDI 映射开发人员将要了解到的,一些映射极其复杂,而且具有多个选项卡和几十个(甚至几百个)functoid。可能很难直观地确定源架构中哪些数据映射到目标架构中的哪些数据,以及使用哪些 functoid 来执行此映射。在所用的任何行或 functoid 上单击,便会突出显示所有相关的映射。

图 3 显示了一个复杂映射的示例,其中突出显示了一套特定的映射逻辑。这揭示了 BizTalk 映射开发中通常被忽视的一点:有时应使用映射接口,而有时不应使用映射接口。并非在 BizTalk 中进行的所有映射都最适合用标准映射,有时,应该使用其他方法。其他方法包括内联脚本和外部组件,包括 XSLT 和 Microsoft .NET Framework 组件。

图 3 突出显示 BizTalk Server 2010 映射中的功能

BizTalk 映射开发通常包含标准 functoid、内联 XSLT 和 C# 的组合。有时甚至可以交给一个外部 XSLT 样式表(这会完全绕过 BizTalk 映射程序)。EDI 映射可能会变得复杂,而且需要灵活性并进行规划,以便得到所需的解决方案。

为了说明内联 C# 的用法,让我们来看一下映射出站 837 专业或机构文件的常用函数:分层 (HL) 段的映射。HL 段需要文件中各项记录的增量值,且这些 HL 段表示父/子关系。实际上,所有传统的 functoid 组合都不能使这些值 得到正确设置。然而,有一个简单的内联 C# 方法可以得到正确的值。此方法需要两个脚本 functoid:一个用于存储全局变量并映射 HL01,第二个用于映射 HL02(这取决于 HL01 的值)。

HL01 functoid 脚本如下所示:

int intHL01;
  public int getHL01() {
  intHL01++;
  return intHL01;
  }

下面是 HL02 脚本的代码:

public int getHL02() {
  return intHL01 -1;
  }

图 4 显示了位于映射中的 functoid。

图 4 映射出站 837 上的 HL 段

映射 EDI 文档时经常发生的另一种情况是需要使用内联 XSLT。这是 BizTalk 映射中要用到的最重要的技能之一,因而也是您应该熟悉的技能。它允许使用许多关于循环和节点创建的方法,而这些方法是无法通过使用标准 functoid 组合获得的。

图 5 显示了在映射中使用内联 XSLT 的图解。此代码展示了如何使用内联 XSLT 调用模板功能传入源文档 (Name) 中的一个参数并在目标 837 文档中创建一个节点。

图 5 向内联 XSLT 调用模板脚本传递参数

开发 BizTalk 映射时,要始终考虑到映射的长期可维护性。您能够轻松更新它吗?将来其他人能够使用它吗?使用 BizTalk 映射时,不要忘记运用良好的编码做法,而且在开发具有许多逻辑或复杂功能的映射时,还需要运用一些体系结构技术并进行一些规划。

业务流程

不必在 EDI 解决方案中使用业务流程。通常,只需要将文档从一种格式映射到另一种格式并进行传递,而不需要包括工作流。

但是,在某些情况下,文档可能需要完成几个处理步骤,才能进行传递。为了说明这一点,我将设置一个要映射的业务流程,并将消息归档到 SQL Server 的一个表中。将为业务流程配置一个筛选器,以确保业务流程仅处理特定类型的文档。

可对业务流程进行设置,以订阅 EDI 文档的 ISA 或 ST 段中的几乎任何字段(以及许多其他属性)。要配置业务流程以订阅文档中的特定字段,可在此业务流程的初始接收形状上设置一个筛选器,如图 6 所示。

图 6 在业务流程上设置一个筛选器

指定筛选器后,业务流程现在就可以对 EDI 文档进行必要的处理了。在本例中,业务流程会将数据从 837 格式映射到 ECSIF 格式,然后将此信息写入 SQL Server 中的一个归档表。文档的映射是通过一个转换形状并包含一个映射文件完成的,但是向 SQL Server 写入信息的方式却有很多种。

考虑 SQL Server 时,许多 BizTalk 开发人员都假设他们需要使用一个用于向 SQL 写入信息的适配器。但事实是,在许多情况下,SQL 适配器对于基本数据库调用来说是极其复杂的。通常,与 SQL Server 交互最简单和最容易支持的方法就是使用自定义的 .NET 程序集类。当开发从业务流程调用的类时,要始终确保将类标记为可序列化,以确保 BizTalk 能够从任何类型的事务状态调用类:

namespace Demo.BizTalk.Helper {
    [Serializable]
    public class DataAccess
    { }
  }

为 EDI 解决方案开发业务流程与为其他类型的 BizTalk 实现开发业务流程没有什么区别。开发业务流程时,主要要牢记一点,那就是要简单化。开发 BizTalk 以及正确地组织您的 BizTalk 项目是一种艺术。如果您已经进行了恰当的规划和开发,那么您将得到一个能够轻松更新到并部署到生产环境的解决方案。

贸易合作伙伴配置

BizTalk Server 2010 引入了一个用于管理贸易合作伙伴之间交换 EDI 文档的新接口。此接口包含三个基本的组织层:参与方、业务配置文件和协议。

参与方代表的是贸易合作伙伴最高级别的组织。关于该层的配置涉及到与此贸易合作伙伴交换的所有文档中的共有内容。例如,安全通信所需的证书将在此级别配置。

在本例中,我有两个参与方:索赔处理方和医院。每一方都是作为其独特的 BizTalk 参与方设置的。如图 7 所示,只需配置名称。

图 7 最高级别参与方配置

参与方将拥有一个或多个与其相关的业务配置文件。业务配置文件代表着组织中的部门,在发送或接收 EDI 文档时,各部门拥有其自己独特的业务标识。业务标识是 EDI 文档的 ISA06 或 ISA08 段中显示的值(取决于发送文档还是接收文档),用作此贸易合作伙伴的唯一性标识,使其区别于所有其他实体。许多组织将拥有单个业务配置文件,但是有些组织将需要多个配置文件。

在本例中,索赔处理方拥有两个业务配置文件:一个代表专业索赔处理,另一个代表机构索赔处理。医院也有两个业务配置文件:国内分支和国际分支。图 8 显示了参与方及其业务配置文件。

图 8 与参与方相关的业务配置文件

由于业务配置文件代表参与方中的唯一企业标识,因此该级别的配置可处理将与此标识交换的所有文档中的共有信息。交换的所有文档类型中共用的所有入站和出站设置都将得到配置:所使用的协议(X12、EDIFACT、AS2)、验证设置、事务集(在此级别允许使用 EDI 文档)、回执和一些信封设置都在业务配置文件中得以配置。在许多情况下,可以在该级别使用默认信息,因为业务配置文件的特定协议的配置将定义此信息以及更多信息。

业务配置文件可以有一个或更多协议。协议代表的是两个参与方希望与另一方交换一个或更多文档类型的方式。协议中定义了允许的信封、回执及事务集的详细内容。一份协议可能允许将特定文档与配置的 997 回执进行交换,而另一份协议可能允许其他文档类型放弃回执。

在本例中,索赔处理方和医院将交换文档。医院将向索赔处理方发送索赔项目(X12 837 机构版本 5010),索赔处理方将向医院发送回执 (X12 997)。图 9 显示了信封标识符配置,图 10 显示了协议上有关从医院发送给索赔处理方的文档的事务集配置。请注意窗口顶部用于指示文档流向的选项卡。

图 9 配置协议中的 ISA 信封设置

图 10 配置协议中的事务集

图 11 显示了索赔处理方发回给医院的回执的配置。

图 11 配置协议中的回执

如果您要和多个贸易合作伙伴交换文档,那么您可能会发现您的大多数配置几乎是完全相同的 — 唯一不同的将是信封的 ISA 段中的标识符。

为了便于开发,请确保使用协议配置屏幕中提供的模板功能。您可能会对两个按钮感兴趣:“另存为模板”和“从模板加载”。如果您完全配置了贸易合作伙伴,并且 EDI 文档进行端到端流动时具有正确的信封设置和回执,那么只需将协议设置另存为模板,以后编写协议时使用该模板开始编写即可。

端口配置和文档传递

将文档实际传递给 BizTalk,或将文档从 BizTalk 传递给外部贸易合作伙伴,是通过端口配置完成的。端口定义了传递机制的类型(FTP、文件等)并包含 BizTalk 管道,该管道可将 BizTalk 中的 XML 文档转换为贸易合作伙伴所期望的平面文件 EDI 文档。该管道包含一种逻辑,此逻辑用于解释(或创建)文档的 EDI 信封并确定该文档将解析给哪一方。

为了了解端口如何处理 EDI 文档,下面我们来看一下发送回执的过程。正如您之前所看到的,回执是在 BizTalk 参与方的协议上配置的。当文档到达时,BizTalk 可自动生成一个 997 回执。BizTalk 创建了 997 XML 并将其置于 BizTalk 消息框上,但它实际上并没有将消息路由到任何地方。必须设置并配置发送端口,以便将 XML 转换为平面文件、添加信封,并将该文件传递到相应的目的地。

要将发送端口设置为传递回执,需要执行三个基本步骤:

  1. 定义发送端口和传递协议
  2. 包含 EdiSend 管道(或带有 EDI 管道组件的自定义管道)
  3. 将筛选器配置为侦听相应回执

将发送端口配置为向特定位置传递文档的过程非常简单。图 12 显示了使用 EdiSend 管道配置的发送端口。此发送端口会将文件写出到一个具有完整的 EDI 信封和格式的文件目录。

图 12 在端口上设置管道和传递信息

在发送端口上设置筛选器也十分简单。只需指定筛选器应仅选取系统为该贸易合作伙伴生成的回执(而非来自该合作伙伴的传入 997)即可。图 13 显示了一组完全配置的筛选器。

图 13 在发送端口上筛选

问题得到了解决

BizTalk Server 2010 中的新 EDI 功能主要用于管理贸易合作伙伴。旧版本的平台不可能处理分层的关系和组织,而现在却可以相对轻松地为分层的关系和组织构建模型。除此之外,映射接口也得到了增强,并且开发人员的映射体验也得到了很大提高。由于进行了各种改进并增加了许多功能,现在可使用 BizTalk Server 2010 成功地开发任何 EDI 解决方案并对其建模。

Mark Beckner是 Inotek Consulting Group LLC 的创始人。他从事 Microsoft 堆栈工作,其中包括 BizTalk、SharePoint、Dynamics CRM 和常规的 .NET 开发。您可通过以下电子邮件地址与他联系:mbeckner@inotekgroup.com