/** * The contents of this file are subject to the Mozilla Public License Version 1.1 * (the "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.mozilla.org/MPL/ * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the * specific language governing rights and limitations under the License. * * The Original Code is "PopulateOBXSegment.java". Description: * "Example Code" * * The Initial Developer of the Original Code is University Health Network. Copyright (C) * 2001. All Rights Reserved. * * Contributor(s): James Agnew * * Alternatively, the contents of this file may be used under the terms of the * GNU General Public License (the “GPL”), in which case the provisions of the GPL are * applicable instead of those above. If you wish to allow use of your version of this * file only under the terms of the GPL and not to allow others to use your version * of this file under the MPL, indicate your decision by deleting the provisions above * and replace them with the notice and other provisions required by the GPL License. * If you do not delete the provisions above, a recipient may use your version of * this file under either the MPL or the GPL. * */ package ca.uhn.hl7v2.examples; import ca.uhn.hl7v2.HL7Exception; import ca.uhn.hl7v2.model.Varies; import ca.uhn.hl7v2.model.v25.datatype.CE; import ca.uhn.hl7v2.model.v25.datatype.ST; import ca.uhn.hl7v2.model.v25.datatype.TX; import ca.uhn.hl7v2.model.v25.group.ORU_R01_ORDER_OBSERVATION; import ca.uhn.hl7v2.model.v25.message.ORU_R01; import ca.uhn.hl7v2.model.v25.segment.OBR; import ca.uhn.hl7v2.model.v25.segment.OBX; import ca.uhn.hl7v2.parser.PipeParser; /** * Example code for populating an OBX segment * * @author James Agnew * @version $Revision: 1.1 $ updated on $Date: 2009/03/19 13:09:26 $ by $Author: jamesagnew $ */ public class PopulateOBXSegment { /** * We are going to create an ORU_R01 message, for the purpose of demonstrating the creation and * population of an OBX segment. * * The following message snippet is drawn (and modified for simplicity) * from section 7.4.2.4 of the HL7 2.5 specification. * * * OBR|1||1234^LAB|88304 * OBX|1|CE|88304|1|T57000^GALLBLADDER^SNM * OBX|2|TX|88304|1|THIS IS A NORMAL GALLBLADDER * OBX|3|TX|88304&MDT|1|MICROSCOPIC EXAM SHOWS HISTOLOGICALLY NORMAL GALLBLADDER TISSUE * * * The following code attempts to generate this message structure. * * The HL7 spec defines, the following structure for an ORU^R01 message, represented in HAPI by * the segment group: * * * ORDER_OBSERVATION * { * [ ORC ] * OBR * [ { NTE } ] * TIMING_QTY * [{ * TQ1 * [ { TQ2 } ] * }] * TIMING_QTY * [ CTD ] * OBSERVATION * [{ * OBX * [ { NTE } ] * }] * OBSERVATION * [ { FT1 } ] * [ { CTI } ] * SPECIMEN * [{ * SPM * [ { OBX } ] * }] * SPECIMEN * } * ORDER_OBSERVATION * * * @param args * The arguments * @throws HL7Exception * If any processing problem occurs */ public static void main(String[] args) throws HL7Exception { // First, a message object is constructed ORU_R01 message = new ORU_R01(); // A few basic MSH fields are populated. In a real situation, this would not be enough // to produce a valid message, but for demonstration purposes we'll skip a few // fields. message.getMSH().getEncodingCharacters().setValue("^~\\&"); message.getMSH().getFieldSeparator().setValue("|"); ORU_R01_ORDER_OBSERVATION orderObservation = message.getPATIENT_RESULT().getORDER_OBSERVATION(); // Populate the OBR OBR obr = orderObservation.getOBR(); obr.getSetIDOBR().setValue("1"); obr.getFillerOrderNumber().getEntityIdentifier().setValue("1234"); obr.getFillerOrderNumber().getNamespaceID().setValue("LAB"); obr.getUniversalServiceIdentifier().getIdentifier().setValue("88304"); // Populate the first OBX OBX obx = orderObservation.getOBSERVATION(0).getOBX(); obx.getSetIDOBX().setValue("1"); obx.getObservationIdentifier().getIdentifier().setValue("88304"); obx.getObservationSubID().setValue("1"); // The first OBX has a value type of CE. So first, we populate OBX-2 with "CE"... obx.getValueType().setValue("CE"); // ... then we create a CE instance to put in OBX-5. CE ce = new CE(message); ce.getIdentifier().setValue("T57000"); ce.getText().setValue("GALLBLADDER"); ce.getNameOfCodingSystem().setValue("SNM"); Varies value = obx.getObservationValue(0); value.setData(ce); // Now we populate the second OBX obx = orderObservation.getOBSERVATION(1).getOBX(); obx.getSetIDOBX().setValue("2"); obx.getObservationSubID().setValue("1"); // The second OBX in the sample message has an extra subcomponent at // OBX-3-1. This component is actually an ST, but the HL7 specification allows // extra subcomponents to be tacked on to the end of a component. This is // uncommon, but HAPI nontheless allows it. ST observationIdentifier = obx.getObservationIdentifier().getIdentifier(); observationIdentifier.setValue("88304"); ST extraSubcomponent = new ST(message); extraSubcomponent.setValue("MDT"); observationIdentifier.getExtraComponents().getComponent(0).setData(extraSubcomponent ); // The first OBX has a value type of TX. So first, we populate OBX-2 with "TX"... obx.getValueType().setValue("TX"); // ... then we create a CE instance to put in OBX-5. TX tx = new TX(message); tx.setValue("MICROSCOPIC EXAM SHOWS HISTOLOGICALLY NORMAL GALLBLADDER TISSUE"); value = obx.getObservationValue(0); value.setData(tx); // Print the message (remember, the MSH segment was not fully or correctly populated) System.out.append(new PipeParser().encode(message)); /* * MSH|^~\& * OBR|1||1234^LAB|88304 * OBX|1|CE|88304|1|T57000^GALLBLADDER^SNM * OBX|2|TX|88304&MDT|1|MICROSCOPIC EXAM SHOWS HISTOLOGICALLY NORMAL GALLBLADDER TISSUE */ } }