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