001package org.hl7.fhir.r4b.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, Dec 31, 2021 05:58+1100 for FHIR v4.3.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import java.math.*;
038import org.hl7.fhir.utilities.Utilities;
039import org.hl7.fhir.r4b.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 DomainResource {
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 codes or product types 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}, 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      protected void listChildren(List<Property> children) {
2326        super.listChildren(children);
2327        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));
2328        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));
2329        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));
2330        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the charge item definition.", 0, 1, title));
2331        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));
2332        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));
2333        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));
2334        children.add(new Property("status", "code", "The current state of the ChargeItemDefinition.", 0, 1, status));
2335        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));
2336        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));
2337        children.add(new Property("publisher", "string", "The name of the organization or individual that published the charge item definition.", 0, 1, publisher));
2338        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));
2339        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));
2340        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));
2341        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));
2342        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));
2343        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));
2344        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));
2345        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));
2346        children.add(new Property("code", "CodeableConcept", "The defined billing details in this resource pertain to the given billing code.", 0, 1, code));
2347        children.add(new Property("instance", "Reference(Medication|Substance|Device)", "The defined billing details in this resource pertain to the given product instance(s).", 0, java.lang.Integer.MAX_VALUE, instance));
2348        children.add(new Property("applicability", "", "Expressions that describe applicability criteria for the billing code.", 0, java.lang.Integer.MAX_VALUE, applicability));
2349        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));
2350      }
2351
2352      @Override
2353      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2354        switch (_hash) {
2355        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);
2356        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);
2357        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);
2358        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the charge item definition.", 0, 1, title);
2359        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);
2360        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);
2361        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);
2362        case -892481550: /*status*/  return new Property("status", "code", "The current state of the ChargeItemDefinition.", 0, 1, status);
2363        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);
2364        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);
2365        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the charge item definition.", 0, 1, publisher);
2366        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);
2367        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);
2368        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);
2369        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);
2370        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);
2371        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);
2372        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);
2373        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);
2374        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The defined billing details in this resource pertain to the given billing code.", 0, 1, code);
2375        case 555127957: /*instance*/  return new Property("instance", "Reference(Medication|Substance|Device)", "The defined billing details in this resource pertain to the given product instance(s).", 0, java.lang.Integer.MAX_VALUE, instance);
2376        case -1526770491: /*applicability*/  return new Property("applicability", "", "Expressions that describe applicability criteria for the billing code.", 0, java.lang.Integer.MAX_VALUE, applicability);
2377        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);
2378        default: return super.getNamedProperty(_hash, _name, _checkValid);
2379        }
2380
2381      }
2382
2383      @Override
2384      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2385        switch (hash) {
2386        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
2387        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2388        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
2389        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
2390        case -1076333435: /*derivedFromUri*/ return this.derivedFromUri == null ? new Base[0] : this.derivedFromUri.toArray(new Base[this.derivedFromUri.size()]); // UriType
2391        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // CanonicalType
2392        case -430332865: /*replaces*/ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // CanonicalType
2393        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
2394        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
2395        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2396        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
2397        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2398        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2399        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
2400        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
2401        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
2402        case 223539345: /*approvalDate*/ return this.approvalDate == null ? new Base[0] : new Base[] {this.approvalDate}; // DateType
2403        case -1687512484: /*lastReviewDate*/ return this.lastReviewDate == null ? new Base[0] : new Base[] {this.lastReviewDate}; // DateType
2404        case -403934648: /*effectivePeriod*/ return this.effectivePeriod == null ? new Base[0] : new Base[] {this.effectivePeriod}; // Period
2405        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
2406        case 555127957: /*instance*/ return this.instance == null ? new Base[0] : this.instance.toArray(new Base[this.instance.size()]); // Reference
2407        case -1526770491: /*applicability*/ return this.applicability == null ? new Base[0] : this.applicability.toArray(new Base[this.applicability.size()]); // ChargeItemDefinitionApplicabilityComponent
2408        case -1041594966: /*propertyGroup*/ return this.propertyGroup == null ? new Base[0] : this.propertyGroup.toArray(new Base[this.propertyGroup.size()]); // ChargeItemDefinitionPropertyGroupComponent
2409        default: return super.getProperty(hash, name, checkValid);
2410        }
2411
2412      }
2413
2414      @Override
2415      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2416        switch (hash) {
2417        case 116079: // url
2418          this.url = TypeConvertor.castToUri(value); // UriType
2419          return value;
2420        case -1618432855: // identifier
2421          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
2422          return value;
2423        case 351608024: // version
2424          this.version = TypeConvertor.castToString(value); // StringType
2425          return value;
2426        case 110371416: // title
2427          this.title = TypeConvertor.castToString(value); // StringType
2428          return value;
2429        case -1076333435: // derivedFromUri
2430          this.getDerivedFromUri().add(TypeConvertor.castToUri(value)); // UriType
2431          return value;
2432        case -995410646: // partOf
2433          this.getPartOf().add(TypeConvertor.castToCanonical(value)); // CanonicalType
2434          return value;
2435        case -430332865: // replaces
2436          this.getReplaces().add(TypeConvertor.castToCanonical(value)); // CanonicalType
2437          return value;
2438        case -892481550: // status
2439          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2440          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2441          return value;
2442        case -404562712: // experimental
2443          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
2444          return value;
2445        case 3076014: // date
2446          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
2447          return value;
2448        case 1447404028: // publisher
2449          this.publisher = TypeConvertor.castToString(value); // StringType
2450          return value;
2451        case 951526432: // contact
2452          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
2453          return value;
2454        case -1724546052: // description
2455          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2456          return value;
2457        case -669707736: // useContext
2458          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
2459          return value;
2460        case -507075711: // jurisdiction
2461          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2462          return value;
2463        case 1522889671: // copyright
2464          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
2465          return value;
2466        case 223539345: // approvalDate
2467          this.approvalDate = TypeConvertor.castToDate(value); // DateType
2468          return value;
2469        case -1687512484: // lastReviewDate
2470          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
2471          return value;
2472        case -403934648: // effectivePeriod
2473          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
2474          return value;
2475        case 3059181: // code
2476          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2477          return value;
2478        case 555127957: // instance
2479          this.getInstance().add(TypeConvertor.castToReference(value)); // Reference
2480          return value;
2481        case -1526770491: // applicability
2482          this.getApplicability().add((ChargeItemDefinitionApplicabilityComponent) value); // ChargeItemDefinitionApplicabilityComponent
2483          return value;
2484        case -1041594966: // propertyGroup
2485          this.getPropertyGroup().add((ChargeItemDefinitionPropertyGroupComponent) value); // ChargeItemDefinitionPropertyGroupComponent
2486          return value;
2487        default: return super.setProperty(hash, name, value);
2488        }
2489
2490      }
2491
2492      @Override
2493      public Base setProperty(String name, Base value) throws FHIRException {
2494        if (name.equals("url")) {
2495          this.url = TypeConvertor.castToUri(value); // UriType
2496        } else if (name.equals("identifier")) {
2497          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
2498        } else if (name.equals("version")) {
2499          this.version = TypeConvertor.castToString(value); // StringType
2500        } else if (name.equals("title")) {
2501          this.title = TypeConvertor.castToString(value); // StringType
2502        } else if (name.equals("derivedFromUri")) {
2503          this.getDerivedFromUri().add(TypeConvertor.castToUri(value));
2504        } else if (name.equals("partOf")) {
2505          this.getPartOf().add(TypeConvertor.castToCanonical(value));
2506        } else if (name.equals("replaces")) {
2507          this.getReplaces().add(TypeConvertor.castToCanonical(value));
2508        } else if (name.equals("status")) {
2509          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2510          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2511        } else if (name.equals("experimental")) {
2512          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
2513        } else if (name.equals("date")) {
2514          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
2515        } else if (name.equals("publisher")) {
2516          this.publisher = TypeConvertor.castToString(value); // StringType
2517        } else if (name.equals("contact")) {
2518          this.getContact().add(TypeConvertor.castToContactDetail(value));
2519        } else if (name.equals("description")) {
2520          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2521        } else if (name.equals("useContext")) {
2522          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
2523        } else if (name.equals("jurisdiction")) {
2524          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
2525        } else if (name.equals("copyright")) {
2526          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
2527        } else if (name.equals("approvalDate")) {
2528          this.approvalDate = TypeConvertor.castToDate(value); // DateType
2529        } else if (name.equals("lastReviewDate")) {
2530          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
2531        } else if (name.equals("effectivePeriod")) {
2532          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
2533        } else if (name.equals("code")) {
2534          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2535        } else if (name.equals("instance")) {
2536          this.getInstance().add(TypeConvertor.castToReference(value));
2537        } else if (name.equals("applicability")) {
2538          this.getApplicability().add((ChargeItemDefinitionApplicabilityComponent) value);
2539        } else if (name.equals("propertyGroup")) {
2540          this.getPropertyGroup().add((ChargeItemDefinitionPropertyGroupComponent) value);
2541        } else
2542          return super.setProperty(name, value);
2543        return value;
2544      }
2545
2546      @Override
2547      public Base makeProperty(int hash, String name) throws FHIRException {
2548        switch (hash) {
2549        case 116079:  return getUrlElement();
2550        case -1618432855:  return addIdentifier(); 
2551        case 351608024:  return getVersionElement();
2552        case 110371416:  return getTitleElement();
2553        case -1076333435:  return addDerivedFromUriElement();
2554        case -995410646:  return addPartOfElement();
2555        case -430332865:  return addReplacesElement();
2556        case -892481550:  return getStatusElement();
2557        case -404562712:  return getExperimentalElement();
2558        case 3076014:  return getDateElement();
2559        case 1447404028:  return getPublisherElement();
2560        case 951526432:  return addContact(); 
2561        case -1724546052:  return getDescriptionElement();
2562        case -669707736:  return addUseContext(); 
2563        case -507075711:  return addJurisdiction(); 
2564        case 1522889671:  return getCopyrightElement();
2565        case 223539345:  return getApprovalDateElement();
2566        case -1687512484:  return getLastReviewDateElement();
2567        case -403934648:  return getEffectivePeriod();
2568        case 3059181:  return getCode();
2569        case 555127957:  return addInstance(); 
2570        case -1526770491:  return addApplicability(); 
2571        case -1041594966:  return addPropertyGroup(); 
2572        default: return super.makeProperty(hash, name);
2573        }
2574
2575      }
2576
2577      @Override
2578      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2579        switch (hash) {
2580        case 116079: /*url*/ return new String[] {"uri"};
2581        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2582        case 351608024: /*version*/ return new String[] {"string"};
2583        case 110371416: /*title*/ return new String[] {"string"};
2584        case -1076333435: /*derivedFromUri*/ return new String[] {"uri"};
2585        case -995410646: /*partOf*/ return new String[] {"canonical"};
2586        case -430332865: /*replaces*/ return new String[] {"canonical"};
2587        case -892481550: /*status*/ return new String[] {"code"};
2588        case -404562712: /*experimental*/ return new String[] {"boolean"};
2589        case 3076014: /*date*/ return new String[] {"dateTime"};
2590        case 1447404028: /*publisher*/ return new String[] {"string"};
2591        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
2592        case -1724546052: /*description*/ return new String[] {"markdown"};
2593        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
2594        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
2595        case 1522889671: /*copyright*/ return new String[] {"markdown"};
2596        case 223539345: /*approvalDate*/ return new String[] {"date"};
2597        case -1687512484: /*lastReviewDate*/ return new String[] {"date"};
2598        case -403934648: /*effectivePeriod*/ return new String[] {"Period"};
2599        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2600        case 555127957: /*instance*/ return new String[] {"Reference"};
2601        case -1526770491: /*applicability*/ return new String[] {};
2602        case -1041594966: /*propertyGroup*/ return new String[] {};
2603        default: return super.getTypesForProperty(hash, name);
2604        }
2605
2606      }
2607
2608      @Override
2609      public Base addChild(String name) throws FHIRException {
2610        if (name.equals("url")) {
2611          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.url");
2612        }
2613        else if (name.equals("identifier")) {
2614          return addIdentifier();
2615        }
2616        else if (name.equals("version")) {
2617          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.version");
2618        }
2619        else if (name.equals("title")) {
2620          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.title");
2621        }
2622        else if (name.equals("derivedFromUri")) {
2623          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.derivedFromUri");
2624        }
2625        else if (name.equals("partOf")) {
2626          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.partOf");
2627        }
2628        else if (name.equals("replaces")) {
2629          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.replaces");
2630        }
2631        else if (name.equals("status")) {
2632          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.status");
2633        }
2634        else if (name.equals("experimental")) {
2635          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.experimental");
2636        }
2637        else if (name.equals("date")) {
2638          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.date");
2639        }
2640        else if (name.equals("publisher")) {
2641          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.publisher");
2642        }
2643        else if (name.equals("contact")) {
2644          return addContact();
2645        }
2646        else if (name.equals("description")) {
2647          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.description");
2648        }
2649        else if (name.equals("useContext")) {
2650          return addUseContext();
2651        }
2652        else if (name.equals("jurisdiction")) {
2653          return addJurisdiction();
2654        }
2655        else if (name.equals("copyright")) {
2656          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.copyright");
2657        }
2658        else if (name.equals("approvalDate")) {
2659          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.approvalDate");
2660        }
2661        else if (name.equals("lastReviewDate")) {
2662          throw new FHIRException("Cannot call addChild on a primitive type ChargeItemDefinition.lastReviewDate");
2663        }
2664        else if (name.equals("effectivePeriod")) {
2665          this.effectivePeriod = new Period();
2666          return this.effectivePeriod;
2667        }
2668        else if (name.equals("code")) {
2669          this.code = new CodeableConcept();
2670          return this.code;
2671        }
2672        else if (name.equals("instance")) {
2673          return addInstance();
2674        }
2675        else if (name.equals("applicability")) {
2676          return addApplicability();
2677        }
2678        else if (name.equals("propertyGroup")) {
2679          return addPropertyGroup();
2680        }
2681        else
2682          return super.addChild(name);
2683      }
2684
2685  public String fhirType() {
2686    return "ChargeItemDefinition";
2687
2688  }
2689
2690      public ChargeItemDefinition copy() {
2691        ChargeItemDefinition dst = new ChargeItemDefinition();
2692        copyValues(dst);
2693        return dst;
2694      }
2695
2696      public void copyValues(ChargeItemDefinition dst) {
2697        super.copyValues(dst);
2698        dst.url = url == null ? null : url.copy();
2699        if (identifier != null) {
2700          dst.identifier = new ArrayList<Identifier>();
2701          for (Identifier i : identifier)
2702            dst.identifier.add(i.copy());
2703        };
2704        dst.version = version == null ? null : version.copy();
2705        dst.title = title == null ? null : title.copy();
2706        if (derivedFromUri != null) {
2707          dst.derivedFromUri = new ArrayList<UriType>();
2708          for (UriType i : derivedFromUri)
2709            dst.derivedFromUri.add(i.copy());
2710        };
2711        if (partOf != null) {
2712          dst.partOf = new ArrayList<CanonicalType>();
2713          for (CanonicalType i : partOf)
2714            dst.partOf.add(i.copy());
2715        };
2716        if (replaces != null) {
2717          dst.replaces = new ArrayList<CanonicalType>();
2718          for (CanonicalType i : replaces)
2719            dst.replaces.add(i.copy());
2720        };
2721        dst.status = status == null ? null : status.copy();
2722        dst.experimental = experimental == null ? null : experimental.copy();
2723        dst.date = date == null ? null : date.copy();
2724        dst.publisher = publisher == null ? null : publisher.copy();
2725        if (contact != null) {
2726          dst.contact = new ArrayList<ContactDetail>();
2727          for (ContactDetail i : contact)
2728            dst.contact.add(i.copy());
2729        };
2730        dst.description = description == null ? null : description.copy();
2731        if (useContext != null) {
2732          dst.useContext = new ArrayList<UsageContext>();
2733          for (UsageContext i : useContext)
2734            dst.useContext.add(i.copy());
2735        };
2736        if (jurisdiction != null) {
2737          dst.jurisdiction = new ArrayList<CodeableConcept>();
2738          for (CodeableConcept i : jurisdiction)
2739            dst.jurisdiction.add(i.copy());
2740        };
2741        dst.copyright = copyright == null ? null : copyright.copy();
2742        dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
2743        dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
2744        dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
2745        dst.code = code == null ? null : code.copy();
2746        if (instance != null) {
2747          dst.instance = new ArrayList<Reference>();
2748          for (Reference i : instance)
2749            dst.instance.add(i.copy());
2750        };
2751        if (applicability != null) {
2752          dst.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
2753          for (ChargeItemDefinitionApplicabilityComponent i : applicability)
2754            dst.applicability.add(i.copy());
2755        };
2756        if (propertyGroup != null) {
2757          dst.propertyGroup = new ArrayList<ChargeItemDefinitionPropertyGroupComponent>();
2758          for (ChargeItemDefinitionPropertyGroupComponent i : propertyGroup)
2759            dst.propertyGroup.add(i.copy());
2760        };
2761      }
2762
2763      protected ChargeItemDefinition typedCopy() {
2764        return copy();
2765      }
2766
2767      @Override
2768      public boolean equalsDeep(Base other_) {
2769        if (!super.equalsDeep(other_))
2770          return false;
2771        if (!(other_ instanceof ChargeItemDefinition))
2772          return false;
2773        ChargeItemDefinition o = (ChargeItemDefinition) other_;
2774        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
2775           && compareDeep(title, o.title, true) && compareDeep(derivedFromUri, o.derivedFromUri, true) && compareDeep(partOf, o.partOf, true)
2776           && compareDeep(replaces, o.replaces, true) && compareDeep(status, o.status, true) && compareDeep(experimental, o.experimental, true)
2777           && compareDeep(date, o.date, true) && compareDeep(publisher, o.publisher, true) && compareDeep(contact, o.contact, true)
2778           && compareDeep(description, o.description, true) && compareDeep(useContext, o.useContext, true)
2779           && compareDeep(jurisdiction, o.jurisdiction, true) && compareDeep(copyright, o.copyright, true)
2780           && compareDeep(approvalDate, o.approvalDate, true) && compareDeep(lastReviewDate, o.lastReviewDate, true)
2781           && compareDeep(effectivePeriod, o.effectivePeriod, true) && compareDeep(code, o.code, true) && compareDeep(instance, o.instance, true)
2782           && compareDeep(applicability, o.applicability, true) && compareDeep(propertyGroup, o.propertyGroup, true)
2783          ;
2784      }
2785
2786      @Override
2787      public boolean equalsShallow(Base other_) {
2788        if (!super.equalsShallow(other_))
2789          return false;
2790        if (!(other_ instanceof ChargeItemDefinition))
2791          return false;
2792        ChargeItemDefinition o = (ChargeItemDefinition) other_;
2793        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(title, o.title, true)
2794           && compareValues(derivedFromUri, o.derivedFromUri, true) && compareValues(partOf, o.partOf, true) && compareValues(replaces, o.replaces, true)
2795           && compareValues(status, o.status, true) && compareValues(experimental, o.experimental, true) && compareValues(date, o.date, true)
2796           && compareValues(publisher, o.publisher, true) && compareValues(description, o.description, true) && compareValues(copyright, o.copyright, true)
2797           && compareValues(approvalDate, o.approvalDate, true) && compareValues(lastReviewDate, o.lastReviewDate, true)
2798          ;
2799      }
2800
2801      public boolean isEmpty() {
2802        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, identifier, version
2803          , title, derivedFromUri, partOf, replaces, status, experimental, date, publisher
2804          , contact, description, useContext, jurisdiction, copyright, approvalDate, lastReviewDate
2805          , effectivePeriod, code, instance, applicability, propertyGroup);
2806      }
2807
2808  @Override
2809  public ResourceType getResourceType() {
2810    return ResourceType.ChargeItemDefinition;
2811   }
2812
2813 /**
2814   * Search parameter: <b>context-quantity</b>
2815   * <p>
2816   * Description: <b>A quantity- or range-valued use context assigned to the charge item definition</b><br>
2817   * Type: <b>quantity</b><br>
2818   * Path: <b>(ChargeItemDefinition.useContext.value as Quantity) | (ChargeItemDefinition.useContext.value as Range)</b><br>
2819   * </p>
2820   */
2821  @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" )
2822  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
2823 /**
2824   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
2825   * <p>
2826   * Description: <b>A quantity- or range-valued use context assigned to the charge item definition</b><br>
2827   * Type: <b>quantity</b><br>
2828   * Path: <b>(ChargeItemDefinition.useContext.value as Quantity) | (ChargeItemDefinition.useContext.value as Range)</b><br>
2829   * </p>
2830   */
2831  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
2832
2833 /**
2834   * Search parameter: <b>context-type-quantity</b>
2835   * <p>
2836   * Description: <b>A use context type and quantity- or range-based value assigned to the charge item definition</b><br>
2837   * Type: <b>composite</b><br>
2838   * Path: <b>ChargeItemDefinition.useContext</b><br>
2839   * </p>
2840   */
2841  @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"} )
2842  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
2843 /**
2844   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
2845   * <p>
2846   * Description: <b>A use context type and quantity- or range-based value assigned to the charge item definition</b><br>
2847   * Type: <b>composite</b><br>
2848   * Path: <b>ChargeItemDefinition.useContext</b><br>
2849   * </p>
2850   */
2851  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);
2852
2853 /**
2854   * Search parameter: <b>context-type-value</b>
2855   * <p>
2856   * Description: <b>A use context type and value assigned to the charge item definition</b><br>
2857   * Type: <b>composite</b><br>
2858   * Path: <b>ChargeItemDefinition.useContext</b><br>
2859   * </p>
2860   */
2861  @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"} )
2862  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
2863 /**
2864   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
2865   * <p>
2866   * Description: <b>A use context type and value assigned to the charge item definition</b><br>
2867   * Type: <b>composite</b><br>
2868   * Path: <b>ChargeItemDefinition.useContext</b><br>
2869   * </p>
2870   */
2871  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);
2872
2873 /**
2874   * Search parameter: <b>context-type</b>
2875   * <p>
2876   * Description: <b>A type of use context assigned to the charge item definition</b><br>
2877   * Type: <b>token</b><br>
2878   * Path: <b>ChargeItemDefinition.useContext.code</b><br>
2879   * </p>
2880   */
2881  @SearchParamDefinition(name="context-type", path="ChargeItemDefinition.useContext.code", description="A type of use context assigned to the charge item definition", type="token" )
2882  public static final String SP_CONTEXT_TYPE = "context-type";
2883 /**
2884   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
2885   * <p>
2886   * Description: <b>A type of use context assigned to the charge item definition</b><br>
2887   * Type: <b>token</b><br>
2888   * Path: <b>ChargeItemDefinition.useContext.code</b><br>
2889   * </p>
2890   */
2891  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
2892
2893 /**
2894   * Search parameter: <b>context</b>
2895   * <p>
2896   * Description: <b>A use context assigned to the charge item definition</b><br>
2897   * Type: <b>token</b><br>
2898   * Path: <b>(ChargeItemDefinition.useContext.value as CodeableConcept)</b><br>
2899   * </p>
2900   */
2901  @SearchParamDefinition(name="context", path="(ChargeItemDefinition.useContext.value as CodeableConcept)", description="A use context assigned to the charge item definition", type="token" )
2902  public static final String SP_CONTEXT = "context";
2903 /**
2904   * <b>Fluent Client</b> search parameter constant for <b>context</b>
2905   * <p>
2906   * Description: <b>A use context assigned to the charge item definition</b><br>
2907   * Type: <b>token</b><br>
2908   * Path: <b>(ChargeItemDefinition.useContext.value as CodeableConcept)</b><br>
2909   * </p>
2910   */
2911  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
2912
2913 /**
2914   * Search parameter: <b>date</b>
2915   * <p>
2916   * Description: <b>The charge item definition publication date</b><br>
2917   * Type: <b>date</b><br>
2918   * Path: <b>ChargeItemDefinition.date</b><br>
2919   * </p>
2920   */
2921  @SearchParamDefinition(name="date", path="ChargeItemDefinition.date", description="The charge item definition publication date", type="date" )
2922  public static final String SP_DATE = "date";
2923 /**
2924   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2925   * <p>
2926   * Description: <b>The charge item definition publication date</b><br>
2927   * Type: <b>date</b><br>
2928   * Path: <b>ChargeItemDefinition.date</b><br>
2929   * </p>
2930   */
2931  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2932
2933 /**
2934   * Search parameter: <b>description</b>
2935   * <p>
2936   * Description: <b>The description of the charge item definition</b><br>
2937   * Type: <b>string</b><br>
2938   * Path: <b>ChargeItemDefinition.description</b><br>
2939   * </p>
2940   */
2941  @SearchParamDefinition(name="description", path="ChargeItemDefinition.description", description="The description of the charge item definition", type="string" )
2942  public static final String SP_DESCRIPTION = "description";
2943 /**
2944   * <b>Fluent Client</b> search parameter constant for <b>description</b>
2945   * <p>
2946   * Description: <b>The description of the charge item definition</b><br>
2947   * Type: <b>string</b><br>
2948   * Path: <b>ChargeItemDefinition.description</b><br>
2949   * </p>
2950   */
2951  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
2952
2953 /**
2954   * Search parameter: <b>effective</b>
2955   * <p>
2956   * Description: <b>The time during which the charge item definition is intended to be in use</b><br>
2957   * Type: <b>date</b><br>
2958   * Path: <b>ChargeItemDefinition.effectivePeriod</b><br>
2959   * </p>
2960   */
2961  @SearchParamDefinition(name="effective", path="ChargeItemDefinition.effectivePeriod", description="The time during which the charge item definition is intended to be in use", type="date" )
2962  public static final String SP_EFFECTIVE = "effective";
2963 /**
2964   * <b>Fluent Client</b> search parameter constant for <b>effective</b>
2965   * <p>
2966   * Description: <b>The time during which the charge item definition is intended to be in use</b><br>
2967   * Type: <b>date</b><br>
2968   * Path: <b>ChargeItemDefinition.effectivePeriod</b><br>
2969   * </p>
2970   */
2971  public static final ca.uhn.fhir.rest.gclient.DateClientParam EFFECTIVE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_EFFECTIVE);
2972
2973 /**
2974   * Search parameter: <b>identifier</b>
2975   * <p>
2976   * Description: <b>External identifier for the charge item definition</b><br>
2977   * Type: <b>token</b><br>
2978   * Path: <b>ChargeItemDefinition.identifier</b><br>
2979   * </p>
2980   */
2981  @SearchParamDefinition(name="identifier", path="ChargeItemDefinition.identifier", description="External identifier for the charge item definition", type="token" )
2982  public static final String SP_IDENTIFIER = "identifier";
2983 /**
2984   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2985   * <p>
2986   * Description: <b>External identifier for the charge item definition</b><br>
2987   * Type: <b>token</b><br>
2988   * Path: <b>ChargeItemDefinition.identifier</b><br>
2989   * </p>
2990   */
2991  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2992
2993 /**
2994   * Search parameter: <b>jurisdiction</b>
2995   * <p>
2996   * Description: <b>Intended jurisdiction for the charge item definition</b><br>
2997   * Type: <b>token</b><br>
2998   * Path: <b>ChargeItemDefinition.jurisdiction</b><br>
2999   * </p>
3000   */
3001  @SearchParamDefinition(name="jurisdiction", path="ChargeItemDefinition.jurisdiction", description="Intended jurisdiction for the charge item definition", type="token" )
3002  public static final String SP_JURISDICTION = "jurisdiction";
3003 /**
3004   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
3005   * <p>
3006   * Description: <b>Intended jurisdiction for the charge item definition</b><br>
3007   * Type: <b>token</b><br>
3008   * Path: <b>ChargeItemDefinition.jurisdiction</b><br>
3009   * </p>
3010   */
3011  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
3012
3013 /**
3014   * Search parameter: <b>publisher</b>
3015   * <p>
3016   * Description: <b>Name of the publisher of the charge item definition</b><br>
3017   * Type: <b>string</b><br>
3018   * Path: <b>ChargeItemDefinition.publisher</b><br>
3019   * </p>
3020   */
3021  @SearchParamDefinition(name="publisher", path="ChargeItemDefinition.publisher", description="Name of the publisher of the charge item definition", type="string" )
3022  public static final String SP_PUBLISHER = "publisher";
3023 /**
3024   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
3025   * <p>
3026   * Description: <b>Name of the publisher of the charge item definition</b><br>
3027   * Type: <b>string</b><br>
3028   * Path: <b>ChargeItemDefinition.publisher</b><br>
3029   * </p>
3030   */
3031  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
3032
3033 /**
3034   * Search parameter: <b>status</b>
3035   * <p>
3036   * Description: <b>The current status of the charge item definition</b><br>
3037   * Type: <b>token</b><br>
3038   * Path: <b>ChargeItemDefinition.status</b><br>
3039   * </p>
3040   */
3041  @SearchParamDefinition(name="status", path="ChargeItemDefinition.status", description="The current status of the charge item definition", type="token" )
3042  public static final String SP_STATUS = "status";
3043 /**
3044   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3045   * <p>
3046   * Description: <b>The current status of the charge item definition</b><br>
3047   * Type: <b>token</b><br>
3048   * Path: <b>ChargeItemDefinition.status</b><br>
3049   * </p>
3050   */
3051  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3052
3053 /**
3054   * Search parameter: <b>title</b>
3055   * <p>
3056   * Description: <b>The human-friendly name of the charge item definition</b><br>
3057   * Type: <b>string</b><br>
3058   * Path: <b>ChargeItemDefinition.title</b><br>
3059   * </p>
3060   */
3061  @SearchParamDefinition(name="title", path="ChargeItemDefinition.title", description="The human-friendly name of the charge item definition", type="string" )
3062  public static final String SP_TITLE = "title";
3063 /**
3064   * <b>Fluent Client</b> search parameter constant for <b>title</b>
3065   * <p>
3066   * Description: <b>The human-friendly name of the charge item definition</b><br>
3067   * Type: <b>string</b><br>
3068   * Path: <b>ChargeItemDefinition.title</b><br>
3069   * </p>
3070   */
3071  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
3072
3073 /**
3074   * Search parameter: <b>url</b>
3075   * <p>
3076   * Description: <b>The uri that identifies the charge item definition</b><br>
3077   * Type: <b>uri</b><br>
3078   * Path: <b>ChargeItemDefinition.url</b><br>
3079   * </p>
3080   */
3081  @SearchParamDefinition(name="url", path="ChargeItemDefinition.url", description="The uri that identifies the charge item definition", type="uri" )
3082  public static final String SP_URL = "url";
3083 /**
3084   * <b>Fluent Client</b> search parameter constant for <b>url</b>
3085   * <p>
3086   * Description: <b>The uri that identifies the charge item definition</b><br>
3087   * Type: <b>uri</b><br>
3088   * Path: <b>ChargeItemDefinition.url</b><br>
3089   * </p>
3090   */
3091  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
3092
3093 /**
3094   * Search parameter: <b>version</b>
3095   * <p>
3096   * Description: <b>The business version of the charge item definition</b><br>
3097   * Type: <b>token</b><br>
3098   * Path: <b>ChargeItemDefinition.version</b><br>
3099   * </p>
3100   */
3101  @SearchParamDefinition(name="version", path="ChargeItemDefinition.version", description="The business version of the charge item definition", type="token" )
3102  public static final String SP_VERSION = "version";
3103 /**
3104   * <b>Fluent Client</b> search parameter constant for <b>version</b>
3105   * <p>
3106   * Description: <b>The business version of the charge item definition</b><br>
3107   * Type: <b>token</b><br>
3108   * Path: <b>ChargeItemDefinition.version</b><br>
3109   * </p>
3110   */
3111  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
3112
3113
3114}
3115