/**
 * COCTMT290000UV06BillableClinicalService.java
 * <p>
 * File generated from the coctmt290000UV06::COCTMT290000UV06BillableClinicalService uml Class
 * Generated by IHE - europe, gazelle team
 */
package net.ihe.gazelle.hl7v3.coctmt290000UV06;

import java.io.Serial;
import java.util.ArrayList;
import java.util.List;

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlTransient;
import jakarta.xml.bind.annotation.XmlType;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import net.ihe.gazelle.gen.common.ConstraintValidatorModule;

import org.w3c.dom.Document;
import org.w3c.dom.Node;


/**
 * Description of the class COCTMT290000UV06BillableClinicalService.
 *
 */

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "COCT_MT290000UV06.BillableClinicalService", propOrder = {
	"realmCode",
	"typeId",
	"templateId",
	"id",
	"code",
	"effectiveTime",
	"priorityCode",
	"confidentialityCode",
	"repeatNumber",
	"reasonCode",
	"subject",
	"reusableDevice",
	"product",
	"responsibleParty",
	"secondaryPerformer",
	"performer",
	"author",
	"consultant",
	"location",
	"inFulfillmentOf",
	"reason1",
	"reason2",
	"reason3",
	"component",
	"subjectOf1",
	"subjectOf2",
	"componentOf",
	"classCode",
	"moodCode",
	"nullFlavor"
})
@XmlRootElement(name = "COCT_MT290000UV06.BillableClinicalService")
public class COCTMT290000UV06BillableClinicalService implements java.io.Serializable {
	
	/**
	 * 
	 */
	@Serial
    private static final long serialVersionUID = 1L;

	
	@XmlElement(name = "realmCode", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.datatypes.CS> realmCode;
	@XmlElement(name = "typeId", namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.datatypes.II typeId;
	@XmlElement(name = "templateId", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.datatypes.II> templateId;
	@XmlElement(name = "id", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.datatypes.II> id;
	@XmlElement(name = "code", required = true, namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.datatypes.CD code;
	@XmlElement(name = "effectiveTime", required = true, namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.datatypes.IVLTS effectiveTime;
	@XmlElement(name = "priorityCode", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.datatypes.CE> priorityCode;
	@XmlElement(name = "confidentialityCode", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.datatypes.CE> confidentialityCode;
	@XmlElement(name = "repeatNumber", namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.datatypes.IVLINT repeatNumber;
	@XmlElement(name = "reasonCode", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.datatypes.CE> reasonCode;
	@XmlElement(name = "subject", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject5> subject;
	@XmlElement(name = "reusableDevice", namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06ReusableDevice reusableDevice;
	@XmlElement(name = "product", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Product1> product;
	@XmlElement(name = "responsibleParty", namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06ResponsibleParty responsibleParty;
	@XmlElement(name = "secondaryPerformer", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06SecondaryPerformer> secondaryPerformer;
	@XmlElement(name = "performer", namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Performer performer;
	@XmlElement(name = "author", namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Author author;
	@XmlElement(name = "consultant", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Consultant> consultant;
	@XmlElement(name = "location", namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Location location;
	@XmlElement(name = "inFulfillmentOf", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06InFulfillmentOf> inFulfillmentOf;
	@XmlElement(name = "reason1", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason1> reason1;
	@XmlElement(name = "reason2", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason4> reason2;
	@XmlElement(name = "reason3", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason3> reason3;
	@XmlElement(name = "component", namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Component2 component;
	@XmlElement(name = "subjectOf1", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject2> subjectOf1;
	@XmlElement(name = "subjectOf2", namespace = "urn:hl7-org:v3")
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject subjectOf2;
	@XmlElement(name = "componentOf", namespace = "urn:hl7-org:v3")
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Component1> componentOf;
	@XmlAttribute(name = "classCode", required = true)
	public net.ihe.gazelle.hl7v3.voc.ActClassRoot classCode;
	@XmlAttribute(name = "moodCode", required = true)
	public net.ihe.gazelle.hl7v3.voc.ActMoodCompletionTrack moodCode;
	@XmlAttribute(name = "nullFlavor")
	public net.ihe.gazelle.hl7v3.voc.NullFlavor nullFlavor;
	
	/**
	 * An attribute containing marshalled element node
	 */
	@XmlTransient
	private org.w3c.dom.Node _xmlNodePresentation;
	
	
	/**
	 * Return realmCode.
	 * @return realmCode
	 */
	public List<net.ihe.gazelle.hl7v3.datatypes.CS> getRealmCode() {
		if (realmCode == null) {
	        realmCode = new ArrayList<>();
	    }
	    return realmCode;
	}
	
	/**
	 * Set a value to attribute realmCode.
     */
	public void setRealmCode(List<net.ihe.gazelle.hl7v3.datatypes.CS> realmCode) {
	    this.realmCode = realmCode;
	}
	
	
	
	/**
	 * Add a realmCode to the realmCode collection.
	 * @param realmCode_elt Element to add.
	 */
	public void addRealmCode(net.ihe.gazelle.hl7v3.datatypes.CS realmCode_elt) {
	    this.realmCode.add(realmCode_elt);
	}
	
	/**
	 * Remove a realmCode to the realmCode collection.
	 * @param realmCode_elt Element to remove
	 */
	public void removeRealmCode(net.ihe.gazelle.hl7v3.datatypes.CS realmCode_elt) {
	    this.realmCode.remove(realmCode_elt);
	}
	
	/**
	 * Return typeId.
	 * @return typeId
	 */
	public net.ihe.gazelle.hl7v3.datatypes.II getTypeId() {
	    return typeId;
	}
	
	/**
	 * Set a value to attribute typeId.
     */
	public void setTypeId(net.ihe.gazelle.hl7v3.datatypes.II typeId) {
	    this.typeId = typeId;
	}
	
	
	
	
	/**
	 * Return templateId.
	 * @return templateId
	 */
	public List<net.ihe.gazelle.hl7v3.datatypes.II> getTemplateId() {
		if (templateId == null) {
	        templateId = new ArrayList<>();
	    }
	    return templateId;
	}
	
	/**
	 * Set a value to attribute templateId.
     */
	public void setTemplateId(List<net.ihe.gazelle.hl7v3.datatypes.II> templateId) {
	    this.templateId = templateId;
	}
	
	
	
	/**
	 * Add a templateId to the templateId collection.
	 * @param templateId_elt Element to add.
	 */
	public void addTemplateId(net.ihe.gazelle.hl7v3.datatypes.II templateId_elt) {
	    this.templateId.add(templateId_elt);
	}
	
	/**
	 * Remove a templateId to the templateId collection.
	 * @param templateId_elt Element to remove
	 */
	public void removeTemplateId(net.ihe.gazelle.hl7v3.datatypes.II templateId_elt) {
	    this.templateId.remove(templateId_elt);
	}
	
	/**
	 * Return id.
	 * @return id
	 */
	public List<net.ihe.gazelle.hl7v3.datatypes.II> getId() {
		if (id == null) {
	        id = new ArrayList<>();
	    }
	    return id;
	}
	
	/**
	 * Set a value to attribute id.
     */
	public void setId(List<net.ihe.gazelle.hl7v3.datatypes.II> id) {
	    this.id = id;
	}
	
	
	
	/**
	 * Add a id to the id collection.
	 * @param id_elt Element to add.
	 */
	public void addId(net.ihe.gazelle.hl7v3.datatypes.II id_elt) {
	    this.id.add(id_elt);
	}
	
	/**
	 * Remove a id to the id collection.
	 * @param id_elt Element to remove
	 */
	public void removeId(net.ihe.gazelle.hl7v3.datatypes.II id_elt) {
	    this.id.remove(id_elt);
	}
	
	/**
	 * Return code.
	 * @return code
	 */
	public net.ihe.gazelle.hl7v3.datatypes.CD getCode() {
	    return code;
	}
	
	/**
	 * Set a value to attribute code.
     */
	public void setCode(net.ihe.gazelle.hl7v3.datatypes.CD code) {
	    this.code = code;
	}
	
	
	
	
	/**
	 * Return effectiveTime.
	 * @return effectiveTime
	 */
	public net.ihe.gazelle.hl7v3.datatypes.IVLTS getEffectiveTime() {
	    return effectiveTime;
	}
	
	/**
	 * Set a value to attribute effectiveTime.
     */
	public void setEffectiveTime(net.ihe.gazelle.hl7v3.datatypes.IVLTS effectiveTime) {
	    this.effectiveTime = effectiveTime;
	}
	
	
	
	
	/**
	 * Return priorityCode.
	 * @return priorityCode
	 */
	public List<net.ihe.gazelle.hl7v3.datatypes.CE> getPriorityCode() {
		if (priorityCode == null) {
	        priorityCode = new ArrayList<>();
	    }
	    return priorityCode;
	}
	
	/**
	 * Set a value to attribute priorityCode.
     */
	public void setPriorityCode(List<net.ihe.gazelle.hl7v3.datatypes.CE> priorityCode) {
	    this.priorityCode = priorityCode;
	}
	
	
	
	/**
	 * Add a priorityCode to the priorityCode collection.
	 * @param priorityCode_elt Element to add.
	 */
	public void addPriorityCode(net.ihe.gazelle.hl7v3.datatypes.CE priorityCode_elt) {
	    this.priorityCode.add(priorityCode_elt);
	}
	
	/**
	 * Remove a priorityCode to the priorityCode collection.
	 * @param priorityCode_elt Element to remove
	 */
	public void removePriorityCode(net.ihe.gazelle.hl7v3.datatypes.CE priorityCode_elt) {
	    this.priorityCode.remove(priorityCode_elt);
	}
	
	/**
	 * Return confidentialityCode.
	 * @return confidentialityCode
	 */
	public List<net.ihe.gazelle.hl7v3.datatypes.CE> getConfidentialityCode() {
		if (confidentialityCode == null) {
	        confidentialityCode = new ArrayList<>();
	    }
	    return confidentialityCode;
	}
	
	/**
	 * Set a value to attribute confidentialityCode.
     */
	public void setConfidentialityCode(List<net.ihe.gazelle.hl7v3.datatypes.CE> confidentialityCode) {
	    this.confidentialityCode = confidentialityCode;
	}
	
	
	
	/**
	 * Add a confidentialityCode to the confidentialityCode collection.
	 * @param confidentialityCode_elt Element to add.
	 */
	public void addConfidentialityCode(net.ihe.gazelle.hl7v3.datatypes.CE confidentialityCode_elt) {
	    this.confidentialityCode.add(confidentialityCode_elt);
	}
	
	/**
	 * Remove a confidentialityCode to the confidentialityCode collection.
	 * @param confidentialityCode_elt Element to remove
	 */
	public void removeConfidentialityCode(net.ihe.gazelle.hl7v3.datatypes.CE confidentialityCode_elt) {
	    this.confidentialityCode.remove(confidentialityCode_elt);
	}
	
	/**
	 * Return repeatNumber.
	 * @return repeatNumber
	 */
	public net.ihe.gazelle.hl7v3.datatypes.IVLINT getRepeatNumber() {
	    return repeatNumber;
	}
	
	/**
	 * Set a value to attribute repeatNumber.
     */
	public void setRepeatNumber(net.ihe.gazelle.hl7v3.datatypes.IVLINT repeatNumber) {
	    this.repeatNumber = repeatNumber;
	}
	
	
	
	
	/**
	 * Return reasonCode.
	 * @return reasonCode
	 */
	public List<net.ihe.gazelle.hl7v3.datatypes.CE> getReasonCode() {
		if (reasonCode == null) {
	        reasonCode = new ArrayList<>();
	    }
	    return reasonCode;
	}
	
	/**
	 * Set a value to attribute reasonCode.
     */
	public void setReasonCode(List<net.ihe.gazelle.hl7v3.datatypes.CE> reasonCode) {
	    this.reasonCode = reasonCode;
	}
	
	
	
	/**
	 * Add a reasonCode to the reasonCode collection.
	 * @param reasonCode_elt Element to add.
	 */
	public void addReasonCode(net.ihe.gazelle.hl7v3.datatypes.CE reasonCode_elt) {
	    this.reasonCode.add(reasonCode_elt);
	}
	
	/**
	 * Remove a reasonCode to the reasonCode collection.
	 * @param reasonCode_elt Element to remove
	 */
	public void removeReasonCode(net.ihe.gazelle.hl7v3.datatypes.CE reasonCode_elt) {
	    this.reasonCode.remove(reasonCode_elt);
	}
	
	/**
	 * Return subject.
	 * @return subject
	 */
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject5> getSubject() {
		if (subject == null) {
	        subject = new ArrayList<>();
	    }
	    return subject;
	}
	
	/**
	 * Set a value to attribute subject.
     */
	public void setSubject(List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject5> subject) {
	    this.subject = subject;
	}
	
	
	
	/**
	 * Add a subject to the subject collection.
	 * @param subject_elt Element to add.
	 */
	public void addSubject(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject5 subject_elt) {
	    this.subject.add(subject_elt);
	}
	
	/**
	 * Remove a subject to the subject collection.
	 * @param subject_elt Element to remove
	 */
	public void removeSubject(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject5 subject_elt) {
	    this.subject.remove(subject_elt);
	}
	
	/**
	 * Return reusableDevice.
	 * @return reusableDevice
	 */
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06ReusableDevice getReusableDevice() {
	    return reusableDevice;
	}
	
	/**
	 * Set a value to attribute reusableDevice.
     */
	public void setReusableDevice(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06ReusableDevice reusableDevice) {
	    this.reusableDevice = reusableDevice;
	}
	
	
	
	
	/**
	 * Return product.
	 * @return product
	 */
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Product1> getProduct() {
		if (product == null) {
	        product = new ArrayList<>();
	    }
	    return product;
	}
	
	/**
	 * Set a value to attribute product.
     */
	public void setProduct(List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Product1> product) {
	    this.product = product;
	}
	
	
	
	/**
	 * Add a product to the product collection.
	 * @param product_elt Element to add.
	 */
	public void addProduct(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Product1 product_elt) {
	    this.product.add(product_elt);
	}
	
	/**
	 * Remove a product to the product collection.
	 * @param product_elt Element to remove
	 */
	public void removeProduct(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Product1 product_elt) {
	    this.product.remove(product_elt);
	}
	
	/**
	 * Return responsibleParty.
	 * @return responsibleParty
	 */
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06ResponsibleParty getResponsibleParty() {
	    return responsibleParty;
	}
	
	/**
	 * Set a value to attribute responsibleParty.
     */
	public void setResponsibleParty(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06ResponsibleParty responsibleParty) {
	    this.responsibleParty = responsibleParty;
	}
	
	
	
	
	/**
	 * Return secondaryPerformer.
	 * @return secondaryPerformer
	 */
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06SecondaryPerformer> getSecondaryPerformer() {
		if (secondaryPerformer == null) {
	        secondaryPerformer = new ArrayList<>();
	    }
	    return secondaryPerformer;
	}
	
	/**
	 * Set a value to attribute secondaryPerformer.
     */
	public void setSecondaryPerformer(List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06SecondaryPerformer> secondaryPerformer) {
	    this.secondaryPerformer = secondaryPerformer;
	}
	
	
	
	/**
	 * Add a secondaryPerformer to the secondaryPerformer collection.
	 * @param secondaryPerformer_elt Element to add.
	 */
	public void addSecondaryPerformer(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06SecondaryPerformer secondaryPerformer_elt) {
	    this.secondaryPerformer.add(secondaryPerformer_elt);
	}
	
	/**
	 * Remove a secondaryPerformer to the secondaryPerformer collection.
	 * @param secondaryPerformer_elt Element to remove
	 */
	public void removeSecondaryPerformer(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06SecondaryPerformer secondaryPerformer_elt) {
	    this.secondaryPerformer.remove(secondaryPerformer_elt);
	}
	
	/**
	 * Return performer.
	 * @return performer
	 */
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Performer getPerformer() {
	    return performer;
	}
	
	/**
	 * Set a value to attribute performer.
     */
	public void setPerformer(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Performer performer) {
	    this.performer = performer;
	}
	
	
	
	
	/**
	 * Return author.
	 * @return author
	 */
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Author getAuthor() {
	    return author;
	}
	
	/**
	 * Set a value to attribute author.
     */
	public void setAuthor(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Author author) {
	    this.author = author;
	}
	
	
	
	
	/**
	 * Return consultant.
	 * @return consultant
	 */
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Consultant> getConsultant() {
		if (consultant == null) {
	        consultant = new ArrayList<>();
	    }
	    return consultant;
	}
	
	/**
	 * Set a value to attribute consultant.
     */
	public void setConsultant(List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Consultant> consultant) {
	    this.consultant = consultant;
	}
	
	
	
	/**
	 * Add a consultant to the consultant collection.
	 * @param consultant_elt Element to add.
	 */
	public void addConsultant(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Consultant consultant_elt) {
	    this.consultant.add(consultant_elt);
	}
	
	/**
	 * Remove a consultant to the consultant collection.
	 * @param consultant_elt Element to remove
	 */
	public void removeConsultant(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Consultant consultant_elt) {
	    this.consultant.remove(consultant_elt);
	}
	
	/**
	 * Return location.
	 * @return location
	 */
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Location getLocation() {
	    return location;
	}
	
	/**
	 * Set a value to attribute location.
     */
	public void setLocation(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Location location) {
	    this.location = location;
	}
	
	
	
	
	/**
	 * Return inFulfillmentOf.
	 * @return inFulfillmentOf
	 */
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06InFulfillmentOf> getInFulfillmentOf() {
		if (inFulfillmentOf == null) {
	        inFulfillmentOf = new ArrayList<>();
	    }
	    return inFulfillmentOf;
	}
	
	/**
	 * Set a value to attribute inFulfillmentOf.
     */
	public void setInFulfillmentOf(List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06InFulfillmentOf> inFulfillmentOf) {
	    this.inFulfillmentOf = inFulfillmentOf;
	}
	
	
	
	/**
	 * Add a inFulfillmentOf to the inFulfillmentOf collection.
	 * @param inFulfillmentOf_elt Element to add.
	 */
	public void addInFulfillmentOf(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06InFulfillmentOf inFulfillmentOf_elt) {
	    this.inFulfillmentOf.add(inFulfillmentOf_elt);
	}
	
	/**
	 * Remove a inFulfillmentOf to the inFulfillmentOf collection.
	 * @param inFulfillmentOf_elt Element to remove
	 */
	public void removeInFulfillmentOf(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06InFulfillmentOf inFulfillmentOf_elt) {
	    this.inFulfillmentOf.remove(inFulfillmentOf_elt);
	}
	
	/**
	 * Return reason1.
	 * @return reason1
	 */
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason1> getReason1() {
		if (reason1 == null) {
	        reason1 = new ArrayList<>();
	    }
	    return reason1;
	}
	
	/**
	 * Set a value to attribute reason1.
     */
	public void setReason1(List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason1> reason1) {
	    this.reason1 = reason1;
	}
	
	
	
	/**
	 * Add a reason1 to the reason1 collection.
	 * @param reason1_elt Element to add.
	 */
	public void addReason1(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason1 reason1_elt) {
	    this.reason1.add(reason1_elt);
	}
	
	/**
	 * Remove a reason1 to the reason1 collection.
	 * @param reason1_elt Element to remove
	 */
	public void removeReason1(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason1 reason1_elt) {
	    this.reason1.remove(reason1_elt);
	}
	
	/**
	 * Return reason2.
	 * @return reason2
	 */
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason4> getReason2() {
		if (reason2 == null) {
	        reason2 = new ArrayList<>();
	    }
	    return reason2;
	}
	
	/**
	 * Set a value to attribute reason2.
     */
	public void setReason2(List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason4> reason2) {
	    this.reason2 = reason2;
	}
	
	
	
	/**
	 * Add a reason2 to the reason2 collection.
	 * @param reason2_elt Element to add.
	 */
	public void addReason2(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason4 reason2_elt) {
	    this.reason2.add(reason2_elt);
	}
	
	/**
	 * Remove a reason2 to the reason2 collection.
	 * @param reason2_elt Element to remove
	 */
	public void removeReason2(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason4 reason2_elt) {
	    this.reason2.remove(reason2_elt);
	}
	
	/**
	 * Return reason3.
	 * @return reason3
	 */
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason3> getReason3() {
		if (reason3 == null) {
	        reason3 = new ArrayList<>();
	    }
	    return reason3;
	}
	
	/**
	 * Set a value to attribute reason3.
     */
	public void setReason3(List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason3> reason3) {
	    this.reason3 = reason3;
	}
	
	
	
	/**
	 * Add a reason3 to the reason3 collection.
	 * @param reason3_elt Element to add.
	 */
	public void addReason3(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason3 reason3_elt) {
	    this.reason3.add(reason3_elt);
	}
	
	/**
	 * Remove a reason3 to the reason3 collection.
	 * @param reason3_elt Element to remove
	 */
	public void removeReason3(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Reason3 reason3_elt) {
	    this.reason3.remove(reason3_elt);
	}
	
	/**
	 * Return component.
	 * @return component
	 */
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Component2 getComponent() {
	    return component;
	}
	
	/**
	 * Set a value to attribute component.
     */
	public void setComponent(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Component2 component) {
	    this.component = component;
	}
	
	
	
	
	/**
	 * Return subjectOf1.
	 * @return subjectOf1
	 */
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject2> getSubjectOf1() {
		if (subjectOf1 == null) {
	        subjectOf1 = new ArrayList<>();
	    }
	    return subjectOf1;
	}
	
	/**
	 * Set a value to attribute subjectOf1.
     */
	public void setSubjectOf1(List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject2> subjectOf1) {
	    this.subjectOf1 = subjectOf1;
	}
	
	
	
	/**
	 * Add a subjectOf1 to the subjectOf1 collection.
	 * @param subjectOf1_elt Element to add.
	 */
	public void addSubjectOf1(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject2 subjectOf1_elt) {
	    this.subjectOf1.add(subjectOf1_elt);
	}
	
	/**
	 * Remove a subjectOf1 to the subjectOf1 collection.
	 * @param subjectOf1_elt Element to remove
	 */
	public void removeSubjectOf1(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject2 subjectOf1_elt) {
	    this.subjectOf1.remove(subjectOf1_elt);
	}
	
	/**
	 * Return subjectOf2.
	 * @return subjectOf2
	 */
	public net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject getSubjectOf2() {
	    return subjectOf2;
	}
	
	/**
	 * Set a value to attribute subjectOf2.
     */
	public void setSubjectOf2(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject subjectOf2) {
	    this.subjectOf2 = subjectOf2;
	}
	
	
	
	
	/**
	 * Return componentOf.
	 * @return componentOf
	 */
	public List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Component1> getComponentOf() {
		if (componentOf == null) {
	        componentOf = new ArrayList<>();
	    }
	    return componentOf;
	}
	
	/**
	 * Set a value to attribute componentOf.
     */
	public void setComponentOf(List<net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Component1> componentOf) {
	    this.componentOf = componentOf;
	}
	
	
	
	/**
	 * Add a componentOf to the componentOf collection.
	 * @param componentOf_elt Element to add.
	 */
	public void addComponentOf(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Component1 componentOf_elt) {
	    this.componentOf.add(componentOf_elt);
	}
	
	/**
	 * Remove a componentOf to the componentOf collection.
	 * @param componentOf_elt Element to remove
	 */
	public void removeComponentOf(net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Component1 componentOf_elt) {
	    this.componentOf.remove(componentOf_elt);
	}
	
	/**
	 * Return classCode.
	 * @return classCode
	 */
	public net.ihe.gazelle.hl7v3.voc.ActClassRoot getClassCode() {
	    return classCode;
	}
	
	/**
	 * Set a value to attribute classCode.
     */
	public void setClassCode(net.ihe.gazelle.hl7v3.voc.ActClassRoot classCode) {
	    this.classCode = classCode;
	}
	
	
	
	
	/**
	 * Return moodCode.
	 * @return moodCode
	 */
	public net.ihe.gazelle.hl7v3.voc.ActMoodCompletionTrack getMoodCode() {
	    return moodCode;
	}
	
	/**
	 * Set a value to attribute moodCode.
     */
	public void setMoodCode(net.ihe.gazelle.hl7v3.voc.ActMoodCompletionTrack moodCode) {
	    this.moodCode = moodCode;
	}
	
	
	
	
	/**
	 * Return nullFlavor.
	 * @return nullFlavor
	 */
	public net.ihe.gazelle.hl7v3.voc.NullFlavor getNullFlavor() {
	    return nullFlavor;
	}
	
	/**
	 * Set a value to attribute nullFlavor.
     */
	public void setNullFlavor(net.ihe.gazelle.hl7v3.voc.NullFlavor nullFlavor) {
	    this.nullFlavor = nullFlavor;
	}
	
	
	
	
	
	public Node get_xmlNodePresentation() {
		if (_xmlNodePresentation == null){
				JAXBContext jc;
				DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
				dbf.setNamespaceAware(true);
				DocumentBuilder db = null;
				Document doc = null;
				try {
					db = dbf.newDocumentBuilder();
					doc = db.newDocument();
				} catch (ParserConfigurationException ignored) {}
				try {
					jc = JAXBContext.newInstance("net.ihe.gazelle.hl7v3.coctmt290000UV06");
					Marshaller m = jc.createMarshaller();
					m.marshal(this, doc);
					_xmlNodePresentation = doc.getElementsByTagNameNS("urn:hl7-org:v3", "COCT_MT290000UV06.BillableClinicalService").item(0);
				} catch (JAXBException e) {
					try{
						db = dbf.newDocumentBuilder();
						_xmlNodePresentation = db.newDocument();
					}
					catch(Exception ignored){}
				}
			}
			return _xmlNodePresentation;
	}
	
	public void set_xmlNodePresentation(Node _xmlNodePresentation) {
		this._xmlNodePresentation = _xmlNodePresentation;
	}
	
	
	

	
	/**
     * validate by a module of validation
     * 
     */
   public static void validateByModule(COCTMT290000UV06BillableClinicalService cOCTMT290000UV06BillableClinicalService, String _location, ConstraintValidatorModule cvm, List<net.ihe.gazelle.validation.Notification> diagnostic){
   		if (cOCTMT290000UV06BillableClinicalService != null){
   			cvm.validate(cOCTMT290000UV06BillableClinicalService, _location, diagnostic);
			{
				int i = 0;
				for (net.ihe.gazelle.hl7v3.datatypes.CS realmCode: cOCTMT290000UV06BillableClinicalService.getRealmCode()){
					net.ihe.gazelle.hl7v3.datatypes.CS.validateByModule(realmCode, _location + "/realmCode[" + i + "]", cvm, diagnostic);
					i++;
				}
			}
			
			net.ihe.gazelle.hl7v3.datatypes.II.validateByModule(cOCTMT290000UV06BillableClinicalService.getTypeId(), _location + "/typeId", cvm, diagnostic);
			{
				int i = 0;
				for (net.ihe.gazelle.hl7v3.datatypes.II templateId: cOCTMT290000UV06BillableClinicalService.getTemplateId()){
					net.ihe.gazelle.hl7v3.datatypes.II.validateByModule(templateId, _location + "/templateId[" + i + "]", cvm, diagnostic);
					i++;
				}
			}
			
			{
				int i = 0;
				for (net.ihe.gazelle.hl7v3.datatypes.II id: cOCTMT290000UV06BillableClinicalService.getId()){
					net.ihe.gazelle.hl7v3.datatypes.II.validateByModule(id, _location + "/id[" + i + "]", cvm, diagnostic);
					i++;
				}
			}
			
			net.ihe.gazelle.hl7v3.datatypes.CD.validateByModule(cOCTMT290000UV06BillableClinicalService.getCode(), _location + "/code", cvm, diagnostic);
			net.ihe.gazelle.hl7v3.datatypes.IVLTS.validateByModule(cOCTMT290000UV06BillableClinicalService.getEffectiveTime(), _location + "/effectiveTime", cvm, diagnostic);
			{
				int i = 0;
				for (net.ihe.gazelle.hl7v3.datatypes.CE priorityCode: cOCTMT290000UV06BillableClinicalService.getPriorityCode()){
					net.ihe.gazelle.hl7v3.datatypes.CE.validateByModule(priorityCode, _location + "/priorityCode[" + i + "]", cvm, diagnostic);
					i++;
				}
			}
			
			{
				int i = 0;
				for (net.ihe.gazelle.hl7v3.datatypes.CE confidentialityCode: cOCTMT290000UV06BillableClinicalService.getConfidentialityCode()){
					net.ihe.gazelle.hl7v3.datatypes.CE.validateByModule(confidentialityCode, _location + "/confidentialityCode[" + i + "]", cvm, diagnostic);
					i++;
				}
			}
			
			net.ihe.gazelle.hl7v3.datatypes.IVLINT.validateByModule(cOCTMT290000UV06BillableClinicalService.getRepeatNumber(), _location + "/repeatNumber", cvm, diagnostic);
			{
				int i = 0;
				for (net.ihe.gazelle.hl7v3.datatypes.CE reasonCode: cOCTMT290000UV06BillableClinicalService.getReasonCode()){
					net.ihe.gazelle.hl7v3.datatypes.CE.validateByModule(reasonCode, _location + "/reasonCode[" + i + "]", cvm, diagnostic);
					i++;
				}
			}
			
			{
				int i = 0;
				for (net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject5 subject: cOCTMT290000UV06BillableClinicalService.getSubject()){
					net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Subject5.validateByModule(subject, _location + "/subject[" + i + "]", cvm, diagnostic);
					i++;
				}
			}
			
			net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06ReusableDevice.validateByModule(cOCTMT290000UV06BillableClinicalService.getReusableDevice(), _location + "/reusableDevice", cvm, diagnostic);
			{
				int i = 0;
				for (net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Product1 product: cOCTMT290000UV06BillableClinicalService.getProduct()){
					net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Product1.validateByModule(product, _location + "/product[" + i + "]", cvm, diagnostic);
					i++;
				}
			}
			
			net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06ResponsibleParty.validateByModule(cOCTMT290000UV06BillableClinicalService.getResponsibleParty(), _location + "/responsibleParty", cvm, diagnostic);
			{
				int i = 0;
				for (net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06SecondaryPerformer secondaryPerformer: cOCTMT290000UV06BillableClinicalService.getSecondaryPerformer()){
					net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06SecondaryPerformer.validateByModule(secondaryPerformer, _location + "/secondaryPerformer[" + i + "]", cvm, diagnostic);
					i++;
				}
			}
			
			net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Performer.validateByModule(cOCTMT290000UV06BillableClinicalService.getPerformer(), _location + "/performer", cvm, diagnostic);
			net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Author.validateByModule(cOCTMT290000UV06BillableClinicalService.getAuthor(), _location + "/author", cvm, diagnostic);
			{
				int i = 0;
				for (net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Consultant consultant: cOCTMT290000UV06BillableClinicalService.getConsultant()){
					net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Consultant.validateByModule(consultant, _location + "/consultant[" + i + "]", cvm, diagnostic);
					i++;
				}
			}
			
			net.ihe.gazelle.hl7v3.coctmt290000UV06.COCTMT290000UV06Location.validateByModule(cOCTMT290000UV06BillableClinicalService.getLocation(), _location + "/location", cvm, diagnostic);
			{
				int i = 0;
