public void TestValidHl7Data() { PipeParser parser = new PipeParser(); ORU_R01 oru = new ORU_R01(); oru.MSH.MessageType.MessageType.Value = "ORU"; oru.MSH.MessageType.TriggerEvent.Value = "R01"; oru.MSH.EncodingCharacters.Value = @"^~\&"; oru.MSH.VersionID.VersionID.Value = "2.3.1"; oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType.Value = "FT"; oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).OBR.SetIDOBR.Value = "1"; Varies v = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0); ST text = new ST(oru); text.Value = @"Th&is\.br\is\.br\A T|est\"; v.Data = text; string encodedData = parser.Encode(oru); //Console.WriteLine(encodedData); string[] segs = encodedData.Split('\r'); string[] fields = segs[2].Split('|'); string data = fields[5]; Assert.AreEqual(@"Th\T\is\.br\is\.br\A T\F\est\E\", data); }
public void TestSpecialCharacterEntry() { var parser = new PipeParser(); var oru = new ORU_R01(); oru.MSH.MessageType.MessageType.Value = "ORU"; oru.MSH.MessageType.TriggerEvent.Value = "R01"; oru.MSH.EncodingCharacters.Value = @"^~\&"; oru.MSH.VersionID.VersionID.Value = "2.3.1"; oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType.Value = "FT"; oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).OBR.SetIDOBR.Value = "1"; var v = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0); var text = new ST(oru); text.Value = @"This\.br\is\.br\A Test"; v.Data = text; var encodedData = parser.Encode(oru); Console.WriteLine(encodedData); var msg = parser.Parse(encodedData); Console.WriteLine(msg.GetStructureName()); oru = (ORU_R01)msg; var data = (FT)oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data; Assert.AreEqual(@"This\.br\is\.br\A Test", data.Value); }
public void TestSpecialCharacterEntryEndingSlash() { PipeParser parser = new PipeParser(); ORU_R01 oru = new ORU_R01(); oru.MSH.MessageType.MessageType.Value = "ORU"; oru.MSH.MessageType.TriggerEvent.Value = "R01"; oru.MSH.EncodingCharacters.Value = @"^~\&"; oru.MSH.VersionID.VersionID.Value = "2.3.1"; oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType.Value = "FT"; oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).OBR.SetIDOBR.Value = "1"; Varies v = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0); ST text = new ST(oru); text.Value = @"This\.br\is\.br\A Test~"; v.Data = text; string encodedData = parser.Encode(oru); IMessage msg = parser.Parse(encodedData); oru = (ORU_R01)msg; FT data = (FT)oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data; Assert.AreEqual(@"This\.br\is\.br\A Test~", data.Value); }
// REPORT ///////////////////////////////////////////////////////////////// public void SetReport(ORU_R01 oru, Order order, Report report) { if (report == null) { return; } var status = report.HasAddenda ? "C" : "F"; // corrected/final var time = report.HasAddenda ? ExtractHL7DateTime(report.CorrectedTime) : ExtractHL7DateTime(report.CompletedTime); oru.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.ResultsRptStatusChngDateTime.Time.Value = time; oru.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.ResultStatus.Value = status; var diagnosticServiceId = order.DiagnosticService.Id; var diagnosticServiceName = order.DiagnosticService.Name; SetOBX(oru, diagnosticServiceId, diagnosticServiceName, order.AccessionNumber, status, time); foreach (var part in report.Parts) { var label = part.IsAddendum ? "Addendum" : "Report"; if (report.CompletedTime != null) { SetOBX(oru, diagnosticServiceId, diagnosticServiceName, label + report.Status + "--" + report.CompletedTime.Value.ToString("yyyy/MM/dd"), status, time); } var reportContent = part.ExtendedProperties["ReportContent"]; var reportContentSections = reportContent.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var section in reportContentSections) { SetOBX(oru, diagnosticServiceId, diagnosticServiceName, section, status, time); } } }
public static ORU_R01 ProduceORU_R01(Neusoft.HISFC.Models.Order.Order order, System.Collections.ArrayList results) { ORU_R01 oru = new ORU_R01(); ProduceMSH(oru.MSH, "ORU", "R01", "2005"); ORU_R01_PATIENT_RESULT result = oru.GetPATIENT_RESULT(); ProducePID(result.PATIENT.PID, order.Patient); ProducePV1(result.PATIENT.VISIT.PV1, order.Patient.PVisit); ORU_R01_ORDER_OBSERVATION orderObs = result.GetORDER_OBSERVATION(); ProduceOBR(orderObs.OBR, order); int i = 1; foreach (ObservationResult observationResult in results) { ORU_R01_OBSERVATION obs = orderObs.GetOBSERVATION(i - 1); ProduceOBX(obs.OBX, observationResult, i); i++; } return(oru); }
public override void HandleEvent(LogicalHL7EventArgs args) { Platform.Log(LogLevel.Info, "Handling Logical HL7 event {0} for {1}", args.EventType, Peer); var order = GetOrder(args); var patientProfile = GetPatientProfile(order); var visit = GetVisit(patientProfile, order); var report = args.IsReportEvent() ? GetReport(args) : null; if (report == null) { //should log this weird condtion return; } var applicableProcedures = args.IsProcedureEvent() ? CollectionUtils.Select(report.Procedures, orderProcedure => args.ProcedureOID.Equals(orderProcedure.OID)) : (IEnumerable <Procedure>)order.Procedures; foreach (var procedure in applicableProcedures) { var message = new ORU_R01(); var helper = new MessageHelper("CCRis", "CCRisFacility", "TestPeer", "TestPeerFacility"); helper.SetMSH(message.MSH, "ORU", "R01"); helper.SetOBR(message.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR, order, procedure); helper.SetORC(message.GetPATIENT_RESULT().GetORDER_OBSERVATION().ORC, order, procedure, GetOrderControlCode(args.EventType)); helper.SetPID(message.GetPATIENT_RESULT().PATIENT.PID, patientProfile); helper.SetPV1(message.GetPATIENT_RESULT().PATIENT.VISIT.PV1, visit); helper.SetTQ1(message.GetPATIENT_RESULT().GetORDER_OBSERVATION().GetTIMING_QTY().TQ1, procedure); helper.SetOrderNotes(message, order); helper.SetReport(message, order, report); EnqueueMessage(message, "ORU^R01"); } }
public void Test_26DataTypesParseCorrectly(string message) { var parser = new PipeParser(); var oru = new ORU_R01(); oru = (ORU_R01)parser.Parse(message); int expectedObservationCount = 3; int parsedObservations = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).OBSERVATIONRepetitionsUsed; bool parsedCorrectNumberOfObservations = parsedObservations == expectedObservationCount; Assert.IsTrue(parsedCorrectNumberOfObservations, string.Format("Expected {1} OBX repetitions used for this segment, found {0}", parsedObservations, expectedObservationCount)); int index = 0; var obs = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(index).OBX.GetObservationValue().FirstOrDefault(); Assert.IsTrue(obs.Data is DT); index++; obs = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(index).OBX.GetObservationValue().FirstOrDefault(); Assert.IsTrue(obs.Data is ST); index++; obs = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(index).OBX.GetObservationValue().FirstOrDefault(); Assert.IsTrue(obs.Data is TM); }
public void TestSpecialCharacterEncoding() { PipeParser parser = new PipeParser(); ORU_R01 oru = new ORU_R01(); oru = (ORU_R01)parser.Parse(GetMessage()); FT data = (FT)oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data; Assert.AreEqual(@"This\.br\is\.br\A Test", data.Value); }
/// <summary> /// Get PATIENT_RESULT Records from ORU_R01 /// </summary> public static IEnumerable GetPATIENT_RESULTRecords(this ORU_R01 message) { object[] result = message.GetRecords("PATIENT_RESULTRepetitionsUsed", "GetPATIENT_RESULT"); if ((result != null) && (result.Count() > 0)) { for (int i = 0; i < result.Count(); i++) { yield return(result[i]); } } }
private ED ExtractEncapsulatedPdfDataInBase64Format(ORU_R01 oruMessage) { //start retrieving the OBX segment data to get at the PDF report content LogToDebugConsole("Extracting message data from parsed message.."); var orderObservation = oruMessage.GetPATIENT_RESULT().GetORDER_OBSERVATION(); var observation = orderObservation.GetOBSERVATION(0); var obxSegment = observation.OBX; var encapsulatedPdfDataInBase64Format = obxSegment.GetObservationValue(0).Data as ED; return(encapsulatedPdfDataInBase64Format); }
public void TestOBR5RepeatingValuesMessage() { var parser = new PipeParser(); var oru = new ORU_R01(); oru = (ORU_R01)parser.Parse(GetMessage()); foreach (var obs in oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION().OBX.GetObservationValue()) { Assert.IsTrue(obs.Data is FT); } }
/*You can pass in a domain or data transfer object as a parameter * when integrating with data from your application here * I will leave that to you to explore on your own * Using fictional data here for illustration*/ public ORU_R01 Build() { var currentDateTimeString = GetCurrentTimeStamp(); _oruR01Message = new ORU_R01(); CreateMshSegment(currentDateTimeString); CreatePidSegment(); CreatePv1Segment(); CreateObrSegment(); CreateObxSegment(); return(_oruR01Message); }
public void SetOrderNotes(ORU_R01 oru, Order order) { var i = 0; foreach (var orderNote in OrderNote.GetNotesForOrder(order, "General", false)) { var nte = oru.GetPATIENT_RESULT().GetORDER_OBSERVATION().GetNTE(i); nte.SetIDNTE.Value = (i + 1).ToString(CultureInfo.InvariantCulture); nte.SourceOfComment.Value = "????"; nte.GetComment(0).Value = orderNote.Body; i++; } }
public void TestOBR5RepeatingValuesMessage_DataTypesAndRepetitions() { var parser = new PipeParser(); var oru = new ORU_R01(); oru = (ORU_R01) parser.Parse(GetMessage()); int expectedObservationCount = 3; int parsedObservations = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).OBSERVATIONRepetitionsUsed; bool parsedCorrectNumberOfObservations = parsedObservations == expectedObservationCount; Assert.IsTrue(parsedCorrectNumberOfObservations, string.Format("Expected 3 OBX repetitions used for this segment, found {0}", parsedObservations)); foreach (var obs in oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION().OBX.GetObservationValue()) { Assert.IsTrue(obs.Data is FT); } }
private void SetOBX(ORU_R01 oru, string identifier, string name, string observation, string status, string time) { var rep = oru.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBSERVATIONRepetitionsUsed; var obx = oru.GetPATIENT_RESULT().GetORDER_OBSERVATION().GetOBSERVATION(rep).OBX; obx.SetIDOBX.Value = (rep + 1).ToString(CultureInfo.InvariantCulture); obx.ValueType.Value = "TX"; obx.ObservationIdentifier.Identifier.Value = identifier; obx.ObservationIdentifier.Text.Value = name; //use text data type for OBX data var tx = new TX(oru); obx.GetObservationValue(0).Data = tx; tx.Value = observation; obx.ObservationResultStatus.Value = status; obx.DateTimeOfTheObservation.Time.Value = time; }
public void TestORUR01_Enumerators() { string hl7Data = @"MSH|^~\&|Paceart|Medtronic|||20160628142621||ORU^R01^ORU_R01|20160628142621000001|P|2.6|||AL|NE|||||IHE_PCD_ORU_R01^IHE PCD^1.3.6.1.4.1.19376.1.6.1.9.1^ISO PID|||MODEL:A3DR01 Advisa DR MRI/SERIAL:PZK600806S^^^MDT^U~^^^^Patient ID~A10000641^^^^Paceart||Patient^Test||19100000000000+0000 PV1|1|A OBR|1||dfac748c-213c-e611-80c5-000c2996266c|754050^MDC_IDC_ENUM_SESS_TYPE_InClinic^MDC^INCLINIC^INCLINIC^MDT|||20160627041809+0000||||||||||||||||||P OBX|1|ST|||TestString||||||P OBX|2|NM|||9001||||||P OBX|3|DTM|||20160627041809+0000||||||P"; PipeParser parser = new PipeParser(); IMessage msg = parser.Parse(hl7Data); Assert.IsNotNull(msg, "Message should not be null"); ORU_R01 oruR01 = (ORU_R01)msg; Assert.AreEqual("R01", oruR01.MSH.MessageType.TriggerEvent.Value); Assert.AreEqual(null, oruR01.GetPATIENT_RESULT(0).PATIENT.PID.SetIDPID.Value); foreach (var result in oruR01.PATIENT_RESULTs) { foreach (var orderObservation in result.ORDER_OBSERVATIONs) { int index = 1; foreach (var observation in orderObservation.OBSERVATIONs) { if (index == 1) { Assert.IsTrue("ST" == observation.OBX.ValueType.Value); } else if (index == 2) { Assert.IsTrue("NM" == observation.OBX.ValueType.Value); } else if (index == 3) { Assert.IsTrue("DTM" == observation.OBX.ValueType.Value); } index++; } Assert.IsTrue(index == 4); } } }
public void ParseORUr01LongToXml() { string Message = @"MSH|^~\$|LAB|DHC|LCR|DH|200511291403||ORU^R01|52780002432|P|2.3.1 PID|0001|3013839|40206609||BARNES^TEST||19551005|F|||||||||||258452152 OBR||00009^001|W442|CBC^CBC|||200509210520||||||||CBC^CBC|117564^STEEL||||||||DAH OBX|1|NM|WBC||20.0|k/uL|4.5-10.0|H|||Z OBX|1|TX|WBC|1|(Ref Range: 4 k/uL)|k/uL|4.5-10.0||||Z OBX|2|NM|RBC||4.00|M/uL|4.20-5.40|L|||Z OBX|2|TX|RBC|1|(Ref Range: 4 M/uL)|M/uL|4.20-5.40||||Z OBX|3|NM|HGB||12.0|g/dL|14.0-24.0|L|||Z OBX|3|TX|HGB|1|(Ref Range: 1 g/dL)|g/dL|14.0-24.0||||Z OBX|4|NM|HCT||41.0|%|37.0-47.0||||Z OBX|4|TX|HCT|1|(Ref Range: 3 %)|%|37.0-47.0||||Z OBX|5|NM|MCV||80.9|fl|80.0-100.0||||Z OBX|5|TX|MCV|1|(Ref Range: 8 fl)|fl|80.0-100.0||||Z OBX|6|NM|MCH||31.0|pg|27.0-31.0||||Z OBX|6|TX|MCH|1|(Ref Range: 2 pg)|pg|27.0-31.0||||Z OBX|7|NM|MCHC||32.0|g/dL|32.0-36.0||||Z OBX|7|TX|MCHC|1|(Ref Range: 3 g/dL)|g/dL|32.0-36.0||||Z OBX|8|NM|RDW||19.0|%|11.5-14.5|H|||Z OBX|8|TX|RDW|1|(Ref Range: 1 %)|%|11.5-14.5||||Z OBX|9|NM|PLTC||45|k/uL|150-400|PL^Y|||Z OBX|9|TX|PLTC|1|(Ref Range: 1 k/uL)|k/uL|150-400||||Z OBX|10|NM|MPV||10.0|fL|6.2-10.0||||Z OBX|10|TX|MPV|1|(Ref Range: 6 fL)|fL|6.2-10.0||||Z "; PipeParser Parser = new PipeParser(); IMessage m = Parser.Parse(Message); ORU_R01 msg = m as ORU_R01; XMLParser xmlParser = new DefaultXMLParser(); string recoveredMessage = xmlParser.Encode(msg); Assert.AreNotEqual(string.Empty, recoveredMessage); XmlDocument orrDoc = new XmlDocument(); orrDoc.LoadXml(recoveredMessage); Assert.IsNotNull(orrDoc); }
public void Test_26DataTypesParseCorrectly() { var message = "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.6|||AL|||ASCII\r" + "PID|1||1711114||Appt^Test||19720501||||||||||||001020006\r" + "ORC|||||F\r" + "OBR|1|||ehipack^eHippa Acknowlegment|||200610120839|||||||||00002^eProvider^Electronic|||||||||F\r" + "OBX|1|DT|||DTValue||||||F\r" + "OBX|2|ST|||STValue||||||F\r" + "OBX|3|TM|||TMValue||||||F\r" + "OBX|4|ID|||IDValue||||||F\r" + "OBX|5|IS|||ISValue||||||F"; var parser = new LegacyPipeParser(); var oru = new ORU_R01(); oru = (ORU_R01)parser.Parse(message); var expectedObservationCount = 5; var parsedObservations = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).OBSERVATIONRepetitionsUsed; var parsedCorrectNumberOfObservations = parsedObservations == expectedObservationCount; Assert.IsTrue( parsedCorrectNumberOfObservations, string.Format("Expected {1} OBX repetitions used for this segment, found {0}", parsedObservations, expectedObservationCount)); var index = 0; var obs = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(index).OBX.GetObservationValue().FirstOrDefault(); Assert.IsTrue(obs.Data is DT); index++; obs = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(index).OBX.GetObservationValue().FirstOrDefault(); Assert.IsTrue(obs.Data is ST); index++; obs = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(index).OBX.GetObservationValue().FirstOrDefault(); Assert.IsTrue(obs.Data is TM); index++; obs = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(index).OBX.GetObservationValue().FirstOrDefault(); Assert.IsTrue(obs.Data is ID); index++; obs = oru.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(index).OBX.GetObservationValue().FirstOrDefault(); Assert.IsTrue(obs.Data is IS); }
public void ParseKnownMessageTypeFromFile() { string filePath = @"C:\Users\Duane\Desktop\ParseErrors\20160628_142635469_b94dde77-857a-4881-8915-6814809c5442.HL7"; string fileContents = File.ReadAllText(filePath); PipeParser parser = new PipeParser(); IMessage msg = parser.Parse(fileContents); Assert.IsNotNull(msg, "Message should not be null"); ORU_R01 oruR01 = (ORU_R01)msg; Assert.AreEqual("R01", oruR01.MSH.MessageType.TriggerEvent.Value); Assert.AreEqual(null, oruR01.GetPATIENT_RESULT(0).PATIENT.PID.SetIDPID.Value); var knownDTM = oruR01.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType.Value; Assert.AreEqual("DTM", knownDTM); var knownDTMValue = oruR01.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data as DTM; Assert.AreEqual("20160627041809+0000", knownDTMValue.ToString()); }
public void WhenSegmentParsedAndEscaped_SegmentValueIsEncoded() { // Arrange var oruR01 = new ORU_R01(); var ft = new FT(oruR01); oruR01.GetRESPONSE().GetORDER_OBSERVATION().GetOBSERVATION().OBX.ValueType.Value = "FT"; oruR01.GetRESPONSE().GetORDER_OBSERVATION().GetOBSERVATION().OBX.GetObservationValue(0).Data = ft; ft.Value = "H \\H\\ N \\N\\ "; // Act / Assert Assert.AreEqual("H \\H\\ N \\N\\ ", ft.Value); Assert.AreEqual("H \\H\\ N \\N\\ ", PipeParser.Encode(ft, encodingCharacters)); ft.Value = "H \\C00FF\\ N"; Assert.AreEqual("H \\C00FF\\ N", ft.Value); Assert.AreEqual("H \\C00FF\\ N", PipeParser.Encode(ft, encodingCharacters)); }
public void TestORUR01_HasDTMFieldParsed() { string hl7Data = @"MSH|^~\&|Paceart|Medtronic|||20160628142621||ORU^R01^ORU_R01|20160628142621000001|P|2.6|||AL|NE|||||IHE_PCD_ORU_R01^IHE PCD^1.3.6.1.4.1.19376.1.6.1.9.1^ISO PID|||MODEL:A3DR01 Advisa DR MRI/SERIAL:PZK600806S^^^MDT^U~^^^^Patient ID~A10000641^^^^Paceart||Patient^Test||19100000000000+0000 PV1|1|A OBR|1||dfac748c-213c-e611-80c5-000c2996266c|754050^MDC_IDC_ENUM_SESS_TYPE_InClinic^MDC^INCLINIC^INCLINIC^MDT|||20160627041809+0000||||||||||||||||||P OBX|1|DTM|721025^MDC_IDC_SESS_DTM^MDC||20160627041809+0000||||||P"; PipeParser parser = new PipeParser(); IMessage msg = parser.Parse(hl7Data); Assert.IsNotNull(msg, "Message should not be null"); ORU_R01 oruR01 = (ORU_R01)msg; Assert.AreEqual("R01", oruR01.MSH.MessageType.TriggerEvent.Value); Assert.AreEqual(null, oruR01.GetPATIENT_RESULT(0).PATIENT.PID.SetIDPID.Value); var knownDTM = oruR01.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType.Value; Assert.AreEqual("DTM", knownDTM); var knownDTMValue = oruR01.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data as DTM; Assert.AreEqual("20160627041809+0000", knownDTMValue.ToString()); }
public void TestInsertNewRepetition() { // Arrange var input = "MSH|^~\\&|ULTRA|TML|OLIS|OLIS|200905011130||ORU^R01|20169838|T|2.5\r" + "PID|||7005728^^^TML^MR||TEST^RACHEL^DIAMOND||19310313|F|||200 ANYWHERE ST^^TORONTO^ON^M6G 2T9||(416)888-8888||||||1014071185^KR\r" + "PV1|1||OLIS||||OLIST^BLAKE^DONALD^THOR^^^^^921379^^^^OLIST\r" + "ORC|RE||T09-100442-RET-0^^OLIS_Site_ID^ISO|||||||||OLIST^BLAKE^DONALD^THOR^^^^L^921379\r" + "OBR|0||T09-100442-RET-0^^OLIS_Site_ID^ISO|RET^RETICULOCYTE COUNT^HL79901 literal|||200905011106|||||||200905011106||OLIST^BLAKE^DONALD^THOR^^^^L^921379||7870279|7870279|T09-100442|MOHLTC|200905011130||B7|F||1^^^200905011106^^R\r" + "OBX|1\r" + "OBX|3\r" + "OBX|4\r"; var expected = "MSH|^~\\&|ULTRA|TML|OLIS|OLIS|200905011130||ORU^R01|20169838|T|2.5\r" + "PID|||7005728^^^TML^MR||TEST^RACHEL^DIAMOND||19310313|F|||200 ANYWHERE ST^^TORONTO^ON^M6G 2T9||(416)888-8888||||||1014071185^KR\r" + "PV1|1||OLIS||||OLIST^BLAKE^DONALD^THOR^^^^^921379^^^^OLIST\r" + "ORC|RE||T09-100442-RET-0^^OLIS_Site_ID^ISO|||||||||OLIST^BLAKE^DONALD^THOR^^^^L^921379\r" + "OBR|0||T09-100442-RET-0^^OLIS_Site_ID^ISO|RET^RETICULOCYTE COUNT^HL79901 literal|||200905011106|||||||200905011106||OLIST^BLAKE^DONALD^THOR^^^^L^921379||7870279|7870279|T09-100442|MOHLTC|200905011130||B7|F||1^^^200905011106^^R\r" + "OBX|1\r" + "OBX|2\r" + "OBX|3\r" + "OBX|4\r"; var oruR01 = new ORU_R01(); var parser = new PipeParser(); parser.Parse(oruR01, input); // Action var newGroup = oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().AddOBSERVATION(); newGroup.OBX.SetIDOBX.Value = "2"; var result = parser.Encode(oruR01); // Assert Assert.AreEqual(expected, result); }
public void TestORUR01_AddAndRemoveMethods() { string hl7Data = @"MSH|^~\&|Paceart|Medtronic|||20160628142621||ORU^R01^ORU_R01|20160628142621000001|P|2.6|||AL|NE|||||IHE_PCD_ORU_R01^IHE PCD^1.3.6.1.4.1.19376.1.6.1.9.1^ISO PID|||MODEL:A3DR01 Advisa DR MRI/SERIAL:PZK600806S^^^MDT^U~^^^^Patient ID~A10000641^^^^Paceart||Patient^Test||19100000000000+0000 PV1|1|A OBR|1||dfac748c-213c-e611-80c5-000c2996266c|754050^MDC_IDC_ENUM_SESS_TYPE_InClinic^MDC^INCLINIC^INCLINIC^MDT|||20160627041809+0000||||||||||||||||||P OBX|1|ST|||TestString||||||P OBX|2|NM|||9001||||||P OBX|3|DTM|||20160627041809+0000||||||P"; PipeParser parser = new PipeParser(); IMessage msg = parser.Parse(hl7Data); Assert.IsNotNull(msg, "Message should not be null"); ORU_R01 oruR01 = (ORU_R01)msg; Assert.AreEqual("R01", oruR01.MSH.MessageType.TriggerEvent.Value); Assert.AreEqual(null, oruR01.GetPATIENT_RESULT(0).PATIENT.PID.SetIDPID.Value); foreach (var result in oruR01.PATIENT_RESULTs) { foreach (var orderObservation in result.ORDER_OBSERVATIONs) { // Add observation of value type 'NO' and assert that the array reflects the expected state int beforeCount = orderObservation.OBSERVATIONs.Count(); var newObservation = orderObservation.AddOBSERVATION(); newObservation.OBX.ValueType.Value = "NO"; int afterAddCount = orderObservation.OBSERVATIONs.Count(); Assert.IsTrue(afterAddCount > beforeCount); var last = orderObservation.OBSERVATIONs.Last().OBX.ValueType.Value; Assert.IsTrue("NO" == last); // Remove added observation of value type 'NO' using object reference and assert that the array reflects the expected state orderObservation.RemoveOBSERVATION(newObservation); int afterRemoveCount = orderObservation.OBSERVATIONs.Count(); Assert.IsTrue(afterRemoveCount == beforeCount); last = orderObservation.OBSERVATIONs.Last().OBX.ValueType.Value; Assert.IsTrue("DTM" == last); // Added observation of value type 'NO' using object reference and assert that the array reflects the expected state newObservation = orderObservation.AddOBSERVATION(); newObservation.OBX.ValueType.Value = "NO"; afterAddCount = orderObservation.OBSERVATIONs.Count(); Assert.IsTrue(afterAddCount > beforeCount); // Remove added observation of value type 'NO' using index and assert that the array reflects the expected state orderObservation.RemoveOBSERVATIONAt(orderObservation.OBSERVATIONRepetitionsUsed - 1); afterRemoveCount = orderObservation.OBSERVATIONs.Count(); Assert.IsTrue(afterRemoveCount == beforeCount); last = orderObservation.OBSERVATIONs.Last().OBX.ValueType.Value; Assert.IsTrue("DTM" == last); // Assert that the array reflects the expected initial state int index = 1; foreach (var observation in orderObservation.OBSERVATIONs) { if (index == 1) { Assert.IsTrue("ST" == observation.OBX.ValueType.Value); } else if (index == 2) { Assert.IsTrue("NM" == observation.OBX.ValueType.Value); } else if (index == 3) { Assert.IsTrue("DTM" == observation.OBX.ValueType.Value); } index++; } Assert.IsTrue(index == 4); // Remove the middle 'NM' Field and assert that the array reflects the expected state orderObservation.RemoveOBSERVATIONAt(1); index = 1; foreach (var observation in orderObservation.OBSERVATIONs) { if (index == 1) { Assert.IsTrue("ST" == observation.OBX.ValueType.Value); } else if (index == 2) { Assert.IsTrue("DTM" == observation.OBX.ValueType.Value); } index++; } Assert.IsTrue(index == 3); // Remove the first Item by object reference and assert that the remaining item is the 'DTM' field orderObservation.RemoveOBSERVATION(orderObservation.OBSERVATIONs.First()); var lastRemaining = orderObservation.OBSERVATIONs.First(); Assert.IsTrue("DTM" == lastRemaining.OBX.ValueType.Value); Assert.IsTrue(orderObservation.OBSERVATIONRepetitionsUsed == 1); } } }
/// <summary> /// Get all PATIENT_RESULT Records from ORU_R01 /// </summary> public static List <ORU_R01_PATIENT_RESULT> GetAllPATIENT_RESULTRecords(this ORU_R01 message) { return(message.GetAllRecords <ORU_R01_PATIENT_RESULT>("PATIENT_RESULTRepetitionsUsed", "GetPATIENT_RESULT")); }
/// <summary> /// Add a new ORU_R01 to PATIENT_RESULT /// </summary> public static ORU_R01_PATIENT_RESULT AddPATIENT_RESULT(this ORU_R01 message) { return(message.GetPATIENT_RESULT(message.PATIENT_RESULTRepetitionsUsed)); }
public static void PLdataReceived(object receivedata, string name)//处理血小板样本测试结果 ORU_RO1 { PLManager.PL12 data = (PLManager.PL12)receivedata; HL7Manager.HL7Struct hl7 = new HL7Manager.HL7Struct(); hl7.Item = new List <string>(); PipeParser Parser = new PipeParser(); ORU_R01 oruR01 = new ORU_R01(); #region 消息段封装 //MSH段,位于消息最前面 oruR01.MSH.FieldSeparator.Value = "|"; oruR01.MSH.EncodingCharacters.Value = @"^~\&"; oruR01.MSH.SendingApplication.NamespaceID.Value = GlobalVariable.Manufacturer; //仪器供应商 oruR01.MSH.SendingFacility.NamespaceID.Value = data.DEVEICE; oruR01.MSH.DateTimeOfMessage.TimeOfAnEvent.SetLongDate(DateTime.Now); //当前时间 oruR01.MSH.MessageType.MessageType.Value = "ORU"; oruR01.MSH.MessageType.TriggerEvent.Value = "R01"; oruR01.MSH.MessageControlID.Value = "1"; oruR01.MSH.ProcessingID.ProcessingID.Value = "P"; oruR01.MSH.VersionID.VersionID.Value = "2.3.1"; oruR01.MSH.ApplicationAcknowledgmentType.Value = "0";//样本测试结果 oruR01.MSH.GetCharacterSet(0).Value = GlobalVariable.SocketCode ? "ASCII" : "UTF8"; //没有病人信息,PID段直接省略 //OBR段,用于传输关于检验报告相关的医嘱信息 oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.SetIDOBR.Value = "1"; oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.PlacerOrderNumber.EntityIdentifier.Value = data.SAMPLE_ID; oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.ObservationDateTime.TimeOfAnEvent.SetLongDate(data.TEST_TIME); //0BX段,用于在报告消息中传递观察的信息 ORU_R01_ORDER_OBSERVATION orderObservation = oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION(); int num = data.Result.Count(); if (num != 0) { OBX[] obx = new OBX[num + 1]; CE[] ce = new CE[num + 1]; Varies value; obx[0] = orderObservation.GetOBSERVATION(0).OBX; obx[0].SetIDOBX.Value = "1"; obx[0].ValueType.Value = "NM"; obx[0].ObservationSubID.Value = "AAP"; obx[0].ObservationIdentifier.Identifier.Value = "诱聚剂项目"; ce[0] = new CE(oruR01); value = obx[0].GetObservationValue(0); value.Data = ce[0]; ce[0].Identifier.Value = data.AAP; for (int i = 1; i <= num; i++) { obx[i] = orderObservation.GetOBSERVATION(i).OBX; obx[i].SetIDOBX.Value = (i + 1).ToString(); obx[i].ValueType.Value = "NM"; obx[i].ObservationSubID.Value = data.Result[i - 1].ITEM; obx[i].ObservationIdentifier.Identifier.Value = data.Result[i - 1].FULL_NAME; ce[i] = new CE(oruR01); value = obx[i].GetObservationValue(0); value.Data = ce[i]; ce[i].Identifier.Value = data.Result[i - 1].RESULT.ToString(); if (data.Result[i - 1].UNIT != string.Empty) { obx[i].Units.Identifier.Value = data.Result[i - 1].UNIT; } if (data.Result[i - 1].NORMAL_HIGH != 0) { obx[i].ReferencesRange.Value = data.Result[i - 1].NORMAL_LOW.ToString() + "---" + data.Result[i - 1].NORMAL_HIGH.ToString(); obx[i].GetAbnormalFlags(0).Value = data.Result[i - 1].INDICATE; } hl7.Item.Add(data.Result[i - 1].ITEM); } } #endregion hl7.HL7Message = Parser.Encode(oruR01); hl7.Sample_ID = data.SAMPLE_ID; hl7.Device = data.DEVEICE; hl7Manager.AddHL7(hl7); }
public static void DSdataReceived(object receivedata, string name)//处理生化仪样本测试结果 ORU_R01 { DI800Manager.DI800 data = (DI800Manager.DI800)receivedata; HL7Manager.HL7Struct hl7 = new HL7Manager.HL7Struct(); hl7.Item = new List <string>(); PipeParser Parser = new PipeParser(); ORU_R01 oruR01 = new ORU_R01(); #region 消息段封装 //MSH段,位于消息最前面 oruR01.MSH.FieldSeparator.Value = "|"; oruR01.MSH.EncodingCharacters.Value = @"^~\&"; oruR01.MSH.SendingApplication.NamespaceID.Value = GlobalVariable.Manufacturer; //仪器供应商 oruR01.MSH.SendingFacility.NamespaceID.Value = data.Device; oruR01.MSH.DateTimeOfMessage.TimeOfAnEvent.SetLongDate(DateTime.Now); //当前时间 oruR01.MSH.MessageType.MessageType.Value = "ORU"; oruR01.MSH.MessageType.TriggerEvent.Value = "R01"; oruR01.MSH.MessageControlID.Value = "1"; oruR01.MSH.ProcessingID.ProcessingID.Value = "P"; oruR01.MSH.VersionID.VersionID.Value = "2.3.1"; oruR01.MSH.ApplicationAcknowledgmentType.Value = "0";//样本测试结果 oruR01.MSH.GetCharacterSet(0).Value = GlobalVariable.SocketCode ? "ASCII" : "UTF8"; //PID段,主要用来构建病人的个人信息 oruR01.GetPATIENT_RESULT().PATIENT.PID.SetIDPID.Value = "1";//这个值还要商榷 oruR01.GetPATIENT_RESULT().PATIENT.PID.GetPatientIdentifierList(0).ID.Value = data.PATIENT_ID; oruR01.GetPATIENT_RESULT().PATIENT.PID.GetAlternatePatientIDPID(0).ID.Value = data.BED; oruR01.GetPATIENT_RESULT().PATIENT.PID.GetPatientName(0).FamilyLastName.FamilyName.Value = data.FIRST_NAME; oruR01.GetPATIENT_RESULT().PATIENT.PID.GetMotherSMaidenName(0).FamilyLastName.FamilyName.Value = data.AREA; oruR01.GetPATIENT_RESULT().PATIENT.PID.Sex.Value = data.SEX; //OBR段,用于传输关于检验报告相关的医嘱信息 oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.SetIDOBR.Value = "1"; oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.PlacerOrderNumber.EntityIdentifier.Value = data.SAMPLE_ID; oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.ObservationDateTime.TimeOfAnEvent.SetLongDate(data.TIME); oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.SpecimenReceivedDateTime.TimeOfAnEvent.SetLongDate(data.SEND_TIME); oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.FillerField1.Value = data.DOCTOR; oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.FillerField2.Value = data.DEPARTMENT; //oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.SpecimenReceivedDateTime.TimeOfAnEvent.Value = data.TIME; //0BX段,用于在报告消息中传递观察的信息 ORU_R01_ORDER_OBSERVATION orderObservation = oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION(); int num = data.Result.Count(); if (num != 0) { OBX[] obx = new OBX[num]; CE[] ce = new CE[num]; Varies value; for (int i = 0; i < num; i++) { obx[i] = orderObservation.GetOBSERVATION(i).OBX; obx[i].SetIDOBX.Value = (i + 1).ToString(); obx[i].ValueType.Value = "NM"; obx[i].ObservationSubID.Value = data.Result[i].ITEM; obx[i].ObservationIdentifier.Identifier.Value = data.Result[i].FULL_NAME; ce[i] = new CE(oruR01); value = obx[i].GetObservationValue(0); value.Data = ce[i]; ce[i].Identifier.Value = data.Result[i].RESULT.ToString(); obx[i].Units.Identifier.Value = data.Result[i].UNIT; obx[i].ReferencesRange.Value = data.Result[i].NORMAL_LOW.ToString() + "---" + data.Result[i].NORMAL_HIGH.ToString(); obx[i].GetAbnormalFlags(0).Value = data.Result[i].RESULT > data.Result[i].NORMAL_HIGH ? "H" : (data.Result[i].RESULT < data.Result[i].NORMAL_LOW ? "L" : "N"); obx[i].NatureOfAbnormalTest.Value = data.Result[i].INDICATE; hl7.Item.Add(data.Result[i].ITEM); } } #endregion hl7.HL7Message = Parser.Encode(oruR01); hl7.Sample_ID = data.SAMPLE_ID; hl7.Device = data.Device; hl7.SendTime = data.SEND_TIME.ToString(); hl7Manager.AddHL7(hl7); log.Info("HL7 DS package " + hl7.Sample_ID); }
protected void linkBtnSave_OnClick(object sender, EventArgs e) { SqlCommand cmdSave = new SqlCommand(); SqlCommand cmdLoad = new SqlCommand(); DataSet dsPathologyID; int newPathologyID = 0; try { gClass.MakeStoreProcedureName(ref cmdSave, "sp_PatientPathology_UpdatePathology", true); //save pathology id cmdSave.Parameters.Add("@OrganizationCode", SqlDbType.Int).Value = Convert.ToInt32(gClass.OrganizationCode); cmdSave.Parameters.Add("@PatientID", SqlDbType.Int).Value = Convert.ToInt32(Request.Cookies["PatientID"].Value); cmdSave.Parameters.Add("@PathologyBaseline", SqlDbType.VarChar).Value = "progress"; cmdSave.Parameters.Add("@DeletedByUser", SqlDbType.VarChar, 50).Value = Context.Request.Cookies["Logon_UserName"].Value; cmdSave.Parameters.Add("@DateDeleted", SqlDbType.DateTime).Value = Convert.ToDateTime(txtHCurrentDate.Value); gClass.ExecuteDMLCommand(cmdSave); gClass.SaveUserLogFile(Context.Request.Cookies["UserPracticeCode"].Value, Context.Request.Cookies["Logon_UserName"].Value, Context.Request.Url.Host, "EMR Form", 2, "Save Pathology", "PID:", Context.Request.Cookies["PatientID"].Value); gClass.MakeStoreProcedureName(ref cmdLoad, "sp_PatientPathology_LastPathologyID", true); cmdLoad.Parameters.Add("@OrganizationCode", SqlDbType.Int).Value = Convert.ToInt32(gClass.OrganizationCode); cmdLoad.Parameters.Add("@PatientID", SqlDbType.Int).Value = Convert.ToInt32(Request.Cookies["PatientID"].Value); dsPathologyID = gClass.FetchData(cmdLoad, "tblPatientPathology"); Int32.TryParse(dsPathologyID.Tables[0].Rows[0]["PathologyID"].ToString(), out newPathologyID); } catch (Exception err) { gClass.AddErrorLogData(Context.Request.Cookies["UserPracticeCode"].Value, Context.Request.Url.Host, Context.Request.Cookies["Logon_UserName"].Value, "EMR PID : " + Context.Request.Cookies["PatientID"].Value, "Save Pathology", err.ToString()); } if (newPathologyID > 0) { //save pathology data try { string strDocumentName = ""; string strFilePath = GetFilePath(txtFile.PostedFile.FileName); if (strFilePath.Trim() != "") { if (System.IO.File.Exists(strFilePath)) { System.IO.File.Delete(strFilePath); } strDocumentName = txtFile.PostedFile.FileName; txtFile.PostedFile.SaveAs(strFilePath); StreamReader streamReader = new StreamReader(strFilePath); string message = streamReader.ReadToEnd(); streamReader.Close(); PipeParser parser = new PipeParser(); IMessage m = parser.Parse(message); ORU_R01 oruR01 = m as ORU_R01; oruR01 = oruR01; string testID = ""; string testName = ""; string testValue = ""; string testUnit = ""; string testRange = ""; string testStatus = ""; string testDate = ""; string pathologyDate = ""; string year = ""; string month = ""; string date = ""; gClass.MakeStoreProcedureName(ref cmdSave, "sp_PatientPathology_InsertPathologyData", true); cmdSave.Parameters.Clear(); cmdSave.Parameters.Add("@OrganizationCode", SqlDbType.Int).Value = Convert.ToInt32(gClass.OrganizationCode); cmdSave.Parameters.Add("@PatientID", SqlDbType.Int).Value = Convert.ToInt32(Request.Cookies["PatientID"].Value); cmdSave.Parameters.Add("@PathologyID", SqlDbType.Int).Value = newPathologyID; cmdSave.Parameters.Add("@PathologyDataDate", SqlDbType.DateTime); cmdSave.Parameters.Add("@SectionID", SqlDbType.Int); cmdSave.Parameters.Add("@TestID", SqlDbType.VarChar); cmdSave.Parameters.Add("@TestName", SqlDbType.VarChar); cmdSave.Parameters.Add("@TestValue", SqlDbType.VarChar); cmdSave.Parameters.Add("@TestUnit", SqlDbType.VarChar); cmdSave.Parameters.Add("@TestRange", SqlDbType.VarChar); cmdSave.Parameters.Add("@TestStatus", SqlDbType.VarChar); //gClass.TruncateDate(dvPatient[0]["BirthDate"].ToString().Trim(), Request.Cookies["CultureInfo"].Value, 1); for (int i = 0; i < oruR01.RESPONSERepetitionsUsed; i++) { for (int j = 0; j < oruR01.GetRESPONSE(i).ORDER_OBSERVATIONRepetitionsUsed; j++) { testDate = oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).OBR.RequestedDateTime.TimeOfAnEvent.Value.ToString(); year = testDate.Substring(0, 4); month = testDate.Substring(4, 2); date = testDate.Substring(6, 2); pathologyDate = date + "-" + month + "-" + year; cmdSave.Parameters["@PathologyDataDate"].Value = gClass.TruncateDate(pathologyDate, Request.Cookies["CultureInfo"].Value, 1); for (int k = 0; k < oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).OBSERVATIONRepetitionsUsed; k++) { testID = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.ObservationIdentifier.Identifier.Value); testName = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.ObservationIdentifier.Text.Value); testValue = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.GetObservationValue(0).Data); testUnit = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.Units.Identifier.Value); testRange = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.ReferencesRange.Value); testStatus = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.AbnormalFlagsRepetitionsUsed); cmdSave.Parameters["@SectionID"].Value = i; cmdSave.Parameters["@TestID"].Value = testID; cmdSave.Parameters["@TestName"].Value = testName; cmdSave.Parameters["@TestValue"].Value = testValue; cmdSave.Parameters["@TestUnit"].Value = testUnit; cmdSave.Parameters["@TestRange"].Value = testRange; cmdSave.Parameters["@TestStatus"].Value = testStatus; gClass.ExecuteDMLCommand(cmdSave); gClass.SaveUserLogFile(Context.Request.Cookies["UserPracticeCode"].Value, Context.Request.Cookies["Logon_UserName"].Value, Context.Request.Url.Host, "EMR Form", 2, "Save Pathology Data", "PID:", Context.Request.Cookies["PatientID"].Value); } } } if (pathologyDate != "") { gClass.MakeStoreProcedureName(ref cmdSave, "sp_PatientPathology_UpdatePathology", true); cmdSave.Parameters.Clear(); //save pathology id cmdSave.Parameters.Add("@OrganizationCode", SqlDbType.Int).Value = Convert.ToInt32(gClass.OrganizationCode); cmdSave.Parameters.Add("@PatientID", SqlDbType.Int).Value = Convert.ToInt32(Request.Cookies["PatientID"].Value); cmdSave.Parameters.Add("@PathologyID", SqlDbType.Int).Value = Convert.ToInt32(newPathologyID); cmdSave.Parameters.Add("@PathologyDate", SqlDbType.DateTime).Value = gClass.TruncateDate(pathologyDate, Request.Cookies["CultureInfo"].Value, 1); gClass.ExecuteDMLCommand(cmdSave); } } } catch (Exception err) { gClass.AddErrorLogData(Context.Request.Cookies["UserPracticeCode"].Value, Context.Request.Url.Host, Context.Request.Cookies["Logon_UserName"].Value, "PID : " + Context.Request.Cookies["PatientID"].Value, "Save Pathology Data", err.ToString()); } Response.Redirect("~/Forms/Labs/LabForm.aspx?PatID=" + newPathologyID, false); } }
protected void ImportPathology(object sender, EventArgs e) { try { String[] FileControl = new String[] { "textFile1", "textFile2", "textFile3", "textFile4", "textFile5", "textFile6", "textFile7", "textFile8", "textFile9", "textFile10" }; string filePath = ""; int patientFound = 0; int patientNotFound = 0; int fileCount = 0; int fileSuccessCount = 0; int fileFailCount = 0; Boolean failImport = false; string fileFailList = ""; string patientSuccessList = ""; string patientFailList = ""; HtmlInputFile tempControlFile = new HtmlInputFile(); for (int Xh = 0; Xh < FileControl.Length; Xh++) { tempControlFile = (HtmlInputFile)FindControlRecursive(this.Page, FileControl[Xh]); filePath = GetFilePath(tempControlFile.PostedFile.FileName); if (tempControlFile.PostedFile.FileName != "") { fileCount++; if (Path.GetExtension(tempControlFile.PostedFile.FileName).ToUpper() == ".ORU") { fileSuccessCount++; if (System.IO.File.Exists(filePath)) { System.IO.File.Delete(filePath); } tempControlFile.PostedFile.SaveAs(filePath); StreamReader streamReader = new StreamReader(filePath); string message = streamReader.ReadToEnd(); streamReader.Close(); PipeParser parser = new PipeParser(); IMessage m = parser.Parse(message); ORU_R01 oruR01 = m as ORU_R01; oruR01 = oruR01; string testID = ""; string testName = ""; string testValue = ""; string testUnit = ""; string testRange = ""; string testStatus = ""; string testDate = ""; string pathologyDate = ""; string year = ""; string month = ""; string date = ""; string birthyear = ""; string birthmonth = ""; string birthdate = ""; string formattedBirthdate = ""; string unformattedBirthdate = ""; string firstname = ""; string surname = ""; string refFirstname = ""; string refSurname = ""; string refDr = ""; int matchingPatientID = 0; int pathologyID = 0; SqlCommand cmdSave = new SqlCommand(); gClass.MakeStoreProcedureName(ref cmdSave, "sp_PatientPathology_InsertPathologyData", true); cmdSave.Parameters.Add("@OrganizationCode", SqlDbType.Int).Value = Convert.ToInt32(gClass.OrganizationCode); cmdSave.Parameters.Add("@PatientID", SqlDbType.Int); cmdSave.Parameters.Add("@PathologyDataDate", SqlDbType.DateTime); cmdSave.Parameters.Add("@PathologyID", SqlDbType.Int); cmdSave.Parameters.Add("@SectionID", SqlDbType.Int); cmdSave.Parameters.Add("@TestID", SqlDbType.VarChar); cmdSave.Parameters.Add("@TestName", SqlDbType.VarChar); cmdSave.Parameters.Add("@TestValue", SqlDbType.VarChar); cmdSave.Parameters.Add("@TestUnit", SqlDbType.VarChar); cmdSave.Parameters.Add("@TestRange", SqlDbType.VarChar); cmdSave.Parameters.Add("@TestStatus", SqlDbType.VarChar); //gClass.TruncateDate(dvPatient[0]["BirthDate"].ToString().Trim(), Request.Cookies["CultureInfo"].Value, 1); for (int i = 0; i < oruR01.RESPONSERepetitionsUsed; i++) { failImport = false; for (int j = 0; j < oruR01.GetRESPONSE(i).ORDER_OBSERVATIONRepetitionsUsed; j++) { testDate = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).OBR.RequestedDateTime.TimeOfAnEvent.Value.ToString()); unformattedBirthdate = CheckNull(oruR01.GetRESPONSE(i).PATIENT.PID.DateOfBirth.TimeOfAnEvent.Value); firstname = CheckNull(oruR01.GetRESPONSE(i).PATIENT.PID.PatientName.GivenName.Value); surname = CheckNull(oruR01.GetRESPONSE(i).PATIENT.PID.PatientName.FamilyName.Value); formattedBirthdate = ""; refFirstname = CheckNull(oruR01.GetRESPONSE(i).PATIENT.VISIT.PV1.ReferringDoctor.GivenName.Value.ToString()); refSurname = CheckNull(oruR01.GetRESPONSE(i).PATIENT.VISIT.PV1.ReferringDoctor.FamilyName.Value.ToString()); refDr = refFirstname + " " + refSurname; if (surname != "" && firstname != "" && unformattedBirthdate != "") { birthyear = unformattedBirthdate.Substring(0, 4); birthmonth = unformattedBirthdate.Substring(4, 2); birthdate = unformattedBirthdate.Substring(6, 2); formattedBirthdate = birthdate + "-" + birthmonth + "-" + birthyear; SqlCommand cmdSelect = new SqlCommand(); DataSet dsPatient = new DataSet(); gClass.MakeStoreProcedureName(ref cmdSelect, "sp_PatientData_LoadDataByNameDOB", true); cmdSelect.Parameters.Add("@OrganizationCode", System.Data.SqlDbType.Int).Value = Convert.ToInt32(gClass.OrganizationCode); cmdSelect.Parameters.Add("@Surname", System.Data.SqlDbType.VarChar, 40).Value = surname; cmdSelect.Parameters.Add("@Firstname", System.Data.SqlDbType.VarChar, 30).Value = firstname; cmdSelect.Parameters.Add("@Birthdate", System.Data.SqlDbType.DateTime).Value = Convert.ToDateTime(formattedBirthdate); dsPatient = gClass.FetchData(cmdSelect, "tblPatient"); if (dsPatient.Tables[0].Rows.Count > 0) { //insert pathology data record as it is matchingPatientID = Convert.ToInt32(dsPatient.Tables[0].Rows[0]["Patient ID"]); year = testDate.Substring(0, 4); month = testDate.Substring(4, 2); date = testDate.Substring(6, 2); pathologyDate = date + "-" + month + "-" + year; cmdSave.Parameters["@PathologyDataDate"].Value = gClass.TruncateDate(pathologyDate, Request.Cookies["CultureInfo"].Value, 1); //check for pathology record //when saving, check if the record with date is available //if not, add a new one and select the pathology id //if yes, return the pathology id SqlCommand cmdSavePathology = new SqlCommand(); DataSet dsPathology = new DataSet(); gClass.MakeStoreProcedureName(ref cmdSavePathology, "sp_PatientPathology_InsertPathology", true); cmdSavePathology.Parameters.Add("@OrganizationCode", SqlDbType.Int).Value = Convert.ToInt32(gClass.OrganizationCode); cmdSavePathology.Parameters.Add("@PatientID", SqlDbType.Int).Value = Convert.ToInt32(matchingPatientID); cmdSavePathology.Parameters.Add("@PathologyDate", SqlDbType.DateTime).Value = gClass.TruncateDate(pathologyDate, Request.Cookies["CultureInfo"].Value, 1); cmdSavePathology.Parameters.Add("@RefDr", SqlDbType.VarChar, 100).Value = refDr; try { dsPathology = gClass.FetchData(cmdSavePathology, "tblPathology"); gClass.SaveUserLogFile(Context.Request.Cookies["UserPracticeCode"].Value, Context.Request.Cookies["Logon_UserName"].Value, Context.Request.Url.Host, "Import Pathology", 2, "Save Pathology", "PID:", matchingPatientID.ToString()); } catch (Exception err) { gClass.AddErrorLogData(Context.Request.Cookies["UserPracticeCode"].Value, Context.Request.Url.Host, Context.Request.Cookies["Logon_UserName"].Value, "PID : " + Context.Request.Cookies["PatientID"].Value, "Save Pathology", err.ToString()); } if (dsPathology.Tables[0].Rows.Count > 0) { pathologyID = Convert.ToInt32(dsPathology.Tables[0].Rows[0]["PathologyID"]); for (int k = 0; k < oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).OBSERVATIONRepetitionsUsed; k++) { testID = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.ObservationIdentifier.Identifier.Value); testName = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.ObservationIdentifier.Text.Value); testValue = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.GetObservationValue(0).Data); testUnit = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.Units.Identifier.Value); testRange = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.ReferencesRange.Value); testStatus = CheckNull(oruR01.GetRESPONSE(i).GetORDER_OBSERVATION(j).GetOBSERVATION(k).OBX.AbnormalFlagsRepetitionsUsed); cmdSave.Parameters["@PatientID"].Value = matchingPatientID; cmdSave.Parameters["@PathologyID"].Value = pathologyID; cmdSave.Parameters["@SectionID"].Value = i; cmdSave.Parameters["@TestID"].Value = testID; cmdSave.Parameters["@TestName"].Value = testName; cmdSave.Parameters["@TestValue"].Value = testValue; cmdSave.Parameters["@TestUnit"].Value = testUnit; cmdSave.Parameters["@TestRange"].Value = testRange; cmdSave.Parameters["@TestStatus"].Value = testStatus; try { gClass.ExecuteDMLCommand(cmdSave); gClass.SaveUserLogFile(Context.Request.Cookies["UserPracticeCode"].Value, Context.Request.Cookies["Logon_UserName"].Value, Context.Request.Url.Host, "Import Pathology", 2, "Save Pathology Data", "PID:", matchingPatientID.ToString()); } catch (Exception err) { // failed to insert test for which patient in which file name gClass.AddErrorLogData(Context.Request.Cookies["UserPracticeCode"].Value, Context.Request.Url.Host, Context.Request.Cookies["Logon_UserName"].Value, "PID : " + matchingPatientID.ToString(), "Save Pathology Data", err.ToString()); } } } } else { //patient is not exist in the db in which file name patientFailList += "\n-" + firstname + " " + surname + ", " + formattedBirthdate + " (" + tempControlFile.PostedFile.FileName + "): This patient is not exist in our database"; patientNotFound++; failImport = true; break; } } else { //check firstname, surname, dob () should not be empty, in which file name patientFailList += "\n-" + firstname + " " + surname + ", " + formattedBirthdate + "(" + tempControlFile.PostedFile.FileName + "): The data on the file is incomplete. Please check on the firstname, surname and date of birth"; patientNotFound++; failImport = true; break; } } if (failImport == false) { //add to patient success patientSuccessList += "\n-" + firstname + " " + surname + ", " + formattedBirthdate; patientFound++; } } } else { fileFailList += "\n-" + tempControlFile.PostedFile.FileName; fileFailCount++; } } } string validFileNote = fileSuccessCount > 0?"\nValid files: " + fileSuccessCount:""; string invalidFileNote = fileFailCount > 0?"\n\n\nInvalid Files:" + fileFailCount + fileFailList:""; string patientMatchNote = patientFound > 0?"\nMatching records: " + patientFound + patientSuccessList:""; string patientNotMatchNote = patientNotFound > 0?"\n\nNot matching records: " + patientNotFound + patientFailList:""; txtNotes.Value = "RESULT:\n\nTotal files: " + fileCount + validFileNote + patientMatchNote + patientNotMatchNote + invalidFileNote; } catch (Exception err) { gClass.AddErrorLogData(Context.Request.Cookies["UserPracticeCode"].Value, Context.Request.Url.Host, Context.Request.Cookies["Logon_UserName"].Value, "Import Pathology", "Import Pathology", err.ToString()); } LoadLabHistory(); }