diff --git a/src/NHapi.Base/Model/AbstractSegment.cs b/src/NHapi.Base/Model/AbstractSegment.cs
index 9694866fc..c06764d68 100644
--- a/src/NHapi.Base/Model/AbstractSegment.cs
+++ b/src/NHapi.Base/Model/AbstractSegment.cs
@@ -270,6 +270,8 @@ public virtual int GetMaxCardinality(int number)
///
/// Repeatable field number.
/// 0-based index to be removed.
+ /// If field has no repetitions.
+ /// If field index does not exist.
public void RemoveRepetition(int fieldNum, int index)
{
if (fieldNum < 1 || fieldNum > items.Count)
@@ -303,6 +305,9 @@ public void RemoveRepetition(int fieldNum, int index)
///
/// Repeatable field number.
/// Item to be removed.
+ /// If field number is not valid.
+ /// If field has no repetitions.
+ /// If field does not contain the repetition to remove.
public void RemoveRepetition(int fieldNum, IType removeItem)
{
if (fieldNum < 1 || fieldNum > items.Count)
diff --git a/src/NHapi.Base/Model/Varies.cs b/src/NHapi.Base/Model/Varies.cs
index 3ca8dd6d0..745919ca1 100644
--- a/src/NHapi.Base/Model/Varies.cs
+++ b/src/NHapi.Base/Model/Varies.cs
@@ -64,8 +64,8 @@ static Varies()
Log = HapiLogFactory.GetHapiLog(typeof(Varies));
}
- /// Creates new Varies.
- ///
+ ///
+ /// Creates new Varies.
///
/// message to which this type belongs.
///
@@ -75,8 +75,8 @@ public Varies(IMessage message)
Message = message;
}
- /// Creates new Varies.
- ///
+ ///
+ /// Creates new Varies.
///
/// message to which this type belongs.
/// description of what this Type represents.
@@ -139,15 +139,26 @@ public virtual IType Data
"StyleCop.CSharp.NamingRules",
"SA1300:Element should begin with upper-case letter",
Justification = "As this is a public member, we will duplicate the method and mark this one as obsolete.")]
- public static void fixOBX5(ISegment segment, IModelClassFactory factory)
+ public static void fixOBX5(ISegment segment, IModelClassFactory factory, ParserOptions parserOptions)
{
- FixOBX5(segment, factory);
+ FixOBX5(segment, factory, parserOptions);
}
- /// Sets the data type of field 5 in the given OBX segment to the value of OBX-2. The argument
+ ///
+ /// Sets the data type of field 5 in the given OBX segment to the value of OBX-2. The argument
/// is a Segment as opposed to a particular OBX because it is meant to work with any version.
+ ///
+ /// Note that if no value is present in OBX-2, or an invalid value is present in
+ /// OBX-2, this method will throw an error.This behaviour can be corrected by using the
+ /// and .
+ ///
///
- public static void FixOBX5(ISegment segment, IModelClassFactory factory)
+ /// instance.
+ /// to be used.
+ /// to be used.
+ /// If no value is present in OBX-2.
+ /// If an invalid value is present in OBX-2.
+ public static void FixOBX5(ISegment segment, IModelClassFactory factory, ParserOptions parserOptions)
{
try
{
@@ -157,6 +168,7 @@ public static void FixOBX5(ISegment segment, IModelClassFactory factory)
foreach (var repetition in segment.GetField(5))
{
var v = (Varies)repetition;
+ SetObx2Fallback(obx2, segment, parserOptions);
if (obx2.Value == null)
{
@@ -174,7 +186,7 @@ public static void FixOBX5(ISegment segment, IModelClassFactory factory)
{
UseDTInsteadOfDTMForEarlierVersionsOfHL7(segment, obx2);
- var type = factory.GetTypeClass(obx2.Value, segment.Message.Version);
+ var type = GetObx5Type(obx2, segment, factory, parserOptions);
if (type == null)
{
@@ -214,6 +226,33 @@ public static void FixOBX5(ISegment segment, IModelClassFactory factory)
}
}
+ private static Type GetObx5Type(IPrimitive obx2, ISegment segment, IModelClassFactory factory, ParserOptions parserOptions)
+ {
+ var type = factory.GetTypeClass(obx2.Value, segment.Message.Version);
+
+ if (type == null)
+ {
+ if (parserOptions.InvalidObx2Type != null)
+ {
+ type = factory.GetTypeClass(parserOptions.InvalidObx2Type, segment.Message.Version);
+ }
+ }
+
+ return type;
+ }
+
+ private static void SetObx2Fallback(IPrimitive obx2, ISegment segment, ParserOptions parserOptions)
+ {
+ if (obx2.Value == null)
+ {
+ if (!(parserOptions.DefaultObx2Type is null))
+ {
+ Log.Debug($"setting default {segment.GetStructureName()}-{2} type to {parserOptions.DefaultObx2Type}");
+ obx2.Value = parserOptions.DefaultObx2Type;
+ }
+ }
+ }
+
private static void UseDTInsteadOfDTMForEarlierVersionsOfHL7(ISegment segment, IPrimitive obx2)
{
var versionsWithoutDTM = new string[] { "2.1", "2.2", "2.3", "2.3.1", "2.4", "2.5" };
diff --git a/src/NHapi.Base/Parser/DefaultXMLParser.cs b/src/NHapi.Base/Parser/DefaultXMLParser.cs
index ce1600fbe..7441fe731 100644
--- a/src/NHapi.Base/Parser/DefaultXMLParser.cs
+++ b/src/NHapi.Base/Parser/DefaultXMLParser.cs
@@ -142,23 +142,33 @@ public override XmlDocument EncodeDocument(IMessage source)
/// EncodingNotSupportedException if the message encoded.
/// is not supported by this parser.
///
- public override IMessage ParseDocument(XmlDocument xmlMessage, string version)
+ public override IMessage ParseDocument(XmlDocument xmlMessage, string version, ParserOptions parserOptions)
{
+ if (parserOptions is null)
+ {
+ throw new ArgumentNullException(nameof(parserOptions));
+ }
+
var messageName = xmlMessage.DocumentElement.Name;
var message = InstantiateMessage(messageName, version, true);
- Parse(message, xmlMessage.DocumentElement);
+ Parse(message, xmlMessage.DocumentElement, parserOptions);
return message;
}
///
public override void Parse(IMessage message, string @string, ParserOptions parserOptions)
{
+ if (parserOptions is null)
+ {
+ throw new ArgumentNullException(nameof(parserOptions));
+ }
+
try
{
var xmlDocument = new XmlDocument();
xmlDocument.Load(new StringReader(@string));
- Parse(message, xmlDocument.DocumentElement);
+ Parse(message, xmlDocument.DocumentElement, parserOptions);
}
catch (XmlException e)
{
@@ -201,7 +211,7 @@ protected internal static string MakeGroupElementName(string messageName, string
/// Populates the given group object with data from the given group element, ignoring
/// any unrecognized nodes.
///
- private void Parse(IGroup groupObject, XmlElement groupElement)
+ private void Parse(IGroup groupObject, XmlElement groupElement, ParserOptions parserOptions)
{
var childNames = groupObject.Names;
var messageName = groupObject.Message.GetStructureName();
@@ -222,14 +232,14 @@ private void Parse(IGroup groupObject, XmlElement groupElement)
for (var i = 0; i < childNames.Length; i++)
{
SupportClass.ICollectionSupport.Remove(unparsedElementList, childNames[i]);
- ParseReps(groupElement, groupObject, messageName, childNames[i], childNames[i]);
+ ParseReps(groupElement, groupObject, messageName, childNames[i], childNames[i], parserOptions);
}
for (var i = 0; i < unparsedElementList.Count; i++)
{
var segName = (string)unparsedElementList[i];
var segIndexName = groupObject.AddNonstandardSegment(segName);
- ParseReps(groupElement, groupObject, messageName, segName, segIndexName);
+ ParseReps(groupElement, groupObject, messageName, segName, segIndexName, parserOptions);
}
}
@@ -284,7 +294,8 @@ private void ParseReps(
IGroup groupObject,
string messageName,
string childName,
- string childIndexName)
+ string childIndexName,
+ ParserOptions parserOptions)
{
var reps = GetChildElementsByTagName(groupElement, MakeGroupElementName(messageName, childName));
Log.Debug("# of elements matching " + MakeGroupElementName(messageName, childName) + ": " + reps.Count);
@@ -293,14 +304,14 @@ private void ParseReps(
{
for (var i = 0; i < reps.Count; i++)
{
- ParseRep((XmlElement)reps[i], groupObject.GetStructure(childIndexName, i));
+ ParseRep((XmlElement)reps[i], groupObject.GetStructure(childIndexName, i), parserOptions);
}
}
else
{
if (reps.Count > 0)
{
- ParseRep((XmlElement)reps[0], groupObject.GetStructure(childIndexName, 0));
+ ParseRep((XmlElement)reps[0], groupObject.GetStructure(childIndexName, 0), parserOptions);
}
if (reps.Count > 1)
@@ -308,21 +319,21 @@ private void ParseReps(
var newIndexName = groupObject.AddNonstandardSegment(childName);
for (var i = 1; i < reps.Count; i++)
{
- ParseRep((XmlElement)reps[i], groupObject.GetStructure(newIndexName, i - 1));
+ ParseRep((XmlElement)reps[i], groupObject.GetStructure(newIndexName, i - 1), parserOptions);
}
}
}
}
- private void ParseRep(XmlElement theElem, IStructure theObj)
+ private void ParseRep(XmlElement theElem, IStructure theObj, ParserOptions parserOptions)
{
if (theObj is IGroup)
{
- Parse((IGroup)theObj, theElem);
+ Parse((IGroup)theObj, theElem, parserOptions);
}
else if (theObj is ISegment)
{
- Parse((ISegment)theObj, theElem);
+ Parse((ISegment)theObj, theElem, parserOptions);
}
Log.Debug("Parsed element: " + theElem.Name);
diff --git a/src/NHapi.Base/Parser/LegacyPipeParser.cs b/src/NHapi.Base/Parser/LegacyPipeParser.cs
index 966f69485..f911b8b77 100644
--- a/src/NHapi.Base/Parser/LegacyPipeParser.cs
+++ b/src/NHapi.Base/Parser/LegacyPipeParser.cs
@@ -259,6 +259,11 @@ public static string StripLeadingWhitespace(string in_Renamed)
public override void Parse(IMessage message, string @string, ParserOptions parserOptions)
{
+ if (parserOptions is null)
+ {
+ throw new ArgumentNullException(nameof(parserOptions));
+ }
+
var messageIter = new Util.MessageIterator(message, "MSH", true);
FilterIterator.IPredicate segmentsOnly = new AnonymousClassPredicate(this);
var segmentIter = new FilterIterator(messageIter, segmentsOnly);
@@ -299,7 +304,7 @@ public override void Parse(IMessage message, string @string, ParserOptions parse
if (dirIter.MoveNext())
{
- Parse((ISegment)dirIter.Current, segments[i], encodingChars);
+ Parse((ISegment)dirIter.Current, segments[i], encodingChars, parserOptions);
}
}
}
@@ -384,15 +389,29 @@ public virtual string GetMessageStructure(string message)
return GetStructure(message).Structure;
}
- /// Parses a segment string and populates the given Segment object. Unexpected fields are
+ ///
+ /// Parses a segment string and populates the given Segment object. Unexpected fields are
/// added as Varies' at the end of the segment.
- ///
///
/// HL7Exception if the given string does not contain the.
/// given segment or if the string is not encoded properly.
///
public virtual void Parse(ISegment destination, string segment, EncodingCharacters encodingChars)
{
+ Parse(destination, segment, encodingChars, DefaultParserOptions);
+ }
+
+ ///
+ /// Parses a segment string and populates the given Segment object. Unexpected fields are
+ /// added as Varies' at the end of the segment.
+ ///
+ /// HL7Exception if the given string does not contain the.
+ /// given segment or if the string is not encoded properly.
+ ///
+ public virtual void Parse(ISegment destination, string segment, EncodingCharacters encodingChars, ParserOptions parserOptions)
+ {
+ parserOptions = parserOptions ?? DefaultParserOptions;
+
var fieldOffset = 0;
if (IsDelimDefSegment(destination.GetStructureName()))
{
@@ -451,7 +470,7 @@ public virtual void Parse(ISegment destination, string segment, EncodingCharacte
// set data type of OBX-5
if (destination.GetType().FullName.IndexOf("OBX") >= 0)
{
- Varies.FixOBX5(destination, Factory);
+ Varies.FixOBX5(destination, Factory, parserOptions);
}
}
diff --git a/src/NHapi.Base/Parser/ParserBase.cs b/src/NHapi.Base/Parser/ParserBase.cs
index ad501a055..99b672e5a 100644
--- a/src/NHapi.Base/Parser/ParserBase.cs
+++ b/src/NHapi.Base/Parser/ParserBase.cs
@@ -44,9 +44,9 @@ namespace NHapi.Base.Parser
/// Bryan Tripp (bryan_tripp@sourceforge.net).
public abstract class ParserBase
{
- private static readonly IHapiLog Log;
- private static readonly ParserOptions DefaultParserOptions = new ParserOptions();
+ protected static readonly ParserOptions DefaultParserOptions = new ParserOptions();
+ private static readonly IHapiLog Log;
private IValidationContext validationContext;
private MessageValidator messageValidator;
@@ -265,6 +265,11 @@ public virtual IMessage Parse(string message, string version)
/// If is null.
public virtual IMessage Parse(string message, string version, ParserOptions parserOptions)
{
+ if (parserOptions is null)
+ {
+ throw new ArgumentNullException(nameof(parserOptions));
+ }
+
var encoding = GetEncoding(message);
if (!SupportsEncoding(encoding))
{
diff --git a/src/NHapi.Base/Parser/ParserOptions.cs b/src/NHapi.Base/Parser/ParserOptions.cs
index b6fb8f910..4d9d4a49a 100644
--- a/src/NHapi.Base/Parser/ParserOptions.cs
+++ b/src/NHapi.Base/Parser/ParserOptions.cs
@@ -4,9 +4,51 @@ public class ParserOptions
{
public ParserOptions()
{
+ DefaultObx2Type = null;
+ InvalidObx2Type = null;
NonGreedyMode = false;
}
+ ///
+ /// If this property is set, the value provides a default datatype ("ST",
+ /// "NM", etc) for an OBX segment with a missing OBX-2 value. This is useful
+ /// when parsing messages from systems which do not correctly populate OBX-2.
+ ///
+ ///
+ ///
+ /// For example, if this property is set to "ST", and the following OBX
+ /// segment is encountered:
+ ///
+ /// OBX|||||This is a value
+ ///
+ /// It will be parsed as though it had read:
+ ///
+ /// OBX||ST|||This is a value
+ ///
+ ///
+ ///
+ public string DefaultObx2Type { get; set; }
+
+ ///
+ /// If this property is set, the value provides a default datatype ("ST",
+ /// "NM", etc) for an OBX segment with an invalid OBX-2 value. This is useful
+ /// when parsing messages from systems which do not correctly populate OBX-2.
+ ///
+ ///
+ ///
+ /// For example, if this property is set to "ST", and the following OBX
+ /// segment is encountered:
+ ///
+ /// OBX||INVALID|||This is a value
+ ///
+ /// It will be parsed as though it had read:
+ ///
+ /// OBX||ST|||This is a value
+ ///
+ ///
+ ///
+ public string InvalidObx2Type { get; set; }
+
///
/// If set to true (default is false), pipe parser will be put in non-greedy mode. This setting
/// applies only to and will have no effect on .
diff --git a/src/NHapi.Base/Parser/PipeParser.cs b/src/NHapi.Base/Parser/PipeParser.cs
index 378690e14..5423d9600 100644
--- a/src/NHapi.Base/Parser/PipeParser.cs
+++ b/src/NHapi.Base/Parser/PipeParser.cs
@@ -318,7 +318,26 @@ public virtual string GetMessageStructure(string message)
///
public virtual void Parse(ISegment destination, string segment, EncodingCharacters encodingChars)
{
- Parse(destination, segment, encodingChars, 0);
+ Parse(destination, segment, encodingChars, DefaultParserOptions);
+ }
+
+ ///
+ /// Parses a segment string and populates the given Segment object.
+ ///
+ /// Unexpected fields are added as Varies' at the end of the segment.
+ ///
+ ///
+ /// Segment to parse the segment string into.
+ /// Encoded segment.
+ /// Encoding characters to be used.
+ /// Contains configuration that will be applied when parsing.
+ ///
+ /// If the given string does not contain the given segment or if the string is not encoded properly.
+ ///
+ public virtual void Parse(ISegment destination, string segment, EncodingCharacters encodingChars, ParserOptions parserOptions)
+ {
+ parserOptions = parserOptions ?? DefaultParserOptions;
+ Parse(destination, segment, encodingChars, 0, parserOptions);
}
///
@@ -336,6 +355,27 @@ public virtual void Parse(ISegment destination, string segment, EncodingCharacte
///
public virtual void Parse(ISegment destination, string segment, EncodingCharacters encodingChars, int repetition)
{
+ Parse(destination, segment, encodingChars, repetition, DefaultParserOptions);
+ }
+
+ ///
+ /// Parses a segment string and populates the given Segment object.
+ ///
+ /// Unexpected fields are added as Varies' at the end of the segment.
+ ///
+ ///
+ /// Segment to parse the segment string into.
+ /// Encoded segment.
+ /// Encoding characters to be used.
+ /// The repetition number of this segment within its group.
+ /// Contains configuration that will be applied when parsing.
+ ///
+ /// If the given string does not contain the given segment or if the string is not encoded properly.
+ ///
+ public virtual void Parse(ISegment destination, string segment, EncodingCharacters encodingChars, int repetition, ParserOptions parserOptions)
+ {
+ parserOptions = parserOptions ?? DefaultParserOptions;
+
var fieldOffset = 0;
if (IsDelimDefSegment(destination.GetStructureName()))
{
@@ -398,7 +438,7 @@ public virtual void Parse(ISegment destination, string segment, EncodingCharacte
// set data type of OBX-5
if (destination.GetType().FullName.IndexOf("OBX") >= 0)
{
- Varies.FixOBX5(destination, Factory);
+ Varies.FixOBX5(destination, Factory, parserOptions);
}
}
@@ -480,7 +520,7 @@ public override void Parse(IMessage message, string @string, ParserOptions parse
throw new HL7Exception($"Current segment does not implement ISegment and therefore cannot be parsed.");
}
- Parse(next, segments[i], GetEncodingChars(@string), repetition);
+ Parse(next, segments[i], GetEncodingChars(@string), repetition, parserOptions);
}
}
}
diff --git a/src/NHapi.Base/Parser/XMLParser.cs b/src/NHapi.Base/Parser/XMLParser.cs
index 3fb26467a..86a75a62a 100644
--- a/src/NHapi.Base/Parser/XMLParser.cs
+++ b/src/NHapi.Base/Parser/XMLParser.cs
@@ -248,7 +248,27 @@ public override string GetEncoding(string message)
/// EncodingNotSupportedException if the message encoded.
/// is not supported by this parser.
///
- public abstract IMessage ParseDocument(XmlDocument xmlMessage, string version);
+ public IMessage ParseDocument(XmlDocument xmlMessage, string version)
+ {
+ return ParseDocument(xmlMessage, version, DefaultParserOptions);
+ }
+
+ /// Creates and populates a Message object from an XML Document that contains an XML-encoded HL7 message.
+ /// The easiest way to implement this method for a particular message structure is as follows:
+ ///
- Create an instance of the Message type you are going to handle with your subclass
+ /// of XMLParser
+ /// - Go through the given Document and find the Elements that represent the top level of
+ /// each message segment.
+ /// - For each of these segments, call
parse(Segment segmentObject, Element segmentElement),
+ /// providing the appropriate Segment from your Message object, and the corresponding Element.
+ /// At the end of this process, your Message object should be populated with data from the XML
+ /// Document.
+ ///
+ /// HL7Exception if the message is not correctly formatted.
+ /// EncodingNotSupportedException if the message encoded.
+ /// is not supported by this parser.
+ ///
+ public abstract IMessage ParseDocument(XmlDocument xmlMessage, string version, ParserOptions parserOptions);
/// Creates an XML Document that corresponds to the given Message object.
/// If you are implementing this method, you should create an XML Document, and insert XML Elements
@@ -265,6 +285,17 @@ public override string GetEncoding(string message)
///
public virtual void Parse(ISegment segmentObject, XmlElement segmentElement)
{
+ Parse(segmentObject, segmentElement, DefaultParserOptions);
+ }
+
+ /// Populates the given Segment object with data from the given XML Element.
+ /// HL7Exception if the XML Element does not have the correct name and structure.
+ /// for the given Segment, or if there is an error while setting individual field values.
+ ///
+ public virtual void Parse(ISegment segmentObject, XmlElement segmentElement, ParserOptions parserOptions)
+ {
+ parserOptions = parserOptions ?? DefaultParserOptions;
+
var done = new SupportClass.HashSetSupport();
// for (int i = 1; i <= segmentObject.NumFields(); i++) {
@@ -298,7 +329,7 @@ public virtual void Parse(ISegment segmentObject, XmlElement segmentElement)
// set data type of OBX-5
if (segmentObject.GetType().FullName.IndexOf("OBX") >= 0)
{
- Varies.FixOBX5(segmentObject, Factory);
+ Varies.FixOBX5(segmentObject, Factory, parserOptions);
}
}
@@ -485,7 +516,7 @@ protected internal override IMessage DoParse(string message, string version, Par
var doc = new XmlDocument();
doc.Load(new StringReader(message));
- m = ParseDocument(doc, version);
+ m = ParseDocument(doc, version, parserOptions);
}
catch (XmlException e)
{
@@ -811,7 +842,7 @@ private void ParsePrimitive(IPrimitive datatypeObject, XmlElement datatypeElemen
private class AnonymousClassXMLParser : XMLParser
{
- public override IMessage ParseDocument(XmlDocument xmlMessage, string version)
+ public override IMessage ParseDocument(XmlDocument xmlMessage, string version, ParserOptions parserOptions)
{
return null;
}
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV21Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV21Tests.cs
index 42de9af65..ab1c5a58b 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV21Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV21Tests.cs
@@ -54,6 +54,30 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueInstance);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message = "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.1|||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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueInstance = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.OBSERVATIONRESULTS.Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.VALUETYPE;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueInstance);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueInstance).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV231Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV231Tests.cs
index 90fc78882..b66c3367b 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV231Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV231Tests.cs
@@ -617,6 +617,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.3.1|||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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV23Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV23Tests.cs
index 5bb0946e3..5e1d27b05 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV23Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV23Tests.cs
@@ -497,6 +497,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.3|||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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetRESPONSE(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetRESPONSE(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV24Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV24Tests.cs
index 2f3045ad0..cfe9e8bed 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV24Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV24Tests.cs
@@ -447,6 +447,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.4|||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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV251Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV251Tests.cs
index 7c9202ddb..693135b36 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV251Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV251Tests.cs
@@ -145,6 +145,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.5.1|||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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV25Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV25Tests.cs
index f64417953..28dfb4f19 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV25Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV25Tests.cs
@@ -91,6 +91,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.5|||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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV26Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV26Tests.cs
index ca688687a..1878bf6db 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV26Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV26Tests.cs
@@ -351,6 +351,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ 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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV271Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV271Tests.cs
index bd3fafb9f..a80c27672 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV271Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV271Tests.cs
@@ -144,6 +144,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.7.1|||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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV27Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV27Tests.cs
index 9ffe25351..fdc2b1992 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV27Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV27Tests.cs
@@ -146,6 +146,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.7|||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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV281Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV281Tests.cs
index ebbba3f99..07b53835d 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV281Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV281Tests.cs
@@ -144,6 +144,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueInstance);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.8.1|||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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/LegacyPipeParserV28Tests.cs b/tests/NHapi.NUnit/Parser/LegacyPipeParserV28Tests.cs
index f94537843..8d8052720 100644
--- a/tests/NHapi.NUnit/Parser/LegacyPipeParserV28Tests.cs
+++ b/tests/NHapi.NUnit/Parser/LegacyPipeParserV28Tests.cs
@@ -144,6 +144,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.8|||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||||STValue||||||F\r";
+
+ var parser = new LegacyPipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserTests.cs b/tests/NHapi.NUnit/Parser/PipeParserTests.cs
index 30dc2c666..f538661f7 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserTests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserTests.cs
@@ -5,6 +5,7 @@ namespace NHapi.NUnit.Parser
using global::NUnit.Framework;
+ using NHapi.Base;
using NHapi.Base.Model;
using NHapi.Base.Parser;
using NHapi.Base.Util;
@@ -308,5 +309,96 @@ public void MoreGreedyMode()
}
}
}
+
+ ///
+ /// The folllwing 4 tests are ported from hapi
+ /// https://github.com/hapifhir/hapi-hl7v2/blob/master/hapi-examples/src/main/java/ca/uhn/hl7v2/examples/ParseInvalidObx2Values.java.
+ ///
+ [Test]
+ public void Obx5DataTypeIsSetFromObx2_WhenObx2IsEmpty_Hl7ExceptionIsThrown()
+ {
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.3|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+
+ var exception = Assert.Throws(() => parser.Parse(message));
+
+ Assert.AreEqual(
+ "OBX-5 is valued, but OBX-2 is not. A datatype for OBX-5 must be specified using OBX-2.",
+ exception.Message);
+ }
+
+ [Test]
+ public void Obx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultOptionIsSet_DefaultTypeIsUsed()
+ {
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.3|||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||||STValue||||||F\r";
+
+ var expectedEncodedMessage =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.3|||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|ST|||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = parser.Parse(message, options);
+ var encodedMessage = parser.Encode(parsed);
+
+ Assert.AreEqual(expectedEncodedMessage, encodedMessage);
+ }
+
+ [Test]
+ public void Obx5DataTypeIsSetFromObx2_WhenObx2IsAnInvalidType_Hl7ExceptionIsThrown()
+ {
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.3|||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|BAD|||STValue||||||F\r";
+
+ var parser = new PipeParser();
+
+ var exception = Assert.Throws(() => parser.Parse(message));
+
+ Assert.AreEqual(
+ "'BAD' in record 1 is invalid for version 2.3: Segment: OBX Field #2",
+ exception.Message);
+ }
+
+ [Test]
+ public void Obx5DataTypeIsSetFromObx2_WhenObx2IsAnInvalidTypeAndInvalidOptionIsSet_ConfiguredInvalidTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(Model.V23.Datatype.ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.3|||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|BAD|||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { InvalidObx2Type = "ST" };
+
+ var parsed = (Model.V23.Message.ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetRESPONSE(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((IPrimitive)actualObservationValueType).Value);
+ }
}
}
\ No newline at end of file
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV21Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV21Tests.cs
index 4c5eadec9..56a7403c0 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV21Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV21Tests.cs
@@ -55,6 +55,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueInstance);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.1|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.OBSERVATIONRESULTS.Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.VALUETYPE;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV231Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV231Tests.cs
index 64091e1b0..bed4124d0 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV231Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV231Tests.cs
@@ -617,6 +617,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.3.1|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV23Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV23Tests.cs
index c775cc7a1..c2df94112 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV23Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV23Tests.cs
@@ -497,6 +497,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.3|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetRESPONSE(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetRESPONSE(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV24Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV24Tests.cs
index 46a1e9ce7..2d983f7dd 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV24Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV24Tests.cs
@@ -447,6 +447,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.4|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV251Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV251Tests.cs
index 1f585c868..865886ce0 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV251Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV251Tests.cs
@@ -146,6 +146,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.5.1|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV25Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV25Tests.cs
index f7514fb56..2d2abd15f 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV25Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV25Tests.cs
@@ -91,6 +91,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.5|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV26Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV26Tests.cs
index 7854d251c..4799a4e37 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV26Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV26Tests.cs
@@ -351,6 +351,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ 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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV271Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV271Tests.cs
index 3f4f85d58..d29f8eef3 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV271Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV271Tests.cs
@@ -144,6 +144,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.7.1|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV27Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV27Tests.cs
index 41139cb75..dc9882b12 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV27Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV27Tests.cs
@@ -146,6 +146,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.7|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV281Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV281Tests.cs
index 5c26abde6..5db4625b1 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV281Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV281Tests.cs
@@ -144,6 +144,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueInstance);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.8.1|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///
diff --git a/tests/NHapi.NUnit/Parser/PipeParserV28Tests.cs b/tests/NHapi.NUnit/Parser/PipeParserV28Tests.cs
index d177a984d..48ef6bc4a 100644
--- a/tests/NHapi.NUnit/Parser/PipeParserV28Tests.cs
+++ b/tests/NHapi.NUnit/Parser/PipeParserV28Tests.cs
@@ -144,6 +144,31 @@ public void TestObx5DataTypeIsSetFromObx2_AndAllDataTypesAreConstructable(Type e
Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
}
+ [Test]
+ public void TestObx5DataTypeIsSetFromObx2_WhenObx2IsEmptyAndDefaultIsSet_DefaultTypeIsUsed()
+ {
+ var expectedObservationValueType = typeof(ST);
+
+ var message =
+ "MSH|^~\\&|XPress Arrival||||200610120839||ORU^R01|EBzH1711114101206|P|2.8|||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||||STValue||||||F\r";
+
+ var parser = new PipeParser();
+ var options = new ParserOptions { DefaultObx2Type = "ST" };
+
+ var parsed = (ORU_R01)parser.Parse(message, options);
+
+ var actualObservationValueType = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.GetObservationValue(0).Data;
+ var obx2 = parsed.GetPATIENT_RESULT(0).GetORDER_OBSERVATION(0).GetOBSERVATION(0).OBX.ValueType;
+
+ Assert.AreEqual("ST", obx2.Value);
+ Assert.IsAssignableFrom(expectedObservationValueType, actualObservationValueType);
+ Assert.AreEqual("STValue", ((ST)actualObservationValueType).Value);
+ }
+
///
/// Specified in Table 0125.
///