Skip to content

Incorrect parsing of RXR when no ORDER_DETAIL group present #51

@gap777

Description

@gap777

Given the following message:

MSH|^~\&|EXACTDATA||ALL|ALL|20101217181500||RDE^O11^RDE_O11|EF010000000071000000_4|T^T|2.5.1
PID|1||7010566270^^^^DODID~EM010000008000000^^^^MR||ZZEDConner^Dean^J^^Mr.||19810611|MALE||WHITE^^HL70005|^^^^^USA^H||||ENGLISH^^HL70296|SINGLE^^HL70002||EF010000000071000000||||NOTHISPANICORLATINO^^HL70189|||||ACTIVEDUTY^^HL70172
PV1|1|OUTPATIENT|^^^MBCC^^AMBLOC||||1853210951^Pennington^Zachary|||MEDICINEGENERAL|||||||1853210951^Pennington^Zachary|||||||||||||||||||01|||||ACTIVE|||20101217181500|20101217184500||||||V
PV2|||V70.0^General medical examination^I9C|||||||||||||||||||||||||||||||||||||||||N
AL1|1|DRUG^^HL70127|70618^Penicillin^RXNORM|MODERATE^^HL70128|Dry Mouth|20100928
ORC|NW|101217-833651^ExD|||ORDERED
RXE|^^^20101217184500|54569-4888-0^Oseltamivir|1||75 mg||^po bid x 5d||N|10||0||||||||||||||||||||20101217184500
RXR|^Oral^HL70162

Since the RXR is following the RXE, it should not be parsed as part of the ORDER_DETAIL group. nHapi PipeParser incorrectly puts it there.

The problem seems to be because of the following lines in PipeParser.DoParse:

if (!name.Equals(lastSegmentName, StringComparison.CurrentCultureIgnoreCase))
{
    // If the message iterator passes a segment that is later encountered the message object won't be properly parsed.
    // Rebuild the iterator for each segment, or fix iterator logic in handling unexpected segments.
    messageIter = new MessageIterator(theMessage, "MSH", true);
    lastSegmentName = name;
}

where each search for the right spot to place segment data starts again at the top and looks for the first segment to match by name.

This approach forgets the position of previously placed data. In this scenario, the RXR can't possibly be considered to be a part of the ORDER_DETAIIL because it follows the RXE, and the RXE is not a part of the ORDER_DETAIL.

We've made changes that appear to fix the problem, and would love your review.

Metadata

Metadata

Assignees

No one assigned

    Labels

    defectA deviation from the Requirements / Specification.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions