Before you create a message, you need to load the message library. This library contains HL7 2.x definitions.
A library was created for each HL7 version. Library names formatted as BSHL7XX.BSL, XX is HL7 version -without dot '.'- number.
For HL7 2.2 version library name BSHL722.BSL
.
For HL7 2.3.1 version library name BSHL7231.BSL
.
//Load library... procedure TForm1.FormCreate(Sender: TObject); begin BSHL7Library.LoadFromFile('BSHL722.BSL'); end;
//Load library... procedure TForm1.FormCreate(Sender: TObject); begin BSHL7Library.LoadFromFile('..\data\BSHL722.BSL'); end; procedure TForm1.bMessageCreateClick(Sender: TObject); var msg : TbsADT_A01_22; begin try msg := TbsADT_A01_22.Create; // Populate the MSH Segment msg.MSH.Sendingfacility.Value:='Sending'; msg.MSH.Sequencenumber.Value:='123'; // Populate the PID Segment msg.PID.PatientName.FamilyName.AsString:='Doe'; msg.PID.PatientName.GivenName.AsString:='John'; msg.PID.PatientIDInternalID[0].IDNumber.AsString:='123456'; Memo1.Lines.Append(msg.AsHL7); // MSH|^~\&|||Sending|||||||||123 // PID|||123456||Doe^John finally msg.Free; end; end;
//Load library... procedure TForm1.FormCreate(Sender: TObject); begin BSHL7Library.LoadFromFile('..\data\BSHL722.BSL'); end; procedure TForm1.bParseMessageClick(Sender: TObject); var msg : TbsADT_A01_22; ASending : string; ASeq : string; AFName : string; AGName : string; AIDNumber : string; begin try msg := TbsADT_A01_22.Create; msg.AsHL7:='MSH|^~\&|||Sending|||||||||123'+#13+ 'EVN|'+#13+ 'PID|||123456||Doe^John'+#13+ 'PV1|'+#13+#10; // Get the Sendingfacility value ASending := msg.MSH.Sendingfacility.Value; //Sending ASeq := msg.MSH.Sequencenumber.Value; //123; // Access the PID Segment AFName := msg.PID.PatientName.FamilyName.AsString; //Doe AGName := msg.PID.PatientName.GivenName.AsString; //John AIDnumber:=msg.PID.PatientIDInternalID[0].IDNumber.AsString; //123456 finally msg.Free; end; end;
const MsgORU_R01_22 = 'MSH|^~\&|ABL735^ABL735 Operating Theatres|ABL735^ABL735 Operating Theatres|||'+ '20010516135518||ORU^R01|20010516135518|P^not present|2.2' + #13 + 'PID|1|||F87248654|Doe^John|||U' + #13 + 'OBR|1||6^Sample #||||||||O||||Arterial^' + #13 + 'NTE|1|L|443' + #13 + 'OBX|1|ST|^pH^M||7.600|||N|||F|||20010503151400||' + #13 + 'OBX|2|ST|^pO2^M||127|mmHg||N|||F|||||' + #13 + 'OBX|3|ST|^pCO2^M||20.4|mmHg||N|||F|||||' + #13 + 'OBX|4|ST|^Cl-^M||73|mmol/L||N|||F|||||' + #13 + 'OBX|5|ST|^K+^M||5.5|mmol/L||N|||F|||||' + #13 + 'OBX|6|ST|^Na+^M||125|mmol/L||N|||F|||||' + #13 + 'OBX|7|ST|^Glu^M||11.3|mmol/L||N|||F|||||' + #13 + 'OBX|8|ST|^Lac^M||10.0|mmol/L||N|||F|||||' + #13 + 'OBX|9|ST|^Ca++^M||0.36|mmol/L||N|||F|||||' + #13 + 'OBX|10|ST|^tHb^M||17.3|g/dL||N|||F|||||' + #13 + 'NTE|1|L|314' + #13 + 'OBX|11|ST|^sO2^M||.....|%||N|||F|||||' + #13 + 'NTE|1|L|314' + #13 + 'OBX|12|ST|^O2Hb^M||-58.4|%||<|||F|||||' + #13 + 'NTE|1|L|314^94' + #13 + 'OBX|13|ST|^COHb^M||110.4|%||>|||F|||||' + #13 + 'NTE|1|L|314^93' + #13 + 'OBX|14|ST|^MetHb^M||-6.5|%||<|||F|||||' + #13 + 'NTE|1|L|314^94' + #13 + 'OBX|15|ST|^tBil^M||.....|micromol/L||<|||F|||||' + #13 + 'NTE|1|L|314^94' + #13 + 'OBX|16|ST|^T^I||37.0|Cel|||||F|||||' + #13 + 'OBX|17|ST|^FIO2^D||21.0|%|||||F|||||' + #13 + 'OBX|18|ST|^pH(T)^M||7.600|||N|||F|||||' + #13 + 'OBX|19|ST|^pCO2(T)^M||20.4|mmHg||N|||F|||||' + #13 + 'OBX|20|ST|^SBE^C||-1.5|mmol/L|||||F|||||' + #13 + 'OBX|21|ST|^pO2(T)^M||127|mmHg||N|||F|||||'+ #13#10; //Load library... procedure TForm1.FormCreate(Sender: TObject); begin BSHL7Library.LoadFromFile('..\data\BSHL722.BSL'); end; procedure TForm1.bParseMessageAdvClick(Sender: TObject); var msg : TbsORU_R01_22; Patient : TbsPN_22; observation : TbsORU_R01_PATIENT_RESULT_ORDER_OBSERVATION_OBSERVATION_22; i : integer; begin Memo1.Lines.Append('Message Parse (Advanced)'); msg := TbsORU_R01_22.Create; //Parse message msg.AsString := MsgORU_R01_22; Patient:=msg.PATIENT_RESULT[0].PATIENT.PID.PatientName; // Shows John Memo1.Lines.Append('Patient Name : '+Patient.GivenName.AsString); Memo1.Lines.Add( 'OBSERVATIONRepCount : ' + IntToStr( msg.PATIENT_RESULT[0].ORDER_OBSERVATION[0].OBSERVATIONRepCount) ); for i:=0 to msg.PATIENT_RESULT[0].ORDER_OBSERVATION[0].OBSERVATIONRepCount-1 do begin observation := msg.PATIENT_RESULT[0].ORDER_OBSERVATION[0].OBSERVATION[i]; Memo1.Lines.Append( observation.OBX.ObservationIdentifier.Text.AsString+#9#9+ observation.OBX.ObservationValue.AsString); end; { OBSERVATIONRepCount : 21 pH 7.600 pO2 127 pCO2 20.4 Cl- 73 K+ 5.5 Na+ 125 Glu 11.3 Lac 10.0 Ca++ 0.36 tHb 17.3 sO2 ..... O2Hb -58.4 COHb 110.4 MetHb -6.5 tBil ..... T 37.0 FIO2 21.0 pH(T) 7.600 pCO2(T) 20.4 SBE -1.5 pO2(T) 127 } FreeAndNil(msg); end;
There are more than one property to assign a value. These are listed below :
AsString | Used to assign a value to the area. If the value is encoded in the special separator characters.msg.PID.PatientName.FamilyName.AsString:='Doe'; |
RawValue | Used to assign a value to the area. If the value is not encoded in the special separator characters.adt_a01.MSH.FieldSeparator.RawValue:='|'; |
//Load library... procedure TForm1.FormCreate(Sender: TObject); begin BSHL7Library.LoadFromFile('..\data\BSHL724.BSL'); end; procedure TForm1.bMessageCreateAdvClick(Sender: TObject); var msg : TbsORU_R01_24; msh : TbsMSH_24; pid: TbsPID_24; obr: TbsOBR_24; obx: TbsOBX_24; sn : TbsSN_24; begin msg:=TbsORU_R01_24.Create; //MSH msh:= msg.MSH; msh.SendingApplication.NamespaceID.AsString:='GHH LAB'; msh.SendingFacility.NamespaceID.AsString:='ELAB-3'; msh.ReceivingApplication.NamespaceID.AsString:='GHH OE'; msh.ReceivingFacility.NamespaceID.AsString:='BLDG4'; msh.DateTimeOfMessage.TimeOfAnEvent.AsString:='200202150930'; msh.MessageControlID.AsString:='CNTRL-3456'; //PID pid:=msg.PATIENT_RESULT[0].PATIENT.PID; pid.PatientIdentifierList[0].ID.AsString:='555-44-4444'; pid.PatientName[0].Familyname.Surname.AsString:='EVERYWOMAN'; pid.PatientName[0].Givenname.AsString:='EVE'; pid.PatientName[0].Secondandfurthergivennamesorinitialsthereof.AsString:='E'; pid.PatientName[0].Nametypecode.AsString:='L'; pid.MothersMaidenName[0].Familyname.Surname.AsString:='JONES'; pid.DateTimeOfBirth.TimeOfAnEvent.AsString:='196203520'; pid.AdministrativeSex.AsString:='F'; pid.PatientAddress[0].Streetaddress.Streetormailingaddress.AsString:='153 FERNWOOD DR.'; pid.PatientAddress[0].City.AsString:='STATESVILLE'; pid.PatientAddress[0].Stateorprovince.AsString:='OH'; pid.PatientAddress[0].Ziporpostalcode.AsString:='35292'; pid.PhoneNumberHome[0].Telephonenumber.AsString:='(206)3345232'; pid.PhoneNumberBusiness[0].Telephonenumber.AsString:='(206)752-121'; pid.PatientAccountNumber.ID.AsString:='AC555444444'; pid.DriversLicenseNumberPatient.Driverslicensenumber.AsString:='67-A4335'; pid.DriversLicenseNumberPatient.Issuingstate_province_country.AsString:='OH'; pid.DriversLicenseNumberPatient.Expirationdate.AsString:='20030520'; // OBR obr:=msg.PATIENT_RESULT[0].ORDER_OBSERVATION[0].OBR; obr.SetIDOBR.AsString:='1'; obr.PlacerOrderNumber.Entityidentifier.AsString:='845439'; obr.PlacerOrderNumber.NamespaceID.AsString:='GHH OE'; obr.FillerOrderNumber.Entityidentifier.AsString:='1045813'; obr.FillerOrderNumber.NamespaceID.AsString:='GHH LAB'; obr.UniversalServiceIdentifier.Identifier.AsString:='1554-5'; obr.UniversalServiceIdentifier.Text.AsString:='GLUCOSE'; obr.UniversalServiceIdentifier.Nameofcodingsystem.AsString:='LN'; obr.ObservationDateTime.TimeOfAnEvent.AsString:='200202150730'; obr.OrderingProvider[0].IDnumber.AsString:='555-55-5555'; obr.OrderingProvider[0].Familyname.Surname.AsString:='PRIMARY'; obr.OrderingProvider[0].Givenname.AsString:='PATRICIA P'; obr.OrderingProvider[0].Degree.AsString:='MD'; obr.OrderingProvider[0].Assigningauthority.NamespaceID.AsString:='LEVEL SEVEN HEALTHCARE, INC.'; obr.ResultStatus.AsString:='F'; obr.PrincipalResultInterpreter.OPName.IDNumber.AsString:='444-44-4444'; obr.PrincipalResultInterpreter.OPName.FamilyName.AsString:='HIPPOCRATES'; obr.PrincipalResultInterpreter.OPName.GivenName.AsString:='HOWARD H'; obr.PrincipalResultInterpreter.OPName.Degree.AsString:='MD'; // OBX obx:=msg.PATIENT_RESULT[0].ORDER_OBSERVATION[0].OBSERVATION[0].OBX; obx.SetIDOBX.AsString:='1'; obx.ValueType.AsString:='SN'; obx.ObservationIdentifier.Identifier.AsString:='1554-5'; obx.ObservationIdentifier.Text.AsString:='GLUCOSE POST 12H CFST'; obx.ObservationIdentifier.Nameofcodingsystem.AsString:='LN'; sn:=TbsSN_24.Create; sn.Num1.AsString:='182'; obx.ObservationValue[0]:= sn; obx.Units.Identifier.AsString:= 'mg/dl'; obx.ReferencesRange.AsString:='70-105'; obx.AbnormalFlags.AsString:='H'; obx.ObservationResultStatus.AsString:='F'; // XML format Memo1.Lines.Append('Message Create (Advanced)'); Memo1.Lines.Text:=msg.AsXML; FreeAndNil(msg); end;
<ORU_R01 xmlns="urn:hl7-org:v2xml"> <MSH> <MSH.1>|</MSH.1> <MSH.2>^~\&</MSH.2> <MSH.3> <HD.1>GHH LAB</HD.1> </MSH.3> <MSH.4> <HD.1>ELAB-3</HD.1> </MSH.4> <MSH.5> <HD.1>GHH OE</HD.1> </MSH.5> <MSH.6> <HD.1>BLDG4</HD.1> </MSH.6> <MSH.7> <TS.1>200202150930</TS.1> </MSH.7> <MSH.9> <MSG.1>ORU</MSG.1> <MSG.2>R01</MSG.2> </MSH.9> <MSH.10>CNTRL-3456</MSH.10> <MSH.11> <PT.1>P</PT.1> </MSH.11> <MSH.12> <VID.1>2.4</VID.1> </MSH.12> </MSH> <ORU_R01.PATIENT_RESULT> <ORU_R01.PATIENT> <PID> <PID.3> <CX.1>555-44-4444</CX.1> </PID.3> <PID.5> <XPN.1> <FN.1>EVERYWOMAN</FN.1> </XPN.1> <XPN.2>EVE</XPN.2> <XPN.3>E</XPN.3> <XPN.7>L</XPN.7> </PID.5> <PID.6> <XPN.1> <FN.1>JONES</FN.1> </XPN.1> </PID.6> <PID.7> <TS.1>196203520</TS.1> </PID.7> <PID.8>F</PID.8> <PID.11> <XAD.1> <SAD.1>153 FERNWOOD DR.</SAD.1> </XAD.1> <XAD.3>STATESVILLE</XAD.3> <XAD.4>OH</XAD.4> <XAD.5>35292</XAD.5> </PID.11> <PID.13> <XTN.1>(206)3345232</XTN.1> </PID.13> <PID.14> <XTN.1>(206)752-121</XTN.1> </PID.14> <PID.18> <CX.1>AC555444444</CX.1> </PID.18> <PID.20> <DLN.1>67-A4335</DLN.1> <DLN.2>OH</DLN.2> <DLN.3>20030520</DLN.3> </PID.20> </PID> </ORU_R01.PATIENT> <ORU_R01.ORDER_OBSERVATION> <OBR> <OBR.1>1</OBR.1> <OBR.2> <EI.1>845439</EI.1> <EI.2>GHH OE</EI.2> </OBR.2> <OBR.3> <EI.1>1045813</EI.1> <EI.2>GHH LAB</EI.2> </OBR.3> <OBR.4> <CE.1>1554-5</CE.1> <CE.2>GLUCOSE</CE.2> <CE.3>LN</CE.3> </OBR.4> <OBR.7> <TS.1>200202150730</TS.1> </OBR.7> <OBR.16> <XCN.1>555-55-5555</XCN.1> <XCN.2> <FN.1>PRIMARY</FN.1> </XCN.2> <XCN.3>PATRICIA P</XCN.3> <XCN.7>MD</XCN.7> <XCN.9> <HD.1>LEVEL SEVEN HEALTHCARE, INC.</HD.1> </XCN.9> </OBR.16> <OBR.25>F</OBR.25> <OBR.32> <NDL.1> <CNN.1>444-44-4444</CNN.1> <CNN.2>HIPPOCRATES</CNN.2> <CNN.3>HOWARD H</CNN.3> <CNN.7>MD</CNN.7> </NDL.1> </OBR.32> </OBR> <ORU_R01.OBSERVATION> <OBX> <OBX.1>1</OBX.1> <OBX.2>SN</OBX.2> <OBX.3> <CE.1>1554-5</CE.1> <CE.2>GLUCOSE POST 12H CFST</CE.2> <CE.3>LN</CE.3> </OBX.3> <OBX.5> <SN.2>182</SN.2> </OBX.5> <OBX.6> <CE.1>mg/dl</CE.1> </OBX.6> <OBX.7>70-105</OBX.7> <OBX.8>H</OBX.8> <OBX.11>F</OBX.11> </OBX> </ORU_R01.OBSERVATION> </ORU_R01.ORDER_OBSERVATION> </ORU_R01.PATIENT_RESULT> </ORU_R01>
const START_BLOCK = #$0B; END_BLOCK = #$1C#$0D; //Load library... procedure TForm1.FormCreate(Sender: TObject); begin BSHL7Library.LoadFromFile('..\data\BSHL722.BSL'); end; procedure TForm1.Button1Click(Sender: TObject); var MsgOut : AnsiString; MsgIn : AnsiString; begin MsgOut:='MSH|^~\&|TestSendingSystem||||200701011539||ADT^A01||P|2.2|123'+#13+ 'PID|||123456||Doe^John'+#13; IdTcpClient1.Port := 100; IdTcpClient1.Host := '192.168.1.1'; IdTcpClient1.Connect; // Send Message IdTCPClient1.IOHandler.Write(START_BLOCK+MsgOut+END_BLOCK); // Wait ACK Message MsgIn := IdTCPClient1.IOHandler.ReadLn(END_BLOCK); // Parse message... end;
Download the document to get more information about this product.
This document contains :
- Installation
- Sample code for parse generate hl7 message
- Class properties and methods.
Download document Last Update : 2018-05-1
Class documentation in HTML