diff --git a/src/NHapi.Base/Model/AbstractSegment.cs b/src/NHapi.Base/Model/AbstractSegment.cs index c06764d68..6a6bb23d6 100644 --- a/src/NHapi.Base/Model/AbstractSegment.cs +++ b/src/NHapi.Base/Model/AbstractSegment.cs @@ -167,13 +167,6 @@ public virtual IType GetField(int number, int rep) ErrorCode.APPLICATION_INTERNAL_ERROR); } - if (rep > items[number - 1].MaxRepetitions) - { - throw new HL7Exception( - $"Can't get repetition {rep} from field {number} - maximum repetitions is only {items[number - 1].MaxRepetitions} reps.", - ErrorCode.APPLICATION_INTERNAL_ERROR); - } - // add a rep if necessary ... if (rep == currentReps) { diff --git a/tests/NHapi.NUnit/Parser/PipeParserV25Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV25Tests.cs index 2d2abd15f..143920de8 100644 --- a/tests/NHapi.NUnit/Parser/PipeParserV25Tests.cs +++ b/tests/NHapi.NUnit/Parser/PipeParserV25Tests.cs @@ -2,9 +2,11 @@ namespace NHapi.NUnit.Parser { using System; using System.Collections.Generic; + using System.Linq; using global::NUnit.Framework; + using NHapi.Base.Model; using NHapi.Base.Parser; using NHapi.Model.V25.Datatype; using NHapi.Model.V25.Message; @@ -91,6 +93,34 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType); } + /// + /// https://github.com/nHapiNET/nHapi/issues/276. + /// + [Test] + public void TestParsingQPD3_WhenQPD3HasMultipleRepetitions_NoExceptionIsThrown() + { + var message = + "MSH|^~\\&|PatientManager|IHE|ICS|FORTH|20220215130712||QBP^Q22^QBP_Q21|5b2e49550924456db9e0844e35348144|P|2.5||||||UNICODE UTF-8\r" + + "QPD|IHE PDQ Query|20220215130712|@PID.5.2^fname~@PID.7.1^20220202~@PID.8^M|||||^^^IHEFACILITY&1.3.6.1.4.1.21367.3000.1.6&ISO~^^^IHEBLUE&1.3.6.1.4.1.21367.13.20.3000&ISO\r" + + "RCP|I"; + + var parser = new PipeParser(); + var parsed = (QBP_Q21)parser.Parse(message); + + var qpd3Fields = parsed.QPD.GetField(3).Cast().ToList(); + + Assert.AreEqual(3, qpd3Fields.Count); + + Assert.AreEqual("@PID.5.2", ((GenericPrimitive)((Varies)((GenericComposite)qpd3Fields[0].Data)[0]).Data).Value); + Assert.AreEqual("fname", ((GenericPrimitive)((Varies)((GenericComposite)qpd3Fields[0].Data)[1]).Data).Value); + + Assert.AreEqual("@PID.7.1", ((GenericPrimitive)((Varies)((GenericComposite)qpd3Fields[1].Data)[0]).Data).Value); + Assert.AreEqual("20220202", ((GenericPrimitive)((Varies)((GenericComposite)qpd3Fields[1].Data)[1]).Data).Value); + + Assert.AreEqual("@PID.8", ((GenericPrimitive)((Varies)((GenericComposite)qpd3Fields[2].Data)[0]).Data).Value); + Assert.AreEqual("M", ((GenericPrimitive)((Varies)((GenericComposite)qpd3Fields[2].Data)[1]).Data).Value); + } + [Test] public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed() {