Beispiel #1
0
        public void Verify_can_convert_DateTime_to_different_time_zone_given_TimeZoneInfo()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234||ORU^R01|K113|P|
ZHX|20170113|201705221530";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var query = entityResult.CreateQuery(q =>
                                                 from msh in q.Select <MSHSegment>()
                                                 from zhx in q.Select <DateTimeSegment>()
                                                 select new
            {
                MSH = msh,
                ZHX = zhx
            });

            var result = entityResult.Query(query);

            Value <DateTimeOffset> dt = result.Result.ZHX.TestDateTimeOffsetWithTime;
            TimeSpan       offset     = new TimeSpan(0, 8, 0, 0);
            DateTimeOffset dateTime   = dt.ValueOrDefault();
            DateTimeOffset expected   = new DateTimeOffset(dateTime.DateTime, offset);

            DateTimeOffset actual = dt.ToOffset(offset).ValueOrDefault();

            Assert.AreEqual(expected, actual);
        }
Beispiel #2
0
        public void Should_pull_the_optional_segments_without_a_glitch()
        {
            const string message = @"MSH|^~\&|LIFTLAB||UBERMED||201701131234||ORU^R01|K113|P|
EVN|A08|201701131234|||12901";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            ILayoutParserFactory <MessageLayout, HL7Entity> layout;

            Assert.That(Schema.TryGetLayout(out layout), Is.True);

            Parser <HL7Entity, MessageLayout> query = entityResult.CreateQuery(q => layout.CreateParser(LayoutParserOptions.None, q));

            Result <Cursor <HL7Entity>, MessageLayout> result = entityResult.Query(query);

            Assert.That(result.HasResult, Is.True);
            Assert.That(result.Select(x => x.MSH), Is.Not.Null);
            Assert.That(result.Select(x => x.MSH).IsPresent, Is.True);
            Assert.That(result.Select(x => x.Optional).IsPresent, Is.True);
            Assert.That(result.Select(x => x.Optional).Select(x => x.EVN), Is.Not.Null);
            Assert.That(result.Select(x => x.Optional).Select(x => x.EVN).IsPresent, Is.True);
            Assert.That(result.Select(x => x.Optional).Select(x => x.EVN).HasValue, Is.True);
            Assert.That(result.Select(x => x.Optional).Select(x => x.EVN).Select(x => x.SegmentId).HasValue, Is.True);
            Assert.That(result.Select(x => x.Optional).Select(x => x.EVN).Select(x => x.RecordedDateTime).HasValue, Is.True);
        }
Beispiel #3
0
        public void Should_be_able_to_query_order_tests()
        {
            const string message = @"MSH|^~\&|MACHETELAB|^DOSC|MACHETE|18779|20130405125146269||ORM^O01|1999077678|P|2.3|||AL|AL
PID|1|000000000026|60043^^^MACHETE^MRN||MACHETE^JOE||19890909|F|||123 SEASAME STREET^^Oakland^CA^94600||5101234567|5101234567||||||||||||||||N
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";

            EntityResult <HL7Entity> parse = Parser.Parse(message);

            ILayoutParserFactory <OrderLayout, HL7Entity> layout;

            Assert.IsTrue(Schema.TryGetLayout(out layout));

            Parser <HL7Entity, OrderLayout> query = parse.CreateQuery(q => layout.CreateParser(LayoutParserOptions.None, q));

            Result <Cursor <HL7Entity>, OrderLayout> result = parse.Query(query);

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

            string placerOrderNumber = result
                                       .Select(x => x.ORC)
                                       .Select(x => x.PlacerOrderNumber)
                                       .Select(x => x.EntityIdentifier)
                                       .ValueOrDefault();

            Assert.AreEqual("PRO2352", placerOrderNumber);
        }
Beispiel #4
0
        public void Verify_IsEqualTo_can_evaluate_component_field_correctly()
        {
            const string message1 = @"MSH|^~\&|LIFTLAB||MACHETE||201701131234||ORU^R01|K113|P|";

            EntityResult <HL7Entity> parsed1 = Parser.Parse(message1);

            var query1 = parsed1.CreateQuery(q =>
                                             from x in q.Select <MSHSegment>()
                                             select x);

            var result1 = parsed1.Query(query1);

            const string message2 = @"MSH|^~\&|LIFTLAB||MACHETE||201701131234||ORU^R02|K113|P|";

            EntityResult <HL7Entity> parsed2 = Parser.Parse(message2);

            var query2 = parsed2.CreateQuery(q =>
                                             from x in q.Select <MSHSegment>()
                                             select x);

            var result2 = parsed2.Query(query2);

            bool actual = result1.Result.MessageType.IsEqualTo(result2.Result.MessageType.Value);

            Assert.AreEqual(false, actual);
        }
Beispiel #5
0
        public void Should_match_a_valid_message()
        {
            const string example271 =
                @"ISA*03*6327      *01*NFMC01    *ZZ*MACHETE        *ZZ*PERSEPVS       *090601*0406*^*00501*000026531*0*P*:~GS*HB*FL0738*PERSEPVS*20090601*040612*1*X*005010X279~ST*271*4321*005010X279~BHT*0022*11*10001234*20060501*1319~HL*1**20*1~NM1*PR*2*THE COMPANY*****PI*842610001~HL*2*1*21*1~NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~HL*3*2*22*1~NM1*IL*1*SMITH*JOHN****MI*123456789~N3*PO BOX 12345laskdjflaskdjflasjdflsajdflkasjdlfjalsdjflaskjdfl*Suite X~N4*Atlanta*GA*30000~HL*4*3*23*0~TRN*2*93175-012547*9877281234~NM1*03*1*SMITH*JOHNNY~N3*PO BOX 12345*Suite X~N4*Atlanta*GA*30000~DMG*D8*19600409*M~HI*BK:123*BF:34555*BF:566677*BK:456*BF:3877~DTP*346*D8*20060101~MPI*C*AO*A**L3~EB*F*IND*55^CB^77***29***DY*33**Y**1:2:3~REF*Y4*653745725*5010 CASE DESCRIPTION 3H~EB*1*IND*55^PT*MA**24*26**LA*10**Y**4:5~LS*2120~NM1*P3*1*JONES*MARCUS****XX*1003853409~LE*2120~SE*25*4321~GE*1*1~IEA*1*000026531~";


            EntityResult <X12Entity> entityResult = Parser.Parse(example271);

            Assert.That(Schema.TryGetLayout(out ILayoutParserFactory <X12MessageLayout, X12Entity> layout), Is.True);

            IParser <X12Entity, X12MessageLayout> query = entityResult.CreateQuery(layout);

            Result <Cursor <X12Entity>, X12MessageLayout> result = entityResult.Query(query);

            Assert.That(result.HasResult, Is.True);
            Assert.That(result.Select(x => x.ISA), Is.Not.Null);
            Assert.That(result.Select(x => x.ISA).HasValue, Is.True);

            Value <DateTime> isaDate = result.Select(x => x.ISA).Select(x => x.Date);

            Assert.That(isaDate.HasValue, Is.True);
            Assert.That(isaDate.Value, Is.EqualTo(new DateTime(2009, 6, 1, 4, 6, 0)));

            Assert.That(result.Select(x => x.GS).HasValue, Is.True);
            Assert.That(result.Select(x => x.TransactionSetHeader).HasValue, Is.True);
        }
Beispiel #6
0
        public void Should_be_able_to_format_layout()
        {
            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";

            EntityResult <HL7Entity> parse = Parser.Parse(message);

            Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory <ORM_O01, HL7Entity> layout));

            IParser <HL7Entity, ORM_O01>         query  = parse.CreateQuery(q => layout.CreateParser(LayoutParserOptions.None, q));
            Result <Cursor <HL7Entity>, ORM_O01> result = parse.Query(query);

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

            LayoutList <ORM_O01_ORDER> orders = result.Select(x => x.Order);

            Assert.That(Schema.TryGetLayoutFormatter(out ILayoutFormatter <ORM_O01_ORDER> formatter), Is.True);

            var context = new StringBuilderFormatContext();

            formatter.Format(context, orders[0].Value);

            Assert.That(context.ToString(), Is.EqualTo(message));
        }
Beispiel #7
0
        public void Should_parse_a_series_of_segments_but_not_match()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234||ORU^R01|K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var result = entityResult.Query(q =>
                                            from msh in q.Select <MSHSegment>()
                                            from evn in q.Select <EVNSegment>()
                                            select new { MSH = msh, EVN = evn });

            Assert.That(result.HasResult, Is.False);
        }
Beispiel #8
0
        public void Should_not_blow_up()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234|||K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var mshSegmentQuery = entityResult.CreateQuery(q =>
                                                           from x in q.Select <MSHSegment>()
                                                           select x);

            var result = entityResult.Query(mshSegmentQuery);

            Assert.That(result.HasResult, Is.True);
        }
Beispiel #9
0
        public void Verify_ValueOrEmpty_returns_empty_when_field_missing()
        {
            const string message = @"MSH|^~\&|LIFTLAB||MACHETE||201701131234|||K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var query = entityResult.CreateQuery(q =>
                                                 from x in q.Select <MSHSegment>()
                                                 select x);

            var result = entityResult.Query(query);

            Assert.AreEqual(string.Empty, result.Result.MessageType.Value.MessageCode.ValueOrEmpty());
        }
Beispiel #10
0
        public void Should_detect_data_is_not_present_in_simple_field()
        {
            const string message = @"MSH|^~\&|LIFTLAB||UBERMED";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var query = entityResult.CreateQuery(q =>
                                                 from msh in q.Select <MSH>()
                                                 select msh);

            var result = entityResult.Query(query);

            Assert.IsNotNull(result.Select(x => x.Security));
            Assert.IsFalse(result.Select(x => x.Security).IsPresent);
        }
Beispiel #11
0
        public void Should_detect_data_is_present_with_field_of_whitespace()
        {
            const string message = @"MSH|^~\&|LIFTLAB||UBERMED||201701131234||   |K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var query = entityResult.CreateQuery(q =>
                                                 from msh in q.Select <MSH>()
                                                 select msh);

            var result = entityResult.Query(query);

            Assert.IsNotNull(result.Select(x => x.MessageType));
            Assert.IsTrue(result.Select(x => x.MessageType).IsPresent);
        }
Beispiel #12
0
        public void Should_detect_component_field_has_no_value()
        {
            const string message = @"MSH|^~\&|LIFTLAB||UBERMED||201701131234||^R01|K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var query = entityResult.CreateQuery(q =>
                                                 from msh in q.Select <MSH>()
                                                 select msh);

            var result = entityResult.Query(query);

            Assert.IsNotNull(result.Select(x => x.MessageType));
            Assert.IsTrue(result.Select(x => x.MessageType).HasValue);
            Assert.IsFalse(result.Select(x => x.MessageType).Select(x => x.MessageCode).HasValue);
        }
Beispiel #13
0
        public void Should_be_possible()
        {
            const string message = @"MSH|^~\&|LIFTLAB||UBERMED||201701131234||^R01|K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var query = entityResult.CreateQuery(q =>
                                                 from x in q.Select <MSHSegment>()
                                                 select x);

            var result = entityResult.Query(query);

            Assert.That(result.Select(x => x.MessageType), Is.Not.Null);
            Assert.That(result.Select(x => x.MessageType).Select(x => x.MessageCode).HasValue, Is.False);
            Assert.AreEqual("ORU", result.Select(x => x.MessageType).Select(x => x.MessageCode).ValueOrDefault("ORU"));
        }
Beispiel #14
0
        public void Should_be_able_get_all_entity_fields()
        {
            const string message = @"MSH|^~\&|MACHETELAB|^DOSC|MACHETE|18779|20130405125146269||ORM^O01|1999077678|P|2.3|||AL|AL
PID|1|000000000026|60043^^^MACHETE^MRN||MACHETE^JOE||19890909|F|||123 SEASAME STREET^^Oakland^CA^94600||5101234567|5101234567||||||||||||||||N";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var query = entityResult.CreateQuery(q =>
                                                 from msh in q.Select <MSH>()
                                                 select msh);

            var result = entityResult.Query(query);

            Assert.IsNotNull(result.Select(x => x.Fields));
            Assert.IsTrue(result.Select(x => x.Fields).IsPresent);
            Assert.AreEqual(15, result.Select(x => x.Fields).Count());
        }
Beispiel #15
0
        public void Should_throw_ValueMissingException()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234|||K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var query = Query <HL7Entity> .Create(q =>
                                                  from x in q.Select <MSHSegment>()
                                                  select new { x.MessageType });

            var result = entityResult.Query(query);

            Assert.That(result.HasResult, Is.True);
            Assert.Throws <ValueMissingException>(() =>
            {
                string messageCode = result.Result.MessageType.Value.MessageCode.Value;
            });
        }
Beispiel #16
0
        public void Should_be_able_return_no_fields_on_empty_entity()
        {
            const string message = @"MSH|^~\&|MACHETELAB|^DOSC|MACHETE|18779|20130405125146269||ORM^O01|1999077678|P|2.3|||AL|AL
PID";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var query = entityResult.CreateQuery(q =>
                                                 from msh in q.Select <MSH>()
                                                 from pid in q.Select <PID>()
                                                 select pid);

            var result = entityResult.Query(query);

            Assert.IsNotNull(result.Select(x => x.Fields));
            Assert.IsTrue(result.Select(x => x.Fields).IsPresent);
            Assert.AreEqual(0, result.Select(x => x.Fields).Count());
        }
Beispiel #17
0
        public void Should_parse_a_segment_and_parse_into_the_component()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234||ORU^R01|K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var result = entityResult.Query(q =>
                                            from msh in q.Select <MSHSegment>()
                                            from mt in msh.MessageType
                                            from mc in mt.MessageCode
                                            from te in mt.TriggerEvent
                                            where mc == "ORU"
                                            select new { MSH = msh, MT = mt, MC = mc, TE = te });

            Assert.That(result.HasResult, Is.True);
            Assert.That(result.Result.MC, Is.EqualTo("ORU"));
            Assert.That(result.Result.TE, Is.EqualTo("R01"));
        }
Beispiel #18
0
        public void Should_be_possible()
        {
            const string message = @"MSH|^~\&|LIFTLAB||UBERMED||201701131234||ORU^R01|K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            Assert.That(Schema.TryGetLayout(out ILayoutParserFactory <MessageLayout, HL7Entity> layout), Is.True);

            IParser <HL7Entity, MessageLayout> query = entityResult.CreateQuery(layout);

            Result <Cursor <HL7Entity>, MessageLayout> result = entityResult.Query(query);

            Assert.That(result.HasResult, Is.True);
            Assert.That(result.Select(x => x.MSH), Is.Not.Null);
            Assert.That(result.Select(x => x.MSH).HasValue, Is.True);
            Assert.That(result.Select(x => x.Optional).HasValue, Is.True);
            Assert.That(result.Select(x => x.Optional).Select(x => x.EVN), Is.Not.Null);
            Assert.That(result.Select(x => x.Optional).Select(x => x.EVN).HasValue, Is.False);
        }
Beispiel #19
0
        public void Verify_can_convert_datetimeoffset_to_different_time_zone()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234||ORU^R01|K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var query = entityResult.CreateQuery(q =>
                                                 from x in q.Select <MSHSegment>()
                                                 select x);

            var result = entityResult.Query(query);

            DateTimeOffset dt = result.Result.CreationDateTime.Value;
            var            destinationTimeZone = TimeZoneInfo.CreateCustomTimeZone("Pacific Standard Time", new TimeSpan(0, 8, 0, 0), "PST", "PST");
            DateTimeOffset expected            = TimeZoneInfo.ConvertTime(dt, destinationTimeZone);
            DateTimeOffset actual = result.Result.CreationDateTime.ToTimeZone(destinationTimeZone).ValueOrDefault();

            Assert.AreEqual(expected, actual);
        }
Beispiel #20
0
        public void Should_parse_a_series_of_segments_using_optional()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234||ORU^R01|K113|P|";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var mshSegmentQuery = entityResult.CreateQuery(q =>
                                                           from msh in q.Select <MSHSegment>()
                                                           from evn in q.Select <EVNSegment>().Optional()
                                                           select new { MSH = msh, EVN = evn });

            var result = entityResult.Query(mshSegmentQuery);

            Assert.That(result.HasResult, Is.True);
            Assert.That(result.Result.MSH, Is.Not.Null);
            Assert.That(result.Result.MSH.MessageType.HasValue, Is.True);
            Assert.That(result.Result.MSH.MessageType.Value.MessageCode.HasValue, Is.True);
            Assert.That(result.Result.MSH.MessageType.Value.MessageCode.Value, Is.EqualTo("ORU"));
            Assert.That(result.Result.EVN, Is.Null);
        }
Beispiel #21
0
        public void Should_parse_a_series_of_segments()
        {
            const string message = @"MSH|^~\&|LIFTLAB||UBERMED||201701131234||ORU^R01|K113|P|
EVN|A08|201701131234|||12901";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var mshSegmentQuery = entityResult.CreateQuery(q =>
                                                           from msh in q.Select <MSH>()
                                                           from evn in q.Select <EVN>()
                                                           select new { MSH = msh, EVN = evn });

            var result = entityResult.Query(mshSegmentQuery);

            Assert.That(result.HasResult, Is.True);
            Assert.That(result.Result.MSH, Is.Not.Null);
            Assert.That(result.Result.MSH.MessageType.HasValue, Is.True);
            Assert.That(result.Result.MSH.MessageType.Value.MessageCode.HasValue, Is.True);
            Assert.That(result.Result.MSH.MessageType.Value.MessageCode.Value, Is.EqualTo("ORU"));
            Assert.That(result.Result.EVN, Is.Not.Null);
            Assert.That(result.Result.EVN.RecordedDateTime.Value, Is.EqualTo(new DateTimeOffset(2017, 1, 13, 12, 34, 0, TimeSpan.Zero)));
        }
Beispiel #22
0
        public void Should_be_able_to_skip_segments_via_selection()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234||ORU^R01|K113|P|
EVN|A08|201701131234|||12901";

            EntityResult <HL7Entity> entityResult = Parser.Parse(message);

            var result = entityResult.Query(q =>
                                            from ignored in q.Except <HL7Segment, EVNSegment>().ZeroOrMore()
                                            from segment in q.Select <EVNSegment>()
                                            where segment.EntityInfo.IsDefined
                                            select new { segment, ignored });

            Assert.That(result.HasResult, Is.True);
            Assert.That(result.Result.segment.SegmentId, Is.Not.Null);
            Assert.That(result.Result.segment.SegmentId.HasValue, Is.True);
            Assert.That(result.Result.segment.SegmentId.Value, Is.EqualTo("EVN"));

            Assert.That(result.Result.ignored.Count, Is.EqualTo(1));

            Assert.That(result.Result.ignored[0].SegmentId.Value, Is.EqualTo("MSH"));
        }