/*******************************************************************************
 *  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.FT;
import cdac.medinfo.sdk.hl7282.baselibs.ID;
import cdac.medinfo.sdk.hl7282.baselibs.SI;
import cdac.medinfo.sdk.hl7282.baselibs.ST;
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.exceptions.FieldMissingException;
import cdac.medinfo.sdk.hl7282.exceptions.InvalidSegmentException;
import cdac.medinfo.sdk.hl7282.utils.EnumSegments;
import cdac.medinfo.sdk.hl7282.utils.SingleCollection;

/***
 * CON - Consent Segment.<p>
 * The consent segment provides details about a specific consent by a patient or staff member.
 * <p>Represents an HL7 CON message segment. 
 * This segment has the following fields:</p><p>
 * CON-1: Set ID - CON (SI)<b>Required</b><br> 
 * CON-2: Consent Type (CWE)<b>Optional</b><br> 
 * CON-3: Consent Form ID and Version (ST)<b>Optional</b><br> 
 * CON-4: Consent Form Number (EI)<b>Optional</b><br> 
 * CON-5: Consent Text (FT)<b>Optional</b><br> 
 * CON-6: Subject-specific Consent Text (FT)<b>Optional</b><br> 
 * CON-7: Consent Background Information (FT)<b>Optional</b><br>  
 * CON-8: Subject-specific Consent Background Text(FT)<b>Optional</b><br> 
 * CON-9: Consenter-imposed Limitations (FT)<b>Optional</b><br> 
 * CON-10: Consent Mode (CNE)<b>Optional</b><br> 
 * CON-11: Consent Status (CNE)<b>Required</b><br> 
 * CON-12: Consent Discussion Date/Time (DTM)<b>Optional</b><br> 
 * CON-13: Consent Decision Date/Time (DTM)<b>Optional</b><br> 
 * CON-14: Consent Effective Date/Time (DTM)<b>Optional</b><br> 
 * CON-15: Consent End Date/Time (DTM)<b>Optional</b><br> 
 * CON-16: Subject Competence Indicator (ID)<b>Optional</b><br> 
 * CON-17: Translator Assistance Indicator (ID)<b>Optional</b><br> 
 * CON-18: Language Translated To (CWE)<b>Optional</b><br> 
 * CON-19: Informational Material  Supplied Indicator (ID)<b>Optional</b><br> 
 * CON-20: Consent Bypass Reason (CWE)<b>Optional</b><br> 
 * CON-21: Consent Disclosure Level (ID)<b>Optional</b><br> 
 * CON-22: Consent Non-disclosure Reason (CWE)<b>Optional</b><br> 
 * CON-23: Non-subject Consenter Reason(CWE)<b>Optional</b><br> 
 * CON-24: Consenter ID (XPN)<b>Required</b><br> 
 * CON-25: Relationship to Subject(CWE)<b>Optional</b><br> 
 * 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 ConsentSeg extends Segment   
{
	

	/**
	 * Constructs the CON segment.
	 */
	public ConsentSeg() 
	{super(EnumSegments.HL7_SEG_CON);
	}

	//Integer values used in getter/setter is unique item id defined 
	//for each attribute.

	/**
	 * Retrieves the Set ID - CON.
	 * This field is used to identify CON segment instance within the message.
	 * @return SI - SetID_PAC
	 */
	public SI getSetID_CON() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1776);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (SI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Type.
	 * This field describes what the subject is consenting to i.e what type of service, surgical procedure, information access/release or other event.
	 * @return CWE - ConsentType
	 */
	public CWE getConsentType() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1777);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Form ID and Version.
	 * This field identifies a specific version of the consent form used to record the consent.
	 * @return ST - ConsentFormIDandVersion
	 */
	public ST getConsentFormIDandVersion() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1778);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Form Number.
	 * This  identifier uniquely identifies a specific recorded consent.
	 * @return EI - ConsentFormNumber
	 */
	public EI getConsentFormNumber() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1779);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (EI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Text.
	 * This field describes the specific procedures/information releases/events the subject is consenting to.
	 * @return ISingleCollection<FT> - ConsentText
	 */
	public ISingleCollection<FT> getConsentText() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1780);
		ISingleCollection<FT> objDataList = new SingleCollection<FT>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				FT objFT = (FT)objDataType;
				objDataList.add(objFT);
			}
		}
		return objDataList;
	}
	
	/**
	 * Retrieves the Subject-specific Consent Text.
	 * This field describes any additions or variations to the standard procedures/information releases/events from a standard consent that are applicable to the subject whose consent is sought.
	 * @return ISingleCollection<FT> - SubjectspecificConsentText
	 */
	public ISingleCollection<FT> getSubjectspecificConsentText() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1781);
		ISingleCollection<FT> objDataList = new SingleCollection<FT>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				FT objFT = (FT)objDataType;
				objDataList.add(objFT);
			}
		}
		return objDataList;
	}
	
	/**
	 * Retrieves the Consent Background Information.
	 * This field describes any additions or variations relating to the procedure/information release/event that needs to be understood by the subject for informed consent. 
	 * @return ISingleCollection<FT> - ConsentBackgroundInformation
	 */
	public ISingleCollection<FT> getConsentBackgroundInformation() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1782);
		ISingleCollection<FT> objDataList = new SingleCollection<FT>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				FT objFT = (FT)objDataType;
				objDataList.add(objFT);
			}
		}
		return objDataList;
	}
	
	/**
	 * Retrieves the Subject-specific Consent Background Text.
	 * This field describes any additions or variations to standard additional information that needs to be understood by the patient for informed consent. 
	 * @return ISingleCollection<FT> - SubjectspecificConsentBackgroundText
	 */
	public ISingleCollection<FT> getSubjectspecificConsentBackgroundText() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1783);
		ISingleCollection<FT> objDataList = new SingleCollection<FT>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				FT objFT = (FT)objDataType;
				objDataList.add(objFT);
			}
		}
		return objDataList;
	}
	
	/**
	 * Retrieves the Consenter-imposed Limitations.
	 * This field describes any restrictions or limitations placed on their consent by the subject. 
	 * @return ISingleCollection<FT> - ConsenterimposedLimitations
	 */
	public ISingleCollection<FT> getConsenterimposedLimitations() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1784);
		ISingleCollection<FT> objDataList = new SingleCollection<FT>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				FT objFT = (FT)objDataType;
				objDataList.add(objFT);
			}
		}
		return objDataList;
	}
	
	/**
	 * Retrieves the Consent Mode.
	 * This field specifies the method in which a subject provides consent.
	 * @return CNE - ConsentMode
	 */
	public CNE getConsentMode() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1785);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CNE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Status.
	 * This field indicates whether consent has been sought and granted.
	 * @return CNE - ConsentStatus
	 */
	public CNE getConsentStatus() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1786);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CNE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Discussion Date/Time.
	 * This field identifies the time when consent was discussed with the subject.
	 * @return DTM - ConsentDiscussionDateTime
	 */
	public DTM getConsentDiscussionDateTime() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1787);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Decision Date/Time.
	 * This field identifies the time when the decision to grant/refuse consent was made.
	 * @return DTM - ConsentDecisionDateTime
	 */
	public DTM getConsentDecisionDateTime() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1788);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Effective Date/Time.
	 * This field identifies the time the consent becomes/became effective.
	 * @return DTM - ConsentEffectiveDateTime
	 */
	public DTM getConsentEffectiveDateTime() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1789);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent End Date/Time.
	 * This field identifies the time the consent becomes ineffective.
	 * @return DTM - ConsentEndDateTime
	 */
	public DTM getConsentEndDateTime() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1790);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Subject Competence Indicator.
	 * This field identifies whether the subject was deemed competent to provide consent.
	 * @return ID - SubjectCompetenceIndicator
	 */
	public ID getSubjectCompetenceIndicator() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1791);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Translator Assistance Indicator.
	 * This field identifies whether the translation was (or will be) required to obtain informed consent.
	 * @return ID - TranslatorAssistanceIndicator
	 */
	public ID getTranslatorAssistanceIndicator() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1792);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Language Translated to.
	 * This field identifies the language the consent material must be translated to.
	 * @return CWE - LanguageTranslatedTo
	 */
	public CWE getLanguageTranslatedTo() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1793);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Informational Material Supplied Indicator.
	 * This field identifies whether additional educational or reference material was provided to the subject as part of the consent process.
	 * @return ID - InformationalMaterialSuppliedIndicator
	 */
	public ID getInformationalMaterialSuppliedIndicator() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1794);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Bypass Reason.
	 * This field identifies why the subject's consent was not sought.
	 * @return CWE - ConsentBypassReason
	 */
	public CWE getConsentBypassReason() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1795);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Disclosure Level.
	 * This field identifies how much information was disclosed to the subject as part of the informed consent process.
	 * @return ID - ConsentDisclosureLevel
	 */
	public ID getConsentDisclosureLevel() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1796);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consent Non-disclosure Reason.
	 * This field identifies why the subject did not receive full disclosure.
	 * @return CWE - ConsentNondisclosureReason
	 */
	public CWE getConsentNondisclosureReason() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1797);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Non-subject Consenter Reason.
	 * This field identifies why consent was granted by a person other than the subject of the consent.
	 * @return CWE - NonsubjectConsenterReason
	 */
	public CWE getNonsubjectConsenterReason() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1798);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieves the Consenter ID.
	 * This field identifies the individual(s) who is (are) consenting. 
	 * @return ISingleCollection<XPN> - ConsenterID
	 */
	public ISingleCollection<XPN> getConsenterID() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1909);
		ISingleCollection<XPN> objDataList = new SingleCollection<XPN>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				XPN objXPN = (XPN)objDataType;
				objDataList.add(objXPN);
			}
		}
		return objDataList;
	}
	
	/**
	 * Retrieves the Relationship to Subject.
	 * This field identifies the relationship of the consenter to the subject.
	 * @return ISingleCollection<CWE> - RelationshiptoSubject
	 */
	public ISingleCollection<CWE> getRelationshiptoSubject() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1898);
		ISingleCollection<CWE> objDataList = new SingleCollection<CWE>(); 
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				CWE objCWE = (CWE)objDataType;
				objDataList.add(objCWE);
			}
		}
		return objDataList;
	}
	

	/**
	 * Set the Set ID CON.
	 * @param strSetID_CON Specifies setID_CON.
	 */
	public void setSetID_CON(String strSetID_CON) 
	{
		SI setID_CON  = (SI)getDataElement(1776);
		setID_CON.setValue(strSetID_CON);
		setSetID_CON(setID_CON);
	}

	/**
	 * Set the Set ID CON.
	 * @param objsetID_CON Object of Set ID CON.
	 */
	public void setSetID_CON(SI objsetID_CON)
	{
		setDataType(1776,objsetID_CON);
	}
	
	/**
	 * Set the Consent Type.
	 * This field describes what the subject is consenting to i.e what type of service, surgical procedure, information access/release or other event.
	 * @param strIdentifier Specifies of characters (the code) that uniquely identifies the item being referenced. 
	 * @param strText Specifies The descriptive or textual name of the identifier, e.g., myocardial infarction. 
	 * @param strNameOfCodingSystem Identifies the coding scheme being used in the identifier component.
	 * @param strAlternateIdentifier Specifies an alternate sequence of characters (the code) that uniquely identifies the item being referenced.
	 * @param strAlternateText Specifies the descriptive or textual name of the alternate identifier. See usage note in section introduction.
	 * @param strNameOfAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component. 
	 * @param strCodingSystemVersionID A sequence of characters that uniquely identifies a second alternate code.
	 * @param strAlternateCodingSystemVersionId This component carries the version for the coding system identified by components 4-6.
	 * @param strOriginalText The text as seen and/or selected by the user who entered the data.
	 * @param strSecondAlternateIdentifier A sequence of characters that uniquely identifies a second alternate code.
	 * @param strSecondAlternateText The descriptive or textual name of the alternate identifier.
	 * @param strNameofSecondAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component.
	 * @param strSecondAlternateCodingSystemVersionID This component carries the version for the coding system identified by components 10-12.
	 * @param strCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.3.
	 * @param strValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.1 is obtained.
	 * @param strValueSetVersionID This component carries the version for the value set identified by CWE.15. The version is a date. The date is the date/time that the value set being used was published.
	 * @param strAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.6.
	 * @param strAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.4 is obtained.
	 * @param strAlternateValueSetVersionID This component carries the version for the value set identified by CWE.18. The version is a date.
	 * @param strSecondAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.12.
	 * @param strSecondAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.10 is obtained.
	 * @param strSecondAlternateValueSetVersionID This component carries the version for the value set identified by CWE.21. The version is a date.
	 */
	public void setConsentType  (String strIdentifier,String strText,String strNameOfCodingSystem,
			String strAlternateIdentifier,String strAlternateText,String strNameOfAlternateCodingSystem, String strCodingSystemVersionID, String 				strAlternateCodingSystemVersionId,
			String strOriginalText, String  strSecondAlternateIdentifier, String strSecondAlternateText, 
			String strNameofSecondAlternateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, String strValueSetOID,
			String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID, String strAlternateValueSetVersionID,
			String  strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID, String strSecondAlternateValueSetVersionID)
	{
		CWE cwe  = (CWE)getDataElement(1777);
		cwe.setIdentifier(strIdentifier);
		cwe.setText(strText);
		cwe.setNameOfCodingSystem(strNameOfCodingSystem);
		cwe.setAlternateIdentifier(strAlternateIdentifier);
		cwe.setAlternateText(strAlternateText);
		cwe.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		cwe.setCodingSystemVersionID(strCodingSystemVersionID);
		cwe.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		cwe.setOriginalText(strOriginalText);
		cwe.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cwe.setSecondAlternateText(strSecondAlternateText);
		cwe.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		cwe.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cwe.setCodingSystemOID(strCodingSystemOID);
		cwe.setValueSetOID(strValueSetOID);
		cwe.setValueSetVersionID(strValueSetVersionID);
		cwe.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cwe.setAlternateValueSetOID(strAlternateValueSetOID);
		cwe.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cwe.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cwe.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cwe.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setConsentType(cwe);
	} 

	/**
	 * Set the Consent Type.
	 * This field describes what the subject is consenting to i.e what type of service, surgical procedure, information access/release or other event.
	 * @param objConsentType Object of Consent Type.
	 */ 
	public void setConsentType (CWE objConsentType)
	{
		setDataType(1777,objConsentType);
	}
	
	/**
	 * Set the Consent Form ID and Version.
	 * @param strConsentFormIDandVersion Specifies Consent Form ID and Version.  
	 */
	public void setConsentFormIDandVersion(String strConsentFormIDandVersion) 
	{
		ST consentFormIDandVersion  = (ST)getDataElement(1778);
		consentFormIDandVersion.setValue(strConsentFormIDandVersion);
		setConsentFormIDandVersion(consentFormIDandVersion);
	}

	/**
	 * Set the Consent Form ID and Version.
	 * @param objfillerField1 Object of Filler Field1.
	 */
	public void setConsentFormIDandVersion(ST objfillerField1)
	{
		setDataType(253,objfillerField1);
	}
	
	/**
	 * Set the Consent Form Number.
	 * This  identifier uniquely identifies a specific recorded consent.
	 * @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 setConsentFormNumber(String strEntityIdentifier,String strNamespaceId,String strUniversalId,
			String strUniversalIdType)
	{
		EI ei  = (EI)getDataElement(1779);
		ei.setEntityIdentifier(strEntityIdentifier);
		ei.setNamespaceId(strNamespaceId);
		ei.setUniversalId(strUniversalId);
		ei.setUniversalIdType(strUniversalIdType);
		setConsentFormNumber(ei);
	}

	/** 
	 * Set the Consent Form Number.
	 * This  identifier uniquely identifies a specific recorded consent.
	 * @param objConsentFormNumber  Object of Consent Form Number.
	 */ 
	public void setConsentFormNumber(EI objConsentFormNumber)
	{
		setDataType(1779,objConsentFormNumber);

	}
	
	/**
	 * Set the Consent Text.
	 * This field describes the specific procedures/information releases/events the subject is consenting to.
	 * @param strConsentText Specifies Consent Text
	 *   
	 */
	public void addConsentText(String strConsentText)
	{
		FT ft  = (FT)getDataElement(1780);
		ft.setValue(strConsentText);
		addConsentText(ft);
	}

	/** 
	 * Set the Consent Text.
	 * This field describes the specific procedures/information releases/events the subject is consenting to.
	 * @param objConsentText Object of Consent Text.
	 */ 
	public void addConsentText(FT objConsentText)
	{
		addDataType(1780,objConsentText);

	}
	
	/**
	 * Set the Consent Text.
	 * This field describes the specific procedures/information releases/events the subject is consenting to.
	 * @param objConsentText List of Consent Text
	 */	
	@SuppressWarnings("unchecked")
	public void setConsentText(ISingleCollection<FT> objConsentTextList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objConsentTextList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1780,objCollection);
	}
	
	/**
	 * Set the Subject-specific Consent Text.
	 * This field describes any additions or variations to the standard procedures/information releases/events from a standard consent that are applicable to the subject whose consent is sought.
	 * @param strSubjectspecificConsentText Specifies  Subject-specific Consent Text
	 *   
	 */
	public void addSubjectspecificConsentText(String strSubjectspecificConsentText)
	{
		FT ft  = (FT)getDataElement(1781);
		ft.setValue(strSubjectspecificConsentText);
		addSubjectspecificConsentText(ft);
	}

	/** 
	 * Set the Subject-specific Consent Text.
	 * This field describes any additions or variations to the standard procedures/information releases/events from a standard consent that are applicable to the subject whose consent is sought.
	 * @param objConsentText Object of Subject-specific Consent Text.
	 */ 
	public void addSubjectspecificConsentText(FT objSubjectspecificConsentText)
	{
		addDataType(1781,objSubjectspecificConsentText);

	}
	
	/**
	 * Set the Subject-specific Consent Text.
	 * This field describes any additions or variations to the standard procedures/information releases/events from a standard consent that are applicable to the subject whose consent is sought.
	 * @param objSubjectspecificConsentText List of Consent Text
	 */	
	@SuppressWarnings("unchecked")
	public void setSubjectspecificConsentText(ISingleCollection<FT> objSubjectspecificConsentTextList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objSubjectspecificConsentTextList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1781,objCollection);
	}
	
	/**
	 * Set the Consent Background Information.
	 * This field describes any additions or variations to the standard procedures/information releases/events from a standard consent that are applicable to the subject whose consent is sought.
	 * @param strConsentBackgroundInformation Specifies Consent Background Information
	 *   
	 */
	public void addConsentBackgroundInformation(String strConsentBackgroundInformation)
	{
		FT ft  = (FT)getDataElement(1782);
		ft.setValue(strConsentBackgroundInformation);
		addConsentBackgroundInformation(ft);
	}

	/** 
	 * Set the Consent Background Information.
	 * This field describes any additions or variations to the standard procedures/information releases/events from a standard consent that are applicable to the subject whose consent is sought.
	 * @param objConsentBackgroundInformation Object of Consent Background Information.
	 */ 
	public void addConsentBackgroundInformation(FT objConsentBackgroundInformation)
	{
		addDataType(1782,objConsentBackgroundInformation);

	}
	
	/**
	 * Set the Consent Background Information.
	 * This field describes any additions or variations to the standard procedures/information releases/events from a standard consent that are applicable to the subject whose consent is sought.
	 * @param objConsentBackgroundInformationList List of Consent Background Information
	 */	
	@SuppressWarnings("unchecked")
	public void setConsentBackgroundInformation(ISingleCollection<FT> objConsentBackgroundInformationList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objConsentBackgroundInformationList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1782,objCollection);
	}
	
	/**
	 * Set the Subject-specific Consent Background Text.
	 * This field describes any additions or variations to standard additional information that needs to be understood by the patient for informed consent. 
	 * @param strSubjectspecificConsentBackgroundIText Specifies Subject-specific Consent Background Text
	 *   
	 */
	public void addSubjectspecificConsentBackgroundText(String strSubjectspecificConsentBackgroundText)
	{
		FT ft  = (FT)getDataElement(1783);
		ft.setValue(strSubjectspecificConsentBackgroundText);
		addSubjectspecificConsentBackgroundText(ft);
	}

	/** 
	 * Set the Consent Background Information.
	 * This field describes any additions or variations to standard additional information that needs to be understood by the patient for informed consent. 
	 * @param objSubjectspecificConsentBackgroundText Object of Subject-specific Consent Background Text.
	 */ 
	public void addSubjectspecificConsentBackgroundText(FT objSubjectspecificConsentBackgroundText)
	{
		addDataType(1783,objSubjectspecificConsentBackgroundText);

	}
	
	/**
	 * Set the Consent Background Information.
	 * This field describes any additions or variations to standard additional information that needs to be understood by the patient for informed consent. 
	 * @param objSubjectspecificConsentBackgroundTextList List of Subject-specific Consent Background Text
	 */	
	@SuppressWarnings("unchecked")
	public void setSubjectspecificConsentBackgroundText(ISingleCollection<FT> objConsentBackgroundInformationList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objConsentBackgroundInformationList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1783,objCollection);
	}
	
	/**
	 * Set the Consenter-imposed Limitations.
	 * This field describes any restrictions or limitations placed on their consent by the subject. 
	 * @param strConsenterimposedLimitations Specifies Consenter-imposed Limitations
	 *   
	 */
	public void addConsenterimposedLimitations(String strConsenterimposedLimitations)
	{
		FT ft  = (FT)getDataElement(1784);
		ft.setValue(strConsenterimposedLimitations);
		addConsenterimposedLimitations(ft);
	}

	/** 
	 * Set the Consenter-imposed Limitations
	 * This field describes any restrictions or limitations placed on their consent by the subject. 
	 * @param objConsenterimposedLimitations Object of Consenter-imposed Limitations.
	 */ 
	public void addConsenterimposedLimitations(FT objSubjectspecificConsentBackgroundText)
	{
		addDataType(1784,objSubjectspecificConsentBackgroundText);

	}
	
	/**
	 * Set the Consenter-imposed Limitations.
	 * This field describes any restrictions or limitations placed on their consent by the subject. 
	 * @param objConsenterimposedLimitationsList List of Consenter-imposed Limitations
	 */	
	@SuppressWarnings("unchecked")
	public void setConsenterimposedLimitations(ISingleCollection<FT> objConsenterimposedLimitationsList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objConsenterimposedLimitationsList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1784,objCollection);
	}
	
	/**
	 * Set the Consent Mode.
	 * This field specifies the method in which a subject provides consent.
	 * @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 setConsentMode(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(1785);
		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);
		setConsentMode(cne);
	}

	/**
	 * Set the Consent Mode.
	 * This field specifies the method in which a subject provides consent.
	 * @param objConsentMode Object of Consent Mode.
	 */
	public void setConsentMode(CNE objConsentMode)
	{
		setDataType(1785,objConsentMode);
	}
	
	/**
	 * Set the Consent Status.
	 * This field indicates whether consent has been sought and granted.
	 * @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 setConsentStatus(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(1786);
		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);
		setConsentStatus(cne);
	}

	/**
	 * Set the Consent Status.
	 * This field indicates whether consent has been sought and granted.
	 * @param objConsentStatus Object of Consent Status.
	 */
	public void setConsentStatus(CNE objConsentStatus)
	{
		setDataType(1786,objConsentStatus);
	}
	
	/**
	 * Set the Consent Discussion Date/Time.
	 * This field identifies the time when consent was discussed with the subject.
	 * @param strTime Specifies a point in time using a 24-hour clock notation.	 * 
	 */ 
	public void setConsentDiscussionDateTime (String strTime)
	{
		DTM consentDiscussionDateTime  = (DTM)getDataElement(1787);
		consentDiscussionDateTime.setValue(strTime);		 
		setConsentDiscussionDateTime(consentDiscussionDateTime);
	} 

	/** 
	 * Set the Consent Discussion Date/Time.
	 * This field identifies the time when consent was discussed with the subject.
	 * @param objConsentDiscussionDateTime Object of Consent Discussion Date/Time.
	 */ 
	public void setConsentDiscussionDateTime(DTM objConsentDiscussionDateTime)
	{
		setDataType(1787,objConsentDiscussionDateTime);

	}
	
	/**
	 * Set the Consent Decision Date/Time.
	 * This field identifies the time when the decision to grant/refuse consent was made.
	 * @param strTime Specifies a point in time using a 24-hour clock notation.	 * 
	 */ 
	public void setConsentDecisionDateTime (String strTime)
	{
		DTM consentDecisionDateTime  = (DTM)getDataElement(1788);
		consentDecisionDateTime.setValue(strTime);		 
		setConsentDecisionDateTime(consentDecisionDateTime);
	} 

	/** 
	 * Set the Consent Decision Date/Time.
	 * This field identifies the time when the decision to grant/refuse consent was made.
	 * @param objConsentDecisionDateTime Object of Consent Decision Date/Time.
	 */ 
	public void setConsentDecisionDateTime(DTM objConsentDecisionDateTime)
	{
		setDataType(1788,objConsentDecisionDateTime);

	}
	
	/**
	 * Set the Consent Effective Date/Time.
	 * This field identifies the time the consent becomes/became effective.
	 * @param strTime Specifies a point in time using a 24-hour clock notation.	 * 
	 */ 
	public void setConsentEffectiveDateTime (String strTime)
	{
		DTM consentEffectiveDateTime  = (DTM)getDataElement(1789);
		consentEffectiveDateTime.setValue(strTime);		 
		setConsentEffectiveDateTime(consentEffectiveDateTime);
	} 

	/** 
	 * Set the Consent Effective Date/Time.
	 * This field identifies the time the consent becomes/became effective.
	 * @param objConsentEffectiveDateTime Object of Consent Effective Date/Time.
	 */ 
	public void setConsentEffectiveDateTime(DTM objConsentEffectiveDateTime)
	{
		setDataType(1789,objConsentEffectiveDateTime);

	}
	
	/**
	 * Set the Consent End Date/Time.
	 * This field identifies the time the consent becomes/became effective.
	 * @param strTime Specifies a point in time using a 24-hour clock notation.	 * 
	 */ 
	public void setConsentEndDateTime (String strTime)
	{
		DTM consentEndDateTime  = (DTM)getDataElement(1790);
		consentEndDateTime.setValue(strTime);		 
		setConsentEndDateTime(consentEndDateTime);
	} 

	/** 
	 * Set the Consent End Date/Time.
	 * This field identifies the time the consent becomes/became effective.
	 * @param objConsentEndDateTime Object of Consent Effective Date/Time.
	 */ 
	public void setConsentEndDateTime(DTM objConsentEndDateTime)
	{
		setDataType(1790,objConsentEndDateTime);

	}
	
	/**
	 * Set the Subject Competence Indicator
	 * This field identifies whether the subject was deemed competent to provide consent.
	 * @param strSubjectCompetenceIndicator Specifies Subject Competence Indicator.
	 */ 
	public void setSubjectCompetenceIndicator (String strSubjectCompetenceIndicator)
	{
		ID subjectCompetenceIndicator  = (ID)getDataElement(1791);
		subjectCompetenceIndicator.setValue(strSubjectCompetenceIndicator); 
		setSubjectCompetenceIndicator(subjectCompetenceIndicator);

	} 

	/** Set the Subject Competence Indicator.
	 * This field identifies whether the subject was deemed competent to provide consent.
	 * @param objSubjectCompetenceIndicator specifies Subject Competence Indicator.
	 */ 
	public void setSubjectCompetenceIndicator(ID objSubjectCompetenceIndicator)
	{
		setDataType(1791,objSubjectCompetenceIndicator);

	}
	
	/**
	 * Set the Translator Assistance Indicator
	 * This field identifies whether the subject was deemed competent to provide consent.
	 * @param strSubjectCompetenceIndicator Specifies Subject Competence Indicator.
	 */ 
	public void setTranslatorAssistanceIndicator (String strTranslatorAssistanceIndicator)
	{
		ID translatorAssistanceIndicator  = (ID)getDataElement(1792);
		translatorAssistanceIndicator.setValue(strTranslatorAssistanceIndicator); 
		setTranslatorAssistanceIndicator(translatorAssistanceIndicator);

	} 

	/** Set the Translator Assistance Indicator.
	 * This field identifies whether the subject was deemed competent to provide consent.
	 * @param objTranslatorAssistanceIndicator specifies Translator Assistance Indicator.
	 */ 
	public void setTranslatorAssistanceIndicator(ID objTranslatorAssistanceIndicator)
	{
		setDataType(1792,objTranslatorAssistanceIndicator);

	}
	
	/**
	 * Set the Language Translated To.
	 * This field identifies the language the consent material must be translated to.
	 * @param strIdentifier Specifies of characters (the code) that uniquely identifies the item being referenced. 
	 * @param strText Specifies The descriptive or textual name of the identifier, e.g., myocardial infarction. 
	 * @param strNameOfCodingSystem Identifies the coding scheme being used in the identifier component.
	 * @param strAlternateIdentifier Specifies an alternate sequence of characters (the code) that uniquely identifies the item being referenced.
	 * @param strAlternateText Specifies the descriptive or textual name of the alternate identifier. See usage note in section introduction.
	 * @param strNameOfAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component. 
	 * @param strCodingSystemVersionID A sequence of characters that uniquely identifies a second alternate code.
	 * @param strAlternateCodingSystemVersionId This component carries the version for the coding system identified by components 4-6.
	 * @param strOriginalText The text as seen and/or selected by the user who entered the data.
	 * @param strSecondAlternateIdentifier A sequence of characters that uniquely identifies a second alternate code.
	 * @param strSecondAlternateText The descriptive or textual name of the alternate identifier.
	 * @param strNameofSecondAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component.
	 * @param strSecondAlternateCodingSystemVersionID This component carries the version for the coding system identified by components 10-12.
	 * @param strCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.3.
	 * @param strValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.1 is obtained.
	 * @param strValueSetVersionID This component carries the version for the value set identified by CWE.15. The version is a date. The date is the date/time that the value set being used was published.
	 * @param strAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.6.
	 * @param strAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.4 is obtained.
	 * @param strAlternateValueSetVersionID This component carries the version for the value set identified by CWE.18. The version is a date.
	 * @param strSecondAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.12.
	 * @param strSecondAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.10 is obtained.
	 * @param strSecondAlternateValueSetVersionID This component carries the version for the value set identified by CWE.21. The version is a date.
	 */
	public void setLanguageTranslatedTo  (String strIdentifier,String strText,String strNameOfCodingSystem,
			String strAlternateIdentifier,String strAlternateText,String strNameOfAlternateCodingSystem, String strCodingSystemVersionID, String 				strAlternateCodingSystemVersionId,
			String strOriginalText, String  strSecondAlternateIdentifier, String strSecondAlternateText, 
			String strNameofSecondAlternateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, String strValueSetOID,
			String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID, String strAlternateValueSetVersionID,
			String  strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID, String strSecondAlternateValueSetVersionID)
	{
		CWE cwe  = (CWE)getDataElement(1793);
		cwe.setIdentifier(strIdentifier);
		cwe.setText(strText);
		cwe.setNameOfCodingSystem(strNameOfCodingSystem);
		cwe.setAlternateIdentifier(strAlternateIdentifier);
		cwe.setAlternateText(strAlternateText);
		cwe.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		cwe.setCodingSystemVersionID(strCodingSystemVersionID);
		cwe.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		cwe.setOriginalText(strOriginalText);
		cwe.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cwe.setSecondAlternateText(strSecondAlternateText);
		cwe.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		cwe.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cwe.setCodingSystemOID(strCodingSystemOID);
		cwe.setValueSetOID(strValueSetOID);
		cwe.setValueSetVersionID(strValueSetVersionID);
		cwe.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cwe.setAlternateValueSetOID(strAlternateValueSetOID);
		cwe.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cwe.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cwe.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cwe.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setLanguageTranslatedTo(cwe);
	} 

	/**
	 * Set the Language Translated To.
	 * This field identifies the language the consent material must be translated to.
	 * @param objLanguageTranslatedTo Object of Language Translated To.
	 */ 
	public void setLanguageTranslatedTo (CWE objLanguageTranslatedTo)
	{
		setDataType(1793,objLanguageTranslatedTo);
	}
	
	/**
	 * Set the Informational Material Supplied Indicator
	 * This field identifies whether additional educational or reference material was provided to the subject as part of the consent process.
	 * @param strInformationalMaterialSuppliedIndicator Specifies Informational Material Supplied Indicator.
	 */ 
	public void setInformationalMaterialSuppliedIndicator (String strInformationalMaterialSuppliedIndicator)
	{
		ID informationalMaterialSuppliedIndicator  = (ID)getDataElement(1794);
		informationalMaterialSuppliedIndicator.setValue(strInformationalMaterialSuppliedIndicator); 
		setInformationalMaterialSuppliedIndicator(informationalMaterialSuppliedIndicator);

	} 

	/** Set the Informational Material Supplied Indicator.
	 * This field identifies whether additional educational or reference material was provided to the subject as part of the consent process.
	 * @param objInformationalMaterialSuppliedIndicator specifies Informational Material Supplied Indicator.
	 */ 
	public void setInformationalMaterialSuppliedIndicator(ID objInformationalMaterialSuppliedIndicator)
	{
		setDataType(1794,objInformationalMaterialSuppliedIndicator);

	}
	
	/**
	 * Set the Consent Bypass Reason.
	 * This field identifies why the subject's consent was not sought.
	 * @param strIdentifier Specifies of characters (the code) that uniquely identifies the item being referenced. 
	 * @param strText Specifies The descriptive or textual name of the identifier, e.g., myocardial infarction. 
	 * @param strNameOfCodingSystem Identifies the coding scheme being used in the identifier component.
	 * @param strAlternateIdentifier Specifies an alternate sequence of characters (the code) that uniquely identifies the item being referenced.
	 * @param strAlternateText Specifies the descriptive or textual name of the alternate identifier. See usage note in section introduction.
	 * @param strNameOfAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component. 
	 * @param strCodingSystemVersionID A sequence of characters that uniquely identifies a second alternate code.
	 * @param strAlternateCodingSystemVersionId This component carries the version for the coding system identified by components 4-6.
	 * @param strOriginalText The text as seen and/or selected by the user who entered the data.
	 * @param strSecondAlternateIdentifier A sequence of characters that uniquely identifies a second alternate code.
	 * @param strSecondAlternateText The descriptive or textual name of the alternate identifier.
	 * @param strNameofSecondAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component.
	 * @param strSecondAlternateCodingSystemVersionID This component carries the version for the coding system identified by components 10-12.
	 * @param strCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.3.
	 * @param strValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.1 is obtained.
	 * @param strValueSetVersionID This component carries the version for the value set identified by CWE.15. The version is a date. The date is the date/time that the value set being used was published.
	 * @param strAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.6.
	 * @param strAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.4 is obtained.
	 * @param strAlternateValueSetVersionID This component carries the version for the value set identified by CWE.18. The version is a date.
	 * @param strSecondAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.12.
	 * @param strSecondAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.10 is obtained.
	 * @param strSecondAlternateValueSetVersionID This component carries the version for the value set identified by CWE.21. The version is a date.
	 */
	public void setConsentBypassReason  (String strIdentifier,String strText,String strNameOfCodingSystem,
			String strAlternateIdentifier,String strAlternateText,String strNameOfAlternateCodingSystem, String strCodingSystemVersionID, String 				strAlternateCodingSystemVersionId,
			String strOriginalText, String  strSecondAlternateIdentifier, String strSecondAlternateText, 
			String strNameofSecondAlternateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, String strValueSetOID,
			String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID, String strAlternateValueSetVersionID,
			String  strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID, String strSecondAlternateValueSetVersionID)
	{
		CWE cwe  = (CWE)getDataElement(1795);
		cwe.setIdentifier(strIdentifier);
		cwe.setText(strText);
		cwe.setNameOfCodingSystem(strNameOfCodingSystem);
		cwe.setAlternateIdentifier(strAlternateIdentifier);
		cwe.setAlternateText(strAlternateText);
		cwe.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		cwe.setCodingSystemVersionID(strCodingSystemVersionID);
		cwe.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		cwe.setOriginalText(strOriginalText);
		cwe.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cwe.setSecondAlternateText(strSecondAlternateText);
		cwe.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		cwe.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cwe.setCodingSystemOID(strCodingSystemOID);
		cwe.setValueSetOID(strValueSetOID);
		cwe.setValueSetVersionID(strValueSetVersionID);
		cwe.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cwe.setAlternateValueSetOID(strAlternateValueSetOID);
		cwe.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cwe.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cwe.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cwe.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setConsentBypassReason(cwe);
	} 

	/**
	 * Set the Consent Bypass Reason.
	 * This field identifies why the subject's consent was not sought.
	 * @param objConsentBypassReason Object of Consent Bypass Reason.
	 */ 
	public void setConsentBypassReason (CWE objConsentBypassReason)
	{
		setDataType(1795,objConsentBypassReason);
	}
	
	/**
	 * Set the Consent Disclosure Level
	 * This field identifies whether additional educational or reference material was provided to the subject as part of the consent process.
	 * @param strConsentDisclosureLevel Specifies Consent Disclosure Level.
	 */ 
	public void setConsentDisclosureLevel (String strConsentDisclosureLevel)
	{
		ID consentDisclosureLevel  = (ID)getDataElement(1796);
		consentDisclosureLevel.setValue(strConsentDisclosureLevel); 
		setConsentDisclosureLevel(consentDisclosureLevel);

	} 

	/** 
	 * Set the Consent Disclosure Level.
	 * This field identifies whether additional educational or reference material was provided to the subject as part of the consent process.
	 * @param objConsentDisclosureLevel specifies Consent Disclosure Level.
	 */ 
	public void setConsentDisclosureLevel(ID objConsentDisclosureLevel)
	{
		setDataType(1796,objConsentDisclosureLevel);

	}
	
	/**
	 * Set the Consent Non-disclosure Reason.
	 * This field identifies why the subject did not receive full disclosure.
	 * @param strIdentifier Specifies of characters (the code) that uniquely identifies the item being referenced. 
	 * @param strText Specifies The descriptive or textual name of the identifier, e.g., myocardial infarction. 
	 * @param strNameOfCodingSystem Identifies the coding scheme being used in the identifier component.
	 * @param strAlternateIdentifier Specifies an alternate sequence of characters (the code) that uniquely identifies the item being referenced.
	 * @param strAlternateText Specifies the descriptive or textual name of the alternate identifier. See usage note in section introduction.
	 * @param strNameOfAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component. 
	 * @param strCodingSystemVersionID A sequence of characters that uniquely identifies a second alternate code.
	 * @param strAlternateCodingSystemVersionId This component carries the version for the coding system identified by components 4-6.
	 * @param strOriginalText The text as seen and/or selected by the user who entered the data.
	 * @param strSecondAlternateIdentifier A sequence of characters that uniquely identifies a second alternate code.
	 * @param strSecondAlternateText The descriptive or textual name of the alternate identifier.
	 * @param strNameofSecondAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component.
	 * @param strSecondAlternateCodingSystemVersionID This component carries the version for the coding system identified by components 10-12.
	 * @param strCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.3.
	 * @param strValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.1 is obtained.
	 * @param strValueSetVersionID This component carries the version for the value set identified by CWE.15. The version is a date. The date is the date/time that the value set being used was published.
	 * @param strAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.6.
	 * @param strAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.4 is obtained.
	 * @param strAlternateValueSetVersionID This component carries the version for the value set identified by CWE.18. The version is a date.
	 * @param strSecondAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.12.
	 * @param strSecondAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.10 is obtained.
	 * @param strSecondAlternateValueSetVersionID This component carries the version for the value set identified by CWE.21. The version is a date.
	 */
	public void setConsentNondisclosureReason  (String strIdentifier,String strText,String strNameOfCodingSystem,
			String strAlternateIdentifier,String strAlternateText,String strNameOfAlternateCodingSystem, String strCodingSystemVersionID, String 				strAlternateCodingSystemVersionId,
			String strOriginalText, String  strSecondAlternateIdentifier, String strSecondAlternateText, 
			String strNameofSecondAlternateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, String strValueSetOID,
			String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID, String strAlternateValueSetVersionID,
			String  strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID, String strSecondAlternateValueSetVersionID)
	{
		CWE cwe  = (CWE)getDataElement(1797);
		cwe.setIdentifier(strIdentifier);
		cwe.setText(strText);
		cwe.setNameOfCodingSystem(strNameOfCodingSystem);
		cwe.setAlternateIdentifier(strAlternateIdentifier);
		cwe.setAlternateText(strAlternateText);
		cwe.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		cwe.setCodingSystemVersionID(strCodingSystemVersionID);
		cwe.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		cwe.setOriginalText(strOriginalText);
		cwe.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cwe.setSecondAlternateText(strSecondAlternateText);
		cwe.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		cwe.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cwe.setCodingSystemOID(strCodingSystemOID);
		cwe.setValueSetOID(strValueSetOID);
		cwe.setValueSetVersionID(strValueSetVersionID);
		cwe.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cwe.setAlternateValueSetOID(strAlternateValueSetOID);
		cwe.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cwe.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cwe.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cwe.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setConsentNondisclosureReason(cwe);
	} 

	/**
	 * Set the Consent Non-disclosure Reason.
	 * This field identifies why the subject did not receive full disclosure.
	 * @param objConsentNondisclosureReason Object of Consent Non-disclosure Reason.
	 */ 
	public void setConsentNondisclosureReason (CWE objConsentNondisclosureReason)
	{
		setDataType(1797,objConsentNondisclosureReason);
	}
	
	/**
	 * Set the Non-subject Consenter Reason.
	 * This field identifies why consent was granted by a person other than the subject of the consent.
	 * @param strIdentifier Specifies of characters (the code) that uniquely identifies the item being referenced. 
	 * @param strText Specifies The descriptive or textual name of the identifier, e.g., myocardial infarction. 
	 * @param strNameOfCodingSystem Identifies the coding scheme being used in the identifier component.
	 * @param strAlternateIdentifier Specifies an alternate sequence of characters (the code) that uniquely identifies the item being referenced.
	 * @param strAlternateText Specifies the descriptive or textual name of the alternate identifier. See usage note in section introduction.
	 * @param strNameOfAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component. 
	 * @param strCodingSystemVersionID A sequence of characters that uniquely identifies a second alternate code.
	 * @param strAlternateCodingSystemVersionId This component carries the version for the coding system identified by components 4-6.
	 * @param strOriginalText The text as seen and/or selected by the user who entered the data.
	 * @param strSecondAlternateIdentifier A sequence of characters that uniquely identifies a second alternate code.
	 * @param strSecondAlternateText The descriptive or textual name of the alternate identifier.
	 * @param strNameofSecondAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component.
	 * @param strSecondAlternateCodingSystemVersionID This component carries the version for the coding system identified by components 10-12.
	 * @param strCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.3.
	 * @param strValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.1 is obtained.
	 * @param strValueSetVersionID This component carries the version for the value set identified by CWE.15. The version is a date. The date is the date/time that the value set being used was published.
	 * @param strAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.6.
	 * @param strAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.4 is obtained.
	 * @param strAlternateValueSetVersionID This component carries the version for the value set identified by CWE.18. The version is a date.
	 * @param strSecondAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.12.
	 * @param strSecondAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.10 is obtained.
	 * @param strSecondAlternateValueSetVersionID This component carries the version for the value set identified by CWE.21. The version is a date.
	 */
	public void setNonsubjectConsenterReason  (String strIdentifier,String strText,String strNameOfCodingSystem,
			String strAlternateIdentifier,String strAlternateText,String strNameOfAlternateCodingSystem, String strCodingSystemVersionID, String 				strAlternateCodingSystemVersionId,
			String strOriginalText, String  strSecondAlternateIdentifier, String strSecondAlternateText, 
			String strNameofSecondAlternateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, String strValueSetOID,
			String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID, String strAlternateValueSetVersionID,
			String  strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID, String strSecondAlternateValueSetVersionID)
	{
		CWE cwe  = (CWE)getDataElement(1798);
		cwe.setIdentifier(strIdentifier);
		cwe.setText(strText);
		cwe.setNameOfCodingSystem(strNameOfCodingSystem);
		cwe.setAlternateIdentifier(strAlternateIdentifier);
		cwe.setAlternateText(strAlternateText);
		cwe.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		cwe.setCodingSystemVersionID(strCodingSystemVersionID);
		cwe.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		cwe.setOriginalText(strOriginalText);
		cwe.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cwe.setSecondAlternateText(strSecondAlternateText);
		cwe.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		cwe.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cwe.setCodingSystemOID(strCodingSystemOID);
		cwe.setValueSetOID(strValueSetOID);
		cwe.setValueSetVersionID(strValueSetVersionID);
		cwe.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cwe.setAlternateValueSetOID(strAlternateValueSetOID);
		cwe.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cwe.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cwe.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cwe.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setNonsubjectConsenterReason(cwe);
	} 

	/**
	 * Set the Non-subject Consenter Reason.
	 * This field identifies why consent was granted by a person other than the subject of the consent.
	 * @param objNonsubjectConsenterReason Object of Non-subject Consenter Reason.
	 */ 
	public void setNonsubjectConsenterReason (CWE objNonsubjectConsenterReason)
	{
		setDataType(1798,objNonsubjectConsenterReason);
	}
	
	/**
	 * Set the Consenter ID.
	 * This field identifies the individual(s) who is (are) consenting.
	 * @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 addConsenterID (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(1909);
		xpn.setFamilyName(objFamilyName);
		xpn.setGivenName(strGivenName);
		xpn.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		xpn.setSuffix(strSuffix);
		xpn.setPrefix(strPrefix);
//		xpn.setDegree(strDegree);
		xpn.setNameTypeCode(strNameTypeCode);
		xpn.setNameRepresentationCode(strNameRepresentationCode);
		xpn.setNameContext(objNameContext);
//		xpn.setNameValidityRange(objNameValidityRange);
		xpn.setNameAssemblyOrder(strNameAssemblyOrder);
		xpn.setEffectiveDate(objEffectiveDate);
		xpn.setExpirationDate(objExpirationDate);
		xpn.setProfessionalSuffix(strProfessionalSuffix); 
		xpn.setCalledBy(strCalledBy);
		addConsenterID(xpn);

	} 
	
	/** 
	 * Set the Consenter ID.
	 * This field identifies the individual(s) who is (are) consenting.
	 * @param objConsenterID Specifies Consenter ID
	 */ 
	public void addConsenterID(XPN objConsenterID)
	{
		addDataType(1909,objConsenterID);

	}

	/**
	 * Set the Consenter ID.
	 * This field identifies the individual(s) who is (are) consenting.
	 * @param objConsenterIDList List of Consenter ID
	 */	
	@SuppressWarnings("unchecked")
	public void setConsenterID(ISingleCollection<XPN> objConsenterIDList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objConsenterIDList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1909,objCollection);
	}
	
	/**
	 * Set the Relationship To Subject.
	 * This field identifies the relationship of the consenter to the subject.
	 * @param strIdentifier Specifies of characters (the code) that uniquely identifies the item being referenced. 
	 * @param strText Specifies The descriptive or textual name of the identifier, e.g., myocardial infarction. 
	 * @param strNameOfCodingSystem Identifies the coding scheme being used in the identifier component.
	 * @param strAlternateIdentifier Specifies an alternate sequence of characters (the code) that uniquely identifies the item being referenced.
	 * @param strAlternateText Specifies the descriptive or textual name of the alternate identifier. See usage note in section introduction.
	 * @param strNameOfAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component. 
	 * @param strCodingSystemVersionID A sequence of characters that uniquely identifies a second alternate code.
	 * @param strAlternateCodingSystemVersionId This component carries the version for the coding system identified by components 4-6.
	 * @param strOriginalText The text as seen and/or selected by the user who entered the data.
	 * @param strSecondAlternateIdentifier A sequence of characters that uniquely identifies a second alternate code.
	 * @param strSecondAlternateText The descriptive or textual name of the alternate identifier.
	 * @param strNameofSecondAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component.
	 * @param strSecondAlternateCodingSystemVersionID This component carries the version for the coding system identified by components 10-12.
	 * @param strCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.3.
	 * @param strValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.1 is obtained.
	 * @param strValueSetVersionID This component carries the version for the value set identified by CWE.15. The version is a date. The date is the date/time that the value set being used was published.
	 * @param strAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.6.
	 * @param strAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.4 is obtained.
	 * @param strAlternateValueSetVersionID This component carries the version for the value set identified by CWE.18. The version is a date.
	 * @param strSecondAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.12.
	 * @param strSecondAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.10 is obtained.
	 * @param strSecondAlternateValueSetVersionID This component carries the version for the value set identified by CWE.21. The version is a date.
	 */ 
	public void addRelationshipToSubject (String strIdentifier,String strText,String strNameOfCodingSystem,
			String strAlternateIdentifier,String strAlternateText,String strNameOfAlternateCodingSystem, String strCodingSystemVersionID, String 				strAlternateCodingSystemVersionId,
			String strOriginalText, String  strSecondAlternateIdentifier, String strSecondAlternateText, 
			String strNameofSecondAlternateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, String strValueSetOID,
			String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID, String strAlternateValueSetVersionID,
			String strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID, String strSecondAlternateValueSetVersionID) 
	{

		CWE cwe  = (CWE)getDataElement(1898);
		cwe.setIdentifier(strIdentifier);
		cwe.setText(strText);
		cwe.setNameOfCodingSystem(strNameOfCodingSystem);
		cwe.setAlternateIdentifier(strAlternateIdentifier);
		cwe.setAlternateText(strAlternateText);
		cwe.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		cwe.setCodingSystemVersionID(strCodingSystemVersionID);
		cwe.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		cwe.setOriginalText(strOriginalText);
		cwe.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cwe.setSecondAlternateText(strSecondAlternateText);
		cwe.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		cwe.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cwe.setCodingSystemOID(strCodingSystemOID);
		cwe.setValueSetOID(strValueSetOID);
		cwe.setValueSetVersionID(strValueSetVersionID);
		cwe.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cwe.setAlternateValueSetOID(strAlternateValueSetOID);
		cwe.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cwe.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cwe.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cwe.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);		 
		addRelationshipToSubject(cwe);

	} 

	/** 
	 * Set the Relationship To Subject.
	 * This field identifies the relationship of the consenter to the subject.
	 * @param objRelationshipToSubject Specifies Relationship To Subject
	 */ 
	public void addRelationshipToSubject(CWE objRelationshipToSubject)
	{
		addDataType(1898,objRelationshipToSubject);

	}

	/**
	 * Set the Relationship To Subject.
	 * This field identifies the relationship of the consenter to the subject.
	 * @param objRelationshipToSubjectList List of Relationship To Subject
	 */	
	@SuppressWarnings("unchecked")
	public void setRelationshipToSubject(ISingleCollection<CWE> objRelationshipToSubjectList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objRelationshipToSubjectList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1898,objCollection);
	}
		
	/**
	 * Validates HL7 Message objects .
	 * Validate method checks for validation each and every segments in side the Message object against specified message Structure. 
	 * Validation checks include optionality of segment or group.
	 * It also verifies the number of times segment or group is repeated in message.
	 * e.g 
	 * {PSH} while parsing PSH segment validate method will check for its mandatory presence.
	 * [PSH] in this case validate will throw exception if one tries to enter more than one PSH segment.
	 * @return boolean - true or false.
	 * @throws InvalidSegmentException Thrown when Segment Validation Fails.
	 */
	@Override
	public boolean validate() throws InvalidSegmentException 
	{
		/*
		 * Set ID - CON,Consent Status,Consenter ID,Relationship to Subject Table are required fields.
		 */
		try 
		{
			super.validate();

			return true;
		}
		catch(FieldMissingException ex)
		{
			throw new InvalidSegmentException(enumSegments.getValue(),ex);
		}
	}
}