/*******************************************************************************
 *  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.CP;
import cdac.medinfo.sdk.hl7282.baselibs.CQ;
import cdac.medinfo.sdk.hl7282.baselibs.CWE;
import cdac.medinfo.sdk.hl7282.baselibs.CX;
import cdac.medinfo.sdk.hl7282.baselibs.DR;
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.SI;
import cdac.medinfo.sdk.hl7282.baselibs.ST;
import cdac.medinfo.sdk.hl7282.baselibs.XCN;
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;

/**
 * PSL - Product/Service Line Item Segment
 * The Product/Service Line Item segment is used to identify individual product/service items that typically are aggregated into an Invoice. 
 * <p>Represents an HL7 PSL message segment.
 * This segment has the following fields:</p><p>
 * PSL-1 :  Provider Product/Service Line Item Number   (EI) <b>Required</b><br>
 * PSL-2 :  Payer Product/Service Line Item Number   (EI) <b>Optional</b><br>
 * PSL-3 :  Product/Service Line Item Sequence Number   (SI) <b>Required</b><br>
 * PSL-4 :  Provider Tracking ID   (EI) <b>Optional</b><br>
 * PSL-5 :  Payer Tracking ID   (EI) <b>Optional</b><br>
 * PSL-6 :  Product/Service Line Item Status   (CWE) <b>Required</b><br>
 * PSL-7 :  Product/Service Code   (CWE) <b>Required</b><br>
 * PSL-8 :  Product/Service Code Modifier   (CWE) <b>Optional</b><br>
 * PSL-9 :  Product/Service Code Description   (ST) <b>Optional</b><br>
 * PSL-10 :  Product/Service Effective Date   (DTM) <b>Conditional</b><br>
 * PSL-11 :  Product/Service Expiration Date   (DTM) <b>Optional</b><br>
 * PSL-12 :  Product/Service Quantity   (CQ) <b>Conditional</b><br>
 * PSL-13 :  Product/Service Unit Cost   (CP)  <b>Conditional</b><br>
 * PSL-14 :  Number of Items per Unit   (NM)  <b>Conditional</b><br>
 * PSL-15 :  Product/Service Gross Amount   (CP) <b>Conditional</b><br>
 * PSL-16 :  Product/Service Billed Amount   (CP)  <b>Conditional</b><br>
 * PSL-17 :  Product/Service Clarification Code Type   (CWE) <b>Optional</b><br>
 * PSL-18 :  Product/Service Clarification Code Value   (ST) <b>Optional</b><br>
 * PSL-19 :  Health Document Reference Identifier   (EI)  <b>Optional</b><br>
 * PSL-20 :  Processing Consideration Code   (CWE) <b>Optional</b><br>
 * PSL-21 :  Restricted Disclosure Indicator   (ID)  <b>Required</b><br>
 * PSL-22 :  Related Product/Service Code Indicator   (CWE) <b>Optional</b><br>
 * PSL-23 :  Product/Service Amount for Physician   (CP) <b>Optional</b><br> 
 * PSL-24 :  Product/Service Cost Factor   (NM) <b>Optional</b><br>
 * PSL-25 :  Cost Center   (CX)  <b>Optional</b><br>
 * PSL-26 :  Billing Period   (DR) <b>Optional</b><br> 
 * PSL-27 :  Days without Billing   (NM) <b>Optional</b><br>
 * PSL-28 :  Session-No   (NM)<b>Optional</b><br>  
 * PSL-29 :  Executing Physician ID   (XCN) <b>Optional</b><br>
 * PSL-30 :  Responsible Physician ID   (XCN) <b>Optional</b><br>
 * PSL-32 :  Medical Role Executing Physician   (CWE) <b>Optional</b><br> 
 * PSL-33 :  Side of body   (CWE) <b>Optional</b><br> 
 * PSL-34 :  Number of TP's PP   (NM) <b>Optional</b><br>
 * PSL-35 :  TP-Value PP   (CP)  <b>Optional</b><br>
 * PSL-36 :  Internal Scaling Factor PP   (NM)  <b>Optional</b><br>
 * PSL-37 :  External Scaling Factor PP   (NM)  <b>Optional</b><br>
 * PSL-38 :  Amount PP   (CP)  <b>Optional</b><br>
 * PSL-39 :  Number of TP's Technical Part   (NM) <b>Optional</b><br> 
 * PSL-40 :  TP-Value Technical Part   (CP)  <b>Optional</b><br>
 * PSL-41 :  Internal Scaling Factor Technical Part   (NM)  <b>Optional</b><br>
 * PSL-42 :  External Scaling Factor Technical Part   (NM) <b>Optional</b><br>
 * PSL-43 :  Amount Technical Part   (CP) <b>Optional</b><br>
 * PSL-44 :  Total Amount Professional Part + Technical Part   (CP) <b>Optional</b><br> 
 * PSL-45 :  VAT-Rate   (NM)  <b>Optional</b><br>
 * PSL-46 :  Main-Service   (ID)  <b>Optional</b><br>
 * PSL-47 :  Validation   (ID)  <b>Optional</b><br>
 * PSL-48 :  Comment   (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 PSL extends Segment{

	/**
	 * Constructs the PSL segment.
	 */
	public PSL()
	{
		super(EnumSegments.HL7_SEG_PSL);
	}
	
	/**
	 * Retrieve Provider Product/Service Line Item Number   (EI) 
	 * This field is Unique Product/Service Line Item Number assigned by the Provider Application.
	 * @return EI - object of provider product or service line item number.
	 */
	public EI getProviderProductOrServiceLineItemNumber()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1955);
		if(objDataCollection != null) 
			return (EI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set  Retrieve Provider Product/Service Line Item Number   (EI) 
	 * This field is Unique Product/Service Line Item 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 setProviderProductOrServiceLineItemNumber(String strEntityIdentifier,String strNamespaceID,String strUniversalID,String strUniversalIDType)
	{
		EI objProviderProductOrServiceLineItemNumber = (EI)getDataElement(1955);
		objProviderProductOrServiceLineItemNumber.setEntityIdentifier(strEntityIdentifier);
		objProviderProductOrServiceLineItemNumber.setNamespaceId(strNamespaceID);
		objProviderProductOrServiceLineItemNumber.setUniversalId(strUniversalID);
		objProviderProductOrServiceLineItemNumber.setUniversalIdType(strUniversalIDType);
		setProviderProductOrServiceLineItemNumber(objProviderProductOrServiceLineItemNumber);
	}
	
	/**
	 * Set  Retrieve Provider Product/Service Line Item Number   (EI) 
	 * This field is Unique Product/Service Line Item Number assigned by the Provider Application.
	 * @param EI - object of provider product or service line item number.
	 */ 
	public void setProviderProductOrServiceLineItemNumber(EI objProviderProductOrServiceLineItemNumber)
	{
		setDataType(1955, objProviderProductOrServiceLineItemNumber);
	}
	
	/**
	 * Retrieve Payer Product/Service Line Item Number   (EI) 
	 * This field is Unique Product/Service Line Item Number assigned by the Payer Application.
	 * @return EI - object of Payer product or service line item number.
	 */
	public EI getPayerProductOrServiceLineItemNumber()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1956);
		if(objDataCollection != null) 
			return (EI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set  Retrieve Payer Product/Service Line Item Number   (EI) 
	 * This field is Unique Product/Service Line Item 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 setPayerProductOrServiceLineItemNumber(String strEntityIdentifier,String strNamespaceID,String strUniversalID,String strUniversalIDType)
	{
		EI objPayerProductOrServiceLineItemNumber = (EI)getDataElement(1956);
		objPayerProductOrServiceLineItemNumber.setEntityIdentifier(strEntityIdentifier);
		objPayerProductOrServiceLineItemNumber.setNamespaceId(strNamespaceID);
		objPayerProductOrServiceLineItemNumber.setUniversalId(strUniversalID);
		objPayerProductOrServiceLineItemNumber.setUniversalIdType(strUniversalIDType);
		setPayerProductOrServiceLineItemNumber(objPayerProductOrServiceLineItemNumber);
	}
	
	/**
	 * Set  Retrieve Payer Product/Service Line Item Number   (EI) 
	 * This field is Unique Product/Service Line Item Number assigned by the Payer Application.
	 * @param EI - object of Payer product or service line item number.
	 */ 
	public void setPayerProductOrServiceLineItemNumber(EI objPayerProductOrServiceLineItemNumber)
	{
		setDataType(1956, objPayerProductOrServiceLineItemNumber);
	}
	
	/**
	 * Retrieve Product/Service Line Item Sequence Number   (SI) 
	 * Unique sequence number for the Product/Service Line Item – starts with 1, then 2, etc. for each unique Product/Service Line Item in this Invoice.
	 * @return SI - object of Payer product or service line item sequence number.
	 */
	public SI getProductOrServiceLineItemSequenceNumber()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1957);
		if(objDataCollection != null) 
			return (SI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set  Retrieve Product/Service Line Item sequence Number   (SI) 
	 * Unique sequence number for the Product/Service Line Item – starts with 1, then 2, etc. for each unique Product/Service Line Item in this Invoice.
	 * @param strProductOrServiceLineItemSequenceNumber
	 */ 
	public void setProductOrServiceLineItemSequenceNumber(String strProductOrServiceLineItemSequenceNumber)
	{
		SI objProductOrServiceLineItemSequenceNumber = (SI)getDataElement(1957);
		objProductOrServiceLineItemSequenceNumber.setValue(strProductOrServiceLineItemSequenceNumber);
		setProductOrServiceLineItemSequenceNumber(objProductOrServiceLineItemSequenceNumber);
	}
	
	/**
	 * Set  Retrieve Product/Service Line Item Sequence Number   (SI) 
	 * Unique sequence number for the Product/Service Line Item – starts with 1, then 2, etc. for each unique Product/Service Line Item in this Invoice.
	 * @param SI - object of product or service line item sequence number.
	 */ 
	public void setProductOrServiceLineItemSequenceNumber(SI objProductOrServiceLineItemSequenceNumber)
	{
		setDataType(1957, objProductOrServiceLineItemSequenceNumber);
	}
	
	/**
	 * Retrieve Provider Tracking ID   (EI) 
	 * This field is used to Identifier for this Product/Service Line Item assigned by the Provider Application. 
	 * @return EI - object of Provider tracking Id .
	 */
	public EI getProviderTrackingID()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1958);
		if(objDataCollection != null) 
			return (EI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Provider Tracking ID   (EI) 
	 * This field is used to Identifier for this Product/Service Line Item 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 setProviderTrackingID(String strEntityIdentifier,String strNamespaceID,String strUniversalID,String strUniversalIDType)
	{
		EI objProviderTrackingID = (EI)getDataElement(1958);
		objProviderTrackingID.setEntityIdentifier(strEntityIdentifier);
		objProviderTrackingID.setNamespaceId(strNamespaceID);
		objProviderTrackingID.setUniversalId(strUniversalID);
		objProviderTrackingID.setUniversalIdType(strUniversalIDType);
		setProviderTrackingID(objProviderTrackingID);
	}
	
	/**
	 * Set Provider Tracking ID   (EI) 
	 * This field is used to Identifier for this Product/Service Line Item assigned by the Provider Application. 
	 * @param EI - object of Provider tracking Id .
	 */ 
	public void setProviderTrackingID(EI objProviderTrackingID)
	{
		setDataType(1958, objProviderTrackingID);
	}
	
	/**
	 * Retrieve Payer Tracking ID   (EI) 
	 * This field is used to Identifier for this Product/Service Line Item assigned by the Payer Application. 
	 * @return EI - object of Payer tracking Id .
	 */
	public EI getPayerTrackingID()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1959);
		if(objDataCollection != null) 
			return (EI)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Payer Tracking ID   (EI) 
	 * This field is used to Identifier for this Product/Service Line Item 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 setPayerTrackingID(String strEntityIdentifier,String strNamespaceID,String strUniversalID,String strUniversalIDType)
	{
		EI objPayerTrackingID = (EI)getDataElement(1959);
		objPayerTrackingID.setEntityIdentifier(strEntityIdentifier);
		objPayerTrackingID.setNamespaceId(strNamespaceID);
		objPayerTrackingID.setUniversalId(strUniversalID);
		objPayerTrackingID.setUniversalIdType(strUniversalIDType);
		setPayerTrackingID(objPayerTrackingID);
	}
	
	/**
	 * Set Payer Tracking ID   (EI) 
	 * This field is used to Identifier for this Product/Service Line Item assigned by the Payer Application. 
	 * @param EI - object of Payer tracking Id .
	 */ 
	public void setPayerTrackingID(EI objPayerTrackingID)
	{
		setDataType(1959, objPayerTrackingID);
	}
	
	/**
	 * retrieve Product/Service Line Item Status   (CWE)   
	 * This field is about Processing status for the Product/Service Code. 
	 * @return CWE - object of Product Or Service Line Item Status.
	 */
	public CWE getProductOrServiceLineItemStatus()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1960);
		if(objDataCollection != null) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Product/Service Line Item Status   (CWE)   
	 * This field is about Processing status for the Product/Service Code. 
	 * @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 setProductOrServiceLineItemStatus(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 objProductOrServiceLineItemStatus  = (CWE)getDataElement(1960);
		objProductOrServiceLineItemStatus.setIdentifier(strIdentifier);
		objProductOrServiceLineItemStatus.setText(strText);
		objProductOrServiceLineItemStatus.setNameOfCodingSystem(strNameOfCodingSystem);
		objProductOrServiceLineItemStatus.setAlternateIdentifier(strAlternateIdentifier);
		objProductOrServiceLineItemStatus.setAlternateText(strAlternateText);
		objProductOrServiceLineItemStatus.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objProductOrServiceLineItemStatus.setCodingSystemVersionID(strCodingSystemVersionID);
		objProductOrServiceLineItemStatus.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objProductOrServiceLineItemStatus.setOriginalText(strOriginalText);
		objProductOrServiceLineItemStatus.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objProductOrServiceLineItemStatus.setSecondAlternateText(strSecondAlternateText);
		objProductOrServiceLineItemStatus.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objProductOrServiceLineItemStatus.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objProductOrServiceLineItemStatus.setCodingSystemOID(strCodingSystemOID);
		objProductOrServiceLineItemStatus.setValueSetOID(strValueSetOID);
		objProductOrServiceLineItemStatus.setValueSetVersionID(strValueSetVersionID);
		objProductOrServiceLineItemStatus.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objProductOrServiceLineItemStatus.setAlternateValueSetOID(strAlternateValueSetOID);
		objProductOrServiceLineItemStatus.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objProductOrServiceLineItemStatus.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objProductOrServiceLineItemStatus.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objProductOrServiceLineItemStatus.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		setProductOrServiceLineItemStatus(objProductOrServiceLineItemStatus);
	}
	
	/**
	 * Set Product/Service Line Item Status   (CWE)   
	 * This field is about Processing status for the Product/Service Code. 
	 * @param objProductOrServiceLineItemStatus - object of Product Or Service Line Item Status.
	 */
	public void setProductOrServiceLineItemStatus(CWE objProductOrServiceLineItemStatus)
	{
		setDataType(1960, objProductOrServiceLineItemStatus);
	}
	
	/**
	 * retrieve Product/Service Code   (CWE)   
	 * This field is about Code describing the service that was delivered/received.
	 * @return CWE - object of Product Or Service Code.
	 */
	public CWE getProductOrServiceCode()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1961);
		if(objDataCollection != null) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Product/Service Code   (CWE)   
	 * This field is about Code describing the service that was delivered/received.
	 * @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 setProductOrServiceCode(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 objProductOrServiceCode  = (CWE)getDataElement(1961);
		objProductOrServiceCode.setIdentifier(strIdentifier);
		objProductOrServiceCode.setText(strText);
		objProductOrServiceCode.setNameOfCodingSystem(strNameOfCodingSystem);
		objProductOrServiceCode.setAlternateIdentifier(strAlternateIdentifier);
		objProductOrServiceCode.setAlternateText(strAlternateText);
		objProductOrServiceCode.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objProductOrServiceCode.setCodingSystemVersionID(strCodingSystemVersionID);
		objProductOrServiceCode.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objProductOrServiceCode.setOriginalText(strOriginalText);
		objProductOrServiceCode.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objProductOrServiceCode.setSecondAlternateText(strSecondAlternateText);
		objProductOrServiceCode.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objProductOrServiceCode.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objProductOrServiceCode.setCodingSystemOID(strCodingSystemOID);
		objProductOrServiceCode.setValueSetOID(strValueSetOID);
		objProductOrServiceCode.setValueSetVersionID(strValueSetVersionID);
		objProductOrServiceCode.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objProductOrServiceCode.setAlternateValueSetOID(strAlternateValueSetOID);
		objProductOrServiceCode.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objProductOrServiceCode.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objProductOrServiceCode.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objProductOrServiceCode.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		setProductOrServiceCode(objProductOrServiceCode);
	}
	
	/**
	 * Set Product/Service Code   (CWE)   
	 * This field is about Code describing the service that was delivered/received. 
	 * @param objProductOrServiceCode - object of Product Or Service Code.
	 */
	public void setProductOrServiceCode(CWE objProductOrServiceCode)
	{
		setDataType(1961, objProductOrServiceCode);
	}	
	
	/**
	 * retrieve Product/Service Code Modifier   (CWE)   
	 * This field is about :  Additional optional modifier(s) for the Product/Service Code.
	 * @return ISingleCollection<CWE> - list of object of Product Or Service Code Modifier.
	 */
	public ISingleCollection<CWE> getProductOrServiceCodeModifier()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1962);
		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 Product/Service Code Modifier   (CWE)   
	 * This field is about :  Additional optional modifier(s) for the Product/Service Code .
	 * @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 addProductOrServiceCodeModifier(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 objProductOrServiceCodeModifier  = (CWE)getDataElement(1962);
		objProductOrServiceCodeModifier.setIdentifier(strIdentifier);
		objProductOrServiceCodeModifier.setText(strText);
		objProductOrServiceCodeModifier.setNameOfCodingSystem(strNameOfCodingSystem);
		objProductOrServiceCodeModifier.setAlternateIdentifier(strAlternateIdentifier);
		objProductOrServiceCodeModifier.setAlternateText(strAlternateText);
		objProductOrServiceCodeModifier.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objProductOrServiceCodeModifier.setCodingSystemVersionID(strCodingSystemVersionID);
		objProductOrServiceCodeModifier.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objProductOrServiceCodeModifier.setOriginalText(strOriginalText);
		objProductOrServiceCodeModifier.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objProductOrServiceCodeModifier.setSecondAlternateText(strSecondAlternateText);
		objProductOrServiceCodeModifier.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objProductOrServiceCodeModifier.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objProductOrServiceCodeModifier.setCodingSystemOID(strCodingSystemOID);
		objProductOrServiceCodeModifier.setValueSetOID(strValueSetOID);
		objProductOrServiceCodeModifier.setValueSetVersionID(strValueSetVersionID);
		objProductOrServiceCodeModifier.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objProductOrServiceCodeModifier.setAlternateValueSetOID(strAlternateValueSetOID);
		objProductOrServiceCodeModifier.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objProductOrServiceCodeModifier.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objProductOrServiceCodeModifier.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objProductOrServiceCodeModifier.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		addProductOrServiceCodeModifier(objProductOrServiceCodeModifier);
	}
	
	/**
	 * Set Product/Service CodeModifier Modifier   (CWE)   
	 * This field is about :  Additional optional modifier(s) for the Product/Service Code .
	 * @param objProductOrServiceCodeModifier - object of Product Or Service Code Modifier.
	 */
	public void addProductOrServiceCodeModifier(CWE objProductOrServiceCodeModifier)
	{
		setDataType(1962, objProductOrServiceCodeModifier);
	}	
	
	/**
	 * Set Product/Service CodeModifier Modifier   (CWE)   
	 * This field is about :  Additional optional modifier(s) for the Product/Service Code .
	 * @param objProductOrServiceCodeModifier - List of object  of Product Or Service Code Modifier.
	 */
	@SuppressWarnings("unchecked")
	public void setProductOrServiceCodeModifier(ISingleCollection<CWE> objProductOrServiceCodeModifier)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objProductOrServiceCodeModifier;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1962,objCollection);
	}
	
	/**
	 * Retrieve Product/Service Code Description   (ST)   
	 * This field is about Text describing Product/Service Code in PSL.
	 * @return ST - object of Product Or Service Code Description.
	 */
	public ST getProductOrServiceCodeDescription()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1963);
		if(objDataCollection != null) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Product/Service Code Description   (ST)   
	 * This field is about Text describing Product/Service Code in PSL.
	 * @param strProductOrServiceCodeDescription - String of Product or service code description.
	 */
	public void setProductOrServiceCodeDescription(String strProductOrServiceCodeDescription)
	{
		ST objProductOrServiceCodeDescription = (ST)getDataElement(1963);
		objProductOrServiceCodeDescription.setValue(strProductOrServiceCodeDescription);
		setProductOrServiceCodeDescription(objProductOrServiceCodeDescription);
	}
	
	/**
	 * Set Product/Service Code Description   (ST)   
	 * This field is about Text describing Product/Service Code in PSL.
	 * @param objProductOrServiceCodeDescription - object of Product or service code description.
	 */
	public void setProductOrServiceCodeDescription(ST objProductOrServiceCodeDescription)
	{
		setDataType(1963, objProductOrServiceCodeDescription);
	}
	
	/**
	 * Retrieve Product/Service Effective Date   (DTM)   
	 * This field is about Date/Time product/service was delivered/received.
	 * @return DTM - object of Product or Service Effective Date.
	 */
	public DTM getProductOrServiceEffectiveDate()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1964);
		if(objDataCollection != null) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Product/Service Effective Date   (DTM)   
	 * This field is about Date/Time product/service was delivered/received.
	 * @param strProductOrServiceEffectiveDate - string of Product or Service Effective Date.
	 */
	public void setProductOrServiceEffectiveDate(String strProductOrServiceEffectiveDate)
	{
		DTM objProductOrServiceEffectiveDate = (DTM)getDataElement(1964);
		objProductOrServiceEffectiveDate.setValue(strProductOrServiceEffectiveDate);
		setProductOrServiceEffectiveDate(objProductOrServiceEffectiveDate);
	}
	
	/**
	 * Set Product/Service Effective Date   (DTM)   
	 * This field is about Date/Time product/service was delivered/received.
	 * @param objProductOrServiceEffectiveDate - object of Product or Service Effective Date.
	 */
	public void setProductOrServiceEffectiveDate(DTM objProductOrServiceEffectiveDate)
	{
		setDataType(1964, objProductOrServiceEffectiveDate);
	}
	
	/**
	 * Retrieve Product/Service Expiration Date   (DTM)   
	 * This field is about Date/Time product/service was delivered/received.
	 * @return DTM - object of Product or Service Expiration Date.
	 */
	public DTM getProductOrServiceExpirationDate()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1965);
		if(objDataCollection != null) 
			return (DTM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Product/Service Expiration Date   (DTM)   
	 * This field is about Date/Time product/service was delivered/received.
	 * @param strProductOrServiceExpirationDate - string of Product or Service Expiration Date.
	 */
	public void setProductOrServiceExpirationDate(String strProductOrServiceExpirationDate)
	{
		DTM objProductOrServiceExpirationDate = (DTM)getDataElement(1965);
		objProductOrServiceExpirationDate.setValue(strProductOrServiceExpirationDate);
		setProductOrServiceExpirationDate(objProductOrServiceExpirationDate);
	}
	
	/**
	 * Set Product/Service Expiration Date   (DTM)   
	 * This field is about Date/Time product/service was delivered/received.
	 * @param objProductOrServiceExpirationDate - object of Product or Service Expiration Date.
	 */
	public void setProductOrServiceExpirationDate(DTM objProductOrServiceExpirationDate)
	{
		setDataType(1965, objProductOrServiceExpirationDate);
	}
	
	/**
	 * Retrieve Product/Service Quantity   (CQ)   
	 * This field is Amount that has been negotiated for this Product/Service Code on PSL between a Provider and Payer for each unit. 
	 * @return CQ - object of Product or Service quality.
	 */
	public CQ getProductOrServiceQuality()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1966);
		if(objDataCollection != null) 
			return (CQ)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Product/Service Quantity   (CQ)   
	 * This field is Amount that has been negotiated for this Product/Service Code on PSL between a Provider and Payer for each unit. 
	 * @param strQuantity - This component specifies the numeric quantity or amount of an entity.
	 * @param objUnits - This component species the units in which the quantity is expressed.  
	 */
	public void setProductOrServiceQuantity(String strQuantity,CWE objUnits)
	{
		CQ objProductOrserviceQuantity = (CQ)getDataElement(1966);
		objProductOrserviceQuantity.setQuantity(strQuantity);
		objProductOrserviceQuantity.setUnits(objUnits);
		setProductOrServiceQuantity(objProductOrserviceQuantity);
	}
	/**
	 * Set Product/Service Quantity   (CQ)   
	 * This field is Amount that has been negotiated for this Product/Service Code on PSL between a Provider and Payer for each unit. 
	 * @param objProductOrserviceQuantity - object of Product Or Service quantity.
	 */
	public void setProductOrServiceQuantity(CQ objProductOrserviceQuantity)
	{
		setDataType(1966, objProductOrserviceQuantity);
	}
	
	/**
	 * Retrieve Product/Service Unit Cost   (CP)
	 * This field contains the cost per unit either in monetary amount or in points.
	 * @return CP - object of Product or Service unit cost.
	 */
	public CP getProductOrServiceUnitCost()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1967);
		if(objDataCollection != null) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Product/Service Unit Cost   (CP)
	 * This field contains the cost per unit either in monetary amount or in points.
	 * @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 setProductOrServiceUnitCost(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objProductOrServiceUnitCost = (CP)getDataElement(1967);
		objProductOrServiceUnitCost.setPrice(objPrice);
		objProductOrServiceUnitCost.setPriceType(strPriceType);
		objProductOrServiceUnitCost.setFromValue(strFormValue);
		objProductOrServiceUnitCost.setToValue(strToValue);
		objProductOrServiceUnitCost.setRangeType(strRangeType);
		objProductOrServiceUnitCost.setRangeUnits(objRangeUnits);
		setProductOrServiceUnitCost(objProductOrServiceUnitCost);
	}
	
	/**
	 * Set Product/Service Unit Cost   (CP)
	 * This field contains the cost per unit either in monetary amount or in points.
	 * @param objProductOrServiceUnitCost - object of product or service unit cost.
	 */ 
	public void setProductOrServiceUnitCost(CP objProductOrServiceUnitCost)
	{
		setDataType(1967, objProductOrServiceUnitCost);
	}

	/**
	 * Retrieve Number of Items per Unit   (NM)   
	 * This field is about Number of items in each unit – for Services, this should be set to 1.
	 * @return NM - object of Number of Items per units.
	 */
	public NM getNumberOfItemsPerUnit()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1968);
		if(objDataCollection != null) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Number of Items per Unit   (NM)   
	 * This field is about Number of items in each unit – for Services, this should be set to 1.
	 * @param strNumberOfItemsPerUnit - string of Number of Items per unit.
	 */ 
	public void setNumbetOfItemsPerUnit(String strNumberOfItemsPerUnit)
	{
		NM objNumberOfItemsPerUnit = (NM)getDataElement(1968);
		objNumberOfItemsPerUnit.setValue(strNumberOfItemsPerUnit);
		setNumbetOfItemsPerUnit(objNumberOfItemsPerUnit);
	}
	
	/**
	 * Set Number of Items per Unit   (NM)   
	 * This field is about Number of items in each unit – for Services, this should be set to 1.
	 * @param objNumberOfItemsPerUnit - object of Number of Items per unit.
	 */ 
	public void setNumbetOfItemsPerUnit(NM objNumberOfItemsPerUnit)
	{
		setDataType(1968, objNumberOfItemsPerUnit);
	}
	
	/**
	 * Retrieve Product/Service Gross Amount   (CP)
	 * This field contains the Product/Service Quantity * Product/Service Unit Cost.
	 * @return CP - object of Product or Service Gross Amount.
	 */
	public CP getProductOrServiceGrossAmount()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1969);
		if(objDataCollection != null) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Product/Service Gross Amount   (CP)
	 * This field contains the Product/Service Quantity * Product/Service Unit Cost.
	 * @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 setProductOrServiceGrossAmount(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objProductOrServiceGrossAmount = (CP)getDataElement(1969);
		objProductOrServiceGrossAmount.setPrice(objPrice);
		objProductOrServiceGrossAmount.setPriceType(strPriceType);
		objProductOrServiceGrossAmount.setFromValue(strFormValue);
		objProductOrServiceGrossAmount.setToValue(strToValue);
		objProductOrServiceGrossAmount.setRangeType(strRangeType);
		objProductOrServiceGrossAmount.setRangeUnits(objRangeUnits);
		setProductOrServiceGrossAmount(objProductOrServiceGrossAmount);
	}
	
	/**
	 * Set Product/Service Gross Amount   (CP)
	 * This field contains the Product/Service Quantity * Product/Service Unit Cost.
	 * @param objProductOrServiceGrossAmount - object of product or service Gross Amount.
	 */ 
	public void setProductOrServiceGrossAmount(CP objProductOrServiceGrossAmount)
	{
		setDataType(1969, objProductOrServiceGrossAmount);
	}
	
	/**
	 * Retrieve Product/Service Billed Amount   (CP)
	 * This field contains Amount that is being billed for this Product/Service Code on PSL, = Product/Service Gross Amount + sum of all Product/Service Adjustments on ADJ for this Product/Service Line Item..
	 * @return CP - object of Product or Service Billed Amount.
	 */
	public CP getProductOrServiceBilledAmount()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1970);
		if(objDataCollection != null) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Product/Service Billed Amount   (CP)
	 * This field contains Amount that is being billed for this Product/Service Code on PSL, = Product/Service Gross Amount + sum of all Product/Service Adjustments on ADJ for this Product/Service Line Item..
	 * @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 about the Type of range.
	 */ 
	public void setProductOrServiceBilledAmount(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objProductOrServiceBilledAmount = (CP)getDataElement(1970);
		objProductOrServiceBilledAmount.setPrice(objPrice);
		objProductOrServiceBilledAmount.setPriceType(strPriceType);
		objProductOrServiceBilledAmount.setFromValue(strFormValue);
		objProductOrServiceBilledAmount.setToValue(strToValue);
		objProductOrServiceBilledAmount.setRangeType(strRangeType);
		objProductOrServiceBilledAmount.setRangeUnits(objRangeUnits);
		setProductOrServiceBilledAmount(objProductOrServiceBilledAmount);
	}
	
	/**
	 * Set Product/Service Billed Amount   (CP)
	 * This field contains Amount that is being billed for this Product/Service Code on PSL, = Product/Service Gross Amount + sum of all Product/Service Adjustments on ADJ for this Product/Service Line Item..
	 * @param objProductOrServiceBilledAmount - object of product or service Billed Amount.
	 */ 
	public void setProductOrServiceBilledAmount(CP objProductOrServiceBilledAmount)
	{
		setDataType(1970, objProductOrServiceBilledAmount);
	}
	
	/**
	 * Retrieve Product/Service Clarification Code Type   (CWE)   
	 * This field is about Additional codes describing the Product/Service Code on PSL.
	 * @return ISingleCollection<CWE> - list of object of Product or service clarification code type. 
	 */
	public ISingleCollection<CWE> getProductOrServiceClarificationCodeType()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1971);
		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 Product/Service Clarification Code Type   (CWE)   
	 * This field is about Additional codes describing the Product/Service Code on PSL.
	 * @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 addProductOrServiceClarificationCodeType(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 objProductOrServiceClarificationCodeType  = (CWE)getDataElement(1971);
		objProductOrServiceClarificationCodeType.setIdentifier(strIdentifier);
		objProductOrServiceClarificationCodeType.setText(strText);
		objProductOrServiceClarificationCodeType.setNameOfCodingSystem(strNameOfCodingSystem);
		objProductOrServiceClarificationCodeType.setAlternateIdentifier(strAlternateIdentifier);
		objProductOrServiceClarificationCodeType.setAlternateText(strAlternateText);
		objProductOrServiceClarificationCodeType.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objProductOrServiceClarificationCodeType.setCodingSystemVersionID(strCodingSystemVersionID);
		objProductOrServiceClarificationCodeType.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objProductOrServiceClarificationCodeType.setOriginalText(strOriginalText);
		objProductOrServiceClarificationCodeType.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objProductOrServiceClarificationCodeType.setSecondAlternateText(strSecondAlternateText);
		objProductOrServiceClarificationCodeType.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objProductOrServiceClarificationCodeType.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objProductOrServiceClarificationCodeType.setCodingSystemOID(strCodingSystemOID);
		objProductOrServiceClarificationCodeType.setValueSetOID(strValueSetOID);
		objProductOrServiceClarificationCodeType.setValueSetVersionID(strValueSetVersionID);
		objProductOrServiceClarificationCodeType.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objProductOrServiceClarificationCodeType.setAlternateValueSetOID(strAlternateValueSetOID);
		objProductOrServiceClarificationCodeType.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objProductOrServiceClarificationCodeType.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objProductOrServiceClarificationCodeType.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objProductOrServiceClarificationCodeType.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		addProductOrServiceClarificationCodeType(objProductOrServiceClarificationCodeType);
	}
	
	/**
	 * Set Product/Service Clarification Code Type   (CWE)   
	 * This field is about Additional codes describing the Product/Service Code on PSL.
	 * @param objProductOrServiceClarificationCodeType - object of Product or Service Clarification Code Type  .
	 */
	public void addProductOrServiceClarificationCodeType(CWE objProductOrServiceClarificationCodeType)
	{
		setDataType(1971, objProductOrServiceClarificationCodeType);
	}
	
	/**
	 * Set Product/Service Clarification Code Type   (CWE)   
	 * This field is about Additional codes describing the Product/Service Code on PSL.
	 * @param objProductOrServiceClarificationCodeType - list of object of Product or Service Clarification Code Type  .
	 */
	@SuppressWarnings("unchecked")
	public void setProductOrServiceClarificationCodeType(ISingleCollection<CWE> objProductOrServiceClarificationCodeType)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objProductOrServiceClarificationCodeType;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1971,objCollection);
	}
	
	/**
	 * retrieve Product/Service Clarification Code Value   (ST)
	 * This field is Actual value for Product/Service Clarification Code Type.
	 * @param Isinglecollection<ST> - list of object of Product or Service Clarification Code value.
	 */
	public ISingleCollection<ST> getProductOrServiceClarificationCodeValue()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1972);
		ISingleCollection<ST> objDataList = new SingleCollection<ST>();
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				ST objST = (ST)objDataType;
				objDataList.add(objST);
			}
		}
		return objDataList;
	}
	
	/**
	 * Set Product/Service Clarification Code Value   (ST)   
	 * This field is about : Additional codes describing the Product/Service Code on PSL.
	 * @param strProductOrServiceClarificationCodeValue - string of Product or service clarification code value.
	 */ 
	public void addProductOrServiceClarificationCodeValue(String strProductOrServiceClarificationCodeValue)
	{
		ST objProductOrServiceClarificationCodeValue  = (ST)getDataElement(1972);
		objProductOrServiceClarificationCodeValue.setValue(strProductOrServiceClarificationCodeValue);
		addProductOrServiceClarificationCodeValue(objProductOrServiceClarificationCodeValue);
	}
	
	/**
	 * Set Product/Service Clarification Code Value   (ST)   
	 * This field is about : Additional codes describing the Product/Service Code on PSL.
	 * @param objProductOrServiceClarificationCodeValue - object of Product or Service Clarification Code Value  .
	 */
	public void addProductOrServiceClarificationCodeValue(ST objProductOrServiceClarificationCodeValue)
	{
		setDataType(1972, objProductOrServiceClarificationCodeValue);
	}
	
	/**
	 * Set Product/Service Clarification Code Value   (ST)   
	 * This field is about : Additional codes describing the Product/Service Code on PSL.
	 * @param objProductOrServiceClarificationCodeValue - list of object of Product or Service Clarification Code Value  .
	 */
	@SuppressWarnings("unchecked")
	public void setProductOrServiceClarificationCodeValue(ISingleCollection<ST> objProductOrServiceClarificationCodeValue)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objProductOrServiceClarificationCodeValue;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1972,objCollection);
	}
	
	/**
	 * Retrieve Health Document Reference Identifier   (EI)   
	 * This field is about Health Documents (electronic or paper) that support this Product/Service Line Item. 
	 * @return ISinglecollection<EI> - list of object of Health document reference Identifier.
	 */
	public ISingleCollection<EI> getHealthDocumentreferenceIdentifier()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1973);
		ISingleCollection<EI> objDataList = new SingleCollection<EI>();
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				EI objEI = (EI)objDataType;
				objDataList.add(objEI);
			}
		}
		return objDataList;
	}
	
	/**
	 * Set Health Document Reference Identifier   (EI)   
	 * This field is about Health Documents (electronic or paper) that support this Product/Service Line Item. 
	 * @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 addHealthDocumentReferenceIdentifier(String strEntityIdentifier,String strNamespaceID,String strUniversalID,String strUniversalIDType)
	{
		EI objHealthDocumentReferenceIdentifier = (EI)getDataElement(1973);
		objHealthDocumentReferenceIdentifier.setEntityIdentifier(strEntityIdentifier);
		objHealthDocumentReferenceIdentifier.setNamespaceId(strNamespaceID);
		objHealthDocumentReferenceIdentifier.setUniversalId(strUniversalID);
		objHealthDocumentReferenceIdentifier.setUniversalIdType(strUniversalIDType);
		addHealthDocumentReferenceIdentifier(objHealthDocumentReferenceIdentifier);
	}
	
	/**
	 * Set Health Document Reference Identifier   (EI)   
	 * This field is about Health Documents (electronic or paper) that support this Product/Service Line Item. 
	 * @param objHealthDocumentReferenceIdentifier - object of Health document reference Identifier.
	 */
	public void addHealthDocumentReferenceIdentifier(EI objHealthDocumentReferenceIdentifier)
	{
		setDataType(1973, objHealthDocumentReferenceIdentifier);
	}
	
	/**
	 * Set Health Document Reference Identifier   (EI)   
	 * This field is about Health Documents (electronic or paper) that support this Product/Service Line Item. 
	 * @param objHealthDocumentReferenceIdentifier - list of object of Health document reference Identifier.
	 */
	@SuppressWarnings("unchecked")
	public void setHealthDocumentReferenceIdentifier(ISingleCollection<EI> objHealthDocumentReferenceIdentifier)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objHealthDocumentReferenceIdentifier;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1973,objCollection);
	}
	
	/**
	 * Retrieve Processing Consideration Code   (CWE)   
	 * This field is about Codes indicating special processing requested of Payer for this Product/Service Line Item .
	 * @return ISingleCollection<CWE> - list of object of Processing Consideration code. 
	 */
	public ISingleCollection<CWE> getProcessingConsiderationCode()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1974);
		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 Processing Consideration Code   (CWE)   
	 * This field is about Codes indicating special processing requested of Payer for this Product/Service Line Item .
	 * @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 addProcessingConsiderationCode(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 objProcessingConsiderationCode  = (CWE)getDataElement(1974);
		objProcessingConsiderationCode.setIdentifier(strIdentifier);
		objProcessingConsiderationCode.setText(strText);
		objProcessingConsiderationCode.setNameOfCodingSystem(strNameOfCodingSystem);
		objProcessingConsiderationCode.setAlternateIdentifier(strAlternateIdentifier);
		objProcessingConsiderationCode.setAlternateText(strAlternateText);
		objProcessingConsiderationCode.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objProcessingConsiderationCode.setCodingSystemVersionID(strCodingSystemVersionID);
		objProcessingConsiderationCode.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objProcessingConsiderationCode.setOriginalText(strOriginalText);
		objProcessingConsiderationCode.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objProcessingConsiderationCode.setSecondAlternateText(strSecondAlternateText);
		objProcessingConsiderationCode.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objProcessingConsiderationCode.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objProcessingConsiderationCode.setCodingSystemOID(strCodingSystemOID);
		objProcessingConsiderationCode.setValueSetOID(strValueSetOID);
		objProcessingConsiderationCode.setValueSetVersionID(strValueSetVersionID);
		objProcessingConsiderationCode.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objProcessingConsiderationCode.setAlternateValueSetOID(strAlternateValueSetOID);
		objProcessingConsiderationCode.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objProcessingConsiderationCode.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objProcessingConsiderationCode.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objProcessingConsiderationCode.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		addProcessingConsiderationCode(objProcessingConsiderationCode);
	}
	
	/**
	 * Set Processing Consideration Code   (CWE)   
	 * This field is about Codes indicating special processing requested of Payer for this Product/Service Line Item .
	 * @param objProcessingConsiderationCode - object of Processing Consideration code .
	 */
	public void addProcessingConsiderationCode(CWE objProcessingConsiderationCode)
	{
		setDataType(1974, objProcessingConsiderationCode);
	}
	
	/**
	 * Set Processing Consideration Code   (CWE)   
	 * This field is about Codes indicating special processing requested of Payer for this Product/Service Line Item .
	 * @param objProcessingConsiderationCode - list of object of Processing Consideration code.
	 */
	@SuppressWarnings("unchecked")
	public void setProcessingConsiderationCode(ISingleCollection<CWE> objProcessingConsiderationCode)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objProcessingConsiderationCode;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(1974,objCollection);
	}
	
	/**
	 * Retrieve Restricted Disclosure Indicator   (ID)   
	 * This field is about Set to "Yes" if information on this invoice should be treated with increased confidentiality/security. 
	 * @return ID - object of Restricted Disclosure indicator.
	 */
	public ID getRestrictedDusclosureIndicator()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1975);
		if(objDataCollection != null) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set  Restricted Disclosure Indicator   (ID)   
	 * This field is about Set to "Yes" if information on this invoice should be treated with increased confidentiality/security. 
	 * @param ID - object of Restricted Disclosure indicator.
	 */
	public void setRestrictedDusclosureIndicator(String strRestrictedDusclosureIndicator)
	{
		ID objRestrictedDusclosureIndicator = (ID)getDataElement(1975);
		objRestrictedDusclosureIndicator.setValue(strRestrictedDusclosureIndicator);
		setRestrictedDusclosureIndicator(objRestrictedDusclosureIndicator);
	}
	/**
	 * Set  Restricted Disclosure Indicator   (ID)   
	 * This field is about Set to "Yes" if information on this invoice should be treated with increased confidentiality/security. 
	 * @param ID - object of Restricted Disclosure indicator.
	 */
	public void setRestrictedDusclosureIndicator(ID objRestrictedDusclosureIndicator)
	{
		setDataType(1975, objRestrictedDusclosureIndicator);
	}
	
	/**
	 * Retrieve Related Product/Service Code Indicator   (CWE)   
	 * This field is about Two Product /Service Line Items (PSL-7) may be in a relation to each other. 
	 * @return CWE - object of Related product or service code indicator.
	 */
	public CWE getRelatedProductOrServiceCodeIndicator()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1976);
		if(objDataCollection != null) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	/**
	 * Set Related Product/Service Code Indicator   (CWE)   
	 * This field is about Two Product /Service Line Items (PSL-7) may be in a relation to each other. 
	 * @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 setRelatedProductOrServiceCodeIndicator(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 objRelatedProductOrServiceCodeIndicator  = (CWE)getDataElement(1974);
		objRelatedProductOrServiceCodeIndicator.setIdentifier(strIdentifier);
		objRelatedProductOrServiceCodeIndicator.setText(strText);
		objRelatedProductOrServiceCodeIndicator.setNameOfCodingSystem(strNameOfCodingSystem);
		objRelatedProductOrServiceCodeIndicator.setAlternateIdentifier(strAlternateIdentifier);
		objRelatedProductOrServiceCodeIndicator.setAlternateText(strAlternateText);
		objRelatedProductOrServiceCodeIndicator.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objRelatedProductOrServiceCodeIndicator.setCodingSystemVersionID(strCodingSystemVersionID);
		objRelatedProductOrServiceCodeIndicator.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objRelatedProductOrServiceCodeIndicator.setOriginalText(strOriginalText);
		objRelatedProductOrServiceCodeIndicator.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objRelatedProductOrServiceCodeIndicator.setSecondAlternateText(strSecondAlternateText);
		objRelatedProductOrServiceCodeIndicator.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objRelatedProductOrServiceCodeIndicator.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objRelatedProductOrServiceCodeIndicator.setCodingSystemOID(strCodingSystemOID);
		objRelatedProductOrServiceCodeIndicator.setValueSetOID(strValueSetOID);
		objRelatedProductOrServiceCodeIndicator.setValueSetVersionID(strValueSetVersionID);
		objRelatedProductOrServiceCodeIndicator.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objRelatedProductOrServiceCodeIndicator.setAlternateValueSetOID(strAlternateValueSetOID);
		objRelatedProductOrServiceCodeIndicator.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objRelatedProductOrServiceCodeIndicator.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objRelatedProductOrServiceCodeIndicator.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objRelatedProductOrServiceCodeIndicator.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		setRelatedProductOrServiceCodeIndicator(objRelatedProductOrServiceCodeIndicator);
	}
	/**
	 * Set Related Product/Service Code Indicator   (CWE)   
	 * This field is about Two Product /Service Line Items (PSL-7) may be in a relation to each other. 
	 * @param CWE - object of Related product or service code indicator.
	 */
	public void setRelatedProductOrServiceCodeIndicator(CWE objRelatedProductOrServiceCodeIndicator)
	{
		setDataType(1976, objRelatedProductOrServiceCodeIndicator);
	}
	
	/**
	 * Retrieve Product/Service Amount for Physician   (CP)   
	 * This field is about Monetary Amount of product/service item which is for the physician.
	 * @return CP - object of Product or service Amount for Physician
	 */
	public CP getProductOrServiceAmountForPhysician()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1977);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Product/Service Amount for Physician   (CP)   
	 * This field is about Monetary Amount of product/service item which is for the physician.
	 * @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 setProductOrServiceAmountForPhysician(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objProductOrServiceAmountForPhysician = (CP)getDataElement(1977);
		objProductOrServiceAmountForPhysician.setPrice(objPrice);
		objProductOrServiceAmountForPhysician.setPriceType(strPriceType);
		objProductOrServiceAmountForPhysician.setFromValue(strFormValue);
		objProductOrServiceAmountForPhysician.setToValue(strToValue);
		objProductOrServiceAmountForPhysician.setRangeType(strRangeType);
		objProductOrServiceAmountForPhysician.setRangeUnits(objRangeUnits);
		objProductOrServiceAmountForPhysician.setRangeType(strRangeType);
		setProductOrServiceAmountForPhysician(objProductOrServiceAmountForPhysician);
	}
	/**
	 * Set Product/Service Amount for Physician   (CP)   
	 * This field is about Monetary Amount of product/service item which is for the physician.
	 * @param objProductOrServiceAmountForPhysician - object of Product Or Service Amount for Physician .
	 */ 
	public void setProductOrServiceAmountForPhysician(CP objProductOrServiceAmountForPhysician)
	{
		setDataType(1977, objProductOrServiceAmountForPhysician);
	}
	
	/**
	 * Retrieve Product/Service Cost Factor   (NM)   
	 * This field is about Factor to increase the billed amount.
	 * @return NM - object of Product or service cost factor.
	 */
	public NM getProductOrServiceCostFactor()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1978);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieve Product/Service Cost Factor   (NM)   
	 * This field is about Factor to increase the billed amount.
	 * @return NM - object of Product or service cost factor.
	 */
	public void setProductOrServiceCostFactor(String strProductOrServiceCostFactor)
	{
		NM objProductOrServiceCostFactor = (NM)getDataElement(1978);
		objProductOrServiceCostFactor.setValue(strProductOrServiceCostFactor);
		setProductOrServiceCostFactor(objProductOrServiceCostFactor);
	}
	
	/**
	 * Retrieve Product/Service Cost Factor   (NM)   
	 * This field is about Factor to increase the billed amount.
	 * @return NM - object of Product or service cost factor.
	 */
	public void setProductOrServiceCostFactor(NM objProductOrServiceCostFactor)
	{
		setDataType(1978, objProductOrServiceCostFactor);
	}
	
	/**
	 * Retrieve Cost Center   (CX)   
	 * Cost centers are organizational units or activities that provide goods and services. In this context, it would be the department which delivered 
	 * the Service/Product Line Item, 
	 * @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. In this context, it would be the department which delivered 
	 * the Service/Product Line Item, 
	 * @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 addCostCenter (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 CostCenter  = (CX)getDataElement(1933);
		CostCenter.setIdNumber(strIDNumber);
		CostCenter.setCheckDigit(strCheckDigit);
		CostCenter.setCheckDigitScheme(strCheckDigitScheme);
		CostCenter.setAssigningAuthority(objAssigningAuthority);
		CostCenter.setIdentifierTypeCode(strIdentifierTypeCode);
		CostCenter.setAssigningFacility(objAssigningFacility);
		CostCenter.setEffectiveDate(strEffectiveDate);
		CostCenter.setExpirationDate(strExpirationDate);
		CostCenter.setAssigningJurisdiction(objAssigningJurisdiction);
		CostCenter.setAssigningAgencyOrDepartment(objAssigningAgencyOrDepartment); 
		CostCenter.setSecurityCheck(strCheckDigit);
		CostCenter.setSecurityCheckScheme(strSecurityCheckScheme);
		setCostCenter(CostCenter);

	} 

	/** Set Cost Center   (CX)   .
	 * Cost centers are organizational units or activities that provide goods and services. In this context, it would be 
	 * the department which delivered the Service/Product Line Item, 
	 * @param objCostCenter object of Patient IdentifierList. 
	 */ 
	public void setCostCenter(CX objCostCenter)
	{
		addDataType(1933,objCostCenter);

	}
	
	/**
	 * Retrieve Billing Period (DR)
	 * This field is about Begin and end of billing period.
	 * @return DR - object of Billing Period.
	 */
	public DR getBillingPeriod()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1980);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DR)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieve Billing Period (DR)
	 * This field is about Begin and end of billing period.
	 * @param strRangeStartDateOrTime - The first component contains the earliest date/time (time stamp) in the specified range.
	 * @param strRangeEndDateOrTime - The second component contains the latest date/time in the specified range. Note that the DTM (time stamp) data type 
	 * allows the specification of precision.
	 */
	public void setBillingPeriod(DTM objRangeStartDateOrTime,DTM objRangeEndDateOrTime)
	{
		DR objBillingPeriod = (DR)getDataElement(1980);
		objBillingPeriod.setRangeEndDateTime(objRangeStartDateOrTime);
		objBillingPeriod.setRangeEndDateTime(objRangeEndDateOrTime);
		setBillingPeriod(objBillingPeriod);
	}
	
	/**
	 * Retrieve Billing Period (DR)
	 * This field is about Begin and end of billing period.
	 * @param DR - object of Billing Period.
	 */
	public void setBillingPeriod(DR objBillingPeriod)
	{
		setDataType(1980, objBillingPeriod);
	}
	
	/**
	 * retrieve Days without Billing   (NM)   
	 * This field is about Number of Days for which no invoice is created.
	 * @return NM - object of Days without billing.
	 */
	public NM getDaysWithoutBilling()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1981);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Days without Billing   (NM)   
	 * This field is about Number of Days for which no invoice is created.
	 * @param
	 */
	public void setDaysWithoutBilling(String strDaysWithoutBilling)
	{
		NM objDaysWithoutBilling = (NM)getDataElement(1981);
		objDaysWithoutBilling.setValue(strDaysWithoutBilling);
		setDaysWithoutBilling(objDaysWithoutBilling);
	}
	
	/**
	 * Set Days without Billing   (NM)   
	 * This field is about Number of Days for which no invoice is created.
	 * @param
	 */
	public void setDaysWithoutBilling(NM objDaysWithoutBilling)
	{
		setDataType(1981, objDaysWithoutBilling);
	}
	
	/**
	 * retrieve Session-No   (NM)   
	 * This field is about Several line items may be grouped to a session.
	 * @return NM - object of Session No.
	 */
	public NM getSession_No()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1982);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Session-No   (NM)   
	 * This field is about Several line items may be grouped to a session.
	 * @param strSession_No - string of Session no.
	 */
	public void setSession_No(String strSession_No)
	{
		NM objSession_No = (NM)getDataElement(1982);
		objSession_No.setValue(strSession_No);
		setSession_No(objSession_No);
	}
	
	/**
	 * Set Session-No   (NM)   
	 * This field is about Several line items may be grouped to a session.
	 * @param objSession_No - object of Session no.
	 */
	public void setSession_No(NM objSession_No)
	{
		setDataType(1982, objSession_No);
	}
	
	/**
	 * Retrieve Executing Physician ID   (XCN)   
	 * This field is about ID of the physician who is providing the Service, e.g., executing the radiology-exam (EAN ID = European Article Numbering).
	 * @return XCN - object of Executing Physician ID.
	 */
	public XCN getExecutingPhysicianID()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1983);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XCN)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Executing Physician ID (XCN)
	 * This field is about ID of the physician who is providing the Service, e.g., executing the radiology-exam (EAN ID = European Article Numbering).
	 * @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 setExecutingPhysicianID(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 objExecutingPhysicianID = (XCN)getDataElement(1983);
		objExecutingPhysicianID.setIdNumber(strIDNumber);
		objExecutingPhysicianID.setFamilyName(objFamilyName);
		objExecutingPhysicianID.setGivenName(strGivenName);
		objExecutingPhysicianID.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		objExecutingPhysicianID.setSuffix(strSuffix);
		objExecutingPhysicianID.setPrefix(strPrefix);
		objExecutingPhysicianID.setSourceTable(objSourceTable);
		objExecutingPhysicianID.setAssigningAuthority(objAssigningAuthority);
		objExecutingPhysicianID.setNameTypeCode(strNameTypeCode);
		objExecutingPhysicianID.setIdentifierCheckDigit(strIdentifierCheckDigit);
		objExecutingPhysicianID.setCheckDigitScheme(strCheckDigitScheme);
		objExecutingPhysicianID.setIdentifierTypeCode(strIdentifierTypeCode);
		objExecutingPhysicianID.setAssigningFacility(objAssigningFacility);
		objExecutingPhysicianID.setNameRepresentationCode(strNameRepresentationCode);
		objExecutingPhysicianID.setNameContext(objNameContext);
		objExecutingPhysicianID.setNameAssemblyOrder(strNameAssemblyOrder);
		objExecutingPhysicianID.setEffectiveDate(strEffectiveDate);
		objExecutingPhysicianID.setExpirationDate(strExpirationDate);
		objExecutingPhysicianID.setProfessionalSuffix(strProfessionalSuffix);
		objExecutingPhysicianID.setAssigningJurisdiction(objAssigningJurisdiction);
		objExecutingPhysicianID.setAssigningAgencyOrDepartment(objAssigningAgencyOrDepratment); 
		objExecutingPhysicianID.setSecurityCheck(strSecurityCheck);
		objExecutingPhysicianID.setSecurityCheckScheme(strSecurityCheckScheme);
		setExecutingPhysicianID(objExecutingPhysicianID);
	}
	
	/**
	 * Set Executing Physician ID (XCN)
	 * This field is about ID of the physician who is providing the Service, e.g., executing the radiology-exam (EAN ID = European Article Numbering).
	 * @param XCN - object of Executing Physician ID. 
	 */
	public void setExecutingPhysicianID(XCN objExecutingPhysicianID)
	{
		setDataType(1983, objExecutingPhysicianID);
	}
	
	/**
	 * Retrieve Responsible Physician ID   (XCN)   
	 * This field is about ID of the physician who is responsible for the Service.
	 * @return XCN - object of Responsible Physician ID.
	 */
	public XCN getResponsiblePhysicianID()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1983);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (XCN)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Responsible Physician ID (XCN)
	 * This field is about ID of the physician who is responsible for the Service.
	 * @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 setResponsiblePhysicianID(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 objResponsiblePhysicianID = (XCN)getDataElement(1983);
		objResponsiblePhysicianID.setIdNumber(strIDNumber);
		objResponsiblePhysicianID.setFamilyName(objFamilyName);
		objResponsiblePhysicianID.setGivenName(strGivenName);
		objResponsiblePhysicianID.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		objResponsiblePhysicianID.setSuffix(strSuffix);
		objResponsiblePhysicianID.setPrefix(strPrefix);
		objResponsiblePhysicianID.setSourceTable(objSourceTable);
		objResponsiblePhysicianID.setAssigningAuthority(objAssigningAuthority);
		objResponsiblePhysicianID.setNameTypeCode(strNameTypeCode);
		objResponsiblePhysicianID.setIdentifierCheckDigit(strIdentifierCheckDigit);
		objResponsiblePhysicianID.setCheckDigitScheme(strCheckDigitScheme);
		objResponsiblePhysicianID.setIdentifierTypeCode(strIdentifierTypeCode);
		objResponsiblePhysicianID.setAssigningFacility(objAssigningFacility);
		objResponsiblePhysicianID.setNameRepresentationCode(strNameRepresentationCode);
		objResponsiblePhysicianID.setNameContext(objNameContext);
		objResponsiblePhysicianID.setNameAssemblyOrder(strNameAssemblyOrder);
		objResponsiblePhysicianID.setEffectiveDate(strEffectiveDate);
		objResponsiblePhysicianID.setExpirationDate(strExpirationDate);
		objResponsiblePhysicianID.setProfessionalSuffix(strProfessionalSuffix);
		objResponsiblePhysicianID.setAssigningJurisdiction(objAssigningJurisdiction);
		objResponsiblePhysicianID.setAssigningAgencyOrDepartment(objAssigningAgencyOrDepratment); 
		objResponsiblePhysicianID.setSecurityCheck(strSecurityCheck);
		objResponsiblePhysicianID.setSecurityCheckScheme(strSecurityCheckScheme);
		setResponsiblePhysicianID(objResponsiblePhysicianID);
	}
	
	/**
	 * Set Responsible Physician ID (XCN)
	 * This field is about ID of the physician who is responsible for the Service.
	 * @param XCN - object of Responsible Physician ID. 
	 */
	public void setResponsiblePhysicianID(XCN objResponsiblePhysicianID)
	{
		setDataType(1983, objResponsiblePhysicianID);
	}
	
	/**
	 * retrieve Role Executing Physician   (CWE)   
	 * This field is about Account role of the physician, for example only billing for the professional part, the technical part or both.   
	 * @return CWE - object of Role Executing Physician.
	 */
	public CWE getRoleExecutingPhysician()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1985);
		if(objDataCollection != null) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Role Executing Physician   (CWE)   
	 * This field is about Account role of the physician, for example only billing for the professional part, the technical part or both.  
	 * @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 setRoleExecutingPhysician(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 objRoleExecutingPhysician  = (CWE)getDataElement(1985);
		objRoleExecutingPhysician.setIdentifier(strIdentifier);
		objRoleExecutingPhysician.setText(strText);
		objRoleExecutingPhysician.setNameOfCodingSystem(strNameOfCodingSystem);
		objRoleExecutingPhysician.setAlternateIdentifier(strAlternateIdentifier);
		objRoleExecutingPhysician.setAlternateText(strAlternateText);
		objRoleExecutingPhysician.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objRoleExecutingPhysician.setCodingSystemVersionID(strCodingSystemVersionID);
		objRoleExecutingPhysician.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objRoleExecutingPhysician.setOriginalText(strOriginalText);
		objRoleExecutingPhysician.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objRoleExecutingPhysician.setSecondAlternateText(strSecondAlternateText);
		objRoleExecutingPhysician.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objRoleExecutingPhysician.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objRoleExecutingPhysician.setCodingSystemOID(strCodingSystemOID);
		objRoleExecutingPhysician.setValueSetOID(strValueSetOID);
		objRoleExecutingPhysician.setValueSetVersionID(strValueSetVersionID);
		objRoleExecutingPhysician.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objRoleExecutingPhysician.setAlternateValueSetOID(strAlternateValueSetOID);
		objRoleExecutingPhysician.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objRoleExecutingPhysician.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objRoleExecutingPhysician.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objRoleExecutingPhysician.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		setRoleExecutingPhysician(objRoleExecutingPhysician);
	}
	
	/**
	 * Set Role Executing Physician   (CWE)   
	 * This field is about Account role of the physician, for example only billing for the professional part, the technical part or both.   
	 * @param objRoleExecutingPhysician - object of Role Executing Physician.
	 */
	public void setRoleExecutingPhysician(CWE objRoleExecutingPhysician)
	{
		setDataType(1985, objRoleExecutingPhysician);
	}
	
	/**
	 * retrieve Medical Role Executing Physician   (CWE)   
	 * This field is about The role of the Physician ("self-employed" or "employed").     
	 * @return CWE - object of Medical Role Executing Physician.
	 */
	public CWE getMedicalRoleExecutingPhysician()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1986);
		if(objDataCollection != null) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Medical Role Executing Physician   (CWE)   
	 * This field is about The role of the Physician ("self-employed" or "employed").  
	 * @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 setMedicalRoleExecutingPhysician(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 objMedicalRoleExecutingPhysician  = (CWE)getDataElement(1986);
		objMedicalRoleExecutingPhysician.setIdentifier(strIdentifier);
		objMedicalRoleExecutingPhysician.setText(strText);
		objMedicalRoleExecutingPhysician.setNameOfCodingSystem(strNameOfCodingSystem);
		objMedicalRoleExecutingPhysician.setAlternateIdentifier(strAlternateIdentifier);
		objMedicalRoleExecutingPhysician.setAlternateText(strAlternateText);
		objMedicalRoleExecutingPhysician.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objMedicalRoleExecutingPhysician.setCodingSystemVersionID(strCodingSystemVersionID);
		objMedicalRoleExecutingPhysician.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objMedicalRoleExecutingPhysician.setOriginalText(strOriginalText);
		objMedicalRoleExecutingPhysician.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objMedicalRoleExecutingPhysician.setSecondAlternateText(strSecondAlternateText);
		objMedicalRoleExecutingPhysician.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objMedicalRoleExecutingPhysician.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objMedicalRoleExecutingPhysician.setCodingSystemOID(strCodingSystemOID);
		objMedicalRoleExecutingPhysician.setValueSetOID(strValueSetOID);
		objMedicalRoleExecutingPhysician.setValueSetVersionID(strValueSetVersionID);
		objMedicalRoleExecutingPhysician.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objMedicalRoleExecutingPhysician.setAlternateValueSetOID(strAlternateValueSetOID);
		objMedicalRoleExecutingPhysician.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objMedicalRoleExecutingPhysician.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objMedicalRoleExecutingPhysician.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objMedicalRoleExecutingPhysician.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		setMedicalRoleExecutingPhysician(objMedicalRoleExecutingPhysician);
	}
	
	/**
	 * Set Medical Role Executing Physician   (CWE)   
	 * This field is about The role of the Physician ("self-employed" or "employed").     
	 * @param objMedicalRoleExecutingPhysician - object of Medical Role Executing Physician.
	 */
	public void setMedicalRoleExecutingPhysician(CWE objMedicalRoleExecutingPhysician)
	{
		setDataType(1986, objMedicalRoleExecutingPhysician);
	}
	
	/**
	 * retrieve Side of body   (CWE)   
	 * This field is about The role of the Physician ("self-employed" or "employed").     
	 * @return CWE - object of Side of body.
	 */
	public CWE getSideOfBody()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1987);
		if(objDataCollection != null) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Side of body   (CWE)   
	 * This field is about The role of the Physician ("self-employed" or "employed").  
	 * @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 setSideOfBody(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 objSideOfBody  = (CWE)getDataElement(1987);
		objSideOfBody.setIdentifier(strIdentifier);
		objSideOfBody.setText(strText);
		objSideOfBody.setNameOfCodingSystem(strNameOfCodingSystem);
		objSideOfBody.setAlternateIdentifier(strAlternateIdentifier);
		objSideOfBody.setAlternateText(strAlternateText);
		objSideOfBody.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		objSideOfBody.setCodingSystemVersionID(strCodingSystemVersionID);
		objSideOfBody.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		objSideOfBody.setOriginalText(strOriginalText);
		objSideOfBody.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		objSideOfBody.setSecondAlternateText(strSecondAlternateText);
		objSideOfBody.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		objSideOfBody.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		objSideOfBody.setCodingSystemOID(strCodingSystemOID);
		objSideOfBody.setValueSetOID(strValueSetOID);
		objSideOfBody.setValueSetVersionID(strValueSetVersionID);
		objSideOfBody.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		objSideOfBody.setAlternateValueSetOID(strAlternateValueSetOID);
		objSideOfBody.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		objSideOfBody.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		objSideOfBody.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		objSideOfBody.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		setSideOfBody(objSideOfBody);
	}
	
	/**
	 * Set Side of body   (CWE)   
	 * This field is about The role of the Physician ("self-employed" or "employed").     
	 * @param objSideOfBody - object of Side of body.
	 */
	public void setSideOfBody(CWE objSideOfBody)
	{
		setDataType(1987, objSideOfBody);
	}
	
	/**
	 * retrieve Number of TP's PP   (NM)   
	 * This field is about Cost of the service "professional part" expressed in "points".
	 * @return NM - object of Number of TP's PP .
	 */
	public NM getNumberOfTPsPP()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1988);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Number of TP's PP   (NM)
	 * This field is about Cost of the service "professional part" expressed in "points".
	 * @param strNumberOfTPsPP  - string of Number of TP's PP .
	 */
	public void setNumberOfTPsPP(String strNumberOfTPsPP )
	{
		NM objNumberOfTPsPP  = (NM)getDataElement(1988);
		objNumberOfTPsPP .setValue(strNumberOfTPsPP );
		setNumberOfTPsPP (objNumberOfTPsPP );
	}
	
	/**
	 * Set Number of TP's PP   (NM) 
	 * This field is about Cost of the service "professional part" expressed in "points".
	 * @param objNumberOfTPsPP  - object of Number of TP's PP .
	 */
	public void setNumberOfTPsPP(NM objNumberOfTPsPP )
	{
		setDataType(1988, objNumberOfTPsPP );
	}
	
	/**
	 * Retrieve TP-Value PP   (CP)   
	 * This field is about Monetary Value of one "point" for the professional part of the service.
	 * @return CP - object of TP-Value PP
	 */
	public CP getTP_ValuePP()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1989);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set TP-Value PP   (CP)   
	 * This field is about Monetary Value of one "point" for the professional part of the service.
	 * @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 setTP_ValuePP(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objTP_ValuePP = (CP)getDataElement(1989);
		objTP_ValuePP.setPrice(objPrice);
		objTP_ValuePP.setPriceType(strPriceType);
		objTP_ValuePP.setFromValue(strFormValue);
		objTP_ValuePP.setToValue(strToValue);
		objTP_ValuePP.setRangeType(strRangeType);
		objTP_ValuePP.setRangeUnits(objRangeUnits);
		objTP_ValuePP.setRangeType(strRangeType);
		setTP_ValuePP(objTP_ValuePP);
	}
	/**
	 * Set TP-Value PP   (CP)   
	 * This field is about Monetary Value of one "point" for the professional part of the service.
	 * @param objTP_ValuePP - object of TP-Value PP .
	 */ 
	public void setTP_ValuePP(CP objTP_ValuePP)
	{
		setDataType(1989, objTP_ValuePP);
	}
	
	/**
	 * retrieve Internal Scaling Factor PP   (NM)   
	 * This field is about Internal Scaling Factor for the amount of the professional part of the service.
	 * @return NM - object of Internal Scaling Factor PP .
	 */
	public NM getInternalScalingFactorPP()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1990);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Internal Scaling Factor PP   (NM)
	 * This field is about Internal Scaling Factor for the amount of the professional part of the service.
	 * @param strInternalScalingFactorPP  - string of Internal Scaling Factor PP .
	 */
	public void setInternalScalingFactorPP(String strInternalScalingFactorPP )
	{
		NM objInternalScalingFactorPP  = (NM)getDataElement(1990);
		objInternalScalingFactorPP .setValue(strInternalScalingFactorPP );
		setInternalScalingFactorPP (objInternalScalingFactorPP );
	}
	
	/**
	 * Set Internal Scaling Factor PP   (NM) 
	 * This field is about Internal Scaling Factor for the amount of the professional part of the service.
	 * @param objInternalScalingFactorPP  - object of Internal Scaling Factor PP .
	 */
	public void setInternalScalingFactorPP(NM objInternalScalingFactorPP )
	{
		setDataType(1990, objInternalScalingFactorPP );
	}
	
	/**
	 * retrieve External Scaling Factor PP   (NM)   
	 * This field is about External Scaling Factor for the amount of the professional part of the service.
	 * @return NM - object of External Scaling Factor PP .
	 */
	public NM getExternalScalingFactorPP()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1991);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set External Scaling Factor PP   (NM)
	 * This field is about External Scaling Factor for the amount of the professional part of the service.
	 * @param strExternalScalingFactorPP  - string of External Scaling Factor PP .
	 */
	public void setExternalScalingFactorPP(String strExternalScalingFactorPP )
	{
		NM objExternalScalingFactorPP  = (NM)getDataElement(1991);
		objExternalScalingFactorPP .setValue(strExternalScalingFactorPP );
		setExternalScalingFactorPP (objExternalScalingFactorPP );
	}
	
	/**
	 * Set External Scaling Factor PP   (NM) 
	 * This field is about External Scaling Factor for the amount of the professional part of the service.
	 * @param objExternalScalingFactorPP  - object of External Scaling Factor PP .
	 */
	public void setExternalScalingFactorPP(NM objExternalScalingFactorPP )
	{
		setDataType(1991, objExternalScalingFactorPP );
	}
	
	/**
	 * Retrieve Amount PP   (CP)   
	 * This field is about Total Amount for the professional part of this service.
	 * @return CP - object of Amount PP
	 */
	public CP getAmountPP()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1992);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Amount PP   (CP)   
	 * This field is about Total Amount for the professional part of this service.
	 * @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 setAmountPP(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objAmountPP = (CP)getDataElement(1992);
		objAmountPP.setPrice(objPrice);
		objAmountPP.setPriceType(strPriceType);
		objAmountPP.setFromValue(strFormValue);
		objAmountPP.setToValue(strToValue);
		objAmountPP.setRangeType(strRangeType);
		objAmountPP.setRangeUnits(objRangeUnits);
		objAmountPP.setRangeType(strRangeType);
		setAmountPP(objAmountPP);
	}
	/**
	 * Set Amount PP   (CP)   
	 * This field is about Total Amount for the professional part of this service.
	 * @param objAmountPP - object of Amount PP .
	 */ 
	public void setAmountPP(CP objAmountPP)
	{
		setDataType(1992, objAmountPP);
	}
	
	/**
	 * retrieve Number of TP's Technical Part   (NM)   
	 * This field is about Cost of the service (Technical Part) expressed in "points".
	 * @return NM - object of Number of TP's Technical Part .
	 */
	public NM getNumberOfTPsTechnicalPart()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1993);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Number of TP's Technical Part   (NM)
	 * This field is about Cost of the service (Technical Part) expressed in "points".
	 * @param strNumberOfTPsTechnicalPart - string of Number of TP's Technical Part .
	 */
	public void setNumberOfTPsTechnicalPart(String strNumberOfTPsTechnicalPart)
	{
		NM objNumberOfTPsTechnicalPart = (NM)getDataElement(1993);
		objNumberOfTPsTechnicalPart.setValue(strNumberOfTPsTechnicalPart);
		setNumberOfTPsTechnicalPart(objNumberOfTPsTechnicalPart);
	}
	
	/**
	 * Set Number of TP's Technical Part   (NM) 
	 * This field is about Cost of the service (Technical Part) expressed in "points".
	 * @param objNumberOfTPsTechnicalPart - object of Number of TP's Technical Part .
	 */
	public void setNumberOfTPsTechnicalPart(NM objNumberOfTPsTechnicalPart)
	{
		setDataType(1993, objNumberOfTPsTechnicalPart);
	}
	
	/**
	 * Retrieve TP-Value Technical Part   (CP)   
	 * This field is about Monetary Value of one "point" for the technical part of the service.
	 * @return CP - object of TP-Value Technical Part
	 */
	public CP getTP_ValueTechnicalPart()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1994);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set TP-Value Technical Part   (CP)   
	 * This field is about Monetary Value of one "point" for the technical part of the service.
	 * @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 setTP_ValueTechnicalPart(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objTP_ValueTechnicalPart = (CP)getDataElement(1994);
		objTP_ValueTechnicalPart.setPrice(objPrice);
		objTP_ValueTechnicalPart.setPriceType(strPriceType);
		objTP_ValueTechnicalPart.setFromValue(strFormValue);
		objTP_ValueTechnicalPart.setToValue(strToValue);
		objTP_ValueTechnicalPart.setRangeType(strRangeType);
		objTP_ValueTechnicalPart.setRangeUnits(objRangeUnits);
		objTP_ValueTechnicalPart.setRangeType(strRangeType);
		setTP_ValueTechnicalPart(objTP_ValueTechnicalPart);
	}
	/**
	 * Set TP-Value Technical Part   (CP)   
	 * This field is about Monetary Value of one "point" for the technical part of the service.
	 * @param objTP_ValueTechnicalPart - object of TP-Value Technical Part .
	 */ 
	public void setTP_ValueTechnicalPart(CP objTP_ValueTechnicalPart)
	{
		setDataType(1994, objTP_ValueTechnicalPart);
	}
	
	/**
	 * retrieve Internal Scaling Factor Technical Part  (NM)   
	 * This field is about Internal Scaling Factor for the amount of the technical part of the service.
	 * @return NM - object of Internal Scaling Factor Technical Part.
	 */
	public NM getInternalScalingFactorTechnicalPart()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1995);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Internal Scaling Factor Technical Part  (NM)
	 * This field is about Internal Scaling Factor for the amount of the technical part of the service.
	 * @param strInternalScalingFactorTechnicalPart - string of Internal Scaling Factor Technical Part.
	 */
	public void setInternalScalingFactorTechnicalPart(String strInternalScalingFactorTechnicalPart)
	{
		NM objInternalScalingFactorTechnicalPart = (NM)getDataElement(1995);
		objInternalScalingFactorTechnicalPart.setValue(strInternalScalingFactorTechnicalPart);
		setInternalScalingFactorTechnicalPart(objInternalScalingFactorTechnicalPart);
	}
	
	/**
	 * Set Internal Scaling Factor Technical Part  (NM) 
	 * This field is about Internal Scaling Factor for the amount of the technical part of the service.
	 * @param objInternalScalingFactorTechnicalPart - object of Internal Scaling Factor Technical Part.
	 */
	public void setInternalScalingFactorTechnicalPart(NM objInternalScalingFactorTechnicalPart)
	{
		setDataType(1995, objInternalScalingFactorTechnicalPart);
	}
	
	/**
	 * retrieve External Scaling Factor Technical Part  (NM)   
	 * This field is about External Scaling Factor for the amount of the technical part of the service.
	 * @return NM - object of External Scaling Factor Technical Part.
	 */
	public NM getExternalScalingFactorTechnicalPart()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1996);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set External Scaling Factor Technical Part  (NM)
	 * This field is about External Scaling Factor for the amount of the technical part of the service.
	 * @param strExternalScalingFactorTechnicalPart - string of External Scaling Factor Technical Part.
	 */
	public void setExternalScalingFactorTechnicalPart(String strExternalScalingFactorTechnicalPart)
	{
		NM objExternalScalingFactorTechnicalPart = (NM)getDataElement(1996);
		objExternalScalingFactorTechnicalPart.setValue(strExternalScalingFactorTechnicalPart);
		setExternalScalingFactorTechnicalPart(objExternalScalingFactorTechnicalPart);
	}
	
	/**
	 * Set External Scaling Factor Technical Part  (NM) 
	 * This field is about External Scaling Factor for the amount of the technical part of the service.
	 * @param objExternalScalingFactorTechnicalPart - object of External Scaling Factor Technical Part.
	 */
	public void setExternalScalingFactorTechnicalPart(NM objExternalScalingFactorTechnicalPart)
	{
		setDataType(1996, objExternalScalingFactorTechnicalPart);
	}
	
	/**
	 * Retrieve Amount Technical Part   (CP)   
	 * This field is about Total Amount for the technical part of this service.
	 * @return CP - object of Amount Technical Part
	 */
	public CP getAmountTechnicalPart()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1997);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Amount Technical Part   (CP)   
	 * This field is about Total Amount for the technical part of this service.
	 * @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 setAmountTechnicalPart(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objAmountTechnicalPart = (CP)getDataElement(1997);
		objAmountTechnicalPart.setPrice(objPrice);
		objAmountTechnicalPart.setPriceType(strPriceType);
		objAmountTechnicalPart.setFromValue(strFormValue);
		objAmountTechnicalPart.setToValue(strToValue);
		objAmountTechnicalPart.setRangeType(strRangeType);
		objAmountTechnicalPart.setRangeUnits(objRangeUnits);
		objAmountTechnicalPart.setRangeType(strRangeType);
		setAmountTechnicalPart(objAmountTechnicalPart);
	}
	/**
	 * Set Amount Technical Part   (CP)   
	 * This field is about Total Amount for the technical part of this service.
	 * @param objAmountTechnicalPart - object of Amount Technical Part .
	 */ 
	public void setAmountTechnicalPart(CP objAmountTechnicalPart)
	{
		setDataType(1997, objAmountTechnicalPart);
	}
	
	/**
	 * Retrieve Total Amount Professional Part + Technical Part  (CP)   
	 * This field is about Total Amount of the cost of this service (Professional plus technical part).
	 * @return CP - object of Total Amount Professional Part + Technical Part.
	 */
	public CP getTotalAmountProfessionalPartTechnicalPart()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1998);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CP)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set Total Amount Professional Part + Technical Part  (CP)   
	 * This field is about Total Amount of the cost of this service (Professional plus technical part).
	 * @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 about the Type of range.
	 */ 
	public void setTotalAmountProfessionalPartTechnicalPart(MO objPrice,String strPriceType,String strFormValue,String strToValue,CWE objRangeUnits,String strRangeType)
	{
		CP objTotalAmountProfessionalPartTechnicalPart = (CP)getDataElement(1998);
		objTotalAmountProfessionalPartTechnicalPart.setPrice(objPrice);
		objTotalAmountProfessionalPartTechnicalPart.setPriceType(strPriceType);
		objTotalAmountProfessionalPartTechnicalPart.setFromValue(strFormValue);
		objTotalAmountProfessionalPartTechnicalPart.setToValue(strToValue);
		objTotalAmountProfessionalPartTechnicalPart.setRangeType(strRangeType);
		objTotalAmountProfessionalPartTechnicalPart.setRangeUnits(objRangeUnits);
		objTotalAmountProfessionalPartTechnicalPart.setRangeType(strRangeType);
		setTotalAmountProfessionalPartTechnicalPart(objTotalAmountProfessionalPartTechnicalPart);
	}
	/**
	 * Set Total Amount Professional Part + Technical Part  (CP)   
	 * This field is about Total Amount of the cost of this service (Professional plus technical part).
	 * @param objTotalAmountProfessionalPartTechnicalPart - object of Total Amount Professional Part + Technical Part.
	 */ 
	public void setTotalAmountProfessionalPartTechnicalPart(CP objTotalAmountProfessionalPartTechnicalPart)
	{
		setDataType(1998, objTotalAmountProfessionalPartTechnicalPart);
	}
	
	/**
	 * retrieve VAT-Rate  (NM)   
	 * This field is about VAT–Rate Applied on the total amount of this service.
	 * @return NM - object of VAT-Rate.
	 */
	public NM getVAT_Rate()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(1999);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (NM)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set VAT-Rate  (NM)
	 * This field is about VAT–Rate Applied on the total amount of this service.
	 * @param strVAT_Rate - string of VAT-Rate.
	 */
	public void setVAT_Rate(String strVAT_Rate)
	{
		NM objVAT_Rate = (NM)getDataElement(1999);
		objVAT_Rate.setValue(strVAT_Rate);
		setVAT_Rate(objVAT_Rate);
	}
	
	/**
	 * Set VAT-Rate  (NM) 
	 * This field is about VAT–Rate Applied on the total amount of this service.
	 * @param objVAT_Rate - object of VAT-Rate.
	 */
	public void setVAT_Rate(NM objVAT_Rate)
	{
		setDataType(1999, objVAT_Rate);
	}
	
	/**
	 * Retrieve Main-Service   (ID)   
	 * This field is about Main-Service .
	 * @return ID - object of Main-Service.
	 */
	public ID getMain_Service()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(2000);
		if(objDataCollection != null) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set  Main-Service   (ID)   
	 * This field is about Main-Service .
	 * @param strMain_Service - object of Main-Service.
	 */
	public void setMain_Service(String strMain_Service)
	{
		ID objMain_Service = (ID)getDataElement(2000);
		objMain_Service.setValue(strMain_Service);
		setMain_Service(objMain_Service);
	}
	/**
	 * Set  Main-Service   (ID)   
	 * This field is about Main-Service. 
	 * @param objMain_Service - object of Main-Service.
	 */
	public void setMain_Service(ID objMain_Service)
	{
		setDataType(2000, objMain_Service);
	}
	
	/**
	 * Retrieve Validation   (ID)   
	 * This field is about Service line item has passed an approved validator software (yes/no).  
	 * @return ID - object of Validation.
	 */
	public ID getValidation()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(2001);
		if(objDataCollection != null) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set  Validation   (ID)   
	 * This field is about Service line item has passed an approved validator software (yes/no).  
	 * @param strValidation - object of Validation.
	 */
	public void setValidation(String strValidation)
	{
		ID objValidation = (ID)getDataElement(2001);
		objValidation.setValue(strValidation);
		setValidation(objValidation);
	}
	/**
	 * Set  Validation   (ID)   
	 * This field is about Service line item has passed an approved validator software (yes/no).   
	 * @param objValidation - object of Validation.
	 */
	public void setValidation(ID objValidation)
	{
		setDataType(2001, objValidation);
	}
	
	/**
	 * Retrieve Comments (ST)
	 * This field is about Reason why the service line item has not passed the validator software.
	 * @return ST - object of Comments.
	 */
	public ST getComments()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(2002);
		if(objDataCollection != null) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Retrieve Comments (ST)
	 * This field is about Reason why the service line item has not passed the validator software.
	 * @param strComments - object of Comments.
	 */
	public void setComments(String strComments)
	{
		ST objComments = (ST)getDataElement(2002);
		objComments.setValue(strComments);
		setComments(objComments);
	}
	
	/**
	 * Retrieve Comments (ST)
	 * This field is about Reason why the service line item has not passed the validator software.
	 * @param objComments - object of Comments.
	 */
	public void setComments(ST objComments)
	{
		setDataType(2002, objComments);
	}
	
	/**
	 * 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 
	 * {PSL} while parsing PSL segment validate method will check for its mandatory presence.
	 * [PSL] in this case validate will throw exception if one tries to enter more than one PSL 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);
		}
	}
}

