第十八章 定义 HL7 搜索表
HL7
搜索表类 EnsLib.HL7.SearchTable
,自动索引填充的 HL7
属性。
如果需要搜索更多的项,可以创建一个子类。子类继承Identifier
属性,以及使搜索表工作的基础结构。具体操作请参见在产品中使用虚拟文档中的“定义搜索表类”。
对于HL7
, 支持PropType
的附加值。除了在产品中使用虚拟文档中列出的类型之外,还可以使用DateTime:HL7
。
创建搜索表时,不要使用保留的包名;参见开发产品中的“保留包名”。
默认索引的属性
当选择EnsLib.HL7。searchtable
作为搜索表类,使能够在HL7消息中搜索以下虚拟属性。
MSHTypeName
消息结构名称。为了创建这个字符串,将HL7消息中的以下值连接起来:
- MSH
消息头段
字段`9`(消息类型)
子字段`1`(消息类型`:ADT`, `ORM`等)
- 文字字符_
- `MSH`消息头段
字段`9`(消息类型)
子字段`2`(触发事件:`A01、A12、O01_2`等)
结果是一个格式为ADT_A01, ADT_A12, ORM_O01_2
等的消息结构名称。
MSHControlID
此消息的唯一标识号。production
程序从:
- `MSH`消息头段
- 字段10(消息控制ID)
将此值解释为区分大小写的字符串。
PatientID
此消息的患者标识符。随着HL7标准的发展,这个领域的位置也发生了变化。出于这个原因,在以下所有位置查找此值。这样,无论消息符合哪个HL7模式类别,都可以找到患者标识符:
- PID
患者标识符段
字段`2`(患者外部标识符)
子字段`1`(患者标识符)
- `PID`患者标识符段
字段`3`(患者标识符列表),列表中的所有条目
子字段`1`(患者标识符)
- `PID`患者标识符段
字段`4`(患者标识符列表),列表中的所有条目
子字段`1`(患者标识符)
PatientName
PID
患者标识符段
字段5
(患者姓名)
PatientAcct
PID
患者标识符段
字段18
(患者账号)
子字段1
(ID
)
示例
下面的示例包含一个使用{}
语法的虚拟属性路径。这个<Item>
元素指的是HL7
消息中第1
段第10
字段的值:
<Item DocType=""
PropName="MSHControlID"
PropType="String:CaseSensitive"
StoreNulls="true" >
{1:10}
</Item>
下面这个更复杂的<Item>
元素使用objectscript_
操作符连接三个字符串。从左到右依次是:
- 段
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>
条目的示例。这个类继承自EnsLib.HL7。searchtable
,这是HL7
搜索表所需要的。每组<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>
}
}
网友评论