Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

HL7 検索テーブルの定義

HL7 検索テーブル・クラスの EnsLib.HL7.SearchTableOpens in a new tab は、一般的な HL7 プロパティのインデックスを自動的に作成します。“デフォルトでインデックスが作成されるプロパティ” を参照してください。

検索する項目を増やす場合は、サブクラスを作成できます。サブクラスは、Identifier プロパティに加えて、検索テーブルを機能させるインフラストラクチャを継承します。詳細は、"プロダクション内での仮想ドキュメントの使用法" の “検索テーブル・クラスの定義” を参照してください。

HL7 については、インターシステムズは PropType の追加の値をサポートしています。"プロダクション内での仮想ドキュメントの使用法" に列挙されたタイプのほかに、DateTime:HL7 を使用できます。

検索テーブルを作成するときに、予約パッケージ名を使用しないでください。"プロダクションの開発" の “予約パッケージ名” を参照してください。

デフォルトでインデックスが作成されるプロパティ

EnsLib.HL7.SearchTableOpens in a new tab を検索テーブル・クラスとして選択すると、HL7 メッセージで次の仮想プロパティを検索できます。

選択するプロパティ 参照する値
MSHTypeName

メッセージ構造名。この文字列を作成するために、インターシステムズでは HL7 メッセージ内の次の値が連結されます。

  • MSH メッセージ・ヘッダ・セグメント

    フィールド 9 (メッセージ・タイプ)

    サブフィールド 1 (メッセージ・タイプ : ADT、ORM など)

  • リテラル文字 _

  • MSH メッセージ・ヘッダ・セグメント

    フィールド 9 (メッセージ・タイプ)

    サブフィールド 2 (トリガ・イベント : A01、A12、O01_2 など)

結果は、ADT_A01、ADT_A12、ORM_O01_2 といった形式のメッセージ構造名です。

MSHControlID

メッセージの一意の識別子番号。プロダクションは、この値を次の値から取得します。

  • MSH メッセージ・ヘッダ・セグメント

    フィールド 10 (メッセージ制御 ID)

インターシステムズでは、この値は大文字/小文字を区別する文字列として解釈されます。

PatientID

メッセージの患者識別子。これは、HL7 標準の改訂に伴って位置が変わったフィールドです。そのため、インターシステムズでは、次の場所すべてでこの値が検索されます。そのようにすることで、メッセージが準拠する HL7 スキーマ・カテゴリに関係なく、患者識別子を見つけることができます。

  • PID 患者識別子セグメント

    フィールド 2 (患者外部識別子)

    サブフィールド 1 (患者識別子)

  • PID 患者識別子セグメント

    フィールド 3 (患者識別子リスト)、リスト内のすべてのエントリ

    サブフィールド 1 (患者識別子)

  • PID 患者識別子セグメント

    フィールド 4 (患者識別子リスト)、リスト内のすべてのエントリ

    サブフィールド 1 (患者識別子)

PatientName

PID 患者識別子セグメント

フィールド 5 (患者名)

PatientAcct

PID 患者識別子セグメント

フィールド 18 (患者アカウント番号)

サブフィールド 1 (ID)

次の例は、{} 構文を使用する 1 つの仮想プロパティ・パスで構成されています。この <Item> 要素は、HL7 メッセージのセグメント 1、フィールド 10 の値を参照します。

<Item DocType=""
      PropName="MSHControlID"
      PropType="String:CaseSensitive"
      StoreNulls="true" >
      {1:10}
</Item>

次に示す、より複雑な <Item> 要素は、ObjectScript の _ 演算子を使用して 3 つの文字列を連結します。左から右へ、次のように連結されます。

  • セグメント 1、フィールド 4 の値

  • リテラルの - 文字

  • セグメント 1、フィールド 3 の値

<Item DocType=""
      PropName="SendingFacilApp" >
      {1:4}_"-"_{1:3}
</Item>

次の <Item> の例では、使用可能な構文オプションのほとんど (連結、仮想プロパティ、リテラルのハイフン文字 (-)、および ObjectScript 文字列関数 $PIECE) を使用しています。

XData SearchSpec [ XMLNamespace="http://www.intersystems.com/EnsSearchTable" ]
{
<Items>
 <Item DocType="Mater:ORM_O01 "
       PropName="RelationKey" >
 $P(
 {ORCgrp(1).OBRuniongrp.OBRunion.OBR:UniversalServiceID.text},"-",1,2
 )_"-"_{MSH:12}
 </Item>
</Items>}

次の検索テーブル・クラスのサンプルでは、有効な <Item> エントリの例をいくつか示します。このクラスは、HL7 検索テーブルの規定に従って、EnsLib.HL7.SearchTableOpens in a new tab から継承されます。<Item> エントリの各グループの上にあるコメントには、その一連のエントリの目的が記載されています。{} や [] の構文の詳細は、“プロダクション内での仮想ドキュメントの使用法” で構文ガイドの節を参照してください。

Class Demo.HL7.MsgRouter.SearchTable Extends EnsLib.HL7.SearchTable
{

XData SearchSpec [ XMLNamespace="http://www.intersystems.com/EnsSearchTable" ]
{
  <Items>
   <!-- Items that do not depend on DocType, indexing any HL7 message -->
   <Item DocType="" PropName="SendingFacilApp" >{1:4}_"|"_{1:3}</Item>
   <Item DocType="" PropName="RecvingFacilApp" >{1:6}_"|"_{1:5}</Item>
   <Item DocType="" PropName="MSHDateTime" PropType="DateTime:HL7" >{1:7}</Item>

   <!-- Get fields from named segments found in any HL7 message -->
   <Item DocType="" PropName="PatientName" >[PID:5]</Item>
   <Item DocType="" PropName="InsuranceCo" >[IN1:4]</Item>

   <!-- Get patient name from any HL7 message declared type ADT_A05 -->
   <Item DocType=":ADT_A05" PropName="PatientName" >{3:5}</Item>

   <!-- Get specific field from specific segment when the        -->
   <!-- HL7 message is assigned a specific DocType. Only in this -->
   <!-- case can you use names for segments, instead of numbers. -->
   <Item DocType="Demo.HL7.MsgRouter.Schema:ORM_O01 " PropName="ServiceId" >
     {ORCgrp().OBRuniongrp.OBRunion.OBR:UniversalServiceID.text}
   </Item>
   <Item DocType="2.3.1:ORU_R01 " PropName="ServiceId" >
     {PIDgrpgrp().ORCgrp(1).OBR:UniversalServiceID.text}
   </Item>
  </Items>
}

}
FeedbackOpens in a new tab