Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        // 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);
                }
            }
        }
Ejemplo n.º 5
0
        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");
            }
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        /// <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]);
                }
            }
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
            }
        }
Ejemplo n.º 12
0
        /*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);
        }
Ejemplo n.º 13
0
        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++;
            }
        }
Ejemplo n.º 14
0
		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);
			}
		}
Ejemplo n.º 15
0
        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;
        }
Ejemplo n.º 16
0
        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);
                }
            }
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 19
0
        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());
        }
Ejemplo n.º 20
0
        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));
        }
Ejemplo n.º 21
0
        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());
        }
Ejemplo n.º 22
0
        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);
        }
Ejemplo n.º 23
0
        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);
                }
            }
        }
Ejemplo n.º 24
0
 /// <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"));
 }
Ejemplo n.º 25
0
 /// <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));
 }
Ejemplo n.º 26
0
        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);
        }
Ejemplo n.º 27
0
        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);
        }
Ejemplo n.º 28
0
    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);
        }
    }
Ejemplo n.º 29
0
    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();
    }