@@ -229,6 +229,27 @@ public void Parse_EncodedMessageIsModifiedWithEscapeSequence_IsParsedCorrectly()
229229 Assert . AreEqual ( $ "\\ H\\ { obx5Value } \\ .br\\ { obx5Value } \\ N\\ ", parsedObx5Value ) ;
230230 }
231231
232+ [ Test ]
233+ public void Parse_MessageContainsLongNameAttributes_ParsedAsExpected ( )
234+ {
235+ // Arrange
236+ var message = "<ADT_A01 xmlns=\" urn:hl7-org:v2xml\" ><MSH><MSH.1 LongName=\" Field Separator\" >|</MSH.1><MSH.2 LongName=\" Encoding Characters\" >^~\\ &</MSH.2><MSH.3 LongName=\" Sending Application\" ><HD.1 LongName=\" Namespace ID\" >MILL</HD.1></MSH.3><MSH.4 LongName=\" Sending Facility\" ><HD.1 LongName=\" Namespace ID\" >EMRY</HD.1></MSH.4><MSH.5 LongName=\" Receiving Application\" ><HD.1 LongName=\" Namespace ID\" >MQ</HD.1></MSH.5><MSH.6 LongName=\" Receiving Facility\" ><HD.1 LongName=\" Namespace ID\" >EMRY</HD.1></MSH.6><MSH.7 LongName=\" Date / Time of Message\" ><TS.1 LongName=\" Time of an event\" >20150619155451</TS.1></MSH.7><MSH.9 LongName=\" Message Type\" ><CM_MSG.1 LongName=\" Message type\" >ADT</CM_MSG.1><CM_MSG.2 LongName=\" Trigger event\" >A08</CM_MSG.2></MSH.9><MSH.10 LongName=\" Message Control ID\" >Q2043855220T2330403781X928163</MSH.10><MSH.11 LongName=\" Processing ID\" ><PT.1 LongName=\" Processing ID\" >P</PT.1></MSH.11><MSH.12 LongName=\" Version ID\" >2.3</MSH.12><MSH.18 LongName=\" Character Set\" >8859/1</MSH.18></MSH><EVN><EVN.1 LongName=\" Event Type Code\" >A08</EVN.1><EVN.2 LongName=\" Recorded Date/Time\" ><TS.1 LongName=\" Time of an event\" >20150619155451</TS.1></EVN.2></EVN><PID><PID.1 LongName=\" Set ID - Patient ID\" >1</PID.1><PID.2 LongName=\" Patient ID (External ID)\" ><CX.1 LongName=\" ID\" >935307</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >EUH MRN</HD.1></CX.4><CX.5 LongName=\" Identifier type code\" >MRN</CX.5><CX.6 LongName=\" Assigning facility\" ><HD.1 LongName=\" Namespace ID\" >EH01</HD.1></CX.6></PID.2><PID.3 LongName=\" Patient ID (Internal ID)\" ><CX.1 LongName=\" ID\" >25106376</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >TEC MRN</HD.1></CX.4></PID.3><PID.3 LongName=\" Patient ID (Internal ID)\" ><CX.1 LongName=\" ID\" >1781893</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >CLH MRN</HD.1></CX.4></PID.3><PID.3 LongName=\" Patient ID (Internal ID)\" ><CX.1 LongName=\" ID\" >935307</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >EUH MRN</HD.1></CX.4></PID.3><PID.3 LongName=\" Patient ID (Internal ID)\" ><CX.1 LongName=\" ID\" >5938067</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >EMPI</HD.1></CX.4></PID.3><PID.4 LongName=\" Alternate Patient ID\" ><CX.1 LongName=\" ID\" >1167766</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >CPI NBR</HD.1></CX.4><CX.6 LongName=\" Assigning facility\" ><HD.1 LongName=\" Namespace ID\" >EXTERNAL</HD.1></CX.6></PID.4><PID.4 LongName=\" Alternate Patient ID\" ><CX.1 LongName=\" ID\" >90509411</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >HNASYSID</HD.1></CX.4></PID.4><PID.4 LongName=\" Alternate Patient ID\" ><CX.1 LongName=\" ID\" >10341880</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >HNASYSID</HD.1></CX.4></PID.4><PID.4 LongName=\" Alternate Patient ID\" ><CX.1 LongName=\" ID\" >50627780</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >HNASYSID</HD.1></CX.4></PID.4><PID.4 LongName=\" Alternate Patient ID\" ><CX.1 LongName=\" ID\" >5938067</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >MSG_CERNPHR</HD.1></CX.4></PID.4><PID.5 LongName=\" Patient Name\" ><XPN.1 LongName=\" Family name\" >Patient</XPN.1><XPN.2 LongName=\" Given name\" >Test</XPN.2><XPN.3 LongName=\" Middle initial or name\" >Test</XPN.3><XPN.7 LongName=\" Name type code\" >Cur_Name</XPN.7></PID.5><PID.7 LongName=\" Date of Birth\" ><TS.1 LongName=\" Time of an event\" >19400101</TS.1></PID.7><PID.8 LongName=\" Sex\" >F</PID.8><PID.10 LongName=\" Race\" >WHI</PID.10><PID.11 LongName=\" Patient Address\" ><XAD.1 LongName=\" Street address\" >123 ENDOFTHE RD</XAD.1><XAD.2 LongName=\" Other designation\" >UNIT 123</XAD.2><XAD.3 LongName=\" City\" >ATLANTA</XAD.3><XAD.4 LongName=\" State or province\" >GA</XAD.4><XAD.5 LongName=\" Zip or postal code\" >40000</XAD.5><XAD.6 LongName=\" Country\" >USA</XAD.6><XAD.7 LongName=\" Address type\" >HOME</XAD.7></PID.11><PID.13 LongName=\" Phone Number - Home\" ><XTN.1 LongName=\" [(999)] 999-9999 [X99999][C any text]\" >5555555555</XTN.1><XTN.2 LongName=\" Telecommunication use code\" >HOME</XTN.2></PID.13><PID.13 LongName=\" Phone Number - Home\" ><XTN.1 LongName=\" [(999)] 999-9999 [X99999][C any text]\" >6666666666</XTN.1><XTN.2 LongName=\" Telecommunication use code\" >YAHOO@YAHOO.COM</XTN.2><XTN.3 LongName=\" Telecommunication equipment type (ID)\" >EMAIL</XTN.3></PID.13><PID.14 LongName=\" Phone Number - Business\" ><XTN.1 LongName=\" [(999)] 999-9999 [X99999][C any text]\" >6666666666</XTN.1><XTN.2 LongName=\" Telecommunication use code\" >BUS</XTN.2></PID.14><PID.15 LongName=\" Primary Language\" ><CE.1 LongName=\" Identifier\" >ENG</CE.1></PID.15><PID.16 LongName=\" Marital Status\" >M</PID.16><PID.17 LongName=\" Religion\" >OTH</PID.17><PID.18 LongName=\" Patient Account Number\" ><CX.1 LongName=\" ID\" >12345665161</CX.1><CX.4 LongName=\" Assigning authority\" ><HD.1 LongName=\" Namespace ID\" >EUH FIN</HD.1></CX.4><CX.5 LongName=\" Identifier type code\" >FIN NBR</CX.5><CX.6 LongName=\" Assigning facility\" ><HD.1 LongName=\" Namespace ID\" >EH01</HD.1></CX.6></PID.18><PID.19 LongName=\" SSN Number - Patient\" >123454103</PID.19><PID.20 LongName=\" Driver's License Number\" ><DLN.1 LongName=\" Driver's License Number\" >GA123450071</DLN.1></PID.20><PID.22 LongName=\" Ethnic Group\" >Non-Hispanic</PID.22><PID.25 LongName=\" Birth Order\" >0</PID.25><PID.26 LongName=\" Citizenship\" >\" \" </PID.26><PID.27 LongName=\" Veterans Military Status\" ><CE.1 LongName=\" Identifier\" >\" \" </CE.1></PID.27><PID.28 LongName=\" Nationality Code\" ><CE.1 LongName=\" Identifier\" >\" \" </CE.1></PID.28><PID.30 LongName=\" Patient Death Indicator\" >N</PID.30></PID></ADT_A01>" ;
237+ var expectedMessageControlId = "Q2043855220T2330403781X928163" ;
238+ var expectedDob = "19400101" ;
239+
240+ var parser = new DefaultXMLParser ( ) ;
241+
242+ // Act
243+ var parsed = parser . Parse ( message ) ;
244+
245+ var adtA01 = parsed as ADT_A01 ; // a08 is mapped to a01
246+
247+ // Assert
248+ Assert . IsNotNull ( adtA01 ) ;
249+ Assert . AreEqual ( expectedMessageControlId , adtA01 . MSH . MessageControlID . Value ) ;
250+ Assert . AreEqual ( expectedDob , adtA01 . PID . DateOfBirth . TimeOfAnEvent . Value ) ;
251+ }
252+
232253 [ Test ]
233254 public void Encode_OmdO03_CorrectlyHandlesEscaping ( )
234255 {
@@ -345,6 +366,7 @@ public void Encode_GenericMessage_WorksAsExpected(string version)
345366 // Arrange
346367 var xmlParser = new DefaultXMLParser ( ) ;
347368 var type = GenericMessage . GetGenericMessageClass ( version ) ;
369+ var expectedElementName = $ "GenericMessageV{ version . Replace ( "." , string . Empty ) } ";
348370
349371 var constructor = type . GetConstructor ( new [ ] { typeof ( IModelClassFactory ) } ) ;
350372 var message = ( IMessage ) constructor ? . Invoke ( new object [ ] { new DefaultModelClassFactory ( ) } ) ;
@@ -354,7 +376,7 @@ public void Encode_GenericMessage_WorksAsExpected(string version)
354376
355377 // Assert
356378 Assert . IsNotNull ( document ) ;
357- Assert . AreEqual ( $ "GenericMessageV { version . Replace ( "." , string . Empty ) } " , document . DocumentElement ? . LocalName ) ;
379+ Assert . AreEqual ( expectedElementName , document . DocumentElement ? . LocalName ) ;
358380 Assert . IsNotNull ( xmlParser . Encode ( message ) ) ;
359381 }
360382
@@ -374,38 +396,26 @@ public void Encode_AdtA01_CanBeParsedAgain()
374396 Console . WriteLine ( decodedMessage . ToString ( ) ) ;
375397 }
376398
377- [ Test ]
378- public void IncludeLongNameInEncodedXML_EncodingOptions ( )
399+ [ Test ]
400+ public void Encode_WithParserOption_IncludeLongNameInEncodedXMLIsTrue_ResultContainsLongNameAttribute ( )
379401 {
380- var message = @"MSH|^~\&|KISsystem|ZTM|NIDAklinikserver|HL7Proxy|201902271130||ADT^A01|68371142|P|2.3
381- EVN|A01|201902271130|201902271130" ;
402+ // Arrange
403+ var message = "MSH|^~\\ &|KISsystem|ZTM|NIDAklinikserver|HL7Proxy|201902271130||ADT^A01|68371142|P|2.3\r "
404+ + "EVN|A01|201902271130|201902271130" ;
382405
383- var expectedEncodedMessage = @"<ADT_A01 xmlns=""urn:hl7-org:v2xml""><MSH><MSH.1 LongName=""Field Separator"">|</MSH.1><MSH.2 LongName=""Encoding Characters"">^~\&</MSH.2><MSH.3 LongName=""Sending Application""><HD.1 LongName=""Namespace ID"">KISsystem</HD.1></MSH.3><MSH.4 LongName=""Sending Facility""><HD.1 LongName=""Namespace ID"">ZTM</HD.1></MSH.4><MSH.5 LongName=""Receiving Application""><HD.1 LongName=""Namespace ID"">NIDAklinikserver</HD.1></MSH.5><MSH.6 LongName=""Receiving Facility""><HD.1 LongName=""Namespace ID"">HL7Proxy</HD.1></MSH.6><MSH.7 LongName=""Date / Time of Message""><TS.1 LongName=""Time of an event"">201902271130</TS.1></MSH.7><MSH.9 LongName=""Message Type""><CM_MSG.1 LongName=""Message type"">ADT</CM_MSG.1><CM_MSG.2 LongName=""Trigger event"">A01</CM_MSG.2></MSH.9><MSH.10 LongName=""Message Control ID"">68371142</MSH.10><MSH.11 LongName=""Processing ID""><PT.1 LongName=""Processing ID"">P</PT.1></MSH.11><MSH.12 LongName=""Version ID"">2.3</MSH.12></MSH><EVN><EVN.1 LongName=""Event Type Code"">A01</EVN.1><EVN.2 LongName=""Recorded Date/Time""><TS.1 LongName=""Time of an event"">201902271130</TS.1></EVN.2><EVN.3 LongName=""Date/Time Planned Event""><TS.1 LongName=""Time of an event"">201902271130</TS.1></EVN.3></EVN></ADT_A01>" ;
406+ var expectedEncodedMessage = @"<?xml version=""1.0"" encoding=""utf-8""?><ADT_A01 xmlns=""urn:hl7-org:v2xml""><MSH><MSH.1 LongName=""Field Separator"">|</MSH.1><MSH.2 LongName=""Encoding Characters"">^~\&</MSH.2><MSH.3 LongName=""Sending Application""><HD.1 LongName=""Namespace ID"">KISsystem</HD.1></MSH.3><MSH.4 LongName=""Sending Facility""><HD.1 LongName=""Namespace ID"">ZTM</HD.1></MSH.4><MSH.5 LongName=""Receiving Application""><HD.1 LongName=""Namespace ID"">NIDAklinikserver</HD.1></MSH.5><MSH.6 LongName=""Receiving Facility""><HD.1 LongName=""Namespace ID"">HL7Proxy</HD.1></MSH.6><MSH.7 LongName=""Date / Time of Message""><TS.1 LongName=""Time of an event"">201902271130</TS.1></MSH.7><MSH.9 LongName=""Message Type""><CM_MSG.1 LongName=""Message type"">ADT</CM_MSG.1><CM_MSG.2 LongName=""Trigger event"">A01</CM_MSG.2></MSH.9><MSH.10 LongName=""Message Control ID"">68371142</MSH.10><MSH.11 LongName=""Processing ID""><PT.1 LongName=""Processing ID"">P</PT.1></MSH.11><MSH.12 LongName=""Version ID"">2.3</MSH.12></MSH><EVN><EVN.1 LongName=""Event Type Code"">A01</EVN.1><EVN.2 LongName=""Recorded Date/Time""><TS.1 LongName=""Time of an event"">201902271130</TS.1></EVN.2><EVN.3 LongName=""Date/Time Planned Event""><TS.1 LongName=""Time of an event"">201902271130</TS.1></EVN.3></EVN></ADT_A01>" ;
384407
385408 var parser = new PipeParser ( ) ;
386- var options = new ParserOptions { IncludeLongNameInEncodedXml = true } ;
409+ var xmlParser = new DefaultXMLParser ( ) ;
410+ var options = new ParserOptions { IncludeLongNameInEncodedXml = true , PrettyPrintEncodedXml = false } ;
387411
388- var parsed = parser . Parse ( message , options ) ;
389- var encodedMessage = parser . Encode ( parsed , options ) ;
412+ var parsed = parser . Parse ( message ) ;
390413
391- Assert . AreEqual ( expectedEncodedMessage , encodedMessage ) ;
392- }
393-
394- [ Test ]
395- public void IncludeLongNameInEncodedXML_ParserOptions ( )
396- {
397- var message =
398- "MSH|^~\\ &|MILL|EMRY|MQ|EMRY|20150619155451||ADT^A08|Q2043855220T2330403781X928163|P|2.3||||||8859/1\r "
399- + "EVN|A08|20150619155451\r "
400- + "PID|1|935307^^^EUH MRN^MRN^EH01|25106376^^^TEC MRN~1781893^^^CLH MRN~935307^^^EUH MRN~5938067^^^EMPI|1167766^^^CPI NBR^^EXTERNAL~90509411^^^HNASYSID~10341880^^^HNASYSID~50627780^^^HNASYSID~5938067^^^MSG_CERNPHR|Patient^Test^Test^^^^Cur_Name||19400101|F||WHI|123 ENDOFTHE RD^UNIT 123^ATLANTA^GA^40000^USA^HOME^^||5555555555^HOME~6666666666^YAHOO@YAHOO.COM^EMAIL|6666666666^BUS|ENG|M|OTH|12345665161^^^EUH FIN^FIN NBR^EH01|123454103|GA123450071||Non-Hispanic|||0|\" \" |\" \" |\" \" ||N" ;
401-
402- var parser = new PipeParser ( ) ;
403- var options = new ParserOptions { IncludeLongNameInEncodedXml = true } ;
414+ // Act
415+ var encodedMessage = xmlParser . Encode ( parsed , options ) ;
404416
405- var parsed = parser . Parse ( message , options ) ;
406- var adtA01 = parsed as ADT_A01 ; // a08 is mapped to a01
407-
408- Assert . IsNotNull ( adtA01 ) ;
417+ // Assert
418+ Assert . AreEqual ( expectedEncodedMessage , encodedMessage ) ;
409419 }
410420
411421 private static void SetMessageHeader ( IMessage msg , string messageCode , string messageTriggerEvent , string processingId )
0 commit comments