View Javadoc
1   /**
2    * The contents of this file are subject to the Mozilla Public License Version 1.1
3    * (the "License"); you may not use this file except in compliance with the License.
4    * You may obtain a copy of the License at http://www.mozilla.org/MPL/
5    * Software distributed under the License is distributed on an "AS IS" basis,
6    * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
7    * specific language governing rights and limitations under the License.
8    *
9    * The Original Code is "PopulateOBXSegment.java".  Description:
10   * "Example Code"
11   *
12   * The Initial Developer of the Original Code is University Health Network. Copyright (C)
13   * 2001.  All Rights Reserved.
14   *
15   * Contributor(s): James Agnew
16   *
17   * Alternatively, the contents of this file may be used under the terms of the
18   * GNU General Public License (the  �GPL�), in which case the provisions of the GPL are
19   * applicable instead of those above.  If you wish to allow use of your version of this
20   * file only under the terms of the GPL and not to allow others to use your version
21   * of this file under the MPL, indicate your decision by deleting  the provisions above
22   * and replace  them with the notice and other provisions required by the GPL License.
23   * If you do not delete the provisions above, a recipient may use your version of
24   * this file under either the MPL or the GPL.
25   *
26   */
27  
28  package ca.uhn.hl7v2.examples;
29  
30  import java.io.IOException;
31  
32  import ca.uhn.hl7v2.HL7Exception;
33  import ca.uhn.hl7v2.model.Varies;
34  import ca.uhn.hl7v2.model.v25.datatype.CE;
35  import ca.uhn.hl7v2.model.v25.datatype.ST;
36  import ca.uhn.hl7v2.model.v25.datatype.TX;
37  import ca.uhn.hl7v2.model.v25.group.ORU_R01_OBSERVATION;
38  import ca.uhn.hl7v2.model.v25.group.ORU_R01_ORDER_OBSERVATION;
39  import ca.uhn.hl7v2.model.v25.message.ORU_R01;
40  import ca.uhn.hl7v2.model.v25.segment.OBR;
41  import ca.uhn.hl7v2.model.v25.segment.OBX;
42  
43  /**
44   * Example code for populating an OBX segment
45   * 
46   * @author <a href="mailto:jamesagnew@sourceforge.net">James Agnew</a>
47   * @version $Revision: 1.1 $ updated on $Date: 2009-03-19 13:09:26 $ by $Author: jamesagnew $
48   */
49  public class PopulateOBXSegment
50  {
51  
52      /**
53       * We are going to create an ORU_R01 message, for the purpose of demonstrating the creation and
54       * population of an OBX segment.
55       * 
56       * The following message snippet is drawn (and modified for simplicity) 
57       * from section 7.4.2.4 of the HL7 2.5 specification.
58       * 
59       * <code>
60       * OBR|1||1234^LAB|88304 
61       * OBX|1|CE|88304|1|T57000^GALLBLADDER^SNM
62       * OBX|2|TX|88304|1|THIS IS A NORMAL GALLBLADDER 
63       * OBX|3|TX|88304&MDT|1|MICROSCOPIC EXAM SHOWS HISTOLOGICALLY NORMAL GALLBLADDER TISSUE
64       * </code>
65       * 
66       * The following code attempts to generate this message structure.
67       * 
68       * The HL7 spec defines, the following structure for an ORU^R01 message, represented in HAPI by
69       * the segment group:
70       * 
71       * <code>
72       *                     ORDER_OBSERVATION start
73       *       {
74       *       [ ORC ]
75       *       OBR
76       *       [ { NTE } ]
77       *                     TIMING_QTY start
78       *          [{
79       *          TQ1
80       *          [ { TQ2 } ]
81       *          }]
82       *                     TIMING_QTY end
83       *       [ CTD ]
84       *                     OBSERVATION start
85       *          [{
86       *          OBX
87       *          [ { NTE } ]
88       *          }]
89       *                     OBSERVATION end
90       *       [ { FT1 } ]
91       *       [ { CTI } ]
92       *                     SPECIMEN start
93       *          [{
94       *          SPM
95       *          [ { OBX } ]
96       *          }]
97       *                     SPECIMEN end
98       *       }
99       *                     ORDER_OBSERVATION end
100      * </code>
101      * 
102      * @param args
103      *            The arguments
104      * @throws HL7Exception
105      *             If any processing problem occurs
106      * @throws IOException 
107      */
108     public static void main(String[] args) throws HL7Exception, IOException {
109 
110         // First, a message object is constructed
111         ORU_R01/ORU_R01.html#ORU_R01">ORU_R01 message = new ORU_R01();
112 
113         /*
114          * The initQuickstart method populates all of the mandatory fields in the
115          * MSH segment of the message, including the message type, the timestamp,
116          * and the control ID.
117          */
118         message.initQuickstart("ORU", "R01", "T");
119         
120         /*
121          * The OBR segment is contained within a group called ORDER_OBSERVATION, 
122          * which is itself in a group called PATIENT_RESULT. These groups are
123          * reached using named accessors.
124          */
125         ORU_R01_ORDER_OBSERVATION orderObservation = message.getPATIENT_RESULT().getORDER_OBSERVATION();
126 
127         // Populate the OBR
128         OBR obr = orderObservation.getOBR();
129         obr.getSetIDOBR().setValue("1");
130         obr.getFillerOrderNumber().getEntityIdentifier().setValue("1234");
131         obr.getFillerOrderNumber().getNamespaceID().setValue("LAB");
132         obr.getUniversalServiceIdentifier().getIdentifier().setValue("88304");
133         
134         /*
135          * The OBX segment is in a repeating group called OBSERVATION. You can 
136          * use a named accessor which takes an index to access a specific 
137          * repetition. You can ask for an index which is equal to the 
138          * current number of repetitions,and a new repetition will be created.
139          */
140         ORU_R01_OBSERVATION observation = orderObservation.getOBSERVATION(0);
141 
142         // Populate the first OBX
143 		OBX obx = observation.getOBX();
144         obx.getSetIDOBX().setValue("1");
145         obx.getObservationIdentifier().getIdentifier().setValue("88304");
146         obx.getObservationSubID().setValue("1");
147 
148         // The first OBX has a value type of CE. So first, we populate OBX-2 with "CE"...
149         obx.getValueType().setValue("CE");
150         
151         // ... then we create a CE instance to put in OBX-5.
152         CE25/datatype/CE.html#CE">CE ce = new CE(message);
153         ce.getIdentifier().setValue("T57000");
154         ce.getText().setValue("GALLBLADDER");
155         ce.getNameOfCodingSystem().setValue("SNM");
156         Varies value = obx.getObservationValue(0);
157         value.setData(ce);
158         
159         // Now we populate the second OBX
160         obx = orderObservation.getOBSERVATION(1).getOBX();
161         obx.getSetIDOBX().setValue("2");
162         obx.getObservationSubID().setValue("1");
163 
164         // The second OBX in the sample message has an extra subcomponent at
165         // OBX-3-1. This component is actually an ST, but the HL7 specification allows
166         // extra subcomponents to be tacked on to the end of a component. This is
167         // uncommon, but HAPI nontheless allows it.
168         ST observationIdentifier = obx.getObservationIdentifier().getIdentifier();
169         observationIdentifier.setValue("88304");
170         SThtml#ST">ST extraSubcomponent = new ST(message);
171         extraSubcomponent.setValue("MDT");
172         observationIdentifier.getExtraComponents().getComponent(0).setData(extraSubcomponent );
173 
174         // The first OBX has a value type of TX. So first, we populate OBX-2 with "TX"...
175         obx.getValueType().setValue("TX");
176         
177         // ... then we create a CE instance to put in OBX-5.
178         TX25/datatype/TX.html#TX">TX tx = new TX(message);
179         tx.setValue("MICROSCOPIC EXAM SHOWS HISTOLOGICALLY NORMAL GALLBLADDER TISSUE");
180         value = obx.getObservationValue(0);
181         value.setData(tx);
182 
183         // Print the message (remember, the MSH segment was not fully or correctly populated)
184         System.out.println(message.encode());
185 
186         /*
187          * MSH|^~\&|||||20111102082111.435-0500||ORU^R01^ORU_R01|305|T|2.5
188          * OBR|1||1234^LAB|88304
189          * OBX|1|CE|88304|1|T57000^GALLBLADDER^SNM
190          * OBX|2|TX|88304&MDT|1|MICROSCOPIC EXAM SHOWS HISTOLOGICALLY NORMAL GALLBLADDER TISSUE
191          */
192     }
193 
194 }