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#中获取它?
答案 0 :(得分: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数据类型,即扩展患者姓名。下表列出了患者姓名的前三个组成部分。
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)来指定第一个重复的原因。任何尝试检索其他重复的尝试都将失败,或产生为空值。
请注意,姓氏是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")
我发现了这个useful documentation,请检查一下。希望对您有帮助。