この章では、HL7 バージョン 2 スキーマと HL7 バージョン 2 ドキュメントの操作に使用可能なインターシステムズ製ツールの概要を示します。
HL7 スキーマと HL7 メッセージの概要
インターシステムズ製品では、スキーマを使用して解析しなくても、HL7 メッセージを処理して渡すことができますが、スキーマをメッセージに関連付けると、次のことが可能になります。
各 HL7 メッセージは、MSH セグメントの MessageType フィールド (MSH:9) で指定されたメッセージ・タイプによって識別されます。一部のメッセージ・タイプは同じメッセージ構造を共有しています。例えば、HL7 バージョン 2.3.1 では、患者を事前登録する ADT_A05 メッセージの構造は、ADT_A01 入院メッセージと同じです。スキーマでは、ADT_A05 メッセージは構造タイプ ADT_A01 を使用するように指定されています。
インターシステムズ製品で HL7 メッセージを解析するには、次の 2 つの情報が必要です。
-
スキーマ・カテゴリ — 2.3.1 や 2.7 など、HL7 のバージョン番号です。インターシステムズ製品で定義したカスタム・スキーマのカテゴリである場合もあります。プロダクションは、ビジネス・サービスの [メッセージ・スキーマ・カテゴリ] 設定、またはデータ変換の設定からスキーマ・カテゴリを取得します。HL7 メッセージでは、MSH セグメントの VersionID フィールド (MSH:12) にスキーマ・バージョン番号が含まれますが、多くのアプリケーションではこのフィールドが一貫した方法で設定されないため、インターシステムズではこの値を使用しません。
-
構造タイプ — プロダクションは MSH:9 フィールドからメッセージ・タイプを取得した後、スキーマ定義をチェックして、そのメッセージの構造タイプを取得します。
インターシステムズでは、MSH:9.3 サブフィールドを使用してメッセージ・タイプを修飾することもあります。HL7 メッセージでは、MSH:9:3 サブフィールドは、1) メッセージ・タイプの修飾子として使用されるか、2) 構造タイプを指定するために使用されます。MSH:9:3 がメッセージ・タイプを修飾する場合 (通常は数字として修飾する)、インターシステムズ製品はその値をメッセージ・タイプの一部として組み込みます。MSH:9:3 が構造タイプ (ADT_A01 など) を指定する場合、インターシステムズでは、メッセージ・タイプを特定する際にも Name プロパティを設定する際にもその値を無視します。インターシステムズ製品はスキーマから構造タイプを取得するため、構造タイプを特定するために MSH:9.3 サブフィールドは必要ありません。
ビジネス・サービスまたはデータ変換によって、HL7 メッセージを格納する EnsLib.HL7.Message オブジェクトが作成される際、スキーマ・カテゴリと構造タイプが結合され、次の構文を使用して DocType プロパティに格納されます。
category:structureType
例えば、カテゴリ 2.3.1 の有効な DocType 値には、2.3.1:ACK、2.3.1:ADT_A17、2.3.1:BAR_P01、2.3.1:PEX_P07 などがあります。メッセージ・タイプは、構造タイプとは異なる場合があり、Name プロパティに格納されます。
ObjectScript コードで EnsLib.HL7.Message オブジェクトを作成する場合は、MSH:9 フィールドの値に基づいて DocType プロパティと Name プロパティを設定する必要があります。
HL7 標準では、末尾の Z セグメントなど、ローカル拡張が許可されています。これらのセグメントは、ベース・スキーマ・カテゴリでは定義されていません。データ変換、ルーティング・ルール、または ObjectScript でカスタム Z セグメント内のフィールドにアクセスするには、拡張されたメッセージを指定するカスタム・スキーマ・カテゴリを定義する必要があります。カスタム・スキーマの定義の詳細は、“カスタム・スキーマ・エディタの使用法” を参照してください。
カスタム HL7 スキーマをソース・コントロールに配置できます。ソース・コントロールを有効にすると、[HL7 スキーマ・メッセージ・タイプ] ページなど、カスタム・スキーマの操作に使用する他のページではなく、メインの [HL7スキーマ] ページからチェック・アウトやチェック・インなどのソース・コントロール・オプションを使用できるようになります。他のページを使用してスキーマを編集する前に、[HL7スキーマ] ページからスキーマ全体をチェック・アウトする必要があります。関連するすべての HL7 スキーマ・ページからソース・コントロール・アクティビティを収集するメインの [HL7スキーマ] ページから [ソース・コントロール出力] ウィンドウを使用できます。ソース・コントロールの設定については、"InterSystems IRIS とソース・コントロール・システムの統合" を参照してください。
カスタム・スキーマ・エディタの使用法
カスタム・スキーマ・エディタを使用すると、新しいカスタム HL7 スキーマを作成したり、既存のカスタム HL7 スキーマを編集したりすることができます。カスタム・スキーマには通常、標準スキーマまたは別のカスタム・スキーマであるベース・スキーマがあります。インターシステムズ製品でカスタム・スキーマを使用してメッセージを解析する際、メッセージ・タイプ、セグメント、または他の要素がカスタム・スキーマで定義されていない場合、ベース・スキーマの定義が使用されます。そのため、カスタム・スキーマでは、ベース・スキーマに存在しない要素やベース・スキーマのものとは異なる定義を必要とする要素を定義するだけでかまいません。標準スキーマを編集することはできません。
カスタム・スキーマを定義する最も一般的な理由は、末尾の Z セグメントがある HL7 メッセージを解析できることです。インターシステムズ製品では、スキーマで定義されていない末尾の Z セグメントがあるメッセージを処理できますが、次のことを行うには、カスタム・スキーマを定義する必要があります。
現在、標準スキーマを使用しているプロダクションがあり、データ変換またはルーティング・ルールで末尾の Z セグメントのフィールド・パスにアクセスする必要がある場合は、次の作業が必要です。
-
管理ポータルのカスタム・スキーマ・エディタを使用して、新しい HL7 スキーマを作成します。カスタム・スキーマの名前を入力し、ベース・スキーマを指定します。"新しいカスタム・スキーマの作成" を参照してください。
-
メッセージに含めることができる Z セグメントを定義します。ベース・スキーマの既存のセグメントと同様のフィールドが Z セグメントにある場合、ベースから定義をコピーし、必要に応じて変更することができます。それ以外の場合は、新しいセグメントを作成できます。フィールドの追加、フィールドの削除、フィールドの順序の変更が可能です。"新しいセグメントの定義" を参照してください。
-
末尾の Z セグメントを含む各メッセージ・タイプについて、基になるスキーマからコピーしたメッセージ・タイプと構造タイプをカスタム・スキーマに作成します。構造タイプの最後に Z セグメントを追加します。"新しいメッセージ・タイプと構造タイプの定義" を参照してください。
-
ベース・スキーマの代わりに新しいカスタム・スキーマを使用するようにプロダクションのビジネス・サービスを変更します。
-
末尾の Z セグメントがある新しいメッセージをプロダクションのビジネス・サービスに渡して、プロダクションをテストします。メッセージ・ビューワでメッセージを表示したときに、Z セグメントがスキーマで定義されていれば、青で表示されます。認識できないセグメントは黒で表示されます。
詳細な手順については、この後の各節で説明します。
新しいカスタム・スキーマの作成
管理ポータルからカスタム・スキーマ・エディタを起動するには、ホーム・ページから [Interoperability]→[相互運用]→[HL7 v2.x]→[HL7 v2.x スキーマ構造] を選択します。
新しい HL7 スキーマを作成するには、[新規作成] をクリックします。カスタム・スキーマ・エディタで、ベース・スキーマ、スキーマ名、およびスキーマの説明 (オプション) を選択します。例えば、バージョン 2.5 の標準スキーマ・カテゴリに基づいてカスタム・スキーマを定義する場合、次のように入力できます。
カスタム・スキーマを作成すると、カスタム・スキーマ・エディタに空のスキーマが表示され、メッセージ・タイプ、構造タイプ、セグメント構造、データ構造、およびコード・テーブルを定義できます。ベース・スキーマのものとは定義が異なる要素やベース・スキーマで定義されていない要素を定義するだけでかまいません。
カスタム HL7 スキーマ・エディタには次のタブがあります。
-
メッセージ・タイプ
-
DocType 構造
-
セグメント構造
-
データ構造
-
コードテーブル
これらの各タブで、[ベースからコピー] を選択して、既存のベース定義から要素をコピーできます。これにより、共通する定義を再入力することなく、既存の定義の拡張であるメッセージ・タイプやその他の要素を作成することができます。
新しいセグメントの定義
新しい Z セグメントを定義するには、左側のパネルで新しいカスタム・スキーマを選択した後、[セグメント構造] タブを選択します。カスタム・スキーマの場合、[セグメント構造] タブには [新規作成] ボタンと [ベースからコピー] ボタンがあり、カスタム・スキーマで現在定義されているセグメントのリストが表示されます。このスキーマにはセグメントが定義されていないため、セグメント構造のリストは空です。標準スキーマを表示している場合、新しいセグメントを追加することはできず、ボタンは表示されません。
別のセグメントからフィールドをコピーせずに新しいセグメントを定義する場合は、[新規作成] ボタンをクリックすると、空のセグメントが作成されます。セグメントの名前を指定し、[フィールドの追加] ボタンをクリックします。空のフィールドが作成され、フォームに入力できます。次に、例を示します。
ベース・スキーマの既存のセグメントとよく似たセグメントを作成する場合は、[ベースからコピー] を選択する必要があります。これにより、指定したセグメントと同じフィールドを持つ新しいセグメントが作成されます。カスタム・セグメント構造ウィザードには、コピーされたフィールドが表示され、それらのフィールドの後には新しいフィールドを作成するための [新規作成] ボタンがあります。例えば、次のセグメントは PID セグメントからコピーされたものです。
新しいセグメントとしてまたはベース・セグメントのコピーとしてセグメントを作成したら、次のようにフィールドを追加または更新できます。
-
[フィールドの追加] ボタンをクリックして、セグメントの最後にフィールドを追加します。
-
セグメント・フィールドを定義するフォームのテキスト・ボックスを更新します。[プロパティ名] テキスト・ボックスを編集することはできません。プロパティ名は、[説明] フィールドの値からスペースや特殊記号を削除して設定されます。[OK] をクリックしてウィザードを終了すると、プロパティ名が設定されます。
-
上下の矢印をクリックして、フィールドの順序を変更します。
-
赤の X をクリックして、フィールドをセグメントから削除します。
フィールドの入力が完了したら、[OK] をクリックしてセグメントを保存します。
カスタム・スキーマの保存済みセグメントを編集できますが、そのためには、セグメント名をクリックした後、[編集] をクリックします。
Z セグメントを定義したら、Z セグメントを含むメッセージ・タイプと構造タイプを定義する必要があります。
新しいメッセージ・タイプと構造タイプの定義
メッセージ・タイプはメッセージを識別し、HL7 MSH:9 フィールドの値と一致します。メッセージ・タイプを定義する際には、送信メッセージ構造タイプ (メッセージ・タイプと同じである場合がある) と返りタイプを指定します。ただし、メッセージに含めることができるセグメントは、メッセージ・タイプではなく構造タイプで指定します。メッセージ・タイプを作成するときに、オプションで構造タイプを同時に作成することもできます。
ベース・スキーマで定義されているメッセージ・タイプに Z セグメントを追加するには、メッセージ・タイプと構造をカスタム・スキーマにコピーした後、末尾の Z セグメントを構造タイプに追加します。例えば、バージョン 2.5 をベース・スキーマとするカスタム・スキーマの ORU_R01 メッセージに ZPI セグメントを追加するには、以下の操作を行います。
-
左側のパネルでカスタム・スキーマを選択し、[メッセージ・タイプ] タブを選択して、[ベースからコピー] をクリックします。
-
[コピーするメッセージ・タイプ] プルダウンで ORU_R01 メッセージ・タイプを選択します。コピーしたメッセージ・タイプと同じ名前が新しいメッセージ・タイプ名として入力され、ベースの定義と一致するように [メッセージ構造] と [返されるメッセージ・タイプ] が設定されます。チェック・ボックスにチェックを付けると、送信メッセージ構造がカスタム・スキーマでまだ定義されていない場合、自動的に作成されます。このメッセージ構造は、ベース・スキーマから構造をコピーすることによって作成されます。HL7 標準の一部のバージョンには、2 つのメッセージ構造を使用できるメッセージ・タイプが含まれています。そのタイプで使用可能な追加の構造を定義するには、[代替メッセージ構造] を使用します。
[OK] をクリックすると、ORU_R01 メッセージ・タイプと ORU_R01 構造タイプがカスタム・スキーマで定義されます。
-
[DocType 構造] タブ、ORU_R01 構造タイプの順にクリックします。カスタム・スキーマ・エディタに構造タイプのグラフィカル表現が表示されます。
-
メッセージ構造に含まれるセグメントの追加、削除、または変更を開始するには、[編集] ボタンをクリックします。[編集] ボタンと [利用可能なセグメント] セクションが表示されるのは、カスタム・スキーマの一部である構造を表示している場合のみです。
例えば、カスタム・メッセージ構造ウィザードを使用して ORU_R01 構造タイプのコピーを編集している場合、ウィザードは次のように表示されます。
ベース・スキーマのメッセージ定義を拡張する場合は、ベース・スキーマで指定されているものと同じセグメント名と構造名を使用する必要があります。
[利用可能なセグメント] セクションから [構造] セクションにセグメントをドラッグ・アンド・ドロップして、メッセージ構造内の正しい位置にセグメントを配置することができます。カスタム・セグメントの追加に焦点を絞るには、フィルタ・ボタン をクリックします。カスタム・セグメントのみが [利用可能なセグメント] セクションに表示されます。
セグメントを [構造] セクションに移動した後、セグメントをクリックして、セグメントを [オプション] または [Repeating] として定義することができます。
また、全体としてオプションまたは繰り返しであるセグメントのグループを作成することもできます。グループを作成するには、以下の手順に従います。
-
グループの最上位にするセグメントをクリックして、[グループ] を選択します。グループの最上位レベルが作成されます。その名前は選択したセグメントと同じですが、grp が追加されます。
-
最上位レベルのグループ名をクリックして、[オプション] または [Repeating] を選択します。グループ全体を [オプション] または [Repeating] として指定しない限り、セグメントはグループとして保存されません。
-
ドラッグ・アンド・ドロップを使用してセグメントをグループに追加します。グループに含まれるセグメントが 1 つだけの場合、グループは保存されません。
セグメントのセットを作成することもできます。この場合、メッセージの構造に、セット内の任意のセグメントを 1 つ含めることができます。このセットを作成するには、セットの一部にするセグメントをクリックして、[Choice] を選択します。セットの最上位レベルが作成されます。その名前は選択したセグメントと同じですが、union が追加されます。このセットの一部である他のセグメントをドラッグ・アンド・ドロップすることができます。和集合に含まれるセグメントが 1 つだけの場合、和集合は保存されません。
[構造] セクションにおけるセグメントの表現上の規則と名前付け規約の詳細は、"メッセージ構造の表示" を参照してください。
未加工のテキスト形式でメッセージ構造を表示するには、 をクリックします。編集モードでは、未加工のテキストを編集してメッセージ構造を変更できます。
Note:
カスタム・スキーマでメッセージ構造を定義すると、同じ構造を共有するすべてのメッセージ・タイプでその定義が使用されます。例えば、末尾の ZPI セグメントを ORU_R30 構造に追加した場合、ORU_R30、ORU_R31、および ORU_R32 の各メッセージ・タイプはすべて、同じ ORU_R30 構造を共有するため、これらのメッセージ・タイプで末尾の Z セグメントを使用できます。これらのメッセージ・タイプをカスタム・スキーマに含める必要はありません。ベース・スキーマの定義によって、カスタム・スキーマの構造タイプが使用されます。
データ構造とコード・テーブルの編集
データ構造は、単純なデータ型ではなく、構造化された値を持つフィールドを指定するためのメカニズムを提供します。コード・テーブルは、フィールドで使用可能な値のセットを定義するためのメカニズムを提供します。通常、データ構造とコード・テーブルは HL7 標準の本文で定義され、カスタム拡張として定義されることはありません。まれなケースとして、カスタム・スキーマでデータ構造とコード・テーブルを定義する必要がある場合は、カスタム HL7 スキーマ・エディタを使用して定義することができます。データ構造を編集するウィザードは、セグメントを編集するウィザードとよく似ています。コード・テーブルを編集するウィザードでは、コード・テーブルのコードと説明を定義できます。コードによって、フィールドで使用可能な値が指定されます。