Message CreateHL7Message(Examination exam, string version, Patient patient, IExaminationType examType) { Message msg = new Message(); var msh = new Segment(); // MSH|^~\&|LIS|M|||20090518161040||ORU^R01|91380000032|P|2.3| msh.Field(0, @"MSH"); msh.Field(2, @"^~\&"); msh.Field(3, "NurseCube"); msh.Field(4, "M"); msh.Field(5, ""); msh.Field(6, ""); string examDate = DateTime.Parse(exam.Value).ToString("yyyyMMddHHmmss"); msh.Field(7, examDate); msh.Field(8, ""); msh.Field(9, "ORU^R01"); msh.Field(10, exam.Id.ToString()); msh.Field(11, "P"); msh.Field(12, version); msg.Add(msh); var pid = new Segment(); // PID|||15161516^^^^M||TEST^EMR SAMPLE^||19651015|M||||||||||1719| pid.Field(0, "PID"); pid.Field(1, ""); pid.Field(2, patient.ExternalId.ToString()); pid.Field(3, patient.Id.ToString()); pid.Field(4, ""); pid.Field(5, patient.Name); pid.Field(6, "PID"); string birthDate = DateTime.Parse(patient.BirthDate.ToString()).ToString("yyyyMMdd"); pid.Field(7, birthDate); pid.Field(8, patient.Gender.ToString()); pid.Field(9, ""); pid.Field(10, ""); pid.Field(11, ""); pid.Field(12, ""); pid.Field(13, ""); pid.Field(14, ""); pid.Field(15, ""); pid.Field(16, ""); pid.Field(17, ""); pid.Field(17, patient.ExternalId.ToString()); msg.Add(pid); // ORC | RE |||||||||||||||^| var obc = new Segment(); obc.Field(0, "ORC"); obc.Field(1, "RE"); for (int i = 0; i < 14; i++) { obc.Field(i + 2, ""); } obc.Field(1, "^"); msg.Add(obc); var obr = new Segment(); //OBR|||E2905964|^^^ADIF^CBC|||200905041213|||||||200905041223|^|14516^TEST^PHYSICIAN||||M3017||||H|F|CBC^ADIF|^^^^^R|^^~ obr.Field(0, "OBR"); obr.Field(1, ""); obr.Field(2, ""); obr.Field(3, "E2905977"); obr.Field(4, "^^^ADIF^CBC"); obr.Field(5, ""); obr.Field(6, ""); obr.Field(7, examDate); obr.Field(8, ""); obr.Field(9, ""); obr.Field(10, ""); obr.Field(11, ""); obr.Field(12, ""); obr.Field(13, ""); obr.Field(14, examDate); obr.Field(15, "^"); // ToDO Add nurse id obr.Field(16, "14516^TEST^Nurse"); obr.Field(17, ""); obr.Field(18, ""); msg.Add(obr); if (exam.ExaminationType == "SpO2") { var obx = new Segment(); // OBX | 6 | NM | 431314004 ^ SpO2 ^ SNOMED - CT || 90 |%| 94 - 100 | L ||| F ||| 20100511220525 obx.Field(0, "OBX"); obx.Field(1, "6"); obx.Field(2, "NM"); obx.Field(3, "SpO2"); obx.Field(4, ""); obx.Field(5, (examType as SpOData).SPOValue.ToString()); obx.Field(6, "%"); obx.Field(7, "94 - 100"); obx.Field(8, "L"); obx.Field(9, ""); obx.Field(10, ""); obx.Field(11, "F"); obx.Field(12, ""); obx.Field(13, ""); obx.Field(14, examDate); msg.Add(obx); } if (exam.ExaminationType == "Body temperature") { var obx = new Segment(); //OBX|2|NM|386725007 ^Body temperature ^SNOMED-CT||37|C |37|N|||F|||20100511220525 obx.Field(0, "OBX"); obx.Field(1, "2"); obx.Field(2, "NM"); obx.Field(3, "Body temperature"); obx.Field(4, ""); obx.Field(5, (examType as BodyTemperatureData).TemperatureValue.ToString()); obx.Field(6, ""); obx.Field(7, "37"); obx.Field(8, "C"); obx.Field(9, "37"); obx.Field(10, ""); obx.Field(11, ""); obx.Field(12, ""); obx.Field(13, ""); obx.Field(14, examDate); msg.Add(obx); } if (exam.ExaminationType == "BloodPressure") { var obxmBP = new Segment(); //OBX | 1 | NM | 6797001 ^ Mean blood pressure ^ SNOMED - CT || 94 | mm[Hg] | 92 - 96 | N ||| F ||| 20100511220525 obxmBP.Field(0, "OBX"); obxmBP.Field(1, "1"); obxmBP.Field(2, "NM"); obxmBP.Field(3, "Mean blood pressure"); obxmBP.Field(4, ""); obxmBP.Field(5, (examType as BloodPressureData).MeanBloodPressure.ToString()); obxmBP.Field(6, ""); obxmBP.Field(7, "94"); obxmBP.Field(8, "mm[Hg]"); obxmBP.Field(9, "92 - 96"); obxmBP.Field(10, "n"); obxmBP.Field(11, ""); obxmBP.Field(12, ""); obxmBP.Field(13, "F"); obxmBP.Field(14, examDate); msg.Add(obxmBP); var obxmBT = new Segment(); //OBX | 3 | NM | 271649006 ^ Systolic blood pressure ^ SNOMED - CT || 100 | mm[Hg] | 90 - 120 | N ||| F ||| 20100511220725 obxmBT.Field(0, "OBX"); obxmBT.Field(1, "2"); obxmBT.Field(2, "NM"); obxmBT.Field(3, "Systolic blood pressur"); obxmBT.Field(4, ""); obxmBT.Field(5, (examType as BloodPressureData).SystolicValue.ToString()); obxmBT.Field(6, ""); obxmBT.Field(7, "100"); obxmBT.Field(8, "mm[Hg]"); obxmBT.Field(9, "90-120"); obxmBT.Field(10, "n"); obxmBT.Field(11, ""); obxmBT.Field(12, ""); obxmBT.Field(13, "F"); obxmBT.Field(14, examDate); msg.Add(obxmBT); //OBX | 4 | NM | 271650006 ^ Diastolic blood pressure ^ SNOMED - CT || 68 | mm[Hg] | 60 - 80 | N ||| F ||| 20100511220725 var obxmDT = new Segment(); obxmBT.Field(0, "OBX"); obxmBT.Field(1, "3"); obxmDT.Field(2, "NM"); obxmDT.Field(3, "Diastolic blood pressure"); obxmDT.Field(4, ""); obxmDT.Field(5, (examType as BloodPressureData).DiastolicValue.ToString()); obxmDT.Field(6, ""); obxmDT.Field(7, "68"); obxmDT.Field(8, "mm[Hg]"); obxmDT.Field(9, "60-80"); obxmDT.Field(10, "n"); obxmDT.Field(11, ""); obxmDT.Field(12, ""); obxmDT.Field(13, "F"); obxmDT.Field(14, examDate); msg.Add(obxmDT); //OBX|5|NM|78564009 ^Pulse rate ^SNOMED-CT||80|bpm |60-100|N|||F|||20100511220525 var obxmPR = new Segment(); obxmPR.Field(0, "OBX"); obxmPR.Field(1, "4"); obxmPR.Field(2, "NM"); obxmPR.Field(3, "Pulse rate"); obxmPR.Field(4, ""); obxmPR.Field(5, (examType as BloodPressureData).PulseRate.ToString()); obxmPR.Field(6, ""); obxmPR.Field(7, "80"); obxmPR.Field(8, "mm[Hg]"); obxmPR.Field(9, "60-100"); obxmPR.Field(10, "n"); obxmPR.Field(11, ""); obxmPR.Field(12, ""); obxmPR.Field(13, "F"); obxmPR.Field(14, examDate); msg.Add(obxmPR); } return(msg); }
public void AddExaminationToPatient(int patientId, Examination exam, ExaminationType examType, IExaminationType examData, WorkFlow workFlow) { var patient = GetPatient(patientId, true); patient.Examinations.Add(exam); exam.WorkFlow = workFlow; _context.SaveChanges(); if (examType == ExaminationType.BloodPressure) { BloodPressureData ExanData = examData as BloodPressureData; _context.BloodPressureData.Add(examData as BloodPressureData); ExanData.ExaminationId = exam.Id; _context.SaveChanges(); } if (examType == ExaminationType.BloodSpO2) { SpOData ExanData = examData as SpOData; _context.SpOData.Add(examData as SpOData); ExanData.ExaminationId = exam.Id; _context.SaveChanges(); } if (examType == ExaminationType.BodyTemperature) { BodyTemperatureData ExanData = examData as BodyTemperatureData; ExanData.ExaminationId = exam.Id; _context.BodyTemperatureData.Add(examData as BodyTemperatureData); ExanData.ExaminationId = exam.Id; _context.SaveChanges(); } }