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