1
string input = 
@"MSH|^~\&|||||20171218104936.3464||ADT^A01^ADT_A01|56ca00f2-a99a-4593-b6cb-1c141c0ae0cb||2.3.1
EVN||20171218104936.3464
PID|||15197||Test^Dummy^HK||19770628000000.0000|O
PV1||0";

在上面的字符串中,名称字段 ( Test^Dummy^HK) 是一个重复字段。如何使用nHapi DLL 在 C# 中获得它?

4

1 回答 1

0

这很简单,但是在尝试检索字段之前,需要解析消息:

string input = 
@"MSH|^~\&|||||20171218104936.3464||ADT^A01^ADT_A01|56ca00f2-a99a-4593-b6cb-1c141c0ae0cb||2.3.1
EVN||20171218104936.3464
PID|||15197||Test^Dummy^HK||19770628000000.0000|O
PV1||0";

ADT_A01 adt = (ADT_A01)(new PipeParser()).Parse(input);

接下来,您要查找的字段是 XPN 数据类型,即扩展患者姓名。下表列出了患者姓名的前 3 个组成部分。

SEQ     LENGTH  DT  OPT TBL#    NAME
XPN.1   194     FN  O           Family Name
XPN.2   30      ST  O           FirstName   Given Name
XPN.3   30      ST  O           Second And Further Given Names Or Initials Thereof

这些组件可以通过它们的属性访问,因此:

string surname = adt.PID.GetPatientName(0).FamilyName.Surname.Value; //Test
string givenName = adt.PID.GetPatientName(0).GivenName.Value; //Dummy
string secondAndFurtherGivenNamesOrInitialsThereof = adt.PID.GetPatientName(0).SecondAndFurtherGivenNamesOrInitialsThereof.Value; //HK

由于没有波浪字符,解析器假定 PID-5 中提供的值对应于第一次重复,这就是为什么我有 GetPatientName(0) 来指定第一次重复。任何检索其他重复的尝试都将失败,或产生空值。

请注意,Family Name 是 FN 类型的复合数据类型,这是 FN 的组件表:

FN.1    50  ST  R       Surname
FN.2    20  ST  O       Own Surname Prefix
FN.3    50  ST  O       Own Surname
FN.4    20  ST  O       Surname Prefix From Partner/Spouse
FN.5    50  ST  O       Surname From Partner/Spouse

另一种选择是:

Terser adtTerser = new Terser(adt);
string surname = adtTerser.Get("PID-5.1") = adtTerser.Get("PID-5-1-1")
string givenName = adtTerser.Get("PID-5.2") = adtTerser.Get("PID-5-2-1")
string secondAndFurtherGivenNamesOrInitialsThereof = adtTerser.Get("PID-5-3") = adtTerser.Get("PID-5-3-1")

我发现这个有用的文档 检查一下。希望它可以帮助你。

于 2018-07-18T22:54:18.863 回答