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   * @return {@link #applicability} (Expressions that describe applicability
2819   *         criteria for the billing code.)
2820   */
2821  public List<ChargeItemDefinitionApplicabilityComponent> getApplicability() {
2822    if (this.applicability == null)
2823      this.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
2824    return this.applicability;
2825  }
2826
2827  /**
2828   * @return Returns a reference to <code>this</code> for easy method chaining
2829   */
2830  public ChargeItemDefinition setApplicability(List<ChargeItemDefinitionApplicabilityComponent> theApplicability) {
2831    this.applicability = theApplicability;
2832    return this;
2833  }
2834
2835  public boolean hasApplicability() {
2836    if (this.applicability == null)
2837      return false;
2838    for (ChargeItemDefinitionApplicabilityComponent item : this.applicability)
2839      if (!item.isEmpty())
2840        return true;
2841    return false;
2842  }
2843
2844  public ChargeItemDefinitionApplicabilityComponent addApplicability() { // 3
2845    ChargeItemDefinitionApplicabilityComponent t = new ChargeItemDefinitionApplicabilityComponent();
2846    if (this.applicability == null)
2847      this.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
2848    this.applicability.add(t);
2849    return t;
2850  }
2851
2852  public ChargeItemDefinition addApplicability(ChargeItemDefinitionApplicabilityComponent t) { // 3
2853    if (t == null)
2854      return this;
2855    if (this.applicability == null)
2856      this.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
2857    this.applicability.add(t);
2858    return this;
2859  }
2860
2861  /**
2862   * @return The first repetition of repeating field {@link #applicability},
2863   *         creating it if it does not already exist
2864   */
2865  public ChargeItemDefinitionApplicabilityComponent getApplicabilityFirstRep() {
2866    if (getApplicability().isEmpty()) {
2867      addApplicability();
2868    }
2869    return getApplicability().get(0);
2870  }
2871
2872  /**
2873   * @return {@link #propertyGroup} (Group of properties which are applicable
2874   *         under the same conditions. If no applicability rules are established
2875   *         for the group, then all properties always apply.)
2876   */
2877  public List<ChargeItemDefinitionPropertyGroupComponent> getPropertyGroup() {
2878    if (this.propertyGroup == null)
2879      this.propertyGroup = new ArrayList<ChargeItemDefinitionPropertyGroupComponent>();
2880    return this.propertyGroup;
2881  }
2882
2883  /**
2884   * @return Returns a reference to <code>this</code> for easy method chaining
2885   */
2886  public ChargeItemDefinition setPropertyGroup(List<ChargeItemDefinitionPropertyGroupComponent> thePropertyGroup) {
2887    this.propertyGroup = thePropertyGroup;
2888    return this;
2889  }
2890
2891  public boolean hasPropertyGroup() {
2892    if (this.propertyGroup == null)
2893      return false;
2894    for (ChargeItemDefinitionPropertyGroupComponent item : this.propertyGroup)
2895      if (!item.isEmpty())
2896        return true;
2897    return false;
2898  }
2899
2900  public ChargeItemDefinitionPropertyGroupComponent addPropertyGroup() { // 3
2901    ChargeItemDefinitionPropertyGroupComponent t = new ChargeItemDefinitionPropertyGroupComponent();
2902    if (this.propertyGroup == null)
2903      this.propertyGroup = new ArrayList<ChargeItemDefinitionPropertyGroupComponent>();
2904    this.propertyGroup.add(t);
2905    return t;
2906  }
2907
2908  public ChargeItemDefinition addPropertyGroup(ChargeItemDefinitionPropertyGroupComponent t) { // 3
2909    if (t == null)
2910      return this;
2911    if (this.propertyGroup == null)
2912      this.propertyGroup = new ArrayList<ChargeItemDefinitionPropertyGroupComponent>();
2913    this.propertyGroup.add(t);
2914    return this;
2915  }
2916
2917  /**
2918   * @return The first repetition of repeating field {@link #propertyGroup},
2919   *         creating it if it does not already exist
2920   */
2921  public ChargeItemDefinitionPropertyGroupComponent getPropertyGroupFirstRep() {
2922    if (getPropertyGroup().isEmpty()) {
2923      addPropertyGroup();
2924    }
2925    return getPropertyGroup().get(0);
2926  }
2927
2928  protected void listChildren(List<Property> children) {
2929    super.listChildren(children);
2930    children.add(new Property("url", "uri",
2931        "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.",
2932        0, 1, url));
2933    children.add(new Property("identifier", "Identifier",
2934        "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.",
2935        0, java.lang.Integer.MAX_VALUE, identifier));
2936    children.add(new Property("version", "string",
2937        "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.",
2938        0, 1, version));
2939    children.add(new Property("title", "string",
2940        "A short, descriptive, user-friendly title for the charge item definition.", 0, 1, title));
2941    children.add(new Property("derivedFromUri", "uri",
2942        "The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.",
2943        0, java.lang.Integer.MAX_VALUE, derivedFromUri));
2944    children.add(new Property("partOf", "canonical(ChargeItemDefinition)",
2945        "A larger definition of which this particular definition is a component or step.", 0,
2946        java.lang.Integer.MAX_VALUE, partOf));
2947    children.add(new Property("replaces", "canonical(ChargeItemDefinition)",
2948        "As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.",
2949        0, java.lang.Integer.MAX_VALUE, replaces));
2950    children.add(new Property("status", "code", "The current state of the ChargeItemDefinition.", 0, 1, status));
2951    children.add(new Property("experimental", "boolean",
2952        "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.",
2953        0, 1, experimental));
2954    children.add(new Property("date", "dateTime",
2955        "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.",
2956        0, 1, date));
2957    children.add(new Property("publisher", "string",
2958        "The name of the organization or individual that published the charge item definition.", 0, 1, publisher));
2959    children.add(new Property("contact", "ContactDetail",
2960        "Contact details to assist a user in finding and communicating with the publisher.", 0,
2961        java.lang.Integer.MAX_VALUE, contact));
2962    children.add(new Property("description", "markdown",
2963        "A free text natural language description of the charge item definition from a consumer's perspective.", 0, 1,
2964        description));
2965    children.add(new Property("useContext", "UsageContext",
2966        "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.",
2967        0, java.lang.Integer.MAX_VALUE, useContext));
2968    children.add(new Property("jurisdiction", "CodeableConcept",
2969        "A legal or geographic region in which the charge item definition is intended to be used.", 0,
2970        java.lang.Integer.MAX_VALUE, jurisdiction));
2971    children.add(new Property("copyright", "markdown",
2972        "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.",
2973        0, 1, copyright));
2974    children.add(new Property("approvalDate", "date",
2975        "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.",
2976        0, 1, approvalDate));
2977    children.add(new Property("lastReviewDate", "date",
2978        "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.",
2979        0, 1, lastReviewDate));
2980    children.add(new Property("effectivePeriod", "Period",
2981        "The period during which the charge item definition content was or is planned to be in active use.", 0, 1,
2982        effectivePeriod));
2983    children.add(new Property("code", "CodeableConcept",
2984        "The defined billing details in this resource pertain to the given billing code.", 0, 1, code));
2985    children.add(new Property("instance", "Reference(Medication|Substance|Device)",
2986        "The defined billing details in this resource pertain to the given product instance(s).", 0,
2987        java.lang.Integer.MAX_VALUE, instance));
2988    children
2989        .add(new Property("applicability", "", "Expressions that describe applicability criteria for the billing code.",
2990            0, java.lang.Integer.MAX_VALUE, applicability));
2991    children.add(new Property("propertyGroup", "",
2992        "Group of properties which are applicable under the same conditions. If no applicability rules are established for the group, then all properties always apply.",
2993        0, java.lang.Integer.MAX_VALUE, propertyGroup));
2994  }
2995
2996  @Override
2997  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2998    switch (_hash) {
2999    case 116079:
3000      /* url */ return new Property("url", "uri",
3001          "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.",
3002          0, 1, url);
3003    case -1618432855:
3004      /* identifier */ return new Property("identifier", "Identifier",
3005          "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.",
3006          0, java.lang.Integer.MAX_VALUE, identifier);
3007    case 351608024:
3008      /* version */ return new Property("version", "string",
3009          "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.",
3010          0, 1, version);
3011    case 110371416:
3012      /* title */ return new Property("title", "string",
3013          "A short, descriptive, user-friendly title for the charge item definition.", 0, 1, title);
3014    case -1076333435:
3015      /* derivedFromUri */ return new Property("derivedFromUri", "uri",
3016          "The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.",
3017          0, java.lang.Integer.MAX_VALUE, derivedFromUri);
3018    case -995410646:
3019      /* partOf */ return new Property("partOf", "canonical(ChargeItemDefinition)",
3020          "A larger definition of which this particular definition is a component or step.", 0,
3021          java.lang.Integer.MAX_VALUE, partOf);
3022    case -430332865:
3023      /* replaces */ return new Property("replaces", "canonical(ChargeItemDefinition)",
3024          "As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.",
3025          0, java.lang.Integer.MAX_VALUE, replaces);
3026    case -892481550:
3027      /* status */ return new Property("status", "code", "The current state of the ChargeItemDefinition.", 0, 1,
3028          status);
3029    case -404562712:
3030      /* experimental */ return new Property("experimental", "boolean",
3031          "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.",
3032          0, 1, experimental);
3033    case 3076014:
3034      /* date */ return new Property("date", "dateTime",
3035          "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.",
3036          0, 1, date);
3037    case 1447404028:
3038      /* publisher */ return new Property("publisher", "string",
3039          "The name of the organization or individual that published the charge item definition.", 0, 1, publisher);
3040    case 951526432:
3041      /* contact */ return new Property("contact", "ContactDetail",
3042          "Contact details to assist a user in finding and communicating with the publisher.", 0,
3043          java.lang.Integer.MAX_VALUE, contact);
3044    case -1724546052:
3045      /* description */ return new Property("description", "markdown",
3046          "A free text natural language description of the charge item definition from a consumer's perspective.", 0, 1,
3047          description);
3048    case -669707736:
3049      /* useContext */ return new Property("useContext", "UsageContext",
3050          "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.",
3051          0, java.lang.Integer.MAX_VALUE, useContext);
3052    case -507075711:
3053      /* jurisdiction */ return new Property("jurisdiction", "CodeableConcept",
3054          "A legal or geographic region in which the charge item definition is intended to be used.", 0,
3055          java.lang.Integer.MAX_VALUE, jurisdiction);
3056    case 1522889671:
3057      /* copyright */ return new Property("copyright", "markdown",
3058          "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.",
3059          0, 1, copyright);
3060    case 223539345:
3061      /* approvalDate */ return new Property("approvalDate", "date",
3062          "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.",
3063          0, 1, approvalDate);
3064    case -1687512484:
3065      /* lastReviewDate */ return new Property("lastReviewDate", "date",
3066          "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.",
3067          0, 1, lastReviewDate);
3068    case -403934648:
3069      /* effectivePeriod */ return new Property("effectivePeriod", "Period",
3070          "The period during which the charge item definition content was or is planned to be in active use.", 0, 1,
3071          effectivePeriod);
3072    case 3059181:
3073      /* code */ return new Property("code", "CodeableConcept",
3074          "The defined billing details in this resource pertain to the given billing code.", 0, 1, code);
3075    case 555127957:
3076      /* instance */ return new Property("instance", "Reference(Medication|Substance|Device)",
3077          "The defined billing details in this resource pertain to the given product instance(s).", 0,
3078          java.lang.Integer.MAX_VALUE, instance);
3079    case -1526770491:
3080      /* applicability */ return new Property("applicability", "",
3081          "Expressions that describe applicability criteria for the billing code.", 0, java.lang.Integer.MAX_VALUE,
3082          applicability);
3083    case -1041594966:
3084      /* propertyGroup */ return new Property("propertyGroup", "",
3085          "Group of properties which are applicable under the same conditions. If no applicability rules are established for the group, then all properties always apply.",
3086          0, java.lang.Integer.MAX_VALUE, propertyGroup);
3087    default:
3088      return super.getNamedProperty(_hash, _name, _checkValid);
3089    }
3090
3091  }
3092
3093  @Override
3094  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3095    switch (hash) {
3096    case 116079:
3097      /* url */ return this.url == null ? new Base[0] : new Base[] { this.url }; // UriType
3098    case -1618432855:
3099      /* identifier */ return this.identifier == null ? new Base[0]
3100          : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3101    case 351608024:
3102      /* version */ return this.version == null ? new Base[0] : new Base[] { this.version }; // StringType
3103    case 110371416:
3104      /* title */ return this.title == null ? new Base[0] : new Base[] { this.title }; // StringType
3105    case -1076333435:
3106      /* derivedFromUri */ return this.derivedFromUri == null ? new Base[0]
3107          : this.derivedFromUri.toArray(new Base[this.derivedFromUri.size()]); // UriType
3108    case -995410646:
3109      /* partOf */ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // CanonicalType
3110    case -430332865:
3111      /* replaces */ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // CanonicalType
3112    case -892481550:
3113      /* status */ return this.status == null ? new Base[0] : new Base[] { this.status }; // Enumeration<PublicationStatus>
3114    case -404562712:
3115      /* experimental */ return this.experimental == null ? new Base[0] : new Base[] { this.experimental }; // BooleanType
3116    case 3076014:
3117      /* date */ return this.date == null ? new Base[0] : new Base[] { this.date }; // DateTimeType
3118    case 1447404028:
3119      /* publisher */ return this.publisher == null ? new Base[0] : new Base[] { this.publisher }; // StringType
3120    case 951526432:
3121      /* contact */ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
3122    case -1724546052:
3123      /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // MarkdownType
3124    case -669707736:
3125      /* useContext */ return this.useContext == null ? new Base[0]
3126          : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
3127    case -507075711:
3128      /* jurisdiction */ return this.jurisdiction == null ? new Base[0]
3129          : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
3130    case 1522889671:
3131      /* copyright */ return this.copyright == null ? new Base[0] : new Base[] { this.copyright }; // MarkdownType
3132    case 223539345:
3133      /* approvalDate */ return this.approvalDate == null ? new Base[0] : new Base[] { this.approvalDate }; // DateType
3134    case -1687512484:
3135      /* lastReviewDate */ return this.lastReviewDate == null ? new Base[0] : new Base[] { this.lastReviewDate }; // DateType
3136    case -403934648:
3137      /* effectivePeriod */ return this.effectivePeriod == null ? new Base[0] : new Base[] { this.effectivePeriod }; // Period
3138    case 3059181:
3139      /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeableConcept
3140    case 555127957:
3141      /* instance */ return this.instance == null ? new Base[0] : this.instance.toArray(new Base[this.instance.size()]); // Reference
3142    case -1526770491:
3143      /* applicability */ return this.applicability == null ? new Base[0]
3144          : this.applicability.toArray(new Base[this.applicability.size()]); // ChargeItemDefinitionApplicabilityComponent
3145    case -1041594966:
3146      /* propertyGroup */ return this.propertyGroup == null ? new Base[0]
3147          : this.propertyGroup.toArray(new Base[this.propertyGroup.size()]); // ChargeItemDefinitionPropertyGroupComponent
3148    default:
3149      return super.getProperty(hash, name, checkValid);
3150    }
3151
3152  }
3153
3154  @Override
3155  public Base setProperty(int hash, String name, Base value) throws FHIRException {
3156    switch (hash) {
3157    case 116079: // url
3158      this.url = castToUri(value); // UriType
3159      return value;
3160    case -1618432855: // identifier
3161      this.getIdentifier().add(castToIdentifier(value)); // Identifier
3162      return value;
3163    case 351608024: // version
3164      this.version = castToString(value); // StringType
3165      return value;
3166    case 110371416: // title
3167      this.title = castToString(value); // StringType
3168      return value;
3169    case -1076333435: // derivedFromUri
3170      this.getDerivedFromUri().add(castToUri(value)); // UriType
3171      return value;
3172    case -995410646: // partOf
3173      this.getPartOf().add(castToCanonical(value)); // CanonicalType
3174      return value;
3175    case -430332865: // replaces
3176      this.getReplaces().add(castToCanonical(value)); // CanonicalType
3177      return value;
3178    case -892481550: // status
3179      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
3180      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3181      return value;
3182    case -404562712: // experimental
3183      this.experimental = castToBoolean(value); // BooleanType
3184      return value;
3185    case 3076014: // date
3186      this.date = castToDateTime(value); // DateTimeType
3187      return value;
3188    case 1447404028: // publisher
3189      this.publisher = castToString(value); // StringType
3190      return value;
3191    case 951526432: // contact
3192      this.getContact().add(castToContactDetail(value)); // ContactDetail
3193      return value;
3194    case -1724546052: // description
3195      this.description = castToMarkdown(value); // MarkdownType
3196      return value;
3197    case -669707736: // useContext
3198      this.getUseContext().add(castToUsageContext(value)); // UsageContext
3199      return value;
3200    case -507075711: // jurisdiction
3201      this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
3202      return value;
3203    case 1522889671: // copyright
3204      this.copyright = castToMarkdown(value); // MarkdownType
3205      return value;
3206    case 223539345: // approvalDate
3207      this.approvalDate = castToDate(value); // DateType
3208      return value;
3209    case -1687512484: // lastReviewDate
3210      this.lastReviewDate = castToDate(value); // DateType
3211      return value;
3212    case -403934648: // effectivePeriod
3213      this.effectivePeriod = castToPeriod(value); // Period
3214      return value;
3215    case 3059181: // code
3216      this.code = castToCodeableConcept(value); // CodeableConcept
3217      return value;
3218    case 555127957: // instance
3219      this.getInstance().add(castToReference(value)); // Reference
3220      return value;
3221    case -1526770491: // applicability
3222      this.getApplicability().add((ChargeItemDefinitionApplicabilityComponent) value); // ChargeItemDefinitionApplicabilityComponent
3223      return value;
3224    case -1041594966: // propertyGroup
3225      this.getPropertyGroup().add((ChargeItemDefinitionPropertyGroupComponent) value); // ChargeItemDefinitionPropertyGroupComponent
3226      return value;
3227    default:
3228      return super.setProperty(hash, name, value);
3229    }
3230
3231  }
3232
3233  @Override
3234  public Base setProperty(String name, Base value) throws FHIRException {
3235    if (name.equals("url")) {
3236      this.url = castToUri(value); // UriType
3237    } else if (name.equals("identifier")) {
3238      this.getIdentifier().add(castToIdentifier(value));
3239    } else if (name.equals("version")) {
3240      this.version = castToString(value); // StringType
3241    } else if (name.equals("title")) {
3242      this.title = castToString(value); // StringType
3243    } else if (name.equals("derivedFromUri")) {
3244      this.getDerivedFromUri().add(castToUri(value));
3245    } else if (name.equals("partOf")) {
3246      this.getPartOf().add(castToCanonical(value));
3247    } else if (name.equals("replaces")) {
3248      this.getReplaces().add(castToCanonical(value));
3249    } else if (name.equals("status")) {
3250      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
3251      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3252    } else if (name.equals("experimental")) {
3253      this.experimental = castToBoolean(value); // BooleanType
3254    } else if (name.equals("date")) {
3255      this.date = castToDateTime(value); // DateTimeType
3256    } else if (name.equals("publisher")) {
3257      this.publisher = castToString(value); // StringType
3258    } else if (name.equals("contact")) {
3259      this.getContact().add(castToContactDetail(value));
3260    } else if (name.equals("description")) {
3261      this.description = castToMarkdown(value); // MarkdownType
3262    } else if (name.equals("useContext")) {
3263      this.getUseContext().add(castToUsageContext(value));
3264    } else if (name.equals("jurisdiction")) {
3265      this.getJurisdiction().add(castToCodeableConcept(value));
3266    } else if (name.equals("copyright")) {
3267      this.copyright = castToMarkdown(value); // MarkdownType
3268    } else if (name.equals("approvalDate")) {
3269      this.approvalDate = castToDate(value); // DateType
3270    } else if (name.equals("lastReviewDate")) {
3271      this.lastReviewDate = castToDate(value); // DateType
3272    } else if (name.equals("effectivePeriod")) {
3273      this.effectivePeriod = castToPeriod(value); // Period
3274    } else if (name.equals("code")) {
3275      this.code = castToCodeableConcept(value); // CodeableConcept
3276    } else if (name.equals("instance")) {
3277      this.getInstance().add(castToReference(value));
3278    } else if (name.equals("applicability")) {
3279      this.getApplicability().add((ChargeItemDefinitionApplicabilityComponent) value);
3280    } else if (name.equals("propertyGroup")) {
3281      this.getPropertyGroup().add((ChargeItemDefinitionPropertyGroupComponent) value);
3282    } else
3283      return super.setProperty(name, value);
3284    return value;
3285  }
3286
3287  @Override
3288  public void removeChild(String name, Base value) throws FHIRException {
3289    if (name.equals("url")) {
3290      this.url = null;
3291    } else if (name.equals("identifier")) {
3292      this.getIdentifier().remove(castToIdentifier(value));
3293    } else if (name.equals("version")) {
3294      this.version = null;
3295    } else if (name.equals("title")) {
3296      this.title = null;
3297    } else if (name.equals("derivedFromUri")) {
3298      this.getDerivedFromUri().remove(castToUri(value));
3299    } else if (name.equals("partOf")) {
3300      this.getPartOf().remove(castToCanonical(value));
3301    } else if (name.equals("replaces")) {
3302      this.getReplaces().remove(castToCanonical(value));
3303    } else if (name.equals("status")) {
3304      this.status = null;
3305    } else if (name.equals("experimental")) {
3306      this.experimental = null;
3307    } else if (name.equals("date")) {
3308      this.date = null;
3309    } else if (name.equals("publisher")) {
3310      this.publisher = null;
3311    } else if (name.equals("contact")) {
3312      this.getContact().remove(castToContactDetail(value));
3313    } else if (name.equals("description")) {
3314      this.description = null;
3315    } else if (name.equals("useContext")) {
3316      this.getUseContext().remove(castToUsageContext(value));
3317    } else if (name.equals("jurisdiction")) {
3318      this.getJurisdiction().remove(castToCodeableConcept(value));
3319    } else if (name.equals("copyright")) {
3320      this.copyright = null;
3321    } else if (name.equals("approvalDate")) {
3322      this.approvalDate = null;
3323    } else if (name.equals("lastReviewDate")) {
3324      this.lastReviewDate = null;
3325    } else if (name.equals("effectivePeriod")) {
3326      this.effectivePeriod = null;
3327    } else if (name.equals("code")) {
3328      this.code = null;
3329    } else if (name.equals("instance")) {
3330      this.getInstance().remove(castToReference(value));
3331    } else if (name.equals("applicability")) {
3332      this.getApplicability().remove((ChargeItemDefinitionApplicabilityComponent) value);
3333    } else if (name.equals("propertyGroup")) {
3334      this.getPropertyGroup().remove((ChargeItemDefinitionPropertyGroupComponent) value);
3335    } else
3336      super.removeChild(name, value);
3337    
3338  }
3339
3340  @Override
3341  public Base makeProperty(int hash, String name) throws FHIRException {
3342    switch (hash) {
3343    case 116079:
3344      return getUrlElement();
3345    case -1618432855:
3346      return addIdentifier();
3347    case 351608024:
3348      return getVersionElement();
3349    case 110371416:
3350      return getTitleElement();
3351    case -1076333435:
3352      return addDerivedFromUriElement();
3353    case -995410646:
3354      return addPartOfElement();
3355    case -430332865:
3356      return addReplacesElement();
3357    case -892481550:
3358      return getStatusElement();
3359    case -404562712:
3360      return getExperimentalElement();
3361    case 3076014:
3362      return getDateElement();
3363    case 1447404028:
3364      return getPublisherElement();
3365    case 951526432:
3366      return addContact();
3367    case -1724546052:
3368      return getDescriptionElement();
3369    case -669707736:
3370      return addUseContext();
3371    case -507075711:
3372      return addJurisdiction();
3373    case 1522889671:
3374      return getCopyrightElement();
3375    case 223539345:
3376      return getApprovalDateElement();
3377    case -1687512484:
3378      return getLastReviewDateElement();
3379    case -403934648:
3380      return getEffectivePeriod();
3381    case 3059181:
3382      return getCode();
3383    case 555127957:
3384      return addInstance();
3385    case -1526770491:
3386      return addApplicability();
3387    case -1041594966:
3388      return addPropertyGroup();
3389    default:
3390      return super.makeProperty(hash, name);
3391    }
3392
3393  }
3394
3395  @Override
3396  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3397    switch (hash) {
3398    case 116079:
3399      /* url */ return new String[] { "uri" };
3400    case -1618432855:
3401      /* identifier */ return new String[] { "Identifier" };
3402    case 351608024:
3403      /* version */ return new String[] { "string" };
3404    case 110371416:
3405      /* title */ return new String[] { "string" };
3406    case -1076333435:
3407      /* derivedFromUri */ return new String[] { "uri" };
3408    case -995410646:
3409      /* partOf */ return new String[] { "canonical" };
3410    case -430332865:
3411      /* replaces */ return new String[] { "canonical" };
3412    case -892481550:
3413      /* status */ return new String[] { "code" };
3414    case -404562712:
3415      /* experimental */ return new String[] { "boolean" };
3416    case 3076014:
3417      /* date */ return new String[] { "dateTime" };
3418    case 1447404028:
3419      /* publisher */ return new String[] { "string" };
3420    case 951526432:
3421      /* contact */ return new String[] { "ContactDetail" };
3422    case -1724546052:
3423      /* description */ return new String[] { "markdown" };
3424    case -669707736:
3425      /* useContext */ return new String[] { "UsageContext" };
3426    case -507075711:
3427      /* jurisdiction */ return new String[] { "CodeableConcept" };
3428    case 1522889671:
3429      /* copyright */ return new String[] { "markdown" };
3430    case 223539345:
3431      /* approvalDate */ return new String[] { "date" };
3432    case -1687512484:
3433      /* lastReviewDate */ return new String[] { "date" };
3434    case -403934648:
3435      /* effectivePeriod */ return new String[] { "Period" };
3436    case 3059181:
3437      /* code */ return new String[] { "CodeableConcept" };
3438    case 555127957:
3439      /* instance */ return new String[] { "Reference" };
3440    case -1526770491:
3441      /* applicability */ return new String[] {};
3442    case -1041594966:
3443      /* propertyGroup */ return new String[] {};
3444    default:
3445      return super.getTypesForProperty(hash, name);
3446    }
3447
3448  }
3449
3450  @Override
3451  public Base addChild(String name) throws FHIRException {
3452    if (name.equals("url")) {
3453      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.url");
3454    } else if (name.equals("identifier")) {
3455      return addIdentifier();
3456    } else if (name.equals("version")) {
3457      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.version");
3458    } else if (name.equals("title")) {
3459      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.title");
3460    } else if (name.equals("derivedFromUri")) {
3461      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.derivedFromUri");
3462    } else if (name.equals("partOf")) {
3463      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.partOf");
3464    } else if (name.equals("replaces")) {
3465      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.replaces");
3466    } else if (name.equals("status")) {
3467      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.status");
3468    } else if (name.equals("experimental")) {
3469      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.experimental");
3470    } else if (name.equals("date")) {
3471      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.date");
3472    } else if (name.equals("publisher")) {
3473      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.publisher");
3474    } else if (name.equals("contact")) {
3475      return addContact();
3476    } else if (name.equals("description")) {
3477      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.description");
3478    } else if (name.equals("useContext")) {
3479      return addUseContext();
3480    } else if (name.equals("jurisdiction")) {
3481      return addJurisdiction();
3482    } else if (name.equals("copyright")) {
3483      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.copyright");
3484    } else if (name.equals("approvalDate")) {
3485      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.approvalDate");
3486    } else if (name.equals("lastReviewDate")) {
3487      throw new FHIRException("Cannot call addChild on a singleton property ChargeItemDefinition.lastReviewDate");
3488    } else if (name.equals("effectivePeriod")) {
3489      this.effectivePeriod = new Period();
3490      return this.effectivePeriod;
3491    } else if (name.equals("code")) {
3492      this.code = new CodeableConcept();
3493      return this.code;
3494    } else if (name.equals("instance")) {
3495      return addInstance();
3496    } else if (name.equals("applicability")) {
3497      return addApplicability();
3498    } else if (name.equals("propertyGroup")) {
3499      return addPropertyGroup();
3500    } else
3501      return super.addChild(name);
3502  }
3503
3504  public String fhirType() {
3505    return "ChargeItemDefinition";
3506
3507  }
3508
3509  public ChargeItemDefinition copy() {
3510    ChargeItemDefinition dst = new ChargeItemDefinition();
3511    copyValues(dst);
3512    return dst;
3513  }
3514
3515  public void copyValues(ChargeItemDefinition dst) {
3516    super.copyValues(dst);
3517    dst.url = url == null ? null : url.copy();
3518    if (identifier != null) {
3519      dst.identifier = new ArrayList<Identifier>();
3520      for (Identifier i : identifier)
3521        dst.identifier.add(i.copy());
3522    }
3523    ;
3524    dst.version = version == null ? null : version.copy();
3525    dst.title = title == null ? null : title.copy();
3526    if (derivedFromUri != null) {
3527      dst.derivedFromUri = new ArrayList<UriType>();
3528      for (UriType i : derivedFromUri)
3529        dst.derivedFromUri.add(i.copy());
3530    }
3531    ;
3532    if (partOf != null) {
3533      dst.partOf = new ArrayList<CanonicalType>();
3534      for (CanonicalType i : partOf)
3535        dst.partOf.add(i.copy());
3536    }
3537    ;
3538    if (replaces != null) {
3539      dst.replaces = new ArrayList<CanonicalType>();
3540      for (CanonicalType i : replaces)
3541        dst.replaces.add(i.copy());
3542    }
3543    ;
3544    dst.status = status == null ? null : status.copy();
3545    dst.experimental = experimental == null ? null : experimental.copy();
3546    dst.date = date == null ? null : date.copy();
3547    dst.publisher = publisher == null ? null : publisher.copy();
3548    if (contact != null) {
3549      dst.contact = new ArrayList<ContactDetail>();
3550      for (ContactDetail i : contact)
3551        dst.contact.add(i.copy());
3552    }
3553    ;
3554    dst.description = description == null ? null : description.copy();
3555    if (useContext != null) {
3556      dst.useContext = new ArrayList<UsageContext>();
3557      for (UsageContext i : useContext)
3558        dst.useContext.add(i.copy());
3559    }
3560    ;
3561    if (jurisdiction != null) {
3562      dst.jurisdiction = new ArrayList<CodeableConcept>();
3563      for (CodeableConcept i : jurisdiction)
3564        dst.jurisdiction.add(i.copy());
3565    }
3566    ;
3567    dst.copyright = copyright == null ? null : copyright.copy();
3568    dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
3569    dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
3570    dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
3571    dst.code = code == null ? null : code.copy();
3572    if (instance != null) {
3573      dst.instance = new ArrayList<Reference>();
3574      for (Reference i : instance)
3575        dst.instance.add(i.copy());
3576    }
3577    ;
3578    if (applicability != null) {
3579      dst.applicability = new ArrayList<ChargeItemDefinitionApplicabilityComponent>();
3580      for (ChargeItemDefinitionApplicabilityComponent i : applicability)
3581        dst.applicability.add(i.copy());
3582    }
3583    ;
3584    if (propertyGroup != null) {
3585      dst.propertyGroup = new ArrayList<ChargeItemDefinitionPropertyGroupComponent>();
3586      for (ChargeItemDefinitionPropertyGroupComponent i : propertyGroup)
3587        dst.propertyGroup.add(i.copy());
3588    }
3589    ;
3590  }
3591
3592  protected ChargeItemDefinition typedCopy() {
3593    return copy();
3594  }
3595
3596  @Override
3597  public boolean equalsDeep(Base other_) {
3598    if (!super.equalsDeep(other_))
3599      return false;
3600    if (!(other_ instanceof ChargeItemDefinition))
3601      return false;
3602    ChargeItemDefinition o = (ChargeItemDefinition) other_;
3603    return compareDeep(identifier, o.identifier, true) && compareDeep(derivedFromUri, o.derivedFromUri, true)
3604        && compareDeep(partOf, o.partOf, true) && compareDeep(replaces, o.replaces, true)
3605        && compareDeep(copyright, o.copyright, true) && compareDeep(approvalDate, o.approvalDate, true)
3606        && compareDeep(lastReviewDate, o.lastReviewDate, true) && compareDeep(effectivePeriod, o.effectivePeriod, true)
3607        && compareDeep(code, o.code, true) && compareDeep(instance, o.instance, true)
3608        && compareDeep(applicability, o.applicability, true) && compareDeep(propertyGroup, o.propertyGroup, true);
3609  }
3610
3611  @Override
3612  public boolean equalsShallow(Base other_) {
3613    if (!super.equalsShallow(other_))
3614      return false;
3615    if (!(other_ instanceof ChargeItemDefinition))
3616      return false;
3617    ChargeItemDefinition o = (ChargeItemDefinition) other_;
3618    return compareValues(derivedFromUri, o.derivedFromUri, true) && compareValues(copyright, o.copyright, true)
3619        && compareValues(approvalDate, o.approvalDate, true) && compareValues(lastReviewDate, o.lastReviewDate, true);
3620  }
3621
3622  public boolean isEmpty() {
3623    return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, derivedFromUri, partOf, replaces,
3624        copyright, approvalDate, lastReviewDate, effectivePeriod, code, instance, applicability, propertyGroup);
3625  }
3626
3627  @Override
3628  public ResourceType getResourceType() {
3629    return ResourceType.ChargeItemDefinition;
3630  }
3631
3632  /**
3633   * Search parameter: <b>date</b>
3634   * <p>
3635   * Description: <b>The charge item definition publication date</b><br>
3636   * Type: <b>date</b><br>
3637   * Path: <b>ChargeItemDefinition.date</b><br>
3638   * </p>
3639   */
3640  @SearchParamDefinition(name = "date", path = "ChargeItemDefinition.date", description = "The charge item definition publication date", type = "date")
3641  public static final String SP_DATE = "date";
3642  /**
3643   * <b>Fluent Client</b> search parameter constant for <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  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(
3651      SP_DATE);
3652
3653  /**
3654   * Search parameter: <b>identifier</b>
3655   * <p>
3656   * Description: <b>External identifier for the charge item definition</b><br>
3657   * Type: <b>token</b><br>
3658   * Path: <b>ChargeItemDefinition.identifier</b><br>
3659   * </p>
3660   */
3661  @SearchParamDefinition(name = "identifier", path = "ChargeItemDefinition.identifier", description = "External identifier for the charge item definition", type = "token")
3662  public static final String SP_IDENTIFIER = "identifier";
3663  /**
3664   * <b>Fluent Client</b> search parameter constant for <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  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3672      SP_IDENTIFIER);
3673
3674  /**
3675   * Search parameter: <b>context-type-value</b>
3676   * <p>
3677   * Description: <b>A use context type and value assigned to the charge item
3678   * definition</b><br>
3679   * Type: <b>composite</b><br>
3680   * Path: <b></b><br>
3681   * </p>
3682   */
3683  @SearchParamDefinition(name = "context-type-value", path = "ChargeItemDefinition.useContext", description = "A use context type and value assigned to the charge item definition", type = "composite", compositeOf = {
3684      "context-type", "context" })
3685  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
3686  /**
3687   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
3688   * <p>
3689   * Description: <b>A use context type and value assigned to the charge item
3690   * definition</b><br>
3691   * Type: <b>composite</b><br>
3692   * Path: <b></b><br>
3693   * </p>
3694   */
3695  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>(
3696      SP_CONTEXT_TYPE_VALUE);
3697
3698  /**
3699   * Search parameter: <b>jurisdiction</b>
3700   * <p>
3701   * Description: <b>Intended jurisdiction for the charge item definition</b><br>
3702   * Type: <b>token</b><br>
3703   * Path: <b>ChargeItemDefinition.jurisdiction</b><br>
3704   * </p>
3705   */
3706  @SearchParamDefinition(name = "jurisdiction", path = "ChargeItemDefinition.jurisdiction", description = "Intended jurisdiction for the charge item definition", type = "token")
3707  public static final String SP_JURISDICTION = "jurisdiction";
3708  /**
3709   * <b>Fluent Client</b> search parameter constant for <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  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3717      SP_JURISDICTION);
3718
3719  /**
3720   * Search parameter: <b>description</b>
3721   * <p>
3722   * Description: <b>The description of the charge item definition</b><br>
3723   * Type: <b>string</b><br>
3724   * Path: <b>ChargeItemDefinition.description</b><br>
3725   * </p>
3726   */
3727  @SearchParamDefinition(name = "description", path = "ChargeItemDefinition.description", description = "The description of the charge item definition", type = "string")
3728  public static final String SP_DESCRIPTION = "description";
3729  /**
3730   * <b>Fluent Client</b> search parameter constant for <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  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(
3738      SP_DESCRIPTION);
3739
3740  /**
3741   * Search parameter: <b>context-type</b>
3742   * <p>
3743   * Description: <b>A type of use context assigned to the charge item
3744   * definition</b><br>
3745   * Type: <b>token</b><br>
3746   * Path: <b>ChargeItemDefinition.useContext.code</b><br>
3747   * </p>
3748   */
3749  @SearchParamDefinition(name = "context-type", path = "ChargeItemDefinition.useContext.code", description = "A type of use context assigned to the charge item definition", type = "token")
3750  public static final String SP_CONTEXT_TYPE = "context-type";
3751  /**
3752   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
3753   * <p>
3754   * Description: <b>A type of use context assigned to the charge item
3755   * definition</b><br>
3756   * Type: <b>token</b><br>
3757   * Path: <b>ChargeItemDefinition.useContext.code</b><br>
3758   * </p>
3759   */
3760  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3761      SP_CONTEXT_TYPE);
3762
3763  /**
3764   * Search parameter: <b>title</b>
3765   * <p>
3766   * Description: <b>The human-friendly name of the charge item definition</b><br>
3767   * Type: <b>string</b><br>
3768   * Path: <b>ChargeItemDefinition.title</b><br>
3769   * </p>
3770   */
3771  @SearchParamDefinition(name = "title", path = "ChargeItemDefinition.title", description = "The human-friendly name of the charge item definition", type = "string")
3772  public static final String SP_TITLE = "title";
3773  /**
3774   * <b>Fluent Client</b> search parameter constant for <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  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(
3782      SP_TITLE);
3783
3784  /**
3785   * Search parameter: <b>version</b>
3786   * <p>
3787   * Description: <b>The business version of the charge item definition</b><br>
3788   * Type: <b>token</b><br>
3789   * Path: <b>ChargeItemDefinition.version</b><br>
3790   * </p>
3791   */
3792  @SearchParamDefinition(name = "version", path = "ChargeItemDefinition.version", description = "The business version of the charge item definition", type = "token")
3793  public static final String SP_VERSION = "version";
3794  /**
3795   * <b>Fluent Client</b> search parameter constant for <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  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3803      SP_VERSION);
3804
3805  /**
3806   * Search parameter: <b>url</b>
3807   * <p>
3808   * Description: <b>The uri that identifies the charge item definition</b><br>
3809   * Type: <b>uri</b><br>
3810   * Path: <b>ChargeItemDefinition.url</b><br>
3811   * </p>
3812   */
3813  @SearchParamDefinition(name = "url", path = "ChargeItemDefinition.url", description = "The uri that identifies the charge item definition", type = "uri")
3814  public static final String SP_URL = "url";
3815  /**
3816   * <b>Fluent Client</b> search parameter constant for <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  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
3824
3825  /**
3826   * Search parameter: <b>context-quantity</b>
3827   * <p>
3828   * Description: <b>A quantity- or range-valued use context assigned to the
3829   * charge item definition</b><br>
3830   * Type: <b>quantity</b><br>
3831   * Path: <b>ChargeItemDefinition.useContext.valueQuantity,
3832   * ChargeItemDefinition.useContext.valueRange</b><br>
3833   * </p>
3834   */
3835  @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")
3836  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
3837  /**
3838   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
3839   * <p>
3840   * Description: <b>A quantity- or range-valued use context assigned to the
3841   * charge item definition</b><br>
3842   * Type: <b>quantity</b><br>
3843   * Path: <b>ChargeItemDefinition.useContext.valueQuantity,
3844   * ChargeItemDefinition.useContext.valueRange</b><br>
3845   * </p>
3846   */
3847  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(
3848      SP_CONTEXT_QUANTITY);
3849
3850  /**
3851   * Search parameter: <b>effective</b>
3852   * <p>
3853   * Description: <b>The time during which the charge item definition is intended
3854   * to be in use</b><br>
3855   * Type: <b>date</b><br>
3856   * Path: <b>ChargeItemDefinition.effectivePeriod</b><br>
3857   * </p>
3858   */
3859  @SearchParamDefinition(name = "effective", path = "ChargeItemDefinition.effectivePeriod", description = "The time during which the charge item definition is intended to be in use", type = "date")
3860  public static final String SP_EFFECTIVE = "effective";
3861  /**
3862   * <b>Fluent Client</b> search parameter constant for <b>effective</b>
3863   * <p>
3864   * Description: <b>The time during which the charge item definition is intended
3865   * to be in use</b><br>
3866   * Type: <b>date</b><br>
3867   * Path: <b>ChargeItemDefinition.effectivePeriod</b><br>
3868   * </p>
3869   */
3870  public static final ca.uhn.fhir.rest.gclient.DateClientParam EFFECTIVE = new ca.uhn.fhir.rest.gclient.DateClientParam(
3871      SP_EFFECTIVE);
3872
3873  /**
3874   * Search parameter: <b>context</b>
3875   * <p>
3876   * Description: <b>A use context assigned to the charge item definition</b><br>
3877   * Type: <b>token</b><br>
3878   * Path: <b>ChargeItemDefinition.useContext.valueCodeableConcept</b><br>
3879   * </p>
3880   */
3881  @SearchParamDefinition(name = "context", path = "(ChargeItemDefinition.useContext.value as CodeableConcept)", description = "A use context assigned to the charge item definition", type = "token")
3882  public static final String SP_CONTEXT = "context";
3883  /**
3884   * <b>Fluent Client</b> search parameter constant for <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  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3892      SP_CONTEXT);
3893
3894  /**
3895   * Search parameter: <b>publisher</b>
3896   * <p>
3897   * Description: <b>Name of the publisher of the charge item definition</b><br>
3898   * Type: <b>string</b><br>
3899   * Path: <b>ChargeItemDefinition.publisher</b><br>
3900   * </p>
3901   */
3902  @SearchParamDefinition(name = "publisher", path = "ChargeItemDefinition.publisher", description = "Name of the publisher of the charge item definition", type = "string")
3903  public static final String SP_PUBLISHER = "publisher";
3904  /**
3905   * <b>Fluent Client</b> search parameter constant for <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  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(
3913      SP_PUBLISHER);
3914
3915  /**
3916   * Search parameter: <b>context-type-quantity</b>
3917   * <p>
3918   * Description: <b>A use context type and quantity- or range-based value
3919   * assigned to the charge item definition</b><br>
3920   * Type: <b>composite</b><br>
3921   * Path: <b></b><br>
3922   * </p>
3923   */
3924  @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 = {
3925      "context-type", "context-quantity" })
3926  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
3927  /**
3928   * <b>Fluent Client</b> search parameter constant for
3929   * <b>context-type-quantity</b>
3930   * <p>
3931   * Description: <b>A use context type and quantity- or range-based value
3932   * assigned to the charge item definition</b><br>
3933   * Type: <b>composite</b><br>
3934   * Path: <b></b><br>
3935   * </p>
3936   */
3937  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>(
3938      SP_CONTEXT_TYPE_QUANTITY);
3939
3940  /**
3941   * Search parameter: <b>status</b>
3942   * <p>
3943   * Description: <b>The current status of the charge item definition</b><br>
3944   * Type: <b>token</b><br>
3945   * Path: <b>ChargeItemDefinition.status</b><br>
3946   * </p>
3947   */
3948  @SearchParamDefinition(name = "status", path = "ChargeItemDefinition.status", description = "The current status of the charge item definition", type = "token")
3949  public static final String SP_STATUS = "status";
3950  /**
3951   * <b>Fluent Client</b> search parameter constant for <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  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3959      SP_STATUS);
3960
3961}