文章
· 八月 10, 2023 阅读大约需 3 分钟

第十八章 定义 HL7 搜索表

第十八章 定义 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>
}

}
讨论 (0)1
登录或注册以继续