HL7 の重要なシナリオ
この章では、構成設定の選択に影響するいくつかの重要な HL7 シナリオについて説明します。
HL7 確認応答 (ACK) モード
HL7 確認応答 (ACK) メッセージは、宛先が HL7 メッセージを受け取ったという通知です。否定 ACK (NACK) メッセージは、宛先が送信を認識しているものの、メッセージを受け取らなかったという通知です。
次の図は、ACK メッセージと NACK メッセージの送信に関する HL7 メッセージの規則にプロダクションが準拠する仕組みを示しています。
コミット ACK — ビジネス・サービスは、ソース・アプリケーションから受け取ったデータを保存するトランザクションをコミットするとすぐに、そのソースに ACK を返します。何らかの理由でこれが不可能な場合は、NACK を送信します。ビジネス・オペレーションは、ターゲット・アプリケーションからの ACK または NACK を解釈するように設定できますが、それらのメッセージをソースに返すことはありません。
アプリケーション ACK — ビジネス・サービスは、ビジネス・オペレーションを経由してターゲット・アプリケーションから返されるまで、ACK または NACK をソース・アプリケーションに送信しません。ビジネス・サービスは、ビジネス・オペレーションから受け取った ACK または NACK を返します。
* コミットおよびアプリケーション ACK — 3 番目のオプションは、MSH によって決定するように [Ackモード] を設定し、ACK を必要とする値が MSH セグメントのフィールド 15 と 16 の両方に含まれているというまれな状況でのみ発生します。このような状況は回避することをお勧めします。
これらの確認応答規則を使用して、次の 3 種類の主な ACK メッセージ・コンテンツのいずれかを送信します。
ビジネス・サービスの次の構成設定を使用して、ACK 処理を制御します。
ビジネス・オペレーションの次の構成設定を使用して、ACK 処理を制御します。
HL7 二重確認応答シーケンス
一部のシステムでは、インターシステムズ製品からの二重確認応答シーケンスが必要です。1 バイトの即時 ACK の後に、完全な ACK メッセージを送信する必要があります。このようなシステムの 1 つに、二重チャンネルの iSoft iCM アプリケーションがあります。二重確認応答シーケンスを必要とする iCM のようなクライアント・システムが構成に含まれている場合は、必要な ACK をインターシステムズ製品が提供できるようにビジネス・サービスとビジネス・オペレーションのペアを設定する必要があります。
インターシステムズ製品には、TCP と HTTP を介した二重確認応答シーケンスを定義するために使用できる特殊なビジネス・ホスト・クラスが用意されています。
受信メッセージの二重 ACK シーケンス
インターシステムズ製品に入ってくるメッセージの場合、二重確認応答シーケンスは次の図のように動作します。
-
クライアント・アプリケーションがインターシステムズ製品にメッセージを送信します。
-
受信 ACK ビジネス・サービスが 1 バイトの即時 ACK をクライアント・アプリケーションに送信します。
-
受信 ACK ビジネス・サービスがルーティング・プロセスにメッセージを送信します。
-
ルーティング・プロセスがビジネス・オペレーションを介してターゲットにメッセージをルーティングします。
-
ターゲット・アプリケーションがビジネス・オペレーションに ACK メッセージを返します。
-
プロダクションが受信 ACK ビジネス・サービスに ACK を中継します。
-
ペアになっているビジネス・オペレーションにビジネス・サービスが ACK を中継します。
-
ビジネス・オペレーションがクライアント・アプリケーションに ACK を中継します。
-
クライアント・アプリケーションが 1 バイトの ACK を返すことにより、ACK メッセージの受信を通知します。
送信メッセージの二重 ACK シーケンス
インターシステムズ製品から出ていくメッセージの場合、二重確認応答シーケンスは次の図のように動作します。
-
ビジネス・サービスがルーティング・プロセスにメッセージを送信します。
-
ルーティング・プロセスが送信 ACK ビジネス・オペレーションにメッセージをルーティングします。
-
送信 ACK ビジネス・オペレーションがターゲット・アプリケーションにメッセージを中継します。
-
ターゲット・アプリケーションが 1 バイトの ACK を返すことにより、メッセージの受信を通知します。
-
ターゲット・アプリケーションが受信 ACK ビジネス・サービスに ACK メッセージを返します。
-
ビジネス・サービスが 1 バイトの即時 ACK をターゲット・アプリケーションに送信します。
-
ペアになっているビジネス・オペレーションにビジネス・サービスが ACK を中継します。
-
ビジネス・オペレーションがビジネス・サービスに ACK メッセージを中継して返します。
-
ビジネス・サービスが元のメッセージに対する ACK を受け取ります。
HL7 バッチ・メッセージ
インターシステムズ製品は、HL7 の入れ子になった子ドキュメント (バッチ形式) をサポートしています。子ドキュメントはそれぞれ、それ自体で 1 つの仮想ドキュメントです。ここでは、2 つの設定によって制御される詳細について説明します。以下のセクションで構成されます。
受信バッチ・ドキュメントの処理
HL7 ビジネス・サービスの [バッチハンドリング] 構成設定では、受信バッチ・ドキュメントを処理する方法を指定できます。オプションは以下のとおりです。
-
[バッチ全体] — 子ドキュメントを個別に処理しません。累積してバッチ全体を 1 つの複合ドキュメントとして送信します。
-
[1 つのセッションのバッチ] — バッチ内のすべての子ドキュメントを 1 つのセッションでまとめて転送します。セッションには、バッチ・ヘッダとバッチ・トレーラを表すオブジェクトが含まれます。 [バッチハンドリング] の値が指定されていない場合、[1 つのセッションのバッチ] がデフォルトです。
-
[複数のセッションのバッチ] — バッチ内の各子ドキュメントを、一意のセッション ID を持つ独自のセッションで転送します。
-
[個別] — バッチ内の各子ドキュメントを独自のセッションで転送します。バッチ・ヘッダとバッチ・トレーラを表すオブジェクトは転送しません。
受信したメッセージに応答する際のデフォルトの動作は、各子ドキュメントの ACK メッセージを含むバッチ・ドキュメントとして確認応答を送信者に送信するというものです。この動作は、ほとんどの状況で有効です。ただし、HL7 ビジネス・サービスには、構成設定として公開されていない NoBatchReply というプロパティもあります。そのデフォルト値は 0 (偽) で、デフォルトの動作になります。次の文を含むようにビジネス・サービスの OnInit() メソッドを編集するとします。
Set ..NoBatchReply = 1
この場合、バッチ応答は禁止されます。各メッセージは、ラップされていない別個の ACK を取得します。また、次のコードを挿入することにより、サブクラスでプロパティの定義をオーバーライドして、値を設定することもできます。
Property NoBatchReply As %Boolean [ InitialExpression = 1 ];
バッチ・メッセージの送信
送信側では、HL7 ファイルおよび FTP ビジネス・オペレーションに [親セグメント自動バッチ] 構成設定があります。[親セグメント自動バッチ] が偽 (デフォルト) の場合、ビジネス・オペレーションは子ドキュメントを出力しますが、バッチ・ヘッダおよびトレーラは出力しません。[親セグメント自動バッチ] が真の場合、バッチの親を持つメッセージを出力する際、ビジネス・オペレーションはバッチ・ヘッダ、子ドキュメントの順に出力し、最後のバッチ・ヘッダ・メッセージまたはファイル名の変更によりトリガされると、バッチ・トレーラを出力します。
バッチ・モード
[バッチハンドリング] と [親セグメント自動バッチ] の組み合わせにより、HL7 バッチ・ドキュメント向けのオペレーションの以下のモードが有効になります。
[バッチハンドリング] |
[親セグメント自動バッチ] |
結果 |
[バッチ全体] |
(いずれか) |
ビジネス・サービスは親ドキュメントのみを送信します。子ドキュメントはすべて参照されますが、個々に送信されることはありません。オペレーションでは、親ドキュメントを受信すると、一度にバッチ全体を出力します。 |
[1 つのセッション]
または
[複数のセッション] |
真 |
サービスでは、各子ドキュメントを受信および解析すると、これを送信します。すべての子ドキュメントが送信されると親ドキュメントを送信します。ビジネス・オペレーションは、最初に子ドキュメントを受信すると親ヘッダを出力し、親ドキュメント・オブジェクトを受信すると、トレーラで終了します。トレーラ・セグメントには自動的に正しい子カウント値が含まれます。 |
[1 つのセッション]
または
[複数のセッション] |
偽 |
これにより重複した出力が得られます。ビジネス・オペレーションは、各子ドキュメントを個々に送信した後、同じ子ドキュメントを含む親ドキュメントを送信するので、子ドキュメントが 2 回送信されます。 |
[個別] |
偽 |
ビジネス・サービスでは、バッチ内の各子ドキュメントを個別のセッションで転送します。バッチ・ヘッダおよびトレーラを表すオブジェクトは転送されません。送信側のビジネス・オペレーションの動作も同じです。 |
カスタム送信バッチ処理
出力側でバッチ・ドキュメントを特別に処理できるように、ルーティング・プロセスにカスタム・コードを追加することもできます。次の 2 つの方法があります。
-
ルーティング・プロセス・コードで新しい親ドキュメントと子ドキュメントを作成し、それらをリンクした後、それぞれの子をビジネス・オペレーションに送信します。ビジネス・オペレーションの [親セグメント自動バッチ] が真に設定されている必要があります。ビジネス・オペレーションは、最初に子ドキュメントを受信すると親ヘッダを出力し、親ドキュメント・オブジェクトを受信すると、トレーラで終了します。トレーラ・セグメントには自動的に正しい子カウント値が含まれます。
-
ルーティング・プロセス・コードで新しい親ドキュメントと子ドキュメントを作成しリンクしますが、親オブジェクトのみをビジネス・オペレーション経由で送信します。