/*******************************************************************************
 *  Copyright 2017 Center 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.CP;
import cdac.medinfo.sdk.hl7282.baselibs.CWE;
import cdac.medinfo.sdk.hl7282.baselibs.CX;
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.MO;
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.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;

/**
 * IVC - Invoice Segment
 * <p>Represents an HL7 IVC message segment.
 * This segment has the following fields:</p><p>
 * IVC-1   Provider Invoice Number   (EI)<b>Required</b><br>  
 * IVC-2   Payer Invoice Number   (EI) <b>Optional</b><br>
 * IVC-3   Contract/Agreement Number   (EI) <b>Optional</b><br>
 * IVC-4   Invoice Control   (CWE)  <b>Required</b><br>  
 * IVC-5   Invoice Reason   (CWE) <b>Required</b><br>  
 * IVC-6   Invoice Type   (CWE) <b>Required</b><br>  
 * IVC-7   Invoice Date/Time   (DTM) <b>Required</b><br>  
 * IVC-8   Invoice Amount   (CP) <b>Required</b><br>  
 * IVC-9   Payment Terms   (ST) <b>Optional</b><br> 
 * IVC-10   Provider Organization   (XON)  <b>Required</b><br>  
 * IVC-11   Payer Organization   (XON)  <b>Required</b><br>  
 * IVC-12   Attention   (XCN)  <b>Optional</b><br> 
 * IVC-13   Last Invoice Indicator   (ID) <b>Optional</b><br> 
 * IVC-14   Invoice Booking Period   (DTM)<b>Optional</b><br> 
 * IVC-15   Origin   (ST)  <b>Optional</b><br> 
 * IVC-16   Invoice Fixed Amount   (CP) <b>Optional</b><br> 
 * IVC-17   Special Costs    (CP) <b>Optional</b><br> 
 * IVC-18   Amount for Doctors Treatment   (CP) <b>Optional</b><br> 
 * IVC-19   Responsible Physician   (XCN)  <b>Optional</b><br> 
 * IVC-20   Cost Center   (CX)  <b>Optional</b><br> 
 * IVC-21   Invoice Prepaid Amount   (CP)  <b>Optional</b><br> 
 * IVC-22   Total Invoice Amount without Prepaid Amount  (CP) <b>Optional</b><br> 
 * IVC-23   Total-Amount of VAT   (CP)  <b>Conditional</b><br>
 * IVC-24   VAT-Rates applied   (NM)  <b>Optional</b><br> 
 * IVC-25   Benefit group  (CWE)  <b>Required</b><br> 
 * IVC-26   Provider Tax ID   (ST)   <b>Optional</b><br> 
 * IVC-27   Payer Tax ID   (ST)   <b>Optional</b><br> 
 * IVC-28   Provider Tax Status   (CWE)  <b>Optional</b><br> 
 * IVC-29   Payer Tax Status   (CWE)  <b>Optional</b><br> 
 * IVC-30   Sales Tax ID   (ST)   <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 IVC extends Segment{

	/**
	 * Constructs the IVC segment.
	 */
	public IVC()
	{
		super(EnumSegments.HL7_SEG_IVC);
	}
	
	/**
	 * Retrieve Provider Invoice Number   (EI)
	 * This Field is Unique Invoice Number assigned by the Provider Application.
	 * @return EI - object of provider invoice number.
	 */
	public EI getProviderInvoiceNumber()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1914);
		if(objDataCollection != null) 
			return (EI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Provider Invoice Number   (EI)
	 * This Field is Unique Invoice Number assigned by the Provider Application.
	 * @param strEntityIdentifier - string of character use to identify the entity.
	 * @param strNamespaceID - Use to identify the name space id..
	 * @param strUniversalID - Use to identify the name space identity.
	 * @param strUniversalIDType - String of characters describe Universal Id Type.
	 */
	public void setProviderInvoiceNumber(String strEntityIdentifier,String strNamespaceID,String strUniversalID,String strUniversalIDType)
	{
		EI objProviderInvoiceNumber = (EI)getDataElement(1914);
		objProviderInvoiceNumber.setEntityIdentifier(strEntityIdentifier);
		objProviderInvoiceNumber.setNamespaceId(strNamespaceID);
		objProviderInvoiceNumber.setUniversalId(strUniversalID);
		objProviderInvoiceNumber.setUniversalIdType(strUniversalIDType);
		setProviderInvoiceNumber(objProviderInvoiceNumber);
	}
	
	/**
	 * Set Provider Invoice Number   (EI)
	 * This Field is Unique Invoice Number assigned by the Provider Application.
	 * @param EI - object of provider invoice number.
	 */
	public void setProviderInvoiceNumber(EI objProviderInvoiceNumber)
	{
		setDataType(1914, objProviderInvoiceNumber);
	}
	
	/**
	 * Retrieve Payer Invoice Number   (EI)
	 * This field is about Unique Invoice Number assigned by the Payer Application.
	 * @return EI - object of Payer invoice number.
	 */
	public EI getPayerInvoiceNumber()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1915);
		if(objDataCollection != null) 
			return (EI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Payer Invoice Number   (EI)
	 * This Field is Unique Invoice Number assigned by the Payer Application.
	 * @param strEntityIdentifier - string of character use to identify the entity.
	 * @param strNamespaceID - Use to identify the name space id..
	 * @param strUniversalID - Use to identify the name space identity.
	 * @param strUniversalIDType - String of characters describe Universal Id Type.
	 */
	public void setPayerInvoiceNumber(String strEntityIdentifier,String strNamespaceID,String strUniversalID,String strUniversalIDType)
	{
		EI objPayerInvoiceNumber = (EI)getDataElement(1915);
		objPayerInvoiceNumber.setEntityIdentifier(strEntityIdentifier);
		objPayerInvoiceNumber.setNamespaceId(strNamespaceID);
		objPayerInvoiceNumber.setUniversalId(strUniversalID);
		objPayerInvoiceNumber.setUniversalIdType(strUniversalIDType);
		setPayerInvoiceNumber(objPayerInvoiceNumber);
	}
	
	/**
	 * Set Provider Invoice Number   (EI)
	 * This Field is Unique Invoice Number assigned by the Payer Application.
	 * @param EI - object of payer invoice number.
	 */
	public void setPayerInvoiceNumber(EI objPayerInvoiceNumber)
	{
		setDataType(1915, objPayerInvoiceNumber);
	}
	
	/**
	 * Retrieve Contract/Agreement Number   (EI)   
	 * This field defines about Contract/agreement number issued by Payer which must be specified in some circumstances by the Provider.
	 * @return EI - object of Contact or Agreement Number
	 */
	public EI getContractOrAgreementNumber()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1916);
		if(objDataCollection != null) 
			return (EI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Contract/Agreement Number   (EI)   
	 * This field defines about Contract/agreement number issued by Payer which must be specified in some circumstances by the Provider.
	 * @param strEntityIdentifier - string of character use to identify the entity.
	 * @param strNamespaceID - Use to identify the name space id..
	 * @param strUniversalID - Use to identify the name space identity.
	 * @param strUniversalIDType - String of characters describe Universal Id Type.
	 */
	public void setContractOrAgreementNumber(String strEntityIdentifier,String strNamespaceID,String strUniversalID,String strUniversalIDType)
	{
		EI objContractOrAgreementNumber = (EI)getDataElement(1916);
		objContractOrAgreementNumber.setEntityIdentifier(strEntityIdentifier);
		objContractOrAgreementNumber.setNamespaceId(strNamespaceID);
		objContractOrAgreementNumber.setUniversalId(strUniversalID);
		objContractOrAgreementNumber.setUniversalIdType(strUniversalIDType);
		setContractOrAgreementNumber(objContractOrAgreementNumber);
	}
	
	/**
	 * Set Contract/Agreement Number   (EI)   
	 * This field defines about Contract/agreement number issued by Payer which must be specified in some circumstances by the Provider.
	 * @param objContractOrAgreementNumber -object of Contract Or Agreement Number.
	 */
	public void setContractOrAgreementNumber(EI objContractOrAgreementNumber)
	{
		setDataType(1916, objContractOrAgreementNumber);
	}
	
	/**
	 * Retrieve Invoice Control   (CWE)  
	 * This field is to explain about Code describing reason for this Invoice.
	 * @return CWE - object of Invoice Reason.
	 */
	public CWE getInvoiceControl()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1917);
		if(objDataCollection != null) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	/**
	 * Set Invoice Control   (CWE)  
	 * This field is to explain about Code describing reason for this Invoice
	 * @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 infection. 
	 * @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 setInvoiceControl(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 objInvoiceControl  = (CWE)getDataElement(1917);
		objInvoiceControl.setIdentifier(strIdentifier);
		objInvoiceControl.setText(strText);
		objInvoiceControl.setNameOfCodingSystem(strNameOfCodingSystem);
		objInvoiceControl.setAlternateIdentifier(strAlternateIdentifier);
		objInvoiceControl.setAlternateText(strAlternateText);
		objInvoiceControl.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objInvoiceControl.setCodingSystemVersionID(strCodingSystemVersionID);
		objInvoiceControl.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objInvoiceControl.setOriginalText(strOriginalText);
		objInvoiceControl.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objInvoiceControl.setSecondAlternateText(strSecondAlternateText);
		objInvoiceControl.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objInvoiceControl.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objInvoiceControl.setCodingSystemOID(strCodingSystemOID);
		objInvoiceControl.setValueSetOID(strValueSetOID);
		objInvoiceControl.setValueSetVersionID(strValueSetVersionID);
		objInvoiceControl.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objInvoiceControl.setAlternateValueSetOID(strAlternateValueSetOID);
		objInvoiceControl.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objInvoiceControl.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objInvoiceControl.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objInvoiceControl.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		setInvoiceControl(objInvoiceControl);
	}
	
	/**
	 * Set Invoice Control   (CWE)  
	 * This field is to explain about Code indicating what action is being performed by this message.
	 * @param objInvoiceControl - object of Invoice control.
	 */
	public void setInvoiceControl(CWE objInvoiceControl)
	{
		setDataType(1917, objInvoiceControl);
	}
	
	/**
	 * Retrieve Invoice Reason   (CWE)  
	 * This field is to explain about Code describing reason for this Invoice.
	 * @return CWE - object of Invoice Reason.
	 */
	public CWE getInvoiceReason()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1918);
		if(objDataCollection != null) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	/**
	 * Set Invoice Reason   (CWE)  
	 * This field is to explain about Code describing reason for this Invoice.
	 * @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 setInvoiceReason(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 objInvoiceReason  = (CWE)getDataElement(1918);
		objInvoiceReason.setIdentifier(strIdentifier);
		objInvoiceReason.setText(strText);
		objInvoiceReason.setNameOfCodingSystem(strNameOfCodingSystem);
		objInvoiceReason.setAlternateIdentifier(strAlternateIdentifier);
		objInvoiceReason.setAlternateText(strAlternateText);
		objInvoiceReason.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objInvoiceReason.setCodingSystemVersionID(strCodingSystemVersionID);
		objInvoiceReason.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objInvoiceReason.setOriginalText(strOriginalText);
		objInvoiceReason.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objInvoiceReason.setSecondAlternateText(strSecondAlternateText);
		objInvoiceReason.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objInvoiceReason.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objInvoiceReason.setCodingSystemOID(strCodingSystemOID);
		objInvoiceReason.setValueSetOID(strValueSetOID);
		objInvoiceReason.setValueSetVersionID(strValueSetVersionID);
		objInvoiceReason.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objInvoiceReason.setAlternateValueSetOID(strAlternateValueSetOID);
		objInvoiceReason.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objInvoiceReason.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objInvoiceReason.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objInvoiceReason.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		setInvoiceReason(objInvoiceReason);
	}
	
	/**
	 * Set Invoice Reason   (CWE)  
	 * This field is to explain about Code describing reason for this Invoice.
	 * @param objInvoiceReason - object of Invoice reason.
	 */
	public void setInvoiceReason(CWE objInvoiceReason)
	{
		setDataType(1918, objInvoiceReason);
	}
	
	/**
	 * Retrieve Invoice Type   (CWE)  
	 * This field is to explain about Code indicating the type of Invoice.
	 * @return CWE - object of Invoice Type.
	 */
	public CWE getInvoiceType()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1919);
		if(objDataCollection != null) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	/**
	 * Set Invoice Type   (CWE)  
	 * This field is to explain about Code indicating the type of Invoice.
	 * @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 setInvoiceType(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 objInvoiceType  = (CWE)getDataElement(1919);
		objInvoiceType.setIdentifier(strIdentifier);
		objInvoiceType.setText(strText);
		objInvoiceType.setNameOfCodingSystem(strNameOfCodingSystem);
		objInvoiceType.setAlternateIdentifier(strAlternateIdentifier);
		objInvoiceType.setAlternateText(strAlternateText);
		objInvoiceType.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objInvoiceType.setCodingSystemVersionID(strCodingSystemVersionID);
		objInvoiceType.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objInvoiceType.setOriginalText(strOriginalText);
		objInvoiceType.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objInvoiceType.setSecondAlternateText(strSecondAlternateText);
		objInvoiceType.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objInvoiceType.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objInvoiceType.setCodingSystemOID(strCodingSystemOID);
		objInvoiceType.setValueSetOID(strValueSetOID);
		objInvoiceType.setValueSetVersionID(strValueSetVersionID);
		objInvoiceType.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objInvoiceType.setAlternateValueSetOID(strAlternateValueSetOID);
		objInvoiceType.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objInvoiceType.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objInvoiceType.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objInvoiceType.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		setInvoiceType(objInvoiceType);
	}
	
	/**
	 * Set Invoice Type   (CWE)  
	 * This field is to explain about Code indicating the type of Invoice.
	 * @param objInvoiceType - object of Invoice Type.
	 */
	public void setInvoiceType(CWE objInvoiceType)
	{
		setDataType(1919, objInvoiceType);
	}
	
	/**
	 * Retrieve Invoice Date/Time   (DTM)   
	 * This field tells about Date Invoice was created.
	 * @return DTM - object of Invoice Date Or time.
	 */
	public DTM getInvoiceDateOrTime()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1920);
		if(objDataCollection != null) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Invoice Date Or Time (DTM)
	 * This field tells about Date Invoice was created.
	 * @param String - String of characters tell about the Date of Invoice.
	 */
	public void setInvoiceDateOrTime(String strInvoiceDateOrTime)
	{
		DTM objInvoiceDateOrTime = (DTM)getDataElement(1920);
		objInvoiceDateOrTime.setValue(strInvoiceDateOrTime);
		setInvoiceDateOrTime(objInvoiceDateOrTime);
	}
	/**
	 * Set Invoice Date Or Time (DTM)
	 * This field tells about Date Invoice was created.
	 * @param DTM - Object of characters tell about the Date of Invoice.
	 */
	public void setInvoiceDateOrTime(DTM objInvoiceDateOrTime)
	{
		setDataType(1920, objInvoiceDateOrTime);
	}
	
	/**
	 * Retrieve Invoice Amount   (CP)   
	 * This field is all about Sum total of Product/Service Billed Amount on PSL for all Product/Service Line Items for this Invoice.
	 * @return CP - object of Invoice Amount.
	 */
	public CP getInvoiceAmount()
	{

		ISingleCollection<IDataType> objDataCollection =getDataType(1921);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieve Invoice Amount   (CP)   
	 * This field is all about Sum total of Product/Service Billed Amount on PSL for all Product/Service Line Items for this Invoice.
	 * @param objPrice - Gives information about the Price.
	 * @param strPriceType - Gives information about Type of Price.
	 * @param strFormValue - Gives information about Form Value.
	 * @param strToValue - Tell about the To value.
	 * @param objRangeUnits - Specifies about the range of the units.
	 * @param strRangeType - Specifies obut the Type of range.
	 */
	public void setInvoiceAmount(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objInvoiceAmount = (CP)getDataElement(1921);
		objInvoiceAmount.setPrice(objPrice);
		objInvoiceAmount.setPriceType(strPriceType);
		objInvoiceAmount.setFromValue(strFormValue);
		objInvoiceAmount.setToValue(strToValue);
		objInvoiceAmount.setRangeType(strRangeType);
		objInvoiceAmount.setRangeUnits(objRangeUnits);
		setInvoiceAmount(objInvoiceAmount);
	}
	
	/**
	 * Retrieve Invoice Amount   (CP)   
	 * This field is all about Sum total of Product/Service Billed Amount on PSL for all Product/Service Line Items for this Invoice.
	 * @param objInvoiceAmount - Gives information about the object of invoice amount.
	 */ 
	public void setInvoiceAmount(CP objInvoiceAmount)
	{
		setDataType(1921, objInvoiceAmount);
	}
	
	/**
	 * Retrieve  Payment Terms   (ST)
	 * This field is about Terms for Payer payment of Invoice 
	 * @return ST - object of the Payment Term.
	 */
	public ST getPaymentTerms()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1922);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set  Payment Terms   (ST)
	 * This field is about Terms for Payer payment of Invoice.
	 * @param String - String of Character contain information about the payment terms. 
	 */
	public void setPaymentTerms(String strPaymentTerms)
	{
		ST objPaymentTerms = (ST)getDataElement(1922);
		objPaymentTerms.setValue(strPaymentTerms);
		setPaymentTerms(objPaymentTerms);
	}
	
	/**
	 * Set  Payment Terms   (ST)
	 * This field is about Terms for Payer payment of Invoice.
	 * @param ST - object which contain information about the payment terms. 
	 */
	public void setPaymentTerms(ST objPaymentTerms)
	{
		setDataType(1922, objPaymentTerms);
	}
	
	/**
	 * Retrieve Provider Organization   (XON)
	 * Business organization that is responsible for the invoice.
	 * @return XON - object for the provider organization.
	 */
	public XON getProviderOrganization()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1923);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XON)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Provider Organization (XON)
	 * Business organization that is responsible for the invoice.
	 * @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.8.2.
	 */
	public void setProviderOrganization(String strOrganizationName, CWE objOrganizationNameTypeCode,HD objAssigningAuthority,String strIdentifierTypeCode,
			HD objAssigningFacility, String strNameRepresentationCode,String strOrganizationIdentifier)
	{
		XON ProviderOrganization  = (XON)getDataElement(1923);
		ProviderOrganization.setOrganizationName(strOrganizationName);
		ProviderOrganization.setOrganizationNameTypeCode(objOrganizationNameTypeCode);
		ProviderOrganization.setAssigningAuthority(objAssigningAuthority);
		ProviderOrganization.setIdentifierTypeCode(strIdentifierTypeCode);
		ProviderOrganization.setAssigningFacility(objAssigningFacility);
		ProviderOrganization.setNameRepresentationCode(strNameRepresentationCode);
		ProviderOrganization.setOrganizationIdentifier(strOrganizationIdentifier); 
		setProviderOrganization(ProviderOrganization);
	}
	
	/**
	 * Set Provider Organization (XON)
	 * Business organization that is responsible for the invoice.
	 * @param XON - object of Provider Organization.
	 */ 
	public void setProviderOrganization(XON objProviderOrganization)
	{
		setDataType(1923, objProviderOrganization);
	}
	
	/**
	 * Retrieve Payer Organization   (XON)
	 * The business organization that is designated as Payer for this Invoice. This Payer may be the primary, secondary, tertiary Payer, depending on Insurance 
	 * Information specified in the Invoice.
	 * @return XON - object for the payer organization.
	 */
	public XON getPayerOrganization()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1924);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XON)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Payer Organization (XON)
	 * The business organization that is designated as Payer for this Invoice. This Payer may be the primary, secondary, tertiary Payer, depending on 
	 * Insurance Information specified in the Invoice.
	 * @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.8.2.
	 */
	public void setPayerOrganization(String strOrganizationName, CWE objOrganizationNameTypeCode,HD objAssigningAuthority,String strIdentifierTypeCode,
			HD objAssigningFacility, String strNameRepresentationCode,String strOrganizationIdentifier)
	{
		XON PayerOrganization  = (XON)getDataElement(1924);
		PayerOrganization.setOrganizationName(strOrganizationName);
		PayerOrganization.setOrganizationNameTypeCode(objOrganizationNameTypeCode);
		PayerOrganization.setAssigningAuthority(objAssigningAuthority);
		PayerOrganization.setIdentifierTypeCode(strIdentifierTypeCode);
		PayerOrganization.setAssigningFacility(objAssigningFacility);
		PayerOrganization.setNameRepresentationCode(strNameRepresentationCode);
		PayerOrganization.setOrganizationIdentifier(strOrganizationIdentifier); 
		setPayerOrganization(PayerOrganization);
	}
	
	/**
	 * Set Payer Organization (XON)
	 * The business organization that is designated as Payer for this Invoice. This Payer may be the primary, secondary, tertiary Payer, depending on 
	 * Insurance Information specified in the Invoice.
	 * @param XON - object of Payer Organization.
	 */ 
	public void setPayerOrganization(XON objPayerOrganization)
	{
		setDataType(1924, objPayerOrganization);
	}
	
	/**
	 * Retrieve Attention   (XCN)   
	 * This field is about Attention to individual in Payer Organization who needs to review this Invoice.
	 * @return XCN - object of Attention.
	 */
	public XCN getAttention()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1925);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XCN)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Attention (XCN)
	 * This field is about Attention to individual in Payer Organization who needs to review this Invoice.
	 * @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 setAttention(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 objAttention = (XCN)getDataElement(1925);
		objAttention.setIdNumber(strIDNumber);
		objAttention.setFamilyName(objFamilyName);
		objAttention.setGivenName(strGivenName);
		objAttention.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		objAttention.setSuffix(strSuffix);
		objAttention.setPrefix(strPrefix);
		objAttention.setSourceTable(objSourceTable);
		objAttention.setAssigningAuthority(objAssigningAuthority);
		objAttention.setNameTypeCode(strNameTypeCode);
		objAttention.setIdentifierCheckDigit(strIdentifierCheckDigit);
		objAttention.setCheckDigitScheme(strCheckDigitScheme);
		objAttention.setIdentifierTypeCode(strIdentifierTypeCode);
		objAttention.setAssigningFacility(objAssigningFacility);
		objAttention.setNameRepresentationCode(strNameRepresentationCode);
		objAttention.setNameContext(objNameContext);
		objAttention.setNameAssemblyOrder(strNameAssemblyOrder);
		objAttention.setEffectiveDate(strEffectiveDate);
		objAttention.setExpirationDate(strExpirationDate);
		objAttention.setProfessionalSuffix(strProfessionalSuffix);
		objAttention.setAssigningJurisdiction(objAssigningJurisdiction);
		objAttention.setAssigningAgencyOrDepartment(objAssigningAgencyOrDepratment); 
		objAttention.setSecurityCheck(strSecurityCheck);
		objAttention.setSecurityCheckScheme(strSecurityCheckScheme);
		setAttention(objAttention);
	}
	
	/**
	 * Set Attention (XCN)
	 * This field is about Attention to individual in Payer Organization who needs to review this Invoice.
	 * @param XCN - object of Attention. 
	 */
	public void setAttention(XCN objAttention)
	{
		setDataType(1925, objAttention);
	}
	
	/**
	 * Retrieve Last Invoice Indicator   (ID)   
	 * This field Can be set to indicate that this is the last Invoice for a particular Case, Claim and/or Encounter.
	 * @return ID - object of Invoice for a particular case.
	 */
	public ID getLastInvoiceIndicator()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1926);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Last Invoice Indicator   (ID)   
	 * This field Can be set to indicate that this is the last Invoice for a particular Case, Claim and/or Encounter.
	 * @return String - string of Invoice for a particular case.
	 */
	public void setLastInvoiceIndicator(String strlastInvoiceIndicator)
	{
		ID objLastInvoiceIndicator = (ID)getDataElement(1926);
		objLastInvoiceIndicator.setValue(strlastInvoiceIndicator);
		setLastInvoiceIndicator(objLastInvoiceIndicator);
	}

	/**
	 * Set Last Invoice Indicator   (ID)   
	 * This field Can be set to indicate that this is the last Invoice for a particular Case, Claim and/or Encounter.
	 * @return ID - object of Invoice for a particular case.
	 */
	public void setLastInvoiceIndicator(ID objlastInvoiceIndicator)
	{
		setDataType(1926, objlastInvoiceIndicator);
	}
	
	/**
	 * Retrieve Invoice Booking Period   (DTM)   
	 * This field is about Period in which the invoice must be booked.
	 * @return DTM - object of Invoice booking period.
	 */
	public DTM getInvoiceBookingPeriod()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1927);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Invoice Booking Period   (DTM)   
	 * This field is about Period in which the invoice must be booked.
	 * @return String - string of Invoice booking period.
	 */
	public void setInvoiceBookingPeriod(String strInvoiceBookingPeriod)
	{
		DTM objInvoiceBookingPeriod = (DTM)getDataElement(1927);
		objInvoiceBookingPeriod.setValue(strInvoiceBookingPeriod);
		setInvoiceBookingPeriod(objInvoiceBookingPeriod);
	}
	
	/**
	 * Set Invoice Booking Period   (DTM)   
	 * This field is about Period in which the invoice must be booked.
	 * @return DTM - object of Invoice booking period.
	 */
	public void setInvoiceBookingPeriod(DTM objInvoiceBookingPeriod)
	{
		setDataType(1927, objInvoiceBookingPeriod);
	}
	
	/**
	 * Retrieve Origin (ST)
	 * This field is about Responsible Person for this specific invoice. For more structured output use CTD-Segment instead.
	 * @return ST - object of Origin.
	 */
	public ST getOrigin()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1928);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Origin (ST)
	 * This field is about Responsible Person for this specific invoice. For more structured output use CTD-Segment instead.
	 * @param String - string of Origin.
	 */
	public void setOrigin(String strOrigin)
	{
		ST objOrigin = (ST)getDataElement(1928);
		objOrigin.setValue(strOrigin);
	}
	
	/**
	 * Set Origin (ST)
	 * This field is about Responsible Person for this specific invoice. For more structured output use CTD-Segment instead.
	 * @return ST - object of Origin.
	 */
	public void setOrigin(ST objOrigin)
	{
		setDataType(1928, objOrigin);
	}
	
	/**
	 * Retrieve  Invoice Fixed Amount   (CP)   
	 * This field is about Fixed Amount for this invoice.
	 * @return CP - object of Invoice fixed amount .
	 */
	public CP getInvoiceFixedAmount()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1929);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set  Invoice Fixed Amount   (CP)   
	 * This field is about Fixed Amount for this invoice.
	 * @param objPrice - Gives information about the Price.
	 * @param strPriceType - Gives information about Type of Price.
	 * @param strFormValue - Gives information about Form Value.
	 * @param strToValue - Tell about the To value.
	 * @param objRangeUnits - Specifies about the range of the units.
	 * @param strRangeType - Specifies obut the Type of range.
	 */
	public void setInvoiceFixedAmount(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objInvoiceFixedAmount = (CP)getDataElement(1929);
		objInvoiceFixedAmount.setPrice(objPrice);
		objInvoiceFixedAmount.setPriceType(strPriceType);
		objInvoiceFixedAmount.setFromValue(strFormValue);
		objInvoiceFixedAmount.setToValue(strToValue);
		objInvoiceFixedAmount.setRangeType(strRangeType);
		objInvoiceFixedAmount.setRangeUnits(objRangeUnits);
		objInvoiceFixedAmount.setRangeType(strRangeType);
		setInvoiceFixedAmount(objInvoiceFixedAmount);
	}
	
	/**
	 * Set  Invoice Fixed Amount   (CP)   
	 * This field is about Fixed Amount for this invoice.
	 * @param objInvoiceFixedAmount - object of Invoice Fixed Amount.
	 */
	public void setInvoiceFixedAmount(CP objInvoiceFixedAmount)
	{
		setDataType(1929, objInvoiceFixedAmount);
	}
	
	/**
	 * Retrieve Special Costs    (CP)   
	 * This field tells about Special costs for this invoice.
	 * @return CP - object of Special Costs.
	 */
	public CP getSpecialCosts()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1930);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set  Special costs   (CP)   
	 * This field is about Special costs for this invoice.
	 * @param objPrice - Gives information about the Price.
	 * @param strPriceType - Gives information about Type of Price.
	 * @param strFormValue - Gives information about Form Value.
	 * @param strToValue - Tell about the To value.
	 * @param objRangeUnits - Specifies about the range of the units.
	 * @param strRangeType - Specifies obut the Type of range.
	 */
	public void setSpecialCosts(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objSpecalCosts = (CP)getDataElement(1930);
		objSpecalCosts.setPrice(objPrice);
		objSpecalCosts.setPriceType(strPriceType);
		objSpecalCosts.setFromValue(strFormValue);
		objSpecalCosts.setToValue(strToValue);
		objSpecalCosts.setRangeType(strRangeType);
		objSpecalCosts.setRangeUnits(objRangeUnits);
		objSpecalCosts.setRangeType(strRangeType);
		setSpecialCosts(objSpecalCosts);
	}
	
	/**
	 * Set  Special costs   (CP)   
	 * This field is about Special costs for this invoice.
	 * @param objSpecalCosts - object of Special costs.
	 */
	public void setSpecialCosts(CP objSpecialCosts)
	{
		setDataType(1930, objSpecialCosts);
	}
	
	/**
	 * Retrieve  Amount for Doctors Treatment   (CP)   
	 * This field tells about Special amount for doctor's treatment.
	 * @return CP - object of Special amount for doctor's treatment.
	 */
	public CP getAmountForDoctorsTreatment()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1931);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Amount for Doctors Treatment   (CP)   
	 * This field is about Special amount for doctor's treatment.
	 * @param objPrice - Gives information about the Price.
	 * @param strPriceType - Gives information about Type of Price.
	 * @param strFormValue - Gives information about Form Value.
	 * @param strToValue - Tell about the To value.
	 * @param objRangeUnits - Specifies about the range of the units.
	 * @param strRangeType - Specifies obut the Type of range.
	 */
	public void setAmountForDoctorsTreatment(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objAmountForDoctorsTreatment = (CP)getDataElement(1931);
		objAmountForDoctorsTreatment.setPrice(objPrice);
		objAmountForDoctorsTreatment.setPriceType(strPriceType);
		objAmountForDoctorsTreatment.setFromValue(strFormValue);
		objAmountForDoctorsTreatment.setToValue(strToValue);
		objAmountForDoctorsTreatment.setRangeType(strRangeType);
		objAmountForDoctorsTreatment.setRangeUnits(objRangeUnits);
		objAmountForDoctorsTreatment.setRangeType(strRangeType);
		setSpecialCosts(objAmountForDoctorsTreatment);
	}
	
	/**
	 * Set Amount for Doctors Treatment   (CP)   
	 * This field is about Special amount for doctor's treatment.
	 * @param objAMountForDoctorsTreatment - object of Special amount for doctor's treatment.
	 */
	public void setAmountForDoctorsTreatment(CP objAmountForDoctorsTreatment)
	{
		setDataType(1931, objAmountForDoctorsTreatment);
	}
	
	/**
	 * Retrieve Responsible Physician   (XCN)   
	 * This field is about Doctor who is responsible for this invoice.
	 * @return XCN - object of Responsible Physician.
	 */
	public XCN getResponsiblePhysician()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1932);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XCN)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Responsible Physician   (XCN)   
	 * This field is about Doctor who is responsible for this invoice.
	 * @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 setResponsiblePhysician(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 objResponsiblePhysician = (XCN)getDataElement(1932);
		objResponsiblePhysician.setIdNumber(strIDNumber);
		objResponsiblePhysician.setFamilyName(objFamilyName);
		objResponsiblePhysician.setGivenName(strGivenName);
		objResponsiblePhysician.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		objResponsiblePhysician.setSuffix(strSuffix);
		objResponsiblePhysician.setPrefix(strPrefix);
		objResponsiblePhysician.setSourceTable(objSourceTable);
		objResponsiblePhysician.setAssigningAuthority(objAssigningAuthority);
		objResponsiblePhysician.setNameTypeCode(strNameTypeCode);
		objResponsiblePhysician.setIdentifierCheckDigit(strIdentifierCheckDigit);
		objResponsiblePhysician.setCheckDigitScheme(strCheckDigitScheme);
		objResponsiblePhysician.setIdentifierTypeCode(strIdentifierTypeCode);
		objResponsiblePhysician.setAssigningFacility(objAssigningFacility);
		objResponsiblePhysician.setNameRepresentationCode(strNameRepresentationCode);
		objResponsiblePhysician.setNameContext(objNameContext);
		objResponsiblePhysician.setNameAssemblyOrder(strNameAssemblyOrder);
		objResponsiblePhysician.setEffectiveDate(strEffectiveDate);
		objResponsiblePhysician.setExpirationDate(strExpirationDate);
		objResponsiblePhysician.setProfessionalSuffix(strProfessionalSuffix);
		objResponsiblePhysician.setAssigningJurisdiction(objAssigningJurisdiction);
		objResponsiblePhysician.setAssigningAgencyOrDepartment(objAssigningAgencyOrDepratment); 
		objResponsiblePhysician.setSecurityCheck(strSecurityCheck);
		objResponsiblePhysician.setSecurityCheckScheme(strSecurityCheckScheme);
		setResponsiblePhysician(objResponsiblePhysician);
	}
	
	/**
	 * Set Responsible Physician   (XCN)   
	 * This field is about Doctor who is responsible for this invoice.
	 * @param XCN - object of Responsible Physician . 
	 */
	public void setResponsiblePhysician(XCN objResponsiblePhysician)
	{
		setDataType(1932, objResponsiblePhysician);
	}
	
	/**
	 * Retrieve Cost Center (CX) 
	 * Cost centers are organizational units or activities that provide goods and services.
	 * @return CX - object of Cost center  
	 */
	public CX getCostCenter()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1933);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CX)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Cost Center (CX)
	 * Cost centers are organizational units or activities that provide goods and services.
	 * @param strIDNumber Specifies the value of the identifier itself.
	 * @param strCheckDigit It is part of the identifying number used in the sending application. 
	 * @param strCheckDigitScheme Contains the code identifying the check digit scheme employed.
	 * 								Suggested Values NP,ISO,M10,M11.[Refer table No.0061].
	 * @param objAssigningAuthority The assigning authority is a unique name of the system (or organization or agency 
	 * 									or department) that creates the data. . 
	 * @param strIdentifierTypeCode Specifies a code corresponding to the type of identifier.In some cases, this code may be
	 * 								 used as a qualifier to the "Assigning authority" component.[Refer table No 0203]
	 * @param objAssigningFacility Specifies the place or location identifier where the identifier was first assigned 
	 * 									to the patient. 
	 * @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 objAssigningJurisdiction Specifies the geo-political body that assigned the identifier. 
	 * @param objAssigningAgencyOrDepartment Specifies agency or department that assigned the identifier. 
	 * @param strSecurityCheck is used to communicate the version code. 
	 * @param objSecurityCheckSCheme is used to transmit information intended to validate veracity of the supplied identifier
	 */
	public void setCostCenter(String strIDNumber,String strCheckDigit, String strCheckDigitScheme, HD objAssigningAuthority,
			String strIdentifierTypeCode,HD objAssigningFacility,String strEffectiveDate,String strExpirationDate, 
			CWE objAssigningJurisdiction, CWE objAssigningAgencyOrDepartment, String strSecurityCheck, String strSecurityCheckScheme)
	{
		CX objCostCenter  = (CX)getDataElement(1933);
		objCostCenter.setIdNumber(strIDNumber);
		objCostCenter.setCheckDigit(strCheckDigit);
		objCostCenter.setCheckDigitScheme(strCheckDigitScheme);
		objCostCenter.setAssigningAuthority(objAssigningAuthority);
		objCostCenter.setIdentifierTypeCode(strIdentifierTypeCode);
		objCostCenter.setAssigningFacility(objAssigningFacility);
		objCostCenter.setEffectiveDate(strEffectiveDate);
		objCostCenter.setExpirationDate(strExpirationDate);
		objCostCenter.setAssigningJurisdiction(objAssigningJurisdiction);
		objCostCenter.setAssigningAgencyOrDepartment(objAssigningAgencyOrDepartment); 
		objCostCenter.setSecurityCheck(strCheckDigit);
		objCostCenter.setSecurityCheckScheme(strSecurityCheckScheme);
		setCostCenter(objCostCenter);
	}
	
	/**
	 * Set Cost Center (CX)
	 * Cost centers are organizational units or activities that provide goods and services.
	 * @param objCostCenter - object of Cost center.
	 */
	public void setCostCenter(CX objCostCenter)
	{
		setDataType(1933, objCostCenter);
	}
	
	/**
	 * Retrieve  Invoice Prepaid Amount   (CP)  
	 * This field tells about Deposit paid to the service Provider prior to admission.
	 * @return CP - object of Invoice Prepaid Amount.
	 */
	public CP getInvoicePrepaidAmount()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1934);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Invoice Prepaid Amount   (CP)  
	 * This field is about Deposit paid to the service Provider prior to admission.
	 * @param objPrice - Gives information about the Price.
	 * @param strPriceType - Gives information about Type of Price.
	 * @param strFormValue - Gives information about Form Value.
	 * @param strToValue - Tell about the To value.
	 * @param objRangeUnits - Specifies about the range of the units.
	 * @param strRangeType - Specifies obut the Type of range.
	 */
	public void setInvoicePrepaidAmount(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objInvoicePrepaidAmount = (CP)getDataElement(1934);
		objInvoicePrepaidAmount.setPrice(objPrice);
		objInvoicePrepaidAmount.setPriceType(strPriceType);
		objInvoicePrepaidAmount.setFromValue(strFormValue);
		objInvoicePrepaidAmount.setToValue(strToValue);
		objInvoicePrepaidAmount.setRangeType(strRangeType);
		objInvoicePrepaidAmount.setRangeUnits(objRangeUnits);
		objInvoicePrepaidAmount.setRangeType(strRangeType);
		setInvoicePrepaidAmount(objInvoicePrepaidAmount);
	}
	
	/**
	 * Set Invoice Prepaid Amount   (CP)   
	 * This field is about Deposit paid to the service Provider prior to admission.
	 * @param objInvoicePrepaidAmount - object of Invoice Prepaid Amount.
	 */
	public void setInvoicePrepaidAmount(CP objInvoicePrepaidAmount)
	{
		setDataType(1934, objInvoicePrepaidAmount);
	}
	
	/**
	 * Retrieve  Total Invoice Amount without Prepaid Amount  (CP)   
	 * This field tells about  Total amount of Invoice without the prepaid deposit .
	 * @return CP - object of Total Invoice Amount without Prepaid Amount.
	 */
	public CP getTotlaInvoiceAmountWithoutPrepaidAmount()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1935);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Total Invoice Amount without Prepaid Amount  (CP)   
	 * This field is about Total amount of Invoice without the prepaid deposit .
	 * @param objPrice - Gives information about the Price.
	 * @param strPriceType - Gives information about Type of Price.
	 * @param strFormValue - Gives information about Form Value.
	 * @param strToValue - Tell about the To value.
	 * @param objRangeUnits - Specifies about the range of the units.
	 * @param strRangeType - Specifies obut the Type of range.
	 */
	public void setTotalInvoiceAmountWithoutPrepaidAmount(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objTotalInvoiceAmountWithoutPrepaidAmount = (CP)getDataElement(1935);
		objTotalInvoiceAmountWithoutPrepaidAmount.setPrice(objPrice);
		objTotalInvoiceAmountWithoutPrepaidAmount.setPriceType(strPriceType);
		objTotalInvoiceAmountWithoutPrepaidAmount.setFromValue(strFormValue);
		objTotalInvoiceAmountWithoutPrepaidAmount.setToValue(strToValue);
		objTotalInvoiceAmountWithoutPrepaidAmount.setRangeType(strRangeType);
		objTotalInvoiceAmountWithoutPrepaidAmount.setRangeUnits(objRangeUnits);
		objTotalInvoiceAmountWithoutPrepaidAmount.setRangeType(strRangeType);
		setTotalInvoiceAmountWithoutPrepaidAmount(objTotalInvoiceAmountWithoutPrepaidAmount);
	}
	
	/**
	 * Set Total Invoice Amount without Prepaid Amount  (CP)      
	 * This field is about Total amount of Invoice without the prepaid deposit.
	 * @param objTotalInvoiceAmountWithoutPrepaideAmount - object of Total Invoice Amount without Prepaid Amount.
	 */
	public void setTotalInvoiceAmountWithoutPrepaidAmount(CP objTotalInvoiceAmountWithoutPrepaidAmount)
	{
		setDataType(1935, objTotalInvoiceAmountWithoutPrepaidAmount);
	}
	
	/**
	 * Retrieve  Total-Amount of VAT   (CP)   
	 * This field tells about Total Amount of VAT included in the Total Invoice Amount (IVC-8).
	 * @return CP - object of Total-Amount of VAT.
	 */
	public CP getTotlaAmountOfVAT()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1936);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Total-Amount of VAT   (CP)   
	 * This field is about Total Amount of VAT included in the Total Invoice Amount (IVC-8).
	 * @param objPrice - Gives information about the Price.
	 * @param strPriceType - Gives information about Type of Price.
	 * @param strFormValue - Gives information about Form Value.
	 * @param strToValue - Tell about the To value.
	 * @param objRangeUnits - Specifies about the range of the units.
	 * @param strRangeType - Specifies obut the Type of range.
	 */
	public void setTotalAmountOfVAT(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objTotalAmountOfVAT = (CP)getDataElement(1936);
		objTotalAmountOfVAT.setPrice(objPrice);
		objTotalAmountOfVAT.setPriceType(strPriceType);
		objTotalAmountOfVAT.setFromValue(strFormValue);
		objTotalAmountOfVAT.setToValue(strToValue);
		objTotalAmountOfVAT.setRangeType(strRangeType);
		objTotalAmountOfVAT.setRangeUnits(objRangeUnits);
		objTotalAmountOfVAT.setRangeType(strRangeType);
		setTotalAmountOfVAT(objTotalAmountOfVAT);
	}
	
	/**
	 * Set Total-Amount of VAT   (CP)      
	 * This field is about Total Amount of VAT included in the Total Invoice Amount (IVC-8).
	 * @param objTotalAmountOfVAT - object of Total-Amount of VAT.
	 */
	public void setTotalAmountOfVAT(CP objTotalAmountOfVAT)
	{
		setDataType(1936, objTotalAmountOfVAT);
	}
	
	/**
	 * Retrieve VAT-Rates applied   (NM)   
	 * This field tells us Applied VAT Rates on Invoice. Multiple VAT-rates may be applied according to the type of service.
	 * @return ISingleCollection<NM> - List of object of VAT Rates applied.
	 */
	public ISingleCollection<NM> getVATRatesApplied()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1937);
		ISingleCollection<NM> objDataList = new SingleCollection<NM>();
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				NM objNM = (NM)objDataType;
				objDataList.add(objNM);
			}
		}
		return objDataList;
	}
	
	/**
	 * Set VAT-Rates applied   (NM)
	 * This field tells us Applied VAT Rates on Invoice. Multiple VAT-rates may be applied according to the type of service.
	 * @param String - string of VAT rates applied.
	 */
	public void addVATRatesApplied(String strVATRatesAmount)
	{
		NM objVATRatesApplied =(NM)getDataElement(1937);
		objVATRatesApplied.setValue(strVATRatesAmount);
		addVATRatesApplied(objVATRatesApplied);
	}
	
	/**
	 * Set VAT-Rates applied   (NM)
	 * This field tells us Applied VAT Rates on Invoice. Multiple VAT-rates may be applied according to the type of service.
	 * @param NM - object of VAT rates applied.
	 */
	public void addVATRatesApplied(NM objVATRatesApplied)
	{
		setDataType(1937, objVATRatesApplied);
	}
	
	/**
	 * Set VAT-Rates applied   (NM)
	 * This field tells us Applied VAT Rates on Invoice. Multiple VAT-rates may be applied according to the type of service.
	 * @param  objVATRatesAmountList - list of object of VAT rates applied.
	 */
	@SuppressWarnings("unchecked")
	public void setVATRatesApplied(ISingleCollection<NM> objVATRatesAppliedList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objVATRatesAppliedList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1937,objCollection);
	}
	
	/**
	 * Retrieve Benefit group  (CWE)   
	 * This field is about Code indicating the Benefit group.
	 * @return CWE - object of Benefit group.
	 */
	public CWE getBenefitGroup()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1938);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Benefit group  (CWE)   
	 * This field is about Code indicating the Benefit group.
	 * @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 setBenefitGroup(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 objBenefitGroup  = (CWE)getDataElement(1938);
		objBenefitGroup.setIdentifier(strIdentifier);
		objBenefitGroup.setText(strText);
		objBenefitGroup.setNameOfCodingSystem(strNameOfCodingSystem);
		objBenefitGroup.setAlternateIdentifier(strAlternateIdentifier);
		objBenefitGroup.setAlternateText(strAlternateText);
		objBenefitGroup.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objBenefitGroup.setCodingSystemVersionID(strCodingSystemVersionID);
		objBenefitGroup.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objBenefitGroup.setOriginalText(strOriginalText);
		objBenefitGroup.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objBenefitGroup.setSecondAlternateText(strSecondAlternateText);
		objBenefitGroup.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objBenefitGroup.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objBenefitGroup.setCodingSystemOID(strCodingSystemOID);
		objBenefitGroup.setValueSetOID(strValueSetOID);
		objBenefitGroup.setValueSetVersionID(strValueSetVersionID);
		objBenefitGroup.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objBenefitGroup.setAlternateValueSetOID(strAlternateValueSetOID);
		objBenefitGroup.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objBenefitGroup.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objBenefitGroup.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objBenefitGroup.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setBenefitGroup(objBenefitGroup);
	}
	
	/**
	 * Set Benefit group  (CWE)   
	 * This field is about Code indicating the Benefit group.
	 * @param CWE - object of the benefit group.
	 */ 
	public void setBenefitGroup(CWE objBenefitGroup)
	{
		setDataType(1938, objBenefitGroup);
	}
	
	/**
	 * Retrieve Provider Tax ID   (ST)   
	 * This field is about The Tax ID of the Provider (general Tax identification number or VAT number).
	 * @return ST - object of the Provider tax ID.
	 */
	public ST getProviderTaxID()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(2038);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Provider Tax ID   (ST)   
	 * This field is about The Tax ID of the Provider (general Tax identification number or VAT number).
	 * @param String - String of Character contain information about the provider tax ID. 
	 */
	public void setProviderTaxID(String strProviderTaxID)
	{
		ST objProviderTaxID = (ST)getDataElement(2038);
		objProviderTaxID.setValue(strProviderTaxID);
		setProviderTaxID(objProviderTaxID);
	}
	
	/**
	 * Set Provider Tax ID   (ST)   
	 * This field is about The Tax ID of the Provider (general Tax identification number or VAT number).
	 * @param ST - object which contain information about the provider tax ID. 
	 */
	public void setProviderTaxID(ST objProviderTaxID)
	{
		setDataType(2038, objProviderTaxID);
	}
	
	/**
	 * Retrieve Payer Tax ID   (ST)   
	 * This field is about The Tax ID of the Payer (general Tax identification number or VAT number).
	 * @return ST - object of the Payer tax ID.
	 */
	public ST getPayerTaxID()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(2039);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Payer Tax ID   (ST)   
	 * This field is about The Tax ID of the Payer (general Tax identification number or VAT number).
	 * @param String - String of Character contain information about the Payer tax ID. 
	 */
	public void setPayerTaxID(String strPayerTaxID)
	{
		ST objPayerTaxID = (ST)getDataElement(2039);
		objPayerTaxID.setValue(strPayerTaxID);
		setPayerTaxID(objPayerTaxID);
	}
	
	/**
	 * Set Sales Tax ID   (ST)   
	 * This field is about The Tax ID of the Sales (general Tax identification number or VAT number).
	 * @param ST - object which contain information about the Sales tax ID. 
	 */
	public void setPayerTaxID(ST objPayerTaxID)
	{
		setDataType(2039, objPayerTaxID);
	}
	
	/**
	 * Retrieve Provider Tax Status  (CWE)   
	 * This field is about Code indicating the Provider Tax Status.
	 * @return CWE - object of Provider Tax Status.
	 */
	public CWE getProviderTaxStatus()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(2040);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Provider Tax Status  (CWE)   
	 * This field is about Code indicating the Provider Tax Status.
	 * @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 setProviderTaxStatus(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 objProviderTaxStatus  = (CWE)getDataElement(2040);
		objProviderTaxStatus.setIdentifier(strIdentifier);
		objProviderTaxStatus.setText(strText);
		objProviderTaxStatus.setNameOfCodingSystem(strNameOfCodingSystem);
		objProviderTaxStatus.setAlternateIdentifier(strAlternateIdentifier);
		objProviderTaxStatus.setAlternateText(strAlternateText);
		objProviderTaxStatus.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objProviderTaxStatus.setCodingSystemVersionID(strCodingSystemVersionID);
		objProviderTaxStatus.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objProviderTaxStatus.setOriginalText(strOriginalText);
		objProviderTaxStatus.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objProviderTaxStatus.setSecondAlternateText(strSecondAlternateText);
		objProviderTaxStatus.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objProviderTaxStatus.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objProviderTaxStatus.setCodingSystemOID(strCodingSystemOID);
		objProviderTaxStatus.setValueSetOID(strValueSetOID);
		objProviderTaxStatus.setValueSetVersionID(strValueSetVersionID);
		objProviderTaxStatus.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objProviderTaxStatus.setAlternateValueSetOID(strAlternateValueSetOID);
		objProviderTaxStatus.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objProviderTaxStatus.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objProviderTaxStatus.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objProviderTaxStatus.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setProviderTaxStatus(objProviderTaxStatus);
	}
	
	/**
	 * Set Provider Tax Status  (CWE)   
	 * This field is about Code indicating the Provider Tax Status.
	 * @param CWE - object of the Provider Tax Status.
	 */ 
	public void setProviderTaxStatus(CWE objProviderTaxStatus)
	{
		setDataType(2040, objProviderTaxStatus);
	}
	
	/**
	 * Retrieve Payer Tax Status  (CWE)   
	 * This field is about Code indicating the Payer Tax Status.
	 * @return CWE - object of Payer Tax Status.
	 */
	public CWE getPayerTaxStatus()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(2041);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Payer Tax Status  (CWE)   
	 * This field is about Code indicating the Payer Tax Status.
	 * @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 setPayerTaxStatus(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 objPayerTaxStatus  = (CWE)getDataElement(2041);
		objPayerTaxStatus.setIdentifier(strIdentifier);
		objPayerTaxStatus.setText(strText);
		objPayerTaxStatus.setNameOfCodingSystem(strNameOfCodingSystem);
		objPayerTaxStatus.setAlternateIdentifier(strAlternateIdentifier);
		objPayerTaxStatus.setAlternateText(strAlternateText);
		objPayerTaxStatus.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objPayerTaxStatus.setCodingSystemVersionID(strCodingSystemVersionID);
		objPayerTaxStatus.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objPayerTaxStatus.setOriginalText(strOriginalText);
		objPayerTaxStatus.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objPayerTaxStatus.setSecondAlternateText(strSecondAlternateText);
		objPayerTaxStatus.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objPayerTaxStatus.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objPayerTaxStatus.setCodingSystemOID(strCodingSystemOID);
		objPayerTaxStatus.setValueSetOID(strValueSetOID);
		objPayerTaxStatus.setValueSetVersionID(strValueSetVersionID);
		objPayerTaxStatus.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objPayerTaxStatus.setAlternateValueSetOID(strAlternateValueSetOID);
		objPayerTaxStatus.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objPayerTaxStatus.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objPayerTaxStatus.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objPayerTaxStatus.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID);
		setPayerTaxStatus(objPayerTaxStatus);
	}
	
	/**
	 * Set Payer Tax Status  (CWE)   
	 * This field is about Code indicating the Payer Tax Status.
	 * @param CWE - object of the Payer Tax Status.
	 */ 
	public void setPayerTaxStatus(CWE objPayerTaxStatus)
	{
		setDataType(2041, objPayerTaxStatus);
	}
	
	
	/**
	 * Retrieve Sales Tax ID   (ST)   
	 * This field is about The Tax ID of the Sales (general Tax identification number or VAT number).
	 * @return ST - object of the Sales tax ID.
	 */
	public ST getSalesTaxID()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(2042);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Sales Tax ID   (ST)   
	 * This field is about The Tax ID of the Sales (general Tax identification number or VAT number).
	 * @param String - String of Character contain information about the Sales tax ID. 
	 */
	public void setSalesTaxID(String strSalesTaxID)
	{
		ST objSalesTaxID = (ST)getDataElement(2042);
		objSalesTaxID.setValue(strSalesTaxID);
		setSalesTaxID(objSalesTaxID);
	}
	
	/**
	 * Set Sales Tax ID   (ST)   
	 * This field is about The Tax ID of the Sales (general Tax identification number or VAT number).
	 * @param ST - object which contain information about the Sales tax ID. 
	 */
	public void setSalesTaxID(ST objSalesTaxID)
	{
		setDataType(2042, objSalesTaxID);
	}
	
	/**
	 * 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 
	 * {IVC} while parsing IVC segment validate method will check for its mandatory presence.
	 * [IVC] in this case validate will throw exception if one tries to enter more than one IVC   segment.
	 * @return boolean - true or false.
	 * @throws InvalidSegmentException Throws when Segment Validation fails.
	 */
	public boolean validate() throws InvalidSegmentException
	{
		try
		{
			super.validate();
			return true;
		}
		catch(FieldMissingException ex)
		{
			throw new InvalidSegmentException(enumSegments.getValue(),ex);
		}
	}
}
