001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Fri, Jul 15, 2022 11:20+1000 for FHIR v5.0.0-snapshot2
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import java.math.*;
038import org.hl7.fhir.utilities.Utilities;
039import org.hl7.fhir.r5.model.Enumerations.*;
040import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
041import org.hl7.fhir.exceptions.FHIRException;
042import org.hl7.fhir.instance.model.api.ICompositeType;
043import ca.uhn.fhir.model.api.annotation.ResourceDef;
044import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
045import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
046import ca.uhn.fhir.model.api.annotation.Child;
047import ca.uhn.fhir.model.api.annotation.ChildOrder;
048import ca.uhn.fhir.model.api.annotation.Description;
049import ca.uhn.fhir.model.api.annotation.Block;
050
051/**
052 * The ChargeItemDefinition resource provides the properties that apply to the (billing) codes necessary to calculate costs and prices. The properties may differ largely depending on type and realm, therefore this resource gives only a rough structure and requires profiling for each type of billing code system.
053 */
054@ResourceDef(name="ChargeItemDefinition", profile="http://hl7.org/fhir/StructureDefinition/ChargeItemDefinition")
055public class ChargeItemDefinition extends MetadataResource {
056
057    @Block()
058    public static class ChargeItemDefinitionApplicabilityComponent extends BackboneElement implements IBaseBackboneElement {
059        /**
060         * A brief, natural language description of the condition that effectively communicates the intended semantics.
061         */
062        @Child(name = "description", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
063        @Description(shortDefinition="Natural language description of the condition", formalDefinition="A brief, natural language description of the condition that effectively communicates the intended semantics." )
064        protected StringType description;
065
066        /**
067         * The media type of the language for the expression, e.g. "text/cql" for Clinical Query Language expressions or "text/fhirpath" for FHIRPath expressions.
068         */
069        @Child(name = "language", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
070        @Description(shortDefinition="Language of the expression", formalDefinition="The media type of the language for the expression, e.g. \"text/cql\" for Clinical Query Language expressions or \"text/fhirpath\" for FHIRPath expressions." )
071        protected StringType language;
072
073        /**
074         * An expression that returns true or false, indicating whether the condition is satisfied. When using FHIRPath expressions, the %context environment variable must be replaced at runtime with the ChargeItem resource to which this definition is applied.
075         */
076        @Child(name = "expression", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
077        @Description(shortDefinition="Boolean-valued expression", formalDefinition="An expression that returns true or false, indicating whether the condition is satisfied. When using FHIRPath expressions, the %context environment variable must be replaced at runtime with the ChargeItem resource to which this definition is applied." )
078        protected StringType expression;
079
080        private static final long serialVersionUID = 1354288281L;
081
082    /**
083     * Constructor
084     */
085      public ChargeItemDefinitionApplicabilityComponent() {
086        super();
087      }
088
089        /**
090         * @return {@link #description} (A brief, natural language description of the condition that effectively communicates the intended semantics.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
091         */
092        public StringType getDescriptionElement() { 
093          if (this.description == null)
094            if (Configuration.errorOnAutoCreate())
095              throw new Error("Attempt to auto-create ChargeItemDefinitionApplicabilityComponent.description");
096            else if (Configuration.doAutoCreate())
097              this.description = new StringType(); // bb
098          return this.description;
099        }
100
101        public boolean hasDescriptionElement() { 
102          return this.description != null && !this.description.isEmpty();
103        }
104
105        public boolean hasDescription() { 
106          return this.description != null && !this.description.isEmpty();
107        }
108
109        /**
110         * @param value {@link #description} (A brief, natural language description of the condition that effectively communicates the intended semantics.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
111         */
112        public ChargeItemDefinitionApplicabilityComponent setDescriptionElement(StringType value) { 
113          this.description = value;
114          return this;
115        }
116
117        /**
118         * @return A brief, natural language description of the condition that effectively communicates the intended semantics.
119         */
120        public String getDescription() { 
121          return this.description == null ? null : this.description.getValue();
122        }
123
124        /**
125         * @param value A brief, natural language description of the condition that effectively communicates the intended semantics.
126         */
127        public ChargeItemDefinitionApplicabilityComponent setDescription(String value) { 
128          if (Utilities.noString(value))
129            this.description = null;
130          else {
131            if (this.description == null)
132              this.description = new StringType();
133            this.description.setValue(value);
134          }
135          return this;
136        }
137
138        /**
139         * @return {@link #language} (The media type of the language for the expression, e.g. "text/cql" for Clinical Query Language expressions or "text/fhirpath" for FHIRPath expressions.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
140         */
141        public StringType getLanguageElement() { 
142          if (this.language == null)
143            if (Configuration.errorOnAutoCreate())
144              throw new Error("Attempt to auto-create ChargeItemDefinitionApplicabilityComponent.language");
145            else if (Configuration.doAutoCreate())
146              this.language = new StringType(); // bb
147          return this.language;
148        }
149
150        public boolean hasLanguageElement() { 
151          return this.language != null && !this.language.isEmpty();
152        }
153
154        public boolean hasLanguage() { 
155          return this.language != null && !this.language.isEmpty();
156        }
157
158        /**
159         * @param value {@link #language} (The media type of the language for the expression, e.g. "text/cql" for Clinical Query Language expressions or "text/fhirpath" for FHIRPath expressions.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
160         */
161        public ChargeItemDefinitionApplicabilityComponent setLanguageElement(StringType value) { 
162          this.language = value;
163          return this;
164        }
165
166        /**
167         * @return The media type of the language for the expression, e.g. "text/cql" for Clinical Query Language expressions or "text/fhirpath" for FHIRPath expressions.
168         */
169        public String getLanguage() { 
170          return this.language == null ? null : this.language.getValue();
171        }
172
173        /**
174         * @param value The media type of the language for the expression, e.g. "text/cql" for Clinical Query Language expressions or "text/fhirpath" for FHIRPath expressions.
175         */
176        public ChargeItemDefinitionApplicabilityComponent setLanguage(String value) { 
177          if (Utilities.noString(value))
178            this.language = null;
179          else {
180            if (this.language == null)
181              this.language = new StringType();
182            this.language.setValue(value);
183          }
184          return this;
185        }
186
187        /**
188         * @return {@link #expression} (An expression that returns true or false, indicating whether the condition is satisfied. When using FHIRPath expressions, the %context environment variable must be replaced at runtime with the ChargeItem resource to which this definition is applied.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
189         */
190        public StringType getExpressionElement() { 
191          if (this.expression == null)
192            if (Configuration.errorOnAutoCreate())
193              throw new Error("Attempt to auto-create ChargeItemDefinitionApplicabilityComponent.expression");
194            else if (Configuration.doAutoCreate())
195              this.expression = new StringType(); // bb
196          return this.expression;
197        }
198
199        public boolean hasExpressionElement() { 
200          return this.expression != null && !this.expression.isEmpty();
201        }
202
203        public boolean hasExpression() { 
204          return this.expression != null && !this.expression.isEmpty();
205        }
206
207        /**
208         * @param value {@link #expression} (An expression that returns true or false, indicating whether the condition is satisfied. When using FHIRPath expressions, the %context environment variable must be replaced at runtime with the ChargeItem resource to which this definition is applied.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
209         */
210        public ChargeItemDefinitionApplicabilityComponent setExpressionElement(StringType value) { 
211          this.expression = value;
212          return this;
213        }
214
215        /**
216         * @return An expression that returns true or false, indicating whether the condition is satisfied. When using FHIRPath expressions, the %context environment variable must be replaced at runtime with the ChargeItem resource to which this definition is applied.
217         */
218        public String getExpression() { 
219          return this.expression == null ? null : this.expression.getValue();
220        }
221
222        /**
223         * @param value An expression that returns true or false, indicating whether the condition is satisfied. When using FHIRPath expressions, the %context environment variable must be replaced at runtime with the ChargeItem resource to which this definition is applied.
224         */
225        public ChargeItemDefinitionApplicabilityComponent setExpression(String value) { 
226          if (Utilities.noString(value))
227            this.expression = null;
228          else {
229            if (this.expression == null)
230              this.expression = new StringType();
231            this.expression.setValue(value);
232          }
233          return this;
234        }
235
236        protected void listChildren(List<Property> children) {
237          super.listChildren(children);
238          children.add(new Property("description", "string", "A brief, natural language description of the condition that effectively communicates the intended semantics.", 0, 1, description));
239          children.add(new Property("language", "string", "The media type of the language for the expression, e.g. \"text/cql\" for Clinical Query Language expressions or \"text/fhirpath\" for FHIRPath expressions.", 0, 1, language));
240          children.add(new Property("expression", "string", "An expression that returns true or false, indicating whether the condition is satisfied. When using FHIRPath expressions, the %context environment variable must be replaced at runtime with the ChargeItem resource to which this definition is applied.", 0, 1, expression));
241        }
242
243        @Override
244        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
245          switch (_hash) {
246          case -1724546052: /*description*/  return new Property("description", "string", "A brief, natural language description of the condition that effectively communicates the intended semantics.", 0, 1, description);
247          case -1613589672: /*language*/  return new Property("language", "string", "The media type of the language for the expression, e.g. \"text/cql\" for Clinical Query Language expressions or \"text/fhirpath\" for FHIRPath expressions.", 0, 1, language);
248          case -1795452264: /*expression*/  return new Property("expression", "string", "An expression that returns true or false, indicating whether the condition is satisfied. When using FHIRPath expressions, the %context environment variable must be replaced at runtime with the ChargeItem resource to which this definition is applied.", 0, 1, expression);
249          default: return super.getNamedProperty(_hash, _name, _checkValid);
250          }
251
252        }
253
254      @Override
255      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
256        switch (hash) {
257        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
258        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // StringType
259        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // StringType
260        default: return super.getProperty(hash, name, checkValid);
261        }
262
263      }
264
265      @Override
266      public Base setProperty(int hash, String name, Base value) throws FHIRException {
267        switch (hash) {
268        case -1724546052: // description
269          this.description = TypeConvertor.castToString(value); // StringType
270          return value;
271        case -1613589672: // language
272          this.language = TypeConvertor.castToString(value); // StringType
273          return value;
274        case -1795452264: // expression
275          this.expression = TypeConvertor.castToString(value); // StringType
276          return value;
277        default: return super.setProperty(hash, name, value);
278        }
279
280      }
281
282      @Override
283      public Base setProperty(String name, Base value) throws FHIRException {
284        if (name.equals("description")) {
285          this.description = TypeConvertor.castToString(value); // StringType
286        } else if (name.equals("language")) {
287          this.language = TypeConvertor.castToString(value); // StringType
288        } else if (name.equals("expression")) {
289          this.expression = TypeConvertor.castToString(value); // StringType
290        } else
291          return super.setProperty(name, value);
292        return value;
293      }
294
295      @Override
296      public Base makeProperty(int hash, String name) throws FHIRException {
297        switch (hash) {
298        case -1724546052:  return getDescriptionElement();
299        case -1613589672:  return getLanguageElement();
300        case -1795452264:  return getExpressionElement();
301        default: return super.makeProperty(hash, name);
302        }
303
304      }
305
306      @Override
307      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
308        switch (hash) {
309        case -1724546052: /*description*/ return new String[] {"string"};
310        case -1613589672: /*language*/ return new String[] {"string"};
311        case -1795452264: /*expression*/ return new String[] {"string"};
312        default: return super.getTypesForProperty(hash, name);
313        }
314
315      }
316
317      @Override
318      public Base addChild(String name) throws FHIRException {
319        if (name.equals("description")) {
320          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.applicability.description");
321        }
322        else if (name.equals("language")) {
323          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.applicability.language");
324        }
325        else if (name.equals("expression")) {
326          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.applicability.expression");
327        }
328        else
329          return super.addChild(name);
330      }
331
332      public ChargeItemDefinitionApplicabilityComponent copy() {
333        ChargeItemDefinitionApplicabilityComponent dst = new ChargeItemDefinitionApplicabilityComponent();
334        copyValues(dst);
335        return dst;
336      }
337
338      public void copyValues(ChargeItemDefinitionApplicabilityComponent dst) {
339        super.copyValues(dst);
340        dst.description = description == null ? null : description.copy();
341        dst.language = language == null ? null : language.copy();
342        dst.expression = expression == null ? null : expression.copy();
343      }
344
345      @Override
346      public boolean equalsDeep(Base other_) {
347        if (!super.equalsDeep(other_))
348          return false;
349        if (!(other_ instanceof ChargeItemDefinitionApplicabilityComponent))
350          return false;
351        ChargeItemDefinitionApplicabilityComponent o = (ChargeItemDefinitionApplicabilityComponent) other_;
352        return compareDeep(description, o.description, true) && compareDeep(language, o.language, true)
353           && compareDeep(expression, o.expression, true);
354      }
355
356      @Override
357      public boolean equalsShallow(Base other_) {
358        if (!super.equalsShallow(other_))
359          return false;
360        if (!(other_ instanceof ChargeItemDefinitionApplicabilityComponent))
361          return false;
362        ChargeItemDefinitionApplicabilityComponent o = (ChargeItemDefinitionApplicabilityComponent) other_;
363        return compareValues(description, o.description, true) && compareValues(language, o.language, true)
364           && compareValues(expression, o.expression, true);
365      }
366
367      public boolean isEmpty() {
368        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, language, expression
369          );
370      }
371
372  public String fhirType() {
373    return "ChargeItemDefinition.applicability";
374
375  }
376
377  }
378
379    @Block()
380    public static class ChargeItemDefinitionPropertyGroupComponent extends BackboneElement implements IBaseBackboneElement {
381        /**
382         * Expressions that describe applicability criteria for the priceComponent.
383         */
384        @Child(name = "applicability", type = {ChargeItemDefinitionApplicabilityComponent.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
385        @Description(shortDefinition="Conditions under which the priceComponent is applicable", formalDefinition="Expressions that describe applicability criteria for the priceComponent." )
386        protected List<ChargeItemDefinitionApplicabilityComponent> applicability;
387
388        /**
389         * The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice of how the prices have been calculated.
390         */
391        @Child(name = "priceComponent", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
392        @Description(shortDefinition="Components of total line item price", formalDefinition="The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice of how the prices have been calculated." )
393        protected List<ChargeItemDefinitionPropertyGroupPriceComponentComponent> priceComponent;
394
395        private static final long serialVersionUID = 1723436176L;
396
397    /**
398     * Constructor
399     */
400      public ChargeItemDefinitionPropertyGroupComponent() {
401        super();
402      }
403
404        /**
405         * @return {@link #applicability} (Expressions that describe applicability criteria for the priceComponent.)
406         */
407        public List<ChargeItemDefinitionApplicabilityComponent> getApplicability() { 
408          if (this.applicability == null)
409            this.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
410          return this.applicability;
411        }
412
413        /**
414         * @return Returns a reference to <code>this</code> for easy method chaining
415         */
416        public ChargeItemDefinitionPropertyGroupComponent setApplicability(List<ChargeItemDefinitionApplicabilityComponent> theApplicability) { 
417          this.applicability = theApplicability;
418          return this;
419        }
420
421        public boolean hasApplicability() { 
422          if (this.applicability == null)
423            return false;
424          for (ChargeItemDefinitionApplicabilityComponent item : this.applicability)
425            if (!item.isEmpty())
426              return true;
427          return false;
428        }
429
430        public ChargeItemDefinitionApplicabilityComponent addApplicability() { //3
431          ChargeItemDefinitionApplicabilityComponent t = new ChargeItemDefinitionApplicabilityComponent();
432          if (this.applicability == null)
433            this.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
434          this.applicability.add(t);
435          return t;
436        }
437
438        public ChargeItemDefinitionPropertyGroupComponent addApplicability(ChargeItemDefinitionApplicabilityComponent t) { //3
439          if (t == null)
440            return this;
441          if (this.applicability == null)
442            this.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
443          this.applicability.add(t);
444          return this;
445        }
446
447        /**
448         * @return The first repetition of repeating field {@link #applicability}, creating it if it does not already exist {3}
449         */
450        public ChargeItemDefinitionApplicabilityComponent getApplicabilityFirstRep() { 
451          if (getApplicability().isEmpty()) {
452            addApplicability();
453          }
454          return getApplicability().get(0);
455        }
456
457        /**
458         * @return {@link #priceComponent} (The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice of how the prices have been calculated.)
459         */
460        public List<ChargeItemDefinitionPropertyGroupPriceComponentComponent> getPriceComponent() { 
461          if (this.priceComponent == null)
462            this.priceComponent = new ArrayList<ChargeItemDefinitionPropertyGroupPriceComponentComponent>();
463          return this.priceComponent;
464        }
465
466        /**
467         * @return Returns a reference to <code>this</code> for easy method chaining
468         */
469        public ChargeItemDefinitionPropertyGroupComponent setPriceComponent(List<ChargeItemDefinitionPropertyGroupPriceComponentComponent> thePriceComponent) { 
470          this.priceComponent = thePriceComponent;
471          return this;
472        }
473
474        public boolean hasPriceComponent() { 
475          if (this.priceComponent == null)
476            return false;
477          for (ChargeItemDefinitionPropertyGroupPriceComponentComponent item : this.priceComponent)
478            if (!item.isEmpty())
479              return true;
480          return false;
481        }
482
483        public ChargeItemDefinitionPropertyGroupPriceComponentComponent addPriceComponent() { //3
484          ChargeItemDefinitionPropertyGroupPriceComponentComponent t = new ChargeItemDefinitionPropertyGroupPriceComponentComponent();
485          if (this.priceComponent == null)
486            this.priceComponent = new ArrayList<ChargeItemDefinitionPropertyGroupPriceComponentComponent>();
487          this.priceComponent.add(t);
488          return t;
489        }
490
491        public ChargeItemDefinitionPropertyGroupComponent addPriceComponent(ChargeItemDefinitionPropertyGroupPriceComponentComponent t) { //3
492          if (t == null)
493            return this;
494          if (this.priceComponent == null)
495            this.priceComponent = new ArrayList<ChargeItemDefinitionPropertyGroupPriceComponentComponent>();
496          this.priceComponent.add(t);
497          return this;
498        }
499
500        /**
501         * @return The first repetition of repeating field {@link #priceComponent}, creating it if it does not already exist {3}
502         */
503        public ChargeItemDefinitionPropertyGroupPriceComponentComponent getPriceComponentFirstRep() { 
504          if (getPriceComponent().isEmpty()) {
505            addPriceComponent();
506          }
507          return getPriceComponent().get(0);
508        }
509
510        protected void listChildren(List<Property> children) {
511          super.listChildren(children);
512          children.add(new Property("applicability", "@ChargeItemDefinition.applicability", "Expressions that describe applicability criteria for the priceComponent.", 0, java.lang.Integer.MAX_VALUE, applicability));
513          children.add(new Property("priceComponent", "", "The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice of how the prices have been calculated.", 0, java.lang.Integer.MAX_VALUE, priceComponent));
514        }
515
516        @Override
517        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
518          switch (_hash) {
519          case -1526770491: /*applicability*/  return new Property("applicability", "@ChargeItemDefinition.applicability", "Expressions that describe applicability criteria for the priceComponent.", 0, java.lang.Integer.MAX_VALUE, applicability);
520          case 1219095988: /*priceComponent*/  return new Property("priceComponent", "", "The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice of how the prices have been calculated.", 0, java.lang.Integer.MAX_VALUE, priceComponent);
521          default: return super.getNamedProperty(_hash, _name, _checkValid);
522          }
523
524        }
525
526      @Override
527      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
528        switch (hash) {
529        case -1526770491: /*applicability*/ return this.applicability == null ? new Base[0] : this.applicability.toArray(new Base[this.applicability.size()]); // ChargeItemDefinitionApplicabilityComponent
530        case 1219095988: /*priceComponent*/ return this.priceComponent == null ? new Base[0] : this.priceComponent.toArray(new Base[this.priceComponent.size()]); // ChargeItemDefinitionPropertyGroupPriceComponentComponent
531        default: return super.getProperty(hash, name, checkValid);
532        }
533
534      }
535
536      @Override
537      public Base setProperty(int hash, String name, Base value) throws FHIRException {
538        switch (hash) {
539        case -1526770491: // applicability
540          this.getApplicability().add((ChargeItemDefinitionApplicabilityComponent) value); // ChargeItemDefinitionApplicabilityComponent
541          return value;
542        case 1219095988: // priceComponent
543          this.getPriceComponent().add((ChargeItemDefinitionPropertyGroupPriceComponentComponent) value); // ChargeItemDefinitionPropertyGroupPriceComponentComponent
544          return value;
545        default: return super.setProperty(hash, name, value);
546        }
547
548      }
549
550      @Override
551      public Base setProperty(String name, Base value) throws FHIRException {
552        if (name.equals("applicability")) {
553          this.getApplicability().add((ChargeItemDefinitionApplicabilityComponent) value);
554        } else if (name.equals("priceComponent")) {
555          this.getPriceComponent().add((ChargeItemDefinitionPropertyGroupPriceComponentComponent) value);
556        } else
557          return super.setProperty(name, value);
558        return value;
559      }
560
561      @Override
562      public Base makeProperty(int hash, String name) throws FHIRException {
563        switch (hash) {
564        case -1526770491:  return addApplicability(); 
565        case 1219095988:  return addPriceComponent(); 
566        default: return super.makeProperty(hash, name);
567        }
568
569      }
570
571      @Override
572      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
573        switch (hash) {
574        case -1526770491: /*applicability*/ return new String[] {"@ChargeItemDefinition.applicability"};
575        case 1219095988: /*priceComponent*/ return new String[] {};
576        default: return super.getTypesForProperty(hash, name);
577        }
578
579      }
580
581      @Override
582      public Base addChild(String name) throws FHIRException {
583        if (name.equals("applicability")) {
584          return addApplicability();
585        }
586        else if (name.equals("priceComponent")) {
587          return addPriceComponent();
588        }
589        else
590          return super.addChild(name);
591      }
592
593      public ChargeItemDefinitionPropertyGroupComponent copy() {
594        ChargeItemDefinitionPropertyGroupComponent dst = new ChargeItemDefinitionPropertyGroupComponent();
595        copyValues(dst);
596        return dst;
597      }
598
599      public void copyValues(ChargeItemDefinitionPropertyGroupComponent dst) {
600        super.copyValues(dst);
601        if (applicability != null) {
602          dst.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
603          for (ChargeItemDefinitionApplicabilityComponent i : applicability)
604            dst.applicability.add(i.copy());
605        };
606        if (priceComponent != null) {
607          dst.priceComponent = new ArrayList<ChargeItemDefinitionPropertyGroupPriceComponentComponent>();
608          for (ChargeItemDefinitionPropertyGroupPriceComponentComponent i : priceComponent)
609            dst.priceComponent.add(i.copy());
610        };
611      }
612
613      @Override
614      public boolean equalsDeep(Base other_) {
615        if (!super.equalsDeep(other_))
616          return false;
617        if (!(other_ instanceof ChargeItemDefinitionPropertyGroupComponent))
618          return false;
619        ChargeItemDefinitionPropertyGroupComponent o = (ChargeItemDefinitionPropertyGroupComponent) other_;
620        return compareDeep(applicability, o.applicability, true) && compareDeep(priceComponent, o.priceComponent, true)
621          ;
622      }
623
624      @Override
625      public boolean equalsShallow(Base other_) {
626        if (!super.equalsShallow(other_))
627          return false;
628        if (!(other_ instanceof ChargeItemDefinitionPropertyGroupComponent))
629          return false;
630        ChargeItemDefinitionPropertyGroupComponent o = (ChargeItemDefinitionPropertyGroupComponent) other_;
631        return true;
632      }
633
634      public boolean isEmpty() {
635        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(applicability, priceComponent
636          );
637      }
638
639  public String fhirType() {
640    return "ChargeItemDefinition.propertyGroup";
641
642  }
643
644  }
645
646    @Block()
647    public static class ChargeItemDefinitionPropertyGroupPriceComponentComponent extends BackboneElement implements IBaseBackboneElement {
648        /**
649         * This code identifies the type of the component.
650         */
651        @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
652        @Description(shortDefinition="base | surcharge | deduction | discount | tax | informational", formalDefinition="This code identifies the type of the component." )
653        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/invoice-priceComponentType")
654        protected Enumeration<InvoicePriceComponentType> type;
655
656        /**
657         * A code that identifies the component. Codes may be used to differentiate between kinds of taxes, surcharges, discounts etc.
658         */
659        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
660        @Description(shortDefinition="Code identifying the specific component", formalDefinition="A code that identifies the component. Codes may be used to differentiate between kinds of taxes, surcharges, discounts etc." )
661        protected CodeableConcept code;
662
663        /**
664         * The factor that has been applied on the base price for calculating this component.
665         */
666        @Child(name = "factor", type = {DecimalType.class}, order=3, min=0, max=1, modifier=false, summary=false)
667        @Description(shortDefinition="Factor used for calculating this component", formalDefinition="The factor that has been applied on the base price for calculating this component." )
668        protected DecimalType factor;
669
670        /**
671         * The amount calculated for this component.
672         */
673        @Child(name = "amount", type = {Money.class}, order=4, min=0, max=1, modifier=false, summary=false)
674        @Description(shortDefinition="Monetary amount associated with this component", formalDefinition="The amount calculated for this component." )
675        protected Money amount;
676
677        private static final long serialVersionUID = 1223988958L;
678
679    /**
680     * Constructor
681     */
682      public ChargeItemDefinitionPropertyGroupPriceComponentComponent() {
683        super();
684      }
685
686    /**
687     * Constructor
688     */
689      public ChargeItemDefinitionPropertyGroupPriceComponentComponent(InvoicePriceComponentType type) {
690        super();
691        this.setType(type);
692      }
693
694        /**
695         * @return {@link #type} (This code identifies the type of the component.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
696         */
697        public Enumeration<InvoicePriceComponentType> getTypeElement() { 
698          if (this.type == null)
699            if (Configuration.errorOnAutoCreate())
700              throw new Error("Attempt to auto-create ChargeItemDefinitionPropertyGroupPriceComponentComponent.type");
701            else if (Configuration.doAutoCreate())
702              this.type = new Enumeration<InvoicePriceComponentType>(new InvoicePriceComponentTypeEnumFactory()); // bb
703          return this.type;
704        }
705
706        public boolean hasTypeElement() { 
707          return this.type != null && !this.type.isEmpty();
708        }
709
710        public boolean hasType() { 
711          return this.type != null && !this.type.isEmpty();
712        }
713
714        /**
715         * @param value {@link #type} (This code identifies the type of the component.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
716         */
717        public ChargeItemDefinitionPropertyGroupPriceComponentComponent setTypeElement(Enumeration<InvoicePriceComponentType> value) { 
718          this.type = value;
719          return this;
720        }
721
722        /**
723         * @return This code identifies the type of the component.
724         */
725        public InvoicePriceComponentType getType() { 
726          return this.type == null ? null : this.type.getValue();
727        }
728
729        /**
730         * @param value This code identifies the type of the component.
731         */
732        public ChargeItemDefinitionPropertyGroupPriceComponentComponent setType(InvoicePriceComponentType value) { 
733            if (this.type == null)
734              this.type = new Enumeration<InvoicePriceComponentType>(new InvoicePriceComponentTypeEnumFactory());
735            this.type.setValue(value);
736          return this;
737        }
738
739        /**
740         * @return {@link #code} (A code that identifies the component. Codes may be used to differentiate between kinds of taxes, surcharges, discounts etc.)
741         */
742        public CodeableConcept getCode() { 
743          if (this.code == null)
744            if (Configuration.errorOnAutoCreate())
745              throw new Error("Attempt to auto-create ChargeItemDefinitionPropertyGroupPriceComponentComponent.code");
746            else if (Configuration.doAutoCreate())
747              this.code = new CodeableConcept(); // cc
748          return this.code;
749        }
750
751        public boolean hasCode() { 
752          return this.code != null && !this.code.isEmpty();
753        }
754
755        /**
756         * @param value {@link #code} (A code that identifies the component. Codes may be used to differentiate between kinds of taxes, surcharges, discounts etc.)
757         */
758        public ChargeItemDefinitionPropertyGroupPriceComponentComponent setCode(CodeableConcept value) { 
759          this.code = value;
760          return this;
761        }
762
763        /**
764         * @return {@link #factor} (The factor that has been applied on the base price for calculating this component.). This is the underlying object with id, value and extensions. The accessor "getFactor" gives direct access to the value
765         */
766        public DecimalType getFactorElement() { 
767          if (this.factor == null)
768            if (Configuration.errorOnAutoCreate())
769              throw new Error("Attempt to auto-create ChargeItemDefinitionPropertyGroupPriceComponentComponent.factor");
770            else if (Configuration.doAutoCreate())
771              this.factor = new DecimalType(); // bb
772          return this.factor;
773        }
774
775        public boolean hasFactorElement() { 
776          return this.factor != null && !this.factor.isEmpty();
777        }
778
779        public boolean hasFactor() { 
780          return this.factor != null && !this.factor.isEmpty();
781        }
782
783        /**
784         * @param value {@link #factor} (The factor that has been applied on the base price for calculating this component.). This is the underlying object with id, value and extensions. The accessor "getFactor" gives direct access to the value
785         */
786        public ChargeItemDefinitionPropertyGroupPriceComponentComponent setFactorElement(DecimalType value) { 
787          this.factor = value;
788          return this;
789        }
790
791        /**
792         * @return The factor that has been applied on the base price for calculating this component.
793         */
794        public BigDecimal getFactor() { 
795          return this.factor == null ? null : this.factor.getValue();
796        }
797
798        /**
799         * @param value The factor that has been applied on the base price for calculating this component.
800         */
801        public ChargeItemDefinitionPropertyGroupPriceComponentComponent setFactor(BigDecimal value) { 
802          if (value == null)
803            this.factor = null;
804          else {
805            if (this.factor == null)
806              this.factor = new DecimalType();
807            this.factor.setValue(value);
808          }
809          return this;
810        }
811
812        /**
813         * @param value The factor that has been applied on the base price for calculating this component.
814         */
815        public ChargeItemDefinitionPropertyGroupPriceComponentComponent setFactor(long value) { 
816              this.factor = new DecimalType();
817            this.factor.setValue(value);
818          return this;
819        }
820
821        /**
822         * @param value The factor that has been applied on the base price for calculating this component.
823         */
824        public ChargeItemDefinitionPropertyGroupPriceComponentComponent setFactor(double value) { 
825              this.factor = new DecimalType();
826            this.factor.setValue(value);
827          return this;
828        }
829
830        /**
831         * @return {@link #amount} (The amount calculated for this component.)
832         */
833        public Money getAmount() { 
834          if (this.amount == null)
835            if (Configuration.errorOnAutoCreate())
836              throw new Error("Attempt to auto-create ChargeItemDefinitionPropertyGroupPriceComponentComponent.amount");
837            else if (Configuration.doAutoCreate())
838              this.amount = new Money(); // cc
839          return this.amount;
840        }
841
842        public boolean hasAmount() { 
843          return this.amount != null && !this.amount.isEmpty();
844        }
845
846        /**
847         * @param value {@link #amount} (The amount calculated for this component.)
848         */
849        public ChargeItemDefinitionPropertyGroupPriceComponentComponent setAmount(Money value) { 
850          this.amount = value;
851          return this;
852        }
853
854        protected void listChildren(List<Property> children) {
855          super.listChildren(children);
856          children.add(new Property("type", "code", "This code identifies the type of the component.", 0, 1, type));
857          children.add(new Property("code", "CodeableConcept", "A code that identifies the component. Codes may be used to differentiate between kinds of taxes, surcharges, discounts etc.", 0, 1, code));
858          children.add(new Property("factor", "decimal", "The factor that has been applied on the base price for calculating this component.", 0, 1, factor));
859          children.add(new Property("amount", "Money", "The amount calculated for this component.", 0, 1, amount));
860        }
861
862        @Override
863        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
864          switch (_hash) {
865          case 3575610: /*type*/  return new Property("type", "code", "This code identifies the type of the component.", 0, 1, type);
866          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A code that identifies the component. Codes may be used to differentiate between kinds of taxes, surcharges, discounts etc.", 0, 1, code);
867          case -1282148017: /*factor*/  return new Property("factor", "decimal", "The factor that has been applied on the base price for calculating this component.", 0, 1, factor);
868          case -1413853096: /*amount*/  return new Property("amount", "Money", "The amount calculated for this component.", 0, 1, amount);
869          default: return super.getNamedProperty(_hash, _name, _checkValid);
870          }
871
872        }
873
874      @Override
875      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
876        switch (hash) {
877        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<InvoicePriceComponentType>
878        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
879        case -1282148017: /*factor*/ return this.factor == null ? new Base[0] : new Base[] {this.factor}; // DecimalType
880        case -1413853096: /*amount*/ return this.amount == null ? new Base[0] : new Base[] {this.amount}; // Money
881        default: return super.getProperty(hash, name, checkValid);
882        }
883
884      }
885
886      @Override
887      public Base setProperty(int hash, String name, Base value) throws FHIRException {
888        switch (hash) {
889        case 3575610: // type
890          value = new InvoicePriceComponentTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
891          this.type = (Enumeration) value; // Enumeration<InvoicePriceComponentType>
892          return value;
893        case 3059181: // code
894          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
895          return value;
896        case -1282148017: // factor
897          this.factor = TypeConvertor.castToDecimal(value); // DecimalType
898          return value;
899        case -1413853096: // amount
900          this.amount = TypeConvertor.castToMoney(value); // Money
901          return value;
902        default: return super.setProperty(hash, name, value);
903        }
904
905      }
906
907      @Override
908      public Base setProperty(String name, Base value) throws FHIRException {
909        if (name.equals("type")) {
910          value = new InvoicePriceComponentTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
911          this.type = (Enumeration) value; // Enumeration<InvoicePriceComponentType>
912        } else if (name.equals("code")) {
913          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
914        } else if (name.equals("factor")) {
915          this.factor = TypeConvertor.castToDecimal(value); // DecimalType
916        } else if (name.equals("amount")) {
917          this.amount = TypeConvertor.castToMoney(value); // Money
918        } else
919          return super.setProperty(name, value);
920        return value;
921      }
922
923      @Override
924      public Base makeProperty(int hash, String name) throws FHIRException {
925        switch (hash) {
926        case 3575610:  return getTypeElement();
927        case 3059181:  return getCode();
928        case -1282148017:  return getFactorElement();
929        case -1413853096:  return getAmount();
930        default: return super.makeProperty(hash, name);
931        }
932
933      }
934
935      @Override
936      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
937        switch (hash) {
938        case 3575610: /*type*/ return new String[] {"code"};
939        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
940        case -1282148017: /*factor*/ return new String[] {"decimal"};
941        case -1413853096: /*amount*/ return new String[] {"Money"};
942        default: return super.getTypesForProperty(hash, name);
943        }
944
945      }
946
947      @Override
948      public Base addChild(String name) throws FHIRException {
949        if (name.equals("type")) {
950          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.propertyGroup.priceComponent.type");
951        }
952        else if (name.equals("code")) {
953          this.code = new CodeableConcept();
954          return this.code;
955        }
956        else if (name.equals("factor")) {
957          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.propertyGroup.priceComponent.factor");
958        }
959        else if (name.equals("amount")) {
960          this.amount = new Money();
961          return this.amount;
962        }
963        else
964          return super.addChild(name);
965      }
966
967      public ChargeItemDefinitionPropertyGroupPriceComponentComponent copy() {
968        ChargeItemDefinitionPropertyGroupPriceComponentComponent dst = new ChargeItemDefinitionPropertyGroupPriceComponentComponent();
969        copyValues(dst);
970        return dst;
971      }
972
973      public void copyValues(ChargeItemDefinitionPropertyGroupPriceComponentComponent dst) {
974        super.copyValues(dst);
975        dst.type = type == null ? null : type.copy();
976        dst.code = code == null ? null : code.copy();
977        dst.factor = factor == null ? null : factor.copy();
978        dst.amount = amount == null ? null : amount.copy();
979      }
980
981      @Override
982      public boolean equalsDeep(Base other_) {
983        if (!super.equalsDeep(other_))
984          return false;
985        if (!(other_ instanceof ChargeItemDefinitionPropertyGroupPriceComponentComponent))
986          return false;
987        ChargeItemDefinitionPropertyGroupPriceComponentComponent o = (ChargeItemDefinitionPropertyGroupPriceComponentComponent) other_;
988        return compareDeep(type, o.type, true) && compareDeep(code, o.code, true) && compareDeep(factor, o.factor, true)
989           && compareDeep(amount, o.amount, true);
990      }
991
992      @Override
993      public boolean equalsShallow(Base other_) {
994        if (!super.equalsShallow(other_))
995          return false;
996        if (!(other_ instanceof ChargeItemDefinitionPropertyGroupPriceComponentComponent))
997          return false;
998        ChargeItemDefinitionPropertyGroupPriceComponentComponent o = (ChargeItemDefinitionPropertyGroupPriceComponentComponent) other_;
999        return compareValues(type, o.type, true) && compareValues(factor, o.factor, true);
1000      }
1001
1002      public boolean isEmpty() {
1003        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, code, factor, amount
1004          );
1005      }
1006
1007  public String fhirType() {
1008    return "ChargeItemDefinition.propertyGroup.priceComponent";
1009
1010  }
1011
1012  }
1013
1014    /**
1015     * An absolute URI that is used to identify this charge item definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this charge item definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the charge item definition is stored on different servers.
1016     */
1017    @Child(name = "url", type = {UriType.class}, order=0, min=1, max=1, modifier=false, summary=true)
1018    @Description(shortDefinition="Canonical identifier for this charge item definition, represented as a URI (globally unique)", formalDefinition="An absolute URI that is used to identify this charge item definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this charge item definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the charge item definition is stored on different servers." )
1019    protected UriType url;
1020
1021    /**
1022     * A formal identifier that is used to identify this charge item definition when it is represented in other formats, or referenced in a specification, model, design or an instance.
1023     */
1024    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1025    @Description(shortDefinition="Additional identifier for the charge item definition", formalDefinition="A formal identifier that is used to identify this charge item definition when it is represented in other formats, or referenced in a specification, model, design or an instance." )
1026    protected List<Identifier> identifier;
1027
1028    /**
1029     * The identifier that is used to identify this version of the charge item definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the charge item definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets.
1030     */
1031    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1032    @Description(shortDefinition="Business version of the charge item definition", formalDefinition="The identifier that is used to identify this version of the charge item definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the charge item definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets." )
1033    protected StringType version;
1034
1035    /**
1036     * A short, descriptive, user-friendly title for the charge item definition.
1037     */
1038    @Child(name = "title", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1039    @Description(shortDefinition="Name for this charge item definition (human friendly)", formalDefinition="A short, descriptive, user-friendly title for the charge item definition." )
1040    protected StringType title;
1041
1042    /**
1043     * The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.
1044     */
1045    @Child(name = "derivedFromUri", type = {UriType.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1046    @Description(shortDefinition="Underlying externally-defined charge item definition", formalDefinition="The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition." )
1047    protected List<UriType> derivedFromUri;
1048
1049    /**
1050     * A larger definition of which this particular definition is a component or step.
1051     */
1052    @Child(name = "partOf", type = {CanonicalType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1053    @Description(shortDefinition="A larger definition of which this particular definition is a component or step", formalDefinition="A larger definition of which this particular definition is a component or step." )
1054    protected List<CanonicalType> partOf;
1055
1056    /**
1057     * As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.
1058     */
1059    @Child(name = "replaces", type = {CanonicalType.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1060    @Description(shortDefinition="Completed or terminated request(s) whose function is taken by this new request", formalDefinition="As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance." )
1061    protected List<CanonicalType> replaces;
1062
1063    /**
1064     * The current state of the ChargeItemDefinition.
1065     */
1066    @Child(name = "status", type = {CodeType.class}, order=7, min=1, max=1, modifier=true, summary=true)
1067    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The current state of the ChargeItemDefinition." )
1068    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
1069    protected Enumeration<PublicationStatus> status;
1070
1071    /**
1072     * A Boolean value to indicate that this charge item definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
1073     */
1074    @Child(name = "experimental", type = {BooleanType.class}, order=8, min=0, max=1, modifier=false, summary=true)
1075    @Description(shortDefinition="For testing purposes, not real usage", formalDefinition="A Boolean value to indicate that this charge item definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage." )
1076    protected BooleanType experimental;
1077
1078    /**
1079     * The date  (and optionally time) when the charge item definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the charge item definition changes.
1080     */
1081    @Child(name = "date", type = {DateTimeType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1082    @Description(shortDefinition="Date last changed", formalDefinition="The date  (and optionally time) when the charge item definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the charge item definition changes." )
1083    protected DateTimeType date;
1084
1085    /**
1086     * The name of the organization or individual that published the charge item definition.
1087     */
1088    @Child(name = "publisher", type = {StringType.class}, order=10, min=0, max=1, modifier=false, summary=true)
1089    @Description(shortDefinition="Name of the publisher (organization or individual)", formalDefinition="The name of the organization or individual that published the charge item definition." )
1090    protected StringType publisher;
1091
1092    /**
1093     * Contact details to assist a user in finding and communicating with the publisher.
1094     */
1095    @Child(name = "contact", type = {ContactDetail.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1096    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
1097    protected List<ContactDetail> contact;
1098
1099    /**
1100     * A free text natural language description of the charge item definition from a consumer's perspective.
1101     */
1102    @Child(name = "description", type = {MarkdownType.class}, order=12, min=0, max=1, modifier=false, summary=true)
1103    @Description(shortDefinition="Natural language description of the charge item definition", formalDefinition="A free text natural language description of the charge item definition from a consumer's perspective." )
1104    protected MarkdownType description;
1105
1106    /**
1107     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate charge item definition instances.
1108     */
1109    @Child(name = "useContext", type = {UsageContext.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1110    @Description(shortDefinition="The context that the content is intended to support", formalDefinition="The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate charge item definition instances." )
1111    protected List<UsageContext> useContext;
1112
1113    /**
1114     * A legal or geographic region in which the charge item definition is intended to be used.
1115     */
1116    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1117    @Description(shortDefinition="Intended jurisdiction for charge item definition (if applicable)", formalDefinition="A legal or geographic region in which the charge item definition is intended to be used." )
1118    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
1119    protected List<CodeableConcept> jurisdiction;
1120
1121    /**
1122     * A copyright statement relating to the charge item definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the charge item definition.
1123     */
1124    @Child(name = "copyright", type = {MarkdownType.class}, order=15, min=0, max=1, modifier=false, summary=false)
1125    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="A copyright statement relating to the charge item definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the charge item definition." )
1126    protected MarkdownType copyright;
1127
1128    /**
1129     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
1130     */
1131    @Child(name = "approvalDate", type = {DateType.class}, order=16, min=0, max=1, modifier=false, summary=false)
1132    @Description(shortDefinition="When the charge item definition was approved by publisher", formalDefinition="The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage." )
1133    protected DateType approvalDate;
1134
1135    /**
1136     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
1137     */
1138    @Child(name = "lastReviewDate", type = {DateType.class}, order=17, min=0, max=1, modifier=false, summary=false)
1139    @Description(shortDefinition="When the charge item definition was last reviewed", formalDefinition="The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date." )
1140    protected DateType lastReviewDate;
1141
1142    /**
1143     * The period during which the charge item definition content was or is planned to be in active use.
1144     */
1145    @Child(name = "effectivePeriod", type = {Period.class}, order=18, min=0, max=1, modifier=false, summary=true)
1146    @Description(shortDefinition="When the charge item definition is expected to be used", formalDefinition="The period during which the charge item definition content was or is planned to be in active use." )
1147    protected Period effectivePeriod;
1148
1149    /**
1150     * The defined billing details in this resource pertain to the given billing code.
1151     */
1152    @Child(name = "code", type = {CodeableConcept.class}, order=19, min=0, max=1, modifier=false, summary=true)
1153    @Description(shortDefinition="Billing code or product type this definition applies to", formalDefinition="The defined billing details in this resource pertain to the given billing code." )
1154    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/chargeitem-billingcodes")
1155    protected CodeableConcept code;
1156
1157    /**
1158     * The defined billing details in this resource pertain to the given product instance(s).
1159     */
1160    @Child(name = "instance", type = {Medication.class, Substance.class, Device.class, DeviceDefinition.class, ActivityDefinition.class, PlanDefinition.class, HealthcareService.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1161    @Description(shortDefinition="Instances this definition applies to", formalDefinition="The defined billing details in this resource pertain to the given product instance(s)." )
1162    protected List<Reference> instance;
1163
1164    /**
1165     * Expressions that describe applicability criteria for the billing code.
1166     */
1167    @Child(name = "applicability", type = {}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1168    @Description(shortDefinition="Whether or not the billing code is applicable", formalDefinition="Expressions that describe applicability criteria for the billing code." )
1169    protected List<ChargeItemDefinitionApplicabilityComponent> applicability;
1170
1171    /**
1172     * Group of properties which are applicable under the same conditions. If no applicability rules are established for the group, then all properties always apply.
1173     */
1174    @Child(name = "propertyGroup", type = {}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1175    @Description(shortDefinition="Group of properties which are applicable under the same conditions", formalDefinition="Group of properties which are applicable under the same conditions. If no applicability rules are established for the group, then all properties always apply." )
1176    protected List<ChargeItemDefinitionPropertyGroupComponent> propertyGroup;
1177
1178    private static final long serialVersionUID = -789505112L;
1179
1180  /**
1181   * Constructor
1182   */
1183    public ChargeItemDefinition() {
1184      super();
1185    }
1186
1187  /**
1188   * Constructor
1189   */
1190    public ChargeItemDefinition(String url, PublicationStatus status) {
1191      super();
1192      this.setUrl(url);
1193      this.setStatus(status);
1194    }
1195
1196    /**
1197     * @return {@link #url} (An absolute URI that is used to identify this charge item definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this charge item definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the charge item definition is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1198     */
1199    public UriType getUrlElement() { 
1200      if (this.url == null)
1201        if (Configuration.errorOnAutoCreate())
1202          throw new Error("Attempt to auto-create ChargeItemDefinition.url");
1203        else if (Configuration.doAutoCreate())
1204          this.url = new UriType(); // bb
1205      return this.url;
1206    }
1207
1208    public boolean hasUrlElement() { 
1209      return this.url != null && !this.url.isEmpty();
1210    }
1211
1212    public boolean hasUrl() { 
1213      return this.url != null && !this.url.isEmpty();
1214    }
1215
1216    /**
1217     * @param value {@link #url} (An absolute URI that is used to identify this charge item definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this charge item definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the charge item definition is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1218     */
1219    public ChargeItemDefinition setUrlElement(UriType value) { 
1220      this.url = value;
1221      return this;
1222    }
1223
1224    /**
1225     * @return An absolute URI that is used to identify this charge item definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this charge item definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the charge item definition is stored on different servers.
1226     */
1227    public String getUrl() { 
1228      return this.url == null ? null : this.url.getValue();
1229    }
1230
1231    /**
1232     * @param value An absolute URI that is used to identify this charge item definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this charge item definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the charge item definition is stored on different servers.
1233     */
1234    public ChargeItemDefinition setUrl(String value) { 
1235        if (this.url == null)
1236          this.url = new UriType();
1237        this.url.setValue(value);
1238      return this;
1239    }
1240
1241    /**
1242     * @return {@link #identifier} (A formal identifier that is used to identify this charge item definition when it is represented in other formats, or referenced in a specification, model, design or an instance.)
1243     */
1244    public List<Identifier> getIdentifier() { 
1245      if (this.identifier == null)
1246        this.identifier = new ArrayList<Identifier>();
1247      return this.identifier;
1248    }
1249
1250    /**
1251     * @return Returns a reference to <code>this</code> for easy method chaining
1252     */
1253    public ChargeItemDefinition setIdentifier(List<Identifier> theIdentifier) { 
1254      this.identifier = theIdentifier;
1255      return this;
1256    }
1257
1258    public boolean hasIdentifier() { 
1259      if (this.identifier == null)
1260        return false;
1261      for (Identifier item : this.identifier)
1262        if (!item.isEmpty())
1263          return true;
1264      return false;
1265    }
1266
1267    public Identifier addIdentifier() { //3
1268      Identifier t = new Identifier();
1269      if (this.identifier == null)
1270        this.identifier = new ArrayList<Identifier>();
1271      this.identifier.add(t);
1272      return t;
1273    }
1274
1275    public ChargeItemDefinition addIdentifier(Identifier t) { //3
1276      if (t == null)
1277        return this;
1278      if (this.identifier == null)
1279        this.identifier = new ArrayList<Identifier>();
1280      this.identifier.add(t);
1281      return this;
1282    }
1283
1284    /**
1285     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1286     */
1287    public Identifier getIdentifierFirstRep() { 
1288      if (getIdentifier().isEmpty()) {
1289        addIdentifier();
1290      }
1291      return getIdentifier().get(0);
1292    }
1293
1294    /**
1295     * @return {@link #version} (The identifier that is used to identify this version of the charge item definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the charge item definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
1296     */
1297    public StringType getVersionElement() { 
1298      if (this.version == null)
1299        if (Configuration.errorOnAutoCreate())
1300          throw new Error("Attempt to auto-create ChargeItemDefinition.version");
1301        else if (Configuration.doAutoCreate())
1302          this.version = new StringType(); // bb
1303      return this.version;
1304    }
1305
1306    public boolean hasVersionElement() { 
1307      return this.version != null && !this.version.isEmpty();
1308    }
1309
1310    public boolean hasVersion() { 
1311      return this.version != null && !this.version.isEmpty();
1312    }
1313
1314    /**
1315     * @param value {@link #version} (The identifier that is used to identify this version of the charge item definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the charge item definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
1316     */
1317    public ChargeItemDefinition setVersionElement(StringType value) { 
1318      this.version = value;
1319      return this;
1320    }
1321
1322    /**
1323     * @return The identifier that is used to identify this version of the charge item definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the charge item definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets.
1324     */
1325    public String getVersion() { 
1326      return this.version == null ? null : this.version.getValue();
1327    }
1328
1329    /**
1330     * @param value The identifier that is used to identify this version of the charge item definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the charge item definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets.
1331     */
1332    public ChargeItemDefinition setVersion(String value) { 
1333      if (Utilities.noString(value))
1334        this.version = null;
1335      else {
1336        if (this.version == null)
1337          this.version = new StringType();
1338        this.version.setValue(value);
1339      }
1340      return this;
1341    }
1342
1343    /**
1344     * @return {@link #title} (A short, descriptive, user-friendly title for the charge item definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1345     */
1346    public StringType getTitleElement() { 
1347      if (this.title == null)
1348        if (Configuration.errorOnAutoCreate())
1349          throw new Error("Attempt to auto-create ChargeItemDefinition.title");
1350        else if (Configuration.doAutoCreate())
1351          this.title = new StringType(); // bb
1352      return this.title;
1353    }
1354
1355    public boolean hasTitleElement() { 
1356      return this.title != null && !this.title.isEmpty();
1357    }
1358
1359    public boolean hasTitle() { 
1360      return this.title != null && !this.title.isEmpty();
1361    }
1362
1363    /**
1364     * @param value {@link #title} (A short, descriptive, user-friendly title for the charge item definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1365     */
1366    public ChargeItemDefinition setTitleElement(StringType value) { 
1367      this.title = value;
1368      return this;
1369    }
1370
1371    /**
1372     * @return A short, descriptive, user-friendly title for the charge item definition.
1373     */
1374    public String getTitle() { 
1375      return this.title == null ? null : this.title.getValue();
1376    }
1377
1378    /**
1379     * @param value A short, descriptive, user-friendly title for the charge item definition.
1380     */
1381    public ChargeItemDefinition setTitle(String value) { 
1382      if (Utilities.noString(value))
1383        this.title = null;
1384      else {
1385        if (this.title == null)
1386          this.title = new StringType();
1387        this.title.setValue(value);
1388      }
1389      return this;
1390    }
1391
1392    /**
1393     * @return {@link #derivedFromUri} (The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.)
1394     */
1395    public List<UriType> getDerivedFromUri() { 
1396      if (this.derivedFromUri == null)
1397        this.derivedFromUri = new ArrayList<UriType>();
1398      return this.derivedFromUri;
1399    }
1400
1401    /**
1402     * @return Returns a reference to <code>this</code> for easy method chaining
1403     */
1404    public ChargeItemDefinition setDerivedFromUri(List<UriType> theDerivedFromUri) { 
1405      this.derivedFromUri = theDerivedFromUri;
1406      return this;
1407    }
1408
1409    public boolean hasDerivedFromUri() { 
1410      if (this.derivedFromUri == null)
1411        return false;
1412      for (UriType item : this.derivedFromUri)
1413        if (!item.isEmpty())
1414          return true;
1415      return false;
1416    }
1417
1418    /**
1419     * @return {@link #derivedFromUri} (The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.)
1420     */
1421    public UriType addDerivedFromUriElement() {//2 
1422      UriType t = new UriType();
1423      if (this.derivedFromUri == null)
1424        this.derivedFromUri = new ArrayList<UriType>();
1425      this.derivedFromUri.add(t);
1426      return t;
1427    }
1428
1429    /**
1430     * @param value {@link #derivedFromUri} (The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.)
1431     */
1432    public ChargeItemDefinition addDerivedFromUri(String value) { //1
1433      UriType t = new UriType();
1434      t.setValue(value);
1435      if (this.derivedFromUri == null)
1436        this.derivedFromUri = new ArrayList<UriType>();
1437      this.derivedFromUri.add(t);
1438      return this;
1439    }
1440
1441    /**
1442     * @param value {@link #derivedFromUri} (The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.)
1443     */
1444    public boolean hasDerivedFromUri(String value) { 
1445      if (this.derivedFromUri == null)
1446        return false;
1447      for (UriType v : this.derivedFromUri)
1448        if (v.getValue().equals(value)) // uri
1449          return true;
1450      return false;
1451    }
1452
1453    /**
1454     * @return {@link #partOf} (A larger definition of which this particular definition is a component or step.)
1455     */
1456    public List<CanonicalType> getPartOf() { 
1457      if (this.partOf == null)
1458        this.partOf = new ArrayList<CanonicalType>();
1459      return this.partOf;
1460    }
1461
1462    /**
1463     * @return Returns a reference to <code>this</code> for easy method chaining
1464     */
1465    public ChargeItemDefinition setPartOf(List<CanonicalType> thePartOf) { 
1466      this.partOf = thePartOf;
1467      return this;
1468    }
1469
1470    public boolean hasPartOf() { 
1471      if (this.partOf == null)
1472        return false;
1473      for (CanonicalType item : this.partOf)
1474        if (!item.isEmpty())
1475          return true;
1476      return false;
1477    }
1478
1479    /**
1480     * @return {@link #partOf} (A larger definition of which this particular definition is a component or step.)
1481     */
1482    public CanonicalType addPartOfElement() {//2 
1483      CanonicalType t = new CanonicalType();
1484      if (this.partOf == null)
1485        this.partOf = new ArrayList<CanonicalType>();
1486      this.partOf.add(t);
1487      return t;
1488    }
1489
1490    /**
1491     * @param value {@link #partOf} (A larger definition of which this particular definition is a component or step.)
1492     */
1493    public ChargeItemDefinition addPartOf(String value) { //1
1494      CanonicalType t = new CanonicalType();
1495      t.setValue(value);
1496      if (this.partOf == null)
1497        this.partOf = new ArrayList<CanonicalType>();
1498      this.partOf.add(t);
1499      return this;
1500    }
1501
1502    /**
1503     * @param value {@link #partOf} (A larger definition of which this particular definition is a component or step.)
1504     */
1505    public boolean hasPartOf(String value) { 
1506      if (this.partOf == null)
1507        return false;
1508      for (CanonicalType v : this.partOf)
1509        if (v.getValue().equals(value)) // canonical
1510          return true;
1511      return false;
1512    }
1513
1514    /**
1515     * @return {@link #replaces} (As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.)
1516     */
1517    public List<CanonicalType> getReplaces() { 
1518      if (this.replaces == null)
1519        this.replaces = new ArrayList<CanonicalType>();
1520      return this.replaces;
1521    }
1522
1523    /**
1524     * @return Returns a reference to <code>this</code> for easy method chaining
1525     */
1526    public ChargeItemDefinition setReplaces(List<CanonicalType> theReplaces) { 
1527      this.replaces = theReplaces;
1528      return this;
1529    }
1530
1531    public boolean hasReplaces() { 
1532      if (this.replaces == null)
1533        return false;
1534      for (CanonicalType item : this.replaces)
1535        if (!item.isEmpty())
1536          return true;
1537      return false;
1538    }
1539
1540    /**
1541     * @return {@link #replaces} (As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.)
1542     */
1543    public CanonicalType addReplacesElement() {//2 
1544      CanonicalType t = new CanonicalType();
1545      if (this.replaces == null)
1546        this.replaces = new ArrayList<CanonicalType>();
1547      this.replaces.add(t);
1548      return t;
1549    }
1550
1551    /**
1552     * @param value {@link #replaces} (As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.)
1553     */
1554    public ChargeItemDefinition addReplaces(String value) { //1
1555      CanonicalType t = new CanonicalType();
1556      t.setValue(value);
1557      if (this.replaces == null)
1558        this.replaces = new ArrayList<CanonicalType>();
1559      this.replaces.add(t);
1560      return this;
1561    }
1562
1563    /**
1564     * @param value {@link #replaces} (As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.)
1565     */
1566    public boolean hasReplaces(String value) { 
1567      if (this.replaces == null)
1568        return false;
1569      for (CanonicalType v : this.replaces)
1570        if (v.getValue().equals(value)) // canonical
1571          return true;
1572      return false;
1573    }
1574
1575    /**
1576     * @return {@link #status} (The current state of the ChargeItemDefinition.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1577     */
1578    public Enumeration<PublicationStatus> getStatusElement() { 
1579      if (this.status == null)
1580        if (Configuration.errorOnAutoCreate())
1581          throw new Error("Attempt to auto-create ChargeItemDefinition.status");
1582        else if (Configuration.doAutoCreate())
1583          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
1584      return this.status;
1585    }
1586
1587    public boolean hasStatusElement() { 
1588      return this.status != null && !this.status.isEmpty();
1589    }
1590
1591    public boolean hasStatus() { 
1592      return this.status != null && !this.status.isEmpty();
1593    }
1594
1595    /**
1596     * @param value {@link #status} (The current state of the ChargeItemDefinition.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1597     */
1598    public ChargeItemDefinition setStatusElement(Enumeration<PublicationStatus> value) { 
1599      this.status = value;
1600      return this;
1601    }
1602
1603    /**
1604     * @return The current state of the ChargeItemDefinition.
1605     */
1606    public PublicationStatus getStatus() { 
1607      return this.status == null ? null : this.status.getValue();
1608    }
1609
1610    /**
1611     * @param value The current state of the ChargeItemDefinition.
1612     */
1613    public ChargeItemDefinition setStatus(PublicationStatus value) { 
1614        if (this.status == null)
1615          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
1616        this.status.setValue(value);
1617      return this;
1618    }
1619
1620    /**
1621     * @return {@link #experimental} (A Boolean value to indicate that this charge item definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
1622     */
1623    public BooleanType getExperimentalElement() { 
1624      if (this.experimental == null)
1625        if (Configuration.errorOnAutoCreate())
1626          throw new Error("Attempt to auto-create ChargeItemDefinition.experimental");
1627        else if (Configuration.doAutoCreate())
1628          this.experimental = new BooleanType(); // bb
1629      return this.experimental;
1630    }
1631
1632    public boolean hasExperimentalElement() { 
1633      return this.experimental != null && !this.experimental.isEmpty();
1634    }
1635
1636    public boolean hasExperimental() { 
1637      return this.experimental != null && !this.experimental.isEmpty();
1638    }
1639
1640    /**
1641     * @param value {@link #experimental} (A Boolean value to indicate that this charge item definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
1642     */
1643    public ChargeItemDefinition setExperimentalElement(BooleanType value) { 
1644      this.experimental = value;
1645      return this;
1646    }
1647
1648    /**
1649     * @return A Boolean value to indicate that this charge item definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
1650     */
1651    public boolean getExperimental() { 
1652      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
1653    }
1654
1655    /**
1656     * @param value A Boolean value to indicate that this charge item definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
1657     */
1658    public ChargeItemDefinition setExperimental(boolean value) { 
1659        if (this.experimental == null)
1660          this.experimental = new BooleanType();
1661        this.experimental.setValue(value);
1662      return this;
1663    }
1664
1665    /**
1666     * @return {@link #date} (The date  (and optionally time) when the charge item definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the charge item definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1667     */
1668    public DateTimeType getDateElement() { 
1669      if (this.date == null)
1670        if (Configuration.errorOnAutoCreate())
1671          throw new Error("Attempt to auto-create ChargeItemDefinition.date");
1672        else if (Configuration.doAutoCreate())
1673          this.date = new DateTimeType(); // bb
1674      return this.date;
1675    }
1676
1677    public boolean hasDateElement() { 
1678      return this.date != null && !this.date.isEmpty();
1679    }
1680
1681    public boolean hasDate() { 
1682      return this.date != null && !this.date.isEmpty();
1683    }
1684
1685    /**
1686     * @param value {@link #date} (The date  (and optionally time) when the charge item definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the charge item definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1687     */
1688    public ChargeItemDefinition setDateElement(DateTimeType value) { 
1689      this.date = value;
1690      return this;
1691    }
1692
1693    /**
1694     * @return The date  (and optionally time) when the charge item definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the charge item definition changes.
1695     */
1696    public Date getDate() { 
1697      return this.date == null ? null : this.date.getValue();
1698    }
1699
1700    /**
1701     * @param value The date  (and optionally time) when the charge item definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the charge item definition changes.
1702     */
1703    public ChargeItemDefinition setDate(Date value) { 
1704      if (value == null)
1705        this.date = null;
1706      else {
1707        if (this.date == null)
1708          this.date = new DateTimeType();
1709        this.date.setValue(value);
1710      }
1711      return this;
1712    }
1713
1714    /**
1715     * @return {@link #publisher} (The name of the organization or individual that published the charge item definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
1716     */
1717    public StringType getPublisherElement() { 
1718      if (this.publisher == null)
1719        if (Configuration.errorOnAutoCreate())
1720          throw new Error("Attempt to auto-create ChargeItemDefinition.publisher");
1721        else if (Configuration.doAutoCreate())
1722          this.publisher = new StringType(); // bb
1723      return this.publisher;
1724    }
1725
1726    public boolean hasPublisherElement() { 
1727      return this.publisher != null && !this.publisher.isEmpty();
1728    }
1729
1730    public boolean hasPublisher() { 
1731      return this.publisher != null && !this.publisher.isEmpty();
1732    }
1733
1734    /**
1735     * @param value {@link #publisher} (The name of the organization or individual that published the charge item definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
1736     */
1737    public ChargeItemDefinition setPublisherElement(StringType value) { 
1738      this.publisher = value;
1739      return this;
1740    }
1741
1742    /**
1743     * @return The name of the organization or individual that published the charge item definition.
1744     */
1745    public String getPublisher() { 
1746      return this.publisher == null ? null : this.publisher.getValue();
1747    }
1748
1749    /**
1750     * @param value The name of the organization or individual that published the charge item definition.
1751     */
1752    public ChargeItemDefinition setPublisher(String value) { 
1753      if (Utilities.noString(value))
1754        this.publisher = null;
1755      else {
1756        if (this.publisher == null)
1757          this.publisher = new StringType();
1758        this.publisher.setValue(value);
1759      }
1760      return this;
1761    }
1762
1763    /**
1764     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
1765     */
1766    public List<ContactDetail> getContact() { 
1767      if (this.contact == null)
1768        this.contact = new ArrayList<ContactDetail>();
1769      return this.contact;
1770    }
1771
1772    /**
1773     * @return Returns a reference to <code>this</code> for easy method chaining
1774     */
1775    public ChargeItemDefinition setContact(List<ContactDetail> theContact) { 
1776      this.contact = theContact;
1777      return this;
1778    }
1779
1780    public boolean hasContact() { 
1781      if (this.contact == null)
1782        return false;
1783      for (ContactDetail item : this.contact)
1784        if (!item.isEmpty())
1785          return true;
1786      return false;
1787    }
1788
1789    public ContactDetail addContact() { //3
1790      ContactDetail t = new ContactDetail();
1791      if (this.contact == null)
1792        this.contact = new ArrayList<ContactDetail>();
1793      this.contact.add(t);
1794      return t;
1795    }
1796
1797    public ChargeItemDefinition addContact(ContactDetail t) { //3
1798      if (t == null)
1799        return this;
1800      if (this.contact == null)
1801        this.contact = new ArrayList<ContactDetail>();
1802      this.contact.add(t);
1803      return this;
1804    }
1805
1806    /**
1807     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
1808     */
1809    public ContactDetail getContactFirstRep() { 
1810      if (getContact().isEmpty()) {
1811        addContact();
1812      }
1813      return getContact().get(0);
1814    }
1815
1816    /**
1817     * @return {@link #description} (A free text natural language description of the charge item definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1818     */
1819    public MarkdownType getDescriptionElement() { 
1820      if (this.description == null)
1821        if (Configuration.errorOnAutoCreate())
1822          throw new Error("Attempt to auto-create ChargeItemDefinition.description");
1823        else if (Configuration.doAutoCreate())
1824          this.description = new MarkdownType(); // bb
1825      return this.description;
1826    }
1827
1828    public boolean hasDescriptionElement() { 
1829      return this.description != null && !this.description.isEmpty();
1830    }
1831
1832    public boolean hasDescription() { 
1833      return this.description != null && !this.description.isEmpty();
1834    }
1835
1836    /**
1837     * @param value {@link #description} (A free text natural language description of the charge item definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1838     */
1839    public ChargeItemDefinition setDescriptionElement(MarkdownType value) { 
1840      this.description = value;
1841      return this;
1842    }
1843
1844    /**
1845     * @return A free text natural language description of the charge item definition from a consumer's perspective.
1846     */
1847    public String getDescription() { 
1848      return this.description == null ? null : this.description.getValue();
1849    }
1850
1851    /**
1852     * @param value A free text natural language description of the charge item definition from a consumer's perspective.
1853     */
1854    public ChargeItemDefinition setDescription(String value) { 
1855      if (value == null)
1856        this.description = null;
1857      else {
1858        if (this.description == null)
1859          this.description = new MarkdownType();
1860        this.description.setValue(value);
1861      }
1862      return this;
1863    }
1864
1865    /**
1866     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate charge item definition instances.)
1867     */
1868    public List<UsageContext> getUseContext() { 
1869      if (this.useContext == null)
1870        this.useContext = new ArrayList<UsageContext>();
1871      return this.useContext;
1872    }
1873
1874    /**
1875     * @return Returns a reference to <code>this</code> for easy method chaining
1876     */
1877    public ChargeItemDefinition setUseContext(List<UsageContext> theUseContext) { 
1878      this.useContext = theUseContext;
1879      return this;
1880    }
1881
1882    public boolean hasUseContext() { 
1883      if (this.useContext == null)
1884        return false;
1885      for (UsageContext item : this.useContext)
1886        if (!item.isEmpty())
1887          return true;
1888      return false;
1889    }
1890
1891    public UsageContext addUseContext() { //3
1892      UsageContext t = new UsageContext();
1893      if (this.useContext == null)
1894        this.useContext = new ArrayList<UsageContext>();
1895      this.useContext.add(t);
1896      return t;
1897    }
1898
1899    public ChargeItemDefinition addUseContext(UsageContext t) { //3
1900      if (t == null)
1901        return this;
1902      if (this.useContext == null)
1903        this.useContext = new ArrayList<UsageContext>();
1904      this.useContext.add(t);
1905      return this;
1906    }
1907
1908    /**
1909     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
1910     */
1911    public UsageContext getUseContextFirstRep() { 
1912      if (getUseContext().isEmpty()) {
1913        addUseContext();
1914      }
1915      return getUseContext().get(0);
1916    }
1917
1918    /**
1919     * @return {@link #jurisdiction} (A legal or geographic region in which the charge item definition is intended to be used.)
1920     */
1921    public List<CodeableConcept> getJurisdiction() { 
1922      if (this.jurisdiction == null)
1923        this.jurisdiction = new ArrayList<CodeableConcept>();
1924      return this.jurisdiction;
1925    }
1926
1927    /**
1928     * @return Returns a reference to <code>this</code> for easy method chaining
1929     */
1930    public ChargeItemDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) { 
1931      this.jurisdiction = theJurisdiction;
1932      return this;
1933    }
1934
1935    public boolean hasJurisdiction() { 
1936      if (this.jurisdiction == null)
1937        return false;
1938      for (CodeableConcept item : this.jurisdiction)
1939        if (!item.isEmpty())
1940          return true;
1941      return false;
1942    }
1943
1944    public CodeableConcept addJurisdiction() { //3
1945      CodeableConcept t = new CodeableConcept();
1946      if (this.jurisdiction == null)
1947        this.jurisdiction = new ArrayList<CodeableConcept>();
1948      this.jurisdiction.add(t);
1949      return t;
1950    }
1951
1952    public ChargeItemDefinition addJurisdiction(CodeableConcept t) { //3
1953      if (t == null)
1954        return this;
1955      if (this.jurisdiction == null)
1956        this.jurisdiction = new ArrayList<CodeableConcept>();
1957      this.jurisdiction.add(t);
1958      return this;
1959    }
1960
1961    /**
1962     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {3}
1963     */
1964    public CodeableConcept getJurisdictionFirstRep() { 
1965      if (getJurisdiction().isEmpty()) {
1966        addJurisdiction();
1967      }
1968      return getJurisdiction().get(0);
1969    }
1970
1971    /**
1972     * @return {@link #copyright} (A copyright statement relating to the charge item definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the charge item definition.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
1973     */
1974    public MarkdownType getCopyrightElement() { 
1975      if (this.copyright == null)
1976        if (Configuration.errorOnAutoCreate())
1977          throw new Error("Attempt to auto-create ChargeItemDefinition.copyright");
1978        else if (Configuration.doAutoCreate())
1979          this.copyright = new MarkdownType(); // bb
1980      return this.copyright;
1981    }
1982
1983    public boolean hasCopyrightElement() { 
1984      return this.copyright != null && !this.copyright.isEmpty();
1985    }
1986
1987    public boolean hasCopyright() { 
1988      return this.copyright != null && !this.copyright.isEmpty();
1989    }
1990
1991    /**
1992     * @param value {@link #copyright} (A copyright statement relating to the charge item definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the charge item definition.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
1993     */
1994    public ChargeItemDefinition setCopyrightElement(MarkdownType value) { 
1995      this.copyright = value;
1996      return this;
1997    }
1998
1999    /**
2000     * @return A copyright statement relating to the charge item definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the charge item definition.
2001     */
2002    public String getCopyright() { 
2003      return this.copyright == null ? null : this.copyright.getValue();
2004    }
2005
2006    /**
2007     * @param value A copyright statement relating to the charge item definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the charge item definition.
2008     */
2009    public ChargeItemDefinition setCopyright(String value) { 
2010      if (value == null)
2011        this.copyright = null;
2012      else {
2013        if (this.copyright == null)
2014          this.copyright = new MarkdownType();
2015        this.copyright.setValue(value);
2016      }
2017      return this;
2018    }
2019
2020    /**
2021     * @return {@link #approvalDate} (The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
2022     */
2023    public DateType getApprovalDateElement() { 
2024      if (this.approvalDate == null)
2025        if (Configuration.errorOnAutoCreate())
2026          throw new Error("Attempt to auto-create ChargeItemDefinition.approvalDate");
2027        else if (Configuration.doAutoCreate())
2028          this.approvalDate = new DateType(); // bb
2029      return this.approvalDate;
2030    }
2031
2032    public boolean hasApprovalDateElement() { 
2033      return this.approvalDate != null && !this.approvalDate.isEmpty();
2034    }
2035
2036    public boolean hasApprovalDate() { 
2037      return this.approvalDate != null && !this.approvalDate.isEmpty();
2038    }
2039
2040    /**
2041     * @param value {@link #approvalDate} (The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
2042     */
2043    public ChargeItemDefinition setApprovalDateElement(DateType value) { 
2044      this.approvalDate = value;
2045      return this;
2046    }
2047
2048    /**
2049     * @return The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
2050     */
2051    public Date getApprovalDate() { 
2052      return this.approvalDate == null ? null : this.approvalDate.getValue();
2053    }
2054
2055    /**
2056     * @param value The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
2057     */
2058    public ChargeItemDefinition setApprovalDate(Date value) { 
2059      if (value == null)
2060        this.approvalDate = null;
2061      else {
2062        if (this.approvalDate == null)
2063          this.approvalDate = new DateType();
2064        this.approvalDate.setValue(value);
2065      }
2066      return this;
2067    }
2068
2069    /**
2070     * @return {@link #lastReviewDate} (The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
2071     */
2072    public DateType getLastReviewDateElement() { 
2073      if (this.lastReviewDate == null)
2074        if (Configuration.errorOnAutoCreate())
2075          throw new Error("Attempt to auto-create ChargeItemDefinition.lastReviewDate");
2076        else if (Configuration.doAutoCreate())
2077          this.lastReviewDate = new DateType(); // bb
2078      return this.lastReviewDate;
2079    }
2080
2081    public boolean hasLastReviewDateElement() { 
2082      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
2083    }
2084
2085    public boolean hasLastReviewDate() { 
2086      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
2087    }
2088
2089    /**
2090     * @param value {@link #lastReviewDate} (The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
2091     */
2092    public ChargeItemDefinition setLastReviewDateElement(DateType value) { 
2093      this.lastReviewDate = value;
2094      return this;
2095    }
2096
2097    /**
2098     * @return The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
2099     */
2100    public Date getLastReviewDate() { 
2101      return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
2102    }
2103
2104    /**
2105     * @param value The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
2106     */
2107    public ChargeItemDefinition setLastReviewDate(Date value) { 
2108      if (value == null)
2109        this.lastReviewDate = null;
2110      else {
2111        if (this.lastReviewDate == null)
2112          this.lastReviewDate = new DateType();
2113        this.lastReviewDate.setValue(value);
2114      }
2115      return this;
2116    }
2117
2118    /**
2119     * @return {@link #effectivePeriod} (The period during which the charge item definition content was or is planned to be in active use.)
2120     */
2121    public Period getEffectivePeriod() { 
2122      if (this.effectivePeriod == null)
2123        if (Configuration.errorOnAutoCreate())
2124          throw new Error("Attempt to auto-create ChargeItemDefinition.effectivePeriod");
2125        else if (Configuration.doAutoCreate())
2126          this.effectivePeriod = new Period(); // cc
2127      return this.effectivePeriod;
2128    }
2129
2130    public boolean hasEffectivePeriod() { 
2131      return this.effectivePeriod != null && !this.effectivePeriod.isEmpty();
2132    }
2133
2134    /**
2135     * @param value {@link #effectivePeriod} (The period during which the charge item definition content was or is planned to be in active use.)
2136     */
2137    public ChargeItemDefinition setEffectivePeriod(Period value) { 
2138      this.effectivePeriod = value;
2139      return this;
2140    }
2141
2142    /**
2143     * @return {@link #code} (The defined billing details in this resource pertain to the given billing code.)
2144     */
2145    public CodeableConcept getCode() { 
2146      if (this.code == null)
2147        if (Configuration.errorOnAutoCreate())
2148          throw new Error("Attempt to auto-create ChargeItemDefinition.code");
2149        else if (Configuration.doAutoCreate())
2150          this.code = new CodeableConcept(); // cc
2151      return this.code;
2152    }
2153
2154    public boolean hasCode() { 
2155      return this.code != null && !this.code.isEmpty();
2156    }
2157
2158    /**
2159     * @param value {@link #code} (The defined billing details in this resource pertain to the given billing code.)
2160     */
2161    public ChargeItemDefinition setCode(CodeableConcept value) { 
2162      this.code = value;
2163      return this;
2164    }
2165
2166    /**
2167     * @return {@link #instance} (The defined billing details in this resource pertain to the given product instance(s).)
2168     */
2169    public List<Reference> getInstance() { 
2170      if (this.instance == null)
2171        this.instance = new ArrayList<Reference>();
2172      return this.instance;
2173    }
2174
2175    /**
2176     * @return Returns a reference to <code>this</code> for easy method chaining
2177     */
2178    public ChargeItemDefinition setInstance(List<Reference> theInstance) { 
2179      this.instance = theInstance;
2180      return this;
2181    }
2182
2183    public boolean hasInstance() { 
2184      if (this.instance == null)
2185        return false;
2186      for (Reference item : this.instance)
2187        if (!item.isEmpty())
2188          return true;
2189      return false;
2190    }
2191
2192    public Reference addInstance() { //3
2193      Reference t = new Reference();
2194      if (this.instance == null)
2195        this.instance = new ArrayList<Reference>();
2196      this.instance.add(t);
2197      return t;
2198    }
2199
2200    public ChargeItemDefinition addInstance(Reference t) { //3
2201      if (t == null)
2202        return this;
2203      if (this.instance == null)
2204        this.instance = new ArrayList<Reference>();
2205      this.instance.add(t);
2206      return this;
2207    }
2208
2209    /**
2210     * @return The first repetition of repeating field {@link #instance}, creating it if it does not already exist {3}
2211     */
2212    public Reference getInstanceFirstRep() { 
2213      if (getInstance().isEmpty()) {
2214        addInstance();
2215      }
2216      return getInstance().get(0);
2217    }
2218
2219    /**
2220     * @return {@link #applicability} (Expressions that describe applicability criteria for the billing code.)
2221     */
2222    public List<ChargeItemDefinitionApplicabilityComponent> getApplicability() { 
2223      if (this.applicability == null)
2224        this.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
2225      return this.applicability;
2226    }
2227
2228    /**
2229     * @return Returns a reference to <code>this</code> for easy method chaining
2230     */
2231    public ChargeItemDefinition setApplicability(List<ChargeItemDefinitionApplicabilityComponent> theApplicability) { 
2232      this.applicability = theApplicability;
2233      return this;
2234    }
2235
2236    public boolean hasApplicability() { 
2237      if (this.applicability == null)
2238        return false;
2239      for (ChargeItemDefinitionApplicabilityComponent item : this.applicability)
2240        if (!item.isEmpty())
2241          return true;
2242      return false;
2243    }
2244
2245    public ChargeItemDefinitionApplicabilityComponent addApplicability() { //3
2246      ChargeItemDefinitionApplicabilityComponent t = new ChargeItemDefinitionApplicabilityComponent();
2247      if (this.applicability == null)
2248        this.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
2249      this.applicability.add(t);
2250      return t;
2251    }
2252
2253    public ChargeItemDefinition addApplicability(ChargeItemDefinitionApplicabilityComponent t) { //3
2254      if (t == null)
2255        return this;
2256      if (this.applicability == null)
2257        this.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
2258      this.applicability.add(t);
2259      return this;
2260    }
2261
2262    /**
2263     * @return The first repetition of repeating field {@link #applicability}, creating it if it does not already exist {3}
2264     */
2265    public ChargeItemDefinitionApplicabilityComponent getApplicabilityFirstRep() { 
2266      if (getApplicability().isEmpty()) {
2267        addApplicability();
2268      }
2269      return getApplicability().get(0);
2270    }
2271
2272    /**
2273     * @return {@link #propertyGroup} (Group of properties which are applicable under the same conditions. If no applicability rules are established for the group, then all properties always apply.)
2274     */
2275    public List<ChargeItemDefinitionPropertyGroupComponent> getPropertyGroup() { 
2276      if (this.propertyGroup == null)
2277        this.propertyGroup = new ArrayList<ChargeItemDefinitionPropertyGroupComponent>();
2278      return this.propertyGroup;
2279    }
2280
2281    /**
2282     * @return Returns a reference to <code>this</code> for easy method chaining
2283     */
2284    public ChargeItemDefinition setPropertyGroup(List<ChargeItemDefinitionPropertyGroupComponent> thePropertyGroup) { 
2285      this.propertyGroup = thePropertyGroup;
2286      return this;
2287    }
2288
2289    public boolean hasPropertyGroup() { 
2290      if (this.propertyGroup == null)
2291        return false;
2292      for (ChargeItemDefinitionPropertyGroupComponent item : this.propertyGroup)
2293        if (!item.isEmpty())
2294          return true;
2295      return false;
2296    }
2297
2298    public ChargeItemDefinitionPropertyGroupComponent addPropertyGroup() { //3
2299      ChargeItemDefinitionPropertyGroupComponent t = new ChargeItemDefinitionPropertyGroupComponent();
2300      if (this.propertyGroup == null)
2301        this.propertyGroup = new ArrayList<ChargeItemDefinitionPropertyGroupComponent>();
2302      this.propertyGroup.add(t);
2303      return t;
2304    }
2305
2306    public ChargeItemDefinition addPropertyGroup(ChargeItemDefinitionPropertyGroupComponent t) { //3
2307      if (t == null)
2308        return this;
2309      if (this.propertyGroup == null)
2310        this.propertyGroup = new ArrayList<ChargeItemDefinitionPropertyGroupComponent>();
2311      this.propertyGroup.add(t);
2312      return this;
2313    }
2314
2315    /**
2316     * @return The first repetition of repeating field {@link #propertyGroup}, creating it if it does not already exist {3}
2317     */
2318    public ChargeItemDefinitionPropertyGroupComponent getPropertyGroupFirstRep() { 
2319      if (getPropertyGroup().isEmpty()) {
2320        addPropertyGroup();
2321      }
2322      return getPropertyGroup().get(0);
2323    }
2324
2325    /**
2326     * not supported on this implementation
2327     */
2328    @Override
2329    public int getNameMax() { 
2330      return 0;
2331    }
2332    /**
2333     * @return {@link #name} (A natural language name identifying the charge item definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2334     */
2335    public StringType getNameElement() { 
2336      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"name\"");
2337    }
2338
2339    public boolean hasNameElement() { 
2340      return false;
2341    }
2342    public boolean hasName() {
2343      return false;
2344    }
2345
2346    /**
2347     * @param value {@link #name} (A natural language name identifying the charge item definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2348     */
2349    public ChargeItemDefinition setNameElement(StringType value) { 
2350      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"name\"");
2351    }
2352    public String getName() { 
2353      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"name\"");
2354    }
2355    /**
2356     * @param value A natural language name identifying the charge item definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
2357     */
2358    public ChargeItemDefinition setName(String value) { 
2359      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"name\"");
2360    }
2361    /**
2362     * not supported on this implementation
2363     */
2364    @Override
2365    public int getPurposeMax() { 
2366      return 0;
2367    }
2368    /**
2369     * @return {@link #purpose} (Explanation of why this charge item definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
2370     */
2371    public MarkdownType getPurposeElement() { 
2372      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"purpose\"");
2373    }
2374
2375    public boolean hasPurposeElement() { 
2376      return false;
2377    }
2378    public boolean hasPurpose() {
2379      return false;
2380    }
2381
2382    /**
2383     * @param value {@link #purpose} (Explanation of why this charge item definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
2384     */
2385    public ChargeItemDefinition setPurposeElement(MarkdownType value) { 
2386      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"purpose\"");
2387    }
2388    public String getPurpose() { 
2389      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"purpose\"");
2390    }
2391    /**
2392     * @param value Explanation of why this charge item definition is needed and why it has been designed as it has.
2393     */
2394    public ChargeItemDefinition setPurpose(String value) { 
2395      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"purpose\"");
2396    }
2397    /**
2398     * not supported on this implementation
2399     */
2400    @Override
2401    public int getTopicMax() { 
2402      return 0;
2403    }
2404    /**
2405     * @return {@link #topic} (Descriptive topics related to the content of the charge item definition. Topics provide a high-level categorization of the charge item definition that can be useful for filtering and searching.)
2406     */
2407    public List<CodeableConcept> getTopic() { 
2408      return new ArrayList<>();
2409    }
2410    /**
2411     * @return Returns a reference to <code>this</code> for easy method chaining
2412     */
2413    public ChargeItemDefinition setTopic(List<CodeableConcept> theTopic) { 
2414      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"topic\"");
2415    }
2416    public boolean hasTopic() { 
2417      return false;
2418    }
2419
2420    public CodeableConcept addTopic() { //3
2421      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"topic\"");
2422    }
2423    public ChargeItemDefinition addTopic(CodeableConcept t) { //3
2424      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"topic\"");
2425    }
2426    /**
2427     * @return The first repetition of repeating field {@link #topic}, creating it if it does not already exist {2}
2428     */
2429    public CodeableConcept getTopicFirstRep() { 
2430      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"topic\"");
2431    }
2432    /**
2433     * not supported on this implementation
2434     */
2435    @Override
2436    public int getAuthorMax() { 
2437      return 0;
2438    }
2439    /**
2440     * @return {@link #author} (An individiual or organization primarily involved in the creation and maintenance of the charge item definition.)
2441     */
2442    public List<ContactDetail> getAuthor() { 
2443      return new ArrayList<>();
2444    }
2445    /**
2446     * @return Returns a reference to <code>this</code> for easy method chaining
2447     */
2448    public ChargeItemDefinition setAuthor(List<ContactDetail> theAuthor) { 
2449      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"author\"");
2450    }
2451    public boolean hasAuthor() { 
2452      return false;
2453    }
2454
2455    public ContactDetail addAuthor() { //3
2456      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"author\"");
2457    }
2458    public ChargeItemDefinition addAuthor(ContactDetail t) { //3
2459      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"author\"");
2460    }
2461    /**
2462     * @return The first repetition of repeating field {@link #author}, creating it if it does not already exist {2}
2463     */
2464    public ContactDetail getAuthorFirstRep() { 
2465      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"author\"");
2466    }
2467    /**
2468     * not supported on this implementation
2469     */
2470    @Override
2471    public int getEditorMax() { 
2472      return 0;
2473    }
2474    /**
2475     * @return {@link #editor} (An individual or organization primarily responsible for internal coherence of the charge item definition.)
2476     */
2477    public List<ContactDetail> getEditor() { 
2478      return new ArrayList<>();
2479    }
2480    /**
2481     * @return Returns a reference to <code>this</code> for easy method chaining
2482     */
2483    public ChargeItemDefinition setEditor(List<ContactDetail> theEditor) { 
2484      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"editor\"");
2485    }
2486    public boolean hasEditor() { 
2487      return false;
2488    }
2489
2490    public ContactDetail addEditor() { //3
2491      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"editor\"");
2492    }
2493    public ChargeItemDefinition addEditor(ContactDetail t) { //3
2494      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"editor\"");
2495    }
2496    /**
2497     * @return The first repetition of repeating field {@link #editor}, creating it if it does not already exist {2}
2498     */
2499    public ContactDetail getEditorFirstRep() { 
2500      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"editor\"");
2501    }
2502    /**
2503     * not supported on this implementation
2504     */
2505    @Override
2506    public int getReviewerMax() { 
2507      return 0;
2508    }
2509    /**
2510     * @return {@link #reviewer} (An individual or organization primarily responsible for review of some aspect of the charge item definition.)
2511     */
2512    public List<ContactDetail> getReviewer() { 
2513      return new ArrayList<>();
2514    }
2515    /**
2516     * @return Returns a reference to <code>this</code> for easy method chaining
2517     */
2518    public ChargeItemDefinition setReviewer(List<ContactDetail> theReviewer) { 
2519      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"reviewer\"");
2520    }
2521    public boolean hasReviewer() { 
2522      return false;
2523    }
2524
2525    public ContactDetail addReviewer() { //3
2526      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"reviewer\"");
2527    }
2528    public ChargeItemDefinition addReviewer(ContactDetail t) { //3
2529      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"reviewer\"");
2530    }
2531    /**
2532     * @return The first repetition of repeating field {@link #reviewer}, creating it if it does not already exist {2}
2533     */
2534    public ContactDetail getReviewerFirstRep() { 
2535      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"reviewer\"");
2536    }
2537    /**
2538     * not supported on this implementation
2539     */
2540    @Override
2541    public int getEndorserMax() { 
2542      return 0;
2543    }
2544    /**
2545     * @return {@link #endorser} (An individual or organization responsible for officially endorsing the charge item definition for use in some setting.)
2546     */
2547    public List<ContactDetail> getEndorser() { 
2548      return new ArrayList<>();
2549    }
2550    /**
2551     * @return Returns a reference to <code>this</code> for easy method chaining
2552     */
2553    public ChargeItemDefinition setEndorser(List<ContactDetail> theEndorser) { 
2554      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"endorser\"");
2555    }
2556    public boolean hasEndorser() { 
2557      return false;
2558    }
2559
2560    public ContactDetail addEndorser() { //3
2561      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"endorser\"");
2562    }
2563    public ChargeItemDefinition addEndorser(ContactDetail t) { //3
2564      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"endorser\"");
2565    }
2566    /**
2567     * @return The first repetition of repeating field {@link #endorser}, creating it if it does not already exist {2}
2568     */
2569    public ContactDetail getEndorserFirstRep() { 
2570      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"endorser\"");
2571    }
2572    /**
2573     * not supported on this implementation
2574     */
2575    @Override
2576    public int getRelatedArtifactMax() { 
2577      return 0;
2578    }
2579    /**
2580     * @return {@link #relatedArtifact} (Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts.)
2581     */
2582    public List<RelatedArtifact> getRelatedArtifact() { 
2583      return new ArrayList<>();
2584    }
2585    /**
2586     * @return Returns a reference to <code>this</code> for easy method chaining
2587     */
2588    public ChargeItemDefinition setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
2589      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"relatedArtifact\"");
2590    }
2591    public boolean hasRelatedArtifact() { 
2592      return false;
2593    }
2594
2595    public RelatedArtifact addRelatedArtifact() { //3
2596      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"relatedArtifact\"");
2597    }
2598    public ChargeItemDefinition addRelatedArtifact(RelatedArtifact t) { //3
2599      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"relatedArtifact\"");
2600    }
2601    /**
2602     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist {2}
2603     */
2604    public RelatedArtifact getRelatedArtifactFirstRep() { 
2605      throw new Error("The resource type \"ChargeItemDefinition\" does not implement the property \"relatedArtifact\"");
2606    }
2607      protected void listChildren(List<Property> children) {
2608        super.listChildren(children);
2609        children.add(new Property("url", "uri", "An absolute URI that is used to identify this charge item definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this charge item definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the charge item definition is stored on different servers.", 0, 1, url));
2610        children.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this charge item definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier));
2611        children.add(new Property("version", "string", "The identifier that is used to identify this version of the charge item definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the charge item definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets.", 0, 1, version));
2612        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the charge item definition.", 0, 1, title));
2613        children.add(new Property("derivedFromUri", "uri", "The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.", 0, java.lang.Integer.MAX_VALUE, derivedFromUri));
2614        children.add(new Property("partOf", "canonical(ChargeItemDefinition)", "A larger definition of which this particular definition is a component or step.", 0, java.lang.Integer.MAX_VALUE, partOf));
2615        children.add(new Property("replaces", "canonical(ChargeItemDefinition)", "As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.", 0, java.lang.Integer.MAX_VALUE, replaces));
2616        children.add(new Property("status", "code", "The current state of the ChargeItemDefinition.", 0, 1, status));
2617        children.add(new Property("experimental", "boolean", "A Boolean value to indicate that this charge item definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental));
2618        children.add(new Property("date", "dateTime", "The date  (and optionally time) when the charge item definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the charge item definition changes.", 0, 1, date));
2619        children.add(new Property("publisher", "string", "The name of the organization or individual that published the charge item definition.", 0, 1, publisher));
2620        children.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
2621        children.add(new Property("description", "markdown", "A free text natural language description of the charge item definition from a consumer's perspective.", 0, 1, description));
2622        children.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate charge item definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
2623        children.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the charge item definition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
2624        children.add(new Property("copyright", "markdown", "A copyright statement relating to the charge item definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the charge item definition.", 0, 1, copyright));
2625        children.add(new Property("approvalDate", "date", "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, 1, approvalDate));
2626        children.add(new Property("lastReviewDate", "date", "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", 0, 1, lastReviewDate));
2627        children.add(new Property("effectivePeriod", "Period", "The period during which the charge item definition content was or is planned to be in active use.", 0, 1, effectivePeriod));
2628        children.add(new Property("code", "CodeableConcept", "The defined billing details in this resource pertain to the given billing code.", 0, 1, code));
2629        children.add(new Property("instance", "Reference(Medication|Substance|Device|DeviceDefinition|ActivityDefinition|PlanDefinition|HealthcareService)", "The defined billing details in this resource pertain to the given product instance(s).", 0, java.lang.Integer.MAX_VALUE, instance));
2630        children.add(new Property("applicability", "", "Expressions that describe applicability criteria for the billing code.", 0, java.lang.Integer.MAX_VALUE, applicability));
2631        children.add(new Property("propertyGroup", "", "Group of properties which are applicable under the same conditions. If no applicability rules are established for the group, then all properties always apply.", 0, java.lang.Integer.MAX_VALUE, propertyGroup));
2632      }
2633
2634      @Override
2635      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2636        switch (_hash) {
2637        case 116079: /*url*/  return new Property("url", "uri", "An absolute URI that is used to identify this charge item definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this charge item definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the charge item definition is stored on different servers.", 0, 1, url);
2638        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A formal identifier that is used to identify this charge item definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier);
2639        case 351608024: /*version*/  return new Property("version", "string", "The identifier that is used to identify this version of the charge item definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the charge item definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets.", 0, 1, version);
2640        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the charge item definition.", 0, 1, title);
2641        case -1076333435: /*derivedFromUri*/  return new Property("derivedFromUri", "uri", "The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.", 0, java.lang.Integer.MAX_VALUE, derivedFromUri);
2642        case -995410646: /*partOf*/  return new Property("partOf", "canonical(ChargeItemDefinition)", "A larger definition of which this particular definition is a component or step.", 0, java.lang.Integer.MAX_VALUE, partOf);
2643        case -430332865: /*replaces*/  return new Property("replaces", "canonical(ChargeItemDefinition)", "As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.", 0, java.lang.Integer.MAX_VALUE, replaces);
2644        case -892481550: /*status*/  return new Property("status", "code", "The current state of the ChargeItemDefinition.", 0, 1, status);
2645        case -404562712: /*experimental*/  return new Property("experimental", "boolean", "A Boolean value to indicate that this charge item definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental);
2646        case 3076014: /*date*/  return new Property("date", "dateTime", "The date  (and optionally time) when the charge item definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the charge item definition changes.", 0, 1, date);
2647        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the charge item definition.", 0, 1, publisher);
2648        case 951526432: /*contact*/  return new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact);
2649        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the charge item definition from a consumer's perspective.", 0, 1, description);
2650        case -669707736: /*useContext*/  return new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate charge item definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
2651        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the charge item definition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
2652        case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "A copyright statement relating to the charge item definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the charge item definition.", 0, 1, copyright);
2653        case 223539345: /*approvalDate*/  return new Property("approvalDate", "date", "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, 1, approvalDate);
2654        case -1687512484: /*lastReviewDate*/  return new Property("lastReviewDate", "date", "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", 0, 1, lastReviewDate);
2655        case -403934648: /*effectivePeriod*/  return new Property("effectivePeriod", "Period", "The period during which the charge item definition content was or is planned to be in active use.", 0, 1, effectivePeriod);
2656        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The defined billing details in this resource pertain to the given billing code.", 0, 1, code);
2657        case 555127957: /*instance*/  return new Property("instance", "Reference(Medication|Substance|Device|DeviceDefinition|ActivityDefinition|PlanDefinition|HealthcareService)", "The defined billing details in this resource pertain to the given product instance(s).", 0, java.lang.Integer.MAX_VALUE, instance);
2658        case -1526770491: /*applicability*/  return new Property("applicability", "", "Expressions that describe applicability criteria for the billing code.", 0, java.lang.Integer.MAX_VALUE, applicability);
2659        case -1041594966: /*propertyGroup*/  return new Property("propertyGroup", "", "Group of properties which are applicable under the same conditions. If no applicability rules are established for the group, then all properties always apply.", 0, java.lang.Integer.MAX_VALUE, propertyGroup);
2660        default: return super.getNamedProperty(_hash, _name, _checkValid);
2661        }
2662
2663      }
2664
2665      @Override
2666      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2667        switch (hash) {
2668        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
2669        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2670        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
2671        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
2672        case -1076333435: /*derivedFromUri*/ return this.derivedFromUri == null ? new Base[0] : this.derivedFromUri.toArray(new Base[this.derivedFromUri.size()]); // UriType
2673        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // CanonicalType
2674        case -430332865: /*replaces*/ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // CanonicalType
2675        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
2676        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
2677        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2678        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
2679        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2680        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2681        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
2682        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
2683        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
2684        case 223539345: /*approvalDate*/ return this.approvalDate == null ? new Base[0] : new Base[] {this.approvalDate}; // DateType
2685        case -1687512484: /*lastReviewDate*/ return this.lastReviewDate == null ? new Base[0] : new Base[] {this.lastReviewDate}; // DateType
2686        case -403934648: /*effectivePeriod*/ return this.effectivePeriod == null ? new Base[0] : new Base[] {this.effectivePeriod}; // Period
2687        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
2688        case 555127957: /*instance*/ return this.instance == null ? new Base[0] : this.instance.toArray(new Base[this.instance.size()]); // Reference
2689        case -1526770491: /*applicability*/ return this.applicability == null ? new Base[0] : this.applicability.toArray(new Base[this.applicability.size()]); // ChargeItemDefinitionApplicabilityComponent
2690        case -1041594966: /*propertyGroup*/ return this.propertyGroup == null ? new Base[0] : this.propertyGroup.toArray(new Base[this.propertyGroup.size()]); // ChargeItemDefinitionPropertyGroupComponent
2691        default: return super.getProperty(hash, name, checkValid);
2692        }
2693
2694      }
2695
2696      @Override
2697      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2698        switch (hash) {
2699        case 116079: // url
2700          this.url = TypeConvertor.castToUri(value); // UriType
2701          return value;
2702        case -1618432855: // identifier
2703          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
2704          return value;
2705        case 351608024: // version
2706          this.version = TypeConvertor.castToString(value); // StringType
2707          return value;
2708        case 110371416: // title
2709          this.title = TypeConvertor.castToString(value); // StringType
2710          return value;
2711        case -1076333435: // derivedFromUri
2712          this.getDerivedFromUri().add(TypeConvertor.castToUri(value)); // UriType
2713          return value;
2714        case -995410646: // partOf
2715          this.getPartOf().add(TypeConvertor.castToCanonical(value)); // CanonicalType
2716          return value;
2717        case -430332865: // replaces
2718          this.getReplaces().add(TypeConvertor.castToCanonical(value)); // CanonicalType
2719          return value;
2720        case -892481550: // status
2721          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2722          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2723          return value;
2724        case -404562712: // experimental
2725          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
2726          return value;
2727        case 3076014: // date
2728          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
2729          return value;
2730        case 1447404028: // publisher
2731          this.publisher = TypeConvertor.castToString(value); // StringType
2732          return value;
2733        case 951526432: // contact
2734          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
2735          return value;
2736        case -1724546052: // description
2737          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2738          return value;
2739        case -669707736: // useContext
2740          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
2741          return value;
2742        case -507075711: // jurisdiction
2743          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2744          return value;
2745        case 1522889671: // copyright
2746          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
2747          return value;
2748        case 223539345: // approvalDate
2749          this.approvalDate = TypeConvertor.castToDate(value); // DateType
2750          return value;
2751        case -1687512484: // lastReviewDate
2752          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
2753          return value;
2754        case -403934648: // effectivePeriod
2755          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
2756          return value;
2757        case 3059181: // code
2758          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2759          return value;
2760        case 555127957: // instance
2761          this.getInstance().add(TypeConvertor.castToReference(value)); // Reference
2762          return value;
2763        case -1526770491: // applicability
2764          this.getApplicability().add((ChargeItemDefinitionApplicabilityComponent) value); // ChargeItemDefinitionApplicabilityComponent
2765          return value;
2766        case -1041594966: // propertyGroup
2767          this.getPropertyGroup().add((ChargeItemDefinitionPropertyGroupComponent) value); // ChargeItemDefinitionPropertyGroupComponent
2768          return value;
2769        default: return super.setProperty(hash, name, value);
2770        }
2771
2772      }
2773
2774      @Override
2775      public Base setProperty(String name, Base value) throws FHIRException {
2776        if (name.equals("url")) {
2777          this.url = TypeConvertor.castToUri(value); // UriType
2778        } else if (name.equals("identifier")) {
2779          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
2780        } else if (name.equals("version")) {
2781          this.version = TypeConvertor.castToString(value); // StringType
2782        } else if (name.equals("title")) {
2783          this.title = TypeConvertor.castToString(value); // StringType
2784        } else if (name.equals("derivedFromUri")) {
2785          this.getDerivedFromUri().add(TypeConvertor.castToUri(value));
2786        } else if (name.equals("partOf")) {
2787          this.getPartOf().add(TypeConvertor.castToCanonical(value));
2788        } else if (name.equals("replaces")) {
2789          this.getReplaces().add(TypeConvertor.castToCanonical(value));
2790        } else if (name.equals("status")) {
2791          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2792          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2793        } else if (name.equals("experimental")) {
2794          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
2795        } else if (name.equals("date")) {
2796          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
2797        } else if (name.equals("publisher")) {
2798          this.publisher = TypeConvertor.castToString(value); // StringType
2799        } else if (name.equals("contact")) {
2800          this.getContact().add(TypeConvertor.castToContactDetail(value));
2801        } else if (name.equals("description")) {
2802          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2803        } else if (name.equals("useContext")) {
2804          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
2805        } else if (name.equals("jurisdiction")) {
2806          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
2807        } else if (name.equals("copyright")) {
2808          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
2809        } else if (name.equals("approvalDate")) {
2810          this.approvalDate = TypeConvertor.castToDate(value); // DateType
2811        } else if (name.equals("lastReviewDate")) {
2812          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
2813        } else if (name.equals("effectivePeriod")) {
2814          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
2815        } else if (name.equals("code")) {
2816          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2817        } else if (name.equals("instance")) {
2818          this.getInstance().add(TypeConvertor.castToReference(value));
2819        } else if (name.equals("applicability")) {
2820          this.getApplicability().add((ChargeItemDefinitionApplicabilityComponent) value);
2821        } else if (name.equals("propertyGroup")) {
2822          this.getPropertyGroup().add((ChargeItemDefinitionPropertyGroupComponent) value);
2823        } else
2824          return super.setProperty(name, value);
2825        return value;
2826      }
2827
2828      @Override
2829      public Base makeProperty(int hash, String name) throws FHIRException {
2830        switch (hash) {
2831        case 116079:  return getUrlElement();
2832        case -1618432855:  return addIdentifier(); 
2833        case 351608024:  return getVersionElement();
2834        case 110371416:  return getTitleElement();
2835        case -1076333435:  return addDerivedFromUriElement();
2836        case -995410646:  return addPartOfElement();
2837        case -430332865:  return addReplacesElement();
2838        case -892481550:  return getStatusElement();
2839        case -404562712:  return getExperimentalElement();
2840        case 3076014:  return getDateElement();
2841        case 1447404028:  return getPublisherElement();
2842        case 951526432:  return addContact(); 
2843        case -1724546052:  return getDescriptionElement();
2844        case -669707736:  return addUseContext(); 
2845        case -507075711:  return addJurisdiction(); 
2846        case 1522889671:  return getCopyrightElement();
2847        case 223539345:  return getApprovalDateElement();
2848        case -1687512484:  return getLastReviewDateElement();
2849        case -403934648:  return getEffectivePeriod();
2850        case 3059181:  return getCode();
2851        case 555127957:  return addInstance(); 
2852        case -1526770491:  return addApplicability(); 
2853        case -1041594966:  return addPropertyGroup(); 
2854        default: return super.makeProperty(hash, name);
2855        }
2856
2857      }
2858
2859      @Override
2860      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2861        switch (hash) {
2862        case 116079: /*url*/ return new String[] {"uri"};
2863        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2864        case 351608024: /*version*/ return new String[] {"string"};
2865        case 110371416: /*title*/ return new String[] {"string"};
2866        case -1076333435: /*derivedFromUri*/ return new String[] {"uri"};
2867        case -995410646: /*partOf*/ return new String[] {"canonical"};
2868        case -430332865: /*replaces*/ return new String[] {"canonical"};
2869        case -892481550: /*status*/ return new String[] {"code"};
2870        case -404562712: /*experimental*/ return new String[] {"boolean"};
2871        case 3076014: /*date*/ return new String[] {"dateTime"};
2872        case 1447404028: /*publisher*/ return new String[] {"string"};
2873        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
2874        case -1724546052: /*description*/ return new String[] {"markdown"};
2875        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
2876        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
2877        case 1522889671: /*copyright*/ return new String[] {"markdown"};
2878        case 223539345: /*approvalDate*/ return new String[] {"date"};
2879        case -1687512484: /*lastReviewDate*/ return new String[] {"date"};
2880        case -403934648: /*effectivePeriod*/ return new String[] {"Period"};
2881        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2882        case 555127957: /*instance*/ return new String[] {"Reference"};
2883        case -1526770491: /*applicability*/ return new String[] {};
2884        case -1041594966: /*propertyGroup*/ return new String[] {};
2885        default: return super.getTypesForProperty(hash, name);
2886        }
2887
2888      }
2889
2890      @Override
2891      public Base addChild(String name) throws FHIRException {
2892        if (name.equals("url")) {
2893          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.url");
2894        }
2895        else if (name.equals("identifier")) {
2896          return addIdentifier();
2897        }
2898        else if (name.equals("version")) {
2899          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.version");
2900        }
2901        else if (name.equals("title")) {
2902          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.title");
2903        }
2904        else if (name.equals("derivedFromUri")) {
2905          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.derivedFromUri");
2906        }
2907        else if (name.equals("partOf")) {
2908          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.partOf");
2909        }
2910        else if (name.equals("replaces")) {
2911          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.replaces");
2912        }
2913        else if (name.equals("status")) {
2914          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.status");
2915        }
2916        else if (name.equals("experimental")) {
2917          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.experimental");
2918        }
2919        else if (name.equals("date")) {
2920          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.date");
2921        }
2922        else if (name.equals("publisher")) {
2923          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.publisher");
2924        }
2925        else if (name.equals("contact")) {
2926          return addContact();
2927        }
2928        else if (name.equals("description")) {
2929          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.description");
2930        }
2931        else if (name.equals("useContext")) {
2932          return addUseContext();
2933        }
2934        else if (name.equals("jurisdiction")) {
2935          return addJurisdiction();
2936        }
2937        else if (name.equals("copyright")) {
2938          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.copyright");
2939        }
2940        else if (name.equals("approvalDate")) {
2941          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.approvalDate");
2942        }
2943        else if (name.equals("lastReviewDate")) {
2944          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.lastReviewDate");
2945        }
2946        else if (name.equals("effectivePeriod")) {
2947          this.effectivePeriod = new Period();
2948          return this.effectivePeriod;
2949        }
2950        else if (name.equals("code")) {
2951          this.code = new CodeableConcept();
2952          return this.code;
2953        }
2954        else if (name.equals("instance")) {
2955          return addInstance();
2956        }
2957        else if (name.equals("applicability")) {
2958          return addApplicability();
2959        }
2960        else if (name.equals("propertyGroup")) {
2961          return addPropertyGroup();
2962        }
2963        else
2964          return super.addChild(name);
2965      }
2966
2967  public String fhirType() {
2968    return "ChargeItemDefinition";
2969
2970  }
2971
2972      public ChargeItemDefinition copy() {
2973        ChargeItemDefinition dst = new ChargeItemDefinition();
2974        copyValues(dst);
2975        return dst;
2976      }
2977
2978      public void copyValues(ChargeItemDefinition dst) {
2979        super.copyValues(dst);
2980        dst.url = url == null ? null : url.copy();
2981        if (identifier != null) {
2982          dst.identifier = new ArrayList<Identifier>();
2983          for (Identifier i : identifier)
2984            dst.identifier.add(i.copy());
2985        };
2986        dst.version = version == null ? null : version.copy();
2987        dst.title = title == null ? null : title.copy();
2988        if (derivedFromUri != null) {
2989          dst.derivedFromUri = new ArrayList<UriType>();
2990          for (UriType i : derivedFromUri)
2991            dst.derivedFromUri.add(i.copy());
2992        };
2993        if (partOf != null) {
2994          dst.partOf = new ArrayList<CanonicalType>();
2995          for (CanonicalType i : partOf)
2996            dst.partOf.add(i.copy());
2997        };
2998        if (replaces != null) {
2999          dst.replaces = new ArrayList<CanonicalType>();
3000          for (CanonicalType i : replaces)
3001            dst.replaces.add(i.copy());
3002        };
3003        dst.status = status == null ? null : status.copy();
3004        dst.experimental = experimental == null ? null : experimental.copy();
3005        dst.date = date == null ? null : date.copy();
3006        dst.publisher = publisher == null ? null : publisher.copy();
3007        if (contact != null) {
3008          dst.contact = new ArrayList<ContactDetail>();
3009          for (ContactDetail i : contact)
3010            dst.contact.add(i.copy());
3011        };
3012        dst.description = description == null ? null : description.copy();
3013        if (useContext != null) {
3014          dst.useContext = new ArrayList<UsageContext>();
3015          for (UsageContext i : useContext)
3016            dst.useContext.add(i.copy());
3017        };
3018        if (jurisdiction != null) {
3019          dst.jurisdiction = new ArrayList<CodeableConcept>();
3020          for (CodeableConcept i : jurisdiction)
3021            dst.jurisdiction.add(i.copy());
3022        };
3023        dst.copyright = copyright == null ? null : copyright.copy();
3024        dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
3025        dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
3026        dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
3027        dst.code = code == null ? null : code.copy();
3028        if (instance != null) {
3029          dst.instance = new ArrayList<Reference>();
3030          for (Reference i : instance)
3031            dst.instance.add(i.copy());
3032        };
3033        if (applicability != null) {
3034          dst.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
3035          for (ChargeItemDefinitionApplicabilityComponent i : applicability)
3036            dst.applicability.add(i.copy());
3037        };
3038        if (propertyGroup != null) {
3039          dst.propertyGroup = new ArrayList<ChargeItemDefinitionPropertyGroupComponent>();
3040          for (ChargeItemDefinitionPropertyGroupComponent i : propertyGroup)
3041            dst.propertyGroup.add(i.copy());
3042        };
3043      }
3044
3045      protected ChargeItemDefinition typedCopy() {
3046        return copy();
3047      }
3048
3049      @Override
3050      public boolean equalsDeep(Base other_) {
3051        if (!super.equalsDeep(other_))
3052          return false;
3053        if (!(other_ instanceof ChargeItemDefinition))
3054          return false;
3055        ChargeItemDefinition o = (ChargeItemDefinition) other_;
3056        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
3057           && compareDeep(title, o.title, true) && compareDeep(derivedFromUri, o.derivedFromUri, true) && compareDeep(partOf, o.partOf, true)
3058           && compareDeep(replaces, o.replaces, true) && compareDeep(status, o.status, true) && compareDeep(experimental, o.experimental, true)
3059           && compareDeep(date, o.date, true) && compareDeep(publisher, o.publisher, true) && compareDeep(contact, o.contact, true)
3060           && compareDeep(description, o.description, true) && compareDeep(useContext, o.useContext, true)
3061           && compareDeep(jurisdiction, o.jurisdiction, true) && compareDeep(copyright, o.copyright, true)
3062           && compareDeep(approvalDate, o.approvalDate, true) && compareDeep(lastReviewDate, o.lastReviewDate, true)
3063           && compareDeep(effectivePeriod, o.effectivePeriod, true) && compareDeep(code, o.code, true) && compareDeep(instance, o.instance, true)
3064           && compareDeep(applicability, o.applicability, true) && compareDeep(propertyGroup, o.propertyGroup, true)
3065          ;
3066      }
3067
3068      @Override
3069      public boolean equalsShallow(Base other_) {
3070        if (!super.equalsShallow(other_))
3071          return false;
3072        if (!(other_ instanceof ChargeItemDefinition))
3073          return false;
3074        ChargeItemDefinition o = (ChargeItemDefinition) other_;
3075        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(title, o.title, true)
3076           && compareValues(derivedFromUri, o.derivedFromUri, true) && compareValues(partOf, o.partOf, true) && compareValues(replaces, o.replaces, true)
3077           && compareValues(status, o.status, true) && compareValues(experimental, o.experimental, true) && compareValues(date, o.date, true)
3078           && compareValues(publisher, o.publisher, true) && compareValues(description, o.description, true) && compareValues(copyright, o.copyright, true)
3079           && compareValues(approvalDate, o.approvalDate, true) && compareValues(lastReviewDate, o.lastReviewDate, true)
3080          ;
3081      }
3082
3083      public boolean isEmpty() {
3084        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, identifier, version
3085          , title, derivedFromUri, partOf, replaces, status, experimental, date, publisher
3086          , contact, description, useContext, jurisdiction, copyright, approvalDate, lastReviewDate
3087          , effectivePeriod, code, instance, applicability, propertyGroup);
3088      }
3089
3090  @Override
3091  public ResourceType getResourceType() {
3092    return ResourceType.ChargeItemDefinition;
3093   }
3094
3095 /**
3096   * Search parameter: <b>context-quantity</b>
3097   * <p>
3098   * Description: <b>A quantity- or range-valued use context assigned to the charge item definition</b><br>
3099   * Type: <b>quantity</b><br>
3100   * Path: <b>(ChargeItemDefinition.useContext.value as Quantity) | (ChargeItemDefinition.useContext.value as Range)</b><br>
3101   * </p>
3102   */
3103  @SearchParamDefinition(name="context-quantity", path="(ChargeItemDefinition.useContext.value as Quantity) | (ChargeItemDefinition.useContext.value as Range)", description="A quantity- or range-valued use context assigned to the charge item definition", type="quantity" )
3104  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
3105 /**
3106   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
3107   * <p>
3108   * Description: <b>A quantity- or range-valued use context assigned to the charge item definition</b><br>
3109   * Type: <b>quantity</b><br>
3110   * Path: <b>(ChargeItemDefinition.useContext.value as Quantity) | (ChargeItemDefinition.useContext.value as Range)</b><br>
3111   * </p>
3112   */
3113  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
3114
3115 /**
3116   * Search parameter: <b>context-type-quantity</b>
3117   * <p>
3118   * Description: <b>A use context type and quantity- or range-based value assigned to the charge item definition</b><br>
3119   * Type: <b>composite</b><br>
3120   * Path: <b>ChargeItemDefinition.useContext</b><br>
3121   * </p>
3122   */
3123  @SearchParamDefinition(name="context-type-quantity", path="ChargeItemDefinition.useContext", description="A use context type and quantity- or range-based value assigned to the charge item definition", type="composite", compositeOf={"context-type", "context-quantity"} )
3124  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
3125 /**
3126   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
3127   * <p>
3128   * Description: <b>A use context type and quantity- or range-based value assigned to the charge item definition</b><br>
3129   * Type: <b>composite</b><br>
3130   * Path: <b>ChargeItemDefinition.useContext</b><br>
3131   * </p>
3132   */
3133  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> CONTEXT_TYPE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(SP_CONTEXT_TYPE_QUANTITY);
3134
3135 /**
3136   * Search parameter: <b>context-type-value</b>
3137   * <p>
3138   * Description: <b>A use context type and value assigned to the charge item definition</b><br>
3139   * Type: <b>composite</b><br>
3140   * Path: <b>ChargeItemDefinition.useContext</b><br>
3141   * </p>
3142   */
3143  @SearchParamDefinition(name="context-type-value", path="ChargeItemDefinition.useContext", description="A use context type and value assigned to the charge item definition", type="composite", compositeOf={"context-type", "context"} )
3144  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
3145 /**
3146   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
3147   * <p>
3148   * Description: <b>A use context type and value assigned to the charge item definition</b><br>
3149   * Type: <b>composite</b><br>
3150   * Path: <b>ChargeItemDefinition.useContext</b><br>
3151   * </p>
3152   */
3153  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CONTEXT_TYPE_VALUE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_CONTEXT_TYPE_VALUE);
3154
3155 /**
3156   * Search parameter: <b>context-type</b>
3157   * <p>
3158   * Description: <b>A type of use context assigned to the charge item definition</b><br>
3159   * Type: <b>token</b><br>
3160   * Path: <b>ChargeItemDefinition.useContext.code</b><br>
3161   * </p>
3162   */
3163  @SearchParamDefinition(name="context-type", path="ChargeItemDefinition.useContext.code", description="A type of use context assigned to the charge item definition", type="token" )
3164  public static final String SP_CONTEXT_TYPE = "context-type";
3165 /**
3166   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
3167   * <p>
3168   * Description: <b>A type of use context assigned to the charge item definition</b><br>
3169   * Type: <b>token</b><br>
3170   * Path: <b>ChargeItemDefinition.useContext.code</b><br>
3171   * </p>
3172   */
3173  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
3174
3175 /**
3176   * Search parameter: <b>context</b>
3177   * <p>
3178   * Description: <b>A use context assigned to the charge item definition</b><br>
3179   * Type: <b>token</b><br>
3180   * Path: <b>(ChargeItemDefinition.useContext.value as CodeableConcept)</b><br>
3181   * </p>
3182   */
3183  @SearchParamDefinition(name="context", path="(ChargeItemDefinition.useContext.value as CodeableConcept)", description="A use context assigned to the charge item definition", type="token" )
3184  public static final String SP_CONTEXT = "context";
3185 /**
3186   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3187   * <p>
3188   * Description: <b>A use context assigned to the charge item definition</b><br>
3189   * Type: <b>token</b><br>
3190   * Path: <b>(ChargeItemDefinition.useContext.value as CodeableConcept)</b><br>
3191   * </p>
3192   */
3193  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
3194
3195 /**
3196   * Search parameter: <b>date</b>
3197   * <p>
3198   * Description: <b>The charge item definition publication date</b><br>
3199   * Type: <b>date</b><br>
3200   * Path: <b>ChargeItemDefinition.date</b><br>
3201   * </p>
3202   */
3203  @SearchParamDefinition(name="date", path="ChargeItemDefinition.date", description="The charge item definition publication date", type="date" )
3204  public static final String SP_DATE = "date";
3205 /**
3206   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3207   * <p>
3208   * Description: <b>The charge item definition publication date</b><br>
3209   * Type: <b>date</b><br>
3210   * Path: <b>ChargeItemDefinition.date</b><br>
3211   * </p>
3212   */
3213  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3214
3215 /**
3216   * Search parameter: <b>description</b>
3217   * <p>
3218   * Description: <b>The description of the charge item definition</b><br>
3219   * Type: <b>string</b><br>
3220   * Path: <b>ChargeItemDefinition.description</b><br>
3221   * </p>
3222   */
3223  @SearchParamDefinition(name="description", path="ChargeItemDefinition.description", description="The description of the charge item definition", type="string" )
3224  public static final String SP_DESCRIPTION = "description";
3225 /**
3226   * <b>Fluent Client</b> search parameter constant for <b>description</b>
3227   * <p>
3228   * Description: <b>The description of the charge item definition</b><br>
3229   * Type: <b>string</b><br>
3230   * Path: <b>ChargeItemDefinition.description</b><br>
3231   * </p>
3232   */
3233  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
3234
3235 /**
3236   * Search parameter: <b>effective</b>
3237   * <p>
3238   * Description: <b>The time during which the charge item definition is intended to be in use</b><br>
3239   * Type: <b>date</b><br>
3240   * Path: <b>ChargeItemDefinition.effectivePeriod</b><br>
3241   * </p>
3242   */
3243  @SearchParamDefinition(name="effective", path="ChargeItemDefinition.effectivePeriod", description="The time during which the charge item definition is intended to be in use", type="date" )
3244  public static final String SP_EFFECTIVE = "effective";
3245 /**
3246   * <b>Fluent Client</b> search parameter constant for <b>effective</b>
3247   * <p>
3248   * Description: <b>The time during which the charge item definition is intended to be in use</b><br>
3249   * Type: <b>date</b><br>
3250   * Path: <b>ChargeItemDefinition.effectivePeriod</b><br>
3251   * </p>
3252   */
3253  public static final ca.uhn.fhir.rest.gclient.DateClientParam EFFECTIVE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_EFFECTIVE);
3254
3255 /**
3256   * Search parameter: <b>identifier</b>
3257   * <p>
3258   * Description: <b>External identifier for the charge item definition</b><br>
3259   * Type: <b>token</b><br>
3260   * Path: <b>ChargeItemDefinition.identifier</b><br>
3261   * </p>
3262   */
3263  @SearchParamDefinition(name="identifier", path="ChargeItemDefinition.identifier", description="External identifier for the charge item definition", type="token" )
3264  public static final String SP_IDENTIFIER = "identifier";
3265 /**
3266   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3267   * <p>
3268   * Description: <b>External identifier for the charge item definition</b><br>
3269   * Type: <b>token</b><br>
3270   * Path: <b>ChargeItemDefinition.identifier</b><br>
3271   * </p>
3272   */
3273  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3274
3275 /**
3276   * Search parameter: <b>jurisdiction</b>
3277   * <p>
3278   * Description: <b>Intended jurisdiction for the charge item definition</b><br>
3279   * Type: <b>token</b><br>
3280   * Path: <b>ChargeItemDefinition.jurisdiction</b><br>
3281   * </p>
3282   */
3283  @SearchParamDefinition(name="jurisdiction", path="ChargeItemDefinition.jurisdiction", description="Intended jurisdiction for the charge item definition", type="token" )
3284  public static final String SP_JURISDICTION = "jurisdiction";
3285 /**
3286   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
3287   * <p>
3288   * Description: <b>Intended jurisdiction for the charge item definition</b><br>
3289   * Type: <b>token</b><br>
3290   * Path: <b>ChargeItemDefinition.jurisdiction</b><br>
3291   * </p>
3292   */
3293  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
3294
3295 /**
3296   * Search parameter: <b>publisher</b>
3297   * <p>
3298   * Description: <b>Name of the publisher of the charge item definition</b><br>
3299   * Type: <b>string</b><br>
3300   * Path: <b>ChargeItemDefinition.publisher</b><br>
3301   * </p>
3302   */
3303  @SearchParamDefinition(name="publisher", path="ChargeItemDefinition.publisher", description="Name of the publisher of the charge item definition", type="string" )
3304  public static final String SP_PUBLISHER = "publisher";
3305 /**
3306   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
3307   * <p>
3308   * Description: <b>Name of the publisher of the charge item definition</b><br>
3309   * Type: <b>string</b><br>
3310   * Path: <b>ChargeItemDefinition.publisher</b><br>
3311   * </p>
3312   */
3313  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
3314
3315 /**
3316   * Search parameter: <b>status</b>
3317   * <p>
3318   * Description: <b>The current status of the charge item definition</b><br>
3319   * Type: <b>token</b><br>
3320   * Path: <b>ChargeItemDefinition.status</b><br>
3321   * </p>
3322   */
3323  @SearchParamDefinition(name="status", path="ChargeItemDefinition.status", description="The current status of the charge item definition", type="token" )
3324  public static final String SP_STATUS = "status";
3325 /**
3326   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3327   * <p>
3328   * Description: <b>The current status of the charge item definition</b><br>
3329   * Type: <b>token</b><br>
3330   * Path: <b>ChargeItemDefinition.status</b><br>
3331   * </p>
3332   */
3333  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3334
3335 /**
3336   * Search parameter: <b>title</b>
3337   * <p>
3338   * Description: <b>The human-friendly name of the charge item definition</b><br>
3339   * Type: <b>string</b><br>
3340   * Path: <b>ChargeItemDefinition.title</b><br>
3341   * </p>
3342   */
3343  @SearchParamDefinition(name="title", path="ChargeItemDefinition.title", description="The human-friendly name of the charge item definition", type="string" )
3344  public static final String SP_TITLE = "title";
3345 /**
3346   * <b>Fluent Client</b> search parameter constant for <b>title</b>
3347   * <p>
3348   * Description: <b>The human-friendly name of the charge item definition</b><br>
3349   * Type: <b>string</b><br>
3350   * Path: <b>ChargeItemDefinition.title</b><br>
3351   * </p>
3352   */
3353  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
3354
3355 /**
3356   * Search parameter: <b>url</b>
3357   * <p>
3358   * Description: <b>The uri that identifies the charge item definition</b><br>
3359   * Type: <b>uri</b><br>
3360   * Path: <b>ChargeItemDefinition.url</b><br>
3361   * </p>
3362   */
3363  @SearchParamDefinition(name="url", path="ChargeItemDefinition.url", description="The uri that identifies the charge item definition", type="uri" )
3364  public static final String SP_URL = "url";
3365 /**
3366   * <b>Fluent Client</b> search parameter constant for <b>url</b>
3367   * <p>
3368   * Description: <b>The uri that identifies the charge item definition</b><br>
3369   * Type: <b>uri</b><br>
3370   * Path: <b>ChargeItemDefinition.url</b><br>
3371   * </p>
3372   */
3373  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
3374
3375 /**
3376   * Search parameter: <b>version</b>
3377   * <p>
3378   * Description: <b>The business version of the charge item definition</b><br>
3379   * Type: <b>token</b><br>
3380   * Path: <b>ChargeItemDefinition.version</b><br>
3381   * </p>
3382   */
3383  @SearchParamDefinition(name="version", path="ChargeItemDefinition.version", description="The business version of the charge item definition", type="token" )
3384  public static final String SP_VERSION = "version";
3385 /**
3386   * <b>Fluent Client</b> search parameter constant for <b>version</b>
3387   * <p>
3388   * Description: <b>The business version of the charge item definition</b><br>
3389   * Type: <b>token</b><br>
3390   * Path: <b>ChargeItemDefinition.version</b><br>
3391   * </p>
3392   */
3393  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
3394
3395
3396}
3397