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