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