HL7 EDI コネクタ

HL7 EDI では、リストおよびマップを使用して、HL7 ER7 メッセージと DataWeave 互換表現の相互変換を行うことができます。

HL7 EDI には、以下が含まれます。

  • HL7 ER7 メッセージの読み取り、メッセージの検証、メッセージの書き込み

  • DataSense および DataWeave とのインテグレーション

  • v2.1、v2.2、v2.3.1、v2.3、v2.4、v2.5、v2.5.1、v2.6、2.7、2.7.1、2.8、2.8.1 の HL7 メッセージパック

  • 独自のスキーマを定義したり、HL7 のベーススキーマをカスタマイズしたりする機能

前提条件

このドキュメントは、HL7 の実践的な知識があることを前提としてます。互換性情報については、リリースノートを参照してください。

HL7 EDI コネクタを本番環境で使用するには、Anypoint B2B の MuleSoft ライセンスを購入する必要があります。

HL7 EDI コネクタを使用する

  1. HL7 EDI コネクタをインストールします。

  2. 実装のメッセージを記述するスキーマを作成します。

  3. 実装規則に従って取引パートナーの HL7 EDI を設定します。

  4. Mule フロー内で HL7 EDI を使用します。

このコネクタのインストール方法

  1. Anypoint Studio (Studio) で、Studio タスクバーの Exchange アイコンをクリックします。

  2. Anypoint Exchange で [Login (ログイン)] をクリックします。

  3. HL7 コネクタを検索して [Install (インストール)] をクリックします。

  4. 画面の指示に従ってコネクタをインストールします。

  5. ステップ 3 と 4 を繰り返して、HL7 MLLP コネクタをインストールします。

Studio の更新がある場合、右下隅にメッセージが表示されます。メッセージをクリックすると、更新をインストールできます。

Maven 対応の Mule アプリケーションをコーディングしている場合は、次の XML スニペットを pom.xml ファイルに含めます。

<dependency>
 <groupId>org.mule.module</groupId>
 <artifactId>mule-module-hl7</artifactId>
 <version>3.1.0</version>
</dependency>

<version> タグの内側に、HL7 コネクタのバージョン番号を入力するか、RELEASE (最新リリース) または SNAPSHOT (最新の使用可能なバージョン) という単語を使用します。

スキーマの作成

実装に従ってメッセージを記述するスキーマを作成します。

EDI スキーマ言語

HL7 EDI では、ESL (EDI スキーマ言語) と呼ばれる YAML 形式を使用して EDI スキーマを表します。 基本 ESL では、構造 (HL7 の用語ではメッセージ構造)、グループ、セグメント、複合、要素に関して ER7 メッセージの構造を定義します。HL7 の各バージョン (v2.1、v2.2、v2.3.1、v2.3、v2.4、v2.5、v2.5.1、v2.6、2.7、2.7.1、2.8、2.8.1) の ESL には、2 つの異なる形式があります。

  • 標準 HL7。上記の HL7 バージョンごとに必須または省略可能な状況、データ型、項目の長さ、反復数を使用します。

  • 可変 HL7。すべてのセグメントおよび値の項目は省略可能で、低レベルのデータ型はすべて単純な文字列として処理され、項目の長さと反復数は強制されません。

HL7 スキーマ定義は、各自のデータに合わせてカスタマイズできます。これを行うには、直接スキーマ定義をコピーして編集するか、コンソールツールを使用して、1 つ以上のサンプルドキュメントに基づいて簡略化されたスキーマを生成します。他の EDI 形式と同様に HL7 でもオーバーレイスキーマを使用できますが、HL7 定義は複雑であるため、このオプションはお勧めできません。

また、独自のスキーマをゼロから定義することもできます。 詳細は、「EDI スキーマ言語リファレンス」を参照してください。

YAML では、リストとキー - 値ペアのセットを組み合わせて使用します。必須項目が存在していれば、値の順序は重要ではありません。引用符 (一重引用符または二重引用符) は、数値で構成されるが文字列として解釈する必要がある値を囲む場合に使用されます (そのようにしないと、YAML パーサーでこの値が数値として処理されるため)。インデントは、リストのネストを表すために使用されます。

読みやすいように、ここに記載されている ESL 構造では、同じ定義の一部であるリストの前に単純なキー - 値ペアがすべて定義されています。

スキーマ定義のコピーと編集

HL7 スキーマ定義は、edi-schemas-hl7-1.3.0.jar 内に分散しています。この JAR からメッセージ構造スキーマをコピーし、特定のニーズに合わせて編集します。セグメントレベルの変更のみを行う必要がある場合、メッセージ構造スキーマをコピーすれば済みます。セグメント定義を変更する必要がある場合、同じバージョンの basedefs.esl スキーマもコピーする必要があります (このファイルにはセグメント、複合、要素の定義が含まれているため)。

「EDI スキーマ言語リファレンス」には、すべての EDI コネクタ (HL7 EDI コネクタを含む) で使用される ESL スキーマ構造の概要が記載されています。スキーマ定義の構造の背景知識については、このリファレンスを参照してください。

次に、標準 v2.5.1 ADT_A05 メッセージ構造のサンプル HL7 メッセージ構造スキーマを示します。

form: HL7
version: '2.5.1'
imports: [ '/hl7/v2_5_1/basedefs.esl' ]
id: 'ADT_A05'
name: 'ADT_A05'
data:
- { idRef: 'MSH', position: '01', usage: M }
- { idRef: 'SFT', position: '02', usage: O, count: '>1' }
- { idRef: 'EVN', position: '03', usage: M }
- { idRef: 'PID', position: '04', usage: M }
- { idRef: 'PD1', position: '05', usage: O }
- { idRef: 'ROL', position: '06', usage: O, count: '>1' }
- { idRef: 'NK1', position: '07', usage: O, count: '>1' }
- { idRef: 'PV1', position: '08', usage: M }
- { idRef: 'PV2', position: '09', usage: O }
- { idRef: 'ROL', position: '10', usage: O, count: '>1' }
- { idRef: 'DB1', position: '11', usage: O, count: '>1' }
- { idRef: 'OBX', position: '12', usage: O, count: '>1' }
- { idRef: 'AL1', position: '13', usage: O, count: '>1' }
- { idRef: 'DG1', position: '14', usage: O, count: '>1' }
- { idRef: 'DRG', position: '15', usage: O }
- groupId: 'PROCEDURE'
  count: '>1'
  usage: O
  items:
  - { idRef: 'PR1', position: '17', usage: M }
  - { idRef: 'ROL', position: '18', usage: O, count: '>1' }
- { idRef: 'GT1', position: '20', usage: O, count: '>1' }
- groupId: 'INSURANCE'
  count: '>1'
  usage: O
  items:
  - { idRef: 'IN1', position: '22', usage: M }
  - { idRef: 'IN2', position: '23', usage: O }
  - { idRef: 'IN3', position: '24', usage: O, count: '>1' }
  - { idRef: 'ROL', position: '25', usage: O, count: '>1' }
- { idRef: 'ACC', position: '27', usage: O }
- { idRef: 'UB1', position: '28', usage: O }
- { idRef: 'UB2', position: '29', usage: O }

これには、ADT_A05 メッセージ構造を構成するセグメントのリスト (セグメントグループ PROCEDURE および INSURANCE を含む) が示されています。上記は (可変バージョンではなく) 標準定義であるため、必須セグメント (usage: M で示される) と省略可能セグメント (usage: O で示される) が含まれています。次に、HL7 で使用される使用方法コードのフルセットを示します。

  • C: 条件付き (省略可能と同等)

  • M: 必須

  • O: 省略可能

  • U: 未使用 (読み取り時に警告なしで受け入れるが、読み取りから渡されるデータには存在せず、書き込み時には無視される)

セグメントまたはグループの可能な出現数は count 値で指定されます。このデフォルト値は 1 です。

メッセージ構造から一部のセグメントのみを削除する場合や、一部のセグメント要件を必須から省略可能 (またはその逆) に変更する場合、簡単にスキーマのコピーを変更して、その変更されたバージョンをアプリケーションで使用できます。

また、元のメッセージ構造定義に存在しないセグメントを追加することもできます。この作業を行うには、まずスキーマの既存のすべてのセグメントおよびグループ定義の行から position 値を削除することをお勧めします (そのようにしないと、追加したセグメントに続くすべての要素を再採番しなければならないため)。明示的な位置番号を削除すると、セグメントおよびグループに位置番号が順番に割り当てられます。ほとんどの用途で、これらの番号は HL7 EDI コネクタ 3.1.0 アプリケーションで参照されません。

標準 HL7 セグメントをメッセージ構造に追加するには、適切な場所の idRef 行でそのセグメントを参照します。HL7 はインポート時に参照される basedefs.esl ファイルから定義を取得します。

次の部分的な例は、ADT_A05 メッセージ構造に追加された CON セグメントを示しています。

form: HL7
version: '2.5.1'
imports: [ '/hl7/v2_5_1/basedefs.esl' ]
id: 'ADT_A05'
name: 'ADT_A05'
data:
- { idRef: 'MSH', usage: M }
- { idRef: 'SFT', usage: O, count: '>1' }
- { idRef: 'EVN', usage: M }
- { idRef: 'PID', usage: M }
- { idRef: 'PD1', usage: O }
- { idRef: 'CON', usage: O, count: '>1' }
- { idRef: 'NTE', usage: O }
- { idRef: 'ROL', usage: O, count: '>1' }
- { idRef: 'NK1', usage: O, count: '>1' }
- { idRef: 'PV1', usage: M }
- { idRef: 'PV2', usage: O }
- { idRef: 'CON', usage: O, count: '>1' }
- { idRef: 'ROL', usage: O, count: '>1' }
  ...

メッセージ構造に標準以外のセグメントを定義するには、そのセグメント定義をスキーマに追加します。これは、セグメントのすべてのコンポーネントをリストする必要があるため、セグメント構造を変更するだけの場合よりも複雑になります。この作業を開始する最も簡単な方法は、類似する標準 HL7 セグメントを見つけ、その標準セグメントで使用されている定義を basedefs.esl ファイルからコピーすることです。次に、セグメントキーをメッセージ構造定義の後に追加し、その後に 1 つ以上のセグメント定義を追加します。

メッセージ構造とセグメント定義を結合するスキーマの例については、次のセクションを参照してください。

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

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

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

このスキーマ簡略化ツールは、edi-schemas-hl7-1.3.0-simplify.jar として配布されます。リンクについては、このドキュメントの「関連情報」セクションを参照してください。このツールは、入力としてメッセージ構造スキーマと 1 つ以上のサンプルメッセージ (個別のファイル) を取り、1 つ以上のサンプルメッセージに存在するセグメントおよびコンポーネントのみに削減された出力スキーマを生成します。

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

java -jar edi-schemas-hl7-1.3.0-simplify.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」の反復数は元のコンポーネントと変わりませんが、Data Weave のデータの DataSense ビューには表示されなくなります。

スキーマ簡略化ツールは、メッセージに存在するデータをチェックするときに、コンテキストの各複合を処理するため、同じ複合でも使用方法ごとに値が異なる可能性があります。この場合、複合は異なる識別子で複数回定義されます。上記の例の CE 複合は、これを示しています。

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

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/app のディレクトリにこれらを配置し、${app.home} を使用してその場所を参照する必要があります。たとえば、ADT_A01 スキーマを src/main/app/mypartner/ADT_A01.esl に配置した場合、スキーマの場所は ${app.home}/mypartner/ADT_A01.esl になります。

Mule Runtime は、自動的に src/main/app をチェックし、${app.home} 値が含まれる場所を確認します。

イベントおよびメッセージとメッセージ構造のマップ

複数のメッセージ構造スキーマでコネクタを設定する場合 (個別のスキーマ定義ファイルで設定する場合も、提供されたスキーマと同じように設定する場合も、1 つのファイルで設定する場合も)、HL7 イベントおよびメッセージ種別からメッセージ構造へのマッピングを定義することが必要になる可能性があります。

HL7 では、MSH-09 のコンポーネント値でメッセージ種別を定義します。HL7 EDI コネクタは、これらのコンポーネント値を使用して、受信メッセージの処理に使用される構造スキーマを見つけます。この作業は次のルールに従います。

  • MSH-09-01 Message Type の値が ACK の場合、常に定義済みの ACK スキーマを使用する。

  • そうでない場合、MSH-09-03 Message Structure の値 (ADT_A01 など) が存在していれば、その ID のスキーマ構造を使用する。

  • そうでない場合、設定された [Event and Message to Message Structure Map (イベントおよびメッセージとメッセージ構造のマップ)] を使用して、指定されたイベント種別 (MSH-09-02) とメッセージ種別 (MSH-09-01) の値からメッセージ構造を判断する。

[Event and Message to Message Structure Map (イベントおよびメッセージとメッセージ構造のマップ)] は、省略可能な設定パラメータです。これは、実際のメッセージ構造に対する各イベント種別のマップとサポートされている各メッセージ種別のマップで構成される YAML ファイルである必要があります。このサンプルは次のようになります。

A01: { ADT: ADT_A01, ACK: ACK }
A02: { ADT: ADT_A02, ACK: ACK }
A03: { ADT: ADT_A03, ACK: ACK }
A04: { ADT: ADT_A01, ACK: ACK }
A05: { ADT: ADT_A05, ACK: ACK }
A06: { ADT: ADT_A06, ACK: ACK }
A07: { ADT: ADT_A06, ACK: ACK }
A08: { ADT: ADT_A01, ACK: ACK }

イベント種別およびメッセージ種別からメッセージ構造へのマッピングセットの定義は、HL7 の各バージョンで異なります。デフォルトのマッピングは、event-message.yaml という名前のファイルで、標準 HL7 スキーマ定義と同じ jar で提供されます。これらのマッピング定義には、実際のメッセージ構造スキーマと同じパス種別を使用します。

Studio ビジュアルエディタを使用して HL7 EDI を設定する

コネクタをインストールしてスキーマのカスタマイズ (ある場合) を設定したら、コネクタの使用を開始できます。実装規則ごとにの個別の設定を作成します。

  1. キャンバスの下部にある [Global Elements (グローバル要素)] タブをクリックし、[Create (作成)] をクリックします。

  2. [Choose Global Type (グローバル種別の選択)] ウィザードで、検索条件を使用して [HL7 EDI: Configuration (HL7 EDI: 設定)] を見つけて選択し、[OK] をクリックします。

  3. コネクタリファレンスに従ってパラメータを設定します。

  4. [OK] をクリックして、グローバルコネクタ設定を保存します。

  5. Studio の [Message Flow (メッセージフロー)] タブに戻ります。

General Options (一般オプション)

[general options (一般オプション)] では、HL7 メッセージの読み取りと書き込みの両方に適用される設定を定義できます。

  • HL7 character encoding (HL7 文字エンコード) - メッセージの書き込みでは常に使用され、メッセージの読み取りでは MSH-18 (文字セット) で別のエンコードが指定されていない場合に使用されます。

  • Disable numeric prefixes for data keys (データキーの数値プレフィックスを無効化) - このオプションは、デフォルトで true (セグメントデータの数値プレフィックスを無効化する) になっています。HL7 EDI コネクタ 3.0.0 で定義されたマッピングとの互換性を確保する場合にのみこのオプションを無効にします。

  • Manually create or edit the list of schemas (スキーマのリストを手動で作成または編集)

Studio ビジュアルエディタでの HL7 ID の設定

HL7 EDI コネクタ設定では、自分と取引パートナーのメッセージヘッダー (MSH) のアプリケーションや機能の ID を設定できます。

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

Studio では、これらの値は [Global Element Properties (グローバル要素のプロパティ)] で設定されます。

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

    自分の ID 設定:

    Mule Application Namespace ID (MSH-3-1/MSH-5-1)
    Mule Application Universal ID (MSH-3-2/MSH-5-2)
    Mule Application Universal ID Type (MSH-3-3/MSH-5-3)
  • パートナーの ID パラメータは、取引パートナーを識別します。

    パートナーの ID 設定:

    Partner Application Namespace ID (MSH-3-1/MSH-5-1}
    Partner Application Universal ID (MSH-3-2/MSH-5-2}
    Partner Application Universal ID Type (MSH-3-3/MSH-5-3)

パーサーオプションの設定

必要に応じて、次のオプションを設定できます。

  • Validate HL7 Message Version (HL7 メッセージバージョンを検証)

  • Event and message to message structure map path (イベントおよびメッセージとメッセージ構造のマップのパス) - 複数のメッセージ構造を使用する場合は必須。ただし、MSH-09-03 メッセージ構造の値が常に受信メッセージに存在する場合はこの限りではありません。

  • Required processing ID (処理 ID を要求) - 受信メッセージで必要な処理 ID (本番に対応する P など) を指定します。

  • Pattern for generic extension segment names (汎用拡張セグメント名のパターン) - 項目値のマップとして拡張セグメントを処理できるようにします。

  • Fail when value length outside allowed range (値の長さが許容範囲外の場合に失敗)

  • Fail when invalid character in value (値の無効な文字がある場合に失敗)

  • Fail when too many repeats of value (値の反復が多すぎる場合に失敗)

  • Fail when unknown segment in message (メッセージに不明なセグメントがある場合に失敗)

  • Fail when segment out of order in message set (メッセージセットのセグメントが順不同になっている場合に失敗)

  • Fail when unused segment included in message set (メッセージセットに未使用セグメントが含まれている場合に失敗)

  • Fail when too many repeats of segment (セグメントの反復が多すぎる場合に失敗)

区切り文字の設定

デフォルトを変更する場合、メッセージを書き込むときに使用される区切り文字を設定できます。

Studio XML エディタまたは Standalone を使用して HL7 EDI を設定する

コネクタをインストールしてスキーマのカスタマイズ (ある場合) を設定したら、コネクタの使用を開始できます。実装規則ごとにの個別の設定を作成します。

  1. 設定ファイルに EDI 名前空間が含まれていることを確認します。

    <mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking"
      xmlns:tcp="http://www.mulesoft.org/schema/mule/tcp"
      xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw"
      xmlns:http="http://www.mulesoft.org/schema/mule/http"
      xmlns:hl7-edi="http://www.mulesoft.org/schema/mule/hl7-edi"
      xmlns="http://www.mulesoft.org/schema/mule/core"
      xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
      xmlns:spring="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.mulesoft.org/schema/mule/tcp
        http://www.mulesoft.org/schema/mule/tcp/current/mule-tcp.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-current.xsd
        http://www.mulesoft.org/schema/mule/core
        http://www.mulesoft.org/schema/mule/core/current/mule.xsd
        http://www.mulesoft.org/schema/mule/hl7-edi
        http://www.mulesoft.org/schema/mule/hl7-edi/current/mule-hl7-edi.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/ee/dw
        http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
        http://www.mulesoft.org/schema/mule/ee/tracking
        http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
  2. 次のグローバル設定コードを使用して、フローの外部 (上部) でグローバル設定を作成し、アプリケーションで HL7 EDI を設定します。

      <hl7-edi:config name="HL7_EDI__Configuration" identKeys="true" doc:name="HL7 EDI: Configuration">
        <hl7-edi:schemas>
          <hl7-edi:schema>hl7/v2_6/ADT_A01.esl</hl7-edi:schema>
        </hl7-edi:schemas>
      </hl7-edi:config>

XML での HL7 IDの設定

HL7 EDI コネクタ設定では、自分と取引パートナーのメッセージヘッダー (MSH) のアプリケーションや機能の ID を設定できます。

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

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

    自分の ID パラメータ:

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

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

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

パーサーオプションの設定

必要に応じて、次のオプションを設定できます。

XML 値 Studio オプション

validateHL7Version="true"

Validate HL7 Message Version (HL7 メッセージバージョンを検証)

eventMessageMap="/hl7/v2_5_1/event-message.yaml"

Event and message to message structure map path (イベントおよびメッセージとメッセージ構造のマップのパス) - 複数のメッセージ構造を使用する場合は必須。ただし、MSH-09-03 メッセージ構造の値が常に受信メッセージに存在する場合はこの限りではありません。

processingId="PRODUCTION"

Required processing ID (処理 ID を要求) - 受信メッセージで必要な処理 ID (本番に対応する P など) を指定します。

genericExtensionPattern="Z.."

Java regular pattern for generic extension segment names (汎用拡張セグメント名の規則的な Java パターン) - 項目値のマップとして拡張セグメントを処理できるようにします。

valueLengthErrorFail="true"

Fail when the length of a value falls outside the allowed range (値の長さが許容範囲外の場合に失敗)

invalidCharacterInValueFail="true"

Fail when a value contains an invalid character (値に無効な文字が含まれている場合に失敗)

wrongValuesRepeatsFail="true"

Fail when a value is repeated too many times (値の反復が多すぎる場合に失敗)

unknownSegmentFail="true"

Fail when an unknown segment is in a message (メッセージに不明なセグメントがある場合に失敗)

segmentOutOfOrderFail="true"

Fail when a segment is out of order in message set (メッセージセットのセグメントが順不同になっている場合に失敗)

unusedSegmentPresentFail="true"

Fail when an unused segment is included in a message set (メッセージセットに未使用セグメントが含まれている場合に失敗)

wrongSegmentsRepeatsFail="true"

Fail when a segment is repeated too many times (セグメントの反復が多すぎる場合に失敗)

スキーマの場所の設定

スキーマの場所は、Studio XML ビューでのみ設定できます。

Studio で、[Configuration XML (設定 XML)] をクリックして XML ビューに切り替え、目的のすべてのスキーマのリストが含まれるように、ドキュメント種別ごとに <http://edischema[edi:schema]> 要素を追加して HL7 EDI 設定を変更します。

  <hl7-edi:config name="HL7_EDI__Configuration" identKeys="true" doc:name="HL7 EDI: Configuration">
    <hl7-edi:schemas>
      <hl7-edi:schema>hl7/v2_6/ADT_A01.esl</hl7-edi:schema>
    </hl7-edi:schemas>
  </hl7-edi:config>

HL7 EDI のグローバル要素を作成したら、メッセージ構造、操作、肯定応答を設定します。

Mule フロー内での HL7 EDI の使用

メッセージの読み取りと書き込み、および肯定応答の送信を行うために、フローで HL7 EDI コネクタを使用します。

HL7 メッセージ構造の理解

HL7 コネクタは、正規の ER7 メッセージ構造から HL7 ドキュメントを読み込んだり、正規の ER7 メッセージ構造に HL7 ドキュメントを書き込んだりします。この構造は、Java マップおよびリストの階層で表され、DataWeave やコードを使用して操作できます。トランザクションごとに、スキーマで定義される独自の構造があります。

HL7 メッセージには、次のキーがあります。

キー名 説明

ACK (参照のみ)

入力データに応じて生成される ACK メッセージ。MSA-1 肯定応答コード値は、パーサー設定に基づいています。肯定応答を送信するには、以下の「肯定応答の送信」セクションを参照してください。

Data (読み取りまたは書き込み)

実際のデータにリンクしているメッセージ構造 ID 値に一致するキーを持つメッセージデータのラッパー。これにより、さまざまなメッセージをメタデータに含めて、DataWeave マッピングで処理できます。

Delimiters (参照のみ)

メッセージで使用される区切り文字。文字列の文字は、(コンポーネントの区切り文字)、(反復の区切り文字)、(エスケープ文字)、(サブコンポーネントの区切り文字) の順序で位置に基づいて解釈されます。

Errors (参照のみ)

入力メッセージに関連付けられているエラーのリスト。以下の「HL7 ER7 メッセージの読み取りおよび検証」セクションの HL7Error 構造の説明を参照してください。

Id

メッセージ構造 ID。

MSH (参照のみ)

受信する MSH セグメントデータへのリンク。

Name (参照のみ)

メッセージ構造名。

個々のメッセージには、メッセージのセグメントに一致するキーを持つ独自のマップがあります。たとえば、ACK メッセージでは、メッセージ構造 ID ACK が使用され、送受信する ACK メッセージのデータは Data マップの ACK 値として表されます。ACK メッセージ自体はマップです。メッセージのセグメントおよびグループは、位置キーを持つマップ (シングルトンインスタンスの場合) またはマップのリスト (反復インスタンスの場合) として表されます。

スキーマ定義に含まれないデータで汎用処理が使用される特殊なケースは 2 つあります。1 つ目は、HL7 値が varies 型のケースです。これらの値は、コンポーネントとサブコンポーネントの任意の構造で構成されたり、反復されたりする可能性があるため、パーサーは各 varies 型のマップ表現のリストを使用します。各マップのキーは、値の解析時に生成されます。このキーは、各ネストレベルで使用される 2 桁の数値を伴う標準 HL7 値の名前と一致します。 そのため、たとえば、OBX-05 検査値の単純なテキスト値では、マップでキー OBX-05 が使用されます。2 つのコンポーネントが存在する場合は、キー OBX-05-01 と OBX-05-02 が使用されます。

パーサーオプションで設定されたパターンに一致するタグを持つ拡張セグメントでは、「varies」値と同じような構造が使用されますが、セグメント全体の 1 つのマップ内のみで使用されます。反復値は、コードの解析および書き込みを行う拡張セグメントではサポートされていません。

拡張セグメントデータが含まれるマップは、キー ExtensionSegs を使用してリストの基本メッセージマップに追加されます。拡張セグメントのマップには、実際の拡張セグメントデータの他に 2 つのキーが含まれます。

キー 説明

Ident

拡張セグメント識別子 (タグ)。

Position

メッセージ構造内のセグメントの位置 (2 桁の文字列)。これは、スキーマで定義するときの直前の定義済みセグメントの位置と同じになります。ZVN 拡張セグメントが ADT_A01 メッセージ構造の EVN セグメントの後に使用される場合、ZVN の位置は 03 になります。

ネストされたグループで拡張セグメントが使用されている場合、それらのセグメントを格納するリストは、そのグループを表すマップに含まれます。拡張セグメントは、パーサーによって作成されたリストの位置で並び替えられますが、書き込み時の位置でも並び替えられます。

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

HL7 メッセージを読み取るには、パレットで HL7 EDI を検索し、HL7 EDI 構成要素をフローにドラッグします。次に、プロパティビューに移動し、以前に作成したコネクタ設定を選択して [Read] 操作を選択します。この操作は、HL7 スキーマで記述された構造にバイトストリームを読み取ります。

[Read] 操作

HL7 EDI は、読み取り時にメッセージ構造を検証します。メッセージの検証には、MSH の構文やコンテンツ、およびメッセージのすべてのコンポーネントセグメントのチェックが含まれます。通常、エラーは記録および累積されて、生成された ACK メッセージでレポートされます。このメッセージは、生成されたデータ構造で提供されます。エラーがなくても、致命的でないエラーがあっても、すべてのメッセージは出力メッセージマップの一部として渡されて処理されます。入力データを読み取るときにエラーが発生すると、例外がスローされます。

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

プロパティ 説明

segment

エラーの原因となったセグメントの入力内のゼロベースのインデックス。

fatal

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

errorType

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

errorCode

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

errorText

エラーのテキストによる説明。

エラーデータは、Errors キーを使用して省略可能なリストとして read 操作で返されます。

HL7 EDI メッセージの書き込み

送信メッセージを書き込むには、以前に定義した構造に従って送信 HL7 EDI メッセージを作成します。

たとえば、次のサンプルでは、ファイルに書き込まれる送信 HL7 メッセージを作成します。

  ...
<hl7-edi:write config-ref="HealthCare" doc:name="Send ACK"/>
<file:outbound-endpoint responseTimeout="10000" doc:name="File" path="output" outputPattern="ack.edi"/>

肯定応答の送信

ACK (肯定応答) メッセージは、メッセージをアプリケーションで受信したことをメッセージ送信者に肯定応答できる HL7 メッセージです。ACK メッセージは、read 操作時に生成されたデータを出力メッセージとして 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 スキーマが使用されます。

デフォルトの ACK メッセージ構造

HL7 DataWeave の例

次の例は、HL7 および DataWeave を使用して、HTTP 経由で受信したメッセージを読み取ったり、応答として肯定応答を送り返したりする方法を示しています。

肯定応答の読み取りおよび送信フロー
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking"
  xmlns:tcp="http://www.mulesoft.org/schema/mule/tcp"
  xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw"
  xmlns:http="http://www.mulesoft.org/schema/mule/http"
  xmlns:hl7-edi="http://www.mulesoft.org/schema/mule/hl7-edi"
  xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
  xmlns:spring="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.mulesoft.org/schema/mule/tcp
    http://www.mulesoft.org/schema/mule/tcp/current/mule-tcp.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-current.xsd
    http://www.mulesoft.org/schema/mule/core
    http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/hl7-edi
    http://www.mulesoft.org/schema/mule/hl7-edi/current/mule-hl7-edi.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/ee/dw
    http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
    http://www.mulesoft.org/schema/mule/ee/tracking
    http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
  <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8080" doc:name="HTTP Listener Configuration"/>
  <hl7-edi:config name="HL7_EDI__Configuration" identKeys="true" doc:name="HL7 EDI: Configuration">
    <hl7-edi:schemas>
      <hl7-edi:schema>hl7/v2_6/ADT_A01.esl</hl7-edi:schema>
    </hl7-edi:schemas>
  </hl7-edi:config>
  <flow name="Acknowledgment">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/ack" allowedMethods="POST" doc:name="HTTP"/>
    <hl7-edi:read config-ref="HL7_EDI__Configuration" doc:name="HL7 EDI"/>
    <dw:transform-message doc:name="Transform 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="HL7 EDI"/>
    <logger message="#[payload]" level="INFO" doc:name="Logger"/>
  </flow>
</mule>

以下の例は、DataWeave で受信メッセージから特定の値を抽出する方法を示しています (多くの未使用項目を除外する、メッセージの簡略化されたスキーマを使用)。

受信メッセージからの値の抽出
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:jersey="http://www.mulesoft.org/schema/mule/jersey"
  xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata"
  xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw"
  xmlns:http="http://www.mulesoft.org/schema/mule/http"
  xmlns:hl7-edi="http://www.mulesoft.org/schema/mule/hl7-edi"
  xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
  xmlns:spring="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-current.xsd
    http://www.mulesoft.org/schema/mule/core
    http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/hl7-edi
    http://www.mulesoft.org/schema/mule/hl7-edi/current/mule-hl7-edi.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/ee/dw
    http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
    http://www.mulesoft.org/schema/mule/jersey
    http://www.mulesoft.org/schema/mule/jersey/current/mule-jersey.xsd">
    <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
    <hl7-edi:config name="HL7_EDI_Configuration" doc:name="HL7 EDI: Configuration" identKeys="true">
        <hl7-edi:schemas>
            <hl7-edi:schema>schemas/SIU_S12-simplified.esl</hl7-edi:schema>
        </hl7-edi:schemas>
    </hl7-edi:config>
    <flow name="hl7-demoFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/json" doc:name="HTTP"/>
        <hl7-edi:read config-ref="HL7_EDI_Configuration" doc:name="HL7 EDI"/>
        <dw:transform-message doc:name="Transform Message" metadata:id="6f9793a8-8007-4b02-bdbc-802d64ce5d83">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
  id: payload.Data.SIU_S12.PATIENT[0].PID.PID-02-01,
  firstName: payload.Data.SIU_S12.PATIENT[0].PID.PID-05[0].PID-05-02,
  lastName: payload.Data.SIU_S12.PATIENT[0].PID.PID-05[0].PID-05-01-01
}]]></dw:set-payload>
        </dw:transform-message>
    </flow>
</mule>

HL7 2.x.x から 3.0.0 へのアップグレード

HL7 v3.0 コネクタでは、リストコンポーネントに続くセクションがコネクタから削除されています。

HL7 メッセージコンポーネント

メッセージを作成するには、DataWeave で HL7 メッセージを生成して、コネクタの write 操作を呼び出します。

次のフローは、MSH|^~\&|TestSendingSystem|MCM||^12399| メッセージを出力します。

  <flow name="CreateMessage">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/create" doc:name="HTTP"/>
    <dw:transform-message doc:name="Transform Message">
      <dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
{
  Delimiters: "|^~\&",
  Id: "ADT_A02",
  Data: {
    ADT_A02: {
      "MSH": {
        MSH-03-01: "TestSendingSystem",
        MSH-04-01: "SendingApp",
        MSH-05-01: "SendingFacility",
        MSH-07-01: now,
        MSH-09-01: "ADT",
        MSH-09-02: "A01",
        MSH-09-03: "ADT_A01"
      }
    }
  }
}
]]></dw:set-payload>
    </dw:transform-message>
    <hl7-edi:write config-ref="HL7_EDI__Configuration" messageStructure="InMessage" doc:name="HL7 EDI"/>
  </flow>

HL7 ACK

コネクタには、HL7 ACK 機能が含まれています。ACK メッセージは、コネクタが read 操作を実行するときに自動的に生成されます。このドキュメントの「肯定応答の送信」セクションを参照してください。

HL7 Append Segment

Append Segment コンポーネントを置き換えるには、DataWeave を使用して read 操作後に取得される HL7 メッセージ構造のデータオブジェクトを操作します。

次の例では、AL1|2|10001|^Penicillin||Produces hives を受信メッセージに追加します。

MSH|^~\&|ADT1|MCM|LABADT|MCM|19900607|SECURITY|ADT^A01|MSG00001|P|2.3.1|
EVN|A01|19900607
PID|1||PATID1234^5^M11^ADT1^MR^MCM~123456789^^^USSSA^SS||JONES^WILLIAM^A^III||19610615|M||C|1200 N ELM STREET^^GREENSBORO^NC^27401-1020|GL|(91-9)379-1212|(919)271-3434||S||PATID12345001^2^M10^ADT1^AN^A|123456789|987654^NC|
NK1|1|||||||
PV1|1|I|2000^2012^01||||004777^LEBAUER^SIDNEY^J.|||SUR||||ADM|A0|
AL1|1||^Cat dander|Respiratory distress
  <flow name="AppendSegment">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/append" allowedMethods="POST" doc:name="HTTP"/>
    <hl7-edi:read config-ref="HL7_EDI__Configuration" doc:name="HL7 EDI"/>
    <dw:transform-message doc:name="Transform Message">
      <dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
{
Delimiters: payload.Delimiters,
Id: payload.Id,
Name: payload.Name,
ACK: payload.ACK,
MSH: payload.MSH,
Errors: payload.Errors map ((error , indexOfError) -> {
errorCode: error.errorCode,
errorText: error.errorText,
errorType: error.errorType,
fatal: error.fatal,
segment: error.segment
}),
Data: {
ADT_A01: {
  MSH: payload.Data.ADT_A01.MSH,
  EVN: payload.Data.ADT_A01.EVN,
  PID: payload.Data.ADT_A01.PID,
  NK1: payload.Data.ADT_A01.NK1,
  PV1: payload.Data.ADT_A01.PV1,
  AL1: (payload.Data.ADT_A01.AL1 +
    {
      AL1-01: 2,
      AL1-02-01:"10001",
      AL1-03-02:"Penicillin",
      AL1-05:["Produces hives"]
    })
}
}
}]]></dw:set-payload>
    </dw:transform-message>
    <hl7-edi:write config-ref="HL7_EDI__Configuration" messageStructure="InMessage" doc:name="Write_HL7"/>
    <logger message="#[payload]" level="INFO" doc:name="Logger"/>
  </flow>

HL7 Delete Segment

HL7 2.0.x Delete Segment コンポーネントを使用すると、ユーザはセグメント ID を指定してセグメントを削除できます。deletion 操作には、完全なセグメントが含まれることもあれば、最後のセグメントの反復のみが含まれることもあります。

次のコードブロックは、DataWeave でこのコンポーネントを置き換える方法や、フローがこの受信メッセージでどのように動作するのかを示しています。

MSH|^~\&|ADT1|MCM|LABADT|MCM|19900607|SECURITY|ADT^A01|MSG00001|P|2.3.1|
EVN|A01|19900607
PID|1||PATID1234^5^M11^ADT1^MR^MCM~123456789^^^USSSA^SS||JONES^WILLIAM^A^III||19610615|M||C|1200 N ELM STREET^^GREENSBORO^NC^27401-1020|GL|(91-9)379-1212|(919)271-3434||S||PATID12345001^2^M10^ADT1^AN^A|123456789|987654^NC|
NK1|1|||||||
PV1|1|I|2000^2012^01||||004777^LEBAUER^SIDNEY^J.|||SUR||||ADM|A0|
AL1|1||^Cat dander|Respiratory distress
AL1|2||^Penicillin||Produces hives|
  <flow name="RemoveSegment">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/removeSegment" allowedMethods="POST" doc:name="HTTP"/>
    <hl7-edi:read config-ref="HL7_EDI__Configuration" doc:name="HL7 EDI"/>
    <dw:transform-message doc:name="Transform Message">
      <dw:set-payload><![CDATA[%dw 1.0
%output application/java
%var emptySegment = []
---
{
  Delimiters: payload.Delimiters,
  Id: payload.Id,
  Name: payload.Name,
  ACK: payload.ACK,
  MSH: payload.MSH,
  Errors: payload.Errors map ((error , indexOfError) -> {
    errorCode: error.errorCode,
    errorText: error.errorText,
    errorType: error.errorType,
    fatal: error.fatal,
    segment: error.segment
  }),
  Data: {
    ADT_A01: {
      MSH: payload.Data.ADT_A01.MSH,
      EVN: payload.Data.ADT_A01.EVN,
      PID: payload.Data.ADT_A01.PID,
      NK1: payload.Data.ADT_A01.NK1,
      PV1: payload.Data.ADT_A01.PV1,
      AL1: emptySegment
    }
  }
}]]></dw:set-payload>
    </dw:transform-message>
    <hl7-edi:write config-ref="HL7_EDI__Configuration" messageStructure="InMessage" doc:name="_HL7 EDI"/>
    <logger message="#[payload]" level="INFO" doc:name="Logger"/>
  </flow>

HL7 のセグメント削除

  <flow name="RemoveRepetition">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/removeRepetition" allowedMethods="POST" doc:name="HTTP"/>
    <hl7-edi:read config-ref="HL7_EDI__Configuration" doc:name="HL7 EDI"/>
    <dw:transform-message doc:name="Transform Message">
      <dw:set-payload><![CDATA[%dw 1.0
%output application/java
%var start = 0
%var end = (sizeOf payload.Data.ADT_A01.AL1) -2
%var updatedSegment = payload.Data.ADT_A01.AL1[start[0] .. end[0]]
---
{
  Delimiters: payload.Delimiters,
  Id: payload.Id,
  Name: payload.Name,
  ACK: payload.ACK,
  MSH: payload.MSH,
  Errors: payload.Errors map ((error , indexOfError) -> {
    errorCode: error.errorCode,
    errorText: error.errorText,
    errorType: error.errorType,
    fatal: error.fatal,
    segment: error.segment
  }),
  Data: {
    ADT_A01: {
      MSH: payload.Data.ADT_A01.MSH,
      EVN: payload.Data.ADT_A01.EVN,
      PID: payload.Data.ADT_A01.PID,
      NK1: payload.Data.ADT_A01.NK1,
      PV1: payload.Data.ADT_A01.PV1,
      AL1: updatedSegment
    }
  }
}]]></dw:set-payload>
    </dw:transform-message>
    <hl7-edi:write config-ref="HL7_EDI__Configuration" messageStructure="InMessage" doc:name="Copy_of_HL7 EDI"/>
    <logger message="#[payload]" level="INFO" doc:name="Logger"/>
  </flow>

HL7 の例外戦略

例外戦略の置き換えはユーザの裁量で決まります。新しいコネクタでは HL7 メッセージ構造にエラーが含まれます。

HL7 EDI 設定のパーサーオプションで定義された設定により、どのような場合に生成された ACK でメッセージの拒否がレポートされるのかが決まります。

HL7 Profile Validator Filter

Validator Filter コンポーネントは、コネクタを使用してメッセージを読み取り、HL7 メッセージ構造のエラーリストが空であることを確認して置き換えることができます。

HL7 エンコードトランスフォーマ

この機能は、コネクタでサポートされなくなりました。エンコード変換は、DataWeave で実行できます。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub