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