HL7 EDI 用 Anypoint Connector (HL7 EDI Connector) は、Mule 内で HL7 バージョン v2.x メッセージの作成、読み取り、変換を簡単に行うために必要なツールを提供して、ヘルスケアシステムとのインテグレーションを促進する機能コレクションです。Health Level Seven International (HL7) は、ヘルスケア情報の転送および通信の標準セットを定義する標準開発組織です。
互換性と解決された問題に関する情報は、「HL7 EDI Connector リリースノート」を参照してください。
標準スキーマ定義は、HL7 バージョン 2.1、2.2、2.3.1、2.3、2.4、2.5、2.5.1、2.6、2.7、7.1、2.8、2.8.1 の HL7 EDI Connector に含まれています。 2.スキーマは次の 2 つの形式で提供されます。
-
標準 HL7
上記の HL7 バージョンごとに必須または省略可能な状況、データ型、項目の長さ、反復数を使用します。
-
Lax HL7
すべてのセグメントと値項目は省略可能です。これらの行レベルのデータ型は単純な文字列として扱われます。項目長と反復回数は適用されません。
どちらの形式のスキーマも、コネクタの classpath で使用できます。標準 HL7 スキーマではパス /hl7/v2_5_1/ADT_A01.esl を使用します。
Lax スキーマではパス /hl7lax/v2_5_1/ADT_A01.esl を使用します。
HL7 で提供されるスキーマに必要なスキーマ定義が含まれています。
スキーマについての詳細は、「EDI スキーマ言語リファレンス」を参照してください。
始める前に
このコネクタを使用するには、以下に精通している必要があります。
-
Anypoint Connector
-
Mule Runtime Engine (Mule)
-
Mule フローの要素とグローバル要素
-
Anypoint Studio (Studio) を使用した Mule アプリケーションの作成
-
HL7 EDI Connector
HL7 EDI Connector を使用するには、以下が必要です。
-
HL7 用の MuleSoft ライセンスを購入していること。ライセンスの購入についてはアカウント担当者にお問い合わせください。
-
Anypoint Studio 7.0 以降。
EDI スキーマ言語について
HL7 EDI Connector では、EDI スキーマ言語 (ESL) と呼ばれる YAML 形式を使用して EDI スキーマを表します。 基本 ESL では、次の観点で電子データ交換 (EDI) メッセージの構造が定義されます。
-
構造 (HL7 の用語ではメッセージ構造)
-
グループ
-
セグメント、複合、要素。
HL7 スキーマ定義をデータに合わせてカスタマイズするには、スキーマ定義を直接コピーして編集するか、コンソールツールを使用して 1 つ以上のサンプルドキュメントに基づいて簡単なスキーマを生成することができます。または、他の EDI 形式と同様に HL7 のオーバーレイスキーマを使用することもできますが、HL7 定義の複雑さのためこのオプションはお勧めできません。
独自のスキーマをゼロから定義することも、「EDI スキーマ言語リファレンス」で示しているようにデータに合わせてベース HL7 スキーマ定義をコピーして編集することもできます。
HL7 スキーマの場所の確認
このコネクタを使用するには、プロジェクト内のスキーマの場所を把握しておく必要があります。標準 HL7 スキーマを使用していて、何もカスタマイズしていない場合、標準スキーマの場所は /hl7/{version}/{message structure}.esl のパターン、可変スキーマの場所は /hl7lax/{version}/{message structure}.esl のパターンに従います。
たとえば、2.5.1 バージョンおよび ADT_A01 メッセージ構造を使用している場合、標準バージョンのスキーマの場所は /hl7/v2_5_1/ADT_A01.esl、可変バージョンのスキーマの場所は /hl7lax/v2_5_1/ADT_A01.esl になります。
1 つ以上のカスタムスキーマを使用している場合、src/main/mule のディレクトリにこれらを配置し、${app.home} を使用してその場所を参照します。
たとえば、ADT_A01 スキーマを src/main/mule/mypartner/ADT_A01.esl に配置した場合、スキーマの場所は ${app.home}/mypartner/ADT_A01.esl になります。
Mule Runtime Engine は自動的に src/main/mule を参照し、${app.home} 値を含む場所があるかどうかを確認します。
X12 EDI Connector メッセージ構造の階層
このコネクタを使用して、正規 ER7 メッセージ構造との間で HL7 ドキュメントの読み書きを行います。 この構造は、Java マップおよびリストの階層です。DataWeave またはコードを使用してこれらを操作します。 各トランザクションの構造はスキーマで定義されます。
メッセージ自体には以下のキーが含まれ、一部のキーは、以下に示すように、read 操作または write 操作のどちらかにのみ適用されます。
| キー名 | 説明 |
|---|---|
ACK (参照のみ) |
読み取り操作中にモジュールによって生成されたメッセージ。 |
Data (参照/更新) |
実際のデータにリンクしているメッセージ構造 ID 値に一致するキーを持つメッセージデータのラッパー。これにより、異なるメッセージをメタデータに含めて DataWeave マッピングで処理できます。 |
Delimiters (参照/更新) |
メッセージで使用する区切り文字。
区切り文字の文字列内の文字は文字列内での位置に基づいて次の順で解釈されます: コンポーネントの区切り文字、反復区切り文字、エスケープ文字、サブコンポーネントの区切り文字 (その位置に値がないことを示す |
Errors (参照のみ) |
入力メッセージに関連付けられたエラーのリスト。 |
Id |
メッセージ構造 ID。 |
MSH (参照のみ) |
MSH セグメントデータを受信するリンク。 |
Name (参照のみ) |
メッセージ構造名。 |
個々のメッセージには、メッセージのセグメントに一致するキーを持つ独自のマップがあります。たとえば、ACK メッセージでメッセージ構造 ID の ACK を使用すると、送信または受信された ACK メッセージのデータは、データマップの ACK 値になります。ACK メッセージ自体はマップです。メッセージのセグメントとグループは、位置キーを持つマップ (単一インスタンスの場合) またはマップのリスト (反復するインスタンスの場合) として表されます。
2 つの特別なケースでは、スキーマ定義に含まれないデータに対して汎用処理を使用します。
1 つ目のケースは、varies 型の HL7 値の場合です。これらの値は反復される可能性があるコンポーネントとサブコンポーネントの任意の構造で構成されているため、パーサーは varies の型ごとにマップリスト表現を使用します。値が解析されるときに各マップのキーが生成され、標準の HL7 値の名前が、各ネストレベルで使用される 2 桁の数字と一致します。
たとえば、OBX-05 Observation Value 項目の簡単なテキスト値ではマップ内でキー OBX-05 を使用します。2 つのコンポーネントが含まれる場合、これらではキー OBX-05-01 および OBX-05-02 を使用します。
もう 1 つのケースは、拡張セグメントにパーサーオプションで設定されたパターンに一致するタグが含まれる場合です。これらは、セグメント全体の 1 つのマップ内にのみあるという点を除き、varies 値と同じような構造です。
拡張セグメントデータが含まれるマップは、キー ExtensionSegs を使用してリストの基本メッセージマップに追加されます。実際の拡張セグメントデータに加えて、拡張セグメントのマップには 2 つの他のキーが含まれます。
| キー | 説明 |
|---|---|
Ident |
拡張セグメント ID (タグ)。 |
Position |
メッセージ構造内のセグメントの位置 (2 桁文字列)。これは、スキーマで定義されている、直前に定義されたセグメントの位置と同じです。 |
ネストされたグループ内で拡張セグメントが使用されている場合、そのセグメントを含むリストは、そのグループを表すマップに含まれます。拡張セグメントは、パーサーが作成したリスト内の位置で並び替えられます。また、書き込み時にも位置で並び替えられる必要があります。
肯定応答の送信について
ACK (肯定応答) メッセージは、メッセージをアプリケーションで受信したことをメッセージ送信者に肯定応答できる HL7 メッセージです。ACK メッセージは、読み取り操作時に生成されたデータを出力メッセージとして Data キーで ACK メッセージに設定する点を除き、他の HL7 メッセージの書き込み操作と同じです。
例を挙げます。
<hl7-edi:read config-ref="HL7_EDI__Configuration1" doc:name="HL7 EDI"/>\
...
<dw:transform-message doc:name="Create Outgoing Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
{
Name: "ACK",
MSH: payload.ACK.MSH,
Id: "ACK",
Data: {
ACK: payload.ACK
}
}]]></dw:set-payload>
</dw:transform-message>
<hl7-edi:write config-ref="HL7_EDI__Configuration" messageStructure="InMessage" doc:name="ACK"/>
...
<file:outbound-endpoint responseTimeout="10000" doc:name="File" path="output" outputPattern="ack.edi"/>
生成された ACK メッセージには、元のメッセージの送信者に送り返すようにセットアップされた MSH データが含まれるため、送信を実行するためにデータを変更する必要はありません。
ACK メッセージスキーマを設定に含める場合、そのスキーマは ACK メッセージの受信と生成の両方で使用されます。ACK スキーマを指定しない場合、標準 hl7/v2_5_1/ACK.esl スキーマのデフォルトが使用されます。
Exchange テンプレートおよび例
Anypoint Exchange では、アプリケーションのスタートポイントとして使用できるテンプレートと、完全なソリューションを具体的に示した例の両方を提供しています。
次のステップ
前提条件を満たしたら、Anypoint Studio で独自のアプリケーションを作成してコネクタを設定できます。