HL7 の重要なシナリオ
この章では、構成設定の選択に影響する HL7 の主なシナリオについて説明します。トピックは以下のとおりです。
HL7 確認応答 (ACK) モード
HL7 確認応答 (ACK) メッセージは、宛先が HL7 メッセージを受信したことを通知します。否定 ACK (NACK) メッセージは、宛先が転送を認識しているものの、メッセージを受け取らなかったことを通知します。
以下の図は、Ensemble が ACK および NACK メッセージの送信のための HL7 メッセージ規則を維持する方法を示しています。
コミット ACK — Ensemble ビジネス・サービスでは、ソースから受信したデータを保存するトランザクションをコミットするとすぐに、ACK をソース・アプリケーションに返します。何らかの理由でこれが不可能であるとわかると NACK を送信します。Ensemble ビジネス・オペレーションは、ターゲット・アプリケーションからの ACK または NACK を解釈するよう設定できますが、これらのメッセージをソースに返すことはありません。
アプリケーション ACK — ACK または NACK が Ensemble ビジネス・オペレーションによりターゲット・アプリケーションから返されるまで、Ensemble ビジネス・サービスはソース・アプリケーションに ACK も NACK も送信しません。ビジネス・サービスはビジネス・オペレーションから受信した ACK または NACK を返します。
コミットおよびアプリケーション ACK — この 3 つ目のオプションは、[Ackモード] を MSH-determined に設定していて、MSH セグメントでフィールド 15 と 16 の両方に ACK を要求する値が含まれている、という珍しい場合にのみ機能します。この状況は回避することをお勧めします。
これらの確認応答規則を使用して、以下の 3 つの主な ACK メッセージ・コンテンツ・タイプを送信できます。
-
受け入れ — メッセージが到着し、受け入れられました。
-
拒否 — メッセージが到着しましたが、拒否されました。
-
エラー — メッセージが正常に到着しませんでした。再試行してください。
ビジネス・サービスの ACK 処理を制御するには、以下の構成設定を使用します。
ACK 処理を制御するには、ビジネス・オペレーションの以下の構成設定を使用します。
HL7 二重確認応答シーケンス
一部のシステムでは、Ensemble に二重確認応答シーケンス (直ちに 1 バイトの ACK を返し、その後 ACK メッセージ全体を返す) が必要です。そのようなシステムの 1 つが、二重チャネルの iSoft iCM アプリケーションです。二重確認応答シーケンスを必要とする iCM などのクライアント・システムが構成に含まれる場合、ビジネス・サービスとビジネス・オペレーションのペアを設定し、必要な ACK を Ensemble で提供できるようにする必要があります。
Ensemble には、TCP および HTTP 上での二重確認応答シーケンスを定義するために使用できる特殊なビジネス・ホスト・クラスが用意されています。
-
EnsLib.HL7.Service.TCPAckInServiceOpens in a new tab は、ペアになっている HL7 TCP ビジネス・オペレーションの代わりに ACK を受信する特殊な HL7 ビジネス・サービスです。これは、代わりに ACK を送信するパートナーにも依存します。
-
EnsLib.HL7.Operation.TCPAckOutOperationOpens in a new tab は、ペアになっている HL7 TCP ビジネス・サービスの代わりに ACK を送信する特殊な HL7 TCP ビジネス・オペレーションです。これは、代わりに ACK を収集するパートナーにも依存します。これらの各構成項目は、パートナーの項目の作業のほかに、通常のロールも果たします。
-
EnsLib.HL7.Service.HTTPAckInServiceOpens in a new tab および EnsLib.HL7.Operation.HTTPAckOutOperationOpens in a new tab も利用可能です。
受信メッセージの二重 ACK シーケンス
Ensemble で受信されるメッセージの場合、二重確認応答シーケンスは、以下の図に示すように機能します。
-
クライアント・アプリケーションが Ensemble にメッセージを送信します。
-
受信 ACK ビジネス・サービスがすぐに 1 バイトの ACK をクライアント・アプリケーションに送信します。
-
受信 ACK ビジネス・サービスがメッセージをルーティング・プロセスに送信します。
-
ルーティング・プロセスがビジネス・オペレーションを介してメッセージをターゲットにルーティングします。
-
ターゲット・アプリケーションが ACK メッセージをビジネス・オペレーションに返します。
-
Ensemble が ACK を受信 ACK ビジネス・サービスに渡します。
-
ビジネス・サービスがペアになっているビジネス・オペレーションに ACK を渡します。
-
ビジネス・オペレーションがクライアント・アプリケーションに ACK を渡します。
-
クライアント・アプリケーションは、1 バイトの ACK を返すことにより、ACK メッセージの確認応答を行います。
送信メッセージの二重 ACK シーケンス
Ensemble から送信されるメッセージの場合、二重確認応答シーケンスは、以下の図に示すように機能します。
-
ビジネス・サービスがメッセージをルーティング・プロセスに送信します。
-
ルーティング・プロセスがメッセージを送信 ACK ビジネス・オペレーションにルーティングします。
-
送信 ACK ビジネス・オペレーションがターゲット・アプリケーションにメッセージを渡します。
-
ターゲット・アプリケーションは、1 バイトの ACK を返すことにより、メッセージの確認応答を行います。
-
ターゲット・アプリケーションが ACK メッセージを受信 ACK ビジネス・サービスに返します。
-
ビジネス・サービスがすぐに 1 バイトの ACK をターゲット・アプリケーションに送信します。
-
ビジネス・サービスがペアになっているビジネス・オペレーションに ACK を渡します。
-
ビジネス・オペレーションがビジネス・サービスに ACK メッセージを渡します。
-
ビジネス・サービスが元のメッセージへの ACK を受信します。
二重 ACK シーケンスの構成
Ensemble ルーティング・プロダクションを構成するには、以下のようにして二重確認応答機能を使用します。
-
プロダクションにビジネス・サービスを追加します。
ビジネス・サービス・クラスとして EnsLib.HL7.Service.TCPAckInServiceOpens in a new tab または EnsLib.HL7.Service.HTTPAckInServiceOpens in a new tab を選択します。これは [ビジネス・サービス] ウィザードから使用可能な標準の [HL7 入力] オプションではありませんが、[その他] オプションを選択し、クラスを指定することにより、これを選択することができます。
-
プロダクションにビジネス・オペレーションを追加します。
ビジネス・オペレーション・クラスとして EnsLib.HL7.Operation.TCPAckOutOperationOpens in a new tab または EnsLib.HL7.Service.HTTPAckOutOperation を選択します。これは [ビジネス・オペレーション] ウィザードから使用可能な標準の [HL7 出力] オプションではありませんが、[その他] オプションを選択し、クラスを指定することにより、これを選択することができます。
-
ビジネス・サービスの以下の設定を構成します。
-
[即時 Byte ACK] を真に設定します。真に設定されると、[Ackモード] の設定に従って完全な ACK メッセージを転送するのに加え、このビジネス・サービスは TCP または HTTP 接続で 1 バイトの ACK も直ちに返します。
-
[パートナーオペレーション] に対し、手順 2 で追加したビジネス・オペレーションを選択します。[パートナーオペレーション] の値を指定すると、ビジネス・サービスは直接受け取った受信 ACK メッセージを無視し、ACK フィードバック・ループの作成を回避します。
そのビジネス・オペレーションが存在し、基礎となるクラス、EnsLib.HL7.Operation.TCPAckOutOperationOpens in a new tab または EnsLib.HL7.Operation.HTTPAckOutOperationOpens in a new tab をそれぞれ持っている必要があります。
-
-
ビジネス・オペレーションの以下の設定を構成します。
-
[パートナーACKタイムアウト] の値を、ビジネス・オペレーションが送信した通常の送信メッセージに対応する ACK をパートナーのビジネス・サービスが提供するまで待機する秒数に設定します。デフォルトは 600 秒 (10 分) です。
-
HL7 バッチ・メッセージ
Ensemble は HL7 内でネストされた子ドキュメント (バッチ形式) をサポートします。各子ドキュメントは、それ自体で Ensemble 仮想ドキュメントです。この節では、2 つの設定によって制御される詳細について説明します。この章は以下の節で構成されています。
サポートされるバッチ形式
Ensemble は以下の HL7 バッチ形式をサポートしています。
-
BHS MSH ...MSH ...BTS
Ensemble は BHS をバッチ・ヘッダ・セグメントとして、BTS をバッチ・トレーラ・セグメントとして認識します。このコンテナ内で、Ensemble は、各 MSH メッセージ・ヘッダ・セグメントを子ドキュメントの最初として認識します。
-
FHS MSH ...MSH ...FTS
Ensemble は FHS をバッチ・ヘッダ・セグメントとして、FTS をバッチ・トレーラ・セグメントとして認識します。このコンテナ内で、Ensemble は、各 MSH メッセージ・ヘッダ・セグメントを子ドキュメントの最初として認識します。
-
FHS BHS MSH ...MSH ...BTS BHS MSH ...MSH ...BTS FTS
FHS および BHS が一緒にメッセージを開始すると、Ensemble は FHS を第 1 レベルの親ドキュメントとして、また各 BHS を子ドキュメントの開始として認識します。その後、BHS が第 2 レベルの親になり、各 MSH セグメントに続くコンテンツがその子ドキュメントになります。
受信バッチ・ドキュメントの処理
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 つの場合があります。
-
ルーティング・プロセス・コードは、新しい親および子のドキュメントを作成してこれらをリンクし、各子をビジネス・オペレーションに送信します。ビジネス・オペレーションでは、[親セグメント自動バッチ] 設定を真に設定する必要があります。ビジネス・オペレーションは、最初に子ドキュメントを受信すると親ヘッダを出力し、親ドキュメント・オブジェクトを受信すると、トレーラで終了します。トレーラ・セグメントには自動的に現在の子カウント値が含まれます。
-
ルーティング・プロセス・コードは、新しい親および子のドキュメントを作成してそれらをリンクしますが、ビジネス・オペレーションを介して親オブジェクトのみを送信します。