001package org.hl7.fhir.r4.model;
002
003import java.math.BigDecimal;
004
005/*-
006 * #%L
007 * org.hl7.fhir.r4
008 * %%
009 * Copyright (C) 2014 - 2019 Health Level 7
010 * %%
011 * Licensed under the Apache License, Version 2.0 (the "License");
012 * you may not use this file except in compliance with the License.
013 * You may obtain a copy of the License at
014 * 
015 *      http://www.apache.org/licenses/LICENSE-2.0
016 * 
017 * Unless required by applicable law or agreed to in writing, software
018 * distributed under the License is distributed on an "AS IS" BASIS,
019 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
020 * See the License for the specific language governing permissions and
021 * limitations under the License.
022 * #L%
023 */
024
025/*
026  Copyright (c) 2011+, HL7, Inc.
027  All rights reserved.
028  
029  Redistribution and use in source and binary forms, with or without modification, 
030  are permitted provided that the following conditions are met:
031  
032   * Redistributions of source code must retain the above copyright notice, this 
033     list of conditions and the following disclaimer.
034   * Redistributions in binary form must reproduce the above copyright notice, 
035     this list of conditions and the following disclaimer in the documentation 
036     and/or other materials provided with the distribution.
037   * Neither the name of HL7 nor the names of its contributors may be used to 
038     endorse or promote products derived from this software without specific 
039     prior written permission.
040  
041  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
042  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
043  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
044  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
045  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
046  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
047  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
048  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
049  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
050  POSSIBILITY OF SUCH DAMAGE.
051  
052*/
053
054// Generated on Thu, Dec 13, 2018 14:07+1100 for FHIR v4.0.0
055import java.util.ArrayList;
056import java.util.Date;
057import java.util.List;
058
059import org.hl7.fhir.exceptions.FHIRException;
060import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
061import org.hl7.fhir.utilities.Utilities;
062
063import ca.uhn.fhir.model.api.annotation.Block;
064import ca.uhn.fhir.model.api.annotation.Child;
065import ca.uhn.fhir.model.api.annotation.Description;
066import ca.uhn.fhir.model.api.annotation.ResourceDef;
067import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
068/**
069 * The resource ChargeItem describes the provision of healthcare provider products for a certain patient, therefore referring not only to the product, but containing in addition details of the provision, like date, time, amounts and participating organizations and persons. Main Usage of the ChargeItem is to enable the billing process and internal cost allocation.
070 */
071@ResourceDef(name="ChargeItem", profile="http://hl7.org/fhir/StructureDefinition/ChargeItem")
072public class ChargeItem extends DomainResource {
073
074    public enum ChargeItemStatus {
075        /**
076         * The charge item has been entered, but the charged service is not  yet complete, so it shall not be billed yet but might be used in the context of pre-authorization.
077         */
078        PLANNED, 
079        /**
080         * The charge item is ready for billing.
081         */
082        BILLABLE, 
083        /**
084         * The charge item has been determined to be not billable (e.g. due to rules associated with the billing code).
085         */
086        NOTBILLABLE, 
087        /**
088         * The processing of the charge was aborted.
089         */
090        ABORTED, 
091        /**
092         * The charge item has been billed (e.g. a billing engine has generated financial transactions by applying the associated ruled for the charge item to the context of the Encounter, and placed them into Claims/Invoices.
093         */
094        BILLED, 
095        /**
096         * The charge item has been entered in error and should not be processed for billing.
097         */
098        ENTEREDINERROR, 
099        /**
100         * The authoring system does not know which of the status values currently applies for this charge item  Note: This concept is not to be used for "other" - one of the listed statuses is presumed to apply, it's just not known which one.
101         */
102        UNKNOWN, 
103        /**
104         * added to help the parsers with the generic types
105         */
106        NULL;
107        public static ChargeItemStatus fromCode(String codeString) throws FHIRException {
108            if (codeString == null || "".equals(codeString))
109                return null;
110        if ("planned".equals(codeString))
111          return PLANNED;
112        if ("billable".equals(codeString))
113          return BILLABLE;
114        if ("not-billable".equals(codeString))
115          return NOTBILLABLE;
116        if ("aborted".equals(codeString))
117          return ABORTED;
118        if ("billed".equals(codeString))
119          return BILLED;
120        if ("entered-in-error".equals(codeString))
121          return ENTEREDINERROR;
122        if ("unknown".equals(codeString))
123          return UNKNOWN;
124        if (Configuration.isAcceptInvalidEnums())
125          return null;
126        else
127          throw new FHIRException("Unknown ChargeItemStatus code '"+codeString+"'");
128        }
129        public String toCode() {
130          switch (this) {
131            case PLANNED: return "planned";
132            case BILLABLE: return "billable";
133            case NOTBILLABLE: return "not-billable";
134            case ABORTED: return "aborted";
135            case BILLED: return "billed";
136            case ENTEREDINERROR: return "entered-in-error";
137            case UNKNOWN: return "unknown";
138            default: return "?";
139          }
140        }
141        public String getSystem() {
142          switch (this) {
143            case PLANNED: return "http://hl7.org/fhir/chargeitem-status";
144            case BILLABLE: return "http://hl7.org/fhir/chargeitem-status";
145            case NOTBILLABLE: return "http://hl7.org/fhir/chargeitem-status";
146            case ABORTED: return "http://hl7.org/fhir/chargeitem-status";
147            case BILLED: return "http://hl7.org/fhir/chargeitem-status";
148            case ENTEREDINERROR: return "http://hl7.org/fhir/chargeitem-status";
149            case UNKNOWN: return "http://hl7.org/fhir/chargeitem-status";
150            default: return "?";
151          }
152        }
153        public String getDefinition() {
154          switch (this) {
155            case PLANNED: return "The charge item has been entered, but the charged service is not  yet complete, so it shall not be billed yet but might be used in the context of pre-authorization.";
156            case BILLABLE: return "The charge item is ready for billing.";
157            case NOTBILLABLE: return "The charge item has been determined to be not billable (e.g. due to rules associated with the billing code).";
158            case ABORTED: return "The processing of the charge was aborted.";
159            case BILLED: return "The charge item has been billed (e.g. a billing engine has generated financial transactions by applying the associated ruled for the charge item to the context of the Encounter, and placed them into Claims/Invoices.";
160            case ENTEREDINERROR: return "The charge item has been entered in error and should not be processed for billing.";
161            case UNKNOWN: return "The authoring system does not know which of the status values currently applies for this charge item  Note: This concept is not to be used for \"other\" - one of the listed statuses is presumed to apply, it's just not known which one.";
162            default: return "?";
163          }
164        }
165        public String getDisplay() {
166          switch (this) {
167            case PLANNED: return "Planned";
168            case BILLABLE: return "Billable";
169            case NOTBILLABLE: return "Not billable";
170            case ABORTED: return "Aborted";
171            case BILLED: return "Billed";
172            case ENTEREDINERROR: return "Entered in Error";
173            case UNKNOWN: return "Unknown";
174            default: return "?";
175          }
176        }
177    }
178
179  public static class ChargeItemStatusEnumFactory implements EnumFactory<ChargeItemStatus> {
180    public ChargeItemStatus fromCode(String codeString) throws IllegalArgumentException {
181      if (codeString == null || "".equals(codeString))
182            if (codeString == null || "".equals(codeString))
183                return null;
184        if ("planned".equals(codeString))
185          return ChargeItemStatus.PLANNED;
186        if ("billable".equals(codeString))
187          return ChargeItemStatus.BILLABLE;
188        if ("not-billable".equals(codeString))
189          return ChargeItemStatus.NOTBILLABLE;
190        if ("aborted".equals(codeString))
191          return ChargeItemStatus.ABORTED;
192        if ("billed".equals(codeString))
193          return ChargeItemStatus.BILLED;
194        if ("entered-in-error".equals(codeString))
195          return ChargeItemStatus.ENTEREDINERROR;
196        if ("unknown".equals(codeString))
197          return ChargeItemStatus.UNKNOWN;
198        throw new IllegalArgumentException("Unknown ChargeItemStatus code '"+codeString+"'");
199        }
200        public Enumeration<ChargeItemStatus> fromType(Base code) throws FHIRException {
201          if (code == null)
202            return null;
203          if (code.isEmpty())
204            return new Enumeration<ChargeItemStatus>(this);
205          String codeString = ((PrimitiveType) code).asStringValue();
206          if (codeString == null || "".equals(codeString))
207            return null;
208        if ("planned".equals(codeString))
209          return new Enumeration<ChargeItemStatus>(this, ChargeItemStatus.PLANNED);
210        if ("billable".equals(codeString))
211          return new Enumeration<ChargeItemStatus>(this, ChargeItemStatus.BILLABLE);
212        if ("not-billable".equals(codeString))
213          return new Enumeration<ChargeItemStatus>(this, ChargeItemStatus.NOTBILLABLE);
214        if ("aborted".equals(codeString))
215          return new Enumeration<ChargeItemStatus>(this, ChargeItemStatus.ABORTED);
216        if ("billed".equals(codeString))
217          return new Enumeration<ChargeItemStatus>(this, ChargeItemStatus.BILLED);
218        if ("entered-in-error".equals(codeString))
219          return new Enumeration<ChargeItemStatus>(this, ChargeItemStatus.ENTEREDINERROR);
220        if ("unknown".equals(codeString))
221          return new Enumeration<ChargeItemStatus>(this, ChargeItemStatus.UNKNOWN);
222        throw new FHIRException("Unknown ChargeItemStatus code '"+codeString+"'");
223        }
224    public String toCode(ChargeItemStatus code) {
225      if (code == ChargeItemStatus.PLANNED)
226        return "planned";
227      if (code == ChargeItemStatus.BILLABLE)
228        return "billable";
229      if (code == ChargeItemStatus.NOTBILLABLE)
230        return "not-billable";
231      if (code == ChargeItemStatus.ABORTED)
232        return "aborted";
233      if (code == ChargeItemStatus.BILLED)
234        return "billed";
235      if (code == ChargeItemStatus.ENTEREDINERROR)
236        return "entered-in-error";
237      if (code == ChargeItemStatus.UNKNOWN)
238        return "unknown";
239      return "?";
240      }
241    public String toSystem(ChargeItemStatus code) {
242      return code.getSystem();
243      }
244    }
245
246    @Block()
247    public static class ChargeItemPerformerComponent extends BackboneElement implements IBaseBackboneElement {
248        /**
249         * Describes the type of performance or participation(e.g. primary surgeon, anesthesiologiest, etc.).
250         */
251        @Child(name = "function", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
252        @Description(shortDefinition="What type of performance was done", formalDefinition="Describes the type of performance or participation(e.g. primary surgeon, anesthesiologiest, etc.)." )
253        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/performer-role")
254        protected CodeableConcept function;
255
256        /**
257         * The device, practitioner, etc. who performed or participated in the service.
258         */
259        @Child(name = "actor", type = {Practitioner.class, PractitionerRole.class, Organization.class, CareTeam.class, Patient.class, Device.class, RelatedPerson.class}, order=2, min=1, max=1, modifier=false, summary=false)
260        @Description(shortDefinition="Individual who was performing", formalDefinition="The device, practitioner, etc. who performed or participated in the service." )
261        protected Reference actor;
262
263        /**
264         * The actual object that is the target of the reference (The device, practitioner, etc. who performed or participated in the service.)
265         */
266        protected Resource actorTarget;
267
268        private static final long serialVersionUID = 1424001049L;
269
270    /**
271     * Constructor
272     */
273      public ChargeItemPerformerComponent() {
274        super();
275      }
276
277    /**
278     * Constructor
279     */
280      public ChargeItemPerformerComponent(Reference actor) {
281        super();
282        this.actor = actor;
283      }
284
285        /**
286         * @return {@link #function} (Describes the type of performance or participation(e.g. primary surgeon, anesthesiologiest, etc.).)
287         */
288        public CodeableConcept getFunction() { 
289          if (this.function == null)
290            if (Configuration.errorOnAutoCreate())
291              throw new Error("Attempt to auto-create ChargeItemPerformerComponent.function");
292            else if (Configuration.doAutoCreate())
293              this.function = new CodeableConcept(); // cc
294          return this.function;
295        }
296
297        public boolean hasFunction() { 
298          return this.function != null && !this.function.isEmpty();
299        }
300
301        /**
302         * @param value {@link #function} (Describes the type of performance or participation(e.g. primary surgeon, anesthesiologiest, etc.).)
303         */
304        public ChargeItemPerformerComponent setFunction(CodeableConcept value) { 
305          this.function = value;
306          return this;
307        }
308
309        /**
310         * @return {@link #actor} (The device, practitioner, etc. who performed or participated in the service.)
311         */
312        public Reference getActor() { 
313          if (this.actor == null)
314            if (Configuration.errorOnAutoCreate())
315              throw new Error("Attempt to auto-create ChargeItemPerformerComponent.actor");
316            else if (Configuration.doAutoCreate())
317              this.actor = new Reference(); // cc
318          return this.actor;
319        }
320
321        public boolean hasActor() { 
322          return this.actor != null && !this.actor.isEmpty();
323        }
324
325        /**
326         * @param value {@link #actor} (The device, practitioner, etc. who performed or participated in the service.)
327         */
328        public ChargeItemPerformerComponent setActor(Reference value) { 
329          this.actor = value;
330          return this;
331        }
332
333        /**
334         * @return {@link #actor} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The device, practitioner, etc. who performed or participated in the service.)
335         */
336        public Resource getActorTarget() { 
337          return this.actorTarget;
338        }
339
340        /**
341         * @param value {@link #actor} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The device, practitioner, etc. who performed or participated in the service.)
342         */
343        public ChargeItemPerformerComponent setActorTarget(Resource value) { 
344          this.actorTarget = value;
345          return this;
346        }
347
348        protected void listChildren(List<Property> children) {
349          super.listChildren(children);
350          children.add(new Property("function", "CodeableConcept", "Describes the type of performance or participation(e.g. primary surgeon, anesthesiologiest, etc.).", 0, 1, function));
351          children.add(new Property("actor", "Reference(Practitioner|PractitionerRole|Organization|CareTeam|Patient|Device|RelatedPerson)", "The device, practitioner, etc. who performed or participated in the service.", 0, 1, actor));
352        }
353
354        @Override
355        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
356          switch (_hash) {
357          case 1380938712: /*function*/  return new Property("function", "CodeableConcept", "Describes the type of performance or participation(e.g. primary surgeon, anesthesiologiest, etc.).", 0, 1, function);
358          case 92645877: /*actor*/  return new Property("actor", "Reference(Practitioner|PractitionerRole|Organization|CareTeam|Patient|Device|RelatedPerson)", "The device, practitioner, etc. who performed or participated in the service.", 0, 1, actor);
359          default: return super.getNamedProperty(_hash, _name, _checkValid);
360          }
361
362        }
363
364      @Override
365      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
366        switch (hash) {
367        case 1380938712: /*function*/ return this.function == null ? new Base[0] : new Base[] {this.function}; // CodeableConcept
368        case 92645877: /*actor*/ return this.actor == null ? new Base[0] : new Base[] {this.actor}; // Reference
369        default: return super.getProperty(hash, name, checkValid);
370        }
371
372      }
373
374      @Override
375      public Base setProperty(int hash, String name, Base value) throws FHIRException {
376        switch (hash) {
377        case 1380938712: // function
378          this.function = castToCodeableConcept(value); // CodeableConcept
379          return value;
380        case 92645877: // actor
381          this.actor = castToReference(value); // Reference
382          return value;
383        default: return super.setProperty(hash, name, value);
384        }
385
386      }
387
388      @Override
389      public Base setProperty(String name, Base value) throws FHIRException {
390        if (name.equals("function")) {
391          this.function = castToCodeableConcept(value); // CodeableConcept
392        } else if (name.equals("actor")) {
393          this.actor = castToReference(value); // Reference
394        } else
395          return super.setProperty(name, value);
396        return value;
397      }
398
399      @Override
400      public Base makeProperty(int hash, String name) throws FHIRException {
401        switch (hash) {
402        case 1380938712:  return getFunction(); 
403        case 92645877:  return getActor(); 
404        default: return super.makeProperty(hash, name);
405        }
406
407      }
408
409      @Override
410      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
411        switch (hash) {
412        case 1380938712: /*function*/ return new String[] {"CodeableConcept"};
413        case 92645877: /*actor*/ return new String[] {"Reference"};
414        default: return super.getTypesForProperty(hash, name);
415        }
416
417      }
418
419      @Override
420      public Base addChild(String name) throws FHIRException {
421        if (name.equals("function")) {
422          this.function = new CodeableConcept();
423          return this.function;
424        }
425        else if (name.equals("actor")) {
426          this.actor = new Reference();
427          return this.actor;
428        }
429        else
430          return super.addChild(name);
431      }
432
433      public ChargeItemPerformerComponent copy() {
434        ChargeItemPerformerComponent dst = new ChargeItemPerformerComponent();
435        copyValues(dst);
436        dst.function = function == null ? null : function.copy();
437        dst.actor = actor == null ? null : actor.copy();
438        return dst;
439      }
440
441      @Override
442      public boolean equalsDeep(Base other_) {
443        if (!super.equalsDeep(other_))
444          return false;
445        if (!(other_ instanceof ChargeItemPerformerComponent))
446          return false;
447        ChargeItemPerformerComponent o = (ChargeItemPerformerComponent) other_;
448        return compareDeep(function, o.function, true) && compareDeep(actor, o.actor, true);
449      }
450
451      @Override
452      public boolean equalsShallow(Base other_) {
453        if (!super.equalsShallow(other_))
454          return false;
455        if (!(other_ instanceof ChargeItemPerformerComponent))
456          return false;
457        ChargeItemPerformerComponent o = (ChargeItemPerformerComponent) other_;
458        return true;
459      }
460
461      public boolean isEmpty() {
462        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(function, actor);
463      }
464
465  public String fhirType() {
466    return "ChargeItem.performer";
467
468  }
469
470  }
471
472    /**
473     * Identifiers assigned to this event performer or other systems.
474     */
475    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
476    @Description(shortDefinition="Business Identifier for item", formalDefinition="Identifiers assigned to this event performer or other systems." )
477    protected List<Identifier> identifier;
478
479    /**
480     * References the (external) source of pricing information, rules of application for the code this ChargeItem uses.
481     */
482    @Child(name = "definitionUri", type = {UriType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
483    @Description(shortDefinition="Defining information about the code of this charge item", formalDefinition="References the (external) source of pricing information, rules of application for the code this ChargeItem uses." )
484    protected List<UriType> definitionUri;
485
486    /**
487     * References the source of pricing information, rules of application for the code this ChargeItem uses.
488     */
489    @Child(name = "definitionCanonical", type = {CanonicalType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
490    @Description(shortDefinition="Resource defining the code of this ChargeItem", formalDefinition="References the source of pricing information, rules of application for the code this ChargeItem uses." )
491    protected List<CanonicalType> definitionCanonical;
492
493    /**
494     * The current state of the ChargeItem.
495     */
496    @Child(name = "status", type = {CodeType.class}, order=3, min=1, max=1, modifier=true, summary=true)
497    @Description(shortDefinition="planned | billable | not-billable | aborted | billed | entered-in-error | unknown", formalDefinition="The current state of the ChargeItem." )
498    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/chargeitem-status")
499    protected Enumeration<ChargeItemStatus> status;
500
501    /**
502     * ChargeItems can be grouped to larger ChargeItems covering the whole set.
503     */
504    @Child(name = "partOf", type = {ChargeItem.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
505    @Description(shortDefinition="Part of referenced ChargeItem", formalDefinition="ChargeItems can be grouped to larger ChargeItems covering the whole set." )
506    protected List<Reference> partOf;
507    /**
508     * The actual objects that are the target of the reference (ChargeItems can be grouped to larger ChargeItems covering the whole set.)
509     */
510    protected List<ChargeItem> partOfTarget;
511
512
513    /**
514     * A code that identifies the charge, like a billing code.
515     */
516    @Child(name = "code", type = {CodeableConcept.class}, order=5, min=1, max=1, modifier=false, summary=true)
517    @Description(shortDefinition="A code that identifies the charge, like a billing code", formalDefinition="A code that identifies the charge, like a billing code." )
518    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/chargeitem-billingcodes")
519    protected CodeableConcept code;
520
521    /**
522     * The individual or set of individuals the action is being or was performed on.
523     */
524    @Child(name = "subject", type = {Patient.class, Group.class}, order=6, min=1, max=1, modifier=false, summary=true)
525    @Description(shortDefinition="Individual service was done for/to", formalDefinition="The individual or set of individuals the action is being or was performed on." )
526    protected Reference subject;
527
528    /**
529     * The actual object that is the target of the reference (The individual or set of individuals the action is being or was performed on.)
530     */
531    protected Resource subjectTarget;
532
533    /**
534     * The encounter or episode of care that establishes the context for this event.
535     */
536    @Child(name = "context", type = {Encounter.class, EpisodeOfCare.class}, order=7, min=0, max=1, modifier=false, summary=true)
537    @Description(shortDefinition="Encounter / Episode associated with event", formalDefinition="The encounter or episode of care that establishes the context for this event." )
538    protected Reference context;
539
540    /**
541     * The actual object that is the target of the reference (The encounter or episode of care that establishes the context for this event.)
542     */
543    protected Resource contextTarget;
544
545    /**
546     * Date/time(s) or duration when the charged service was applied.
547     */
548    @Child(name = "occurrence", type = {DateTimeType.class, Period.class, Timing.class}, order=8, min=0, max=1, modifier=false, summary=true)
549    @Description(shortDefinition="When the charged service was applied", formalDefinition="Date/time(s) or duration when the charged service was applied." )
550    protected Type occurrence;
551
552    /**
553     * Indicates who or what performed or participated in the charged service.
554     */
555    @Child(name = "performer", type = {}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
556    @Description(shortDefinition="Who performed charged service", formalDefinition="Indicates who or what performed or participated in the charged service." )
557    protected List<ChargeItemPerformerComponent> performer;
558
559    /**
560     * The organization requesting the service.
561     */
562    @Child(name = "performingOrganization", type = {Organization.class}, order=10, min=0, max=1, modifier=false, summary=false)
563    @Description(shortDefinition="Organization providing the charged service", formalDefinition="The organization requesting the service." )
564    protected Reference performingOrganization;
565
566    /**
567     * The actual object that is the target of the reference (The organization requesting the service.)
568     */
569    protected Organization performingOrganizationTarget;
570
571    /**
572     * The organization performing the service.
573     */
574    @Child(name = "requestingOrganization", type = {Organization.class}, order=11, min=0, max=1, modifier=false, summary=false)
575    @Description(shortDefinition="Organization requesting the charged service", formalDefinition="The organization performing the service." )
576    protected Reference requestingOrganization;
577
578    /**
579     * The actual object that is the target of the reference (The organization performing the service.)
580     */
581    protected Organization requestingOrganizationTarget;
582
583    /**
584     * The financial cost center permits the tracking of charge attribution.
585     */
586    @Child(name = "costCenter", type = {Organization.class}, order=12, min=0, max=1, modifier=false, summary=false)
587    @Description(shortDefinition="Organization that has ownership of the (potential, future) revenue", formalDefinition="The financial cost center permits the tracking of charge attribution." )
588    protected Reference costCenter;
589
590    /**
591     * The actual object that is the target of the reference (The financial cost center permits the tracking of charge attribution.)
592     */
593    protected Organization costCenterTarget;
594
595    /**
596     * Quantity of which the charge item has been serviced.
597     */
598    @Child(name = "quantity", type = {Quantity.class}, order=13, min=0, max=1, modifier=false, summary=true)
599    @Description(shortDefinition="Quantity of which the charge item has been serviced", formalDefinition="Quantity of which the charge item has been serviced." )
600    protected Quantity quantity;
601
602    /**
603     * The anatomical location where the related service has been applied.
604     */
605    @Child(name = "bodysite", type = {CodeableConcept.class}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
606    @Description(shortDefinition="Anatomical location, if relevant", formalDefinition="The anatomical location where the related service has been applied." )
607    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/body-site")
608    protected List<CodeableConcept> bodysite;
609
610    /**
611     * Factor overriding the factor determined by the rules associated with the code.
612     */
613    @Child(name = "factorOverride", type = {DecimalType.class}, order=15, min=0, max=1, modifier=false, summary=false)
614    @Description(shortDefinition="Factor overriding the associated rules", formalDefinition="Factor overriding the factor determined by the rules associated with the code." )
615    protected DecimalType factorOverride;
616
617    /**
618     * Total price of the charge overriding the list price associated with the code.
619     */
620    @Child(name = "priceOverride", type = {Money.class}, order=16, min=0, max=1, modifier=false, summary=false)
621    @Description(shortDefinition="Price overriding the associated rules", formalDefinition="Total price of the charge overriding the list price associated with the code." )
622    protected Money priceOverride;
623
624    /**
625     * If the list price or the rule-based factor associated with the code is overridden, this attribute can capture a text to indicate the  reason for this action.
626     */
627    @Child(name = "overrideReason", type = {StringType.class}, order=17, min=0, max=1, modifier=false, summary=false)
628    @Description(shortDefinition="Reason for overriding the list price/factor", formalDefinition="If the list price or the rule-based factor associated with the code is overridden, this attribute can capture a text to indicate the  reason for this action." )
629    protected StringType overrideReason;
630
631    /**
632     * The device, practitioner, etc. who entered the charge item.
633     */
634    @Child(name = "enterer", type = {Practitioner.class, PractitionerRole.class, Organization.class, Patient.class, Device.class, RelatedPerson.class}, order=18, min=0, max=1, modifier=false, summary=true)
635    @Description(shortDefinition="Individual who was entering", formalDefinition="The device, practitioner, etc. who entered the charge item." )
636    protected Reference enterer;
637
638    /**
639     * The actual object that is the target of the reference (The device, practitioner, etc. who entered the charge item.)
640     */
641    protected Resource entererTarget;
642
643    /**
644     * Date the charge item was entered.
645     */
646    @Child(name = "enteredDate", type = {DateTimeType.class}, order=19, min=0, max=1, modifier=false, summary=true)
647    @Description(shortDefinition="Date the charge item was entered", formalDefinition="Date the charge item was entered." )
648    protected DateTimeType enteredDate;
649
650    /**
651     * Describes why the event occurred in coded or textual form.
652     */
653    @Child(name = "reason", type = {CodeableConcept.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
654    @Description(shortDefinition="Why was the charged  service rendered?", formalDefinition="Describes why the event occurred in coded or textual form." )
655    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/icd-10")
656    protected List<CodeableConcept> reason;
657
658    /**
659     * Indicated the rendered service that caused this charge.
660     */
661    @Child(name = "service", type = {DiagnosticReport.class, ImagingStudy.class, Immunization.class, MedicationAdministration.class, MedicationDispense.class, Observation.class, Procedure.class, SupplyDelivery.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
662    @Description(shortDefinition="Which rendered service is being charged?", formalDefinition="Indicated the rendered service that caused this charge." )
663    protected List<Reference> service;
664    /**
665     * The actual objects that are the target of the reference (Indicated the rendered service that caused this charge.)
666     */
667    protected List<Resource> serviceTarget;
668
669
670    /**
671     * Identifies the device, food, drug or other product being charged either by type code or reference to an instance.
672     */
673    @Child(name = "product", type = {Device.class, Medication.class, Substance.class, CodeableConcept.class}, order=22, min=0, max=1, modifier=false, summary=false)
674    @Description(shortDefinition="Product charged", formalDefinition="Identifies the device, food, drug or other product being charged either by type code or reference to an instance." )
675    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/device-kind")
676    protected Type product;
677
678    /**
679     * Account into which this ChargeItems belongs.
680     */
681    @Child(name = "account", type = {Account.class}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
682    @Description(shortDefinition="Account to place this charge", formalDefinition="Account into which this ChargeItems belongs." )
683    protected List<Reference> account;
684    /**
685     * The actual objects that are the target of the reference (Account into which this ChargeItems belongs.)
686     */
687    protected List<Account> accountTarget;
688
689
690    /**
691     * Comments made about the event by the performer, subject or other participants.
692     */
693    @Child(name = "note", type = {Annotation.class}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
694    @Description(shortDefinition="Comments made about the ChargeItem", formalDefinition="Comments made about the event by the performer, subject or other participants." )
695    protected List<Annotation> note;
696
697    /**
698     * Further information supporting this charge.
699     */
700    @Child(name = "supportingInformation", type = {Reference.class}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
701    @Description(shortDefinition="Further information supporting this charge", formalDefinition="Further information supporting this charge." )
702    protected List<Reference> supportingInformation;
703    /**
704     * The actual objects that are the target of the reference (Further information supporting this charge.)
705     */
706    protected List<Resource> supportingInformationTarget;
707
708
709    private static final long serialVersionUID = 1748644267L;
710
711  /**
712   * Constructor
713   */
714    public ChargeItem() {
715      super();
716    }
717
718  /**
719   * Constructor
720   */
721    public ChargeItem(Enumeration<ChargeItemStatus> status, CodeableConcept code, Reference subject) {
722      super();
723      this.status = status;
724      this.code = code;
725      this.subject = subject;
726    }
727
728    /**
729     * @return {@link #identifier} (Identifiers assigned to this event performer or other systems.)
730     */
731    public List<Identifier> getIdentifier() { 
732      if (this.identifier == null)
733        this.identifier = new ArrayList<Identifier>();
734      return this.identifier;
735    }
736
737    /**
738     * @return Returns a reference to <code>this</code> for easy method chaining
739     */
740    public ChargeItem setIdentifier(List<Identifier> theIdentifier) { 
741      this.identifier = theIdentifier;
742      return this;
743    }
744
745    public boolean hasIdentifier() { 
746      if (this.identifier == null)
747        return false;
748      for (Identifier item : this.identifier)
749        if (!item.isEmpty())
750          return true;
751      return false;
752    }
753
754    public Identifier addIdentifier() { //3
755      Identifier t = new Identifier();
756      if (this.identifier == null)
757        this.identifier = new ArrayList<Identifier>();
758      this.identifier.add(t);
759      return t;
760    }
761
762    public ChargeItem addIdentifier(Identifier t) { //3
763      if (t == null)
764        return this;
765      if (this.identifier == null)
766        this.identifier = new ArrayList<Identifier>();
767      this.identifier.add(t);
768      return this;
769    }
770
771    /**
772     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
773     */
774    public Identifier getIdentifierFirstRep() { 
775      if (getIdentifier().isEmpty()) {
776        addIdentifier();
777      }
778      return getIdentifier().get(0);
779    }
780
781    /**
782     * @return {@link #definitionUri} (References the (external) source of pricing information, rules of application for the code this ChargeItem uses.)
783     */
784    public List<UriType> getDefinitionUri() { 
785      if (this.definitionUri == null)
786        this.definitionUri = new ArrayList<UriType>();
787      return this.definitionUri;
788    }
789
790    /**
791     * @return Returns a reference to <code>this</code> for easy method chaining
792     */
793    public ChargeItem setDefinitionUri(List<UriType> theDefinitionUri) { 
794      this.definitionUri = theDefinitionUri;
795      return this;
796    }
797
798    public boolean hasDefinitionUri() { 
799      if (this.definitionUri == null)
800        return false;
801      for (UriType item : this.definitionUri)
802        if (!item.isEmpty())
803          return true;
804      return false;
805    }
806
807    /**
808     * @return {@link #definitionUri} (References the (external) source of pricing information, rules of application for the code this ChargeItem uses.)
809     */
810    public UriType addDefinitionUriElement() {//2 
811      UriType t = new UriType();
812      if (this.definitionUri == null)
813        this.definitionUri = new ArrayList<UriType>();
814      this.definitionUri.add(t);
815      return t;
816    }
817
818    /**
819     * @param value {@link #definitionUri} (References the (external) source of pricing information, rules of application for the code this ChargeItem uses.)
820     */
821    public ChargeItem addDefinitionUri(String value) { //1
822      UriType t = new UriType();
823      t.setValue(value);
824      if (this.definitionUri == null)
825        this.definitionUri = new ArrayList<UriType>();
826      this.definitionUri.add(t);
827      return this;
828    }
829
830    /**
831     * @param value {@link #definitionUri} (References the (external) source of pricing information, rules of application for the code this ChargeItem uses.)
832     */
833    public boolean hasDefinitionUri(String value) { 
834      if (this.definitionUri == null)
835        return false;
836      for (UriType v : this.definitionUri)
837        if (v.getValue().equals(value)) // uri
838          return true;
839      return false;
840    }
841
842    /**
843     * @return {@link #definitionCanonical} (References the source of pricing information, rules of application for the code this ChargeItem uses.)
844     */
845    public List<CanonicalType> getDefinitionCanonical() { 
846      if (this.definitionCanonical == null)
847        this.definitionCanonical = new ArrayList<CanonicalType>();
848      return this.definitionCanonical;
849    }
850
851    /**
852     * @return Returns a reference to <code>this</code> for easy method chaining
853     */
854    public ChargeItem setDefinitionCanonical(List<CanonicalType> theDefinitionCanonical) { 
855      this.definitionCanonical = theDefinitionCanonical;
856      return this;
857    }
858
859    public boolean hasDefinitionCanonical() { 
860      if (this.definitionCanonical == null)
861        return false;
862      for (CanonicalType item : this.definitionCanonical)
863        if (!item.isEmpty())
864          return true;
865      return false;
866    }
867
868    /**
869     * @return {@link #definitionCanonical} (References the source of pricing information, rules of application for the code this ChargeItem uses.)
870     */
871    public CanonicalType addDefinitionCanonicalElement() {//2 
872      CanonicalType t = new CanonicalType();
873      if (this.definitionCanonical == null)
874        this.definitionCanonical = new ArrayList<CanonicalType>();
875      this.definitionCanonical.add(t);
876      return t;
877    }
878
879    /**
880     * @param value {@link #definitionCanonical} (References the source of pricing information, rules of application for the code this ChargeItem uses.)
881     */
882    public ChargeItem addDefinitionCanonical(String value) { //1
883      CanonicalType t = new CanonicalType();
884      t.setValue(value);
885      if (this.definitionCanonical == null)
886        this.definitionCanonical = new ArrayList<CanonicalType>();
887      this.definitionCanonical.add(t);
888      return this;
889    }
890
891    /**
892     * @param value {@link #definitionCanonical} (References the source of pricing information, rules of application for the code this ChargeItem uses.)
893     */
894    public boolean hasDefinitionCanonical(String value) { 
895      if (this.definitionCanonical == null)
896        return false;
897      for (CanonicalType v : this.definitionCanonical)
898        if (v.getValue().equals(value)) // canonical(ChargeItemDefinition)
899          return true;
900      return false;
901    }
902
903    /**
904     * @return {@link #status} (The current state of the ChargeItem.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
905     */
906    public Enumeration<ChargeItemStatus> getStatusElement() { 
907      if (this.status == null)
908        if (Configuration.errorOnAutoCreate())
909          throw new Error("Attempt to auto-create ChargeItem.status");
910        else if (Configuration.doAutoCreate())
911          this.status = new Enumeration<ChargeItemStatus>(new ChargeItemStatusEnumFactory()); // bb
912      return this.status;
913    }
914
915    public boolean hasStatusElement() { 
916      return this.status != null && !this.status.isEmpty();
917    }
918
919    public boolean hasStatus() { 
920      return this.status != null && !this.status.isEmpty();
921    }
922
923    /**
924     * @param value {@link #status} (The current state of the ChargeItem.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
925     */
926    public ChargeItem setStatusElement(Enumeration<ChargeItemStatus> value) { 
927      this.status = value;
928      return this;
929    }
930
931    /**
932     * @return The current state of the ChargeItem.
933     */
934    public ChargeItemStatus getStatus() { 
935      return this.status == null ? null : this.status.getValue();
936    }
937
938    /**
939     * @param value The current state of the ChargeItem.
940     */
941    public ChargeItem setStatus(ChargeItemStatus value) { 
942        if (this.status == null)
943          this.status = new Enumeration<ChargeItemStatus>(new ChargeItemStatusEnumFactory());
944        this.status.setValue(value);
945      return this;
946    }
947
948    /**
949     * @return {@link #partOf} (ChargeItems can be grouped to larger ChargeItems covering the whole set.)
950     */
951    public List<Reference> getPartOf() { 
952      if (this.partOf == null)
953        this.partOf = new ArrayList<Reference>();
954      return this.partOf;
955    }
956
957    /**
958     * @return Returns a reference to <code>this</code> for easy method chaining
959     */
960    public ChargeItem setPartOf(List<Reference> thePartOf) { 
961      this.partOf = thePartOf;
962      return this;
963    }
964
965    public boolean hasPartOf() { 
966      if (this.partOf == null)
967        return false;
968      for (Reference item : this.partOf)
969        if (!item.isEmpty())
970          return true;
971      return false;
972    }
973
974    public Reference addPartOf() { //3
975      Reference t = new Reference();
976      if (this.partOf == null)
977        this.partOf = new ArrayList<Reference>();
978      this.partOf.add(t);
979      return t;
980    }
981
982    public ChargeItem addPartOf(Reference t) { //3
983      if (t == null)
984        return this;
985      if (this.partOf == null)
986        this.partOf = new ArrayList<Reference>();
987      this.partOf.add(t);
988      return this;
989    }
990
991    /**
992     * @return The first repetition of repeating field {@link #partOf}, creating it if it does not already exist
993     */
994    public Reference getPartOfFirstRep() { 
995      if (getPartOf().isEmpty()) {
996        addPartOf();
997      }
998      return getPartOf().get(0);
999    }
1000
1001    /**
1002     * @deprecated Use Reference#setResource(IBaseResource) instead
1003     */
1004    @Deprecated
1005    public List<ChargeItem> getPartOfTarget() { 
1006      if (this.partOfTarget == null)
1007        this.partOfTarget = new ArrayList<ChargeItem>();
1008      return this.partOfTarget;
1009    }
1010
1011    /**
1012     * @deprecated Use Reference#setResource(IBaseResource) instead
1013     */
1014    @Deprecated
1015    public ChargeItem addPartOfTarget() { 
1016      ChargeItem r = new ChargeItem();
1017      if (this.partOfTarget == null)
1018        this.partOfTarget = new ArrayList<ChargeItem>();
1019      this.partOfTarget.add(r);
1020      return r;
1021    }
1022
1023    /**
1024     * @return {@link #code} (A code that identifies the charge, like a billing code.)
1025     */
1026    public CodeableConcept getCode() { 
1027      if (this.code == null)
1028        if (Configuration.errorOnAutoCreate())
1029          throw new Error("Attempt to auto-create ChargeItem.code");
1030        else if (Configuration.doAutoCreate())
1031          this.code = new CodeableConcept(); // cc
1032      return this.code;
1033    }
1034
1035    public boolean hasCode() { 
1036      return this.code != null && !this.code.isEmpty();
1037    }
1038
1039    /**
1040     * @param value {@link #code} (A code that identifies the charge, like a billing code.)
1041     */
1042    public ChargeItem setCode(CodeableConcept value) { 
1043      this.code = value;
1044      return this;
1045    }
1046
1047    /**
1048     * @return {@link #subject} (The individual or set of individuals the action is being or was performed on.)
1049     */
1050    public Reference getSubject() { 
1051      if (this.subject == null)
1052        if (Configuration.errorOnAutoCreate())
1053          throw new Error("Attempt to auto-create ChargeItem.subject");
1054        else if (Configuration.doAutoCreate())
1055          this.subject = new Reference(); // cc
1056      return this.subject;
1057    }
1058
1059    public boolean hasSubject() { 
1060      return this.subject != null && !this.subject.isEmpty();
1061    }
1062
1063    /**
1064     * @param value {@link #subject} (The individual or set of individuals the action is being or was performed on.)
1065     */
1066    public ChargeItem setSubject(Reference value) { 
1067      this.subject = value;
1068      return this;
1069    }
1070
1071    /**
1072     * @return {@link #subject} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The individual or set of individuals the action is being or was performed on.)
1073     */
1074    public Resource getSubjectTarget() { 
1075      return this.subjectTarget;
1076    }
1077
1078    /**
1079     * @param value {@link #subject} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The individual or set of individuals the action is being or was performed on.)
1080     */
1081    public ChargeItem setSubjectTarget(Resource value) { 
1082      this.subjectTarget = value;
1083      return this;
1084    }
1085
1086    /**
1087     * @return {@link #context} (The encounter or episode of care that establishes the context for this event.)
1088     */
1089    public Reference getContext() { 
1090      if (this.context == null)
1091        if (Configuration.errorOnAutoCreate())
1092          throw new Error("Attempt to auto-create ChargeItem.context");
1093        else if (Configuration.doAutoCreate())
1094          this.context = new Reference(); // cc
1095      return this.context;
1096    }
1097
1098    public boolean hasContext() { 
1099      return this.context != null && !this.context.isEmpty();
1100    }
1101
1102    /**
1103     * @param value {@link #context} (The encounter or episode of care that establishes the context for this event.)
1104     */
1105    public ChargeItem setContext(Reference value) { 
1106      this.context = value;
1107      return this;
1108    }
1109
1110    /**
1111     * @return {@link #context} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The encounter or episode of care that establishes the context for this event.)
1112     */
1113    public Resource getContextTarget() { 
1114      return this.contextTarget;
1115    }
1116
1117    /**
1118     * @param value {@link #context} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The encounter or episode of care that establishes the context for this event.)
1119     */
1120    public ChargeItem setContextTarget(Resource value) { 
1121      this.contextTarget = value;
1122      return this;
1123    }
1124
1125    /**
1126     * @return {@link #occurrence} (Date/time(s) or duration when the charged service was applied.)
1127     */
1128    public Type getOccurrence() { 
1129      return this.occurrence;
1130    }
1131
1132    /**
1133     * @return {@link #occurrence} (Date/time(s) or duration when the charged service was applied.)
1134     */
1135    public DateTimeType getOccurrenceDateTimeType() throws FHIRException { 
1136      if (this.occurrence == null)
1137        this.occurrence = new DateTimeType();
1138      if (!(this.occurrence instanceof DateTimeType))
1139        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1140      return (DateTimeType) this.occurrence;
1141    }
1142
1143    public boolean hasOccurrenceDateTimeType() { 
1144      return this != null && this.occurrence instanceof DateTimeType;
1145    }
1146
1147    /**
1148     * @return {@link #occurrence} (Date/time(s) or duration when the charged service was applied.)
1149     */
1150    public Period getOccurrencePeriod() throws FHIRException { 
1151      if (this.occurrence == null)
1152        this.occurrence = new Period();
1153      if (!(this.occurrence instanceof Period))
1154        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1155      return (Period) this.occurrence;
1156    }
1157
1158    public boolean hasOccurrencePeriod() { 
1159      return this != null && this.occurrence instanceof Period;
1160    }
1161
1162    /**
1163     * @return {@link #occurrence} (Date/time(s) or duration when the charged service was applied.)
1164     */
1165    public Timing getOccurrenceTiming() throws FHIRException { 
1166      if (this.occurrence == null)
1167        this.occurrence = new Timing();
1168      if (!(this.occurrence instanceof Timing))
1169        throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1170      return (Timing) this.occurrence;
1171    }
1172
1173    public boolean hasOccurrenceTiming() { 
1174      return this != null && this.occurrence instanceof Timing;
1175    }
1176
1177    public boolean hasOccurrence() { 
1178      return this.occurrence != null && !this.occurrence.isEmpty();
1179    }
1180
1181    /**
1182     * @param value {@link #occurrence} (Date/time(s) or duration when the charged service was applied.)
1183     */
1184    public ChargeItem setOccurrence(Type value) { 
1185      if (value != null && !(value instanceof DateTimeType || value instanceof Period || value instanceof Timing))
1186        throw new Error("Not the right type for ChargeItem.occurrence[x]: "+value.fhirType());
1187      this.occurrence = value;
1188      return this;
1189    }
1190
1191    /**
1192     * @return {@link #performer} (Indicates who or what performed or participated in the charged service.)
1193     */
1194    public List<ChargeItemPerformerComponent> getPerformer() { 
1195      if (this.performer == null)
1196        this.performer = new ArrayList<ChargeItemPerformerComponent>();
1197      return this.performer;
1198    }
1199
1200    /**
1201     * @return Returns a reference to <code>this</code> for easy method chaining
1202     */
1203    public ChargeItem setPerformer(List<ChargeItemPerformerComponent> thePerformer) { 
1204      this.performer = thePerformer;
1205      return this;
1206    }
1207
1208    public boolean hasPerformer() { 
1209      if (this.performer == null)
1210        return false;
1211      for (ChargeItemPerformerComponent item : this.performer)
1212        if (!item.isEmpty())
1213          return true;
1214      return false;
1215    }
1216
1217    public ChargeItemPerformerComponent addPerformer() { //3
1218      ChargeItemPerformerComponent t = new ChargeItemPerformerComponent();
1219      if (this.performer == null)
1220        this.performer = new ArrayList<ChargeItemPerformerComponent>();
1221      this.performer.add(t);
1222      return t;
1223    }
1224
1225    public ChargeItem addPerformer(ChargeItemPerformerComponent t) { //3
1226      if (t == null)
1227        return this;
1228      if (this.performer == null)
1229        this.performer = new ArrayList<ChargeItemPerformerComponent>();
1230      this.performer.add(t);
1231      return this;
1232    }
1233
1234    /**
1235     * @return The first repetition of repeating field {@link #performer}, creating it if it does not already exist
1236     */
1237    public ChargeItemPerformerComponent getPerformerFirstRep() { 
1238      if (getPerformer().isEmpty()) {
1239        addPerformer();
1240      }
1241      return getPerformer().get(0);
1242    }
1243
1244    /**
1245     * @return {@link #performingOrganization} (The organization requesting the service.)
1246     */
1247    public Reference getPerformingOrganization() { 
1248      if (this.performingOrganization == null)
1249        if (Configuration.errorOnAutoCreate())
1250          throw new Error("Attempt to auto-create ChargeItem.performingOrganization");
1251        else if (Configuration.doAutoCreate())
1252          this.performingOrganization = new Reference(); // cc
1253      return this.performingOrganization;
1254    }
1255
1256    public boolean hasPerformingOrganization() { 
1257      return this.performingOrganization != null && !this.performingOrganization.isEmpty();
1258    }
1259
1260    /**
1261     * @param value {@link #performingOrganization} (The organization requesting the service.)
1262     */
1263    public ChargeItem setPerformingOrganization(Reference value) { 
1264      this.performingOrganization = value;
1265      return this;
1266    }
1267
1268    /**
1269     * @return {@link #performingOrganization} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The organization requesting the service.)
1270     */
1271    public Organization getPerformingOrganizationTarget() { 
1272      if (this.performingOrganizationTarget == null)
1273        if (Configuration.errorOnAutoCreate())
1274          throw new Error("Attempt to auto-create ChargeItem.performingOrganization");
1275        else if (Configuration.doAutoCreate())
1276          this.performingOrganizationTarget = new Organization(); // aa
1277      return this.performingOrganizationTarget;
1278    }
1279
1280    /**
1281     * @param value {@link #performingOrganization} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The organization requesting the service.)
1282     */
1283    public ChargeItem setPerformingOrganizationTarget(Organization value) { 
1284      this.performingOrganizationTarget = value;
1285      return this;
1286    }
1287
1288    /**
1289     * @return {@link #requestingOrganization} (The organization performing the service.)
1290     */
1291    public Reference getRequestingOrganization() { 
1292      if (this.requestingOrganization == null)
1293        if (Configuration.errorOnAutoCreate())
1294          throw new Error("Attempt to auto-create ChargeItem.requestingOrganization");
1295        else if (Configuration.doAutoCreate())
1296          this.requestingOrganization = new Reference(); // cc
1297      return this.requestingOrganization;
1298    }
1299
1300    public boolean hasRequestingOrganization() { 
1301      return this.requestingOrganization != null && !this.requestingOrganization.isEmpty();
1302    }
1303
1304    /**
1305     * @param value {@link #requestingOrganization} (The organization performing the service.)
1306     */
1307    public ChargeItem setRequestingOrganization(Reference value) { 
1308      this.requestingOrganization = value;
1309      return this;
1310    }
1311
1312    /**
1313     * @return {@link #requestingOrganization} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The organization performing the service.)
1314     */
1315    public Organization getRequestingOrganizationTarget() { 
1316      if (this.requestingOrganizationTarget == null)
1317        if (Configuration.errorOnAutoCreate())
1318          throw new Error("Attempt to auto-create ChargeItem.requestingOrganization");
1319        else if (Configuration.doAutoCreate())
1320          this.requestingOrganizationTarget = new Organization(); // aa
1321      return this.requestingOrganizationTarget;
1322    }
1323
1324    /**
1325     * @param value {@link #requestingOrganization} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The organization performing the service.)
1326     */
1327    public ChargeItem setRequestingOrganizationTarget(Organization value) { 
1328      this.requestingOrganizationTarget = value;
1329      return this;
1330    }
1331
1332    /**
1333     * @return {@link #costCenter} (The financial cost center permits the tracking of charge attribution.)
1334     */
1335    public Reference getCostCenter() { 
1336      if (this.costCenter == null)
1337        if (Configuration.errorOnAutoCreate())
1338          throw new Error("Attempt to auto-create ChargeItem.costCenter");
1339        else if (Configuration.doAutoCreate())
1340          this.costCenter = new Reference(); // cc
1341      return this.costCenter;
1342    }
1343
1344    public boolean hasCostCenter() { 
1345      return this.costCenter != null && !this.costCenter.isEmpty();
1346    }
1347
1348    /**
1349     * @param value {@link #costCenter} (The financial cost center permits the tracking of charge attribution.)
1350     */
1351    public ChargeItem setCostCenter(Reference value) { 
1352      this.costCenter = value;
1353      return this;
1354    }
1355
1356    /**
1357     * @return {@link #costCenter} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The financial cost center permits the tracking of charge attribution.)
1358     */
1359    public Organization getCostCenterTarget() { 
1360      if (this.costCenterTarget == null)
1361        if (Configuration.errorOnAutoCreate())
1362          throw new Error("Attempt to auto-create ChargeItem.costCenter");
1363        else if (Configuration.doAutoCreate())
1364          this.costCenterTarget = new Organization(); // aa
1365      return this.costCenterTarget;
1366    }
1367
1368    /**
1369     * @param value {@link #costCenter} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The financial cost center permits the tracking of charge attribution.)
1370     */
1371    public ChargeItem setCostCenterTarget(Organization value) { 
1372      this.costCenterTarget = value;
1373      return this;
1374    }
1375
1376    /**
1377     * @return {@link #quantity} (Quantity of which the charge item has been serviced.)
1378     */
1379    public Quantity getQuantity() { 
1380      if (this.quantity == null)
1381        if (Configuration.errorOnAutoCreate())
1382          throw new Error("Attempt to auto-create ChargeItem.quantity");
1383        else if (Configuration.doAutoCreate())
1384          this.quantity = new Quantity(); // cc
1385      return this.quantity;
1386    }
1387
1388    public boolean hasQuantity() { 
1389      return this.quantity != null && !this.quantity.isEmpty();
1390    }
1391
1392    /**
1393     * @param value {@link #quantity} (Quantity of which the charge item has been serviced.)
1394     */
1395    public ChargeItem setQuantity(Quantity value) { 
1396      this.quantity = value;
1397      return this;
1398    }
1399
1400    /**
1401     * @return {@link #bodysite} (The anatomical location where the related service has been applied.)
1402     */
1403    public List<CodeableConcept> getBodysite() { 
1404      if (this.bodysite == null)
1405        this.bodysite = new ArrayList<CodeableConcept>();
1406      return this.bodysite;
1407    }
1408
1409    /**
1410     * @return Returns a reference to <code>this</code> for easy method chaining
1411     */
1412    public ChargeItem setBodysite(List<CodeableConcept> theBodysite) { 
1413      this.bodysite = theBodysite;
1414      return this;
1415    }
1416
1417    public boolean hasBodysite() { 
1418      if (this.bodysite == null)
1419        return false;
1420      for (CodeableConcept item : this.bodysite)
1421        if (!item.isEmpty())
1422          return true;
1423      return false;
1424    }
1425
1426    public CodeableConcept addBodysite() { //3
1427      CodeableConcept t = new CodeableConcept();
1428      if (this.bodysite == null)
1429        this.bodysite = new ArrayList<CodeableConcept>();
1430      this.bodysite.add(t);
1431      return t;
1432    }
1433
1434    public ChargeItem addBodysite(CodeableConcept t) { //3
1435      if (t == null)
1436        return this;
1437      if (this.bodysite == null)
1438        this.bodysite = new ArrayList<CodeableConcept>();
1439      this.bodysite.add(t);
1440      return this;
1441    }
1442
1443    /**
1444     * @return The first repetition of repeating field {@link #bodysite}, creating it if it does not already exist
1445     */
1446    public CodeableConcept getBodysiteFirstRep() { 
1447      if (getBodysite().isEmpty()) {
1448        addBodysite();
1449      }
1450      return getBodysite().get(0);
1451    }
1452
1453    /**
1454     * @return {@link #factorOverride} (Factor overriding the factor determined by the rules associated with the code.). This is the underlying object with id, value and extensions. The accessor "getFactorOverride" gives direct access to the value
1455     */
1456    public DecimalType getFactorOverrideElement() { 
1457      if (this.factorOverride == null)
1458        if (Configuration.errorOnAutoCreate())
1459          throw new Error("Attempt to auto-create ChargeItem.factorOverride");
1460        else if (Configuration.doAutoCreate())
1461          this.factorOverride = new DecimalType(); // bb
1462      return this.factorOverride;
1463    }
1464
1465    public boolean hasFactorOverrideElement() { 
1466      return this.factorOverride != null && !this.factorOverride.isEmpty();
1467    }
1468
1469    public boolean hasFactorOverride() { 
1470      return this.factorOverride != null && !this.factorOverride.isEmpty();
1471    }
1472
1473    /**
1474     * @param value {@link #factorOverride} (Factor overriding the factor determined by the rules associated with the code.). This is the underlying object with id, value and extensions. The accessor "getFactorOverride" gives direct access to the value
1475     */
1476    public ChargeItem setFactorOverrideElement(DecimalType value) { 
1477      this.factorOverride = value;
1478      return this;
1479    }
1480
1481    /**
1482     * @return Factor overriding the factor determined by the rules associated with the code.
1483     */
1484    public BigDecimal getFactorOverride() { 
1485      return this.factorOverride == null ? null : this.factorOverride.getValue();
1486    }
1487
1488    /**
1489     * @param value Factor overriding the factor determined by the rules associated with the code.
1490     */
1491    public ChargeItem setFactorOverride(BigDecimal value) { 
1492      if (value == null)
1493        this.factorOverride = null;
1494      else {
1495        if (this.factorOverride == null)
1496          this.factorOverride = new DecimalType();
1497        this.factorOverride.setValue(value);
1498      }
1499      return this;
1500    }
1501
1502    /**
1503     * @param value Factor overriding the factor determined by the rules associated with the code.
1504     */
1505    public ChargeItem setFactorOverride(long value) { 
1506          this.factorOverride = new DecimalType();
1507        this.factorOverride.setValue(value);
1508      return this;
1509    }
1510
1511    /**
1512     * @param value Factor overriding the factor determined by the rules associated with the code.
1513     */
1514    public ChargeItem setFactorOverride(double value) { 
1515          this.factorOverride = new DecimalType();
1516        this.factorOverride.setValue(value);
1517      return this;
1518    }
1519
1520    /**
1521     * @return {@link #priceOverride} (Total price of the charge overriding the list price associated with the code.)
1522     */
1523    public Money getPriceOverride() { 
1524      if (this.priceOverride == null)
1525        if (Configuration.errorOnAutoCreate())
1526          throw new Error("Attempt to auto-create ChargeItem.priceOverride");
1527        else if (Configuration.doAutoCreate())
1528          this.priceOverride = new Money(); // cc
1529      return this.priceOverride;
1530    }
1531
1532    public boolean hasPriceOverride() { 
1533      return this.priceOverride != null && !this.priceOverride.isEmpty();
1534    }
1535
1536    /**
1537     * @param value {@link #priceOverride} (Total price of the charge overriding the list price associated with the code.)
1538     */
1539    public ChargeItem setPriceOverride(Money value) { 
1540      this.priceOverride = value;
1541      return this;
1542    }
1543
1544    /**
1545     * @return {@link #overrideReason} (If the list price or the rule-based factor associated with the code is overridden, this attribute can capture a text to indicate the  reason for this action.). This is the underlying object with id, value and extensions. The accessor "getOverrideReason" gives direct access to the value
1546     */
1547    public StringType getOverrideReasonElement() { 
1548      if (this.overrideReason == null)
1549        if (Configuration.errorOnAutoCreate())
1550          throw new Error("Attempt to auto-create ChargeItem.overrideReason");
1551        else if (Configuration.doAutoCreate())
1552          this.overrideReason = new StringType(); // bb
1553      return this.overrideReason;
1554    }
1555
1556    public boolean hasOverrideReasonElement() { 
1557      return this.overrideReason != null && !this.overrideReason.isEmpty();
1558    }
1559
1560    public boolean hasOverrideReason() { 
1561      return this.overrideReason != null && !this.overrideReason.isEmpty();
1562    }
1563
1564    /**
1565     * @param value {@link #overrideReason} (If the list price or the rule-based factor associated with the code is overridden, this attribute can capture a text to indicate the  reason for this action.). This is the underlying object with id, value and extensions. The accessor "getOverrideReason" gives direct access to the value
1566     */
1567    public ChargeItem setOverrideReasonElement(StringType value) { 
1568      this.overrideReason = value;
1569      return this;
1570    }
1571
1572    /**
1573     * @return If the list price or the rule-based factor associated with the code is overridden, this attribute can capture a text to indicate the  reason for this action.
1574     */
1575    public String getOverrideReason() { 
1576      return this.overrideReason == null ? null : this.overrideReason.getValue();
1577    }
1578
1579    /**
1580     * @param value If the list price or the rule-based factor associated with the code is overridden, this attribute can capture a text to indicate the  reason for this action.
1581     */
1582    public ChargeItem setOverrideReason(String value) { 
1583      if (Utilities.noString(value))
1584        this.overrideReason = null;
1585      else {
1586        if (this.overrideReason == null)
1587          this.overrideReason = new StringType();
1588        this.overrideReason.setValue(value);
1589      }
1590      return this;
1591    }
1592
1593    /**
1594     * @return {@link #enterer} (The device, practitioner, etc. who entered the charge item.)
1595     */
1596    public Reference getEnterer() { 
1597      if (this.enterer == null)
1598        if (Configuration.errorOnAutoCreate())
1599          throw new Error("Attempt to auto-create ChargeItem.enterer");
1600        else if (Configuration.doAutoCreate())
1601          this.enterer = new Reference(); // cc
1602      return this.enterer;
1603    }
1604
1605    public boolean hasEnterer() { 
1606      return this.enterer != null && !this.enterer.isEmpty();
1607    }
1608
1609    /**
1610     * @param value {@link #enterer} (The device, practitioner, etc. who entered the charge item.)
1611     */
1612    public ChargeItem setEnterer(Reference value) { 
1613      this.enterer = value;
1614      return this;
1615    }
1616
1617    /**
1618     * @return {@link #enterer} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The device, practitioner, etc. who entered the charge item.)
1619     */
1620    public Resource getEntererTarget() { 
1621      return this.entererTarget;
1622    }
1623
1624    /**
1625     * @param value {@link #enterer} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The device, practitioner, etc. who entered the charge item.)
1626     */
1627    public ChargeItem setEntererTarget(Resource value) { 
1628      this.entererTarget = value;
1629      return this;
1630    }
1631
1632    /**
1633     * @return {@link #enteredDate} (Date the charge item was entered.). This is the underlying object with id, value and extensions. The accessor "getEnteredDate" gives direct access to the value
1634     */
1635    public DateTimeType getEnteredDateElement() { 
1636      if (this.enteredDate == null)
1637        if (Configuration.errorOnAutoCreate())
1638          throw new Error("Attempt to auto-create ChargeItem.enteredDate");
1639        else if (Configuration.doAutoCreate())
1640          this.enteredDate = new DateTimeType(); // bb
1641      return this.enteredDate;
1642    }
1643
1644    public boolean hasEnteredDateElement() { 
1645      return this.enteredDate != null && !this.enteredDate.isEmpty();
1646    }
1647
1648    public boolean hasEnteredDate() { 
1649      return this.enteredDate != null && !this.enteredDate.isEmpty();
1650    }
1651
1652    /**
1653     * @param value {@link #enteredDate} (Date the charge item was entered.). This is the underlying object with id, value and extensions. The accessor "getEnteredDate" gives direct access to the value
1654     */
1655    public ChargeItem setEnteredDateElement(DateTimeType value) { 
1656      this.enteredDate = value;
1657      return this;
1658    }
1659
1660    /**
1661     * @return Date the charge item was entered.
1662     */
1663    public Date getEnteredDate() { 
1664      return this.enteredDate == null ? null : this.enteredDate.getValue();
1665    }
1666
1667    /**
1668     * @param value Date the charge item was entered.
1669     */
1670    public ChargeItem setEnteredDate(Date value) { 
1671      if (value == null)
1672        this.enteredDate = null;
1673      else {
1674        if (this.enteredDate == null)
1675          this.enteredDate = new DateTimeType();
1676        this.enteredDate.setValue(value);
1677      }
1678      return this;
1679    }
1680
1681    /**
1682     * @return {@link #reason} (Describes why the event occurred in coded or textual form.)
1683     */
1684    public List<CodeableConcept> getReason() { 
1685      if (this.reason == null)
1686        this.reason = new ArrayList<CodeableConcept>();
1687      return this.reason;
1688    }
1689
1690    /**
1691     * @return Returns a reference to <code>this</code> for easy method chaining
1692     */
1693    public ChargeItem setReason(List<CodeableConcept> theReason) { 
1694      this.reason = theReason;
1695      return this;
1696    }
1697
1698    public boolean hasReason() { 
1699      if (this.reason == null)
1700        return false;
1701      for (CodeableConcept item : this.reason)
1702        if (!item.isEmpty())
1703          return true;
1704      return false;
1705    }
1706
1707    public CodeableConcept addReason() { //3
1708      CodeableConcept t = new CodeableConcept();
1709      if (this.reason == null)
1710        this.reason = new ArrayList<CodeableConcept>();
1711      this.reason.add(t);
1712      return t;
1713    }
1714
1715    public ChargeItem addReason(CodeableConcept t) { //3
1716      if (t == null)
1717        return this;
1718      if (this.reason == null)
1719        this.reason = new ArrayList<CodeableConcept>();
1720      this.reason.add(t);
1721      return this;
1722    }
1723
1724    /**
1725     * @return The first repetition of repeating field {@link #reason}, creating it if it does not already exist
1726     */
1727    public CodeableConcept getReasonFirstRep() { 
1728      if (getReason().isEmpty()) {
1729        addReason();
1730      }
1731      return getReason().get(0);
1732    }
1733
1734    /**
1735     * @return {@link #service} (Indicated the rendered service that caused this charge.)
1736     */
1737    public List<Reference> getService() { 
1738      if (this.service == null)
1739        this.service = new ArrayList<Reference>();
1740      return this.service;
1741    }
1742
1743    /**
1744     * @return Returns a reference to <code>this</code> for easy method chaining
1745     */
1746    public ChargeItem setService(List<Reference> theService) { 
1747      this.service = theService;
1748      return this;
1749    }
1750
1751    public boolean hasService() { 
1752      if (this.service == null)
1753        return false;
1754      for (Reference item : this.service)
1755        if (!item.isEmpty())
1756          return true;
1757      return false;
1758    }
1759
1760    public Reference addService() { //3
1761      Reference t = new Reference();
1762      if (this.service == null)
1763        this.service = new ArrayList<Reference>();
1764      this.service.add(t);
1765      return t;
1766    }
1767
1768    public ChargeItem addService(Reference t) { //3
1769      if (t == null)
1770        return this;
1771      if (this.service == null)
1772        this.service = new ArrayList<Reference>();
1773      this.service.add(t);
1774      return this;
1775    }
1776
1777    /**
1778     * @return The first repetition of repeating field {@link #service}, creating it if it does not already exist
1779     */
1780    public Reference getServiceFirstRep() { 
1781      if (getService().isEmpty()) {
1782        addService();
1783      }
1784      return getService().get(0);
1785    }
1786
1787    /**
1788     * @deprecated Use Reference#setResource(IBaseResource) instead
1789     */
1790    @Deprecated
1791    public List<Resource> getServiceTarget() { 
1792      if (this.serviceTarget == null)
1793        this.serviceTarget = new ArrayList<Resource>();
1794      return this.serviceTarget;
1795    }
1796
1797    /**
1798     * @return {@link #product} (Identifies the device, food, drug or other product being charged either by type code or reference to an instance.)
1799     */
1800    public Type getProduct() { 
1801      return this.product;
1802    }
1803
1804    /**
1805     * @return {@link #product} (Identifies the device, food, drug or other product being charged either by type code or reference to an instance.)
1806     */
1807    public Reference getProductReference() throws FHIRException { 
1808      if (this.product == null)
1809        this.product = new Reference();
1810      if (!(this.product instanceof Reference))
1811        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.product.getClass().getName()+" was encountered");
1812      return (Reference) this.product;
1813    }
1814
1815    public boolean hasProductReference() { 
1816      return this != null && this.product instanceof Reference;
1817    }
1818
1819    /**
1820     * @return {@link #product} (Identifies the device, food, drug or other product being charged either by type code or reference to an instance.)
1821     */
1822    public CodeableConcept getProductCodeableConcept() throws FHIRException { 
1823      if (this.product == null)
1824        this.product = new CodeableConcept();
1825      if (!(this.product instanceof CodeableConcept))
1826        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.product.getClass().getName()+" was encountered");
1827      return (CodeableConcept) this.product;
1828    }
1829
1830    public boolean hasProductCodeableConcept() { 
1831      return this != null && this.product instanceof CodeableConcept;
1832    }
1833
1834    public boolean hasProduct() { 
1835      return this.product != null && !this.product.isEmpty();
1836    }
1837
1838    /**
1839     * @param value {@link #product} (Identifies the device, food, drug or other product being charged either by type code or reference to an instance.)
1840     */
1841    public ChargeItem setProduct(Type value) { 
1842      if (value != null && !(value instanceof Reference || value instanceof CodeableConcept))
1843        throw new Error("Not the right type for ChargeItem.product[x]: "+value.fhirType());
1844      this.product = value;
1845      return this;
1846    }
1847
1848    /**
1849     * @return {@link #account} (Account into which this ChargeItems belongs.)
1850     */
1851    public List<Reference> getAccount() { 
1852      if (this.account == null)
1853        this.account = new ArrayList<Reference>();
1854      return this.account;
1855    }
1856
1857    /**
1858     * @return Returns a reference to <code>this</code> for easy method chaining
1859     */
1860    public ChargeItem setAccount(List<Reference> theAccount) { 
1861      this.account = theAccount;
1862      return this;
1863    }
1864
1865    public boolean hasAccount() { 
1866      if (this.account == null)
1867        return false;
1868      for (Reference item : this.account)
1869        if (!item.isEmpty())
1870          return true;
1871      return false;
1872    }
1873
1874    public Reference addAccount() { //3
1875      Reference t = new Reference();
1876      if (this.account == null)
1877        this.account = new ArrayList<Reference>();
1878      this.account.add(t);
1879      return t;
1880    }
1881
1882    public ChargeItem addAccount(Reference t) { //3
1883      if (t == null)
1884        return this;
1885      if (this.account == null)
1886        this.account = new ArrayList<Reference>();
1887      this.account.add(t);
1888      return this;
1889    }
1890
1891    /**
1892     * @return The first repetition of repeating field {@link #account}, creating it if it does not already exist
1893     */
1894    public Reference getAccountFirstRep() { 
1895      if (getAccount().isEmpty()) {
1896        addAccount();
1897      }
1898      return getAccount().get(0);
1899    }
1900
1901    /**
1902     * @deprecated Use Reference#setResource(IBaseResource) instead
1903     */
1904    @Deprecated
1905    public List<Account> getAccountTarget() { 
1906      if (this.accountTarget == null)
1907        this.accountTarget = new ArrayList<Account>();
1908      return this.accountTarget;
1909    }
1910
1911    /**
1912     * @deprecated Use Reference#setResource(IBaseResource) instead
1913     */
1914    @Deprecated
1915    public Account addAccountTarget() { 
1916      Account r = new Account();
1917      if (this.accountTarget == null)
1918        this.accountTarget = new ArrayList<Account>();
1919      this.accountTarget.add(r);
1920      return r;
1921    }
1922
1923    /**
1924     * @return {@link #note} (Comments made about the event by the performer, subject or other participants.)
1925     */
1926    public List<Annotation> getNote() { 
1927      if (this.note == null)
1928        this.note = new ArrayList<Annotation>();
1929      return this.note;
1930    }
1931
1932    /**
1933     * @return Returns a reference to <code>this</code> for easy method chaining
1934     */
1935    public ChargeItem setNote(List<Annotation> theNote) { 
1936      this.note = theNote;
1937      return this;
1938    }
1939
1940    public boolean hasNote() { 
1941      if (this.note == null)
1942        return false;
1943      for (Annotation item : this.note)
1944        if (!item.isEmpty())
1945          return true;
1946      return false;
1947    }
1948
1949    public Annotation addNote() { //3
1950      Annotation t = new Annotation();
1951      if (this.note == null)
1952        this.note = new ArrayList<Annotation>();
1953      this.note.add(t);
1954      return t;
1955    }
1956
1957    public ChargeItem addNote(Annotation t) { //3
1958      if (t == null)
1959        return this;
1960      if (this.note == null)
1961        this.note = new ArrayList<Annotation>();
1962      this.note.add(t);
1963      return this;
1964    }
1965
1966    /**
1967     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
1968     */
1969    public Annotation getNoteFirstRep() { 
1970      if (getNote().isEmpty()) {
1971        addNote();
1972      }
1973      return getNote().get(0);
1974    }
1975
1976    /**
1977     * @return {@link #supportingInformation} (Further information supporting this charge.)
1978     */
1979    public List<Reference> getSupportingInformation() { 
1980      if (this.supportingInformation == null)
1981        this.supportingInformation = new ArrayList<Reference>();
1982      return this.supportingInformation;
1983    }
1984
1985    /**
1986     * @return Returns a reference to <code>this</code> for easy method chaining
1987     */
1988    public ChargeItem setSupportingInformation(List<Reference> theSupportingInformation) { 
1989      this.supportingInformation = theSupportingInformation;
1990      return this;
1991    }
1992
1993    public boolean hasSupportingInformation() { 
1994      if (this.supportingInformation == null)
1995        return false;
1996      for (Reference item : this.supportingInformation)
1997        if (!item.isEmpty())
1998          return true;
1999      return false;
2000    }
2001
2002    public Reference addSupportingInformation() { //3
2003      Reference t = new Reference();
2004      if (this.supportingInformation == null)
2005        this.supportingInformation = new ArrayList<Reference>();
2006      this.supportingInformation.add(t);
2007      return t;
2008    }
2009
2010    public ChargeItem addSupportingInformation(Reference t) { //3
2011      if (t == null)
2012        return this;
2013      if (this.supportingInformation == null)
2014        this.supportingInformation = new ArrayList<Reference>();
2015      this.supportingInformation.add(t);
2016      return this;
2017    }
2018
2019    /**
2020     * @return The first repetition of repeating field {@link #supportingInformation}, creating it if it does not already exist
2021     */
2022    public Reference getSupportingInformationFirstRep() { 
2023      if (getSupportingInformation().isEmpty()) {
2024        addSupportingInformation();
2025      }
2026      return getSupportingInformation().get(0);
2027    }
2028
2029    /**
2030     * @deprecated Use Reference#setResource(IBaseResource) instead
2031     */
2032    @Deprecated
2033    public List<Resource> getSupportingInformationTarget() { 
2034      if (this.supportingInformationTarget == null)
2035        this.supportingInformationTarget = new ArrayList<Resource>();
2036      return this.supportingInformationTarget;
2037    }
2038
2039      protected void listChildren(List<Property> children) {
2040        super.listChildren(children);
2041        children.add(new Property("identifier", "Identifier", "Identifiers assigned to this event performer or other systems.", 0, java.lang.Integer.MAX_VALUE, identifier));
2042        children.add(new Property("definitionUri", "uri", "References the (external) source of pricing information, rules of application for the code this ChargeItem uses.", 0, java.lang.Integer.MAX_VALUE, definitionUri));
2043        children.add(new Property("definitionCanonical", "canonical(ChargeItemDefinition)", "References the source of pricing information, rules of application for the code this ChargeItem uses.", 0, java.lang.Integer.MAX_VALUE, definitionCanonical));
2044        children.add(new Property("status", "code", "The current state of the ChargeItem.", 0, 1, status));
2045        children.add(new Property("partOf", "Reference(ChargeItem)", "ChargeItems can be grouped to larger ChargeItems covering the whole set.", 0, java.lang.Integer.MAX_VALUE, partOf));
2046        children.add(new Property("code", "CodeableConcept", "A code that identifies the charge, like a billing code.", 0, 1, code));
2047        children.add(new Property("subject", "Reference(Patient|Group)", "The individual or set of individuals the action is being or was performed on.", 0, 1, subject));
2048        children.add(new Property("context", "Reference(Encounter|EpisodeOfCare)", "The encounter or episode of care that establishes the context for this event.", 0, 1, context));
2049        children.add(new Property("occurrence[x]", "dateTime|Period|Timing", "Date/time(s) or duration when the charged service was applied.", 0, 1, occurrence));
2050        children.add(new Property("performer", "", "Indicates who or what performed or participated in the charged service.", 0, java.lang.Integer.MAX_VALUE, performer));
2051        children.add(new Property("performingOrganization", "Reference(Organization)", "The organization requesting the service.", 0, 1, performingOrganization));
2052        children.add(new Property("requestingOrganization", "Reference(Organization)", "The organization performing the service.", 0, 1, requestingOrganization));
2053        children.add(new Property("costCenter", "Reference(Organization)", "The financial cost center permits the tracking of charge attribution.", 0, 1, costCenter));
2054        children.add(new Property("quantity", "Quantity", "Quantity of which the charge item has been serviced.", 0, 1, quantity));
2055        children.add(new Property("bodysite", "CodeableConcept", "The anatomical location where the related service has been applied.", 0, java.lang.Integer.MAX_VALUE, bodysite));
2056        children.add(new Property("factorOverride", "decimal", "Factor overriding the factor determined by the rules associated with the code.", 0, 1, factorOverride));
2057        children.add(new Property("priceOverride", "Money", "Total price of the charge overriding the list price associated with the code.", 0, 1, priceOverride));
2058        children.add(new Property("overrideReason", "string", "If the list price or the rule-based factor associated with the code is overridden, this attribute can capture a text to indicate the  reason for this action.", 0, 1, overrideReason));
2059        children.add(new Property("enterer", "Reference(Practitioner|PractitionerRole|Organization|Patient|Device|RelatedPerson)", "The device, practitioner, etc. who entered the charge item.", 0, 1, enterer));
2060        children.add(new Property("enteredDate", "dateTime", "Date the charge item was entered.", 0, 1, enteredDate));
2061        children.add(new Property("reason", "CodeableConcept", "Describes why the event occurred in coded or textual form.", 0, java.lang.Integer.MAX_VALUE, reason));
2062        children.add(new Property("service", "Reference(DiagnosticReport|ImagingStudy|Immunization|MedicationAdministration|MedicationDispense|Observation|Procedure|SupplyDelivery)", "Indicated the rendered service that caused this charge.", 0, java.lang.Integer.MAX_VALUE, service));
2063        children.add(new Property("product[x]", "Reference(Device|Medication|Substance)|CodeableConcept", "Identifies the device, food, drug or other product being charged either by type code or reference to an instance.", 0, 1, product));
2064        children.add(new Property("account", "Reference(Account)", "Account into which this ChargeItems belongs.", 0, java.lang.Integer.MAX_VALUE, account));
2065        children.add(new Property("note", "Annotation", "Comments made about the event by the performer, subject or other participants.", 0, java.lang.Integer.MAX_VALUE, note));
2066        children.add(new Property("supportingInformation", "Reference(Any)", "Further information supporting this charge.", 0, java.lang.Integer.MAX_VALUE, supportingInformation));
2067      }
2068
2069      @Override
2070      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2071        switch (_hash) {
2072        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Identifiers assigned to this event performer or other systems.", 0, java.lang.Integer.MAX_VALUE, identifier);
2073        case -1139428583: /*definitionUri*/  return new Property("definitionUri", "uri", "References the (external) source of pricing information, rules of application for the code this ChargeItem uses.", 0, java.lang.Integer.MAX_VALUE, definitionUri);
2074        case 933485793: /*definitionCanonical*/  return new Property("definitionCanonical", "canonical(ChargeItemDefinition)", "References the source of pricing information, rules of application for the code this ChargeItem uses.", 0, java.lang.Integer.MAX_VALUE, definitionCanonical);
2075        case -892481550: /*status*/  return new Property("status", "code", "The current state of the ChargeItem.", 0, 1, status);
2076        case -995410646: /*partOf*/  return new Property("partOf", "Reference(ChargeItem)", "ChargeItems can be grouped to larger ChargeItems covering the whole set.", 0, java.lang.Integer.MAX_VALUE, partOf);
2077        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A code that identifies the charge, like a billing code.", 0, 1, code);
2078        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group)", "The individual or set of individuals the action is being or was performed on.", 0, 1, subject);
2079        case 951530927: /*context*/  return new Property("context", "Reference(Encounter|EpisodeOfCare)", "The encounter or episode of care that establishes the context for this event.", 0, 1, context);
2080        case -2022646513: /*occurrence[x]*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "Date/time(s) or duration when the charged service was applied.", 0, 1, occurrence);
2081        case 1687874001: /*occurrence*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "Date/time(s) or duration when the charged service was applied.", 0, 1, occurrence);
2082        case -298443636: /*occurrenceDateTime*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "Date/time(s) or duration when the charged service was applied.", 0, 1, occurrence);
2083        case 1397156594: /*occurrencePeriod*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "Date/time(s) or duration when the charged service was applied.", 0, 1, occurrence);
2084        case 1515218299: /*occurrenceTiming*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "Date/time(s) or duration when the charged service was applied.", 0, 1, occurrence);
2085        case 481140686: /*performer*/  return new Property("performer", "", "Indicates who or what performed or participated in the charged service.", 0, java.lang.Integer.MAX_VALUE, performer);
2086        case 1273192628: /*performingOrganization*/  return new Property("performingOrganization", "Reference(Organization)", "The organization requesting the service.", 0, 1, performingOrganization);
2087        case 1279054790: /*requestingOrganization*/  return new Property("requestingOrganization", "Reference(Organization)", "The organization performing the service.", 0, 1, requestingOrganization);
2088        case -593192318: /*costCenter*/  return new Property("costCenter", "Reference(Organization)", "The financial cost center permits the tracking of charge attribution.", 0, 1, costCenter);
2089        case -1285004149: /*quantity*/  return new Property("quantity", "Quantity", "Quantity of which the charge item has been serviced.", 0, 1, quantity);
2090        case 1703573481: /*bodysite*/  return new Property("bodysite", "CodeableConcept", "The anatomical location where the related service has been applied.", 0, java.lang.Integer.MAX_VALUE, bodysite);
2091        case -451233221: /*factorOverride*/  return new Property("factorOverride", "decimal", "Factor overriding the factor determined by the rules associated with the code.", 0, 1, factorOverride);
2092        case -216803275: /*priceOverride*/  return new Property("priceOverride", "Money", "Total price of the charge overriding the list price associated with the code.", 0, 1, priceOverride);
2093        case -742878928: /*overrideReason*/  return new Property("overrideReason", "string", "If the list price or the rule-based factor associated with the code is overridden, this attribute can capture a text to indicate the  reason for this action.", 0, 1, overrideReason);
2094        case -1591951995: /*enterer*/  return new Property("enterer", "Reference(Practitioner|PractitionerRole|Organization|Patient|Device|RelatedPerson)", "The device, practitioner, etc. who entered the charge item.", 0, 1, enterer);
2095        case 555978181: /*enteredDate*/  return new Property("enteredDate", "dateTime", "Date the charge item was entered.", 0, 1, enteredDate);
2096        case -934964668: /*reason*/  return new Property("reason", "CodeableConcept", "Describes why the event occurred in coded or textual form.", 0, java.lang.Integer.MAX_VALUE, reason);
2097        case 1984153269: /*service*/  return new Property("service", "Reference(DiagnosticReport|ImagingStudy|Immunization|MedicationAdministration|MedicationDispense|Observation|Procedure|SupplyDelivery)", "Indicated the rendered service that caused this charge.", 0, java.lang.Integer.MAX_VALUE, service);
2098        case 1753005361: /*product[x]*/  return new Property("product[x]", "Reference(Device|Medication|Substance)|CodeableConcept", "Identifies the device, food, drug or other product being charged either by type code or reference to an instance.", 0, 1, product);
2099        case -309474065: /*product*/  return new Property("product[x]", "Reference(Device|Medication|Substance)|CodeableConcept", "Identifies the device, food, drug or other product being charged either by type code or reference to an instance.", 0, 1, product);
2100        case -669667556: /*productReference*/  return new Property("product[x]", "Reference(Device|Medication|Substance)|CodeableConcept", "Identifies the device, food, drug or other product being charged either by type code or reference to an instance.", 0, 1, product);
2101        case 906854066: /*productCodeableConcept*/  return new Property("product[x]", "Reference(Device|Medication|Substance)|CodeableConcept", "Identifies the device, food, drug or other product being charged either by type code or reference to an instance.", 0, 1, product);
2102        case -1177318867: /*account*/  return new Property("account", "Reference(Account)", "Account into which this ChargeItems belongs.", 0, java.lang.Integer.MAX_VALUE, account);
2103        case 3387378: /*note*/  return new Property("note", "Annotation", "Comments made about the event by the performer, subject or other participants.", 0, java.lang.Integer.MAX_VALUE, note);
2104        case -1248768647: /*supportingInformation*/  return new Property("supportingInformation", "Reference(Any)", "Further information supporting this charge.", 0, java.lang.Integer.MAX_VALUE, supportingInformation);
2105        default: return super.getNamedProperty(_hash, _name, _checkValid);
2106        }
2107
2108      }
2109
2110      @Override
2111      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2112        switch (hash) {
2113        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2114        case -1139428583: /*definitionUri*/ return this.definitionUri == null ? new Base[0] : this.definitionUri.toArray(new Base[this.definitionUri.size()]); // UriType
2115        case 933485793: /*definitionCanonical*/ return this.definitionCanonical == null ? new Base[0] : this.definitionCanonical.toArray(new Base[this.definitionCanonical.size()]); // CanonicalType
2116        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ChargeItemStatus>
2117        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // Reference
2118        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
2119        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
2120        case 951530927: /*context*/ return this.context == null ? new Base[0] : new Base[] {this.context}; // Reference
2121        case 1687874001: /*occurrence*/ return this.occurrence == null ? new Base[0] : new Base[] {this.occurrence}; // Type
2122        case 481140686: /*performer*/ return this.performer == null ? new Base[0] : this.performer.toArray(new Base[this.performer.size()]); // ChargeItemPerformerComponent
2123        case 1273192628: /*performingOrganization*/ return this.performingOrganization == null ? new Base[0] : new Base[] {this.performingOrganization}; // Reference
2124        case 1279054790: /*requestingOrganization*/ return this.requestingOrganization == null ? new Base[0] : new Base[] {this.requestingOrganization}; // Reference
2125        case -593192318: /*costCenter*/ return this.costCenter == null ? new Base[0] : new Base[] {this.costCenter}; // Reference
2126        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // Quantity
2127        case 1703573481: /*bodysite*/ return this.bodysite == null ? new Base[0] : this.bodysite.toArray(new Base[this.bodysite.size()]); // CodeableConcept
2128        case -451233221: /*factorOverride*/ return this.factorOverride == null ? new Base[0] : new Base[] {this.factorOverride}; // DecimalType
2129        case -216803275: /*priceOverride*/ return this.priceOverride == null ? new Base[0] : new Base[] {this.priceOverride}; // Money
2130        case -742878928: /*overrideReason*/ return this.overrideReason == null ? new Base[0] : new Base[] {this.overrideReason}; // StringType
2131        case -1591951995: /*enterer*/ return this.enterer == null ? new Base[0] : new Base[] {this.enterer}; // Reference
2132        case 555978181: /*enteredDate*/ return this.enteredDate == null ? new Base[0] : new Base[] {this.enteredDate}; // DateTimeType
2133        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : this.reason.toArray(new Base[this.reason.size()]); // CodeableConcept
2134        case 1984153269: /*service*/ return this.service == null ? new Base[0] : this.service.toArray(new Base[this.service.size()]); // Reference
2135        case -309474065: /*product*/ return this.product == null ? new Base[0] : new Base[] {this.product}; // Type
2136        case -1177318867: /*account*/ return this.account == null ? new Base[0] : this.account.toArray(new Base[this.account.size()]); // Reference
2137        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
2138        case -1248768647: /*supportingInformation*/ return this.supportingInformation == null ? new Base[0] : this.supportingInformation.toArray(new Base[this.supportingInformation.size()]); // Reference
2139        default: return super.getProperty(hash, name, checkValid);
2140        }
2141
2142      }
2143
2144      @Override
2145      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2146        switch (hash) {
2147        case -1618432855: // identifier
2148          this.getIdentifier().add(castToIdentifier(value)); // Identifier
2149          return value;
2150        case -1139428583: // definitionUri
2151          this.getDefinitionUri().add(castToUri(value)); // UriType
2152          return value;
2153        case 933485793: // definitionCanonical
2154          this.getDefinitionCanonical().add(castToCanonical(value)); // CanonicalType
2155          return value;
2156        case -892481550: // status
2157          value = new ChargeItemStatusEnumFactory().fromType(castToCode(value));
2158          this.status = (Enumeration) value; // Enumeration<ChargeItemStatus>
2159          return value;
2160        case -995410646: // partOf
2161          this.getPartOf().add(castToReference(value)); // Reference
2162          return value;
2163        case 3059181: // code
2164          this.code = castToCodeableConcept(value); // CodeableConcept
2165          return value;
2166        case -1867885268: // subject
2167          this.subject = castToReference(value); // Reference
2168          return value;
2169        case 951530927: // context
2170          this.context = castToReference(value); // Reference
2171          return value;
2172        case 1687874001: // occurrence
2173          this.occurrence = castToType(value); // Type
2174          return value;
2175        case 481140686: // performer
2176          this.getPerformer().add((ChargeItemPerformerComponent) value); // ChargeItemPerformerComponent
2177          return value;
2178        case 1273192628: // performingOrganization
2179          this.performingOrganization = castToReference(value); // Reference
2180          return value;
2181        case 1279054790: // requestingOrganization
2182          this.requestingOrganization = castToReference(value); // Reference
2183          return value;
2184        case -593192318: // costCenter
2185          this.costCenter = castToReference(value); // Reference
2186          return value;
2187        case -1285004149: // quantity
2188          this.quantity = castToQuantity(value); // Quantity
2189          return value;
2190        case 1703573481: // bodysite
2191          this.getBodysite().add(castToCodeableConcept(value)); // CodeableConcept
2192          return value;
2193        case -451233221: // factorOverride
2194          this.factorOverride = castToDecimal(value); // DecimalType
2195          return value;
2196        case -216803275: // priceOverride
2197          this.priceOverride = castToMoney(value); // Money
2198          return value;
2199        case -742878928: // overrideReason
2200          this.overrideReason = castToString(value); // StringType
2201          return value;
2202        case -1591951995: // enterer
2203          this.enterer = castToReference(value); // Reference
2204          return value;
2205        case 555978181: // enteredDate
2206          this.enteredDate = castToDateTime(value); // DateTimeType
2207          return value;
2208        case -934964668: // reason
2209          this.getReason().add(castToCodeableConcept(value)); // CodeableConcept
2210          return value;
2211        case 1984153269: // service
2212          this.getService().add(castToReference(value)); // Reference
2213          return value;
2214        case -309474065: // product
2215          this.product = castToType(value); // Type
2216          return value;
2217        case -1177318867: // account
2218          this.getAccount().add(castToReference(value)); // Reference
2219          return value;
2220        case 3387378: // note
2221          this.getNote().add(castToAnnotation(value)); // Annotation
2222          return value;
2223        case -1248768647: // supportingInformation
2224          this.getSupportingInformation().add(castToReference(value)); // Reference
2225          return value;
2226        default: return super.setProperty(hash, name, value);
2227        }
2228
2229      }
2230
2231      @Override
2232      public Base setProperty(String name, Base value) throws FHIRException {
2233        if (name.equals("identifier")) {
2234          this.getIdentifier().add(castToIdentifier(value));
2235        } else if (name.equals("definitionUri")) {
2236          this.getDefinitionUri().add(castToUri(value));
2237        } else if (name.equals("definitionCanonical")) {
2238          this.getDefinitionCanonical().add(castToCanonical(value));
2239        } else if (name.equals("status")) {
2240          value = new ChargeItemStatusEnumFactory().fromType(castToCode(value));
2241          this.status = (Enumeration) value; // Enumeration<ChargeItemStatus>
2242        } else if (name.equals("partOf")) {
2243          this.getPartOf().add(castToReference(value));
2244        } else if (name.equals("code")) {
2245          this.code = castToCodeableConcept(value); // CodeableConcept
2246        } else if (name.equals("subject")) {
2247          this.subject = castToReference(value); // Reference
2248        } else if (name.equals("context")) {
2249          this.context = castToReference(value); // Reference
2250        } else if (name.equals("occurrence[x]")) {
2251          this.occurrence = castToType(value); // Type
2252        } else if (name.equals("performer")) {
2253          this.getPerformer().add((ChargeItemPerformerComponent) value);
2254        } else if (name.equals("performingOrganization")) {
2255          this.performingOrganization = castToReference(value); // Reference
2256        } else if (name.equals("requestingOrganization")) {
2257          this.requestingOrganization = castToReference(value); // Reference
2258        } else if (name.equals("costCenter")) {
2259          this.costCenter = castToReference(value); // Reference
2260        } else if (name.equals("quantity")) {
2261          this.quantity = castToQuantity(value); // Quantity
2262        } else if (name.equals("bodysite")) {
2263          this.getBodysite().add(castToCodeableConcept(value));
2264        } else if (name.equals("factorOverride")) {
2265          this.factorOverride = castToDecimal(value); // DecimalType
2266        } else if (name.equals("priceOverride")) {
2267          this.priceOverride = castToMoney(value); // Money
2268        } else if (name.equals("overrideReason")) {
2269          this.overrideReason = castToString(value); // StringType
2270        } else if (name.equals("enterer")) {
2271          this.enterer = castToReference(value); // Reference
2272        } else if (name.equals("enteredDate")) {
2273          this.enteredDate = castToDateTime(value); // DateTimeType
2274        } else if (name.equals("reason")) {
2275          this.getReason().add(castToCodeableConcept(value));
2276        } else if (name.equals("service")) {
2277          this.getService().add(castToReference(value));
2278        } else if (name.equals("product[x]")) {
2279          this.product = castToType(value); // Type
2280        } else if (name.equals("account")) {
2281          this.getAccount().add(castToReference(value));
2282        } else if (name.equals("note")) {
2283          this.getNote().add(castToAnnotation(value));
2284        } else if (name.equals("supportingInformation")) {
2285          this.getSupportingInformation().add(castToReference(value));
2286        } else
2287          return super.setProperty(name, value);
2288        return value;
2289      }
2290
2291      @Override
2292      public Base makeProperty(int hash, String name) throws FHIRException {
2293        switch (hash) {
2294        case -1618432855:  return addIdentifier(); 
2295        case -1139428583:  return addDefinitionUriElement();
2296        case 933485793:  return addDefinitionCanonicalElement();
2297        case -892481550:  return getStatusElement();
2298        case -995410646:  return addPartOf(); 
2299        case 3059181:  return getCode(); 
2300        case -1867885268:  return getSubject(); 
2301        case 951530927:  return getContext(); 
2302        case -2022646513:  return getOccurrence(); 
2303        case 1687874001:  return getOccurrence(); 
2304        case 481140686:  return addPerformer(); 
2305        case 1273192628:  return getPerformingOrganization(); 
2306        case 1279054790:  return getRequestingOrganization(); 
2307        case -593192318:  return getCostCenter(); 
2308        case -1285004149:  return getQuantity(); 
2309        case 1703573481:  return addBodysite(); 
2310        case -451233221:  return getFactorOverrideElement();
2311        case -216803275:  return getPriceOverride(); 
2312        case -742878928:  return getOverrideReasonElement();
2313        case -1591951995:  return getEnterer(); 
2314        case 555978181:  return getEnteredDateElement();
2315        case -934964668:  return addReason(); 
2316        case 1984153269:  return addService(); 
2317        case 1753005361:  return getProduct(); 
2318        case -309474065:  return getProduct(); 
2319        case -1177318867:  return addAccount(); 
2320        case 3387378:  return addNote(); 
2321        case -1248768647:  return addSupportingInformation(); 
2322        default: return super.makeProperty(hash, name);
2323        }
2324
2325      }
2326
2327      @Override
2328      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2329        switch (hash) {
2330        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2331        case -1139428583: /*definitionUri*/ return new String[] {"uri"};
2332        case 933485793: /*definitionCanonical*/ return new String[] {"canonical"};
2333        case -892481550: /*status*/ return new String[] {"code"};
2334        case -995410646: /*partOf*/ return new String[] {"Reference"};
2335        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2336        case -1867885268: /*subject*/ return new String[] {"Reference"};
2337        case 951530927: /*context*/ return new String[] {"Reference"};
2338        case 1687874001: /*occurrence*/ return new String[] {"dateTime", "Period", "Timing"};
2339        case 481140686: /*performer*/ return new String[] {};
2340        case 1273192628: /*performingOrganization*/ return new String[] {"Reference"};
2341        case 1279054790: /*requestingOrganization*/ return new String[] {"Reference"};
2342        case -593192318: /*costCenter*/ return new String[] {"Reference"};
2343        case -1285004149: /*quantity*/ return new String[] {"Quantity"};
2344        case 1703573481: /*bodysite*/ return new String[] {"CodeableConcept"};
2345        case -451233221: /*factorOverride*/ return new String[] {"decimal"};
2346        case -216803275: /*priceOverride*/ return new String[] {"Money"};
2347        case -742878928: /*overrideReason*/ return new String[] {"string"};
2348        case -1591951995: /*enterer*/ return new String[] {"Reference"};
2349        case 555978181: /*enteredDate*/ return new String[] {"dateTime"};
2350        case -934964668: /*reason*/ return new String[] {"CodeableConcept"};
2351        case 1984153269: /*service*/ return new String[] {"Reference"};
2352        case -309474065: /*product*/ return new String[] {"Reference", "CodeableConcept"};
2353        case -1177318867: /*account*/ return new String[] {"Reference"};
2354        case 3387378: /*note*/ return new String[] {"Annotation"};
2355        case -1248768647: /*supportingInformation*/ return new String[] {"Reference"};
2356        default: return super.getTypesForProperty(hash, name);
2357        }
2358
2359      }
2360
2361      @Override
2362      public Base addChild(String name) throws FHIRException {
2363        if (name.equals("identifier")) {
2364          return addIdentifier();
2365        }
2366        else if (name.equals("definitionUri")) {
2367          throw new FHIRException("Cannot call addChild on a primitive type ChargeItem.definitionUri");
2368        }
2369        else if (name.equals("definitionCanonical")) {
2370          throw new FHIRException("Cannot call addChild on a primitive type ChargeItem.definitionCanonical");
2371        }
2372        else if (name.equals("status")) {
2373          throw new FHIRException("Cannot call addChild on a primitive type ChargeItem.status");
2374        }
2375        else if (name.equals("partOf")) {
2376          return addPartOf();
2377        }
2378        else if (name.equals("code")) {
2379          this.code = new CodeableConcept();
2380          return this.code;
2381        }
2382        else if (name.equals("subject")) {
2383          this.subject = new Reference();
2384          return this.subject;
2385        }
2386        else if (name.equals("context")) {
2387          this.context = new Reference();
2388          return this.context;
2389        }
2390        else if (name.equals("occurrenceDateTime")) {
2391          this.occurrence = new DateTimeType();
2392          return this.occurrence;
2393        }
2394        else if (name.equals("occurrencePeriod")) {
2395          this.occurrence = new Period();
2396          return this.occurrence;
2397        }
2398        else if (name.equals("occurrenceTiming")) {
2399          this.occurrence = new Timing();
2400          return this.occurrence;
2401        }
2402        else if (name.equals("performer")) {
2403          return addPerformer();
2404        }
2405        else if (name.equals("performingOrganization")) {
2406          this.performingOrganization = new Reference();
2407          return this.performingOrganization;
2408        }
2409        else if (name.equals("requestingOrganization")) {
2410          this.requestingOrganization = new Reference();
2411          return this.requestingOrganization;
2412        }
2413        else if (name.equals("costCenter")) {
2414          this.costCenter = new Reference();
2415          return this.costCenter;
2416        }
2417        else if (name.equals("quantity")) {
2418          this.quantity = new Quantity();
2419          return this.quantity;
2420        }
2421        else if (name.equals("bodysite")) {
2422          return addBodysite();
2423        }
2424        else if (name.equals("factorOverride")) {
2425          throw new FHIRException("Cannot call addChild on a primitive type ChargeItem.factorOverride");
2426        }
2427        else if (name.equals("priceOverride")) {
2428          this.priceOverride = new Money();
2429          return this.priceOverride;
2430        }
2431        else if (name.equals("overrideReason")) {
2432          throw new FHIRException("Cannot call addChild on a primitive type ChargeItem.overrideReason");
2433        }
2434        else if (name.equals("enterer")) {
2435          this.enterer = new Reference();
2436          return this.enterer;
2437        }
2438        else if (name.equals("enteredDate")) {
2439          throw new FHIRException("Cannot call addChild on a primitive type ChargeItem.enteredDate");
2440        }
2441        else if (name.equals("reason")) {
2442          return addReason();
2443        }
2444        else if (name.equals("service")) {
2445          return addService();
2446        }
2447        else if (name.equals("productReference")) {
2448          this.product = new Reference();
2449          return this.product;
2450        }
2451        else if (name.equals("productCodeableConcept")) {
2452          this.product = new CodeableConcept();
2453          return this.product;
2454        }
2455        else if (name.equals("account")) {
2456          return addAccount();
2457        }
2458        else if (name.equals("note")) {
2459          return addNote();
2460        }
2461        else if (name.equals("supportingInformation")) {
2462          return addSupportingInformation();
2463        }
2464        else
2465          return super.addChild(name);
2466      }
2467
2468  public String fhirType() {
2469    return "ChargeItem";
2470
2471  }
2472
2473      public ChargeItem copy() {
2474        ChargeItem dst = new ChargeItem();
2475        copyValues(dst);
2476        if (identifier != null) {
2477          dst.identifier = new ArrayList<Identifier>();
2478          for (Identifier i : identifier)
2479            dst.identifier.add(i.copy());
2480        };
2481        if (definitionUri != null) {
2482          dst.definitionUri = new ArrayList<UriType>();
2483          for (UriType i : definitionUri)
2484            dst.definitionUri.add(i.copy());
2485        };
2486        if (definitionCanonical != null) {
2487          dst.definitionCanonical = new ArrayList<CanonicalType>();
2488          for (CanonicalType i : definitionCanonical)
2489            dst.definitionCanonical.add(i.copy());
2490        };
2491        dst.status = status == null ? null : status.copy();
2492        if (partOf != null) {
2493          dst.partOf = new ArrayList<Reference>();
2494          for (Reference i : partOf)
2495            dst.partOf.add(i.copy());
2496        };
2497        dst.code = code == null ? null : code.copy();
2498        dst.subject = subject == null ? null : subject.copy();
2499        dst.context = context == null ? null : context.copy();
2500        dst.occurrence = occurrence == null ? null : occurrence.copy();
2501        if (performer != null) {
2502          dst.performer = new ArrayList<ChargeItemPerformerComponent>();
2503          for (ChargeItemPerformerComponent i : performer)
2504            dst.performer.add(i.copy());
2505        };
2506        dst.performingOrganization = performingOrganization == null ? null : performingOrganization.copy();
2507        dst.requestingOrganization = requestingOrganization == null ? null : requestingOrganization.copy();
2508        dst.costCenter = costCenter == null ? null : costCenter.copy();
2509        dst.quantity = quantity == null ? null : quantity.copy();
2510        if (bodysite != null) {
2511          dst.bodysite = new ArrayList<CodeableConcept>();
2512          for (CodeableConcept i : bodysite)
2513            dst.bodysite.add(i.copy());
2514        };
2515        dst.factorOverride = factorOverride == null ? null : factorOverride.copy();
2516        dst.priceOverride = priceOverride == null ? null : priceOverride.copy();
2517        dst.overrideReason = overrideReason == null ? null : overrideReason.copy();
2518        dst.enterer = enterer == null ? null : enterer.copy();
2519        dst.enteredDate = enteredDate == null ? null : enteredDate.copy();
2520        if (reason != null) {
2521          dst.reason = new ArrayList<CodeableConcept>();
2522          for (CodeableConcept i : reason)
2523            dst.reason.add(i.copy());
2524        };
2525        if (service != null) {
2526          dst.service = new ArrayList<Reference>();
2527          for (Reference i : service)
2528            dst.service.add(i.copy());
2529        };
2530        dst.product = product == null ? null : product.copy();
2531        if (account != null) {
2532          dst.account = new ArrayList<Reference>();
2533          for (Reference i : account)
2534            dst.account.add(i.copy());
2535        };
2536        if (note != null) {
2537          dst.note = new ArrayList<Annotation>();
2538          for (Annotation i : note)
2539            dst.note.add(i.copy());
2540        };
2541        if (supportingInformation != null) {
2542          dst.supportingInformation = new ArrayList<Reference>();
2543          for (Reference i : supportingInformation)
2544            dst.supportingInformation.add(i.copy());
2545        };
2546        return dst;
2547      }
2548
2549      protected ChargeItem typedCopy() {
2550        return copy();
2551      }
2552
2553      @Override
2554      public boolean equalsDeep(Base other_) {
2555        if (!super.equalsDeep(other_))
2556          return false;
2557        if (!(other_ instanceof ChargeItem))
2558          return false;
2559        ChargeItem o = (ChargeItem) other_;
2560        return compareDeep(identifier, o.identifier, true) && compareDeep(definitionUri, o.definitionUri, true)
2561           && compareDeep(definitionCanonical, o.definitionCanonical, true) && compareDeep(status, o.status, true)
2562           && compareDeep(partOf, o.partOf, true) && compareDeep(code, o.code, true) && compareDeep(subject, o.subject, true)
2563           && compareDeep(context, o.context, true) && compareDeep(occurrence, o.occurrence, true) && compareDeep(performer, o.performer, true)
2564           && compareDeep(performingOrganization, o.performingOrganization, true) && compareDeep(requestingOrganization, o.requestingOrganization, true)
2565           && compareDeep(costCenter, o.costCenter, true) && compareDeep(quantity, o.quantity, true) && compareDeep(bodysite, o.bodysite, true)
2566           && compareDeep(factorOverride, o.factorOverride, true) && compareDeep(priceOverride, o.priceOverride, true)
2567           && compareDeep(overrideReason, o.overrideReason, true) && compareDeep(enterer, o.enterer, true)
2568           && compareDeep(enteredDate, o.enteredDate, true) && compareDeep(reason, o.reason, true) && compareDeep(service, o.service, true)
2569           && compareDeep(product, o.product, true) && compareDeep(account, o.account, true) && compareDeep(note, o.note, true)
2570           && compareDeep(supportingInformation, o.supportingInformation, true);
2571      }
2572
2573      @Override
2574      public boolean equalsShallow(Base other_) {
2575        if (!super.equalsShallow(other_))
2576          return false;
2577        if (!(other_ instanceof ChargeItem))
2578          return false;
2579        ChargeItem o = (ChargeItem) other_;
2580        return compareValues(definitionUri, o.definitionUri, true) && compareValues(status, o.status, true)
2581           && compareValues(factorOverride, o.factorOverride, true) && compareValues(overrideReason, o.overrideReason, true)
2582           && compareValues(enteredDate, o.enteredDate, true);
2583      }
2584
2585      public boolean isEmpty() {
2586        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, definitionUri
2587          , definitionCanonical, status, partOf, code, subject, context, occurrence, performer
2588          , performingOrganization, requestingOrganization, costCenter, quantity, bodysite, factorOverride
2589          , priceOverride, overrideReason, enterer, enteredDate, reason, service, product
2590          , account, note, supportingInformation);
2591      }
2592
2593  @Override
2594  public ResourceType getResourceType() {
2595    return ResourceType.ChargeItem;
2596   }
2597
2598 /**
2599   * Search parameter: <b>identifier</b>
2600   * <p>
2601   * Description: <b>Business Identifier for item</b><br>
2602   * Type: <b>token</b><br>
2603   * Path: <b>ChargeItem.identifier</b><br>
2604   * </p>
2605   */
2606  @SearchParamDefinition(name="identifier", path="ChargeItem.identifier", description="Business Identifier for item", type="token" )
2607  public static final String SP_IDENTIFIER = "identifier";
2608 /**
2609   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2610   * <p>
2611   * Description: <b>Business Identifier for item</b><br>
2612   * Type: <b>token</b><br>
2613   * Path: <b>ChargeItem.identifier</b><br>
2614   * </p>
2615   */
2616  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2617
2618 /**
2619   * Search parameter: <b>performing-organization</b>
2620   * <p>
2621   * Description: <b>Organization providing the charged service</b><br>
2622   * Type: <b>reference</b><br>
2623   * Path: <b>ChargeItem.performingOrganization</b><br>
2624   * </p>
2625   */
2626  @SearchParamDefinition(name="performing-organization", path="ChargeItem.performingOrganization", description="Organization providing the charged service", type="reference", target={Organization.class } )
2627  public static final String SP_PERFORMING_ORGANIZATION = "performing-organization";
2628 /**
2629   * <b>Fluent Client</b> search parameter constant for <b>performing-organization</b>
2630   * <p>
2631   * Description: <b>Organization providing the charged service</b><br>
2632   * Type: <b>reference</b><br>
2633   * Path: <b>ChargeItem.performingOrganization</b><br>
2634   * </p>
2635   */
2636  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PERFORMING_ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PERFORMING_ORGANIZATION);
2637
2638/**
2639   * Constant for fluent queries to be used to add include statements. Specifies
2640   * the path value of "<b>ChargeItem:performing-organization</b>".
2641   */
2642  public static final ca.uhn.fhir.model.api.Include INCLUDE_PERFORMING_ORGANIZATION = new ca.uhn.fhir.model.api.Include("ChargeItem:performing-organization").toLocked();
2643
2644 /**
2645   * Search parameter: <b>code</b>
2646   * <p>
2647   * Description: <b>A code that identifies the charge, like a billing code</b><br>
2648   * Type: <b>token</b><br>
2649   * Path: <b>ChargeItem.code</b><br>
2650   * </p>
2651   */
2652  @SearchParamDefinition(name="code", path="ChargeItem.code", description="A code that identifies the charge, like a billing code", type="token" )
2653  public static final String SP_CODE = "code";
2654 /**
2655   * <b>Fluent Client</b> search parameter constant for <b>code</b>
2656   * <p>
2657   * Description: <b>A code that identifies the charge, like a billing code</b><br>
2658   * Type: <b>token</b><br>
2659   * Path: <b>ChargeItem.code</b><br>
2660   * </p>
2661   */
2662  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
2663
2664 /**
2665   * Search parameter: <b>quantity</b>
2666   * <p>
2667   * Description: <b>Quantity of which the charge item has been serviced</b><br>
2668   * Type: <b>quantity</b><br>
2669   * Path: <b>ChargeItem.quantity</b><br>
2670   * </p>
2671   */
2672  @SearchParamDefinition(name="quantity", path="ChargeItem.quantity", description="Quantity of which the charge item has been serviced", type="quantity" )
2673  public static final String SP_QUANTITY = "quantity";
2674 /**
2675   * <b>Fluent Client</b> search parameter constant for <b>quantity</b>
2676   * <p>
2677   * Description: <b>Quantity of which the charge item has been serviced</b><br>
2678   * Type: <b>quantity</b><br>
2679   * Path: <b>ChargeItem.quantity</b><br>
2680   * </p>
2681   */
2682  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_QUANTITY);
2683
2684 /**
2685   * Search parameter: <b>subject</b>
2686   * <p>
2687   * Description: <b>Individual service was done for/to</b><br>
2688   * Type: <b>reference</b><br>
2689   * Path: <b>ChargeItem.subject</b><br>
2690   * </p>
2691   */
2692  @SearchParamDefinition(name="subject", path="ChargeItem.subject", description="Individual service was done for/to", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Group.class, Patient.class } )
2693  public static final String SP_SUBJECT = "subject";
2694 /**
2695   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
2696   * <p>
2697   * Description: <b>Individual service was done for/to</b><br>
2698   * Type: <b>reference</b><br>
2699   * Path: <b>ChargeItem.subject</b><br>
2700   * </p>
2701   */
2702  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
2703
2704/**
2705   * Constant for fluent queries to be used to add include statements. Specifies
2706   * the path value of "<b>ChargeItem:subject</b>".
2707   */
2708  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("ChargeItem:subject").toLocked();
2709
2710 /**
2711   * Search parameter: <b>occurrence</b>
2712   * <p>
2713   * Description: <b>When the charged service was applied</b><br>
2714   * Type: <b>date</b><br>
2715   * Path: <b>ChargeItem.occurrence[x]</b><br>
2716   * </p>
2717   */
2718  @SearchParamDefinition(name="occurrence", path="ChargeItem.occurrence", description="When the charged service was applied", type="date" )
2719  public static final String SP_OCCURRENCE = "occurrence";
2720 /**
2721   * <b>Fluent Client</b> search parameter constant for <b>occurrence</b>
2722   * <p>
2723   * Description: <b>When the charged service was applied</b><br>
2724   * Type: <b>date</b><br>
2725   * Path: <b>ChargeItem.occurrence[x]</b><br>
2726   * </p>
2727   */
2728  public static final ca.uhn.fhir.rest.gclient.DateClientParam OCCURRENCE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_OCCURRENCE);
2729
2730 /**
2731   * Search parameter: <b>entered-date</b>
2732   * <p>
2733   * Description: <b>Date the charge item was entered</b><br>
2734   * Type: <b>date</b><br>
2735   * Path: <b>ChargeItem.enteredDate</b><br>
2736   * </p>
2737   */
2738  @SearchParamDefinition(name="entered-date", path="ChargeItem.enteredDate", description="Date the charge item was entered", type="date" )
2739  public static final String SP_ENTERED_DATE = "entered-date";
2740 /**
2741   * <b>Fluent Client</b> search parameter constant for <b>entered-date</b>
2742   * <p>
2743   * Description: <b>Date the charge item was entered</b><br>
2744   * Type: <b>date</b><br>
2745   * Path: <b>ChargeItem.enteredDate</b><br>
2746   * </p>
2747   */
2748  public static final ca.uhn.fhir.rest.gclient.DateClientParam ENTERED_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_ENTERED_DATE);
2749
2750 /**
2751   * Search parameter: <b>performer-function</b>
2752   * <p>
2753   * Description: <b>What type of performance was done</b><br>
2754   * Type: <b>token</b><br>
2755   * Path: <b>ChargeItem.performer.function</b><br>
2756   * </p>
2757   */
2758  @SearchParamDefinition(name="performer-function", path="ChargeItem.performer.function", description="What type of performance was done", type="token" )
2759  public static final String SP_PERFORMER_FUNCTION = "performer-function";
2760 /**
2761   * <b>Fluent Client</b> search parameter constant for <b>performer-function</b>
2762   * <p>
2763   * Description: <b>What type of performance was done</b><br>
2764   * Type: <b>token</b><br>
2765   * Path: <b>ChargeItem.performer.function</b><br>
2766   * </p>
2767   */
2768  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PERFORMER_FUNCTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PERFORMER_FUNCTION);
2769
2770 /**
2771   * Search parameter: <b>patient</b>
2772   * <p>
2773   * Description: <b>Individual service was done for/to</b><br>
2774   * Type: <b>reference</b><br>
2775   * Path: <b>ChargeItem.subject</b><br>
2776   * </p>
2777   */
2778  @SearchParamDefinition(name="patient", path="ChargeItem.subject.where(resolve() is Patient)", description="Individual service was done for/to", type="reference", target={Patient.class } )
2779  public static final String SP_PATIENT = "patient";
2780 /**
2781   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2782   * <p>
2783   * Description: <b>Individual service was done for/to</b><br>
2784   * Type: <b>reference</b><br>
2785   * Path: <b>ChargeItem.subject</b><br>
2786   * </p>
2787   */
2788  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2789
2790/**
2791   * Constant for fluent queries to be used to add include statements. Specifies
2792   * the path value of "<b>ChargeItem:patient</b>".
2793   */
2794  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("ChargeItem:patient").toLocked();
2795
2796 /**
2797   * Search parameter: <b>factor-override</b>
2798   * <p>
2799   * Description: <b>Factor overriding the associated rules</b><br>
2800   * Type: <b>number</b><br>
2801   * Path: <b>ChargeItem.factorOverride</b><br>
2802   * </p>
2803   */
2804  @SearchParamDefinition(name="factor-override", path="ChargeItem.factorOverride", description="Factor overriding the associated rules", type="number" )
2805  public static final String SP_FACTOR_OVERRIDE = "factor-override";
2806 /**
2807   * <b>Fluent Client</b> search parameter constant for <b>factor-override</b>
2808   * <p>
2809   * Description: <b>Factor overriding the associated rules</b><br>
2810   * Type: <b>number</b><br>
2811   * Path: <b>ChargeItem.factorOverride</b><br>
2812   * </p>
2813   */
2814  public static final ca.uhn.fhir.rest.gclient.NumberClientParam FACTOR_OVERRIDE = new ca.uhn.fhir.rest.gclient.NumberClientParam(SP_FACTOR_OVERRIDE);
2815
2816 /**
2817   * Search parameter: <b>service</b>
2818   * <p>
2819   * Description: <b>Which rendered service is being charged?</b><br>
2820   * Type: <b>reference</b><br>
2821   * Path: <b>ChargeItem.service</b><br>
2822   * </p>
2823   */
2824  @SearchParamDefinition(name="service", path="ChargeItem.service", description="Which rendered service is being charged?", type="reference", target={DiagnosticReport.class, ImagingStudy.class, Immunization.class, MedicationAdministration.class, MedicationDispense.class, Observation.class, Procedure.class, SupplyDelivery.class } )
2825  public static final String SP_SERVICE = "service";
2826 /**
2827   * <b>Fluent Client</b> search parameter constant for <b>service</b>
2828   * <p>
2829   * Description: <b>Which rendered service is being charged?</b><br>
2830   * Type: <b>reference</b><br>
2831   * Path: <b>ChargeItem.service</b><br>
2832   * </p>
2833   */
2834  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SERVICE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SERVICE);
2835
2836/**
2837   * Constant for fluent queries to be used to add include statements. Specifies
2838   * the path value of "<b>ChargeItem:service</b>".
2839   */
2840  public static final ca.uhn.fhir.model.api.Include INCLUDE_SERVICE = new ca.uhn.fhir.model.api.Include("ChargeItem:service").toLocked();
2841
2842 /**
2843   * Search parameter: <b>price-override</b>
2844   * <p>
2845   * Description: <b>Price overriding the associated rules</b><br>
2846   * Type: <b>quantity</b><br>
2847   * Path: <b>ChargeItem.priceOverride</b><br>
2848   * </p>
2849   */
2850  @SearchParamDefinition(name="price-override", path="ChargeItem.priceOverride", description="Price overriding the associated rules", type="quantity" )
2851  public static final String SP_PRICE_OVERRIDE = "price-override";
2852 /**
2853   * <b>Fluent Client</b> search parameter constant for <b>price-override</b>
2854   * <p>
2855   * Description: <b>Price overriding the associated rules</b><br>
2856   * Type: <b>quantity</b><br>
2857   * Path: <b>ChargeItem.priceOverride</b><br>
2858   * </p>
2859   */
2860  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam PRICE_OVERRIDE = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_PRICE_OVERRIDE);
2861
2862 /**
2863   * Search parameter: <b>context</b>
2864   * <p>
2865   * Description: <b>Encounter / Episode associated with event</b><br>
2866   * Type: <b>reference</b><br>
2867   * Path: <b>ChargeItem.context</b><br>
2868   * </p>
2869   */
2870  @SearchParamDefinition(name="context", path="ChargeItem.context", description="Encounter / Episode associated with event", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Encounter") }, target={Encounter.class, EpisodeOfCare.class } )
2871  public static final String SP_CONTEXT = "context";
2872 /**
2873   * <b>Fluent Client</b> search parameter constant for <b>context</b>
2874   * <p>
2875   * Description: <b>Encounter / Episode associated with event</b><br>
2876   * Type: <b>reference</b><br>
2877   * Path: <b>ChargeItem.context</b><br>
2878   * </p>
2879   */
2880  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CONTEXT);
2881
2882/**
2883   * Constant for fluent queries to be used to add include statements. Specifies
2884   * the path value of "<b>ChargeItem:context</b>".
2885   */
2886  public static final ca.uhn.fhir.model.api.Include INCLUDE_CONTEXT = new ca.uhn.fhir.model.api.Include("ChargeItem:context").toLocked();
2887
2888 /**
2889   * Search parameter: <b>enterer</b>
2890   * <p>
2891   * Description: <b>Individual who was entering</b><br>
2892   * Type: <b>reference</b><br>
2893   * Path: <b>ChargeItem.enterer</b><br>
2894   * </p>
2895   */
2896  @SearchParamDefinition(name="enterer", path="ChargeItem.enterer", description="Individual who was entering", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2897  public static final String SP_ENTERER = "enterer";
2898 /**
2899   * <b>Fluent Client</b> search parameter constant for <b>enterer</b>
2900   * <p>
2901   * Description: <b>Individual who was entering</b><br>
2902   * Type: <b>reference</b><br>
2903   * Path: <b>ChargeItem.enterer</b><br>
2904   * </p>
2905   */
2906  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENTERER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENTERER);
2907
2908/**
2909   * Constant for fluent queries to be used to add include statements. Specifies
2910   * the path value of "<b>ChargeItem:enterer</b>".
2911   */
2912  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENTERER = new ca.uhn.fhir.model.api.Include("ChargeItem:enterer").toLocked();
2913
2914 /**
2915   * Search parameter: <b>performer-actor</b>
2916   * <p>
2917   * Description: <b>Individual who was performing</b><br>
2918   * Type: <b>reference</b><br>
2919   * Path: <b>ChargeItem.performer.actor</b><br>
2920   * </p>
2921   */
2922  @SearchParamDefinition(name="performer-actor", path="ChargeItem.performer.actor", description="Individual who was performing", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={CareTeam.class, Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2923  public static final String SP_PERFORMER_ACTOR = "performer-actor";
2924 /**
2925   * <b>Fluent Client</b> search parameter constant for <b>performer-actor</b>
2926   * <p>
2927   * Description: <b>Individual who was performing</b><br>
2928   * Type: <b>reference</b><br>
2929   * Path: <b>ChargeItem.performer.actor</b><br>
2930   * </p>
2931   */
2932  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PERFORMER_ACTOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PERFORMER_ACTOR);
2933
2934/**
2935   * Constant for fluent queries to be used to add include statements. Specifies
2936   * the path value of "<b>ChargeItem:performer-actor</b>".
2937   */
2938  public static final ca.uhn.fhir.model.api.Include INCLUDE_PERFORMER_ACTOR = new ca.uhn.fhir.model.api.Include("ChargeItem:performer-actor").toLocked();
2939
2940 /**
2941   * Search parameter: <b>account</b>
2942   * <p>
2943   * Description: <b>Account to place this charge</b><br>
2944   * Type: <b>reference</b><br>
2945   * Path: <b>ChargeItem.account</b><br>
2946   * </p>
2947   */
2948  @SearchParamDefinition(name="account", path="ChargeItem.account", description="Account to place this charge", type="reference", target={Account.class } )
2949  public static final String SP_ACCOUNT = "account";
2950 /**
2951   * <b>Fluent Client</b> search parameter constant for <b>account</b>
2952   * <p>
2953   * Description: <b>Account to place this charge</b><br>
2954   * Type: <b>reference</b><br>
2955   * Path: <b>ChargeItem.account</b><br>
2956   * </p>
2957   */
2958  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ACCOUNT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ACCOUNT);
2959
2960/**
2961   * Constant for fluent queries to be used to add include statements. Specifies
2962   * the path value of "<b>ChargeItem:account</b>".
2963   */
2964  public static final ca.uhn.fhir.model.api.Include INCLUDE_ACCOUNT = new ca.uhn.fhir.model.api.Include("ChargeItem:account").toLocked();
2965
2966 /**
2967   * Search parameter: <b>requesting-organization</b>
2968   * <p>
2969   * Description: <b>Organization requesting the charged service</b><br>
2970   * Type: <b>reference</b><br>
2971   * Path: <b>ChargeItem.requestingOrganization</b><br>
2972   * </p>
2973   */
2974  @SearchParamDefinition(name="requesting-organization", path="ChargeItem.requestingOrganization", description="Organization requesting the charged service", type="reference", target={Organization.class } )
2975  public static final String SP_REQUESTING_ORGANIZATION = "requesting-organization";
2976 /**
2977   * <b>Fluent Client</b> search parameter constant for <b>requesting-organization</b>
2978   * <p>
2979   * Description: <b>Organization requesting the charged service</b><br>
2980   * Type: <b>reference</b><br>
2981   * Path: <b>ChargeItem.requestingOrganization</b><br>
2982   * </p>
2983   */
2984  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUESTING_ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUESTING_ORGANIZATION);
2985
2986/**
2987   * Constant for fluent queries to be used to add include statements. Specifies
2988   * the path value of "<b>ChargeItem:requesting-organization</b>".
2989   */
2990  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUESTING_ORGANIZATION = new ca.uhn.fhir.model.api.Include("ChargeItem:requesting-organization").toLocked();
2991
2992
2993}
2994