/*******************************************************************************
 *  Copyright 2017 Centre for Development of Advanced Computing(C-DAC), Pune
 *  
 *  Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 *  
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *******************************************************************************/
package cdac.medinfo.sdk.hl7282.baselibs.segments;

import cdac.medinfo.sdk.hl7282.baselibs.CNE;
import cdac.medinfo.sdk.hl7282.baselibs.CWE;
import cdac.medinfo.sdk.hl7282.baselibs.DTM;
import cdac.medinfo.sdk.hl7282.baselibs.EI;
import cdac.medinfo.sdk.hl7282.baselibs.FN;
import cdac.medinfo.sdk.hl7282.baselibs.HD;
import cdac.medinfo.sdk.hl7282.baselibs.ID;
import cdac.medinfo.sdk.hl7282.baselibs.NM;
import cdac.medinfo.sdk.hl7282.baselibs.ST;
import cdac.medinfo.sdk.hl7282.baselibs.XCN;
import cdac.medinfo.sdk.hl7282.baselibs.XON;
import cdac.medinfo.sdk.hl7282.baselibs.XPN;
import cdac.medinfo.sdk.hl7282.commoninterface.IDataType;
import cdac.medinfo.sdk.hl7282.commoninterface.ISingleCollection;
import cdac.medinfo.sdk.hl7282.utils.EnumSegments;
import cdac.medinfo.sdk.hl7282.utils.SingleCollection;

/**
 * DON - Donation Segment <p>
 * This segment is to describe the actual donation procedure.
 * <p>Represents an HL7 DON Donation Segment. 
 * This segment has the following fields:</p><p>
 * DON-1: Donation Identification Number (EI)<b>Conditional</b><br> 
 * DON-2: Donation Type (CNE)<b>Conditional</b><br> 
 * DON-3: Phlebotomy Start Date Time (DTM)<b>Required</b><br> 
 * DON-4: Phlebotomy End Date Time (DTM)<b>Required</b><br> 
 * DON-5: Donation Duration (NM)<b>Required</b><br> 
 * DON-6: Donation Duration Units (CNE)<b>Required</b><br> 
 * DON-7: Intended Procedure Type (CNE)<b>Required</b><br> 
 * DON-8: Actual Procedure Type (CNE)<b>Required</b><br> 
 * DON-9: Donor Eligibility Flag (ID)<b>Required</b><br> 
 * DON-10: Donor Eligibility Procedure Type (CNE)<b>Required</b><br> 
 * DON-11: Donor Eligibility Date (DTM)<b>Required</b><br> 
 * DON-12: Process Interruption (CNE)<b>Required</b><br>
 * DON-13: Process Interruption Reason (CNE)<b>Required</b><br>
 * DON-14: Phlebotomy Issue (CNE)<b>Required</b><br>
 * DON-15: Intended Recipient Blood Relative (ID)<b>Required</b><br>
 * DON-16: Intended Recipient Name (XPN)<b>Required</b><br>
 * DON-17: Intended Recipient DOB (DTM)<b>Required</b><br>
 * DON-18: Intended Recipient Facility (XON)<b>Required</b><br>
 * DON-19: Intended Recipient Procedure Date (DTM)<b>Required</b><br>
 * DON-20: Intended Recipient Ordering Provider (XPN)<b>Required</b><br>
 * DON-21: Phlebotomy Status (CNE)<b>Required</b><br>
 * DON-22: Arm Stick (CNE)<b>Required</b><br>
 * DON-23: Bleed Start Phlebotomist (XPN)<b>Required</b><br>
 * DON-24: Bleed End Phlebotomist (XPN)<b>Required</b><br>
 * DON-25: Aphaeresis Type Machine (ST)<b>Required</b><br>
 * DON-26: Aphaeresis Machine Serial Number (ST)<b>Required</b><br>
 * DON-27: Donor Reaction (ID)<b>Required</b><br>
 * DON-28: Final Review Staff ID (XPN)<b>Required</b><br>
 * DON-29: Final Review Date Time (DTM)<b>Required</b><br>
 * DON-30: Number of Tubes Collected (NM)<b>Required</b><br>
 * DON-31: Donation Sample Identifier (EI)<b>Required</b><br>
 * DON-32: Donation Accept Staff (XCN)<b>Required</b><br>
 * DON-33: Donation Material Review Staff (XCN)<b>Required</b><br>  
 * </p>
 * This class provides mechanism to validate message against HL7 v 2.8.2 standard.
 * The class provides accessors & mutators for the elements mentioned above.
 * The class has validate method which validates Message against HL7 v 2.8.2 standard.
 *
 * <p>User can also create Segment through {@link SegmentFactory}
 */
 public class DON extends Segment   
{
	


	protected Delimiter objDelimiter;

	/**
	 * Constructs the BHS segment.
	 */
	public DON()
	{
		super(EnumSegments.HL7_SEG_DON);
		objDelimiter = new Delimiter();
	}
	
	/**
	 * Retrieves the Donation Identification Number.
	 * This field contains a unique identifier, Donation Identification Number (DIN), for the specific donation and is therefore mandatory except when using an eligibility message type in which only DON-9, DON-10, and DON-11 are populated.
	 * @return EI - donationIdentificationNumber in object form.
	 */
	public EI getDonationIdentificationNumber() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3340);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (EI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Donation Identification Number.
	 * This field contains a unique identifier, Donation Identification Number (DIN), for the specific donation and is therefore mandatory except when using an eligibility message type in which only DON-9, DON-10, and DON-11 are populated.
	 * @param strEntityIdentifier Specifies to be unique within the series of identifiers created by the 
	 * 								assigning authority, defined by a hierarchic designator
	 * @param strNamespaceId Specifies the assigning authority is a unique identifier of the system 
	 * 							(or organization or agency or department) that creates the data. 
	 * @param strUniversalId Specifies a string formatted according to the scheme defined by the third component universal ID type.
	 * 							It is intended to be unique over time within the UID type.
	 * @param strUniversalIdType Governs the interpretation of the Universal ID.  
	 */
	public void setDonationIdentificationNumber(String strEntityIdentifier,String strNamespaceId,String strUniversalId,
			String strUniversalIdType)
	{
		EI ei  = (EI)getDataElement(3340);
		ei.setEntityIdentifier(strEntityIdentifier);
		ei.setNamespaceId(strNamespaceId);
		ei.setUniversalId(strUniversalId);
		ei.setUniversalIdType(strUniversalIdType);
		setDonationIdentificationNumber(ei);
	}

	/**
	 * Set the Donation Identification Number.
	 * This field contains a unique identifier, Donation Identification Number (DIN), for the specific donation and is therefore mandatory except when using an eligibility message type in which only DON-9, DON-10, and DON-11 are populated.
	 * @param objDonationIdentificationNumber Object of Donation Identification Number.
	 */
	public void setDonationIdentificationNumber(EI objDonationIdentificationNumber)
	{
		setDataType(3340,objDonationIdentificationNumber);
	}

	
	/**
	 * Retrieves the Donation Type.
	 * The type of donation.  This element is mandatory except when using an eligibility message type in which only DON-9, DON-10, and DON-11 are populated 
	 * @return CNE - DonationType
	 */
	public CNE getDonationType() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3341);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CNE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Donation Type.
	 * The type of donation.  This element is mandatory except when using an eligibility message type in which only DON-9, DON-10, and DON-11 are populated 
	 * @param strIdentifier Specifies sequence of characters (the code) that uniquely identifies
	 * 						 the item being referenced by the CNE.
	 * @param strText Specifies descriptive or textual name of the identifier, e.g., myocardial infarction 
	 * @param strNameOfCodingSystem Specifies the coding scheme being used in the identifier component. 
	 * @param strAlternateIdentifier Specifies the local or user seen code as described. 
	 * @param strAlternateText Specifies descriptive or textual name of the alternate identifier.  
	 * @param strNameOfAlternateCodingSystem Specifies the coding scheme being used in the alternate identifier 
	 * 											component.  
	 * @param strCodingSystemVersionID Specifies the version ID for the coding system. 
	 * @param strAlternateCodingSystemVersionID Specifies the version ID for the coding system .
	 * @param strOriginalText Specifies the original text that was available to an automated process or a human 
	 * 							before a specific code was assigned.
	 * @param strSecondAlternateIdentifier Specifies a sequence of characters that uniquely identifies the second alternate code
	 * @param strSecondAlternateText Specifies a the textual information of the second alternate code
	 * @param strNameOfSecondAltenateCodingSystem Specifies the second coding scheme being used in the identifier component.
	 * @param strSecondAlternateCodingSystemVersionID Specifies version ID of Second alternative coding system.
	 * @param strCodingSystemOID contains the ISO Object identifier for the coding system.
	 * @param strValueSetOID contains the value set from which CNE-1 is obtained 
	 * @param strValueSetVersionID contains the version of the value set identified by CNE-15. 
	 * @param strAlternateCodingSystemOID contains the ISO Object identifier for the alternate coding system
	 * @param strAlternateValueSetOID contains the value set from which CNE-4 is obtained
	 * @param strAlternateValueSetVersionID contains the version of the value set identified by CNE-18. 
	 * @param strSecondAlternateCodingSystemOID contains the value set from which CNE-12 is obtained
	 * @param strSecondAlternateValueSetOID contains the value set from which CNE-10 is obtained
	 * @param strSecondAlternateValueSetVersionID contains the version of the value set identified by CNE-21. 
	 */
	public void setDonationType(String strIdentifier,String strText,String strNameOfCodingSystem,String strAlternateIdentifier,
			String strAlternateText,String strNameOfAlternateCodingSystem,String strCodingSystemVersionID,
			String strAlternateCodingSystemVersionID,String strOriginalText, String strSecondAlternateIdentifier, String strSecondAlternateText,
			String strNameOfSecondAltenateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, 
			String strValueSetOID, String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID,
			String strAlternateValueSetVersionID, String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID,
			String strSecondAlternateValueSetVersionID)
	{
		CNE cne  = (CNE)getDataElement(3341);
		cne.setIdentifier(strIdentifier);
		cne.setText(strText);
		cne.setNameOfCodingSystem(strNameOfCodingSystem);
		cne.setAlternateIdentifier(strAlternateIdentifier);
		cne.setAlternateText(strAlternateText);
		cne.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem);
		cne.setCodingSystemVersionID(strCodingSystemVersionID);
		cne.setAlternateCodingSystemVersionID(strAlternateCodingSystemVersionID);
		cne.setOriginalText(strOriginalText); 
		cne.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cne.setSecondAlternateText(strSecondAlternateText);
		cne.setNameofSecondAlternateCodingSystem(strNameOfSecondAltenateCodingSystem);
		cne.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cne.setCodingSystemOID(strCodingSystemOID);
		cne.setValueSetOID(strValueSetOID);
		cne.setValueSetVersionID(strValueSetVersionID);
		cne.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cne.setAlternateValueSetOID(strAlternateValueSetOID);
		cne.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cne.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cne.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cne.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setDonationType(cne);
	}

	/**
	 * Set the Donation Type.
	 * The type of donation.  This element is mandatory except when using an eligibility message type in which only DON-9, DON-10, and DON-11 are populated
	 * @param objDonationType Object of Donation Type.
	 */
	public void setDonationType(CNE objDonationType)
	{
		setDataType(3341,objDonationType);
	}

	/**
	 * Retrieves the Phlebotomy Start Date Time.
	 * The start date and time of the phlebotomy.
	 * @return DTM - phlebotomyStartDateTime
	 */
	public DTM getPhlebotomyStartDateTime() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3342);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Phlebotomy Start Date Time.
	 * The start date and time of the phlebotomy.
	 * @param strTime Specifies a point in time using a 24-hour clock notation. 
	 * 
	 */
	public void setPhlebotomyStartDateTime(String strTime) 
	{
		DTM dtm  = (DTM)getDataElement(3342);
		dtm.setValue(strTime);		
		setPhlebotomyStartDateTime(dtm);
	}

	/**
	 * Set the Phlebotomy Start Date Time.
	 * The start date and time of the phlebotomy.
	 * @param objPhlebotomyStartDateTime Object of Results Rpt Status Chng Date Time.
	 */
	public void setPhlebotomyStartDateTime(DTM objPhlebotomyStartDateTime)
	{
		setDataType(3342,objPhlebotomyStartDateTime);
	}
	
	/**
	 * Retrieves the Phlebotomy End Date Time.
	 * The end date and time of the phlebotomy.
	 * @return DTM - phlebotomyEndDateTime
	 */
	public DTM getPhlebotomyEndDateTime() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3343);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Phlebotomy End Date Time.
	 * The end date and time of the phlebotomy.
	 * @param strTime Specifies a point in time using a 24-hour clock notation. 
	 * 
	 */
	public void setPhlebotomyEndDateTime(String strTime) 
	{
		DTM dtm  = (DTM)getDataElement(3343);
		dtm.setValue(strTime);		
		setPhlebotomyEndDateTime(dtm);
	}

	/**
	 * Set the Phlebotomy End Date Time.
	 * The end date and time of the phlebotomy.
	 * @param objPhlebotomyEndDateTime Object of Phlebotomy End Date Time.
	 */
	public void setPhlebotomyEndDateTime(DTM objPhlebotomyEndDateTime)
	{
		setDataType(3343,objPhlebotomyEndDateTime);
	}
		
	/**
	 * Retrieves the Donation Duration.
	 * The duration of the phlebotomy or the length of time that elapsed between the phlebotomy start date and time and the phlebotomy end date and time.  
	 * @return NM - donationDuration
	 */
	public NM getDonationDuration() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3344);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Number of Donation Duration.
	 * The duration of the phlebotomy or the length of time that elapsed between the phlebotomy start date and time and the phlebotomy end date and time.   
	 * @param strDonationDuration Specifies Donation Duration..
	 */
	public void setDonationDuration(String strDonationDuration) 
	{
		NM nm  = (NM)getDataElement(3344);
		nm.setValue(strDonationDuration);
		setDonationDuration(nm);
	}

	/**
	 * Set the Number of Donation Duration.
	 * The duration of the phlebotomy or the length of time that elapsed between the phlebotomy start date and time and the phlebotomy end date and time.
	 * @param objDonationDuration Object of Donation Duration.
	 */
	public void setDonationDuration(NM objDonationDuration)
	{
		setDataType(3344,objDonationDuration);
	}
	
	
	/**
	 * Set the Donation Duration Units.
	 * The duration units.  The duration units and duration are restricted to minutes and seconds. 
	 * @return CNE - DonationDurationUnits
	 */
	public CNE getDonationDurationUnits() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3345);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CNE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Donation Duration Units.
	 * The duration units.  The duration units and duration are restricted to minutes and seconds. 
	 * @param strIdentifier Specifies sequence of characters (the code) that uniquely identifies
	 * 						 the item being referenced by the CNE.
	 * @param strText Specifies descriptive or textual name of the identifier, e.g., myocardial infarction 
	 * @param strNameOfCodingSystem Specifies the coding scheme being used in the identifier component. 
	 * @param strAlternateIdentifier Specifies the local or user seen code as described. 
	 * @param strAlternateText Specifies descriptive or textual name of the alternate identifier.  
	 * @param strNameOfAlternateCodingSystem Specifies the coding scheme being used in the alternate identifier 
	 * 											component.  
	 * @param strCodingSystemVersionID Specifies the version ID for the coding system. 
	 * @param strAlternateCodingSystemVersionID Specifies the version ID for the coding system .
	 * @param strOriginalText Specifies the original text that was available to an automated process or a human 
	 * 							before a specific code was assigned.
	 * @param strSecondAlternateIdentifier Specifies a sequence of characters that uniquely identifies the second alternate code
	 * @param strSecondAlternateText Specifies a the textual information of the second alternate code
	 * @param strNameOfSecondAltenateCodingSystem Specifies the second coding scheme being used in the identifier component.
	 * @param strSecondAlternateCodingSystemVersionID Specifies version ID of Second alternative coding system.
	 * @param strCodingSystemOID contains the ISO Object identifier for the coding system.
	 * @param strValueSetOID contains the value set from which CNE-1 is obtained 
	 * @param strValueSetVersionID contains the version of the value set identified by CNE-15. 
	 * @param strAlternateCodingSystemOID contains the ISO Object identifier for the alternate coding system
	 * @param strAlternateValueSetOID contains the value set from which CNE-4 is obtained
	 * @param strAlternateValueSetVersionID contains the version of the value set identified by CNE-18. 
	 * @param strSecondAlternateCodingSystemOID contains the value set from which CNE-12 is obtained
	 * @param strSecondAlternateValueSetOID contains the value set from which CNE-10 is obtained
	 * @param strSecondAlternateValueSetVersionID contains the version of the value set identified by CNE-21. 
	 */
	public void setDonationDurationUnits(String strIdentifier,String strText,String strNameOfCodingSystem,String strAlternateIdentifier,
			String strAlternateText,String strNameOfAlternateCodingSystem,String strCodingSystemVersionID,
			String strAlternateCodingSystemVersionID,String strOriginalText, String strSecondAlternateIdentifier, String strSecondAlternateText,
			String strNameOfSecondAltenateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, 
			String strValueSetOID, String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID,
			String strAlternateValueSetVersionID, String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID,
			String strSecondAlternateValueSetVersionID)
	{
		CNE cne  = (CNE)getDataElement(3345);
		cne.setIdentifier(strIdentifier);
		cne.setText(strText);
		cne.setNameOfCodingSystem(strNameOfCodingSystem);
		cne.setAlternateIdentifier(strAlternateIdentifier);
		cne.setAlternateText(strAlternateText);
		cne.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem);
		cne.setCodingSystemVersionID(strCodingSystemVersionID);
		cne.setAlternateCodingSystemVersionID(strAlternateCodingSystemVersionID);
		cne.setOriginalText(strOriginalText); 
		cne.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cne.setSecondAlternateText(strSecondAlternateText);
		cne.setNameofSecondAlternateCodingSystem(strNameOfSecondAltenateCodingSystem);
		cne.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cne.setCodingSystemOID(strCodingSystemOID);
		cne.setValueSetOID(strValueSetOID);
		cne.setValueSetVersionID(strValueSetVersionID);
		cne.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cne.setAlternateValueSetOID(strAlternateValueSetOID);
		cne.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cne.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cne.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cne.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setDonationDurationUnits(cne);
	}

	/**
	 * Set the Donation Duration Units.
	 * The duration units.  The duration units and duration are restricted to minutes and seconds.
	 * @param objDonationDurationUnits Object of Donation Duration Units.
	 */
	public void setDonationDurationUnits(CNE objDonationDurationUnits)
	{
		setDataType(3345,objDonationDurationUnits);
	}
	
	
	/**
	 * Retrieves the Intended Procedure Type.
	 * The procedure(s) intended to be performed on the donor.
	 * @return ISingleCollection<CNE> - intendedProcedureType
	 */
	public ISingleCollection<CNE> getIntendedProcedureType() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3346);
		ISingleCollection<CNE> objDataList = new SingleCollection<CNE>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				CNE objCNE = (CNE)objDataType;
				objDataList.add(objCNE);
			}
		}
		return objDataList;
	}
	
	/**
	 * Add the Intended Procedure Type.
	 * The procedure(s) intended to be performed on the donor.
	 * @param strIdentifier Specifies sequence of characters (the code) that uniquely identifies
	 * 						 the item being referenced by the CNE.
	 * @param strText Specifies descriptive or textual name of the identifier, e.g., myocardial infarction 
	 * @param strNameOfCodingSystem Specifies the coding scheme being used in the identifier component. 
	 * @param strAlternateIdentifier Specifies the local or user seen code as described. 
	 * @param strAlternateText Specifies descriptive or textual name of the alternate identifier.  
	 * @param strNameOfAlternateCodingSystem Specifies the coding scheme being used in the alternate identifier 
	 * 											component.  
	 * @param strCodingSystemVersionID Specifies the version ID for the coding system. 
	 * @param strAlternateCodingSystemVersionID Specifies the version ID for the coding system .
	 * @param strOriginalText Specifies the original text that was available to an automated process or a human 
	 * 							before a specific code was assigned.
	 * @param strSecondAlternateIdentifier Specifies a sequence of characters that uniquely identifies the second alternate code
	 * @param strSecondAlternateText Specifies a the textual information of the second alternate code
	 * @param strNameOfSecondAltenateCodingSystem Specifies the second coding scheme being used in the identifier component.
	 * @param strSecondAlternateCodingSystemVersionID Specifies version ID of Second alternative coding system.
	 * @param strCodingSystemOID contains the ISO Object identifier for the coding system.
	 * @param strValueSetOID contains the value set from which CNE-1 is obtained 
	 * @param strValueSetVersionID contains the version of the value set identified by CNE-15. 
	 * @param strAlternateCodingSystemOID contains the ISO Object identifier for the alternate coding system
	 * @param strAlternateValueSetOID contains the value set from which CNE-4 is obtained
	 * @param strAlternateValueSetVersionID contains the version of the value set identified by CNE-18. 
	 * @param strSecondAlternateCodingSystemOID contains the value set from which CNE-12 is obtained
	 * @param strSecondAlternateValueSetOID contains the value set from which CNE-10 is obtained
	 * @param strSecondAlternateValueSetVersionID contains the version of the value set identified by CNE-21. 
	 */ 
	public void addIntendedProcedureType(String strIdentifier,String strText,String strNameOfCodingSystem,String strAlternateIdentifier,
			String strAlternateText,String strNameOfAlternateCodingSystem,String strCodingSystemVersionID,
			String strAlternateCodingSystemVersionID,String strOriginalText, String strSecondAlternateIdentifier, String strSecondAlternateText,
			String strNameOfSecondAltenateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, 
			String strValueSetOID, String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID,
			String strAlternateValueSetVersionID, String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID,
			String strSecondAlternateValueSetVersionID)
	{
		CNE cne  = (CNE)getDataElement(3346);
		cne.setIdentifier(strIdentifier);
		cne.setText(strText);
		cne.setNameOfCodingSystem(strNameOfCodingSystem);
		cne.setAlternateIdentifier(strAlternateIdentifier);
		cne.setAlternateText(strAlternateText);
		cne.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem);
		cne.setCodingSystemVersionID(strCodingSystemVersionID);
		cne.setAlternateCodingSystemVersionID(strAlternateCodingSystemVersionID);
		cne.setOriginalText(strOriginalText); 
		cne.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cne.setSecondAlternateText(strSecondAlternateText);
		cne.setNameofSecondAlternateCodingSystem(strNameOfSecondAltenateCodingSystem);
		cne.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cne.setCodingSystemOID(strCodingSystemOID);
		cne.setValueSetOID(strValueSetOID);
		cne.setValueSetVersionID(strValueSetVersionID);
		cne.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cne.setAlternateValueSetOID(strAlternateValueSetOID);
		cne.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cne.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cne.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cne.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		addIntendedProcedureType(cne);
	}

	/**	
	 * Add the Intended Procedure Type.
	 * The procedure(s) intended to be performed on the donor.
	 * @param objIntendedProcedureType Object ofIntended Procedure Type.
	 */
	public void addIntendedProcedureType(CNE objIntendedProcedureType)
	{
		addDataType(3346,objIntendedProcedureType);
	}

	/**
	 * Set the Intended Procedure Type.
	 * The procedure(s) intended to be performed on the donor.
	 * @param objIntendedProcedureTypeList List of Intended Procedure Type.
	 */
	@SuppressWarnings("unchecked")
	public void setIntendedProcedureType(ISingleCollection<CNE> objIntendedProcedureTypeList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objIntendedProcedureTypeList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(3346,objCollection);
	}

	/**
	 * Retrieves the Actual Procedure Type.
	 * The actual procedure(s) performed on the donor.
	 * @return ISingleCollection<CNE> - actualProcedureType
	 */
	public ISingleCollection<CNE> getActualProcedureType() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3347);
		ISingleCollection<CNE> objDataList = new SingleCollection<CNE>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				CNE objCNE = (CNE)objDataType;
				objDataList.add(objCNE);
			}
		}
		return objDataList;
	}
	
	/**
	 * Add the Actual Procedure Type.
	 * The actual procedure(s) performed on the donor.
	 * @param strIdentifier Specifies sequence of characters (the code) that uniquely identifies
	 * 						 the item being referenced by the CNE.
	 * @param strText Specifies descriptive or textual name of the identifier, e.g., myocardial infarction 
	 * @param strNameOfCodingSystem Specifies the coding scheme being used in the identifier component. 
	 * @param strAlternateIdentifier Specifies the local or user seen code as described. 
	 * @param strAlternateText Specifies descriptive or textual name of the alternate identifier.  
	 * @param strNameOfAlternateCodingSystem Specifies the coding scheme being used in the alternate identifier 
	 * 											component.  
	 * @param strCodingSystemVersionID Specifies the version ID for the coding system. 
	 * @param strAlternateCodingSystemVersionID Specifies the version ID for the coding system .
	 * @param strOriginalText Specifies the original text that was available to an automated process or a human 
	 * 							before a specific code was assigned.
	 * @param strSecondAlternateIdentifier Specifies a sequence of characters that uniquely identifies the second alternate code
	 * @param strSecondAlternateText Specifies a the textual information of the second alternate code
	 * @param strNameOfSecondAltenateCodingSystem Specifies the second coding scheme being used in the identifier component.
	 * @param strSecondAlternateCodingSystemVersionID Specifies version ID of Second alternative coding system.
	 * @param strCodingSystemOID contains the ISO Object identifier for the coding system.
	 * @param strValueSetOID contains the value set from which CNE-1 is obtained 
	 * @param strValueSetVersionID contains the version of the value set identified by CNE-15. 
	 * @param strAlternateCodingSystemOID contains the ISO Object identifier for the alternate coding system
	 * @param strAlternateValueSetOID contains the value set from which CNE-4 is obtained
	 * @param strAlternateValueSetVersionID contains the version of the value set identified by CNE-18. 
	 * @param strSecondAlternateCodingSystemOID contains the value set from which CNE-12 is obtained
	 * @param strSecondAlternateValueSetOID contains the value set from which CNE-10 is obtained
	 * @param strSecondAlternateValueSetVersionID contains the version of the value set identified by CNE-21. 
	 */ 
	public void addActualProcedureType(String strIdentifier,String strText,String strNameOfCodingSystem,String strAlternateIdentifier,
			String strAlternateText,String strNameOfAlternateCodingSystem,String strCodingSystemVersionID,
			String strAlternateCodingSystemVersionID,String strOriginalText, String strSecondAlternateIdentifier, String strSecondAlternateText,
			String strNameOfSecondAltenateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, 
			String strValueSetOID, String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID,
			String strAlternateValueSetVersionID, String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID,
			String strSecondAlternateValueSetVersionID)
	{
		CNE cne  = (CNE)getDataElement(3347);
		cne.setIdentifier(strIdentifier);
		cne.setText(strText);
		cne.setNameOfCodingSystem(strNameOfCodingSystem);
		cne.setAlternateIdentifier(strAlternateIdentifier);
		cne.setAlternateText(strAlternateText);
		cne.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem);
		cne.setCodingSystemVersionID(strCodingSystemVersionID);
		cne.setAlternateCodingSystemVersionID(strAlternateCodingSystemVersionID);
		cne.setOriginalText(strOriginalText); 
		cne.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cne.setSecondAlternateText(strSecondAlternateText);
		cne.setNameofSecondAlternateCodingSystem(strNameOfSecondAltenateCodingSystem);
		cne.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cne.setCodingSystemOID(strCodingSystemOID);
		cne.setValueSetOID(strValueSetOID);
		cne.setValueSetVersionID(strValueSetVersionID);
		cne.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cne.setAlternateValueSetOID(strAlternateValueSetOID);
		cne.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cne.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cne.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cne.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		addActualProcedureType(cne);
	}

	/**	
	 * Add the Actual Procedure Type.
	 * The actual procedure(s) performed on the donor.
	 * @param objActulalProcedureType Object of Actual Procedure Type.
	 */
	public void addActualProcedureType(CNE objActualProcedureType)
	{
		addDataType(3347,objActualProcedureType);
	}

	/**
	 * Set the Actual Procedure Type.
	 * The actual procedure(s) performed on the donor.
	 * @param objActualProcedureTypeList List of Actual Procedure Type.
	 */
	@SuppressWarnings("unchecked")
	public void setActualProcedureType(ISingleCollection<CNE> objActualProcedureTypeList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objActualProcedureTypeList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(3347,objCollection);
	}
	
	/**
	 * Retrieves the Donor Eligibility Flag.
	 * This field indicates Is the Donor eligible for donation?  Yes or No
	 * @return String - donorEligibilityFlag
	 */
	public ID getDonorEligibilityFlag() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3348);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Donor Eligibility Flag.
	 * This field indicates Is the Donor eligible for donation?  Yes or No
	 * @param strDonorEligibilityFlag Used for Donor Eligibility Flag.
	 */ 
	public void setDonorEligibilityFlag(String strDonorEligibilityFlag)
	{
		ID id  = (ID)getDataElement(3348);
		id.setValue(strDonorEligibilityFlag); 
		setDonorEligibilityFlag(id);
	} 

	/** Set the Donor Eligibility Flag.
	 * This field indicates Is the Donor eligible for donation?  Yes or No
	 * @param objDonorEligibilityFlag object of Donor Eligibility Flag.
	 */ 
	public void setDonorEligibilityFlag(ID objDonorEligibilityFlag)
	{
		setDataType(3348,objDonorEligibilityFlag);
	}
	
	
	/**
	 * Retrieves the Donor Eligibility Procedure Type.
	 * The procedure(s) for which the donor is eligible.
	 * @return ISingleCollection<CNE> - DonorEligibilityProcedureType
	 */
	public ISingleCollection<CNE> getDonorEligibilityProcedureType() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3349);
		ISingleCollection<CNE> objDataList = new SingleCollection<CNE>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				CNE objCNE = (CNE)objDataType;
				objDataList.add(objCNE);
			}
		}
		return objDataList;
	}
	
	/**
	 * Add the Donor Eligibility Procedure Type.
	 * The procedure(s) for which the donor is eligible.
	 * @param strIdentifier Specifies sequence of characters (the code) that uniquely identifies
	 * 						 the item being referenced by the CNE.
	 * @param strText Specifies descriptive or textual name of the identifier, e.g., myocardial infarction 
	 * @param strNameOfCodingSystem Specifies the coding scheme being used in the identifier component. 
	 * @param strAlternateIdentifier Specifies the local or user seen code as described. 
	 * @param strAlternateText Specifies descriptive or textual name of the alternate identifier.  
	 * @param strNameOfAlternateCodingSystem Specifies the coding scheme being used in the alternate identifier 
	 * 											component.  
	 * @param strCodingSystemVersionID Specifies the version ID for the coding system. 
	 * @param strAlternateCodingSystemVersionID Specifies the version ID for the coding system .
	 * @param strOriginalText Specifies the original text that was available to an automated process or a human 
	 * 							before a specific code was assigned.
	 * @param strSecondAlternateIdentifier Specifies a sequence of characters that uniquely identifies the second alternate code
	 * @param strSecondAlternateText Specifies a the textual information of the second alternate code
	 * @param strNameOfSecondAltenateCodingSystem Specifies the second coding scheme being used in the identifier component.
	 * @param strSecondAlternateCodingSystemVersionID Specifies version ID of Second alternative coding system.
	 * @param strCodingSystemOID contains the ISO Object identifier for the coding system.
	 * @param strValueSetOID contains the value set from which CNE-1 is obtained 
	 * @param strValueSetVersionID contains the version of the value set identified by CNE-15. 
	 * @param strAlternateCodingSystemOID contains the ISO Object identifier for the alternate coding system
	 * @param strAlternateValueSetOID contains the value set from which CNE-4 is obtained
	 * @param strAlternateValueSetVersionID contains the version of the value set identified by CNE-18. 
	 * @param strSecondAlternateCodingSystemOID contains the value set from which CNE-12 is obtained
	 * @param strSecondAlternateValueSetOID contains the value set from which CNE-10 is obtained
	 * @param strSecondAlternateValueSetVersionID contains the version of the value set identified by CNE-21. 
	 */ 
	public void addDonorEligibilityProcedureType(String strIdentifier,String strText,String strNameOfCodingSystem,String strAlternateIdentifier,
			String strAlternateText,String strNameOfAlternateCodingSystem,String strCodingSystemVersionID,
			String strAlternateCodingSystemVersionID,String strOriginalText, String strSecondAlternateIdentifier, String strSecondAlternateText,
			String strNameOfSecondAltenateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, 
			String strValueSetOID, String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID,
			String strAlternateValueSetVersionID, String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID,
			String strSecondAlternateValueSetVersionID)
	{
		CNE cne  = (CNE)getDataElement(3349);
		cne.setIdentifier(strIdentifier);
		cne.setText(strText);
		cne.setNameOfCodingSystem(strNameOfCodingSystem);
		cne.setAlternateIdentifier(strAlternateIdentifier);
		cne.setAlternateText(strAlternateText);
		cne.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem);
		cne.setCodingSystemVersionID(strCodingSystemVersionID);
		cne.setAlternateCodingSystemVersionID(strAlternateCodingSystemVersionID);
		cne.setOriginalText(strOriginalText); 
		cne.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cne.setSecondAlternateText(strSecondAlternateText);
		cne.setNameofSecondAlternateCodingSystem(strNameOfSecondAltenateCodingSystem);
		cne.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cne.setCodingSystemOID(strCodingSystemOID);
		cne.setValueSetOID(strValueSetOID);
		cne.setValueSetVersionID(strValueSetVersionID);
		cne.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cne.setAlternateValueSetOID(strAlternateValueSetOID);
		cne.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cne.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cne.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cne.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		addDonorEligibilityProcedureType(cne);
	}

	/**	
	 * Add the Donor Eligibility Procedure Type.
	 * The procedure(s) for which the donor is eligible.
	 * @param objDonorEligibilityProcedureType Object of Donor Eligibility Procedure Type.
	 */
	public void addDonorEligibilityProcedureType(CNE objDonorEligibilityProcedureType)
	{
		addDataType(3349,objDonorEligibilityProcedureType);
	}

	/**
	 * Set the Donor Eligibility Procedure Type.
	 * The procedure(s) for which the donor is eligible.
	 * @param objDonorEligibilityProcedureTypeList List of Actual Procedure Type.
	 */
	@SuppressWarnings("unchecked")
	public void setDonorEligibilityProcedureType(ISingleCollection<CNE> objDonorEligibilityProcedureTypeList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objDonorEligibilityProcedureTypeList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(3349,objCollection);
	}
	
	/**
	 * Retrieves the Donor Eligibility Date.
	 * The date and time on which the donor is eligible to donate.
	 * @return DTM - DonorEligibilityDate
	 */
	public DTM getDonorEligibilityDate() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3350);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Donor Eligibility Date.
	 * The date and time on which the donor is eligible to donate.
	 * @param strTime Specifies a point in time using a 24-hour clock notation. 
	 * 
	 */
	public void setDonorEligibilityDate(String strTime) 
	{
		DTM dtm  = (DTM)getDataElement(3350);
		dtm.setValue(strTime);		
		setDonorEligibilityDate(dtm);
	}

	/**
	 * Set the Donor Eligibility Date.
	 * The date and time on which the donor is eligible to donate.
	 * @param objDonorEligibilityDate Object of Donor Eligibility Date.
	 */
	public void setDonorEligibilityDate(DTM objDonorEligibilityDate)
	{
		setDataType(3350,objDonorEligibilityDate);
	}

	/**
	 * Retrieves the Process Interruption.
	 * Was the donation process interrupted after it began?  
	 * @return CNE - ProcessInterruption
	 */
	public CNE getProcessInterruption() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3351);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CNE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Process Interruption.
	 * Was the donation process interrupted after it began?  
	 * @param strIdentifier Specifies sequence of characters (the code) that uniquely identifies
	 * 						 the item being referenced by the CNE.
	 * @param strText Specifies descriptive or textual name of the identifier, e.g., myocardial infarction 
	 * @param strNameOfCodingSystem Specifies the coding scheme being used in the identifier component. 
	 * @param strAlternateIdentifier Specifies the local or user seen code as described. 
	 * @param strAlternateText Specifies descriptive or textual name of the alternate identifier.  
	 * @param strNameOfAlternateCodingSystem Specifies the coding scheme being used in the alternate identifier 
	 * 											component.  
	 * @param strCodingSystemVersionID Specifies the version ID for the coding system. 
	 * @param strAlternateCodingSystemVersionID Specifies the version ID for the coding system .
	 * @param strOriginalText Specifies the original text that was available to an automated process or a human 
	 * 							before a specific code was assigned.
	 * @param strSecondAlternateIdentifier Specifies a sequence of characters that uniquely identifies the second alternate code
	 * @param strSecondAlternateText Specifies a the textual information of the second alternate code
	 * @param strNameOfSecondAltenateCodingSystem Specifies the second coding scheme being used in the identifier component.
	 * @param strSecondAlternateCodingSystemVersionID Specifies version ID of Second alternative coding system.
	 * @param strCodingSystemOID contains the ISO Object identifier for the coding system.
	 * @param strValueSetOID contains the value set from which CNE-1 is obtained 
	 * @param strValueSetVersionID contains the version of the value set identified by CNE-15. 
	 * @param strAlternateCodingSystemOID contains the ISO Object identifier for the alternate coding system
	 * @param strAlternateValueSetOID contains the value set from which CNE-4 is obtained
	 * @param strAlternateValueSetVersionID contains the version of the value set identified by CNE-18. 
	 * @param strSecondAlternateCodingSystemOID contains the value set from which CNE-12 is obtained
	 * @param strSecondAlternateValueSetOID contains the value set from which CNE-10 is obtained
	 * @param strSecondAlternateValueSetVersionID contains the version of the value set identified by CNE-21. 
	 */
	public void setProcessInterruption(String strIdentifier,String strText,String strNameOfCodingSystem,String strAlternateIdentifier,
			String strAlternateText,String strNameOfAlternateCodingSystem,String strCodingSystemVersionID,
			String strAlternateCodingSystemVersionID,String strOriginalText, String strSecondAlternateIdentifier, String strSecondAlternateText,
			String strNameOfSecondAltenateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, 
			String strValueSetOID, String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID,
			String strAlternateValueSetVersionID, String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID,
			String strSecondAlternateValueSetVersionID)
	{
		CNE cne  = (CNE)getDataElement(3351);
		cne.setIdentifier(strIdentifier);
		cne.setText(strText);
		cne.setNameOfCodingSystem(strNameOfCodingSystem);
		cne.setAlternateIdentifier(strAlternateIdentifier);
		cne.setAlternateText(strAlternateText);
		cne.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem);
		cne.setCodingSystemVersionID(strCodingSystemVersionID);
		cne.setAlternateCodingSystemVersionID(strAlternateCodingSystemVersionID);
		cne.setOriginalText(strOriginalText); 
		cne.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cne.setSecondAlternateText(strSecondAlternateText);
		cne.setNameofSecondAlternateCodingSystem(strNameOfSecondAltenateCodingSystem);
		cne.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cne.setCodingSystemOID(strCodingSystemOID);
		cne.setValueSetOID(strValueSetOID);
		cne.setValueSetVersionID(strValueSetVersionID);
		cne.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cne.setAlternateValueSetOID(strAlternateValueSetOID);
		cne.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cne.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cne.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cne.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setProcessInterruption(cne);
	}

	/**
	 * Set the Process Interruption.
	 * Was the donation process interrupted after it began? 
	 * @param objProcessInterruption Object of Process Interruption.
	 */
	public void setProcessInterruption(CNE objProcessInterruption)
	{
		setDataType(3351,objProcessInterruption);
	}
	
	
	/**
	 * Retrieves the Process Interruption Reason.
	 * Reason that the donation process was interrupted. 
	 * @return CNE - ProcessInterruptionReason
	 */
	public CNE getProcessInterruptionReason() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3352);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CNE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Process Interruption Reason.
	 * Reason that the donation process was interrupted.   
	 * @param strIdentifier Specifies sequence of characters (the code) that uniquely identifies
	 * 						 the item being referenced by the CNE.
	 * @param strText Specifies descriptive or textual name of the identifier, e.g., myocardial infarction 
	 * @param strNameOfCodingSystem Specifies the coding scheme being used in the identifier component. 
	 * @param strAlternateIdentifier Specifies the local or user seen code as described. 
	 * @param strAlternateText Specifies descriptive or textual name of the alternate identifier.  
	 * @param strNameOfAlternateCodingSystem Specifies the coding scheme being used in the alternate identifier 
	 * 											component.  
	 * @param strCodingSystemVersionID Specifies the version ID for the coding system. 
	 * @param strAlternateCodingSystemVersionID Specifies the version ID for the coding system .
	 * @param strOriginalText Specifies the original text that was available to an automated process or a human 
	 * 							before a specific code was assigned.
	 * @param strSecondAlternateIdentifier Specifies a sequence of characters that uniquely identifies the second alternate code
	 * @param strSecondAlternateText Specifies a the textual information of the second alternate code
	 * @param strNameOfSecondAltenateCodingSystem Specifies the second coding scheme being used in the identifier component.
	 * @param strSecondAlternateCodingSystemVersionID Specifies version ID of Second alternative coding system.
	 * @param strCodingSystemOID contains the ISO Object identifier for the coding system.
	 * @param strValueSetOID contains the value set from which CNE-1 is obtained 
	 * @param strValueSetVersionID contains the version of the value set identified by CNE-15. 
	 * @param strAlternateCodingSystemOID contains the ISO Object identifier for the alternate coding system
	 * @param strAlternateValueSetOID contains the value set from which CNE-4 is obtained
	 * @param strAlternateValueSetVersionID contains the version of the value set identified by CNE-18. 
	 * @param strSecondAlternateCodingSystemOID contains the value set from which CNE-12 is obtained
	 * @param strSecondAlternateValueSetOID contains the value set from which CNE-10 is obtained
	 * @param strSecondAlternateValueSetVersionID contains the version of the value set identified by CNE-21. 
	 */
	public void setProcessInterruptionReason(String strIdentifier,String strText,String strNameOfCodingSystem,String strAlternateIdentifier,
			String strAlternateText,String strNameOfAlternateCodingSystem,String strCodingSystemVersionID,
			String strAlternateCodingSystemVersionID,String strOriginalText, String strSecondAlternateIdentifier, String strSecondAlternateText,
			String strNameOfSecondAltenateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, 
			String strValueSetOID, String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID,
			String strAlternateValueSetVersionID, String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID,
			String strSecondAlternateValueSetVersionID)
	{
		CNE cne  = (CNE)getDataElement(3352);
		cne.setIdentifier(strIdentifier);
		cne.setText(strText);
		cne.setNameOfCodingSystem(strNameOfCodingSystem);
		cne.setAlternateIdentifier(strAlternateIdentifier);
		cne.setAlternateText(strAlternateText);
		cne.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem);
		cne.setCodingSystemVersionID(strCodingSystemVersionID);
		cne.setAlternateCodingSystemVersionID(strAlternateCodingSystemVersionID);
		cne.setOriginalText(strOriginalText); 
		cne.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cne.setSecondAlternateText(strSecondAlternateText);
		cne.setNameofSecondAlternateCodingSystem(strNameOfSecondAltenateCodingSystem);
		cne.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cne.setCodingSystemOID(strCodingSystemOID);
		cne.setValueSetOID(strValueSetOID);
		cne.setValueSetVersionID(strValueSetVersionID);
		cne.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cne.setAlternateValueSetOID(strAlternateValueSetOID);
		cne.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cne.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cne.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cne.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setProcessInterruptionReason(cne);
	}

	/**
	 * Set the Process Interruption Reason.
	 * Reason that the donation process was interrupted. 
	 * @param objProcessInterruption Object of Process Interruption Reason.
	 */
	public void setProcessInterruptionReason(CNE objProcessInterruptionReason)
	{
		setDataType(3352,objProcessInterruptionReason);
	}
	
	
	/**
	 * Retrieves the Phlebotomy Issue.
	 * Indicates whether there is a problem or issue with the phlebotomy itself.
	 * @return ISingleCollection<CNE> - PhlebotomyIssue
	 */
	public ISingleCollection<CNE> getPhlebotomyIssue() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3353);
		ISingleCollection<CNE> objDataList = new SingleCollection<CNE>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				CNE objCNE = (CNE)objDataType;
				objDataList.add(objCNE);
			}
		}
		return objDataList;
	}
	
	/**
	 * Add the Phlebotomy Issue.
	 * Indicates whether there is a problem or issue with the phlebotomy itself.
	 * @param strIdentifier Specifies sequence of characters (the code) that uniquely identifies
	 * 						 the item being referenced by the CNE.
	 * @param strText Specifies descriptive or textual name of the identifier, e.g., myocardial infarction 
	 * @param strNameOfCodingSystem Specifies the coding scheme being used in the identifier component. 
	 * @param strAlternateIdentifier Specifies the local or user seen code as described. 
	 * @param strAlternateText Specifies descriptive or textual name of the alternate identifier.  
	 * @param strNameOfAlternateCodingSystem Specifies the coding scheme being used in the alternate identifier 
	 * 											component.  
	 * @param strCodingSystemVersionID Specifies the version ID for the coding system. 
	 * @param strAlternateCodingSystemVersionID Specifies the version ID for the coding system .
	 * @param strOriginalText Specifies the original text that was available to an automated process or a human 
	 * 							before a specific code was assigned.
	 * @param strSecondAlternateIdentifier Specifies a sequence of characters that uniquely identifies the second alternate code
	 * @param strSecondAlternateText Specifies a the textual information of the second alternate code
	 * @param strNameOfSecondAltenateCodingSystem Specifies the second coding scheme being used in the identifier component.
	 * @param strSecondAlternateCodingSystemVersionID Specifies version ID of Second alternative coding system.
	 * @param strCodingSystemOID contains the ISO Object identifier for the coding system.
	 * @param strValueSetOID contains the value set from which CNE-1 is obtained 
	 * @param strValueSetVersionID contains the version of the value set identified by CNE-15. 
	 * @param strAlternateCodingSystemOID contains the ISO Object identifier for the alternate coding system
	 * @param strAlternateValueSetOID contains the value set from which CNE-4 is obtained
	 * @param strAlternateValueSetVersionID contains the version of the value set identified by CNE-18. 
	 * @param strSecondAlternateCodingSystemOID contains the value set from which CNE-12 is obtained
	 * @param strSecondAlternateValueSetOID contains the value set from which CNE-10 is obtained
	 * @param strSecondAlternateValueSetVersionID contains the version of the value set identified by CNE-21. 
	 */ 
	public void addPhlebotomyIssue(String strIdentifier,String strText,String strNameOfCodingSystem,String strAlternateIdentifier,
			String strAlternateText,String strNameOfAlternateCodingSystem,String strCodingSystemVersionID,
			String strAlternateCodingSystemVersionID,String strOriginalText, String strSecondAlternateIdentifier, String strSecondAlternateText,
			String strNameOfSecondAltenateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, 
			String strValueSetOID, String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID,
			String strAlternateValueSetVersionID, String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID,
			String strSecondAlternateValueSetVersionID)
	{
		CNE cne  = (CNE)getDataElement(3353);
		cne.setIdentifier(strIdentifier);
		cne.setText(strText);
		cne.setNameOfCodingSystem(strNameOfCodingSystem);
		cne.setAlternateIdentifier(strAlternateIdentifier);
		cne.setAlternateText(strAlternateText);
		cne.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem);
		cne.setCodingSystemVersionID(strCodingSystemVersionID);
		cne.setAlternateCodingSystemVersionID(strAlternateCodingSystemVersionID);
		cne.setOriginalText(strOriginalText); 
		cne.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cne.setSecondAlternateText(strSecondAlternateText);
		cne.setNameofSecondAlternateCodingSystem(strNameOfSecondAltenateCodingSystem);
		cne.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cne.setCodingSystemOID(strCodingSystemOID);
		cne.setValueSetOID(strValueSetOID);
		cne.setValueSetVersionID(strValueSetVersionID);
		cne.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cne.setAlternateValueSetOID(strAlternateValueSetOID);
		cne.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cne.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cne.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cne.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		addPhlebotomyIssue(cne);
	}

	/**	
	 * Add the Phlebotomy Issue.
	 * Indicates whether there is a problem or issue with the phlebotomy itself.
	 * @param objPhlebotomyIssue Object of Phlebotomy Issue.
	 */
	public void addPhlebotomyIssue(CNE objPhlebotomyIssue)
	{
		addDataType(3353,objPhlebotomyIssue);
	}

	/**
	 * Set the Phlebotomy Issue.
	 * Indicates whether there is a problem or issue with the phlebotomy itself.
	 * @param objPhlebotomyIssueList List of Phlebotomy Issue.
	 */
	@SuppressWarnings("unchecked")
	public void setPhlebotomyIssue(ISingleCollection<CNE> objPhlebotomyIssueList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objPhlebotomyIssueList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(3353,objCollection);
	}
	

	/**
	 * Retrieves the Intended Recipient Blood Relative.
	 * If this donation has an intended recipient (directed, dedicated, designated), is the intended recipient a blood relative of the donor? Yes or No.
	 * @return String - IntendedRecipientBloodRelative
	 */
	public ID getIntendedRecipientBloodRelative() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3354);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 *  Set the Intended Recipient Blood Relative.
	 * If this donation has an intended recipient (directed, dedicated, designated), is the intended recipient a blood relative of the donor? Yes or No.
	 * @param strIntendedRecipientBloodRelative Used for Intended Recipient Blood Relative.
	 */ 
	public void setIntendedRecipientBloodRelative(String strIntendedRecipientBloodRelative)
	{
		ID id  = (ID)getDataElement(3354);
		id.setValue(strIntendedRecipientBloodRelative); 
		setIntendedRecipientBloodRelative(id);
	} 

	/** Set the Intended Recipient Blood Relative.
	 * If this donation has an intended recipient (directed, dedicated, designated), is the intended recipient a blood relative of the donor? Yes or No.
	 * @param objIntendedRecipientBloodRelative object of Intended Recipient Blood Relative.
	 */ 
	public void setIntendedRecipientBloodRelative(ID objIntendedRecipientBloodRelative)
	{
		setDataType(3354,objIntendedRecipientBloodRelative);
	}
	
	/**
	 * Retrieves the Intended Recipient Name.
	 * If this is donation has an intended recipient (autologous, directed, dedicated, designated), the intended recipient’s name.
	 * @return XPN - IntendedRecipientName
	 */
	public XPN getIntendedRecipientName() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3355);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XPN)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 *  Set the Intended Recipient Name.
	 * If this is donation has an intended recipient (autologous, directed, dedicated, designated), the intended recipient’s name.
	 * @param objFamilyName Specifies the surname of a person. 
	 * @param strGivenName Specifies First name.
	 * @param strSecondAndFurtherGivenNamesOrInitialsThereof Specifies multiple middle names that may be included by separating them with spaces.
	 * @param strSuffix Used to specify a name suffix (e.g., Jr. or III).
	 * @param strPrefix Used to specify a name prefix (e.g., Dr.).
	 * @param strNameTypeCode Specifies a code that represents the type of name. Suggested values are A,B,C,D,I,L,M,N,P,R,S,T,U...[Refer table 0200.]
	 * @param strNameRepresentationCode Specifies representations of the same name/address Suggested values are I,A,P [Refer table 0465] 
	 * @param objNameContext Designates the context in which a name is used. [Refer User-defined Table 0448 ]
	 * @param strNameAssemblyOrder Specifies a code that represents the preferred display order of the components of this person name. Suggested values are G,F[Refer table 0444.]
	 * @param objEffectiveDate Specifies the first date, if known, on which the address is valid and active.
	 * @param objExpirationDate Specifies the last date, if known, on which the address is valid and active.
	 * @param strProfessionalSuffix Used to specify an abbreviation, or a string of abbreviations, denoting qualifications that support the person's profession, (e.g., licenses). 
	 * @param strCalledBy Used to specify the called name.
	 */ 
	public void setIntendedRecipientName(FN objFamilyName, String strGivenName, String strSecondAndFurtherGivenNamesOrInitialsThereof, 
			String strSuffix, String strPrefix, String strNameTypeCode, String strNameRepresentationCode, 
			CWE objNameContext, String strNameAssemblyOrder, DTM objEffectiveDate,
			DTM objExpirationDate, String strProfessionalSuffix, String strCalledBy)
	{
		XPN xpn = (XPN)getDataElement(3355);
		xpn.setFamilyName(objFamilyName);
		xpn.setGivenName(strGivenName);
		xpn.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		xpn.setSuffix(strSuffix);
		xpn.setPrefix(strPrefix);
		xpn.setNameTypeCode(strNameTypeCode);
		xpn.setNameRepresentationCode(strNameRepresentationCode);
		xpn.setNameContext(objNameContext);
		xpn.setNameAssemblyOrder(strNameAssemblyOrder);
		xpn.setEffectiveDate(objEffectiveDate);
		xpn.setExpirationDate(objExpirationDate);
		xpn.setProfessionalSuffix(strProfessionalSuffix); 
		xpn.setCalledBy(strCalledBy);
		setIntendedRecipientName(xpn);
	} 

	/** Set the Intended Recipient Name.
	 * If this is donation has an intended recipient (autologous, directed, dedicated, designated), the intended recipient’s name.
	 * @param objIntendedRecipientBloodRelative object of Intended Recipient Name.
	 */ 
	public void setIntendedRecipientName(XPN objIntendedRecipientName)
	{
		setDataType(3355,objIntendedRecipientName);
	}
	
	
	/**
	 * Retrieves the Intended Recipient DOB.
	 * If this donation has an intended recipient (autologous, directed, dedicated, designated), the intended recipient’s date of birth.
	 * @return DTM - IntendedRecipientDOB
	 */
	public DTM getIntendedRecipientDOB() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3356);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Intended Recipient DOB.
	 * If this donation has an intended recipient (autologous, directed, dedicated, designated), the intended recipient’s date of birth.
	 * @param strTime Specifies a point in time using a 24-hour clock notation. 
	 * 
	 */
	public void setIntendedRecipientDOB(String strTime) 
	{
		DTM dtm  = (DTM)getDataElement(3356);
		dtm.setValue(strTime);		
		setIntendedRecipientDOB(dtm);
	}

	/**
	 * Set the Intended Recipient DOB.
	 * If this donation has an intended recipient (autologous, directed, dedicated, designated), the intended recipient’s date of birth.
	 * @param objIntendedRecipientDOB Object of Intended Recipient DOB.
	 */
	public void setIntendedRecipientDOB(DTM objIntendedRecipientDOB)
	{
		setDataType(3356,objIntendedRecipientDOB);
	}
	
	/** Retrieves the Intended Recipient Facility.
	 * If this donation has an intended recipient (autologous, directed, dedicated, designated), the facility where the intended recipient is expected to receive the transfusion.
	 * @return XON - Intended Recipient Facility.
	 */ 
	public XON getIntendedRecipientFacility()
	{		
		ISingleCollection<IDataType> objDataCollection =getDataType(3357);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XON)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/** Set the Intended Recipient Facility.
	 * If this donation has an intended recipient (autologous, directed, dedicated, designated), the facility where the intended recipient is expected to receive the transfusion.    
     * @param strOrganizationName Specifies name of the specified organization.
	 * @param strOrganizationNameTypeCode Specifies a code that represents the type of name i.e., legal name, display name.
	 * 										Suggested Values A,L,D,SL.[Refer to table No.0204]  
	 * @param objAssigningAuthority Specifies The assigning authority is a unique identifier of the system 
	 * 									(or organization or agency or department) that creates the data. 
	 * @param strIdentifierTypeCode Specifies a code corresponding to the type of identifier. 
	 * @param objAssigningFacility Specifies The place or location identifier where the identifier was first assigned to the person. 
	 * @param strNameRepresentationCode Specifies representations of the same name/address Suggested values are I,A,P [Refer table 0465] 
	 * @param strOrganizationIdentifier This component contains the sequence of characters (the code) that uniquely 
	 * 									  identifies the item being referenced by XON.1 Organization Name. 
	 * 									  This component replaces XON.3 ID Number as of v 2.5.
	 */ 
	public void setIntendedRecipientFacility(String strOrganizationName, CWE objOrganizationNameTypeCode,
			 HD objAssigningAuthority,
			String strIdentifierTypeCode, HD objAssigningFacility, String strNameRepresentationCode,
			String strOrganizationIdentifier)
	{
		XON xon  = (XON)getDataElement(3357);
		xon.setOrganizationName(strOrganizationName);
		xon.setOrganizationNameTypeCode(objOrganizationNameTypeCode);
		xon.setAssigningAuthority(objAssigningAuthority);
		xon.setIdentifierTypeCode(strIdentifierTypeCode);
		xon.setAssigningFacility(objAssigningFacility);
		xon.setNameRepresentationCode(strNameRepresentationCode);
		xon.setOrganizationIdentifier(strOrganizationIdentifier);
		setIntendedRecipientFacility(xon);

	} 
	/** Set the Intended Recipient Facility.
	 * If this donation has an intended recipient (autologous, directed, dedicated, designated), the facility where the intended recipient is expected to receive the transfusion.
	 * @param objIntendedRecipientFacility Used as Intended Recipient Facility.
	 */ 
	public void setIntendedRecipientFacility(XON objIntendedRecipientFacility)
	{
		setDataType(3357,objIntendedRecipientFacility);
	}
	
	
	/**
	 * Retrieves the Intended Recipient Procedure Date.
	 * If this donation has an intended recipient (autologous, directed, dedicated, designated), the date the intended recipient is expected to receive the transfusion.
	 * @return DTM - IntendedRecipientProcedureDate
	 */
	public DTM getIntendedRecipientProcedureDate() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3358);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Intended Recipient Procedure Date.
	 * If this donation has an intended recipient (autologous, directed, dedicated, designated), the date the intended recipient is expected to receive the transfusion.
	 * @param strTime Specifies a point in time using a 24-hour clock notation. 
	 * 
	 */
	public void setIntendedRecipientProcedureDate(String strTime) 
	{
		DTM dtm  = (DTM)getDataElement(3358);
		dtm.setValue(strTime);		
		setIntendedRecipientProcedureDate(dtm);
	}

	/**
	 * Set the Intended Recipient Procedure Date.
	 * If this donation has an intended recipient (autologous, directed, dedicated, designated), the date the intended recipient is expected to receive the transfusion. 
	 * @param objIntendedRecipientProcedureDate Object of Intended Recipient Procedure Date.
	 */
	public void setIntendedRecipientProcedureDate(DTM objIntendedRecipientProcedureDate)
	{
		setDataType(3358,objIntendedRecipientProcedureDate);
	}
	
	/**
	 * Retrieves the Intended Recipient Ordering Provider.
	 * If this is donation has an intended recipient (autologous, directed, dedicated, designated), the provider who ordered the directed donation for the intended recipient.
	 * @return XPN - IntendedRecipientOrderingProvider
	 */
	public XPN getIntendedRecipientOrderingProvider() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3359);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XPN)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Intended Recipient Ordering Provider.
	 * If this is donation has an intended recipient (autologous, directed, dedicated, designated), the provider who ordered the directed donation for the intended recipient.
	 * @param objFamilyName Specifies the surname of a person. 
	 * @param strGivenName Specifies First name.
	 * @param strSecondAndFurtherGivenNamesOrInitialsThereof Specifies multiple middle names that may be included by separating them with spaces.
	 * @param strSuffix Used to specify a name suffix (e.g., Jr. or III).
	 * @param strPrefix Used to specify a name prefix (e.g., Dr.).
	 * @param strNameTypeCode Specifies a code that represents the type of name. Suggested values are A,B,C,D,I,L,M,N,P,R,S,T,U...[Refer table 0200.]
	 * @param strNameRepresentationCode Specifies representations of the same name/address Suggested values are I,A,P [Refer table 0465] 
	 * @param objNameContext Designates the context in which a name is used. [Refer User-defined Table 0448 ]
	 * @param strNameAssemblyOrder Specifies a code that represents the preferred display order of the components of this person name. Suggested values are G,F[Refer table 0444.]
	 * @param objEffectiveDate Specifies the first date, if known, on which the address is valid and active.
	 * @param objExpirationDate Specifies the last date, if known, on which the address is valid and active.
	 * @param strProfessionalSuffix Used to specify an abbreviation, or a string of abbreviations, denoting qualifications that support the person's profession, (e.g., licenses). 
	 * @param strCalledBy Used to specify the called name.
	 */ 
	public void setIntendedRecipientOrderingProvider(FN objFamilyName, String strGivenName, String strSecondAndFurtherGivenNamesOrInitialsThereof, 
			String strSuffix, String strPrefix, String strNameTypeCode, String strNameRepresentationCode, 
			CWE objNameContext, String strNameAssemblyOrder, DTM objEffectiveDate,
			DTM objExpirationDate, String strProfessionalSuffix, String strCalledBy)
	{
		XPN xpn = (XPN)getDataElement(3359);
		xpn.setFamilyName(objFamilyName);
		xpn.setGivenName(strGivenName);
		xpn.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		xpn.setSuffix(strSuffix);
		xpn.setPrefix(strPrefix);
		xpn.setNameTypeCode(strNameTypeCode);
		xpn.setNameRepresentationCode(strNameRepresentationCode);
		xpn.setNameContext(objNameContext);
		xpn.setNameAssemblyOrder(strNameAssemblyOrder);
		xpn.setEffectiveDate(objEffectiveDate);
		xpn.setExpirationDate(objExpirationDate);
		xpn.setProfessionalSuffix(strProfessionalSuffix); 
		xpn.setCalledBy(strCalledBy);
		setIntendedRecipientName(xpn);
	} 

	/** Set the Intended Recipient Ordering Provider.
	 *  If this is donation has an intended recipient (autologous, directed, dedicated, designated), the provider who ordered the directed donation for the intended recipient.
	 * @param objIntendedRecipientOrderingProvider object of Intended Recipient Ordering Provider.
	 */ 
	public void setIntendedRecipientOrderingProvider(XPN objIntendedRecipientOrderingProvider)
	{
		setDataType(3359,objIntendedRecipientOrderingProvider);
	}
	
	/**
	 * Retrieves the Phlebotomy Status.
	 * Whether the phlebotomy was successful, not drawn, or unsuccessful, and if unsuccessful, the extent to which it was unsuccessful. 
	 * @return CNE - PhlebotomyStatus
	 */
	public CNE getPhlebotomyStatus() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3360);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CNE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Phlebotomy Status.
	 * Whether the phlebotomy was successful, not drawn, or unsuccessful, and if unsuccessful, the extent to which it was unsuccessful.   
	 * @param strIdentifier Specifies sequence of characters (the code) that uniquely identifies
	 * 						 the item being referenced by the CNE.
	 * @param strText Specifies descriptive or textual name of the identifier, e.g., myocardial infarction 
	 * @param strNameOfCodingSystem Specifies the coding scheme being used in the identifier component. 
	 * @param strAlternateIdentifier Specifies the local or user seen code as described. 
	 * @param strAlternateText Specifies descriptive or textual name of the alternate identifier.  
	 * @param strNameOfAlternateCodingSystem Specifies the coding scheme being used in the alternate identifier 
	 * 											component.  
	 * @param strCodingSystemVersionID Specifies the version ID for the coding system. 
	 * @param strAlternateCodingSystemVersionID Specifies the version ID for the coding system .
	 * @param strOriginalText Specifies the original text that was available to an automated process or a human 
	 * 							before a specific code was assigned.
	 * @param strSecondAlternateIdentifier Specifies a sequence of characters that uniquely identifies the second alternate code
	 * @param strSecondAlternateText Specifies a the textual information of the second alternate code
	 * @param strNameOfSecondAltenateCodingSystem Specifies the second coding scheme being used in the identifier component.
	 * @param strSecondAlternateCodingSystemVersionID Specifies version ID of Second alternative coding system.
	 * @param strCodingSystemOID contains the ISO Object identifier for the coding system.
	 * @param strValueSetOID contains the value set from which CNE-1 is obtained 
	 * @param strValueSetVersionID contains the version of the value set identified by CNE-15. 
	 * @param strAlternateCodingSystemOID contains the ISO Object identifier for the alternate coding system
	 * @param strAlternateValueSetOID contains the value set from which CNE-4 is obtained
	 * @param strAlternateValueSetVersionID contains the version of the value set identified by CNE-18. 
	 * @param strSecondAlternateCodingSystemOID contains the value set from which CNE-12 is obtained
	 * @param strSecondAlternateValueSetOID contains the value set from which CNE-10 is obtained
	 * @param strSecondAlternateValueSetVersionID contains the version of the value set identified by CNE-21. 
	 */
	public void setPhlebotomyStatus(String strIdentifier,String strText,String strNameOfCodingSystem,String strAlternateIdentifier,
			String strAlternateText,String strNameOfAlternateCodingSystem,String strCodingSystemVersionID,
			String strAlternateCodingSystemVersionID,String strOriginalText, String strSecondAlternateIdentifier, String strSecondAlternateText,
			String strNameOfSecondAltenateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, 
			String strValueSetOID, String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID,
			String strAlternateValueSetVersionID, String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID,
			String strSecondAlternateValueSetVersionID)
	{
		CNE cne  = (CNE)getDataElement(3360);
		cne.setIdentifier(strIdentifier);
		cne.setText(strText);
		cne.setNameOfCodingSystem(strNameOfCodingSystem);
		cne.setAlternateIdentifier(strAlternateIdentifier);
		cne.setAlternateText(strAlternateText);
		cne.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem);
		cne.setCodingSystemVersionID(strCodingSystemVersionID);
		cne.setAlternateCodingSystemVersionID(strAlternateCodingSystemVersionID);
		cne.setOriginalText(strOriginalText); 
		cne.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cne.setSecondAlternateText(strSecondAlternateText);
		cne.setNameofSecondAlternateCodingSystem(strNameOfSecondAltenateCodingSystem);
		cne.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cne.setCodingSystemOID(strCodingSystemOID);
		cne.setValueSetOID(strValueSetOID);
		cne.setValueSetVersionID(strValueSetVersionID);
		cne.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cne.setAlternateValueSetOID(strAlternateValueSetOID);
		cne.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cne.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cne.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cne.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setPhlebotomyStatus(cne);
	}

	/**
	 * Set the Phlebotomy Status.
	 * Whether the phlebotomy was successful, not drawn, or unsuccessful, and if unsuccessful, the extent to which it was unsuccessful. 
	 * @param objPhlebotomyStatus Object of Phlebotomy Status.
	 */
	public void setPhlebotomyStatus(CNE objPhlebotomyStatus)
	{
		setDataType(3360,objPhlebotomyStatus);
	}
	
	/**
	 * Retrieves the Arm Stick.
	 * The arm(s) stuck for the donation. 
	 * @return CNE - ArmStick
	 */
	public CNE getArmStick() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3361);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CNE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Arm Stick.
	 * The arm(s) stuck for the donation.   
	 * @param strIdentifier Specifies sequence of characters (the code) that uniquely identifies
	 * 						 the item being referenced by the CNE.
	 * @param strText Specifies descriptive or textual name of the identifier, e.g., myocardial infarction 
	 * @param strNameOfCodingSystem Specifies the coding scheme being used in the identifier component. 
	 * @param strAlternateIdentifier Specifies the local or user seen code as described. 
	 * @param strAlternateText Specifies descriptive or textual name of the alternate identifier.  
	 * @param strNameOfAlternateCodingSystem Specifies the coding scheme being used in the alternate identifier 
	 * 											component.  
	 * @param strCodingSystemVersionID Specifies the version ID for the coding system. 
	 * @param strAlternateCodingSystemVersionID Specifies the version ID for the coding system .
	 * @param strOriginalText Specifies the original text that was available to an automated process or a human 
	 * 							before a specific code was assigned.
	 * @param strSecondAlternateIdentifier Specifies a sequence of characters that uniquely identifies the second alternate code
	 * @param strSecondAlternateText Specifies a the textual information of the second alternate code
	 * @param strNameOfSecondAltenateCodingSystem Specifies the second coding scheme being used in the identifier component.
	 * @param strSecondAlternateCodingSystemVersionID Specifies version ID of Second alternative coding system.
	 * @param strCodingSystemOID contains the ISO Object identifier for the coding system.
	 * @param strValueSetOID contains the value set from which CNE-1 is obtained 
	 * @param strValueSetVersionID contains the version of the value set identified by CNE-15. 
	 * @param strAlternateCodingSystemOID contains the ISO Object identifier for the alternate coding system
	 * @param strAlternateValueSetOID contains the value set from which CNE-4 is obtained
	 * @param strAlternateValueSetVersionID contains the version of the value set identified by CNE-18. 
	 * @param strSecondAlternateCodingSystemOID contains the value set from which CNE-12 is obtained
	 * @param strSecondAlternateValueSetOID contains the value set from which CNE-10 is obtained
	 * @param strSecondAlternateValueSetVersionID contains the version of the value set identified by CNE-21. 
	 */
	public void setArmStick(String strIdentifier,String strText,String strNameOfCodingSystem,String strAlternateIdentifier,
			String strAlternateText,String strNameOfAlternateCodingSystem,String strCodingSystemVersionID,
			String strAlternateCodingSystemVersionID,String strOriginalText, String strSecondAlternateIdentifier, String strSecondAlternateText,
			String strNameOfSecondAltenateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, 
			String strValueSetOID, String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID,
			String strAlternateValueSetVersionID, String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID,
			String strSecondAlternateValueSetVersionID)
	{
		CNE cne  = (CNE)getDataElement(3361);
		cne.setIdentifier(strIdentifier);
		cne.setText(strText);
		cne.setNameOfCodingSystem(strNameOfCodingSystem);
		cne.setAlternateIdentifier(strAlternateIdentifier);
		cne.setAlternateText(strAlternateText);
		cne.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem);
		cne.setCodingSystemVersionID(strCodingSystemVersionID);
		cne.setAlternateCodingSystemVersionID(strAlternateCodingSystemVersionID);
		cne.setOriginalText(strOriginalText); 
		cne.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cne.setSecondAlternateText(strSecondAlternateText);
		cne.setNameofSecondAlternateCodingSystem(strNameOfSecondAltenateCodingSystem);
		cne.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cne.setCodingSystemOID(strCodingSystemOID);
		cne.setValueSetOID(strValueSetOID);
		cne.setValueSetVersionID(strValueSetVersionID);
		cne.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cne.setAlternateValueSetOID(strAlternateValueSetOID);
		cne.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cne.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cne.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cne.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setArmStick(cne);
	}

	/**
	 * Set the Arm Stick.
	 * The arm(s) stuck for the donation. 
	 * @param objArmStick Object of Arm Stick.
	 */
	public void setArmStick(CNE objArmStick)
	{
		setDataType(3361,objArmStick);
	}
	
	/**
	 * Retrieves the Bleed Start Phlebotomist.
	 * The Phlebotomist who starts the blood flow into the container.
	 * @return XPN - BleedStartPhlebotomist
	 */
	public XPN getBleedStartPhlebotomist() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3362);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XPN)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Bleed Start Phlebotomist.
	 * The Phlebotomist who starts the blood flow into the container.
	 * @param objFamilyName Specifies the surname of a person. 
	 * @param strGivenName Specifies First name.
	 * @param strSecondAndFurtherGivenNamesOrInitialsThereof Specifies multiple middle names that may be included by separating them with spaces.
	 * @param strSuffix Used to specify a name suffix (e.g., Jr. or III).
	 * @param strPrefix Used to specify a name prefix (e.g., Dr.).
	 * @param strNameTypeCode Specifies a code that represents the type of name. Suggested values are A,B,C,D,I,L,M,N,P,R,S,T,U...[Refer table 0200.]
	 * @param strNameRepresentationCode Specifies representations of the same name/address Suggested values are I,A,P [Refer table 0465] 
	 * @param objNameContext Designates the context in which a name is used. [Refer User-defined Table 0448 ]
	 * @param strNameAssemblyOrder Specifies a code that represents the preferred display order of the components of this person name. Suggested values are G,F[Refer table 0444.]
	 * @param objEffectiveDate Specifies the first date, if known, on which the address is valid and active.
	 * @param objExpirationDate Specifies the last date, if known, on which the address is valid and active.
	 * @param strProfessionalSuffix Used to specify an abbreviation, or a string of abbreviations, denoting qualifications that support the person's profession, (e.g., licenses). 
	 * @param strCalledBy Used to specify the called name.
	 */ 
	public void setBleedStartPhlebotomist(FN objFamilyName, String strGivenName, String strSecondAndFurtherGivenNamesOrInitialsThereof, 
			String strSuffix, String strPrefix, String strNameTypeCode, String strNameRepresentationCode, 
			CWE objNameContext, String strNameAssemblyOrder, DTM objEffectiveDate,
			DTM objExpirationDate, String strProfessionalSuffix, String strCalledBy)
	{
		XPN xpn = (XPN)getDataElement(3362);
		xpn.setFamilyName(objFamilyName);
		xpn.setGivenName(strGivenName);
		xpn.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		xpn.setSuffix(strSuffix);
		xpn.setPrefix(strPrefix);
		xpn.setNameTypeCode(strNameTypeCode);
		xpn.setNameRepresentationCode(strNameRepresentationCode);
		xpn.setNameContext(objNameContext);
		xpn.setNameAssemblyOrder(strNameAssemblyOrder);
		xpn.setEffectiveDate(objEffectiveDate);
		xpn.setExpirationDate(objExpirationDate);
		xpn.setProfessionalSuffix(strProfessionalSuffix); 
		xpn.setCalledBy(strCalledBy);
		setBleedStartPhlebotomist(xpn);
	} 

	/** Set the Bleed Start Phlebotomist.
	 *  The Phlebotomist who starts the blood flow into the container.
	 * @param objBleedStartPhlebotomist object of Bleed Start Phlebotomist.
	 */ 
	public void setBleedStartPhlebotomist(XPN objBleedStartPhlebotomist)
	{
		setDataType(3362,objBleedStartPhlebotomist);
	}
	
	
	/**
	 * Retrieves the Bleed End Phlebotomist.
	 * The Phlebotomist who ends the blood flow into the container.
	 * @return XPN - BleedEndPhlebotomist
	 */
	public XPN getBleedEndPhlebotomist() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3363);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XPN)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Bleed End Phlebotomist.
	 * The Phlebotomist who ends the blood flow into the container.
	 * @param objFamilyName Specifies the surname of a person. 
	 * @param strGivenName Specifies First name.
	 * @param strSecondAndFurtherGivenNamesOrInitialsThereof Specifies multiple middle names that may be included by separating them with spaces.
	 * @param strSuffix Used to specify a name suffix (e.g., Jr. or III).
	 * @param strPrefix Used to specify a name prefix (e.g., Dr.).
	 * @param strNameTypeCode Specifies a code that represents the type of name. Suggested values are A,B,C,D,I,L,M,N,P,R,S,T,U...[Refer table 0200.]
	 * @param strNameRepresentationCode Specifies representations of the same name/address Suggested values are I,A,P [Refer table 0465] 
	 * @param objNameContext Designates the context in which a name is used. [Refer User-defined Table 0448 ]
	 * @param strNameAssemblyOrder Specifies a code that represents the preferred display order of the components of this person name. Suggested values are G,F[Refer table 0444.]
	 * @param objEffectiveDate Specifies the first date, if known, on which the address is valid and active.
	 * @param objExpirationDate Specifies the last date, if known, on which the address is valid and active.
	 * @param strProfessionalSuffix Used to specify an abbreviation, or a string of abbreviations, denoting qualifications that support the person's profession, (e.g., licenses). 
	 * @param strCalledBy Used to specify the called name.
	 */ 
	public void setBleedEndPhlebotomist(FN objFamilyName, String strGivenName, String strSecondAndFurtherGivenNamesOrInitialsThereof, 
			String strSuffix, String strPrefix, String strNameTypeCode, String strNameRepresentationCode, 
			CWE objNameContext, String strNameAssemblyOrder, DTM objEffectiveDate,
			DTM objExpirationDate, String strProfessionalSuffix, String strCalledBy)
	{
		XPN xpn = (XPN)getDataElement(3363);
		xpn.setFamilyName(objFamilyName);
		xpn.setGivenName(strGivenName);
		xpn.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		xpn.setSuffix(strSuffix);
		xpn.setPrefix(strPrefix);
		xpn.setNameTypeCode(strNameTypeCode);
		xpn.setNameRepresentationCode(strNameRepresentationCode);
		xpn.setNameContext(objNameContext);
		xpn.setNameAssemblyOrder(strNameAssemblyOrder);
		xpn.setEffectiveDate(objEffectiveDate);
		xpn.setExpirationDate(objExpirationDate);
		xpn.setProfessionalSuffix(strProfessionalSuffix); 
		xpn.setCalledBy(strCalledBy);
		setBleedEndPhlebotomist(xpn);
	} 

	/** Set the Bleed End Phlebotomist.
	 *  The Phlebotomist who ends the blood flow into the container.
	 * @param objBleedEndPhlebotomist object of Bleed End Phlebotomist.
	 */ 
	public void setBleedEndPhlebotomist(XPN objBleedEndPhlebotomist)
	{
		setDataType(3363,objBleedEndPhlebotomist);
	}
	
	/**
	 * Retrieves the Aphaeresis Type Machine.
	 * The type of aphaeresis machine, if used, for the donation.
	 * @return String - AphaeresisTypeMachine
	 */
	public ST getAphaeresisTypeMachine() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3364);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Aphaeresis Type Machine.
	 * The type of aphaeresis machine, if used, for the donation.
	 * @param strAphaeresisTypeMachine Contains the Aphaeresis Type Machine. 
	 */ 
	public void setAphaeresisTypeMachine(String strAphaeresisTypeMachine)
	{
		ST st  = (ST)getDataElement(3364);
		st.setValue(strAphaeresisTypeMachine); 
		setAphaeresisTypeMachine(st);
	} 

	/**
	 * Set the Aphaeresis Type Machine.
	 * The type of aphaeresis machine, if used, for the donation.
	 * @param objAphaeresisTypeMachine object of Aphaeresis Type Machine. 
	 */ 
	public void setAphaeresisTypeMachine(ST objAphaeresisTypeMachine)
	{
		setDataType(3364,objAphaeresisTypeMachine);
	}
	
	/**
	 * Retrieves the Aphaeresis Machine Serial Number.
	 * The type of aphaeresis machine, if used, for the donation. It will be the specific product name of the machine (e.g. Trima, Amicus, Alyx, Symal, etc.).
	 * @return String - AphaeresisMachineSerialNumber
	 */
	public ST getAphaeresisMachineSerialNumber() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3365);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Aphaeresis Machine Serial Number.
	 * The type of aphaeresis machine, if used, for the donation. It will be the specific product name of the machine (e.g. Trima, Amicus, Alyx, Symal, etc.).
	 * @param strAphaeresisMachineSerialNumber Contains the Aphaeresis Machine Serial Number. 
	 */ 
	public void setAphaeresisMachineSerialNumber(String strAphaeresisMachineSerialNumber)
	{
		ST st  = (ST)getDataElement(3365);
		st.setValue(strAphaeresisMachineSerialNumber); 
		setAphaeresisMachineSerialNumber(st);
	} 

	/**
	 * Set the Aphaeresis Machine Serial Number.
	 * The type of aphaeresis machine, if used, for the donation. It will be the specific product name of the machine (e.g. Trima, Amicus, Alyx, Symal, etc.).
	 * @param objAphaeresisMachineSerialNumber Object of Aphaeresis Machine Serial Number. 
	 */ 
	public void setAphaeresisMachineSerialNumber(ST objAphaeresisMachineSerialNumber)
	{
		setDataType(3365,objAphaeresisMachineSerialNumber);
	}
	
	/**
	 * Retrieves the Donor Reaction.
	 * Did the donor have any adverse reaction during the donation procedure?  Yes or No.
	 * @return String - IntendedRecipientBloodRelative
	 */
	public ID getDonorReaction() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3366);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 *  Set the Donor Reaction.
	 * Did the donor have any adverse reaction during the donation procedure?  Yes or No.
	 * @param strDonorReaction Used for Intended Recipient Blood Relative.
	 */ 
	public void setDonorReaction(String strDonorReaction)
	{
		ID id  = (ID)getDataElement(3366);
		id.setValue(strDonorReaction); 
		setDonorReaction(id);
	} 

	/** Set the Donor Reaction.
	 * Did the donor have any adverse reaction during the donation procedure?  Yes or No.
	 * @param objDonorReaction object of Donor Reaction.
	 */ 
	public void setDonorReaction(ID objDonorReaction)
	{
		setDataType(3366,objDonorReaction);
	}
	
	
	/**
	 * Retrieves the Final Review Staff ID.
	 * The Staff member conducting the final review and reconciliation of all documentation created during the collection process.
	 * @return XPN - FinalReviewStaffID
	 */
	public XPN getFinalReviewStaffID() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3367);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XPN)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Final Review Staff ID.
	 * The Staff member conducting the final review and reconciliation of all documentation created during the collection process.
	 * @param objFamilyName Specifies the surname of a person. 
	 * @param strGivenName Specifies First name.
	 * @param strSecondAndFurtherGivenNamesOrInitialsThereof Specifies multiple middle names that may be included by separating them with spaces.
	 * @param strSuffix Used to specify a name suffix (e.g., Jr. or III).
	 * @param strPrefix Used to specify a name prefix (e.g., Dr.).
	 * @param strNameTypeCode Specifies a code that represents the type of name. Suggested values are A,B,C,D,I,L,M,N,P,R,S,T,U...[Refer table 0200.]
	 * @param strNameRepresentationCode Specifies representations of the same name/address Suggested values are I,A,P [Refer table 0465] 
	 * @param objNameContext Designates the context in which a name is used. [Refer User-defined Table 0448 ]
	 * @param strNameAssemblyOrder Specifies a code that represents the preferred display order of the components of this person name. Suggested values are G,F[Refer table 0444.]
	 * @param objEffectiveDate Specifies the first date, if known, on which the address is valid and active.
	 * @param objExpirationDate Specifies the last date, if known, on which the address is valid and active.
	 * @param strProfessionalSuffix Used to specify an abbreviation, or a string of abbreviations, denoting qualifications that support the person's profession, (e.g., licenses). 
	 * @param strCalledBy Used to specify the called name.
	 */ 
	public void setFinalReviewStaffID(FN objFamilyName, String strGivenName, String strSecondAndFurtherGivenNamesOrInitialsThereof, 
			String strSuffix, String strPrefix, String strNameTypeCode, String strNameRepresentationCode, 
			CWE objNameContext, String strNameAssemblyOrder, DTM objEffectiveDate,
			DTM objExpirationDate, String strProfessionalSuffix, String strCalledBy)
	{
		XPN xpn = (XPN)getDataElement(3367);
		xpn.setFamilyName(objFamilyName);
		xpn.setGivenName(strGivenName);
		xpn.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		xpn.setSuffix(strSuffix);
		xpn.setPrefix(strPrefix);
		xpn.setNameTypeCode(strNameTypeCode);
		xpn.setNameRepresentationCode(strNameRepresentationCode);
		xpn.setNameContext(objNameContext);
		xpn.setNameAssemblyOrder(strNameAssemblyOrder);
		xpn.setEffectiveDate(objEffectiveDate);
		xpn.setExpirationDate(objExpirationDate);
		xpn.setProfessionalSuffix(strProfessionalSuffix); 
		xpn.setCalledBy(strCalledBy);
		setFinalReviewStaffID(xpn);
	} 

	/** Set the Final Review Staff ID.
	 * The Staff member conducting the final review and reconciliation of all documentation created during the collection process.
	 * @param objIntendedRecipientOrderingProvider object of Intended Recipient Ordering Provider.
	 */ 
	public void setFinalReviewStaffID(XPN objIntendedRecipientOrderingProvider)
	{
		setDataType(3367,objIntendedRecipientOrderingProvider);
	}
	
	/**
	 * Retrieves the Final Review Date Time.
	 * The date and time a final review of all documentation and labeling of the blood material is completed.
	 * @return DTM - FinalReviewDateTime
	 */
	public DTM getFinalReviewDateTime() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3368);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Final Review Date Time.
	 * The date and time a final review of all documentation and labeling of the blood material is completed.
	 * @param strTime Specifies a point in time using a 24-hour clock notation. 
	 * 
	 */
	public void setFinalReviewDateTime(String strTime) 
	{
		DTM dtm  = (DTM)getDataElement(3368);
		dtm.setValue(strTime);		
		setFinalReviewDateTime(dtm);
	}

	/**
	 * Set the Final Review Date Time.
	 * The date and time a final review of all documentation and labeling of the blood material is completed. 
	 * @param objFinalReviewDateTime Object of Final Review Date Time.
	 */
	public void setFinalReviewDateTime(DTM objFinalReviewDateTime)
	{
		setDataType(3368,objFinalReviewDateTime);
	}
	
	
	/**
	 * Retrieves the Number of Tubes Collected.
	 * The number of samples collected during the donation which will be used for subsequent testing.  
	 * @return NM - NumberofTubesCollected
	 */
	public NM getNumberofTubesCollected() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3369);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Number of Tubes Collected.
	 * The number of samples collected during the donation which will be used for subsequent testing.   
	 * @param strDonationDuration Specifies Number of Tubes Collected.
	 */
	public void setNumberofTubesCollected(String strDonationDuration) 
	{
		NM nm  = (NM)getDataElement(3369);
		nm.setValue(strDonationDuration);
		setNumberofTubesCollected(nm);
	}

	/**
	 * Set the Number of Tubes Collected.
	 * The number of samples collected during the donation which will be used for subsequent testing.
	 * @param objNumberofTubesCollected Object of Number of Tubes Collected.
	 */
	public void setNumberofTubesCollected(NM objNumberofTubesCollected)
	{
		setDataType(3369,objNumberofTubesCollected);
	}
	
	/**
	 * Retrieves the Donation Sample Identifier.
	 * The sample identifier for the sample collected during a donation for the purpose of testing. This is a field for sample or specimen identifiers.
	 * @return ISingleCollection<EI> - equipmentInstanceIdentifier
	 */
	public ISingleCollection<EI> getDonationSampleIdentifier() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3370);
		ISingleCollection<EI> objDataList = new SingleCollection<EI>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				EI objEI = (EI)objDataType;
				objDataList.add(objEI);
			}
		}
		return objDataList;
	}



	/** Add the Donation Sample Identifier.
	 * The sample identifier for the sample collected during a donation for the purpose of testing. This is a field for sample or specimen identifiers.  
	 * @param strEntityIdentifier Specifies entity identifier
	 * @param strNamespaceId Specifies the NameSpace ID.
	 * @param strUniversalId Specifies the Universal ID
	 * @param strUniversalIdType Specifies the Universal ID type
	 */ 
	public void addDonationSampleIdentifier(String strEntityIdentifier,String strNamespaceId,
			String strUniversalId,String strUniversalIdType)
	{
		EI ei  = (EI)getDataElement(3370);
		ei.setEntityIdentifier(strEntityIdentifier);
		ei.setNamespaceId(strNamespaceId);
		ei.setUniversalId(strUniversalId);
		ei.setUniversalIdType(strUniversalIdType); 
		addDonationSampleIdentifier(ei);
	}
	/** Add the Donation Sample Identifier.
	 * The sample identifier for the sample collected during a donation for the purpose of testing. This is a field for sample or specimen identifiers.  
	 * @param strEntityIdentifier Specifies entity identifier
	 * @param strNamespaceId Specifies the NameSpace ID.
	 * @param strUniversalId Specifies the Universal ID
	 * @param strUniversalIdType Specifies the Universal ID type
	 */ 
	public void addDonationSampleIdentifier(EI objDonationSampleIdentifier)
	{
		addDataType(3370,objDonationSampleIdentifier);

	}

	/**
	 * Set the Donation Sample Identifier.
	 * The sample identifier for the sample collected during a donation for the purpose of testing. This is a field for sample or specimen identifiers.
	 * @param objDonationSampleIdentifierList List of DonationSampleIdentifier
	 */	
	@SuppressWarnings("unchecked")
	public void setDonationSampleIdentifier(ISingleCollection<EI> objDonationSampleIdentifierList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objDonationSampleIdentifierList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(3370,objCollection);
	}
	
	/** Retrieves the Donation Accept Staff.
	 * The staff member who reviewed all the intake materials, assessments and determined the donor can undergo a donation procedure at this time.
	 * @return XCN - DonationAcceptStaff.
	 */ 
	public XCN getDonationAcceptStaff()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3371);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XCN)objDataCollection.elementAt(0);
		else
			return null;
	}

	/**
	 * Set the Donation Accept Staff.
	 * The staff member who reviewed all the intake materials, assessments and determined the donor can undergo a donation procedure at this time.  
	 * @param strIDNumber Refers to the coded ID according to a user-defined table
	 * @param objFamilyName Specifies the surname of a person.
	 * @param strGivenName Specifies First name.
	 * @param strSecondAndFurtherGivenNamesOrInitialsThereof Specifies multiple middle names that may be included by 
	 * 														   separating them with spaces.
	 * @param strSuffix Used to specify a name suffix (e.g., Jr. or III).
	 * @param strPrefix Used to specify a name prefix (e.g., Dr.).
	 * @param strSourceTable Used as the HL7 identifier for the user-defined table of values for this component. [Refer User-defined Table 0297 - CN ID.]
	 * @param objAssigningAuthority Specifies a unique identifier of the system (or organization or agency of department)
	 * 								  that creates the data. [Refer User-defined Table 0363 - Assigning authority]
	 * @param strNameTypeCode Specifies a code that represents the type of name. 
	 * @param strIdentifierCheckDigit Specifies part of the identifying number used in the sending application. 
	 * @param strCheckDigitScheme Specifies the code identifying the check digit scheme employed.[Refer HL7 Table 0061 - Check digit scheme].
	 * @param strIdentifierTypeCode Specifies A code corresponding to the type of identifier.[Refer HL7 Table 0203 - Identifier type].
	 * @param objAssigningFacility Specifies the place or location identifier where the identifier was first assigned to the person
	 * @param strNameRepresentationCode Provides an indication of the representation provided by the data item.  
	 * @param objNameContext Designates the context in which a name is used. [Refer User-defined Table 0448 ]
	 * @param strNameAssemblyOrder Specifies a code that represents the preferred display order of the components of this person name. Suggested values are G,F[Refer table 0444.]
	 * @param strEffectiveDate Specifies the first date, if known, on which the address is valid and active.
	 * @param strExpirationDate Specifies the last date, if known, on which the address is valid and active.
	 * @param strProfessionalSuffix Used to specify an abbreviation, or a string of abbreviations, denoting qualifications that support the person's profession, (e.g., licenses).
	 * @param objAssigningJurisdiction Specifies the geo-political body that assigned the identifier.
	 * @param objAssigningAgencyOrDepratment Specifies the agency or department that assigned the identifier
	 * @param strSecurityCheck Specifies the version code that may be assigned to the person identifier
	 * @param strSecurityCheckScheme Specifies the check digit scheme.
	 */ 
	public void setDonationAcceptStaff  (String strIDNumber,FN objFamilyName,String strGivenName,String strSecondAndFurtherGivenNamesOrInitialsThereof,
			String 	strSuffix,String strPrefix,CWE objSourceTable,HD objAssigningAuthority,
			String strNameTypeCode,String strIdentifierCheckDigit,String strCheckDigitScheme,String strIdentifierTypeCode,
			HD objAssigningFacility,String strNameRepresentationCode,CWE objNameContext,
			String strNameAssemblyOrder, String strEffectiveDate,String strExpirationDate,String strProfessionalSuffix,
			CWE objAssigningJurisdiction,CWE objAssigningAgencyOrDepratment, String strSecurityCheck, String strSecurityCheckScheme)
	{
		XCN xcn = (XCN)getDataElement(3371);
		xcn.setIdNumber(strIDNumber);
		xcn.setFamilyName(objFamilyName);
		xcn.setGivenName(strGivenName);
		xcn.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		xcn.setSuffix(strSuffix);
		xcn.setPrefix(strPrefix);
 
		xcn.setSourceTable(objSourceTable);
		xcn.setAssigningAuthority(objAssigningAuthority);
		xcn.setNameTypeCode(strNameTypeCode);
		xcn.setIdentifierCheckDigit(strIdentifierCheckDigit);
		xcn.setCheckDigitScheme(strCheckDigitScheme);
		xcn.setIdentifierTypeCode(strIdentifierTypeCode);
		xcn.setAssigningFacility(objAssigningFacility);
		xcn.setNameRepresentationCode(strNameRepresentationCode);
		xcn.setNameContext(objNameContext);
 
		xcn.setNameAssemblyOrder(strNameAssemblyOrder);
		xcn.setEffectiveDate(strEffectiveDate);
		xcn.setExpirationDate(strExpirationDate);
		xcn.setProfessionalSuffix(strProfessionalSuffix);
		xcn.setAssigningJurisdiction(objAssigningJurisdiction);
		xcn.setAssigningAgencyOrDepartment(objAssigningAgencyOrDepratment); 
		xcn.setSecurityCheck(strSecurityCheck);
		xcn.setSecurityCheckScheme(strSecurityCheckScheme);
		setDonationAcceptStaff(xcn);

	} 
	/**Set the Donation Accept Staff.
	 * The staff member who reviewed all the intake materials, assessments and determined the donor can undergo a donation procedure at this time.
	 * @param objPerformingOrganizationMedicalDirector Used as Performing Organization Name.
	 */ 
	public void setDonationAcceptStaff(XCN objPerformingOrganizationMedicalDirector)
	{
		setDataType(3371,objPerformingOrganizationMedicalDirector);
	}
	


	/** 
	 * Retrieves the Donation Material Review Staff.
	 * The staff member who performs review on all documentation subsequent to donation procedure.
	 * @param objDonationMaterialReviewStaff Object of Donation Material Review Staff.
	 */
	public ISingleCollection<XCN> getDonationMaterialReviewStaff()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3372);
		ISingleCollection<XCN> objDataList = new SingleCollection<XCN>();
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				XCN objXCN = (XCN)objDataType;
				objDataList.add(objXCN);
			}
		}

		return objDataList;
	}
	
	/**
	 * Add the Donation Material Review Staff.
	 * The staff member who performs review on all documentation subsequent to donation procedure.
	 * @param strIDNumber Refers to the coded ID according to a user-defined table
	 * @param objFamilyName Specifies the surname of a person.
	 * @param strGivenName Specifies First name.
	 * @param strSecondAndFurtherGivenNamesOrInitialsThereof Specifies multiple middle names that may be included by 
	 * 														   separating them with spaces.
	 * @param strSuffix Used to specify a name suffix (e.g., Jr. or III).
	 * @param strPrefix Used to specify a name prefix (e.g., Dr.).
	 * @param strSourceTable Used as the HL7 identifier for the user-defined table of values for this component. [Refer User-defined Table 0297 - CN ID.]
	 * @param objAssigningAuthority Specifies a unique identifier of the system (or organization or agency of department)
	 * 								  that creates the data. [Refer User-defined Table 0363 - Assigning authority]
	 * @param strNameTypeCode Specifies a code that represents the type of name. 
	 * @param strIdentifierCheckDigit Specifies part of the identifying number used in the sending application. 
	 * @param strCheckDigitScheme Specifies the code identifying the check digit scheme employed.[Refer HL7 Table 0061 - Check digit scheme].
	 * @param strIdentifierTypeCode Specifies A code corresponding to the type of identifier.[Refer HL7 Table 0203 - Identifier type].
	 * @param objAssigningFacility Specifies the place or location identifier where the identifier was first assigned to the person
	 * @param strNameRepresentationCode Provides an indication of the representation provided by the data item.  
	 * @param objNameContext Designates the context in which a name is used. [Refer User-defined Table 0448 ]
	 * @param strNameAssemblyOrder Specifies a code that represents the preferred display order of the components of this person name. Suggested values are G,F[Refer table 0444.]
	 * @param strEffectiveDate Specifies the first date, if known, on which the address is valid and active.
	 * @param strExpirationDate Specifies the last date, if known, on which the address is valid and active.
	 * @param strProfessionalSuffix Used to specify an abbreviation, or a string of abbreviations, denoting qualifications that support the person's profession, (e.g., licenses).
	 * @param objAssigningJurisdiction Specifies the geo-political body that assigned the identifier.
	 * @param objAssigningAgencyOrDepratment Specifies the agency or department that assigned the identifier
	 * @param strSecurityCheck Specifies the version code that may be assigned to the person identifier
	 * @param strSecurityCheckScheme Specifies the check digit scheme.
	 */	 
	public void addDonationMaterialReviewStaff (String strIDNumber,FN objFamilyName,String strGivenName,String strSecondAndFurtherGivenNamesOrInitialsThereof,
			String 	strSuffix,String strPrefix,CWE objSourceTable,HD objAssigningAuthority,
			String strNameTypeCode,String strIdentifierCheckDigit,String strCheckDigitScheme,String strIdentifierTypeCode,
			HD objAssigningFacility,String strNameRepresentationCode,CWE objNameContext,
			String strNameAssemblyOrder, String strEffectiveDate,String strExpirationDate,String strProfessionalSuffix,
			CWE objAssigningJurisdiction,CWE objAssigningAgencyOrDepratment, String strSecurityCheck, String strSecurityCheckScheme)
	{
		XCN xcn  = (XCN)getDataElement(3372);
		xcn.setIdNumber(strIDNumber);
		xcn.setFamilyName(objFamilyName);
		xcn.setGivenName(strGivenName);
		xcn.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		xcn.setSuffix(strSuffix);
		xcn.setPrefix(strPrefix);
 
		xcn.setSourceTable(objSourceTable);
		xcn.setAssigningAuthority(objAssigningAuthority);
		xcn.setNameTypeCode(strNameTypeCode);
		xcn.setIdentifierCheckDigit(strIdentifierCheckDigit);
		xcn.setCheckDigitScheme(strCheckDigitScheme);
		xcn.setIdentifierTypeCode(strIdentifierTypeCode);
		xcn.setAssigningFacility(objAssigningFacility);
		xcn.setNameRepresentationCode(strNameRepresentationCode);
		xcn.setNameContext(objNameContext);
 
		xcn.setNameAssemblyOrder(strNameAssemblyOrder);
		xcn.setEffectiveDate(strEffectiveDate);
		xcn.setExpirationDate(strExpirationDate);
		xcn.setProfessionalSuffix(strProfessionalSuffix);
		xcn.setAssigningJurisdiction(objAssigningJurisdiction);
		xcn.setAssigningAgencyOrDepartment(objAssigningAgencyOrDepratment); 
		xcn.setSecurityCheck(strSecurityCheck);
		xcn.setSecurityCheckScheme(strSecurityCheckScheme);
		addDonationMaterialReviewStaff(xcn);
	} 

	/** 
	 * Add the Donation Material Review Staff.
	 * The staff member who performs review on all documentation subsequent to donation procedure.
	 * @param objDonationMaterialReviewStaff Object of Donation Material Review Staff.
	 */ 
	public void addDonationMaterialReviewStaff(XCN objDonationMaterialReviewStaff)
	{
		addDataType(3372,objDonationMaterialReviewStaff);

	} 

	/** 
	 * Set the Donation Material Review Staff.
	 * The staff member who performs review on all documentation subsequent to donation procedure.
	 * @param objDonationMaterialReviewStaffList List of Donation Material Review Staff.
	 */ 
	@SuppressWarnings("unchecked")
	public void setDonationMaterialReviewStaff(ISingleCollection<XCN> objParticipationPersonList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objParticipationPersonList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(3372,objCollection);
	}
}