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 メッセージ内の次の値が連結されます。
結果は、ADT_A01、ADT_A12、ORM_O01_2 といった形式のメッセージ構造名です。 |
MSHControlID |
メッセージの一意の識別子番号。プロダクションは、この値を次の値から取得します。
インターシステムズでは、この値は大文字/小文字を区別する文字列として解釈されます。 |
PatientID |
メッセージの患者識別子。これは、HL7 標準の改訂に伴って位置が変わったフィールドです。そのため、インターシステムズでは、次の場所すべてでこの値が検索されます。そのようにすることで、メッセージが準拠する HL7 スキーマ・カテゴリに関係なく、患者識別子を見つけることができます。
|
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>
}
}