/*******************************************************************************
 *  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.CWE;
import cdac.medinfo.sdk.hl7282.baselibs.CX;
import cdac.medinfo.sdk.hl7282.baselibs.DT;
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.SAD;
import cdac.medinfo.sdk.hl7282.baselibs.ST;
import cdac.medinfo.sdk.hl7282.baselibs.XAD;
import cdac.medinfo.sdk.hl7282.baselibs.XON;
import cdac.medinfo.sdk.hl7282.baselibs.XPN;
import cdac.medinfo.sdk.hl7282.baselibs.XTN;
import cdac.medinfo.sdk.hl7282.commoninterface.IDataType;
import cdac.medinfo.sdk.hl7282.commoninterface.ISingleCollection;
import cdac.medinfo.sdk.hl7282.utils.EnumSegments;
import cdac.medinfo.sdk.hl7282.utils.SingleCollection;


/**
 * PM1 - Payer Master File Segment<p>
 * The Technical Steward for the PM1 segment is Orders and Observations.
 * The PM1 segment contains per insurance company (payer) the policies specific to their organization.  
 * <p>Represents an HL7 PM1 message segment. 
 * This segment has the following fields:</p><p>
 * PM1-1: Health Plan ID (CWE)<b>Required</b><br> 
 * PM1-2: Insurance Company ID (CX)<b>Required</b><br> 
 * PM1-3: Insurance Company Name (XON)<b>Optional</b><br> 
 * PM1-4: Insurance Company Address (XAD)<b>Optional</b><br> 
 * PM1-5: Insurance Co Contact Person (XPN)<b>Required</b><br> 
 * PM1-6: Insurance Co Phone Number (XTN)<b>Optional</b><br> 
 * PM1-7: Group Number (ST)<b>Optional</b><br> 
 * PM1-8: Group Name (XON)<b>Optional</b><br> 
 * PM1-9: Plan Effective Date (DT)<b>Optional</b><br> 
 * PM1-10: Plan Expiration Date (DT)<b>Optional</b><br> 
 * PM1-11: Patient DOB Required (ID)<b>Optional</b><br> 
 * PM1-12: Patient Gender Required (ID)<b>Optional</b><br> 
 * PM1-13: Patient Relationship Required (ID)<b>Optional</b><br> 
 * PM1-14: Patient Signature Required (ID)<b>Optional</b><br> 
 * PM1-15: Diagnosis Required (ID)<b>Optional</b><br> 
 * PM1-16: Service Required (ID)<b>Optional</b><br> 
 * PM1-17: Patient Name Required (ID)<b>Optional</b><br> 
 * PM1-18: Patient Address Required (ID)<b>Optional</b><br> 
 * PM1-19: Subscribers Name Required (ID)<b>Optional</b><br> 
 * PM1-20: Workman's Comp Indicator (ID)<b>Optional</b><br> 
 * PM1-21: Bill Type Required (ID)<b>Optional</b><br> 
 * PM1-22: Commercial Carrier Name and Address Required (ID)<b>Optional</b><br> 
 * PM1-23: Policy Number Pattern (ST)<b>Optional</b><br> 
 * PM1-24: Group Number Pattern (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 PM1 extends Segment   
{
	

	/**
	 * Constructs the OMC segment.
	 */
	public PM1()
	{super(EnumSegments.HL7_SEG_PM1);}
	
	/**
	 * Retrieves the Health Plan ID.
	 * This field contains a unique identifier for the insurance plan.   
	 * @return CWE - HealthPlanID
	 */
	public CWE getHealthPlanID() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(368);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (CWE)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Health Plan ID.
	 * This field contains a unique identifier for the insurance plan.   
	 * @param strIdentifier Specifies of characters (the code) that uniquely identifies the item being referenced. 
	 * @param strText Specifies The descriptive or textual name of the identifier, e.g., myocardial infarction. 
	 * @param strNameOfCodingSystem Identifies the coding scheme being used in the identifier component.
	 * @param strAlternateIdentifier Specifies an alternate sequence of characters (the code) that uniquely identifies the item being referenced.
	 * @param strAlternateText Specifies the descriptive or textual name of the alternate identifier. See usage note in section introduction.
	 * @param strNameOfAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component. 
	 * @param strCodingSystemVersionID A sequence of characters that uniquely identifies a second alternate code.
	 * @param strAlternateCodingSystemVersionId This component carries the version for the coding system identified by components 4-6.
	 * @param strOriginalText The text as seen and/or selected by the user who entered the data.
	 * @param strSecondAlternateIdentifier A sequence of characters that uniquely identifies a second alternate code.
	 * @param strSecondAlternateText The descriptive or textual name of the alternate identifier.
	 * @param strNameofSecondAlternateCodingSystem Identifies the coding scheme being used in the alternate identifier component.
	 * @param strSecondAlternateCodingSystemVersionID This component carries the version for the coding system identified by components 10-12.
	 * @param strCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.3.
	 * @param strValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.1 is obtained.
	 * @param strValueSetVersionID This component carries the version for the value set identified by CWE.15. The version is a date. The date is the date/time that the value set being used was published.
	 * @param strAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.6.
	 * @param strAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.4 is obtained.
	 * @param strAlternateValueSetVersionID This component carries the version for the value set identified by CWE.18. The version is a date.
	 * @param strSecondAlternateCodingSystemOID This component contains the ISO Object Identifier (OID) for the coding system or value set named in CWE.12.
	 * @param strSecondAlternateValueSetOID This component contains the ISO Object Identifier (OID) to allow identification of the value set from which the value in CWE.10 is obtained.
	 * @param strSecondAlternateValueSetVersionID This component carries the version for the value set identified by CWE.21. The version is a date.
	 */
	public void setHealthPlanID (String strIdentifier,String strText,String strNameOfCodingSystem,
			String strAlternateIdentifier,String strAlternateText,String strNameOfAlternateCodingSystem, String strCodingSystemVersionID, String 				strAlternateCodingSystemVersionId,
			String strOriginalText, String  strSecondAlternateIdentifier, String strSecondAlternateText, 
			String strNameofSecondAlternateCodingSystem, String strSecondAlternateCodingSystemVersionID, String strCodingSystemOID, String strValueSetOID,
			String strValueSetVersionID, String strAlternateCodingSystemOID, String strAlternateValueSetOID, String strAlternateValueSetVersionID,
			String  strSecondAlternateCodingSystemOID, String strSecondAlternateValueSetOID, String strSecondAlternateValueSetVersionID)
	{
		CWE cwe  = (CWE)getDataElement(368);
		cwe.setIdentifier(strIdentifier);
		cwe.setText(strText);
		cwe.setNameOfCodingSystem(strNameOfCodingSystem);
		cwe.setAlternateIdentifier(strAlternateIdentifier);
		cwe.setAlternateText(strAlternateText);
		cwe.setNameOfAlternateCodingSystem(strNameOfAlternateCodingSystem); 
		cwe.setCodingSystemVersionID(strCodingSystemVersionID);
		cwe.setAlternateCodingSystemVersionId(strAlternateCodingSystemVersionId);
		cwe.setOriginalText(strOriginalText);
		cwe.setSecondAlternateIdentifier(strSecondAlternateIdentifier);
		cwe.setSecondAlternateText(strSecondAlternateText);
		cwe.setNameofSecondAlternateCodingSystem(strNameofSecondAlternateCodingSystem);
		cwe.setSecondAlternateCodingSystemVersionID(strSecondAlternateCodingSystemVersionID);
		cwe.setCodingSystemOID(strCodingSystemOID);
		cwe.setValueSetOID(strValueSetOID);
		cwe.setValueSetVersionID(strValueSetVersionID);
		cwe.setAlternateCodingSystemOID(strAlternateCodingSystemOID);
		cwe.setAlternateValueSetOID(strAlternateValueSetOID);
		cwe.setAlternateValueSetVersionID(strAlternateValueSetVersionID);
		cwe.setSecondAlternateCodingSystemOID(strSecondAlternateCodingSystemOID);
		cwe.setSecondAlternateValueSetOID(strSecondAlternateValueSetOID);
		cwe.setSecondAlternateValueSetVersionID(strSecondAlternateValueSetVersionID); 
		setHealthPlanID(cwe);

	} 

	/** Set the Health Plan ID.
	 * This field contains a unique identifier for the insurance plan.   
	 * @param objHealthPlanID
	 */ 
	public void setHealthPlanID(CWE objHealthPlanID)
	{
		setDataType(368,objHealthPlanID);
	}
	
	/**
	 * Retrieves the Insurance Company ID.
	 * This field contains unique identifiers for the insurance company.    
	 * @return ISingleCollection<CX> - insuranceCompanyID
	 */
	public ISingleCollection<CX> getInsuranceCompanyID()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(428);
		ISingleCollection<CX> objDataList = new SingleCollection<CX>();
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				CX objCX = (CX)objDataType;
				objDataList.add(objCX);
			}
		}

		return objDataList;
	}
	
	/**
	 * Set the Insurance Company ID.
	 * This field contains unique identifiers for the insurance company.    
	 * @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 addInsuranceCompanyID(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 cx  = (CX)getDataElement(428);
		cx.setIdNumber(strIDNumber);
		cx.setCheckDigit(strCheckDigit);
		cx.setCheckDigitScheme(strCheckDigitScheme);
		cx.setAssigningAuthority(objAssigningAuthority);
		cx.setIdentifierTypeCode(strIdentifierTypeCode);
		cx.setAssigningFacility(objAssigningFacility);
		cx.setEffectiveDate(strEffectiveDate);
		cx.setExpirationDate(strExpirationDate);
		cx.setAssigningJurisdiction(objAssigningJurisdiction);
		cx.setAssigningAgencyOrDepartment(objAssigningAgencyOrDepartment); 
		cx.setSecurityCheck(strCheckDigit);
		cx.setSecurityCheckScheme(strSecurityCheckScheme);
		addInsuranceCompanyID(cx);
	}

	/**
	 * Set the Insurance Company ID.
	 * This field contains unique identifiers for the insurance company.    
	 * @param InsuranceCompanyID
	 */
	public void addInsuranceCompanyID(CX InsuranceCompanyID)
	{
		addDataType(428,InsuranceCompanyID);
	}

	/**
	 * Set the InsuranceCompanyID list.
	 * @param objInsuranceCompanyIDList List of InsuranceCompanyID
	 */	
	@SuppressWarnings("unchecked")
	public void setInsuranceCompanyID(ISingleCollection<CX> objInsuranceCompanyIDList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objInsuranceCompanyIDList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(428,objCollection);
	}
	
	/**
	 * Retrieves the Insurance Company Name.
	 * This field contains the name of the insurance company.  
	 * @return ISingleCollection<XON> - insuranceCompanyName
	 */
	public ISingleCollection<XON> getInsuranceCompanyName() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(429);
		ISingleCollection<XON> objDataList = new SingleCollection<XON>();
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				XON objXON = (XON)objDataType;
				objDataList.add(objXON);
			}
		}

		return objDataList;
	}
	
	/** 
	 * Set the Insurance Company Name.
	 * This field contains the name of the insurance company.  
	 * @param strOrganizationName Specifies name of the specified organization.
	 * @param strOrganizationNameTypeCode Specifies a code that represents the type of name i.e., legal name, display name.
	 * 										Suggested Values A,L,D,SL.[Refer to table No.0204]  
	 * @param objAssigningAuthority Specifies The assigning authority is a unique identifier of the system 
	 * 									(or organization or agency or department) that creates the data. 
	 * @param strIdentifierTypeCode Specifies a code corresponding to the type of identifier. 
	 * @param objAssigningFacility Specifies The place or location identifier where the identifier was first assigned to the person. 
	 * @param strNameRepresentationCode Specifies representations of the same name/address Suggested values are I,A,P [Refer table 0465] 
	 * @param strOrganizationIdentifier This component contains the sequence of characters (the code) that uniquely 
	 * 									  identifies the item being referenced by XON.1 Organization Name. 
	 * 									  This component replaces XON.3 ID Number as of v 2.5.
	 */
	public void addInsuranceCompanyName(String strOrganizationName, CWE objOrganizationNameTypeCode,
			 HD objAssigningAuthority,
			String strIdentifierTypeCode, HD objAssigningFacility, String strNameRepresentationCode,
			String strOrganizationIdentifier)
	{
		XON xon  = (XON)getDataElement(429);
		xon.setOrganizationName(strOrganizationName);
		xon.setOrganizationNameTypeCode(objOrganizationNameTypeCode);
		xon.setAssigningAuthority(objAssigningAuthority);
		xon.setIdentifierTypeCode(strIdentifierTypeCode);
		xon.setAssigningFacility(objAssigningFacility);
		xon.setNameRepresentationCode(strNameRepresentationCode);
		xon.setOrganizationIdentifier(strOrganizationIdentifier); 
		addInsuranceCompanyName(xon);
	}

	/** 
	 * Set the Insurance Company Name.
	 * This field contains the name of the insurance company.  
	 * @param InsuranceCompanyName
	 */
	public void addInsuranceCompanyName(XON InsuranceCompanyName)
	{
		addDataType(429,InsuranceCompanyName);
	}


	/**
	 * Set the InsuranceCompanyName list.
	 * @param objInsuranceCompanyNameList List of InsuranceCompanyName
	 */	
	@SuppressWarnings("unchecked")
	public void setInsuranceCompanyName(ISingleCollection<XON> objInsuranceCompanyNameList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objInsuranceCompanyNameList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(429,objCollection);
	}
	
	/**
	 * Retrieves the Insurance Company Addr.
	 * This field contains the address of the insurance company.  
	 * @return ISingleCollection<XAD> - insuranceCompanyAddr
	 */
	public ISingleCollection<XAD> getInsuranceCompanyAddr()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(430);
		ISingleCollection<XAD> objDataList = new SingleCollection<XAD>();
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				XAD objXAD = (XAD)objDataType;
				objDataList.add(objXAD);
			}
		}

		return objDataList;
	}
	
	/** 
	 * Set the Insurance Company Addr.
	 * This field contains the address of the insurance company.  
	 * @param objStreetAddress Specifies the street address.
	 * @param strOtherDesignation Specifies the Second line of address. 
	 * @param strCity The city, or district or place where the addressee is located. 
	 * @param strStateOrProvince Specifies the state or province where the addressee is located.
	 * @param strZipOrPostalCode Specifies the zip or postal code where the addressee is located. 
	 * @param strCountry Specifies the country where the addressee is located.
	 * @param strAddressType Specifies the kind or type of address.
	 * @param strOtherGeographicDesignation Specifies any other geographic designation. 
	 * @param objCountyParishCode Specifies a code that represents the county in which the specified address resides. 
	 * @param objCensusTract Specifies a code that represents the census tract in which the specified address resides. 
	 * @param strAddressRepresentationCode Specifies representations of the same name/address Suggested values are I,A,P [Refer table 0465]
	 * @param objEffectiveDate It is The first date, if known, on which the address is valid and active.
	 * @param objExpirationDate It is The last date, if known, on which the address is valid and active.
	 * @param objExpirationReason indicates why this address was marked as ended.
	 * @param strTemporaryIndicator indicates whether address is considered temporary .
	 * @param strBadAddressIndicator indicates whether it is possible to contact the owning entity.
	 * @param strAddressUsage indicates how the address is intended to be used.
	 * @param strAddressee indicates the name of the person whose address is intended to be used.
	 * @param strComment indicated descriptive information
	 * @param strPreferenceOrder preference order
	 * @param objProtectionCode indicates that an address need to be protected
	 * @param objAdressIdentifier indicates a unique identifier for address
	 */
	public void addInsuranceCompanyAddr(SAD objStreetAddress,String strOtherDesignation,String strCity,
			String strStateOrProvince,String strZipOrPostalCode,String strCountry,String strAddressType,
			String strOtherGeographicDesignation,CWE objCountyParishCode,CWE objCensusTract,
			String strAddressRepresentationCode,DTM objEffectiveDate,
			DTM objExpirationDate, CWE objEXpirationReason, String strTemporaryIndicator,
			String strBadAddressIndicator, String strAddressUsage, String strAddressee, String strComment,
			String strPreferenceOrder, CWE objProtectionCode, EI objAddressIdentifier)
	{
		XAD xad = (XAD)getDataElement(430);
		xad.setStreetAddress(objStreetAddress);
		xad.setOtherDesignation(strOtherDesignation);
		xad.setCity(strCity);
		xad.setStateOrProvince(strStateOrProvince);
		xad.setZipOrPostalCode(strZipOrPostalCode);
		xad.setCountry(strCountry);
		xad.setAddressType(strAddressType);
		xad.setOtherGeographicDesignation(strOtherGeographicDesignation);
		xad.setCountyParishCode(objCountyParishCode);
		xad.setCensusTract(objCensusTract);
		xad.setAddressRepresentationCode(strAddressRepresentationCode);
 
		xad.setEffectiveDate(objEffectiveDate);
		xad.setExpirationDate(objExpirationDate); 
		xad.setExpirationReason(objEXpirationReason);
		xad.setTemporaryIndicator(strTemporaryIndicator);
		xad.setBadAddressIndicator(strBadAddressIndicator);
		xad.setAddressUsage(strAddressUsage);
		xad.setAddressee(strAddressee);
		xad.setComment(strComment);
		xad.setPreferenceOrder(strPreferenceOrder);
		xad.setProtectionCode(objProtectionCode);
		xad.setAddressIdentifier(objAddressIdentifier);
		addInsuranceCompanyAddr(xad);
	}

	/** 
	 * Set the Insurance Company Addr.
	 * This field contains the address of the insurance company.  
	 * @param InsuranceCompanyAddr
	 */
	public void addInsuranceCompanyAddr(XAD InsuranceCompanyAddr)
	{
		addDataType(430,InsuranceCompanyAddr);
	}

	/**
	 * Set the InsuranceCompanyAddr list.
	 * @param objInsuranceCompanyAddrList List of InsuranceCompanyAddr
	 */	
	@SuppressWarnings("unchecked")
	public void setInsuranceCompanyAddr(ISingleCollection<XAD> objInsuranceCompanyAddrList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objInsuranceCompanyAddrList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(430,objCollection);
	}
	
	/**
	 * Retrieves the Insurance Co Contact Person.
	 * This field contains the name of the person who should be contacted at
	 *  the insurance company.  Multiple names for the same contact person may be sent in this field. 
	 * @return ISingleCollection<XPN> - insuranceCoContactPerson
	 */
	public ISingleCollection<XPN> getInsuranceCoContactPerson()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(431);
		ISingleCollection<XPN> objDataList = new SingleCollection<XPN>();
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				XPN objXPN = (XPN)objDataType;
				objDataList.add(objXPN);
			}
		}

		return objDataList;
	}
	
	/** 
	 * Set the Insurance Co Contact Person.
	 * This field contains the name of the person who should be contacted at
	 *  the insurance company.  Multiple names for the same contact person may be sent in this field. 
	 * @param objFamilyName Specifies the surname of a person. 
	 * @param strGivenName Specifies First name.
	 * @param strSecondAndFurtherGivenNamesOrInitialsThereof Specifies multiple middle names that may be included by separating them with spaces.
	 * @param strSuffix Used to specify a name suffix (e.g., Jr. or III).
	 * @param strPrefix Used to specify a name prefix (e.g., Dr.).
	 * @param strNameTypeCode Specifies a code that represents the type of name. Suggested values are A,B,C,D,I,L,M,N,P,R,S,T,U...[Refer table 0200.]
	 * @param strNameRepresentationCode Specifies representations of the same name/address Suggested values are I,A,P [Refer table 0465] 
	 * @param objNameContext Designates the context in which a name is used. [Refer User-defined Table 0448 ]
	 * @param strNameAssemblyOrder Specifies a code that represents the preferred display order of the components of this person name. Suggested values are G,F[Refer table 0444.]
	 * @param objEffectiveDate Specifies the first date, if known, on which the address is valid and active.
	 * @param objExpirationDate Specifies the last date, if known, on which the address is valid and active.
	 * @param strProfessionalSuffix Used to specify an abbreviation, or a string of abbreviations, denoting qualifications that support the person's profession, (e.g., licenses). 
	 * @param strCalledBy Used to specify the called name.
	 */

	public void addInsuranceCoContactPerson(FN objFamilyName, String strGivenName, String strSecondAndFurtherGivenNamesOrInitialsThereof, 
			String strSuffix, String strPrefix, String strNameTypeCode, String strNameRepresentationCode, 
			CWE objNameContext, String strNameAssemblyOrder, DTM objEffectiveDate,
			DTM objExpirationDate, String strProfessionalSuffix, String strCalledBy)
	{
		XPN xpn = (XPN)getDataElement(431);
		xpn.setGivenName(strGivenName);
		xpn.setSecondNameOrInitials(strSecondAndFurtherGivenNamesOrInitialsThereof);
		xpn.setSuffix(strSuffix);
		xpn.setPrefix(strPrefix);
//		xpn.setDegree(strDegree);
		xpn.setNameTypeCode(strNameTypeCode);
		xpn.setNameRepresentationCode(strNameRepresentationCode);
		xpn.setNameContext(objNameContext);
//		xpn.setNameValidityRange(objNameValidityRange);
		xpn.setNameAssemblyOrder(strNameAssemblyOrder);
		xpn.setEffectiveDate(objEffectiveDate);
		xpn.setExpirationDate(objExpirationDate);
		xpn.setProfessionalSuffix(strProfessionalSuffix); 
		xpn.setCalledBy(strCalledBy);
		addInsuranceCoContactPerson(xpn);
	}

	/** 
	 * Set the Insurance Co Contact Person.
	 * This field contains the name of the person who should be contacted at
	 *  the insurance company.  Multiple names for the same contact person may be sent in this field. 
	 * @param InsuranceCoContactPerson
	 */

	public void addInsuranceCoContactPerson(XPN InsuranceCoContactPerson)

	{

		addDataType(431,InsuranceCoContactPerson);
	}

	/**
	 * Set the InsuranceCoContactPerson list.
	 * @param objInsuranceCoContactPersonList List of InsuranceCoContactPerson
	 */	
	@SuppressWarnings("unchecked")
	public void setInsuranceCoContactPerson(ISingleCollection<XPN> objInsuranceCoContactPersonList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objInsuranceCoContactPersonList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(431,objCollection);
	}
	
	/**
	 * Retrieves the Insurance Co Phone Number.
	 * This field contains the phone number of the insurance company.  Multiple phone 
	 * numbers for the same insurance company may be sent in this field.
	 * @return ISingleCollection<XTN> - insuranceCoPhoneNumber
	 */
	public ISingleCollection<XTN> getInsuranceCoPhoneNumber()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(432);
		ISingleCollection<XTN> objDataList = new SingleCollection<XTN>();
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				XTN objXTN = (XTN)objDataType;
				objDataList.add(objXTN);
			}
		}

		return objDataList;
	}
	
	/** 
	 * Set the Insurance Co Phone Number.
	 * This field contains the phone number of the insurance company.  Multiple phone 
	 * numbers for the same insurance company may be sent in this field.
	 * @param strTeleCommunicationUseCode Specifies a code that represents a specific use of a telecommunication number.
	 										Suggested values are PRN,ORN,WPN,VHN,ASN,EMR,NET,BPN  [Refer table 0201.]
	 * @param strTeleCommunicationEquipmentType Specifies a code that represents the type of telecommunication equipment.
	 * 											  Suggested values are PH,FX,MD,CP,BP,Internet,X.400,TDD,TTY  [Refer table 0202.]
	 * @param strCommuinicationAddress Specifies Email address.
	 * @param strCountryCode Specifies the Country code.
	 * @param strAreaCityCode Specifies the area /City Code.
	 * @param strLocalNumber Specifies an Local Number.
	 * @param strExtension Specifies an Extension.
	 * @param strAnyText Contains comments with respect to the telephone number.
	 * @param strExtensionPrefix Specifies the characters established within a company's 
	 * 							   internal telephone system network used as a prefix to the Extension component for internal dialing. 
	 * @param strSpeedDialCode Specifies The characters established within a 
	 * 							 company's internal telephone system used in place of the (external) telephone number.
	 * @param strUnformattedTelephoneNumber Specifies an expression of the telephone number as an unparsible string.
	 * @param strEffectiveStartDate Specifies start date.
	 * @param strExpirationDate Specifies expiration date.
	 * @param objExpirationReason Specifies reason why this contact is marked as ended.
	 * @param objProtectionCode Specifies reason why this information is sensitive or protected.
	 * @param objSharedTelecommunicationIdentifier Specifies a unique phone number phone telephone number or email-id.
	 * @param strPreferenceOrder Specifies the preference order for an entity..
	 */ 	
	public void addInsuranceCoPhoneNumber (String strTeleCommunicationUseCode,String strTeleCommunicationEquipmentType
			,String strCommuinicationAddress,String strCountryCode,String strAreaCityCode,String strLocalNumber,String strExtension,String strAnyText,
			String strExtensionPrefix,String strSpeedDialCode,String strUnformattedTelephoneNumber, String strEffectiveStartDate, String strExpirationDate,
			CWE objExpirationReason, CWE objProtectionCode, EI objSharedTelecommunicationIdentifier, String strPreferenceOrder)
	{
		XTN xtn  = (XTN)getDataElement(432);
//		xtn.setTelephoneNumber(strTelephoneNumber);
		xtn.setTelecommunicationUseCode(strTeleCommunicationUseCode);
		xtn.setTelecommunicationEquipmentType(strTeleCommunicationEquipmentType);
		xtn.setCommuinicationAddress(strCommuinicationAddress);
		xtn.setCountryCode(strCountryCode);
		xtn.setAreaCityCode(strAreaCityCode);
		xtn.setLocalNumber(strLocalNumber);
		xtn.setExtension(strExtension);
		xtn.setAnyText(strAnyText);
		xtn.setExtensionPrefix(strExtensionPrefix);
		xtn.setSpeedDialCode(strSpeedDialCode);
		xtn.setUnformattedTelephonenumber(strUnformattedTelephoneNumber); 
		xtn.setEffectiveStartDate(strEffectiveStartDate);
		xtn.setExpirationDate(strExpirationDate);
		xtn.setExpirationReason(objExpirationReason);
		xtn.setProtectionCode(objProtectionCode);
		xtn.setSharedTelecommunicationIdentifier(objSharedTelecommunicationIdentifier);
		xtn.setPreferenceOrder(strPreferenceOrder);
		addInsuranceCoPhoneNumber(xtn);
	}

	/** 
	 * Set the Insurance Co Phone Number.
	 * This field contains the phone number of the insurance company.  Multiple phone 
	 * numbers for the same insurance company may be sent in this field.
	 * @param InsuranceCoPhoneNumber
	 */	
	public void addInsuranceCoPhoneNumber(XTN InsuranceCoPhoneNumber)
	{
		addDataType(432,InsuranceCoPhoneNumber);
	}

	/**
	 * Set the InsuranceCoPhoneNumber list.
	 * @param objInsuranceCoPhoneNumberList List of InsuranceCoPhoneNumber
	 */	
	@SuppressWarnings("unchecked")
	public void setInsuranceCoPhoneNumber(ISingleCollection<XTN> objInsuranceCoPhoneNumberList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objInsuranceCoPhoneNumberList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(432,objCollection);
	}
	
	/**
	 * Retrieves the Group Number.
	 * This field contains the group number of the insured's insurance.
	 * @return ST - groupNumber
	 */
	public ST getGroupNumber() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(433);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/** 
	 * Set the Group Number.
	 * This field contains the group number of the insured's insurance.
	 * @param strGroupNumber Specifies the group number of the insured's insurance.
	 */ 
	public void setGroupNumber (String strGroupNumber)  
	{
		ST groupNumber  = (ST)getDataElement(433);
		groupNumber.setValue(strGroupNumber); 
		setGroupNumber(groupNumber);

	} 

	/** Set the Group Number.
	 * This field contains the group number of the insured's insurance.
	 * @param objgroupNumber Specifies the group number of the insured's insurance.
	 */ 
	public void setGroupNumber(ST objgroupNumber)
	{
		setDataType(433,objgroupNumber);

	}
	
	/**
	 * Retrieves the Group Name.
	 * This field contains the group name of the insured's insurance.
	 * @return ISingleCollection<XON> - groupName
	 */
	public ISingleCollection<XON> getGroupName() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(434);
		ISingleCollection<XON> objDataList = new SingleCollection<XON>();
		if(objDataCollection != null && objDataCollection.size() != 0)
		{
			for(IDataType objDataType : objDataCollection)
			{
				XON objXON = (XON)objDataType;
				objDataList.add(objXON);
			}
		}

		return objDataList;
	}
	
	/** 
	 * Set the Group Name.
	 * This field contains the group name of the insured's insurance.
	 * @param strOrganizationName Specifies name of the specified organization.
	 * @param strOrganizationNameTypeCode Specifies a code that represents the type of name i.e., legal name, display name.
	 * 										Suggested Values A,L,D,SL.[Refer to table No.0204]  
	 * @param objAssigningAuthority Specifies The assigning authority is a unique identifier of the system 
	 * 									(or organization or agency or department) that creates the data. 
	 * @param strIdentifierTypeCode Specifies a code corresponding to the type of identifier. 
	 * @param objAssigningFacility Specifies The place or location identifier where the identifier was first assigned to the person. 
	 * @param strNameRepresentationCode Specifies representations of the same name/address Suggested values are I,A,P [Refer table 0465] 
	 * @param strOrganizationIdentifier This component contains the sequence of characters (the code) that uniquely 
	 * 									  identifies the item being referenced by XON.1 Organization Name. 
	 * 									  This component replaces XON.3 ID Number as of v 2.5.
	 */

	public void addGroupName(String strOrganizationName, CWE objOrganizationNameTypeCode,
			 HD objAssigningAuthority,
			String strIdentifierTypeCode, HD objAssigningFacility, String strNameRepresentationCode,
			String strOrganizationIdentifier)
	{
		XON xon  = (XON)getDataElement(434);
		xon.setOrganizationName(strOrganizationName);
		xon.setOrganizationNameTypeCode(objOrganizationNameTypeCode);
		xon.setAssigningAuthority(objAssigningAuthority);
		xon.setIdentifierTypeCode(strIdentifierTypeCode);
		xon.setAssigningFacility(objAssigningFacility);
		xon.setNameRepresentationCode(strNameRepresentationCode);
		xon.setOrganizationIdentifier(strOrganizationIdentifier); 
		addGroupName(xon);
	}

	/** 
	 * Set the Group Name.
	 * This field contains the group name of the insured's insurance.
	 * @param GroupName
	 */

	public void addGroupName(XON GroupName)
	{
		addDataType(434,GroupName);
	}

	/**
	 * Set the GroupName list.
	 * @param objGroupNameList List of GroupName
	 */	
	@SuppressWarnings("unchecked")
	public void setGroupName(ISingleCollection<XON> objGroupNameList)
	{
		ISingleCollection<IDataType> objCollection = null;
		ISingleCollection<?> objUnknownCollection = (ISingleCollection<?>)objGroupNameList;
		objCollection = (ISingleCollection<IDataType>)objUnknownCollection;
		setDataType(434,objCollection);
	}
	
	/**
	 * Retrieves the Plan Effective Date.
	 * This field contains the date that the insurance goes into effect.
	 * @return DT - planEffectiveDate
	 */
	public DT getPlanEffectiveDate()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(437);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DT)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/** 
	 * Set the Plan Effective Date.
	 * This field contains the date that the insurance goes into effect.
	 * @param strPlanEffectiveDate Specifies date that the insurance goes into effect.
	 */ 
	public void setPlanEffectiveDate (String strPlanEffectiveDate)  
	{
		DT planEffectiveDate  = (DT)getDataElement(437);
		planEffectiveDate.setValue(strPlanEffectiveDate); 
		setPlanEffectiveDate(planEffectiveDate);

	} 

	/** Set the Plan Effective Date.
	 * This field contains the date that the insurance goes into effect.
	 * @param objplanEffectiveDate Specifies date that the insurance goes into effect.
	 */ 
	public void setPlanEffectiveDate(DT objplanEffectiveDate)
	{
		setDataType(437,objplanEffectiveDate);

	}

	/**
	 * Retrieves the Plan Expiration Date.
	 * This indicates the last date of service that the insurance will cover or be responsible for.
	 * @return DT - planExpirationDate
	 */
	public DT getPlanExpirationDate()
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(438);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (DT)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/** 
	 * Set the Plan Expiration Date.
	 * This indicates the last date of service that the insurance will cover or be responsible for.
	 * @param strPlanExpirationDate Specifies last date of service that the insurance will cover or be responsible for.
	 */ 
	public void setPlanExpirationDate (String strPlanExpirationDate)  
	{
		DT planExpirationDate  = (DT)getDataElement(438);
		planExpirationDate.setValue(strPlanExpirationDate); 
		setPlanExpirationDate(planExpirationDate);

	} 

	/** Set the Plan Expiration Date.
	 * This indicates the last date of service that the insurance will cover or be responsible for.
	 * @param objplanExpirationDate Specifies last date of service that the insurance will cover or be responsible for.
	 */ 
	public void setPlanExpirationDate(DT objplanExpirationDate)
	{
		setDataType(438,objplanExpirationDate);

	}
	
	/**
	 * Retrieves the Patient DOB Required.
	 * This field indicates whether this insurance carrier requires the patient DOB.  
	 * @return ID - PatientDOBRequired
	 */
	public ID getPatientDOBRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3454);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Patient DOB Required.
	 * This field indicates whether this insurance carrier requires the patient DOB.  
	 * @param strPatientDOBRequired This field indicates whether this insurance carrier requires the patient DOB.  
	 */ 
	public void setPatientDOBRequired (String strPatientDOBRequired) 
	{
		ID PatientDOBRequired  = (ID)getDataElement(3454);
		PatientDOBRequired.setValue(strPatientDOBRequired); 
		setPatientDOBRequired(PatientDOBRequired);

	} 

	/** 
	 * Set the Patient DOB Required.
	 * This field indicates whether this insurance carrier requires the patient DOB.  
	 * @param objPatientDOBRequired Object of Patient DOB Required.
	 */ 
	public void setPatientDOBRequired(ID objPatientDOBRequired)
	{
		setDataType(3454,objPatientDOBRequired);
	}
	
	/**
	 * Retrieves the Patient Gender Required.
	 * This field indicates whether this insurance carrier requires the patient Gender.  
	 * @return ID - PatientGenderRequired
	 */
	public ID getPatientGenderRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3455);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Patient Gender Required.
	 * This field indicates whether this insurance carrier requires the patient Gender.  
	 * @param strPatientGenderRequired This field indicates whether this insurance carrier requires the patient Gender.  
	 */ 
	public void setPatientGenderRequired (String strPatientGenderRequired) 
	{
		ID PatientGenderRequired  = (ID)getDataElement(3455);
		PatientGenderRequired.setValue(strPatientGenderRequired); 
		setPatientGenderRequired(PatientGenderRequired);

	} 

	/** 
	 * Set the Patient Gender Required.
	 * This field indicates whether this insurance carrier requires the patient Gender.  
	 * @param objPatientGenderRequired Object of Patient Gender Required.
	 */ 
	public void setPatientGenderRequired(ID objPatientGenderRequired)
	{
		setDataType(3455,objPatientGenderRequired);
	}
	
	/**
	 * Retrieves the Patient Relationship Required.
	 * This field indicates whether this insurance carrier requires the patient’s Relationship to insured.  
	 * @return ID - PatientRelationshipRequired
	 */
	public ID getPatientRelationshipRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3456);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Patient Relationship Required.
	 * This field indicates whether this insurance carrier requires the patient’s Relationship to insured.  
	 * @param strPatientRelationshipRequired This field indicates whether this insurance carrier requires the patient’s Relationship to insured.  
	 */ 
	public void setPatientRelationshipRequired (String strPatientRelationshipRequired) 
	{
		ID PatientRelationshipRequired  = (ID)getDataElement(3456);
		PatientRelationshipRequired.setValue(strPatientRelationshipRequired); 
		setPatientRelationshipRequired(PatientRelationshipRequired);

	} 

	/** 
	 * Set the Patient Relationship Required.
	 * This field indicates whether this insurance carrier requires the patient’s Relationship to insured.  
	 * @param objPatientRelationshipRequired Object of Patient Relationship Required.
	 */ 
	public void setPatientRelationshipRequired(ID objPatientRelationshipRequired)
	{
		setDataType(3456,objPatientRelationshipRequired);
	}
	
	/**
	 * Retrieves the Patient Signature Required.
	 * This field indicates whether this insurance carrier requires the patient Signature.  
	 * @return ID - PatientSignatureRequired
	 */
	public ID getPatientSignatureRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3457);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Patient Signature Required.
	 * This field indicates whether this insurance carrier requires the patient Signature.  
	 * @param strPatientSignatureRequired This field indicates whether this insurance carrier requires the patient Signature.  
	 */ 
	public void setPatientSignatureRequired (String strPatientSignatureRequired) 
	{
		ID PatientSignatureRequired  = (ID)getDataElement(3457);
		PatientSignatureRequired.setValue(strPatientSignatureRequired); 
		setPatientSignatureRequired(PatientSignatureRequired);

	} 

	/** 
	 * Set the Patient Signature Required.
	 * This field indicates whether this insurance carrier requires the patient Signature.  
	 * @param objPatientSignatureRequired Object of Patient Signature Required.
	 */ 
	public void setPatientSignatureRequired(ID objPatientSignatureRequired)
	{
		setDataType(3457,objPatientSignatureRequired);
	}
	
	/**
	 * Retrieves the Diagnosis Required.
	 * This field indicates whether this insurance carrier requires a diagnosis.  
	 * @return ID - DiagnosisRequired
	 */
	public ID getDiagnosisRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3458);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Diagnosis Required.
	 * This field indicates whether this insurance carrier requires a diagnosis.  
	 * @param strDiagnosisRequired This field indicates whether this insurance carrier requires a diagnosis.  
	 */ 
	public void setDiagnosisRequired (String strDiagnosisRequired) 
	{
		ID DiagnosisRequired  = (ID)getDataElement(3458);
		DiagnosisRequired.setValue(strDiagnosisRequired); 
		setDiagnosisRequired(DiagnosisRequired);

	} 

	/** 
	 * Set the Diagnosis Required.
	 * This field indicates whether this insurance carrier requires a diagnosis.  
	 * @param objDiagnosisRequired Object of Diagnosis Required.
	 */ 
	public void setDiagnosisRequired(ID objDiagnosisRequired)
	{
		setDataType(3458,objDiagnosisRequired);
	}
	
	/**
	 * Retrieves the Service Required.
	 * This field indicates whether this insurance carrier requires services to be listed.
	 * @return ID - ServiceRequired
	 */
	public ID getServiceRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3459);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Service Required.
	 * This field indicates whether this insurance carrier requires services to be listed.
	 * @param strServiceRequired This field indicates whether this insurance carrier requires services to be listed.
	 */ 
	public void setServiceRequired (String strServiceRequired) 
	{
		ID ServiceRequired  = (ID)getDataElement(3459);
		ServiceRequired.setValue(strServiceRequired); 
		setServiceRequired(ServiceRequired);

	} 

	/** 
	 * Set the Service Required.
	 * This field indicates whether this insurance carrier requires services to be listed.
	 * @param objServiceRequired Object of Service Required.
	 */ 
	public void setServiceRequired(ID objServiceRequired)
	{
		setDataType(3459,objServiceRequired);
	}
	
	/**
	 * Retrieves the Patient Name Required.
	 * This field indicates whether this insurance carrier requires a patient name on all requests.  
	 * @return ID - PatientNameRequired
	 */
	public ID getPatientNameRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3460);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Patient Name Required.
	 * This field indicates whether this insurance carrier requires a patient name on all requests.  
	 * @param strPatientNameRequired This field indicates whether this insurance carrier requires a patient name on all requests.  
	 */ 
	public void setPatientNameRequired (String strPatientNameRequired) 
	{
		ID PatientNameRequired  = (ID)getDataElement(3460);
		PatientNameRequired.setValue(strPatientNameRequired); 
		setPatientNameRequired(PatientNameRequired);

	} 

	/** 
	 * Set the Patient Name Required.
	 * This field indicates whether this insurance carrier requires a patient name on all requests.  
	 * @param objPatientNameRequired Object of Patient Name Required.
	 */ 
	public void setPatientNameRequired(ID objPatientNameRequired)
	{
		setDataType(3460,objPatientNameRequired);
	}
	
	/**
	 * Retrieves the Patient Address Required.
	 * This field indicates whether this insurance carrier requires a patient address on all requests.  
	 * @return ID - PatientAddressRequired
	 */
	public ID getPatientAddressRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3461);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Patient Address Required.
	 * This field indicates whether this insurance carrier requires a patient address on all requests.  
	 * @param strPatientAddressRequired This field indicates whether this insurance carrier requires a patient address on all requests.  
	 */ 
	public void setPatientAddressRequired (String strPatientAddressRequired) 
	{
		ID PatientAddressRequired  = (ID)getDataElement(3461);
		PatientAddressRequired.setValue(strPatientAddressRequired); 
		setPatientAddressRequired(PatientAddressRequired);

	} 

	/** 
	 * Set the Patient Address Required.
	 * This field indicates whether this insurance carrier requires a patient address on all requests.  
	 * @param objPatientAddressRequired Object of Patient Address Required.
	 */ 
	public void setPatientAddressRequired(ID objPatientAddressRequired)
	{
		setDataType(3461,objPatientAddressRequired);
	}
	
	/**
	 * Retrieves the Subscribers Name Required.
	 * This field indicates whether this insurance carrier requires subscribers name on all requests.
	 * @return ID - SubscribersNameRequired
	 */
	public ID getSubscribersNameRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3462);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Subscribers Name Required.
	 * This field indicates whether this insurance carrier requires subscribers name on all requests.
	 * @param strSubscribersNameRequired This field indicates whether this insurance carrier requires subscribers name on all requests.
	 */ 
	public void setSubscribersNameRequired (String strSubscribersNameRequired) 
	{
		ID SubscribersNameRequired  = (ID)getDataElement(3462);
		SubscribersNameRequired.setValue(strSubscribersNameRequired); 
		setSubscribersNameRequired(SubscribersNameRequired);

	} 

	/** 
	 * Set the Subscribers Name Required.
	 * This field indicates whether this insurance carrier requires subscribers name on all requests.
	 * @param objSubscribersNameRequired Object of Subscribers Name Required.
	 */ 
	public void setSubscribersNameRequired(ID objSubscribersNameRequired)
	{
		setDataType(3462,objSubscribersNameRequired);
	}
	
	/**
	 * Retrieves the Workman's Comp Indicator.
	 * This field indicates whether this insurance carrier requires workman compensation to be identified.
	 * @return ID - WorkmansCompIndicator
	 */
	public ID getWorkmansCompIndicator() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3463);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Workman's Comp Indicator.
	 * This field indicates whether this insurance carrier requires workman compensation to be identified.
	 * @param strWorkmansCompIndicator This field indicates whether this insurance carrier requires workman compensation to be identified.
	 */ 
	public void setWorkmansCompIndicator (String strWorkmansCompIndicator) 
	{
		ID WorkmansCompIndicator  = (ID)getDataElement(3463);
		WorkmansCompIndicator.setValue(strWorkmansCompIndicator); 
		setWorkmansCompIndicator(WorkmansCompIndicator);

	} 

	/** 
	 * Set the Workman's Comp Indicator.
	 * This field indicates whether this insurance carrier requires workman compensation to be identified.
	 * @param objWorkmansCompIndicator Object of Workman's Comp Indicator.
	 */ 
	public void setWorkmansCompIndicator(ID objWorkmansCompIndicator)
	{
		setDataType(3463,objWorkmansCompIndicator);
	}
	
	/**
	 * Retrieves the Bill Type Required.
	 * This field indicates whether this insurance carrier requires subscribers bill type.  
	 * @return ID - BillTypeRequired
	 */
	public ID getBillTypeRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3464);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Bill Type Required.
	 * This field indicates whether this insurance carrier requires subscribers bill type.  
	 * @param strBillTypeRequired This field indicates whether this insurance carrier requires subscribers bill type.  
	 */ 
	public void setBillTypeRequired (String strBillTypeRequired) 
	{
		ID BillTypeRequired  = (ID)getDataElement(3464);
		BillTypeRequired.setValue(strBillTypeRequired); 
		setBillTypeRequired(BillTypeRequired);

	} 

	/** 
	 * Set the Bill Type Required.
	 * This field indicates whether this insurance carrier requires subscribers bill type.  
	 * @param objBillTypeRequired Object of Bill Type Required.
	 */ 
	public void setBillTypeRequired(ID objBillTypeRequired)
	{
		setDataType(3464,objBillTypeRequired);
	}
	
	/**
	 * Retrieves the Commercial Carrier Name and Address Required.
	 * This field indicates whether this insurance carrier requires commerical carrier name and address.
	 * @return ID - CommercialCarrierNameAddressRequired
	 */
	public ID getCommercialCarrierNameAddressRequired() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3465);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ID)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Commercial Carrier Name and Address Required.
	 * This field indicates whether this insurance carrier requires commerical carrier name and address.
	 * @param strCommercialCarrierNameAddressRequired This field indicates whether this insurance carrier requires commerical carrier name and address.
	 */ 
	public void setCommercialCarrierNameAddressRequired (String strCommercialCarrierNameAddressRequired) 
	{
		ID CommercialCarrierNameAddressRequired  = (ID)getDataElement(3465);
		CommercialCarrierNameAddressRequired.setValue(strCommercialCarrierNameAddressRequired); 
		setCommercialCarrierNameAddressRequired(CommercialCarrierNameAddressRequired);

	} 

	/** 
	 * Set the Commercial Carrier Name and Address Required.
	 * This field indicates whether this insurance carrier requires commerical carrier name and address.
	 * @param objCommercialCarrierNameAddressRequired Object of Commercial Carrier Name and Address Required.
	 */ 
	public void setCommercialCarrierNameAddressRequired(ID objCommercialCarrierNameAddressRequired)
	{
		setDataType(3465,objCommercialCarrierNameAddressRequired);
	}
	
	/**
	 * Retrieves the Policy Number Pattern.
	 *  This field contains the policy number  pattern. This describes what the policy number should look like.  
	 * @return ISingleCollection<ST> - PolicyNumberPattern
	 */
	public ST getPolicyNumberPattern() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3466);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Policy Number Pattern.
	 *  This field contains the policy number  pattern. This describes what the policy number should look like. 
	 * @param strPolicyNumberPattern Use as PolicyNumberPattern.
	 */
	public void setPolicyNumberPattern(String strPolicyNumberPattern) 
	{
		ST PolicyNumberPattern  = (ST)getDataElement(3466);
		PolicyNumberPattern.setValue(strPolicyNumberPattern);
		setPolicyNumberPattern(PolicyNumberPattern);
	}

	/**
	 * Set the Policy Number Pattern.
	 *  This field contains the policy number  pattern. This describes what the policy number should look like. 
	 * @param PolicyNumberPattern Object of Policy Number Pattern.
	 */
	public void setPolicyNumberPattern(ST PolicyNumberPattern)
	{
		setDataType(3466,PolicyNumberPattern);
	}
	
	/**
	 * Retrieves the Group Number Pattern.
	 * This field contains the Group number  pattern. This describes what the group number should look like.  
	 * @return ISingleCollection<ST> - GroupNumberPattern
	 */
	public ST getGroupNumberPattern() 
	{
		ISingleCollection<IDataType> objDataCollection =getDataType(3467);
		if(objDataCollection != null && objDataCollection.size() != 0) 
			return (ST)objDataCollection.elementAt(0);
		else
			return null;
	}
	
	/**
	 * Set the Group Number Pattern.
	 * This field contains the Group number  pattern. This describes what the group number should look like. 
	 * @param strGroupNumberPattern Use as GroupNumberPattern.
	 */
	public void setGroupNumberPattern(String strGroupNumberPattern) 
	{
		ST GroupNumberPattern  = (ST)getDataElement(3467);
		GroupNumberPattern.setValue(strGroupNumberPattern);
		setGroupNumberPattern(GroupNumberPattern);
	}

	/**
	 * Set the Group Number Pattern.
	 * This field contains the Group number  pattern. This describes what the group number should look like. 
	 * @param GroupNumberPattern Object of Group Number Pattern.
	 */
	public void setGroupNumberPattern(ST GroupNumberPattern)
	{
		setDataType(3467,GroupNumberPattern);
	}
}
