HL7 EDI - 例

次の例を使用して、スキーマをカスタマイズし、自分や取引パートナーのメッセージヘッダー (MSH) アプリケーションと施設 ID を設定して、フローを開始する HTTP Listener を使用してテストフローを表示する方法を確認します。

サンプルメッセージを使用したスキーマの簡略化

HL7 標準定義は非常に複雑で、セグメントに 20 個以上のコンポーネントが含まれることも少なくありません。これらのコンポーネントの多くはサブコンポーネントに分類されます。メッセージの DataSense ビューには、これらのすべてのサブスクリプションコンポーネントを含める必要があるため、このコンポーネントのネストによって HL7 のマッピングが困難になる場合があります。

実際には、HL7 のほとんどのユーザーは HL7 標準定義全体のごくわずかな部分のみを入力しています。HL7 EDI Connector には、これを利用するためのコンソールベースの Java ツールが用意されています。このツールを使用すると、通常はメッセージで使用されないコンポーネントを除外してスキーマ定義を簡略化できます。

このスキーマ簡素化ツールは ​hl7-simplify-4.0.0.jar​ ファイルにあります。これは、標準の MuleSoft Enterprise Maven リポジトリ (グループ ID の ​com.mulesoft.connectors​ の下) にあります。 このツールでは、入力としてメッセージ構造スキーマと 1 つ以上のサンプルメッセージ (別々のファイル) を受け入れ、1 つ以上のサンプルメッセージに含まれるセグメントとコンポーネントのみに縮小される出力スキーマを生成します。

このツールを使用するには、​JAR​ をダウンロードし、コマンドラインコンソールを開いて次のように入力します。

java -jar hl7-simplify-4.0.0.jar {input-schema} {output-schema} {sample1} {sample2} ...

この構文のプレースホルダーは次の値を表しています。

  • input-schema

    メッセージを読み取るために使用されるメッセージ構造スキーマ。ファイルまたは提供されるスキーマへのクラスパス参照になります (例: /hl7/v2_5_1/ADT_A05.esl​ パス)。

  • output-schema

    簡略化されたスキーマ出力のファイルパス。

  • sample1…​n

    サンプルメッセージへのファイルパス。

各サンプルメッセージファイルが行末に行頭復帰 (CR) がある状態で保存されていることを確認します。これは、HL7 セグメントの必須の区切り文字です。通常、テキストエディターではオペレーティングシステムのデフォルトの行末が使用されますが、この行末は適切ではない可能性もあります。

このツールを使用して生成された簡素化されたスキーマの部分的な例を次に示します。

form: HL7
version: '2.5.1'
structures:
- id: 'SIU_S12'
  name: 'SIU_S12'
  data:
  - { idRef: 'MSH', position: '01', usage: O }
  - { idRef: 'SCH', position: '02', usage: O }
  - groupId: 'PATIENT'
    count: '>1'
    usage: O
    items:
    - { idRef: 'PID', position: '06', usage: O }
    - { idRef: 'PV1', position: '08', usage: O }
  - groupId: 'RESOURCES'
    count: '>1'
    usage: O
    items:
    - { idRef: 'RGS', position: '14', usage: O }
    - groupId: 'SERVICE'
      count: '>1'
      usage: O
      items:
      - { idRef: 'AIS', position: '16', usage: O }
    - groupId: 'GENERAL_RESOURCE'
      count: '>1'
      usage: O
      items:
      - { idRef: 'AIG', position: '20', usage: O }
    - groupId: 'LOCATION_RESOURCE'
      count: '>1'
      usage: O
      items:
      - { idRef: 'AIL', position: '24', usage: O }
    - groupId: 'PERSONNEL_RESOURCE'
      count: '>1'
      usage: O
      items:
      - { idRef: 'AIP', position: '28', usage: O }
segments:
- id: 'AIG'
  name: 'Appointment Information - General Resource'
  varTag: 'AIG'
  values:
  - { idRef: 'SI', name: 'Set ID - AIG', usage: O }
  - { idRef: 'varies', name: 'Segment Action Code', usage: U, count: '>1' }
  - { idRef: 'CE_2', name: 'Resource ID', usage: O }
  - { idRef: 'varies', name: 'Resource Type', usage: U, count: '>1' }
  - { idRef: 'varies', name: 'Resource Group', usage: U, count: '>1' }
  - { idRef: 'varies', name: 'Resource Quantity', usage: U, count: '>1' }
  - { idRef: 'varies', name: 'Resource Quantity Units', usage: U, count: '>1' }
  - { idRef: 'TS', name: 'Start Date/Time', usage: O }
- id: 'AIL'
  name: 'Appointment Information - Location Resource'
  varTag: 'AIL'
  values:
  - { idRef: 'SI', name: 'Set ID - AIL', usage: O }
  - { idRef: 'varies', name: 'Segment Action Code', usage: U, count: '>1' }
  - { idRef: 'PL', name: 'Location Resource ID', usage: O, count: '>1' }
  - { idRef: 'CE', name: 'Location Type-AIL', usage: O }
  - { idRef: 'varies', name: 'Location Group', usage: U, count: '>1' }
  - { idRef: 'TS', name: 'Start Date/Time', usage: O }
- id: 'AIP'
  name: 'Appointment Information - Personnel Resource'
  varTag: 'AIP'
  values:
  - { idRef: 'SI', name: 'Set ID - AIP', usage: O }
  - { idRef: 'varies', name: 'Segment Action Code', usage: U, count: '>1' }
  - { idRef: 'XCN_2', name: 'Personnel Resource ID', usage: O, count: '>1' }
  - { idRef: 'CE_1', name: 'Resource Type', usage: O }
  - { idRef: 'varies', name: 'Resource Group', usage: U, count: '>1' }
  - { idRef: 'TS', name: 'Start Date/Time', usage: O }
...
composites:
- id: 'CE'
  name: 'Coded Element'
  values:
  - { idRef: 'ST', name: 'Identifier', usage: O }
  - { idRef: 'ST', name: 'Text', usage: O }
- id: 'CE_1'
  name: 'Coded Element'
  values:
  - { idRef: 'ST', name: 'Identifier', usage: O }
- id: 'CE_2'
  name: 'Coded Element'
  values:
  - { idRef: 'ST', name: 'Identifier', usage: O }
  - { idRef: 'ST', name: 'Text', usage: O }
  - { idRef: 'ID', name: 'Name of Coding System', usage: O }
...

そのコンポーネントがセグメントの末尾にある場合を除き、セグメントの未使用のコンポーネントをセグメント定義から削除することはできないため、簡素化ツールでは、そのコンポーネントを ​varies​ データ型で置換し、​Usage: U​ (未使用) としてマークします。​varies​ は元のコンポーネントと同じ回数反復されますが、DataWeave に表示されるデータの DataSense ビューには表示されません。

スキーマ簡素化ツールは、メッセージに含まれるデータを確認するときに、コンテキスト内の複合の各出現箇所を処理します。同じ複合でも使用方法が異なると、サンプルに異なる値が含まれる可能性もあります。この場合、複合は異なる識別子で複数回定義されます。

簡素化されたスキーマでは、元のスキーマのセグメント位置が保持されます。 これらの position 値は、セグメントキーの位置プレフィックス (コネクタ設定オプションの 1 つ) を使用しない限り HL7 EDI Connector で使用されることはないため、簡略化されたスキーマから削除できます。

例: HL7 Studio

XML から次のフローを読み込むことができます。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:hl7="http://www.mulesoft.org/schema/mule/hl7"
	xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
  http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/hl7
http://www.mulesoft.org/schema/mule/hl7/current/mule-hl7.xsd
http://www.mulesoft.org/schema/mule/ee/core
http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
	<http:listener-config name="HTTP_Listener_config"
  doc:name="HTTP Listener config" >
		<http:listener-connection host="localhost" port="8081" />
	</http:listener-config>
	<hl7:config name="HL7_Extension_Config" doc:name="HL7 Extension Config" identKeys="true">
		<hl7:schemas >
			<hl7:schema value="/hl7/v2_5_1/ADT_A05.esl" />
			<hl7:schema value="/hl7/v2_5_1/ADT_A01.esl" />
		</hl7:schemas>
	</hl7:config>
	<flow name="hl7testFlow" >
		<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/hl7"/>
		<hl7:read doc:name="Read" config-ref="HL7_Extension_Config"/>
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
{
	Delimiters: payload.Delimiters,
	Id: payload.Id
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<hl7:write doc:name="Write" config-ref="HL7_Extension_Config"/>
	</flow>
</mule>

XML での HL7 ID の設定

独自のメッセージヘッダー (MSH) アプリケーションと施設 ID、および取引パートナーを HL7 EDI Connector 設定で指定できます。

HL7 メッセージを書き込むときに、設定した値を使用して名前空間 ID、ユニバーサル ID、およびユニバーサル ID 種別を提供します。設定した値は受信メッセージ内で検証されます。受信メッセージを制限しない場合、これを空白のままにして、書き込み操作時に送信メッセージの値を設定するか、実際の送信メッセージの値を設定します。書き込み操作時に設定された値は、コネクタ設定を上書きし、メッセージに直接設定された値は、コネクタ設定と書き込み操作時に設定されたすべての値を上書きします。

  • セルフ ID パラメーターは、取引パートナーリレーションの自分側を識別します。

    セルフ ID パラメーター:

    appNamespaceIdSelf="<value>"
    appUniversalIdSelf="<value>"
    appUniversalIdTypeSelf="<value>"
  • パートナー ID パラメーターは、取引パートナーを識別します。

    パートナー ID パラメーター:

    appNamespaceIdPartner="<value>"
    appUniversalIdPartner="<value>"
    appUniversalIdTypePartner="<value>"

HL7 ER7 メッセージの読み取りおよび検証

HL7 メッセージを読み取り方法は、次のとおりです。

  1. HL7 EDI​ のパレットを探し、フローにドラッグします。

  2. プロパティビューから、以前に作成したコネクタ設定を選択して、​Read​ 操作を選択します。

    この操作では、HL7 スキーマで記述された構造にバイトストリームを読み取ります。

    HL7 EDI は、読み取り時にメッセージ構造を検証します。

    • MSH の構文やコンテンツ、およびメッセージのすべてのコンポーネントセグメントをチェックします。

    • 生成された ACK メッセージにより、生成されたデータ構造で提供されるエラーが記録および累積されて、レポートされます。

    • エラーがなくても、致命的でないエラーがあっても、すべてのメッセージは出力メッセージマップの一部として渡されて処理されます。

    • 入力データエラーの読み取りにより、例外がスローされる場合があります。

受信データマップで入力されるエラーデータでは、HL7Error クラスの参照のみ JavaBean が使用されます。これには、次のプロパティがあります。

プロパティ 説明

segment

エラーの原因となったセグメントの入力内の開始値 0 のインデックス。

fatal

エラーの結果として、関連付けられているメッセージが拒否されたことを意味する致命的なエラーのフラグ。

errorType

HL7 標準 (ERR-3 値) で定義されているさまざまなエラー種別の列挙。

errorCode

指定されたエラー種別の HL7 標準で定義されているエラーコード。

errorText

エラーの説明

Read​ 演算子は、​Errors​ キーを使用して省略可能なリストとしてエラーデータを返します。