예제 #1
0
        public void Should_be_able_to_query_complex_blocks()
        {
            const string message = @"MSH|^~\&|MACHETELAB|^DOSC|MACHETE|18779|20130405125146269||ORM^O01|1999077678|P|2.3|||AL|AL
NTE|1||KOPASD
NTE|2||A3RJ
NTE|3||7ADS
NTE|4||G46DG
PID|1|000000000026|60043^^^MACHETE^MRN||MACHETE^JOE||19890909|F|||123 SEASAME STREET^^Oakland^CA^94600||5101234567|5101234567||||||||||||||||N
PD1|M|F|N||||F|
NTE|1||IN42
PV1|1|O|||||92383^Machete^Janice||||||||||||12345|||||||||||||||||||||||||201304051104
PV2||||||||20150615|20150616|1||||||||||||||||||||||||||N
IN1|1|||MACHETE INC|1234 Fruitvale ave^^Oakland^CA^94601^USA||5101234567^^^^^510^1234567|074394|||||||A1|MACHETE^JOE||19890909|123 SEASAME STREET^^Oakland^CA^94600||||||||||||N|||||666889999|0||||||F||||T||60043^^^MACHETE^MRN
GT1|1|60043^^^MACHETE^MRN|MACHETE^JOE||123 SEASAME STREET^^Oakland^CA^94600|5416666666|5418888888|19890909|F|P
AL1|1|FA|^pollen allergy|SV|jalubu daggu||
ORC|NW|PRO2350||XO934N|||^^^^^R||20130405125144|91238^Machete^Joe||92383^Machete^Janice
OBR|1|PRO2350||11636^Urinalysis, with Culture if Indicated^L|||20130405135133||||N|||||92383^Machete^Janice|||||||||||^^^^^R
DG1|1|I9|788.64^URINARY HESITANCY^I9|URINARY HESITANCY
OBX|1||URST^Urine Specimen Type^^^||URN
NTE|1||abc
NTE|2||dsa
ORC|NW|PRO2351||XO934N|||^^^^^R||20130405125144|91238^Machete^Joe||92383^Machete^Janice
OBR|1|PRO2350||11637^Urinalysis, with Culture if Indicated^L|||20130405135133||||N|||||92383^Machete^Janice|||||||||||^^^^^R
DG1|1|I9|788.64^URINARY HESITANCY^I9|URINARY HESITANCY
OBX|1||URST^Urine Specimen Type^^^||URN
NTE|1||abc
NTE|2||dsa
ORC|NW|PRO2352||XO934N|||^^^^^R||20130405125144|91238^Machete^Joe||92383^Machete^Janice
OBR|1|PRO2350||11638^Urinalysis, with Culture if Indicated^L|||20130405135133||||N|||||92383^Machete^Janice|||||||||||^^^^^R
DG1|1|I9|788.64^URINARY HESITANCY^I9|URINARY HESITANCY
OBX|1||URST^Urine Specimen Type^^^||URN
NTE|1||abc
NTE|2||dsa";

            ParsedResult <HL7Entity> parsed = Parser.Parse(message);

            var result = parsed.Query(q =>
            {
                var obxQuery = from obx in q.Select <OBR>()
                               from nte in q.Select <NTE>().ZeroOrMore()
                               select new
                {
                    OBX = obx,
                    NTE = nte
                };

                var obrQuery = from obr in q.Select <OBR>()
                               from nte in q.Select <NTE>().ZeroOrMore()
                               from ctd in q.Select <CTD>()
                               // .ZeroOrOne()
                               from obx in obxQuery.ZeroOrMore()
                               from dg1 in q.Select <DG1>().ZeroOrMore()
                               select new
                {
                    OBR = obr,
                    NTE = nte,
                    CTD = ctd,
                    OBX = obx,
                    DG1 = dg1
                };

                var testQuery = from orc in q.Select <ORC>().SkipUntil(q.Select <ORC>())
                                from obr in obrQuery.ZeroOrMore()
                                from ft1 in q.Select <FT1>().ZeroOrMore()
                                from cti in q.Select <CTI>().ZeroOrMore()
                                from blg in q.Select <BLG>()
                                // .ZeroOrOne()
                                //from unknown in q.Select<HL7Segment>().Where(x => x.SegmentId.HasValue && x.SegmentId != "ORC")
                                select new
                {
                    ORC   = orc,
                    Tests = obr,
                    CTI   = cti,
                    BLG   = blg
                            //Unknown = unknown
                };

                return(from msh in q.Select <MSH>()
                       from orders in testQuery.ZeroOrMore()
                       select new
                {
                    MSH = msh,
                    Orders = orders
                });
            });

            Assert.That(result.HasValue, Is.True);
            //Assert.That(result.Value.Orders, Is.Not.Empty);

            foreach (var order in result.Value.Orders)
            {
                //    var placerOrderNumber1 = order.Tests[0].OBR.PlacerOrderNumber;
                //    var placerOrderNumber2 = order.Tests[1].OBR.PlacerOrderNumber;
                //    var catalogId1 = order.Tests[0].OBR.UniversalServiceIdentifier;
                //    var catalogId2 = order.Tests[1].OBR.UniversalServiceIdentifier;

                //    Assert.IsTrue(placerOrderNumber1.HasValue);
                //    Assert.IsTrue(placerOrderNumber2.HasValue);
                //    Assert.AreEqual("PRO2350", placerOrderNumber1.Value);
                //    Assert.AreEqual("PRO2351", placerOrderNumber2.Value);
                //    Assert.IsTrue(catalogId1.Value.Identifier.HasValue);
                //    Assert.IsTrue(catalogId2.Value.Identifier.HasValue);
                //    Assert.AreEqual("11636", catalogId1.Value.Identifier.Value);
                //    Assert.AreEqual("11637", catalogId2.Value.Identifier.Value);
                //}
            }
        }
예제 #2
0
        public void Should_be_able_to_query_blocks()
        {
            const string message = @"MSH|^~\&|MACHETELAB|^DOSC|MACHETE|18779|20130405125146269||ORM^O01|1999077678|P|2.3|||AL|AL
NTE|1||KOPASD
NTE|2||A3RJ
NTE|3||7ADS
NTE|4||G46DG
PID|1|000000000026|60043^^^MACHETE^MRN||MACHETE^JOE||19890909|F|||123 SEASAME STREET^^Oakland^CA^94600||5101234567|5101234567||||||||||||||||N
PD1|M|F|N||||F|
NTE|1||IN42
PV1|1|O|||||92383^Machete^Janice||||||||||||12345|||||||||||||||||||||||||201304051104
PV2||||||||20150615|20150616|1||||||||||||||||||||||||||N
IN1|1|||MACHETE INC|1234 Fruitvale ave^^Oakland^CA^94601^USA||5101234567^^^^^510^1234567|074394|||||||A1|MACHETE^JOE||19890909|123 SEASAME STREET^^Oakland^CA^94600||||||||||||N|||||666889999|0||||||F||||T||60043^^^MACHETE^MRN
GT1|1|60043^^^MACHETE^MRN|MACHETE^JOE||123 SEASAME STREET^^Oakland^CA^94600|5416666666|5418888888|19890909|F|P
AL1|1|FA|^pollen allergy|SV|jalubu daggu||
ORC|NW|PRO2350||XO934N|||^^^^^R||20130405125144|91238^Machete^Joe||92383^Machete^Janice
OBR|1|PRO2350||11636^Urinalysis, with Culture if Indicated^L|||20130405135133||||N|||||92383^Machete^Janice|||||||||||^^^^^R
DG1|1|I9|788.64^URINARY HESITANCY^I9|URINARY HESITANCY
OBX|1||URST^Urine Specimen Type^^^||URN
NTE|1||abc
NTE|2||dsa
ORC|NW|PRO2351||XO934N|||^^^^^R||20130405125144|91238^Machete^Joe||92383^Machete^Janice
OBR|1|PRO2350||11637^Urinalysis, with Culture if Indicated^L|||20130405135133||||N|||||92383^Machete^Janice|||||||||||^^^^^R
DG1|1|I9|788.64^URINARY HESITANCY^I9|URINARY HESITANCY
OBX|1||URST^Urine Specimen Type^^^||URN
NTE|1||abc
NTE|2||dsa
ORC|NW|PRO2352||XO934N|||^^^^^R||20130405125144|91238^Machete^Joe||92383^Machete^Janice
OBR|1|PRO2350||11638^Urinalysis, with Culture if Indicated^L|||20130405135133||||N|||||92383^Machete^Janice|||||||||||^^^^^R
DG1|1|I9|788.64^URINARY HESITANCY^I9|URINARY HESITANCY
OBX|1||URST^Urine Specimen Type^^^||URN
NTE|1||abc
NTE|2||dsa";

            ParsedResult <HL7Entity> parsed = Parser.Parse(message);

            var result = parsed.Query(q =>
            {
                var obxQuery = from obx in q.Select <OBX>()
                               from nte in q.Select <NTE>().ZeroOrMore()
                               select new
                {
                    OBX = obx,
                    NTE = nte
                };

                var obrQuery = from obr in q.Select <OBR>()
                               from dg1 in q.Select <DG1>().Optional()
                               from obx in obxQuery.Optional()
                               select new
                {
                    OBR = obr,
                    DG1 = dg1,
                    OBX = obx,
                };

                var testQuery = from orc in q.Select <ORC>()
                                from obr in obrQuery.ZeroOrMore()
                                select new
                {
                    ORC   = orc,
                    Tests = obr
                };

                return(from msh in q.Select <MSH>()
                       from ignored in q.Except <HL7Segment, ORC>().ZeroOrMore()
                       from orders in testQuery.ZeroOrMore()
                       select new
                {
                    MSH = msh,
                    Orders = orders
                });
            });

            Assert.That(result.HasValue, Is.True);

            var orderedTests = result.Value.Orders;

            Assert.AreEqual(3, orderedTests.Count);
            //Assert.That(result.Value.Orders, Is.Not.Empty);

            foreach (var order in orderedTests)
            {
                var placerGroupNumber = order.ORC.PlacerGroupNumber.ValueOrDefault();
                Console.WriteLine(placerGroupNumber);
                Assert.AreEqual("XO934N", placerGroupNumber.UniversalId);

                for (int i = 0; i < order.Tests.Count; i++)
                {
                    string placerOrderNumber = order.Tests[i].OBR.PlacerOrderNumber.Value.UniversalId.ValueOrDefault();
                    var    catalogId         = order.Tests[i].OBR.UniversalServiceIdentifier.ValueOrDefault();

                    Assert.AreEqual($"PRO235{i}", placerOrderNumber);
                    Assert.AreEqual($"1163{i}", catalogId.Identifier.ValueOrDefault());
                }
            }
        }