001    package org.vmdb.hl7;
002    
003    import java.util.*;
004    
005    /**
006     * <p><Title:> PATIENT Loop. </p>
007     * <p>Description: HL7 Network Connectivity For VMDB. </p>
008     * <p>Copyright: Copyright (c) 2002-2003. </p>
009     * <p>Company: Veterinary Medical Database (VMDB). </p>
010     * <p>The XML representation of HL7 2.x introduces the concepts of groups and lists
011     * that, while present in the construction rules of delimited HL7, are not explicitly
012     * named or labelled in the messages themselves.  This class follows the XML
013     * version with explicitly constructed groups and lists
014     * which we've combined under the general term (borrowed from X12) of "loop."</p>
015     * <p>Most of the repetion and grouping facilitated by this "loop" logic is not
016     * used in the VMDB version of the ORU message but is maintained to retain full
017     * standard compliance and to allow extending this model without fear of losing
018     * interoperability.</p>
019     * <p>Loop and Segment Nesting:  The outline below shows how the loops and minimum
020     * required segments nest. {OBX} indicates that any number of OBX segments may
021     * appear at this location.</p>
022    <pre>
023    MSH
024    PATIENT_RESULT
025        <b>PATIENT</b>
026          PID
027          PATIENT_VISIT
028            PV1
029        ORDER_OBSERVATION
030         [ORC]
031          OBR
032            OBSERVATION
033              OBX
034    </pre>
035     * @author Michael K. Martin
036     * @version 1.0
037     */
038    
039    public class PATIENTLoop extends HL7Loop {
040       private String sNm = "PATIENT";
041       private String sRl = "PID[PD1][{NK1}][{NTE}][PATIENT_VISIT]";
042    
043       public PATIENTLoop() {
044          super();
045          setName( sNm );
046          setRule( sRl );
047       }
048    
049       /**
050        * Get the PATIENT_VISITLoop loop that should be nested within this loop.  If
051        * it does not exist, take the necessary steps to create it in the appropriate
052        * nested loop structure.<br>
053        * @return PATIENT_VISITLoop object located at the appropriate place in the loop.
054        */
055       public PATIENT_VISITLoop getPATIENT_VISIT() {
056          PATIENT_VISITLoop loop = null;
057          if( vSegments == null ) vSegments = new Vector();
058          for( Iterator i = vSegments.iterator(); i.hasNext(); ) {
059             HL7Object o = (HL7Object)i.next();
060             if( o.getName().equals( "PATIENT_VISIT" ) ) {
061                loop = (PATIENT_VISITLoop)o;
062                break;
063             }
064          }
065          if( loop == null ) {
066             loop = new PATIENT_VISITLoop();
067             vSegments.add(loop);
068          }
069          return loop;
070       }
071    
072       /**
073        * Get the PID segment that should be contained within this loop.  If
074        * it does not exist, take the necessary steps to create it in the appropriate
075        * location.
076        * @return PIDSegment object located at the appropriate place in the loop.
077        */
078       public PIDSegment getPID() {
079          PIDSegment pid = (PIDSegment)findSegment( "PID" );
080          if( pid == null ) {
081             pid = new PIDSegment();
082             pid.initialize();
083             if( vSegments == null ) vSegments = new Vector();
084             vSegments.add(0,pid);
085          }
086          return pid;
087       }
088    
089    }// End class PATIENTLoop