001    package org.vmdb.hl7;
002    
003    /**
004     * <p><Title:> Patient Visit (PV1) Segment. </p>
005     * <p>Description: HL7 Network Connectivity For VMDB. </p>
006     * <p>Copyright: Copyright (c) 2002-2003. </p>
007     * <p>Company: Veterinary Medical Database (VMDB). </p>
008     * <p>The use of the PV1 segment in VMDB reporting is to provide visit-specific
009     * information.  This segment is required for all ORU messages and only one PV1
010     * segment may be included in a VMDB message. Only 6 elements in the segment
011     * are used for VMDB messages.  See HL7 Standard Chapter 3 for details.</p>
012     * @author Michael K. Martin
013     * @version 1.0
014     */
015    
016    public class PV1Segment extends HL7Segment {
017       private String sNm = "PV1";
018       private String sRl =
019                   "DT SI IS[PL]IS[CX][PL]{XCN}[XCN][XCN][IS][PL][IS][IS][IS][IS]" +
020                   "[IS][XCN][IS][CX][FC][IS][IS][IS][IS][DT][NM][NM][IS][IS]" +
021                   "[DT][IS][NM][NM][IS][DT]IS[CM][CE][IS][IS][IS][PL]" +
022                   "[PL][TS][TS][NM][NM][NM][NM][CX][IS][XCN]";
023    
024       /**
025       * Construct an empty patient visit segment.
026       */
027       public PV1Segment() {
028          setName( sNm );
029          setRule( sRl );
030       }
031    
032       /**
033        * Construct an empty patient visit segment, setting its containing message
034        * object.
035        * @param msgParent HL7SegmentContainer (normally a Group 3 loop) object that
036        * contains this segment.
037        */
038       public PV1Segment( HL7SegmentContainer msgParent ) {
039          super( msgParent );
040          setName( sNm );
041          setRule( sRl );
042       }
043    
044       /**
045        * Set the Patient class.
046        * @param sStrain one character string [A,I,O, or R] for ambulatory,
047        * inpatient, outpatient, or recurring patient
048        */
049       public void setPatientClass( String sPatClass ) {
050          try {
051             setField( sPatClass, 2 );
052          }
053          catch( ArrayIndexOutOfBoundsException ae ) {
054             ae.printStackTrace();
055          }
056       }
057    
058       /**
059        * Get Patient class string.
060        * @return String (one character) with patient class code
061        */
062       public String getPatientClass() {
063          HL7Element e = getField( 2 );
064          if( e == null )
065             return "";
066          else
067             return e.getValue();
068       }
069    
070       /**
071        * Set the Admission type.
072        * @param sStrain one character string [C,K,E,Z,P,or R] for consult, recheck
073        * emergency, emergency referral, primary care, or referral
074        */
075       public void setAdmissionType( String sAdmissionType ) {
076          try {
077             setField( sAdmissionType, 4 );
078          }
079          catch( ArrayIndexOutOfBoundsException ae ) {
080             ae.printStackTrace();
081          }
082       }
083    
084       /**
085        * Get AdmissionType string.
086        * @return String (one character) with AdmissionType code
087        */
088       public String getAdmissionType() {
089          HL7Element e = getField( 4 );
090          if( e == null )
091             return "";
092          else
093             return e.getValue();
094       }
095    
096       /**
097        * Set full attending doctor name as XCN element defined as completely as you like.
098        * @param xcnName XCNElement with name defined
099        */
100       public void setAttendingDoctorName( XCNElement xcnName ) {
101          try {
102             setField( xcnName, 7 );
103          }
104          catch( ArrayIndexOutOfBoundsException ae ) {
105             ae.printStackTrace();
106          }
107          catch( MalformedSegmentException mfe ) {
108             mfe.printStackTrace();
109          }
110       }
111    
112       /**
113        * Set attending doctor name identifier from ID and facility.
114        * @param sIdNumber String with id number
115        * @param sAssigningAuthority String with assigning facility namespace id
116        */
117       public void setAttendingDoctorId( String sIdNumber, String sAssigningAuthority ) {
118          try {
119             XCNElement xcnName = (XCNElement)getField(7);
120             if( xcnName == null )
121                xcnName = new XCNElement();
122             xcnName.setIdNumber( sIdNumber );
123             xcnName.setAssigningAuthority( sAssigningAuthority );
124             setField( xcnName, 7 );
125          }
126          catch( ClassCastException ce ) {
127             System.err.println( vFields.toString() );
128             ce.printStackTrace();
129          }
130          catch( ArrayIndexOutOfBoundsException ae ) {
131             ae.printStackTrace();
132          }
133          catch( MalformedSegmentException mfe ) {
134             mfe.printStackTrace();
135          }
136       }
137    
138       /**
139        * Set attending doctor name identifier.
140        * @param sIdNumber String with id number
141        *
142        */
143       public void setAttendingDoctorId( String sIdNumber ) {
144          XCNElement xcnName = (XCNElement)getField(7);
145          if( xcnName == null )
146             xcnName = new XCNElement();
147          xcnName.setName( "PV1.7" );
148          xcnName.setIdNumber( sIdNumber );
149          try {
150             setField( xcnName, 7 );
151          }
152          catch( ArrayIndexOutOfBoundsException ae ) {
153             ae.printStackTrace();
154          }
155          catch( MalformedSegmentException mfe ) {
156             mfe.printStackTrace();
157          }
158       }
159    
160       /**
161        * Set attending doctor assigning facility.
162        * @param sIdNumber String with assigning authority namespace id
163        */
164       public void setAttendingDoctorAssigningAuthority( String sAssigningAuthority ) {
165          XCNElement xcnName = (XCNElement)getField(7);
166          if( xcnName == null )
167             xcnName = new XCNElement();
168          xcnName.setAssigningAuthority( sAssigningAuthority );
169          try {
170             setField( xcnName, 7 );
171          }
172          catch( ArrayIndexOutOfBoundsException ae ) {
173             ae.printStackTrace();
174          }
175          catch( MalformedSegmentException mfe ) {
176             mfe.printStackTrace();
177          }
178       }
179    
180       /**
181        * Get just the attending doctor identifier
182        * @return String with identifier number
183        */
184       public String getAttendingDoctorId() {
185          XCNElement xcnE = (XCNElement)getField(7);
186          if( xcnE != null )
187             return xcnE.getIdNumber();
188          else
189             return "";
190       }
191    
192       /**
193        * Get just the assigning authority namespace id
194        * @return String with identifier number
195        */
196       public String getAttendingDoctorAssigningAuthority() {
197          XCNElement xcnE = (XCNElement)getField(7);
198          if( xcnE != null ) {
199             HDElement hdE =  xcnE.getAssigningAuthority();
200             if( hdE != null )
201                return hdE.getNamespaceId();
202             else
203                return "";
204          }
205          else
206             return "";
207       }
208    
209       /**
210        * Get the full attending doctor as XCNElement
211        * @return XPNElement with fully defined name
212        *
213        */
214       public XCNElement getAttendingDoctor() {
215          return (XCNElement)getField(7);
216       }
217    
218       /**
219        * Set full Visit Number as CX element defined as completely as you like.
220        * @param cxVisitNumber CXElement with name defined
221        */
222       public void setVisitNumber( CXElement cxVisitNumber ) {
223          cxVisitNumber.setName( "PV1.19" );
224          try {
225             setField( cxVisitNumber, 19 );
226          }
227          catch( ArrayIndexOutOfBoundsException ae ) {
228             ae.printStackTrace();
229          }
230          catch( MalformedSegmentException mfe ) {
231             mfe.printStackTrace();
232          }
233       }
234    
235       /**
236        * Set Visit Number identifier and assigning facility.
237        * @param sIdNumber String with id number
238        * @param sAssigningAuthority String with assigning facility namespace id
239        */
240       public void setVisitNumberId( String sIdNumber, String sAssigningAuthority ) {
241          try {
242             CXElement cxVisitNumber = (CXElement)getField(19);
243             if( cxVisitNumber == null )
244                cxVisitNumber = new CXElement();
245             cxVisitNumber.setName( "PV1.19" );
246             cxVisitNumber.setIdentifier( sIdNumber );
247             cxVisitNumber.setAssigningAuthorityName( sAssigningAuthority );
248             setField( cxVisitNumber, 19 );
249          }
250          catch( ClassCastException ce ) {
251             System.err.println( vFields.toString() );
252             ce.printStackTrace();
253          }
254          catch( ArrayIndexOutOfBoundsException ae ) {
255             ae.printStackTrace();
256          }
257          catch( MalformedSegmentException mfe ) {
258             mfe.printStackTrace();
259          }
260       }
261    
262       /**
263        * Set Visit Number identifier.
264        * @param sIdNumber String with id number
265        */
266       public void setVisitNumberId( String sIdNumber ) {
267          CXElement cxVisitNumber = (CXElement)getField(19);
268          if( cxVisitNumber == null )
269             cxVisitNumber = new CXElement();
270          cxVisitNumber.setName( "PV1.19" );
271          cxVisitNumber.setIdentifier( sIdNumber );
272          try {
273             setField( cxVisitNumber, 19 );
274          }
275          catch( ArrayIndexOutOfBoundsException ae ) {
276             ae.printStackTrace();
277          }
278          catch( MalformedSegmentException mfe ) {
279             mfe.printStackTrace();
280          }
281       }
282    
283       /**
284        * Set Visit Number assigning facility.
285        * @param sIdNumber String with assigning authority namespace id
286        */
287       public void setVisitNumberAssigningAuthority( String sAssigningAuthority ) {
288          CXElement cxVisitNumber = (CXElement)getField(19);
289          if( cxVisitNumber == null )
290             cxVisitNumber = new CXElement();
291          cxVisitNumber.setAssigningAuthorityName( sAssigningAuthority );
292          try {
293             setField( cxVisitNumber, 19 );
294          }
295          catch( ArrayIndexOutOfBoundsException ae ) {
296             ae.printStackTrace();
297          }
298          catch( MalformedSegmentException mfe ) {
299             mfe.printStackTrace();
300          }
301       }
302    
303       /**
304        * Get just the Visit Number identifier.
305        * @return String with identifier number
306        */
307       public String getVisitNumberId() {
308          CXElement cxVisitNumber = (CXElement)getField(19);
309          if( cxVisitNumber != null )
310             return cxVisitNumber.getIdentifier();
311          else
312             return "";
313       }
314    
315       /**
316        * Get just the assigning authority namespace id.
317        * @return String with identifier number
318        */
319       public String getVisitNumberAssigningAuthority() {
320          CXElement cxVisitNumber = (CXElement)getField(19);
321          if( cxVisitNumber != null ) {
322             HDElement hdE =  cxVisitNumber.getAssigningAuthority();
323             if( hdE != null )
324                return hdE.getNamespaceId();
325             else
326                return "";
327          }
328          else
329             return "";
330       }
331    
332       /**
333        * Get the full Visit Number as CXElement.
334        * @return XPNElement with fully defined name
335        */
336       public CXElement getVisitNumber() {
337          return (CXElement)getField(19);
338       }
339    
340       /**
341        * Set the Discharge Disposition.
342        * @param sDisp one character string [0,1,2, or 3] for alive,
343        * dead, euthanized, or referred
344        */
345       public void setDisposition( String sDisp ) {
346          try {
347             setField( sDisp, 36 );
348          }
349          catch( ArrayIndexOutOfBoundsException ae ) {
350             ae.printStackTrace();
351          }
352       }
353    
354       /**
355        * Get Discharge Disposition.
356        * @return String (one character) with discharge disposition code
357        */
358       public String getDisposition() {
359          HL7Element e = getField( 36 );
360          if( e == null )
361             return "";
362          else
363             return e.getValue();
364       }
365    
366       /**
367        * Set the admit date/time of the message to string formatted date/time.
368        * @param sDateTime String with date/time in yyyyMMddHHmmss format
369        */
370       public void setAdmitDateTime( String sDateTime ) {
371          TSElement tse = new TSElement();
372          tse.setName( "PV1.44" );
373          tse.setDateTime( sDateTime );
374          try {
375             setField( tse, 44 );
376          }
377          catch( ArrayIndexOutOfBoundsException ae ) {
378             ae.printStackTrace();
379          }
380          catch( MalformedSegmentException mfe ) {
381             mfe.printStackTrace();
382          }
383       }
384    
385       /**
386        * Get the admit date/time as a string.
387        * @return String date/time
388        */
389       public String getAdmitDateTime() {
390          TSElement tse = (TSElement)getField( 44 );
391          if( tse != null )
392             return tse.getDateTime();
393          else
394             return "";
395       }
396    
397       /**
398        * Set the discharge date/time of the message to string formatted date/time.
399        * @param sDateTime String with date/time in yyyyMMddHHmmss format
400        *
401        */
402       public void setDischargeDateTime( String sDateTime ) {
403          TSElement tse = new TSElement();
404          tse.setName( "PV1.44" );
405          tse.setDateTime( sDateTime );
406          try {
407             setField( tse, 45 );
408          }
409          catch( ArrayIndexOutOfBoundsException ae ) {
410             ae.printStackTrace();
411          }
412          catch( MalformedSegmentException mfe ) {
413             mfe.printStackTrace();
414          }
415       }
416    
417       /**
418        * Get the discharge date/time as a string.
419        * @return String date/time
420        */
421       public String getDischargeDateTime() {
422          TSElement tse = (TSElement)getField( 45 );
423          if( tse != null )
424             return tse.getDateTime();
425          else
426             return "";
427       }
428    
429    } // End class PV1Segment
430