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";

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

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

            var result = parsed.Query(query);

            Value <DateTimeOffset> dt = result.Value.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 Verify_IsEqualTo_can_evaluate_component_field_correctly()
        {
            const string message1 = @"MSH|^~\&|LIFTLAB||UBERMED||201701131234||ORU^R01|K113|P|";

            Parsed <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||UBERMED||201701131234||ORU^R02|K113|P|";

            Parsed <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.Value.MessageType.IsEqualTo(result2.Value.MessageType.Value);

            Assert.AreEqual(false, actual);
        }
Beispiel #3
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";

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

            ILayout <MessageLayout, HL7Entity> layout;

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

            Parser <HL7Entity, MessageLayout> query = parsed.CreateQuery(q => layout.CreateQuery(TemplateQueryOptions.None, q));

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

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

            Assert.That(result.Value.MSH, Is.Not.Null);
            Assert.That(result.Value.MSH.IsPresent, Is.True);

            Assert.That(result.Value.Optional.IsPresent, Is.True);

            Assert.That(result.Value.Optional.Value.EVN, Is.Not.Null);
            Assert.That(result.Value.Optional.Value.EVN.IsPresent, Is.True);
            Assert.That(result.Value.Optional.Value.EVN.HasValue, Is.True);
            Assert.That(result.Value.Optional.Value.EVN.Value.SegmentId.HasValue, Is.True);
            Assert.That(result.Value.Optional.Value.EVN.Value.RecordedDateTime.HasValue, Is.True);
        }
Beispiel #4
0
        public void Should_parse_a_series_of_segments_but_not_match()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234||ORU^R01|K113|P|";

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

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

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

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

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

            var result = parsed.Query(mshSegmentQuery);

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

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

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

            var result = parsed.Query(query);

            Assert.AreEqual(string.Empty, result.Value.MessageType.Value.MessageCode.ValueOrEmpty());
        }
Beispiel #7
0
        public void Should_throw_ValueMissingException()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234|||K113|P|";

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

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

            var result = parsed.Query(query);

            Assert.That(result.HasValue, Is.True);
            Assert.Throws <ValueMissingException>(() =>
            {
                string messageCode = result.Value.MessageType.Value.MessageCode.Value;
            });
        }
Beispiel #8
0
        public void Should_parse_a_segment_and_parse_into_the_component()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234||ORU^R01|K113|P|";

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

            var result = parsed.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.HasValue, Is.True);
            Assert.That(result.Value.MC, Is.EqualTo("ORU"));
            Assert.That(result.Value.TE, Is.EqualTo("R01"));
        }
Beispiel #9
0
        public void Should_be_possible()
        {
            const string message = @"MSH|^~\&|LIFTLAB||UBERMED||201701131234||^R01|K113|P|";

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

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

            var result = parsed.Query(query);

            var    messageType = result.Value.MessageType.Value;
            string messageCode = messageType.MessageCode.ValueOrDefault("ORU");

            Assert.IsNotNull(messageType);
            Assert.That(messageType.MessageCode.HasValue, Is.False);
            Assert.AreEqual("ORU", messageCode);
        }
        public void Verify_can_convert_datetimeoffset_to_different_time_zone()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234||ORU^R01|K113|P|";

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

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

            var result = parsed.Query(query);

            DateTimeOffset dt = result.Value.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.Value.CreationDateTime.ToTimeZone(destinationTimeZone).ValueOrDefault();

            Assert.AreEqual(expected, actual);
        }
Beispiel #11
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";

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

            var result = parsed.Query(q =>
                                      from ignored in q.Except <HL7Segment, EVNSegment>().ZeroOrMore()
                                      from segment in q.Select <EVNSegment>()
                                      where segment.EntityType.IsUnknown == false
                                      select new { segment, ignored });

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

            Assert.That(result.Value.ignored.Count, Is.EqualTo(1));
        }
Beispiel #12
0
        public void Should_parse_a_series_of_segments_using_optional()
        {
            const string message = @"MSH|^~\&|MACHETELAB||UBERMED||201701131234||ORU^R01|K113|P|";

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

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

            var result = parsed.Query(mshSegmentQuery);

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

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

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

            var result = parsed.Query(mshSegmentQuery);

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

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

            ILayout <MessageLayout, HL7Entity> layout;

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

            Parser <HL7Entity, MessageLayout> query = parsed.CreateQuery(q => layout.CreateQuery(TemplateQueryOptions.None, q));

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

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

            Assert.That(result.Value.MSH, Is.Not.Null);
            Assert.That(result.Value.MSH.IsPresent, Is.True);

            Assert.That(result.Value.Optional.IsPresent, Is.True);

            Assert.That(result.Value.Optional.Value.EVN, Is.Not.Null);
            Assert.That(result.Value.Optional.Value.EVN.IsPresent, Is.False);
        }