001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
033import java.util.ArrayList;
034import java.util.Date;
035import java.util.List;
036
037import org.hl7.fhir.exceptions.FHIRException;
038import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
039import org.hl7.fhir.r4.model.Enumerations.PublicationStatus;
040import org.hl7.fhir.r4.model.Enumerations.PublicationStatusEnumFactory;
041import org.hl7.fhir.utilities.Utilities;
042
043import ca.uhn.fhir.model.api.annotation.Block;
044import ca.uhn.fhir.model.api.annotation.Child;
045import ca.uhn.fhir.model.api.annotation.ChildOrder;
046import ca.uhn.fhir.model.api.annotation.Description;
047import ca.uhn.fhir.model.api.annotation.ResourceDef;
048import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
049
050/**
051 * The Measure resource provides the definition of a quality measure.
052 */
053@ResourceDef(name = "Measure", profile = "http://hl7.org/fhir/StructureDefinition/Measure")
054@ChildOrder(names = { "url", "identifier", "version", "name", "title", "subtitle", "status", "experimental",
055    "subject[x]", "date", "publisher", "contact", "description", "useContext", "jurisdiction", "purpose", "usage",
056    "copyright", "approvalDate", "lastReviewDate", "effectivePeriod", "topic", "author", "editor", "reviewer",
057    "endorser", "relatedArtifact", "library", "disclaimer", "scoring", "compositeScoring", "type", "riskAdjustment",
058    "rateAggregation", "rationale", "clinicalRecommendationStatement", "improvementNotation", "definition", "guidance",
059    "group", "supplementalData" })
060public class Measure extends MetadataResource {
061
062  @Block()
063  public static class MeasureGroupComponent extends BackboneElement implements IBaseBackboneElement {
064    /**
065     * Indicates a meaning for the group. This can be as simple as a unique
066     * identifier, or it can establish meaning in a broader context by drawing from
067     * a terminology, allowing groups to be correlated across measures.
068     */
069    @Child(name = "code", type = {
070        CodeableConcept.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
071    @Description(shortDefinition = "Meaning of the group", formalDefinition = "Indicates a meaning for the group. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing groups to be correlated across measures.")
072    protected CodeableConcept code;
073
074    /**
075     * The human readable description of this population group.
076     */
077    @Child(name = "description", type = {
078        StringType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
079    @Description(shortDefinition = "Summary description", formalDefinition = "The human readable description of this population group.")
080    protected StringType description;
081
082    /**
083     * A population criteria for the measure.
084     */
085    @Child(name = "population", type = {}, order = 3, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
086    @Description(shortDefinition = "Population criteria", formalDefinition = "A population criteria for the measure.")
087    protected List<MeasureGroupPopulationComponent> population;
088
089    /**
090     * The stratifier criteria for the measure report, specified as either the name
091     * of a valid CQL expression defined within a referenced library or a valid FHIR
092     * Resource Path.
093     */
094    @Child(name = "stratifier", type = {}, order = 4, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
095    @Description(shortDefinition = "Stratifier criteria for the measure", formalDefinition = "The stratifier criteria for the measure report, specified as either the name of a valid CQL expression defined within a referenced library or a valid FHIR Resource Path.")
096    protected List<MeasureGroupStratifierComponent> stratifier;
097
098    private static final long serialVersionUID = -1797567579L;
099
100    /**
101     * Constructor
102     */
103    public MeasureGroupComponent() {
104      super();
105    }
106
107    /**
108     * @return {@link #code} (Indicates a meaning for the group. This can be as
109     *         simple as a unique identifier, or it can establish meaning in a
110     *         broader context by drawing from a terminology, allowing groups to be
111     *         correlated across measures.)
112     */
113    public CodeableConcept getCode() {
114      if (this.code == null)
115        if (Configuration.errorOnAutoCreate())
116          throw new Error("Attempt to auto-create MeasureGroupComponent.code");
117        else if (Configuration.doAutoCreate())
118          this.code = new CodeableConcept(); // cc
119      return this.code;
120    }
121
122    public boolean hasCode() {
123      return this.code != null && !this.code.isEmpty();
124    }
125
126    /**
127     * @param value {@link #code} (Indicates a meaning for the group. This can be as
128     *              simple as a unique identifier, or it can establish meaning in a
129     *              broader context by drawing from a terminology, allowing groups
130     *              to be correlated across measures.)
131     */
132    public MeasureGroupComponent setCode(CodeableConcept value) {
133      this.code = value;
134      return this;
135    }
136
137    /**
138     * @return {@link #description} (The human readable description of this
139     *         population group.). This is the underlying object with id, value and
140     *         extensions. The accessor "getDescription" gives direct access to the
141     *         value
142     */
143    public StringType getDescriptionElement() {
144      if (this.description == null)
145        if (Configuration.errorOnAutoCreate())
146          throw new Error("Attempt to auto-create MeasureGroupComponent.description");
147        else if (Configuration.doAutoCreate())
148          this.description = new StringType(); // bb
149      return this.description;
150    }
151
152    public boolean hasDescriptionElement() {
153      return this.description != null && !this.description.isEmpty();
154    }
155
156    public boolean hasDescription() {
157      return this.description != null && !this.description.isEmpty();
158    }
159
160    /**
161     * @param value {@link #description} (The human readable description of this
162     *              population group.). This is the underlying object with id, value
163     *              and extensions. The accessor "getDescription" gives direct
164     *              access to the value
165     */
166    public MeasureGroupComponent setDescriptionElement(StringType value) {
167      this.description = value;
168      return this;
169    }
170
171    /**
172     * @return The human readable description of this population group.
173     */
174    public String getDescription() {
175      return this.description == null ? null : this.description.getValue();
176    }
177
178    /**
179     * @param value The human readable description of this population group.
180     */
181    public MeasureGroupComponent setDescription(String value) {
182      if (Utilities.noString(value))
183        this.description = null;
184      else {
185        if (this.description == null)
186          this.description = new StringType();
187        this.description.setValue(value);
188      }
189      return this;
190    }
191
192    /**
193     * @return {@link #population} (A population criteria for the measure.)
194     */
195    public List<MeasureGroupPopulationComponent> getPopulation() {
196      if (this.population == null)
197        this.population = new ArrayList<MeasureGroupPopulationComponent>();
198      return this.population;
199    }
200
201    /**
202     * @return Returns a reference to <code>this</code> for easy method chaining
203     */
204    public MeasureGroupComponent setPopulation(List<MeasureGroupPopulationComponent> thePopulation) {
205      this.population = thePopulation;
206      return this;
207    }
208
209    public boolean hasPopulation() {
210      if (this.population == null)
211        return false;
212      for (MeasureGroupPopulationComponent item : this.population)
213        if (!item.isEmpty())
214          return true;
215      return false;
216    }
217
218    public MeasureGroupPopulationComponent addPopulation() { // 3
219      MeasureGroupPopulationComponent t = new MeasureGroupPopulationComponent();
220      if (this.population == null)
221        this.population = new ArrayList<MeasureGroupPopulationComponent>();
222      this.population.add(t);
223      return t;
224    }
225
226    public MeasureGroupComponent addPopulation(MeasureGroupPopulationComponent t) { // 3
227      if (t == null)
228        return this;
229      if (this.population == null)
230        this.population = new ArrayList<MeasureGroupPopulationComponent>();
231      this.population.add(t);
232      return this;
233    }
234
235    /**
236     * @return The first repetition of repeating field {@link #population}, creating
237     *         it if it does not already exist
238     */
239    public MeasureGroupPopulationComponent getPopulationFirstRep() {
240      if (getPopulation().isEmpty()) {
241        addPopulation();
242      }
243      return getPopulation().get(0);
244    }
245
246    /**
247     * @return {@link #stratifier} (The stratifier criteria for the measure report,
248     *         specified as either the name of a valid CQL expression defined within
249     *         a referenced library or a valid FHIR Resource Path.)
250     */
251    public List<MeasureGroupStratifierComponent> getStratifier() {
252      if (this.stratifier == null)
253        this.stratifier = new ArrayList<MeasureGroupStratifierComponent>();
254      return this.stratifier;
255    }
256
257    /**
258     * @return Returns a reference to <code>this</code> for easy method chaining
259     */
260    public MeasureGroupComponent setStratifier(List<MeasureGroupStratifierComponent> theStratifier) {
261      this.stratifier = theStratifier;
262      return this;
263    }
264
265    public boolean hasStratifier() {
266      if (this.stratifier == null)
267        return false;
268      for (MeasureGroupStratifierComponent item : this.stratifier)
269        if (!item.isEmpty())
270          return true;
271      return false;
272    }
273
274    public MeasureGroupStratifierComponent addStratifier() { // 3
275      MeasureGroupStratifierComponent t = new MeasureGroupStratifierComponent();
276      if (this.stratifier == null)
277        this.stratifier = new ArrayList<MeasureGroupStratifierComponent>();
278      this.stratifier.add(t);
279      return t;
280    }
281
282    public MeasureGroupComponent addStratifier(MeasureGroupStratifierComponent t) { // 3
283      if (t == null)
284        return this;
285      if (this.stratifier == null)
286        this.stratifier = new ArrayList<MeasureGroupStratifierComponent>();
287      this.stratifier.add(t);
288      return this;
289    }
290
291    /**
292     * @return The first repetition of repeating field {@link #stratifier}, creating
293     *         it if it does not already exist
294     */
295    public MeasureGroupStratifierComponent getStratifierFirstRep() {
296      if (getStratifier().isEmpty()) {
297        addStratifier();
298      }
299      return getStratifier().get(0);
300    }
301
302    protected void listChildren(List<Property> children) {
303      super.listChildren(children);
304      children.add(new Property("code", "CodeableConcept",
305          "Indicates a meaning for the group. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing groups to be correlated across measures.",
306          0, 1, code));
307      children.add(new Property("description", "string", "The human readable description of this population group.", 0,
308          1, description));
309      children.add(new Property("population", "", "A population criteria for the measure.", 0,
310          java.lang.Integer.MAX_VALUE, population));
311      children.add(new Property("stratifier", "",
312          "The stratifier criteria for the measure report, specified as either the name of a valid CQL expression defined within a referenced library or a valid FHIR Resource Path.",
313          0, java.lang.Integer.MAX_VALUE, stratifier));
314    }
315
316    @Override
317    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
318      switch (_hash) {
319      case 3059181:
320        /* code */ return new Property("code", "CodeableConcept",
321            "Indicates a meaning for the group. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing groups to be correlated across measures.",
322            0, 1, code);
323      case -1724546052:
324        /* description */ return new Property("description", "string",
325            "The human readable description of this population group.", 0, 1, description);
326      case -2023558323:
327        /* population */ return new Property("population", "", "A population criteria for the measure.", 0,
328            java.lang.Integer.MAX_VALUE, population);
329      case 90983669:
330        /* stratifier */ return new Property("stratifier", "",
331            "The stratifier criteria for the measure report, specified as either the name of a valid CQL expression defined within a referenced library or a valid FHIR Resource Path.",
332            0, java.lang.Integer.MAX_VALUE, stratifier);
333      default:
334        return super.getNamedProperty(_hash, _name, _checkValid);
335      }
336
337    }
338
339    @Override
340    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
341      switch (hash) {
342      case 3059181:
343        /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeableConcept
344      case -1724546052:
345        /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // StringType
346      case -2023558323:
347        /* population */ return this.population == null ? new Base[0]
348            : this.population.toArray(new Base[this.population.size()]); // MeasureGroupPopulationComponent
349      case 90983669:
350        /* stratifier */ return this.stratifier == null ? new Base[0]
351            : this.stratifier.toArray(new Base[this.stratifier.size()]); // MeasureGroupStratifierComponent
352      default:
353        return super.getProperty(hash, name, checkValid);
354      }
355
356    }
357
358    @Override
359    public Base setProperty(int hash, String name, Base value) throws FHIRException {
360      switch (hash) {
361      case 3059181: // code
362        this.code = castToCodeableConcept(value); // CodeableConcept
363        return value;
364      case -1724546052: // description
365        this.description = castToString(value); // StringType
366        return value;
367      case -2023558323: // population
368        this.getPopulation().add((MeasureGroupPopulationComponent) value); // MeasureGroupPopulationComponent
369        return value;
370      case 90983669: // stratifier
371        this.getStratifier().add((MeasureGroupStratifierComponent) value); // MeasureGroupStratifierComponent
372        return value;
373      default:
374        return super.setProperty(hash, name, value);
375      }
376
377    }
378
379    @Override
380    public Base setProperty(String name, Base value) throws FHIRException {
381      if (name.equals("code")) {
382        this.code = castToCodeableConcept(value); // CodeableConcept
383      } else if (name.equals("description")) {
384        this.description = castToString(value); // StringType
385      } else if (name.equals("population")) {
386        this.getPopulation().add((MeasureGroupPopulationComponent) value);
387      } else if (name.equals("stratifier")) {
388        this.getStratifier().add((MeasureGroupStratifierComponent) value);
389      } else
390        return super.setProperty(name, value);
391      return value;
392    }
393
394    @Override
395    public Base makeProperty(int hash, String name) throws FHIRException {
396      switch (hash) {
397      case 3059181:
398        return getCode();
399      case -1724546052:
400        return getDescriptionElement();
401      case -2023558323:
402        return addPopulation();
403      case 90983669:
404        return addStratifier();
405      default:
406        return super.makeProperty(hash, name);
407      }
408
409    }
410
411    @Override
412    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
413      switch (hash) {
414      case 3059181:
415        /* code */ return new String[] { "CodeableConcept" };
416      case -1724546052:
417        /* description */ return new String[] { "string" };
418      case -2023558323:
419        /* population */ return new String[] {};
420      case 90983669:
421        /* stratifier */ return new String[] {};
422      default:
423        return super.getTypesForProperty(hash, name);
424      }
425
426    }
427
428    @Override
429    public Base addChild(String name) throws FHIRException {
430      if (name.equals("code")) {
431        this.code = new CodeableConcept();
432        return this.code;
433      } else if (name.equals("description")) {
434        throw new FHIRException("Cannot call addChild on a singleton property Measure.description");
435      } else if (name.equals("population")) {
436        return addPopulation();
437      } else if (name.equals("stratifier")) {
438        return addStratifier();
439      } else
440        return super.addChild(name);
441    }
442
443    public MeasureGroupComponent copy() {
444      MeasureGroupComponent dst = new MeasureGroupComponent();
445      copyValues(dst);
446      return dst;
447    }
448
449    public void copyValues(MeasureGroupComponent dst) {
450      super.copyValues(dst);
451      dst.code = code == null ? null : code.copy();
452      dst.description = description == null ? null : description.copy();
453      if (population != null) {
454        dst.population = new ArrayList<MeasureGroupPopulationComponent>();
455        for (MeasureGroupPopulationComponent i : population)
456          dst.population.add(i.copy());
457      }
458      ;
459      if (stratifier != null) {
460        dst.stratifier = new ArrayList<MeasureGroupStratifierComponent>();
461        for (MeasureGroupStratifierComponent i : stratifier)
462          dst.stratifier.add(i.copy());
463      }
464      ;
465    }
466
467    @Override
468    public boolean equalsDeep(Base other_) {
469      if (!super.equalsDeep(other_))
470        return false;
471      if (!(other_ instanceof MeasureGroupComponent))
472        return false;
473      MeasureGroupComponent o = (MeasureGroupComponent) other_;
474      return compareDeep(code, o.code, true) && compareDeep(description, o.description, true)
475          && compareDeep(population, o.population, true) && compareDeep(stratifier, o.stratifier, true);
476    }
477
478    @Override
479    public boolean equalsShallow(Base other_) {
480      if (!super.equalsShallow(other_))
481        return false;
482      if (!(other_ instanceof MeasureGroupComponent))
483        return false;
484      MeasureGroupComponent o = (MeasureGroupComponent) other_;
485      return compareValues(description, o.description, true);
486    }
487
488    public boolean isEmpty() {
489      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, description, population, stratifier);
490    }
491
492    public String fhirType() {
493      return "Measure.group";
494
495    }
496
497  }
498
499  @Block()
500  public static class MeasureGroupPopulationComponent extends BackboneElement implements IBaseBackboneElement {
501    /**
502     * The type of population criteria.
503     */
504    @Child(name = "code", type = {
505        CodeableConcept.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
506    @Description(shortDefinition = "initial-population | numerator | numerator-exclusion | denominator | denominator-exclusion | denominator-exception | measure-population | measure-population-exclusion | measure-observation", formalDefinition = "The type of population criteria.")
507    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/measure-population")
508    protected CodeableConcept code;
509
510    /**
511     * The human readable description of this population criteria.
512     */
513    @Child(name = "description", type = {
514        StringType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
515    @Description(shortDefinition = "The human readable description of this population criteria", formalDefinition = "The human readable description of this population criteria.")
516    protected StringType description;
517
518    /**
519     * An expression that specifies the criteria for the population, typically the
520     * name of an expression in a library.
521     */
522    @Child(name = "criteria", type = {
523        Expression.class }, order = 3, min = 1, max = 1, modifier = false, summary = false)
524    @Description(shortDefinition = "The criteria that defines this population", formalDefinition = "An expression that specifies the criteria for the population, typically the name of an expression in a library.")
525    protected Expression criteria;
526
527    private static final long serialVersionUID = 2107514056L;
528
529    /**
530     * Constructor
531     */
532    public MeasureGroupPopulationComponent() {
533      super();
534    }
535
536    /**
537     * Constructor
538     */
539    public MeasureGroupPopulationComponent(Expression criteria) {
540      super();
541      this.criteria = criteria;
542    }
543
544    /**
545     * @return {@link #code} (The type of population criteria.)
546     */
547    public CodeableConcept getCode() {
548      if (this.code == null)
549        if (Configuration.errorOnAutoCreate())
550          throw new Error("Attempt to auto-create MeasureGroupPopulationComponent.code");
551        else if (Configuration.doAutoCreate())
552          this.code = new CodeableConcept(); // cc
553      return this.code;
554    }
555
556    public boolean hasCode() {
557      return this.code != null && !this.code.isEmpty();
558    }
559
560    /**
561     * @param value {@link #code} (The type of population criteria.)
562     */
563    public MeasureGroupPopulationComponent setCode(CodeableConcept value) {
564      this.code = value;
565      return this;
566    }
567
568    /**
569     * @return {@link #description} (The human readable description of this
570     *         population criteria.). This is the underlying object with id, value
571     *         and extensions. The accessor "getDescription" gives direct access to
572     *         the value
573     */
574    public StringType getDescriptionElement() {
575      if (this.description == null)
576        if (Configuration.errorOnAutoCreate())
577          throw new Error("Attempt to auto-create MeasureGroupPopulationComponent.description");
578        else if (Configuration.doAutoCreate())
579          this.description = new StringType(); // bb
580      return this.description;
581    }
582
583    public boolean hasDescriptionElement() {
584      return this.description != null && !this.description.isEmpty();
585    }
586
587    public boolean hasDescription() {
588      return this.description != null && !this.description.isEmpty();
589    }
590
591    /**
592     * @param value {@link #description} (The human readable description of this
593     *              population criteria.). This is the underlying object with id,
594     *              value and extensions. The accessor "getDescription" gives direct
595     *              access to the value
596     */
597    public MeasureGroupPopulationComponent setDescriptionElement(StringType value) {
598      this.description = value;
599      return this;
600    }
601
602    /**
603     * @return The human readable description of this population criteria.
604     */
605    public String getDescription() {
606      return this.description == null ? null : this.description.getValue();
607    }
608
609    /**
610     * @param value The human readable description of this population criteria.
611     */
612    public MeasureGroupPopulationComponent setDescription(String value) {
613      if (Utilities.noString(value))
614        this.description = null;
615      else {
616        if (this.description == null)
617          this.description = new StringType();
618        this.description.setValue(value);
619      }
620      return this;
621    }
622
623    /**
624     * @return {@link #criteria} (An expression that specifies the criteria for the
625     *         population, typically the name of an expression in a library.)
626     */
627    public Expression getCriteria() {
628      if (this.criteria == null)
629        if (Configuration.errorOnAutoCreate())
630          throw new Error("Attempt to auto-create MeasureGroupPopulationComponent.criteria");
631        else if (Configuration.doAutoCreate())
632          this.criteria = new Expression(); // cc
633      return this.criteria;
634    }
635
636    public boolean hasCriteria() {
637      return this.criteria != null && !this.criteria.isEmpty();
638    }
639
640    /**
641     * @param value {@link #criteria} (An expression that specifies the criteria for
642     *              the population, typically the name of an expression in a
643     *              library.)
644     */
645    public MeasureGroupPopulationComponent setCriteria(Expression value) {
646      this.criteria = value;
647      return this;
648    }
649
650    protected void listChildren(List<Property> children) {
651      super.listChildren(children);
652      children.add(new Property("code", "CodeableConcept", "The type of population criteria.", 0, 1, code));
653      children.add(new Property("description", "string", "The human readable description of this population criteria.",
654          0, 1, description));
655      children.add(new Property("criteria", "Expression",
656          "An expression that specifies the criteria for the population, typically the name of an expression in a library.",
657          0, 1, criteria));
658    }
659
660    @Override
661    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
662      switch (_hash) {
663      case 3059181:
664        /* code */ return new Property("code", "CodeableConcept", "The type of population criteria.", 0, 1, code);
665      case -1724546052:
666        /* description */ return new Property("description", "string",
667            "The human readable description of this population criteria.", 0, 1, description);
668      case 1952046943:
669        /* criteria */ return new Property("criteria", "Expression",
670            "An expression that specifies the criteria for the population, typically the name of an expression in a library.",
671            0, 1, criteria);
672      default:
673        return super.getNamedProperty(_hash, _name, _checkValid);
674      }
675
676    }
677
678    @Override
679    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
680      switch (hash) {
681      case 3059181:
682        /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeableConcept
683      case -1724546052:
684        /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // StringType
685      case 1952046943:
686        /* criteria */ return this.criteria == null ? new Base[0] : new Base[] { this.criteria }; // Expression
687      default:
688        return super.getProperty(hash, name, checkValid);
689      }
690
691    }
692
693    @Override
694    public Base setProperty(int hash, String name, Base value) throws FHIRException {
695      switch (hash) {
696      case 3059181: // code
697        this.code = castToCodeableConcept(value); // CodeableConcept
698        return value;
699      case -1724546052: // description
700        this.description = castToString(value); // StringType
701        return value;
702      case 1952046943: // criteria
703        this.criteria = castToExpression(value); // Expression
704        return value;
705      default:
706        return super.setProperty(hash, name, value);
707      }
708
709    }
710
711    @Override
712    public Base setProperty(String name, Base value) throws FHIRException {
713      if (name.equals("code")) {
714        this.code = castToCodeableConcept(value); // CodeableConcept
715      } else if (name.equals("description")) {
716        this.description = castToString(value); // StringType
717      } else if (name.equals("criteria")) {
718        this.criteria = castToExpression(value); // Expression
719      } else
720        return super.setProperty(name, value);
721      return value;
722    }
723
724    @Override
725    public Base makeProperty(int hash, String name) throws FHIRException {
726      switch (hash) {
727      case 3059181:
728        return getCode();
729      case -1724546052:
730        return getDescriptionElement();
731      case 1952046943:
732        return getCriteria();
733      default:
734        return super.makeProperty(hash, name);
735      }
736
737    }
738
739    @Override
740    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
741      switch (hash) {
742      case 3059181:
743        /* code */ return new String[] { "CodeableConcept" };
744      case -1724546052:
745        /* description */ return new String[] { "string" };
746      case 1952046943:
747        /* criteria */ return new String[] { "Expression" };
748      default:
749        return super.getTypesForProperty(hash, name);
750      }
751
752    }
753
754    @Override
755    public Base addChild(String name) throws FHIRException {
756      if (name.equals("code")) {
757        this.code = new CodeableConcept();
758        return this.code;
759      } else if (name.equals("description")) {
760        throw new FHIRException("Cannot call addChild on a singleton property Measure.description");
761      } else if (name.equals("criteria")) {
762        this.criteria = new Expression();
763        return this.criteria;
764      } else
765        return super.addChild(name);
766    }
767
768    public MeasureGroupPopulationComponent copy() {
769      MeasureGroupPopulationComponent dst = new MeasureGroupPopulationComponent();
770      copyValues(dst);
771      return dst;
772    }
773
774    public void copyValues(MeasureGroupPopulationComponent dst) {
775      super.copyValues(dst);
776      dst.code = code == null ? null : code.copy();
777      dst.description = description == null ? null : description.copy();
778      dst.criteria = criteria == null ? null : criteria.copy();
779    }
780
781    @Override
782    public boolean equalsDeep(Base other_) {
783      if (!super.equalsDeep(other_))
784        return false;
785      if (!(other_ instanceof MeasureGroupPopulationComponent))
786        return false;
787      MeasureGroupPopulationComponent o = (MeasureGroupPopulationComponent) other_;
788      return compareDeep(code, o.code, true) && compareDeep(description, o.description, true)
789          && compareDeep(criteria, o.criteria, true);
790    }
791
792    @Override
793    public boolean equalsShallow(Base other_) {
794      if (!super.equalsShallow(other_))
795        return false;
796      if (!(other_ instanceof MeasureGroupPopulationComponent))
797        return false;
798      MeasureGroupPopulationComponent o = (MeasureGroupPopulationComponent) other_;
799      return compareValues(description, o.description, true);
800    }
801
802    public boolean isEmpty() {
803      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, description, criteria);
804    }
805
806    public String fhirType() {
807      return "Measure.group.population";
808
809    }
810
811  }
812
813  @Block()
814  public static class MeasureGroupStratifierComponent extends BackboneElement implements IBaseBackboneElement {
815    /**
816     * Indicates a meaning for the stratifier. This can be as simple as a unique
817     * identifier, or it can establish meaning in a broader context by drawing from
818     * a terminology, allowing stratifiers to be correlated across measures.
819     */
820    @Child(name = "code", type = {
821        CodeableConcept.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
822    @Description(shortDefinition = "Meaning of the stratifier", formalDefinition = "Indicates a meaning for the stratifier. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing stratifiers to be correlated across measures.")
823    protected CodeableConcept code;
824
825    /**
826     * The human readable description of this stratifier criteria.
827     */
828    @Child(name = "description", type = {
829        StringType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
830    @Description(shortDefinition = "The human readable description of this stratifier", formalDefinition = "The human readable description of this stratifier criteria.")
831    protected StringType description;
832
833    /**
834     * An expression that specifies the criteria for the stratifier. This is
835     * typically the name of an expression defined within a referenced library, but
836     * it may also be a path to a stratifier element.
837     */
838    @Child(name = "criteria", type = {
839        Expression.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
840    @Description(shortDefinition = "How the measure should be stratified", formalDefinition = "An expression that specifies the criteria for the stratifier. This is typically the name of an expression defined within a referenced library, but it may also be a path to a stratifier element.")
841    protected Expression criteria;
842
843    /**
844     * A component of the stratifier criteria for the measure report, specified as
845     * either the name of a valid CQL expression defined within a referenced library
846     * or a valid FHIR Resource Path.
847     */
848    @Child(name = "component", type = {}, order = 4, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
849    @Description(shortDefinition = "Stratifier criteria component for the measure", formalDefinition = "A component of the stratifier criteria for the measure report, specified as either the name of a valid CQL expression defined within a referenced library or a valid FHIR Resource Path.")
850    protected List<MeasureGroupStratifierComponentComponent> component;
851
852    private static final long serialVersionUID = -1706793609L;
853
854    /**
855     * Constructor
856     */
857    public MeasureGroupStratifierComponent() {
858      super();
859    }
860
861    /**
862     * @return {@link #code} (Indicates a meaning for the stratifier. This can be as
863     *         simple as a unique identifier, or it can establish meaning in a
864     *         broader context by drawing from a terminology, allowing stratifiers
865     *         to be correlated across measures.)
866     */
867    public CodeableConcept getCode() {
868      if (this.code == null)
869        if (Configuration.errorOnAutoCreate())
870          throw new Error("Attempt to auto-create MeasureGroupStratifierComponent.code");
871        else if (Configuration.doAutoCreate())
872          this.code = new CodeableConcept(); // cc
873      return this.code;
874    }
875
876    public boolean hasCode() {
877      return this.code != null && !this.code.isEmpty();
878    }
879
880    /**
881     * @param value {@link #code} (Indicates a meaning for the stratifier. This can
882     *              be as simple as a unique identifier, or it can establish meaning
883     *              in a broader context by drawing from a terminology, allowing
884     *              stratifiers to be correlated across measures.)
885     */
886    public MeasureGroupStratifierComponent setCode(CodeableConcept value) {
887      this.code = value;
888      return this;
889    }
890
891    /**
892     * @return {@link #description} (The human readable description of this
893     *         stratifier criteria.). This is the underlying object with id, value
894     *         and extensions. The accessor "getDescription" gives direct access to
895     *         the value
896     */
897    public StringType getDescriptionElement() {
898      if (this.description == null)
899        if (Configuration.errorOnAutoCreate())
900          throw new Error("Attempt to auto-create MeasureGroupStratifierComponent.description");
901        else if (Configuration.doAutoCreate())
902          this.description = new StringType(); // bb
903      return this.description;
904    }
905
906    public boolean hasDescriptionElement() {
907      return this.description != null && !this.description.isEmpty();
908    }
909
910    public boolean hasDescription() {
911      return this.description != null && !this.description.isEmpty();
912    }
913
914    /**
915     * @param value {@link #description} (The human readable description of this
916     *              stratifier criteria.). This is the underlying object with id,
917     *              value and extensions. The accessor "getDescription" gives direct
918     *              access to the value
919     */
920    public MeasureGroupStratifierComponent setDescriptionElement(StringType value) {
921      this.description = value;
922      return this;
923    }
924
925    /**
926     * @return The human readable description of this stratifier criteria.
927     */
928    public String getDescription() {
929      return this.description == null ? null : this.description.getValue();
930    }
931
932    /**
933     * @param value The human readable description of this stratifier criteria.
934     */
935    public MeasureGroupStratifierComponent setDescription(String value) {
936      if (Utilities.noString(value))
937        this.description = null;
938      else {
939        if (this.description == null)
940          this.description = new StringType();
941        this.description.setValue(value);
942      }
943      return this;
944    }
945
946    /**
947     * @return {@link #criteria} (An expression that specifies the criteria for the
948     *         stratifier. This is typically the name of an expression defined
949     *         within a referenced library, but it may also be a path to a
950     *         stratifier element.)
951     */
952    public Expression getCriteria() {
953      if (this.criteria == null)
954        if (Configuration.errorOnAutoCreate())
955          throw new Error("Attempt to auto-create MeasureGroupStratifierComponent.criteria");
956        else if (Configuration.doAutoCreate())
957          this.criteria = new Expression(); // cc
958      return this.criteria;
959    }
960
961    public boolean hasCriteria() {
962      return this.criteria != null && !this.criteria.isEmpty();
963    }
964
965    /**
966     * @param value {@link #criteria} (An expression that specifies the criteria for
967     *              the stratifier. This is typically the name of an expression
968     *              defined within a referenced library, but it may also be a path
969     *              to a stratifier element.)
970     */
971    public MeasureGroupStratifierComponent setCriteria(Expression value) {
972      this.criteria = value;
973      return this;
974    }
975
976    /**
977     * @return {@link #component} (A component of the stratifier criteria for the
978     *         measure report, specified as either the name of a valid CQL
979     *         expression defined within a referenced library or a valid FHIR
980     *         Resource Path.)
981     */
982    public List<MeasureGroupStratifierComponentComponent> getComponent() {
983      if (this.component == null)
984        this.component = new ArrayList<MeasureGroupStratifierComponentComponent>();
985      return this.component;
986    }
987
988    /**
989     * @return Returns a reference to <code>this</code> for easy method chaining
990     */
991    public MeasureGroupStratifierComponent setComponent(List<MeasureGroupStratifierComponentComponent> theComponent) {
992      this.component = theComponent;
993      return this;
994    }
995
996    public boolean hasComponent() {
997      if (this.component == null)
998        return false;
999      for (MeasureGroupStratifierComponentComponent item : this.component)
1000        if (!item.isEmpty())
1001          return true;
1002      return false;
1003    }
1004
1005    public MeasureGroupStratifierComponentComponent addComponent() { // 3
1006      MeasureGroupStratifierComponentComponent t = new MeasureGroupStratifierComponentComponent();
1007      if (this.component == null)
1008        this.component = new ArrayList<MeasureGroupStratifierComponentComponent>();
1009      this.component.add(t);
1010      return t;
1011    }
1012
1013    public MeasureGroupStratifierComponent addComponent(MeasureGroupStratifierComponentComponent t) { // 3
1014      if (t == null)
1015        return this;
1016      if (this.component == null)
1017        this.component = new ArrayList<MeasureGroupStratifierComponentComponent>();
1018      this.component.add(t);
1019      return this;
1020    }
1021
1022    /**
1023     * @return The first repetition of repeating field {@link #component}, creating
1024     *         it if it does not already exist
1025     */
1026    public MeasureGroupStratifierComponentComponent getComponentFirstRep() {
1027      if (getComponent().isEmpty()) {
1028        addComponent();
1029      }
1030      return getComponent().get(0);
1031    }
1032
1033    protected void listChildren(List<Property> children) {
1034      super.listChildren(children);
1035      children.add(new Property("code", "CodeableConcept",
1036          "Indicates a meaning for the stratifier. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing stratifiers to be correlated across measures.",
1037          0, 1, code));
1038      children.add(new Property("description", "string", "The human readable description of this stratifier criteria.",
1039          0, 1, description));
1040      children.add(new Property("criteria", "Expression",
1041          "An expression that specifies the criteria for the stratifier. This is typically the name of an expression defined within a referenced library, but it may also be a path to a stratifier element.",
1042          0, 1, criteria));
1043      children.add(new Property("component", "",
1044          "A component of the stratifier criteria for the measure report, specified as either the name of a valid CQL expression defined within a referenced library or a valid FHIR Resource Path.",
1045          0, java.lang.Integer.MAX_VALUE, component));
1046    }
1047
1048    @Override
1049    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1050      switch (_hash) {
1051      case 3059181:
1052        /* code */ return new Property("code", "CodeableConcept",
1053            "Indicates a meaning for the stratifier. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing stratifiers to be correlated across measures.",
1054            0, 1, code);
1055      case -1724546052:
1056        /* description */ return new Property("description", "string",
1057            "The human readable description of this stratifier criteria.", 0, 1, description);
1058      case 1952046943:
1059        /* criteria */ return new Property("criteria", "Expression",
1060            "An expression that specifies the criteria for the stratifier. This is typically the name of an expression defined within a referenced library, but it may also be a path to a stratifier element.",
1061            0, 1, criteria);
1062      case -1399907075:
1063        /* component */ return new Property("component", "",
1064            "A component of the stratifier criteria for the measure report, specified as either the name of a valid CQL expression defined within a referenced library or a valid FHIR Resource Path.",
1065            0, java.lang.Integer.MAX_VALUE, component);
1066      default:
1067        return super.getNamedProperty(_hash, _name, _checkValid);
1068      }
1069
1070    }
1071
1072    @Override
1073    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1074      switch (hash) {
1075      case 3059181:
1076        /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeableConcept
1077      case -1724546052:
1078        /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // StringType
1079      case 1952046943:
1080        /* criteria */ return this.criteria == null ? new Base[0] : new Base[] { this.criteria }; // Expression
1081      case -1399907075:
1082        /* component */ return this.component == null ? new Base[0]
1083            : this.component.toArray(new Base[this.component.size()]); // MeasureGroupStratifierComponentComponent
1084      default:
1085        return super.getProperty(hash, name, checkValid);
1086      }
1087
1088    }
1089
1090    @Override
1091    public Base setProperty(int hash, String name, Base value) throws FHIRException {
1092      switch (hash) {
1093      case 3059181: // code
1094        this.code = castToCodeableConcept(value); // CodeableConcept
1095        return value;
1096      case -1724546052: // description
1097        this.description = castToString(value); // StringType
1098        return value;
1099      case 1952046943: // criteria
1100        this.criteria = castToExpression(value); // Expression
1101        return value;
1102      case -1399907075: // component
1103        this.getComponent().add((MeasureGroupStratifierComponentComponent) value); // MeasureGroupStratifierComponentComponent
1104        return value;
1105      default:
1106        return super.setProperty(hash, name, value);
1107      }
1108
1109    }
1110
1111    @Override
1112    public Base setProperty(String name, Base value) throws FHIRException {
1113      if (name.equals("code")) {
1114        this.code = castToCodeableConcept(value); // CodeableConcept
1115      } else if (name.equals("description")) {
1116        this.description = castToString(value); // StringType
1117      } else if (name.equals("criteria")) {
1118        this.criteria = castToExpression(value); // Expression
1119      } else if (name.equals("component")) {
1120        this.getComponent().add((MeasureGroupStratifierComponentComponent) value);
1121      } else
1122        return super.setProperty(name, value);
1123      return value;
1124    }
1125
1126    @Override
1127    public Base makeProperty(int hash, String name) throws FHIRException {
1128      switch (hash) {
1129      case 3059181:
1130        return getCode();
1131      case -1724546052:
1132        return getDescriptionElement();
1133      case 1952046943:
1134        return getCriteria();
1135      case -1399907075:
1136        return addComponent();
1137      default:
1138        return super.makeProperty(hash, name);
1139      }
1140
1141    }
1142
1143    @Override
1144    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1145      switch (hash) {
1146      case 3059181:
1147        /* code */ return new String[] { "CodeableConcept" };
1148      case -1724546052:
1149        /* description */ return new String[] { "string" };
1150      case 1952046943:
1151        /* criteria */ return new String[] { "Expression" };
1152      case -1399907075:
1153        /* component */ return new String[] {};
1154      default:
1155        return super.getTypesForProperty(hash, name);
1156      }
1157
1158    }
1159
1160    @Override
1161    public Base addChild(String name) throws FHIRException {
1162      if (name.equals("code")) {
1163        this.code = new CodeableConcept();
1164        return this.code;
1165      } else if (name.equals("description")) {
1166        throw new FHIRException("Cannot call addChild on a singleton property Measure.description");
1167      } else if (name.equals("criteria")) {
1168        this.criteria = new Expression();
1169        return this.criteria;
1170      } else if (name.equals("component")) {
1171        return addComponent();
1172      } else
1173        return super.addChild(name);
1174    }
1175
1176    public MeasureGroupStratifierComponent copy() {
1177      MeasureGroupStratifierComponent dst = new MeasureGroupStratifierComponent();
1178      copyValues(dst);
1179      return dst;
1180    }
1181
1182    public void copyValues(MeasureGroupStratifierComponent dst) {
1183      super.copyValues(dst);
1184      dst.code = code == null ? null : code.copy();
1185      dst.description = description == null ? null : description.copy();
1186      dst.criteria = criteria == null ? null : criteria.copy();
1187      if (component != null) {
1188        dst.component = new ArrayList<MeasureGroupStratifierComponentComponent>();
1189        for (MeasureGroupStratifierComponentComponent i : component)
1190          dst.component.add(i.copy());
1191      }
1192      ;
1193    }
1194
1195    @Override
1196    public boolean equalsDeep(Base other_) {
1197      if (!super.equalsDeep(other_))
1198        return false;
1199      if (!(other_ instanceof MeasureGroupStratifierComponent))
1200        return false;
1201      MeasureGroupStratifierComponent o = (MeasureGroupStratifierComponent) other_;
1202      return compareDeep(code, o.code, true) && compareDeep(description, o.description, true)
1203          && compareDeep(criteria, o.criteria, true) && compareDeep(component, o.component, true);
1204    }
1205
1206    @Override
1207    public boolean equalsShallow(Base other_) {
1208      if (!super.equalsShallow(other_))
1209        return false;
1210      if (!(other_ instanceof MeasureGroupStratifierComponent))
1211        return false;
1212      MeasureGroupStratifierComponent o = (MeasureGroupStratifierComponent) other_;
1213      return compareValues(description, o.description, true);
1214    }
1215
1216    public boolean isEmpty() {
1217      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, description, criteria, component);
1218    }
1219
1220    public String fhirType() {
1221      return "Measure.group.stratifier";
1222
1223    }
1224
1225  }
1226
1227  @Block()
1228  public static class MeasureGroupStratifierComponentComponent extends BackboneElement implements IBaseBackboneElement {
1229    /**
1230     * Indicates a meaning for the stratifier component. This can be as simple as a
1231     * unique identifier, or it can establish meaning in a broader context by
1232     * drawing from a terminology, allowing stratifiers to be correlated across
1233     * measures.
1234     */
1235    @Child(name = "code", type = {
1236        CodeableConcept.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
1237    @Description(shortDefinition = "Meaning of the stratifier component", formalDefinition = "Indicates a meaning for the stratifier component. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing stratifiers to be correlated across measures.")
1238    protected CodeableConcept code;
1239
1240    /**
1241     * The human readable description of this stratifier criteria component.
1242     */
1243    @Child(name = "description", type = {
1244        StringType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
1245    @Description(shortDefinition = "The human readable description of this stratifier component", formalDefinition = "The human readable description of this stratifier criteria component.")
1246    protected StringType description;
1247
1248    /**
1249     * An expression that specifies the criteria for this component of the
1250     * stratifier. This is typically the name of an expression defined within a
1251     * referenced library, but it may also be a path to a stratifier element.
1252     */
1253    @Child(name = "criteria", type = {
1254        Expression.class }, order = 3, min = 1, max = 1, modifier = false, summary = false)
1255    @Description(shortDefinition = "Component of how the measure should be stratified", formalDefinition = "An expression that specifies the criteria for this component of the stratifier. This is typically the name of an expression defined within a referenced library, but it may also be a path to a stratifier element.")
1256    protected Expression criteria;
1257
1258    private static final long serialVersionUID = 2107514056L;
1259
1260    /**
1261     * Constructor
1262     */
1263    public MeasureGroupStratifierComponentComponent() {
1264      super();
1265    }
1266
1267    /**
1268     * Constructor
1269     */
1270    public MeasureGroupStratifierComponentComponent(Expression criteria) {
1271      super();
1272      this.criteria = criteria;
1273    }
1274
1275    /**
1276     * @return {@link #code} (Indicates a meaning for the stratifier component. This
1277     *         can be as simple as a unique identifier, or it can establish meaning
1278     *         in a broader context by drawing from a terminology, allowing
1279     *         stratifiers to be correlated across measures.)
1280     */
1281    public CodeableConcept getCode() {
1282      if (this.code == null)
1283        if (Configuration.errorOnAutoCreate())
1284          throw new Error("Attempt to auto-create MeasureGroupStratifierComponentComponent.code");
1285        else if (Configuration.doAutoCreate())
1286          this.code = new CodeableConcept(); // cc
1287      return this.code;
1288    }
1289
1290    public boolean hasCode() {
1291      return this.code != null && !this.code.isEmpty();
1292    }
1293
1294    /**
1295     * @param value {@link #code} (Indicates a meaning for the stratifier component.
1296     *              This can be as simple as a unique identifier, or it can
1297     *              establish meaning in a broader context by drawing from a
1298     *              terminology, allowing stratifiers to be correlated across
1299     *              measures.)
1300     */
1301    public MeasureGroupStratifierComponentComponent setCode(CodeableConcept value) {
1302      this.code = value;
1303      return this;
1304    }
1305
1306    /**
1307     * @return {@link #description} (The human readable description of this
1308     *         stratifier criteria component.). This is the underlying object with
1309     *         id, value and extensions. The accessor "getDescription" gives direct
1310     *         access to the value
1311     */
1312    public StringType getDescriptionElement() {
1313      if (this.description == null)
1314        if (Configuration.errorOnAutoCreate())
1315          throw new Error("Attempt to auto-create MeasureGroupStratifierComponentComponent.description");
1316        else if (Configuration.doAutoCreate())
1317          this.description = new StringType(); // bb
1318      return this.description;
1319    }
1320
1321    public boolean hasDescriptionElement() {
1322      return this.description != null && !this.description.isEmpty();
1323    }
1324
1325    public boolean hasDescription() {
1326      return this.description != null && !this.description.isEmpty();
1327    }
1328
1329    /**
1330     * @param value {@link #description} (The human readable description of this
1331     *              stratifier criteria component.). This is the underlying object
1332     *              with id, value and extensions. The accessor "getDescription"
1333     *              gives direct access to the value
1334     */
1335    public MeasureGroupStratifierComponentComponent setDescriptionElement(StringType value) {
1336      this.description = value;
1337      return this;
1338    }
1339
1340    /**
1341     * @return The human readable description of this stratifier criteria component.
1342     */
1343    public String getDescription() {
1344      return this.description == null ? null : this.description.getValue();
1345    }
1346
1347    /**
1348     * @param value The human readable description of this stratifier criteria
1349     *              component.
1350     */
1351    public MeasureGroupStratifierComponentComponent setDescription(String value) {
1352      if (Utilities.noString(value))
1353        this.description = null;
1354      else {
1355        if (this.description == null)
1356          this.description = new StringType();
1357        this.description.setValue(value);
1358      }
1359      return this;
1360    }
1361
1362    /**
1363     * @return {@link #criteria} (An expression that specifies the criteria for this
1364     *         component of the stratifier. This is typically the name of an
1365     *         expression defined within a referenced library, but it may also be a
1366     *         path to a stratifier element.)
1367     */
1368    public Expression getCriteria() {
1369      if (this.criteria == null)
1370        if (Configuration.errorOnAutoCreate())
1371          throw new Error("Attempt to auto-create MeasureGroupStratifierComponentComponent.criteria");
1372        else if (Configuration.doAutoCreate())
1373          this.criteria = new Expression(); // cc
1374      return this.criteria;
1375    }
1376
1377    public boolean hasCriteria() {
1378      return this.criteria != null && !this.criteria.isEmpty();
1379    }
1380
1381    /**
1382     * @param value {@link #criteria} (An expression that specifies the criteria for
1383     *              this component of the stratifier. This is typically the name of
1384     *              an expression defined within a referenced library, but it may
1385     *              also be a path to a stratifier element.)
1386     */
1387    public MeasureGroupStratifierComponentComponent setCriteria(Expression value) {
1388      this.criteria = value;
1389      return this;
1390    }
1391
1392    protected void listChildren(List<Property> children) {
1393      super.listChildren(children);
1394      children.add(new Property("code", "CodeableConcept",
1395          "Indicates a meaning for the stratifier component. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing stratifiers to be correlated across measures.",
1396          0, 1, code));
1397      children.add(new Property("description", "string",
1398          "The human readable description of this stratifier criteria component.", 0, 1, description));
1399      children.add(new Property("criteria", "Expression",
1400          "An expression that specifies the criteria for this component of the stratifier. This is typically the name of an expression defined within a referenced library, but it may also be a path to a stratifier element.",
1401          0, 1, criteria));
1402    }
1403
1404    @Override
1405    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1406      switch (_hash) {
1407      case 3059181:
1408        /* code */ return new Property("code", "CodeableConcept",
1409            "Indicates a meaning for the stratifier component. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing stratifiers to be correlated across measures.",
1410            0, 1, code);
1411      case -1724546052:
1412        /* description */ return new Property("description", "string",
1413            "The human readable description of this stratifier criteria component.", 0, 1, description);
1414      case 1952046943:
1415        /* criteria */ return new Property("criteria", "Expression",
1416            "An expression that specifies the criteria for this component of the stratifier. This is typically the name of an expression defined within a referenced library, but it may also be a path to a stratifier element.",
1417            0, 1, criteria);
1418      default:
1419        return super.getNamedProperty(_hash, _name, _checkValid);
1420      }
1421
1422    }
1423
1424    @Override
1425    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1426      switch (hash) {
1427      case 3059181:
1428        /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeableConcept
1429      case -1724546052:
1430        /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // StringType
1431      case 1952046943:
1432        /* criteria */ return this.criteria == null ? new Base[0] : new Base[] { this.criteria }; // Expression
1433      default:
1434        return super.getProperty(hash, name, checkValid);
1435      }
1436
1437    }
1438
1439    @Override
1440    public Base setProperty(int hash, String name, Base value) throws FHIRException {
1441      switch (hash) {
1442      case 3059181: // code
1443        this.code = castToCodeableConcept(value); // CodeableConcept
1444        return value;
1445      case -1724546052: // description
1446        this.description = castToString(value); // StringType
1447        return value;
1448      case 1952046943: // criteria
1449        this.criteria = castToExpression(value); // Expression
1450        return value;
1451      default:
1452        return super.setProperty(hash, name, value);
1453      }
1454
1455    }
1456
1457    @Override
1458    public Base setProperty(String name, Base value) throws FHIRException {
1459      if (name.equals("code")) {
1460        this.code = castToCodeableConcept(value); // CodeableConcept
1461      } else if (name.equals("description")) {
1462        this.description = castToString(value); // StringType
1463      } else if (name.equals("criteria")) {
1464        this.criteria = castToExpression(value); // Expression
1465      } else
1466        return super.setProperty(name, value);
1467      return value;
1468    }
1469
1470    @Override
1471    public Base makeProperty(int hash, String name) throws FHIRException {
1472      switch (hash) {
1473      case 3059181:
1474        return getCode();
1475      case -1724546052:
1476        return getDescriptionElement();
1477      case 1952046943:
1478        return getCriteria();
1479      default:
1480        return super.makeProperty(hash, name);
1481      }
1482
1483    }
1484
1485    @Override
1486    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1487      switch (hash) {
1488      case 3059181:
1489        /* code */ return new String[] { "CodeableConcept" };
1490      case -1724546052:
1491        /* description */ return new String[] { "string" };
1492      case 1952046943:
1493        /* criteria */ return new String[] { "Expression" };
1494      default:
1495        return super.getTypesForProperty(hash, name);
1496      }
1497
1498    }
1499
1500    @Override
1501    public Base addChild(String name) throws FHIRException {
1502      if (name.equals("code")) {
1503        this.code = new CodeableConcept();
1504        return this.code;
1505      } else if (name.equals("description")) {
1506        throw new FHIRException("Cannot call addChild on a singleton property Measure.description");
1507      } else if (name.equals("criteria")) {
1508        this.criteria = new Expression();
1509        return this.criteria;
1510      } else
1511        return super.addChild(name);
1512    }
1513
1514    public MeasureGroupStratifierComponentComponent copy() {
1515      MeasureGroupStratifierComponentComponent dst = new MeasureGroupStratifierComponentComponent();
1516      copyValues(dst);
1517      return dst;
1518    }
1519
1520    public void copyValues(MeasureGroupStratifierComponentComponent dst) {
1521      super.copyValues(dst);
1522      dst.code = code == null ? null : code.copy();
1523      dst.description = description == null ? null : description.copy();
1524      dst.criteria = criteria == null ? null : criteria.copy();
1525    }
1526
1527    @Override
1528    public boolean equalsDeep(Base other_) {
1529      if (!super.equalsDeep(other_))
1530        return false;
1531      if (!(other_ instanceof MeasureGroupStratifierComponentComponent))
1532        return false;
1533      MeasureGroupStratifierComponentComponent o = (MeasureGroupStratifierComponentComponent) other_;
1534      return compareDeep(code, o.code, true) && compareDeep(description, o.description, true)
1535          && compareDeep(criteria, o.criteria, true);
1536    }
1537
1538    @Override
1539    public boolean equalsShallow(Base other_) {
1540      if (!super.equalsShallow(other_))
1541        return false;
1542      if (!(other_ instanceof MeasureGroupStratifierComponentComponent))
1543        return false;
1544      MeasureGroupStratifierComponentComponent o = (MeasureGroupStratifierComponentComponent) other_;
1545      return compareValues(description, o.description, true);
1546    }
1547
1548    public boolean isEmpty() {
1549      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, description, criteria);
1550    }
1551
1552    public String fhirType() {
1553      return "Measure.group.stratifier.component";
1554
1555    }
1556
1557  }
1558
1559  @Block()
1560  public static class MeasureSupplementalDataComponent extends BackboneElement implements IBaseBackboneElement {
1561    /**
1562     * Indicates a meaning for the supplemental data. This can be as simple as a
1563     * unique identifier, or it can establish meaning in a broader context by
1564     * drawing from a terminology, allowing supplemental data to be correlated
1565     * across measures.
1566     */
1567    @Child(name = "code", type = {
1568        CodeableConcept.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
1569    @Description(shortDefinition = "Meaning of the supplemental data", formalDefinition = "Indicates a meaning for the supplemental data. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing supplemental data to be correlated across measures.")
1570    protected CodeableConcept code;
1571
1572    /**
1573     * An indicator of the intended usage for the supplemental data element.
1574     * Supplemental data indicates the data is additional information requested to
1575     * augment the measure information. Risk adjustment factor indicates the data is
1576     * additional information used to calculate risk adjustment factors when
1577     * applying a risk model to the measure calculation.
1578     */
1579    @Child(name = "usage", type = {
1580        CodeableConcept.class }, order = 2, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1581    @Description(shortDefinition = "supplemental-data | risk-adjustment-factor", formalDefinition = "An indicator of the intended usage for the supplemental data element. Supplemental data indicates the data is additional information requested to augment the measure information. Risk adjustment factor indicates the data is additional information used to calculate risk adjustment factors when applying a risk model to the measure calculation.")
1582    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/measure-data-usage")
1583    protected List<CodeableConcept> usage;
1584
1585    /**
1586     * The human readable description of this supplemental data.
1587     */
1588    @Child(name = "description", type = {
1589        StringType.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
1590    @Description(shortDefinition = "The human readable description of this supplemental data", formalDefinition = "The human readable description of this supplemental data.")
1591    protected StringType description;
1592
1593    /**
1594     * The criteria for the supplemental data. This is typically the name of a valid
1595     * expression defined within a referenced library, but it may also be a path to
1596     * a specific data element. The criteria defines the data to be returned for
1597     * this element.
1598     */
1599    @Child(name = "criteria", type = {
1600        Expression.class }, order = 4, min = 1, max = 1, modifier = false, summary = false)
1601    @Description(shortDefinition = "Expression describing additional data to be reported", formalDefinition = "The criteria for the supplemental data. This is typically the name of a valid expression defined within a referenced library, but it may also be a path to a specific data element. The criteria defines the data to be returned for this element.")
1602    protected Expression criteria;
1603
1604    private static final long serialVersionUID = -1897021670L;
1605
1606    /**
1607     * Constructor
1608     */
1609    public MeasureSupplementalDataComponent() {
1610      super();
1611    }
1612
1613    /**
1614     * Constructor
1615     */
1616    public MeasureSupplementalDataComponent(Expression criteria) {
1617      super();
1618      this.criteria = criteria;
1619    }
1620
1621    /**
1622     * @return {@link #code} (Indicates a meaning for the supplemental data. This
1623     *         can be as simple as a unique identifier, or it can establish meaning
1624     *         in a broader context by drawing from a terminology, allowing
1625     *         supplemental data to be correlated across measures.)
1626     */
1627    public CodeableConcept getCode() {
1628      if (this.code == null)
1629        if (Configuration.errorOnAutoCreate())
1630          throw new Error("Attempt to auto-create MeasureSupplementalDataComponent.code");
1631        else if (Configuration.doAutoCreate())
1632          this.code = new CodeableConcept(); // cc
1633      return this.code;
1634    }
1635
1636    public boolean hasCode() {
1637      return this.code != null && !this.code.isEmpty();
1638    }
1639
1640    /**
1641     * @param value {@link #code} (Indicates a meaning for the supplemental data.
1642     *              This can be as simple as a unique identifier, or it can
1643     *              establish meaning in a broader context by drawing from a
1644     *              terminology, allowing supplemental data to be correlated across
1645     *              measures.)
1646     */
1647    public MeasureSupplementalDataComponent setCode(CodeableConcept value) {
1648      this.code = value;
1649      return this;
1650    }
1651
1652    /**
1653     * @return {@link #usage} (An indicator of the intended usage for the
1654     *         supplemental data element. Supplemental data indicates the data is
1655     *         additional information requested to augment the measure information.
1656     *         Risk adjustment factor indicates the data is additional information
1657     *         used to calculate risk adjustment factors when applying a risk model
1658     *         to the measure calculation.)
1659     */
1660    public List<CodeableConcept> getUsage() {
1661      if (this.usage == null)
1662        this.usage = new ArrayList<CodeableConcept>();
1663      return this.usage;
1664    }
1665
1666    /**
1667     * @return Returns a reference to <code>this</code> for easy method chaining
1668     */
1669    public MeasureSupplementalDataComponent setUsage(List<CodeableConcept> theUsage) {
1670      this.usage = theUsage;
1671      return this;
1672    }
1673
1674    public boolean hasUsage() {
1675      if (this.usage == null)
1676        return false;
1677      for (CodeableConcept item : this.usage)
1678        if (!item.isEmpty())
1679          return true;
1680      return false;
1681    }
1682
1683    public CodeableConcept addUsage() { // 3
1684      CodeableConcept t = new CodeableConcept();
1685      if (this.usage == null)
1686        this.usage = new ArrayList<CodeableConcept>();
1687      this.usage.add(t);
1688      return t;
1689    }
1690
1691    public MeasureSupplementalDataComponent addUsage(CodeableConcept t) { // 3
1692      if (t == null)
1693        return this;
1694      if (this.usage == null)
1695        this.usage = new ArrayList<CodeableConcept>();
1696      this.usage.add(t);
1697      return this;
1698    }
1699
1700    /**
1701     * @return The first repetition of repeating field {@link #usage}, creating it
1702     *         if it does not already exist
1703     */
1704    public CodeableConcept getUsageFirstRep() {
1705      if (getUsage().isEmpty()) {
1706        addUsage();
1707      }
1708      return getUsage().get(0);
1709    }
1710
1711    /**
1712     * @return {@link #description} (The human readable description of this
1713     *         supplemental data.). This is the underlying object with id, value and
1714     *         extensions. The accessor "getDescription" gives direct access to the
1715     *         value
1716     */
1717    public StringType getDescriptionElement() {
1718      if (this.description == null)
1719        if (Configuration.errorOnAutoCreate())
1720          throw new Error("Attempt to auto-create MeasureSupplementalDataComponent.description");
1721        else if (Configuration.doAutoCreate())
1722          this.description = new StringType(); // bb
1723      return this.description;
1724    }
1725
1726    public boolean hasDescriptionElement() {
1727      return this.description != null && !this.description.isEmpty();
1728    }
1729
1730    public boolean hasDescription() {
1731      return this.description != null && !this.description.isEmpty();
1732    }
1733
1734    /**
1735     * @param value {@link #description} (The human readable description of this
1736     *              supplemental data.). This is the underlying object with id,
1737     *              value and extensions. The accessor "getDescription" gives direct
1738     *              access to the value
1739     */
1740    public MeasureSupplementalDataComponent setDescriptionElement(StringType value) {
1741      this.description = value;
1742      return this;
1743    }
1744
1745    /**
1746     * @return The human readable description of this supplemental data.
1747     */
1748    public String getDescription() {
1749      return this.description == null ? null : this.description.getValue();
1750    }
1751
1752    /**
1753     * @param value The human readable description of this supplemental data.
1754     */
1755    public MeasureSupplementalDataComponent setDescription(String value) {
1756      if (Utilities.noString(value))
1757        this.description = null;
1758      else {
1759        if (this.description == null)
1760          this.description = new StringType();
1761        this.description.setValue(value);
1762      }
1763      return this;
1764    }
1765
1766    /**
1767     * @return {@link #criteria} (The criteria for the supplemental data. This is
1768     *         typically the name of a valid expression defined within a referenced
1769     *         library, but it may also be a path to a specific data element. The
1770     *         criteria defines the data to be returned for this element.)
1771     */
1772    public Expression getCriteria() {
1773      if (this.criteria == null)
1774        if (Configuration.errorOnAutoCreate())
1775          throw new Error("Attempt to auto-create MeasureSupplementalDataComponent.criteria");
1776        else if (Configuration.doAutoCreate())
1777          this.criteria = new Expression(); // cc
1778      return this.criteria;
1779    }
1780
1781    public boolean hasCriteria() {
1782      return this.criteria != null && !this.criteria.isEmpty();
1783    }
1784
1785    /**
1786     * @param value {@link #criteria} (The criteria for the supplemental data. This
1787     *              is typically the name of a valid expression defined within a
1788     *              referenced library, but it may also be a path to a specific data
1789     *              element. The criteria defines the data to be returned for this
1790     *              element.)
1791     */
1792    public MeasureSupplementalDataComponent setCriteria(Expression value) {
1793      this.criteria = value;
1794      return this;
1795    }
1796
1797    protected void listChildren(List<Property> children) {
1798      super.listChildren(children);
1799      children.add(new Property("code", "CodeableConcept",
1800          "Indicates a meaning for the supplemental data. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing supplemental data to be correlated across measures.",
1801          0, 1, code));
1802      children.add(new Property("usage", "CodeableConcept",
1803          "An indicator of the intended usage for the supplemental data element. Supplemental data indicates the data is additional information requested to augment the measure information. Risk adjustment factor indicates the data is additional information used to calculate risk adjustment factors when applying a risk model to the measure calculation.",
1804          0, java.lang.Integer.MAX_VALUE, usage));
1805      children.add(new Property("description", "string", "The human readable description of this supplemental data.", 0,
1806          1, description));
1807      children.add(new Property("criteria", "Expression",
1808          "The criteria for the supplemental data. This is typically the name of a valid expression defined within a referenced library, but it may also be a path to a specific data element. The criteria defines the data to be returned for this element.",
1809          0, 1, criteria));
1810    }
1811
1812    @Override
1813    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1814      switch (_hash) {
1815      case 3059181:
1816        /* code */ return new Property("code", "CodeableConcept",
1817            "Indicates a meaning for the supplemental data. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing supplemental data to be correlated across measures.",
1818            0, 1, code);
1819      case 111574433:
1820        /* usage */ return new Property("usage", "CodeableConcept",
1821            "An indicator of the intended usage for the supplemental data element. Supplemental data indicates the data is additional information requested to augment the measure information. Risk adjustment factor indicates the data is additional information used to calculate risk adjustment factors when applying a risk model to the measure calculation.",
1822            0, java.lang.Integer.MAX_VALUE, usage);
1823      case -1724546052:
1824        /* description */ return new Property("description", "string",
1825            "The human readable description of this supplemental data.", 0, 1, description);
1826      case 1952046943:
1827        /* criteria */ return new Property("criteria", "Expression",
1828            "The criteria for the supplemental data. This is typically the name of a valid expression defined within a referenced library, but it may also be a path to a specific data element. The criteria defines the data to be returned for this element.",
1829            0, 1, criteria);
1830      default:
1831        return super.getNamedProperty(_hash, _name, _checkValid);
1832      }
1833
1834    }
1835
1836    @Override
1837    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1838      switch (hash) {
1839      case 3059181:
1840        /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeableConcept
1841      case 111574433:
1842        /* usage */ return this.usage == null ? new Base[0] : this.usage.toArray(new Base[this.usage.size()]); // CodeableConcept
1843      case -1724546052:
1844        /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // StringType
1845      case 1952046943:
1846        /* criteria */ return this.criteria == null ? new Base[0] : new Base[] { this.criteria }; // Expression
1847      default:
1848        return super.getProperty(hash, name, checkValid);
1849      }
1850
1851    }
1852
1853    @Override
1854    public Base setProperty(int hash, String name, Base value) throws FHIRException {
1855      switch (hash) {
1856      case 3059181: // code
1857        this.code = castToCodeableConcept(value); // CodeableConcept
1858        return value;
1859      case 111574433: // usage
1860        this.getUsage().add(castToCodeableConcept(value)); // CodeableConcept
1861        return value;
1862      case -1724546052: // description
1863        this.description = castToString(value); // StringType
1864        return value;
1865      case 1952046943: // criteria
1866        this.criteria = castToExpression(value); // Expression
1867        return value;
1868      default:
1869        return super.setProperty(hash, name, value);
1870      }
1871
1872    }
1873
1874    @Override
1875    public Base setProperty(String name, Base value) throws FHIRException {
1876      if (name.equals("code")) {
1877        this.code = castToCodeableConcept(value); // CodeableConcept
1878      } else if (name.equals("usage")) {
1879        this.getUsage().add(castToCodeableConcept(value));
1880      } else if (name.equals("description")) {
1881        this.description = castToString(value); // StringType
1882      } else if (name.equals("criteria")) {
1883        this.criteria = castToExpression(value); // Expression
1884      } else
1885        return super.setProperty(name, value);
1886      return value;
1887    }
1888
1889    @Override
1890    public Base makeProperty(int hash, String name) throws FHIRException {
1891      switch (hash) {
1892      case 3059181:
1893        return getCode();
1894      case 111574433:
1895        return addUsage();
1896      case -1724546052:
1897        return getDescriptionElement();
1898      case 1952046943:
1899        return getCriteria();
1900      default:
1901        return super.makeProperty(hash, name);
1902      }
1903
1904    }
1905
1906    @Override
1907    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1908      switch (hash) {
1909      case 3059181:
1910        /* code */ return new String[] { "CodeableConcept" };
1911      case 111574433:
1912        /* usage */ return new String[] { "CodeableConcept" };
1913      case -1724546052:
1914        /* description */ return new String[] { "string" };
1915      case 1952046943:
1916        /* criteria */ return new String[] { "Expression" };
1917      default:
1918        return super.getTypesForProperty(hash, name);
1919      }
1920
1921    }
1922
1923    @Override
1924    public Base addChild(String name) throws FHIRException {
1925      if (name.equals("code")) {
1926        this.code = new CodeableConcept();
1927        return this.code;
1928      } else if (name.equals("usage")) {
1929        return addUsage();
1930      } else if (name.equals("description")) {
1931        throw new FHIRException("Cannot call addChild on a singleton property Measure.description");
1932      } else if (name.equals("criteria")) {
1933        this.criteria = new Expression();
1934        return this.criteria;
1935      } else
1936        return super.addChild(name);
1937    }
1938
1939    public MeasureSupplementalDataComponent copy() {
1940      MeasureSupplementalDataComponent dst = new MeasureSupplementalDataComponent();
1941      copyValues(dst);
1942      return dst;
1943    }
1944
1945    public void copyValues(MeasureSupplementalDataComponent dst) {
1946      super.copyValues(dst);
1947      dst.code = code == null ? null : code.copy();
1948      if (usage != null) {
1949        dst.usage = new ArrayList<CodeableConcept>();
1950        for (CodeableConcept i : usage)
1951          dst.usage.add(i.copy());
1952      }
1953      ;
1954      dst.description = description == null ? null : description.copy();
1955      dst.criteria = criteria == null ? null : criteria.copy();
1956    }
1957
1958    @Override
1959    public boolean equalsDeep(Base other_) {
1960      if (!super.equalsDeep(other_))
1961        return false;
1962      if (!(other_ instanceof MeasureSupplementalDataComponent))
1963        return false;
1964      MeasureSupplementalDataComponent o = (MeasureSupplementalDataComponent) other_;
1965      return compareDeep(code, o.code, true) && compareDeep(usage, o.usage, true)
1966          && compareDeep(description, o.description, true) && compareDeep(criteria, o.criteria, true);
1967    }
1968
1969    @Override
1970    public boolean equalsShallow(Base other_) {
1971      if (!super.equalsShallow(other_))
1972        return false;
1973      if (!(other_ instanceof MeasureSupplementalDataComponent))
1974        return false;
1975      MeasureSupplementalDataComponent o = (MeasureSupplementalDataComponent) other_;
1976      return compareValues(description, o.description, true);
1977    }
1978
1979    public boolean isEmpty() {
1980      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, usage, description, criteria);
1981    }
1982
1983    public String fhirType() {
1984      return "Measure.supplementalData";
1985
1986    }
1987
1988  }
1989
1990  /**
1991   * A formal identifier that is used to identify this measure when it is
1992   * represented in other formats, or referenced in a specification, model, design
1993   * or an instance.
1994   */
1995  @Child(name = "identifier", type = {
1996      Identifier.class }, order = 0, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
1997  @Description(shortDefinition = "Additional identifier for the measure", formalDefinition = "A formal identifier that is used to identify this measure when it is represented in other formats, or referenced in a specification, model, design or an instance.")
1998  protected List<Identifier> identifier;
1999
2000  /**
2001   * An explanatory or alternate title for the measure giving additional
2002   * information about its content.
2003   */
2004  @Child(name = "subtitle", type = { StringType.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
2005  @Description(shortDefinition = "Subordinate title of the measure", formalDefinition = "An explanatory or alternate title for the measure giving additional information about its content.")
2006  protected StringType subtitle;
2007
2008  /**
2009   * The intended subjects for the measure. If this element is not provided, a
2010   * Patient subject is assumed, but the subject of the measure can be anything.
2011   */
2012  @Child(name = "subject", type = { CodeableConcept.class,
2013      Group.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
2014  @Description(shortDefinition = "E.g. Patient, Practitioner, RelatedPerson, Organization, Location, Device", formalDefinition = "The intended subjects for the measure. If this element is not provided, a Patient subject is assumed, but the subject of the measure can be anything.")
2015  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/subject-type")
2016  protected Type subject;
2017
2018  /**
2019   * Explanation of why this measure is needed and why it has been designed as it
2020   * has.
2021   */
2022  @Child(name = "purpose", type = {
2023      MarkdownType.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
2024  @Description(shortDefinition = "Why this measure is defined", formalDefinition = "Explanation of why this measure is needed and why it has been designed as it has.")
2025  protected MarkdownType purpose;
2026
2027  /**
2028   * A detailed description, from a clinical perspective, of how the measure is
2029   * used.
2030   */
2031  @Child(name = "usage", type = { StringType.class }, order = 4, min = 0, max = 1, modifier = false, summary = false)
2032  @Description(shortDefinition = "Describes the clinical usage of the measure", formalDefinition = "A detailed description, from a clinical perspective, of how the measure is used.")
2033  protected StringType usage;
2034
2035  /**
2036   * A copyright statement relating to the measure and/or its contents. Copyright
2037   * statements are generally legal restrictions on the use and publishing of the
2038   * measure.
2039   */
2040  @Child(name = "copyright", type = {
2041      MarkdownType.class }, order = 5, min = 0, max = 1, modifier = false, summary = false)
2042  @Description(shortDefinition = "Use and/or publishing restrictions", formalDefinition = "A copyright statement relating to the measure and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the measure.")
2043  protected MarkdownType copyright;
2044
2045  /**
2046   * The date on which the resource content was approved by the publisher.
2047   * Approval happens once when the content is officially approved for usage.
2048   */
2049  @Child(name = "approvalDate", type = {
2050      DateType.class }, order = 6, min = 0, max = 1, modifier = false, summary = false)
2051  @Description(shortDefinition = "When the measure 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.")
2052  protected DateType approvalDate;
2053
2054  /**
2055   * The date on which the resource content was last reviewed. Review happens
2056   * periodically after approval but does not change the original approval date.
2057   */
2058  @Child(name = "lastReviewDate", type = {
2059      DateType.class }, order = 7, min = 0, max = 1, modifier = false, summary = false)
2060  @Description(shortDefinition = "When the measure 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.")
2061  protected DateType lastReviewDate;
2062
2063  /**
2064   * The period during which the measure content was or is planned to be in active
2065   * use.
2066   */
2067  @Child(name = "effectivePeriod", type = {
2068      Period.class }, order = 8, min = 0, max = 1, modifier = false, summary = true)
2069  @Description(shortDefinition = "When the measure is expected to be used", formalDefinition = "The period during which the measure content was or is planned to be in active use.")
2070  protected Period effectivePeriod;
2071
2072  /**
2073   * Descriptive topics related to the content of the measure. Topics provide a
2074   * high-level categorization grouping types of measures that can be useful for
2075   * filtering and searching.
2076   */
2077  @Child(name = "topic", type = {
2078      CodeableConcept.class }, order = 9, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
2079  @Description(shortDefinition = "The category of the measure, such as Education, Treatment, Assessment, etc.", formalDefinition = "Descriptive topics related to the content of the measure. Topics provide a high-level categorization grouping types of measures that can be useful for filtering and searching.")
2080  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/definition-topic")
2081  protected List<CodeableConcept> topic;
2082
2083  /**
2084   * An individiual or organization primarily involved in the creation and
2085   * maintenance of the content.
2086   */
2087  @Child(name = "author", type = {
2088      ContactDetail.class }, order = 10, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
2089  @Description(shortDefinition = "Who authored the content", formalDefinition = "An individiual or organization primarily involved in the creation and maintenance of the content.")
2090  protected List<ContactDetail> author;
2091
2092  /**
2093   * An individual or organization primarily responsible for internal coherence of
2094   * the content.
2095   */
2096  @Child(name = "editor", type = {
2097      ContactDetail.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
2098  @Description(shortDefinition = "Who edited the content", formalDefinition = "An individual or organization primarily responsible for internal coherence of the content.")
2099  protected List<ContactDetail> editor;
2100
2101  /**
2102   * An individual or organization primarily responsible for review of some aspect
2103   * of the content.
2104   */
2105  @Child(name = "reviewer", type = {
2106      ContactDetail.class }, order = 12, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
2107  @Description(shortDefinition = "Who reviewed the content", formalDefinition = "An individual or organization primarily responsible for review of some aspect of the content.")
2108  protected List<ContactDetail> reviewer;
2109
2110  /**
2111   * An individual or organization responsible for officially endorsing the
2112   * content for use in some setting.
2113   */
2114  @Child(name = "endorser", type = {
2115      ContactDetail.class }, order = 13, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
2116  @Description(shortDefinition = "Who endorsed the content", formalDefinition = "An individual or organization responsible for officially endorsing the content for use in some setting.")
2117  protected List<ContactDetail> endorser;
2118
2119  /**
2120   * Related artifacts such as additional documentation, justification, or
2121   * bibliographic references.
2122   */
2123  @Child(name = "relatedArtifact", type = {
2124      RelatedArtifact.class }, order = 14, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
2125  @Description(shortDefinition = "Additional documentation, citations, etc.", formalDefinition = "Related artifacts such as additional documentation, justification, or bibliographic references.")
2126  protected List<RelatedArtifact> relatedArtifact;
2127
2128  /**
2129   * A reference to a Library resource containing the formal logic used by the
2130   * measure.
2131   */
2132  @Child(name = "library", type = {
2133      CanonicalType.class }, order = 15, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
2134  @Description(shortDefinition = "Logic used by the measure", formalDefinition = "A reference to a Library resource containing the formal logic used by the measure.")
2135  protected List<CanonicalType> library;
2136
2137  /**
2138   * Notices and disclaimers regarding the use of the measure or related to
2139   * intellectual property (such as code systems) referenced by the measure.
2140   */
2141  @Child(name = "disclaimer", type = {
2142      MarkdownType.class }, order = 16, min = 0, max = 1, modifier = false, summary = true)
2143  @Description(shortDefinition = "Disclaimer for use of the measure or its referenced content", formalDefinition = "Notices and disclaimers regarding the use of the measure or related to intellectual property (such as code systems) referenced by the measure.")
2144  protected MarkdownType disclaimer;
2145
2146  /**
2147   * Indicates how the calculation is performed for the measure, including
2148   * proportion, ratio, continuous-variable, and cohort. The value set is
2149   * extensible, allowing additional measure scoring types to be represented.
2150   */
2151  @Child(name = "scoring", type = {
2152      CodeableConcept.class }, order = 17, min = 0, max = 1, modifier = false, summary = true)
2153  @Description(shortDefinition = "proportion | ratio | continuous-variable | cohort", formalDefinition = "Indicates how the calculation is performed for the measure, including proportion, ratio, continuous-variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented.")
2154  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/measure-scoring")
2155  protected CodeableConcept scoring;
2156
2157  /**
2158   * If this is a composite measure, the scoring method used to combine the
2159   * component measures to determine the composite score.
2160   */
2161  @Child(name = "compositeScoring", type = {
2162      CodeableConcept.class }, order = 18, min = 0, max = 1, modifier = false, summary = true)
2163  @Description(shortDefinition = "opportunity | all-or-nothing | linear | weighted", formalDefinition = "If this is a composite measure, the scoring method used to combine the component measures to determine the composite score.")
2164  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/composite-measure-scoring")
2165  protected CodeableConcept compositeScoring;
2166
2167  /**
2168   * Indicates whether the measure is used to examine a process, an outcome over
2169   * time, a patient-reported outcome, or a structure measure such as utilization.
2170   */
2171  @Child(name = "type", type = {
2172      CodeableConcept.class }, order = 19, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
2173  @Description(shortDefinition = "process | outcome | structure | patient-reported-outcome | composite", formalDefinition = "Indicates whether the measure is used to examine a process, an outcome over time, a patient-reported outcome, or a structure measure such as utilization.")
2174  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/measure-type")
2175  protected List<CodeableConcept> type;
2176
2177  /**
2178   * A description of the risk adjustment factors that may impact the resulting
2179   * score for the measure and how they may be accounted for when computing and
2180   * reporting measure results.
2181   */
2182  @Child(name = "riskAdjustment", type = {
2183      StringType.class }, order = 20, min = 0, max = 1, modifier = false, summary = true)
2184  @Description(shortDefinition = "How risk adjustment is applied for this measure", formalDefinition = "A description of the risk adjustment factors that may impact the resulting score for the measure and how they may be accounted for when computing and reporting measure results.")
2185  protected StringType riskAdjustment;
2186
2187  /**
2188   * Describes how to combine the information calculated, based on logic in each
2189   * of several populations, into one summarized result.
2190   */
2191  @Child(name = "rateAggregation", type = {
2192      StringType.class }, order = 21, min = 0, max = 1, modifier = false, summary = true)
2193  @Description(shortDefinition = "How is rate aggregation performed for this measure", formalDefinition = "Describes how to combine the information calculated, based on logic in each of several populations, into one summarized result.")
2194  protected StringType rateAggregation;
2195
2196  /**
2197   * Provides a succinct statement of the need for the measure. Usually includes
2198   * statements pertaining to importance criterion: impact, gap in care, and
2199   * evidence.
2200   */
2201  @Child(name = "rationale", type = {
2202      MarkdownType.class }, order = 22, min = 0, max = 1, modifier = false, summary = true)
2203  @Description(shortDefinition = "Detailed description of why the measure exists", formalDefinition = "Provides a succinct statement of the need for the measure. Usually includes statements pertaining to importance criterion: impact, gap in care, and evidence.")
2204  protected MarkdownType rationale;
2205
2206  /**
2207   * Provides a summary of relevant clinical guidelines or other clinical
2208   * recommendations supporting the measure.
2209   */
2210  @Child(name = "clinicalRecommendationStatement", type = {
2211      MarkdownType.class }, order = 23, min = 0, max = 1, modifier = false, summary = true)
2212  @Description(shortDefinition = "Summary of clinical guidelines", formalDefinition = "Provides a summary of relevant clinical guidelines or other clinical recommendations supporting the measure.")
2213  protected MarkdownType clinicalRecommendationStatement;
2214
2215  /**
2216   * Information on whether an increase or decrease in score is the preferred
2217   * result (e.g., a higher score indicates better quality OR a lower score
2218   * indicates better quality OR quality is within a range).
2219   */
2220  @Child(name = "improvementNotation", type = {
2221      CodeableConcept.class }, order = 24, min = 0, max = 1, modifier = false, summary = true)
2222  @Description(shortDefinition = "increase | decrease", formalDefinition = "Information on whether an increase or decrease in score is the preferred result (e.g., a higher score indicates better quality OR a lower score indicates better quality OR quality is within a range).")
2223  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/measure-improvement-notation")
2224  protected CodeableConcept improvementNotation;
2225
2226  /**
2227   * Provides a description of an individual term used within the measure.
2228   */
2229  @Child(name = "definition", type = {
2230      MarkdownType.class }, order = 25, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
2231  @Description(shortDefinition = "Defined terms used in the measure documentation", formalDefinition = "Provides a description of an individual term used within the measure.")
2232  protected List<MarkdownType> definition;
2233
2234  /**
2235   * Additional guidance for the measure including how it can be used in a
2236   * clinical context, and the intent of the measure.
2237   */
2238  @Child(name = "guidance", type = {
2239      MarkdownType.class }, order = 26, min = 0, max = 1, modifier = false, summary = true)
2240  @Description(shortDefinition = "Additional guidance for implementers", formalDefinition = "Additional guidance for the measure including how it can be used in a clinical context, and the intent of the measure.")
2241  protected MarkdownType guidance;
2242
2243  /**
2244   * A group of population criteria for the measure.
2245   */
2246  @Child(name = "group", type = {}, order = 27, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
2247  @Description(shortDefinition = "Population criteria group", formalDefinition = "A group of population criteria for the measure.")
2248  protected List<MeasureGroupComponent> group;
2249
2250  /**
2251   * The supplemental data criteria for the measure report, specified as either
2252   * the name of a valid CQL expression within a referenced library, or a valid
2253   * FHIR Resource Path.
2254   */
2255  @Child(name = "supplementalData", type = {}, order = 28, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
2256  @Description(shortDefinition = "What other data should be reported with the measure", formalDefinition = "The supplemental data criteria for the measure report, specified as either the name of a valid CQL expression within a referenced library, or a valid FHIR Resource Path.")
2257  protected List<MeasureSupplementalDataComponent> supplementalData;
2258
2259  private static final long serialVersionUID = 341731972L;
2260
2261  /**
2262   * Constructor
2263   */
2264  public Measure() {
2265    super();
2266  }
2267
2268  /**
2269   * Constructor
2270   */
2271  public Measure(Enumeration<PublicationStatus> status) {
2272    super();
2273    this.status = status;
2274  }
2275
2276  /**
2277   * @return {@link #url} (An absolute URI that is used to identify this measure
2278   *         when it is referenced in a specification, model, design or an
2279   *         instance; also called its canonical identifier. This SHOULD be
2280   *         globally unique and SHOULD be a literal address at which at which an
2281   *         authoritative instance of this measure is (or will be) published.
2282   *         This URL can be the target of a canonical reference. It SHALL remain
2283   *         the same when the measure is stored on different servers.). This is
2284   *         the underlying object with id, value and extensions. The accessor
2285   *         "getUrl" gives direct access to the value
2286   */
2287  public UriType getUrlElement() {
2288    if (this.url == null)
2289      if (Configuration.errorOnAutoCreate())
2290        throw new Error("Attempt to auto-create Measure.url");
2291      else if (Configuration.doAutoCreate())
2292        this.url = new UriType(); // bb
2293    return this.url;
2294  }
2295
2296  public boolean hasUrlElement() {
2297    return this.url != null && !this.url.isEmpty();
2298  }
2299
2300  public boolean hasUrl() {
2301    return this.url != null && !this.url.isEmpty();
2302  }
2303
2304  /**
2305   * @param value {@link #url} (An absolute URI that is used to identify this
2306   *              measure when it is referenced in a specification, model, design
2307   *              or an instance; also called its canonical identifier. This
2308   *              SHOULD be globally unique and SHOULD be a literal address at
2309   *              which at which an authoritative instance of this measure is (or
2310   *              will be) published. This URL can be the target of a canonical
2311   *              reference. It SHALL remain the same when the measure is stored
2312   *              on different servers.). This is the underlying object with id,
2313   *              value and extensions. The accessor "getUrl" gives direct access
2314   *              to the value
2315   */
2316  public Measure setUrlElement(UriType value) {
2317    this.url = value;
2318    return this;
2319  }
2320
2321  /**
2322   * @return An absolute URI that is used to identify this measure when it is
2323   *         referenced in a specification, model, design or an instance; also
2324   *         called its canonical identifier. This SHOULD be globally unique and
2325   *         SHOULD be a literal address at which at which an authoritative
2326   *         instance of this measure is (or will be) published. This URL can be
2327   *         the target of a canonical reference. It SHALL remain the same when
2328   *         the measure is stored on different servers.
2329   */
2330  public String getUrl() {
2331    return this.url == null ? null : this.url.getValue();
2332  }
2333
2334  /**
2335   * @param value An absolute URI that is used to identify this measure when it is
2336   *              referenced in a specification, model, design or an instance;
2337   *              also called its canonical identifier. This SHOULD be globally
2338   *              unique and SHOULD be a literal address at which at which an
2339   *              authoritative instance of this measure is (or will be)
2340   *              published. This URL can be the target of a canonical reference.
2341   *              It SHALL remain the same when the measure is stored on different
2342   *              servers.
2343   */
2344  public Measure setUrl(String value) {
2345    if (Utilities.noString(value))
2346      this.url = null;
2347    else {
2348      if (this.url == null)
2349        this.url = new UriType();
2350      this.url.setValue(value);
2351    }
2352    return this;
2353  }
2354
2355  /**
2356   * @return {@link #identifier} (A formal identifier that is used to identify
2357   *         this measure when it is represented in other formats, or referenced
2358   *         in a specification, model, design or an instance.)
2359   */
2360  public List<Identifier> getIdentifier() {
2361    if (this.identifier == null)
2362      this.identifier = new ArrayList<Identifier>();
2363    return this.identifier;
2364  }
2365
2366  /**
2367   * @return Returns a reference to <code>this</code> for easy method chaining
2368   */
2369  public Measure setIdentifier(List<Identifier> theIdentifier) {
2370    this.identifier = theIdentifier;
2371    return this;
2372  }
2373
2374  public boolean hasIdentifier() {
2375    if (this.identifier == null)
2376      return false;
2377    for (Identifier item : this.identifier)
2378      if (!item.isEmpty())
2379        return true;
2380    return false;
2381  }
2382
2383  public Identifier addIdentifier() { // 3
2384    Identifier t = new Identifier();
2385    if (this.identifier == null)
2386      this.identifier = new ArrayList<Identifier>();
2387    this.identifier.add(t);
2388    return t;
2389  }
2390
2391  public Measure addIdentifier(Identifier t) { // 3
2392    if (t == null)
2393      return this;
2394    if (this.identifier == null)
2395      this.identifier = new ArrayList<Identifier>();
2396    this.identifier.add(t);
2397    return this;
2398  }
2399
2400  /**
2401   * @return The first repetition of repeating field {@link #identifier}, creating
2402   *         it if it does not already exist
2403   */
2404  public Identifier getIdentifierFirstRep() {
2405    if (getIdentifier().isEmpty()) {
2406      addIdentifier();
2407    }
2408    return getIdentifier().get(0);
2409  }
2410
2411  /**
2412   * @return {@link #version} (The identifier that is used to identify this
2413   *         version of the measure when it is referenced in a specification,
2414   *         model, design or instance. This is an arbitrary value managed by the
2415   *         measure author and is not expected to be globally unique. For
2416   *         example, it might be a timestamp (e.g. yyyymmdd) if a managed version
2417   *         is not available. There is also no expectation that versions can be
2418   *         placed in a lexicographical sequence. To provide a version consistent
2419   *         with the Decision Support Service specification, use the format
2420   *         Major.Minor.Revision (e.g. 1.0.0). For more information on versioning
2421   *         knowledge assets, refer to the Decision Support Service
2422   *         specification. Note that a version is required for non-experimental
2423   *         active artifacts.). This is the underlying object with id, value and
2424   *         extensions. The accessor "getVersion" gives direct access to the
2425   *         value
2426   */
2427  public StringType getVersionElement() {
2428    if (this.version == null)
2429      if (Configuration.errorOnAutoCreate())
2430        throw new Error("Attempt to auto-create Measure.version");
2431      else if (Configuration.doAutoCreate())
2432        this.version = new StringType(); // bb
2433    return this.version;
2434  }
2435
2436  public boolean hasVersionElement() {
2437    return this.version != null && !this.version.isEmpty();
2438  }
2439
2440  public boolean hasVersion() {
2441    return this.version != null && !this.version.isEmpty();
2442  }
2443
2444  /**
2445   * @param value {@link #version} (The identifier that is used to identify this
2446   *              version of the measure when it is referenced in a specification,
2447   *              model, design or instance. This is an arbitrary value managed by
2448   *              the measure author and is not expected to be globally unique.
2449   *              For example, it might be a timestamp (e.g. yyyymmdd) if a
2450   *              managed version is not available. There is also no expectation
2451   *              that versions can be placed in a lexicographical sequence. To
2452   *              provide a version consistent with the Decision Support Service
2453   *              specification, use the format Major.Minor.Revision (e.g. 1.0.0).
2454   *              For more information on versioning knowledge assets, refer to
2455   *              the Decision Support Service specification. Note that a version
2456   *              is required for non-experimental active artifacts.). This is the
2457   *              underlying object with id, value and extensions. The accessor
2458   *              "getVersion" gives direct access to the value
2459   */
2460  public Measure setVersionElement(StringType value) {
2461    this.version = value;
2462    return this;
2463  }
2464
2465  /**
2466   * @return The identifier that is used to identify this version of the measure
2467   *         when it is referenced in a specification, model, design or instance.
2468   *         This is an arbitrary value managed by the measure author and is not
2469   *         expected to be globally unique. For example, it might be a timestamp
2470   *         (e.g. yyyymmdd) if a managed version is not available. There is also
2471   *         no expectation that versions can be placed in a lexicographical
2472   *         sequence. To provide a version consistent with the Decision Support
2473   *         Service specification, use the format Major.Minor.Revision (e.g.
2474   *         1.0.0). For more information on versioning knowledge assets, refer to
2475   *         the Decision Support Service specification. Note that a version is
2476   *         required for non-experimental active artifacts.
2477   */
2478  public String getVersion() {
2479    return this.version == null ? null : this.version.getValue();
2480  }
2481
2482  /**
2483   * @param value The identifier that is used to identify this version of the
2484   *              measure when it is referenced in a specification, model, design
2485   *              or instance. This is an arbitrary value managed by the measure
2486   *              author and is not expected to be globally unique. For example,
2487   *              it might be a timestamp (e.g. yyyymmdd) if a managed version is
2488   *              not available. There is also no expectation that versions can be
2489   *              placed in a lexicographical sequence. To provide a version
2490   *              consistent with the Decision Support Service specification, use
2491   *              the format Major.Minor.Revision (e.g. 1.0.0). For more
2492   *              information on versioning knowledge assets, refer to the
2493   *              Decision Support Service specification. Note that a version is
2494   *              required for non-experimental active artifacts.
2495   */
2496  public Measure setVersion(String value) {
2497    if (Utilities.noString(value))
2498      this.version = null;
2499    else {
2500      if (this.version == null)
2501        this.version = new StringType();
2502      this.version.setValue(value);
2503    }
2504    return this;
2505  }
2506
2507  /**
2508   * @return {@link #name} (A natural language name identifying the measure. This
2509   *         name should be usable as an identifier for the module by machine
2510   *         processing applications such as code generation.). This is the
2511   *         underlying object with id, value and extensions. The accessor
2512   *         "getName" gives direct access to the value
2513   */
2514  public StringType getNameElement() {
2515    if (this.name == null)
2516      if (Configuration.errorOnAutoCreate())
2517        throw new Error("Attempt to auto-create Measure.name");
2518      else if (Configuration.doAutoCreate())
2519        this.name = new StringType(); // bb
2520    return this.name;
2521  }
2522
2523  public boolean hasNameElement() {
2524    return this.name != null && !this.name.isEmpty();
2525  }
2526
2527  public boolean hasName() {
2528    return this.name != null && !this.name.isEmpty();
2529  }
2530
2531  /**
2532   * @param value {@link #name} (A natural language name identifying the measure.
2533   *              This name should be usable as an identifier for the module by
2534   *              machine processing applications such as code generation.). This
2535   *              is the underlying object with id, value and extensions. The
2536   *              accessor "getName" gives direct access to the value
2537   */
2538  public Measure setNameElement(StringType value) {
2539    this.name = value;
2540    return this;
2541  }
2542
2543  /**
2544   * @return A natural language name identifying the measure. This name should be
2545   *         usable as an identifier for the module by machine processing
2546   *         applications such as code generation.
2547   */
2548  public String getName() {
2549    return this.name == null ? null : this.name.getValue();
2550  }
2551
2552  /**
2553   * @param value A natural language name identifying the measure. This name
2554   *              should be usable as an identifier for the module by machine
2555   *              processing applications such as code generation.
2556   */
2557  public Measure setName(String value) {
2558    if (Utilities.noString(value))
2559      this.name = null;
2560    else {
2561      if (this.name == null)
2562        this.name = new StringType();
2563      this.name.setValue(value);
2564    }
2565    return this;
2566  }
2567
2568  /**
2569   * @return {@link #title} (A short, descriptive, user-friendly title for the
2570   *         measure.). This is the underlying object with id, value and
2571   *         extensions. The accessor "getTitle" gives direct access to the value
2572   */
2573  public StringType getTitleElement() {
2574    if (this.title == null)
2575      if (Configuration.errorOnAutoCreate())
2576        throw new Error("Attempt to auto-create Measure.title");
2577      else if (Configuration.doAutoCreate())
2578        this.title = new StringType(); // bb
2579    return this.title;
2580  }
2581
2582  public boolean hasTitleElement() {
2583    return this.title != null && !this.title.isEmpty();
2584  }
2585
2586  public boolean hasTitle() {
2587    return this.title != null && !this.title.isEmpty();
2588  }
2589
2590  /**
2591   * @param value {@link #title} (A short, descriptive, user-friendly title for
2592   *              the measure.). This is the underlying object with id, value and
2593   *              extensions. The accessor "getTitle" gives direct access to the
2594   *              value
2595   */
2596  public Measure setTitleElement(StringType value) {
2597    this.title = value;
2598    return this;
2599  }
2600
2601  /**
2602   * @return A short, descriptive, user-friendly title for the measure.
2603   */
2604  public String getTitle() {
2605    return this.title == null ? null : this.title.getValue();
2606  }
2607
2608  /**
2609   * @param value A short, descriptive, user-friendly title for the measure.
2610   */
2611  public Measure setTitle(String value) {
2612    if (Utilities.noString(value))
2613      this.title = null;
2614    else {
2615      if (this.title == null)
2616        this.title = new StringType();
2617      this.title.setValue(value);
2618    }
2619    return this;
2620  }
2621
2622  /**
2623   * @return {@link #subtitle} (An explanatory or alternate title for the measure
2624   *         giving additional information about its content.). This is the
2625   *         underlying object with id, value and extensions. The accessor
2626   *         "getSubtitle" gives direct access to the value
2627   */
2628  public StringType getSubtitleElement() {
2629    if (this.subtitle == null)
2630      if (Configuration.errorOnAutoCreate())
2631        throw new Error("Attempt to auto-create Measure.subtitle");
2632      else if (Configuration.doAutoCreate())
2633        this.subtitle = new StringType(); // bb
2634    return this.subtitle;
2635  }
2636
2637  public boolean hasSubtitleElement() {
2638    return this.subtitle != null && !this.subtitle.isEmpty();
2639  }
2640
2641  public boolean hasSubtitle() {
2642    return this.subtitle != null && !this.subtitle.isEmpty();
2643  }
2644
2645  /**
2646   * @param value {@link #subtitle} (An explanatory or alternate title for the
2647   *              measure giving additional information about its content.). This
2648   *              is the underlying object with id, value and extensions. The
2649   *              accessor "getSubtitle" gives direct access to the value
2650   */
2651  public Measure setSubtitleElement(StringType value) {
2652    this.subtitle = value;
2653    return this;
2654  }
2655
2656  /**
2657   * @return An explanatory or alternate title for the measure giving additional
2658   *         information about its content.
2659   */
2660  public String getSubtitle() {
2661    return this.subtitle == null ? null : this.subtitle.getValue();
2662  }
2663
2664  /**
2665   * @param value An explanatory or alternate title for the measure giving
2666   *              additional information about its content.
2667   */
2668  public Measure setSubtitle(String value) {
2669    if (Utilities.noString(value))
2670      this.subtitle = null;
2671    else {
2672      if (this.subtitle == null)
2673        this.subtitle = new StringType();
2674      this.subtitle.setValue(value);
2675    }
2676    return this;
2677  }
2678
2679  /**
2680   * @return {@link #status} (The status of this measure. Enables tracking the
2681   *         life-cycle of the content.). This is the underlying object with id,
2682   *         value and extensions. The accessor "getStatus" gives direct access to
2683   *         the value
2684   */
2685  public Enumeration<PublicationStatus> getStatusElement() {
2686    if (this.status == null)
2687      if (Configuration.errorOnAutoCreate())
2688        throw new Error("Attempt to auto-create Measure.status");
2689      else if (Configuration.doAutoCreate())
2690        this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
2691    return this.status;
2692  }
2693
2694  public boolean hasStatusElement() {
2695    return this.status != null && !this.status.isEmpty();
2696  }
2697
2698  public boolean hasStatus() {
2699    return this.status != null && !this.status.isEmpty();
2700  }
2701
2702  /**
2703   * @param value {@link #status} (The status of this measure. Enables tracking
2704   *              the life-cycle of the content.). This is the underlying object
2705   *              with id, value and extensions. The accessor "getStatus" gives
2706   *              direct access to the value
2707   */
2708  public Measure setStatusElement(Enumeration<PublicationStatus> value) {
2709    this.status = value;
2710    return this;
2711  }
2712
2713  /**
2714   * @return The status of this measure. Enables tracking the life-cycle of the
2715   *         content.
2716   */
2717  public PublicationStatus getStatus() {
2718    return this.status == null ? null : this.status.getValue();
2719  }
2720
2721  /**
2722   * @param value The status of this measure. Enables tracking the life-cycle of
2723   *              the content.
2724   */
2725  public Measure setStatus(PublicationStatus value) {
2726    if (this.status == null)
2727      this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
2728    this.status.setValue(value);
2729    return this;
2730  }
2731
2732  /**
2733   * @return {@link #experimental} (A Boolean value to indicate that this measure
2734   *         is authored for testing purposes (or education/evaluation/marketing)
2735   *         and is not intended to be used for genuine usage.). This is the
2736   *         underlying object with id, value and extensions. The accessor
2737   *         "getExperimental" gives direct access to the value
2738   */
2739  public BooleanType getExperimentalElement() {
2740    if (this.experimental == null)
2741      if (Configuration.errorOnAutoCreate())
2742        throw new Error("Attempt to auto-create Measure.experimental");
2743      else if (Configuration.doAutoCreate())
2744        this.experimental = new BooleanType(); // bb
2745    return this.experimental;
2746  }
2747
2748  public boolean hasExperimentalElement() {
2749    return this.experimental != null && !this.experimental.isEmpty();
2750  }
2751
2752  public boolean hasExperimental() {
2753    return this.experimental != null && !this.experimental.isEmpty();
2754  }
2755
2756  /**
2757   * @param value {@link #experimental} (A Boolean value to indicate that this
2758   *              measure is authored for testing purposes (or
2759   *              education/evaluation/marketing) and is not intended to be used
2760   *              for genuine usage.). This is the underlying object with id,
2761   *              value and extensions. The accessor "getExperimental" gives
2762   *              direct access to the value
2763   */
2764  public Measure setExperimentalElement(BooleanType value) {
2765    this.experimental = value;
2766    return this;
2767  }
2768
2769  /**
2770   * @return A Boolean value to indicate that this measure is authored for testing
2771   *         purposes (or education/evaluation/marketing) and is not intended to
2772   *         be used for genuine usage.
2773   */
2774  public boolean getExperimental() {
2775    return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
2776  }
2777
2778  /**
2779   * @param value A Boolean value to indicate that this measure is authored for
2780   *              testing purposes (or education/evaluation/marketing) and is not
2781   *              intended to be used for genuine usage.
2782   */
2783  public Measure setExperimental(boolean value) {
2784    if (this.experimental == null)
2785      this.experimental = new BooleanType();
2786    this.experimental.setValue(value);
2787    return this;
2788  }
2789
2790  /**
2791   * @return {@link #subject} (The intended subjects for the measure. If this
2792   *         element is not provided, a Patient subject is assumed, but the
2793   *         subject of the measure can be anything.)
2794   */
2795  public Type getSubject() {
2796    return this.subject;
2797  }
2798
2799  /**
2800   * @return {@link #subject} (The intended subjects for the measure. If this
2801   *         element is not provided, a Patient subject is assumed, but the
2802   *         subject of the measure can be anything.)
2803   */
2804  public CodeableConcept getSubjectCodeableConcept() throws FHIRException {
2805    if (this.subject == null)
2806      this.subject = new CodeableConcept();
2807    if (!(this.subject instanceof CodeableConcept))
2808      throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "
2809          + this.subject.getClass().getName() + " was encountered");
2810    return (CodeableConcept) this.subject;
2811  }
2812
2813  public boolean hasSubjectCodeableConcept() {
2814    return this != null && this.subject instanceof CodeableConcept;
2815  }
2816
2817  /**
2818   * @return {@link #subject} (The intended subjects for the measure. If this
2819   *         element is not provided, a Patient subject is assumed, but the
2820   *         subject of the measure can be anything.)
2821   */
2822  public Reference getSubjectReference() throws FHIRException {
2823    if (this.subject == null)
2824      this.subject = new Reference();
2825    if (!(this.subject instanceof Reference))
2826      throw new FHIRException("Type mismatch: the type Reference was expected, but " + this.subject.getClass().getName()
2827          + " was encountered");
2828    return (Reference) this.subject;
2829  }
2830
2831  public boolean hasSubjectReference() {
2832    return this != null && this.subject instanceof Reference;
2833  }
2834
2835  public boolean hasSubject() {
2836    return this.subject != null && !this.subject.isEmpty();
2837  }
2838
2839  /**
2840   * @param value {@link #subject} (The intended subjects for the measure. If this
2841   *              element is not provided, a Patient subject is assumed, but the
2842   *              subject of the measure can be anything.)
2843   */
2844  public Measure setSubject(Type value) {
2845    if (value != null && !(value instanceof CodeableConcept || value instanceof Reference))
2846      throw new Error("Not the right type for Measure.subject[x]: " + value.fhirType());
2847    this.subject = value;
2848    return this;
2849  }
2850
2851  /**
2852   * @return {@link #date} (The date (and optionally time) when the measure was
2853   *         published. The date must change when the business version changes and
2854   *         it must change if the status code changes. In addition, it should
2855   *         change when the substantive content of the measure changes.). This is
2856   *         the underlying object with id, value and extensions. The accessor
2857   *         "getDate" gives direct access to the value
2858   */
2859  public DateTimeType getDateElement() {
2860    if (this.date == null)
2861      if (Configuration.errorOnAutoCreate())
2862        throw new Error("Attempt to auto-create Measure.date");
2863      else if (Configuration.doAutoCreate())
2864        this.date = new DateTimeType(); // bb
2865    return this.date;
2866  }
2867
2868  public boolean hasDateElement() {
2869    return this.date != null && !this.date.isEmpty();
2870  }
2871
2872  public boolean hasDate() {
2873    return this.date != null && !this.date.isEmpty();
2874  }
2875
2876  /**
2877   * @param value {@link #date} (The date (and optionally time) when the measure
2878   *              was published. The date must change when the business version
2879   *              changes and it must change if the status code changes. In
2880   *              addition, it should change when the substantive content of the
2881   *              measure changes.). This is the underlying object with id, value
2882   *              and extensions. The accessor "getDate" gives direct access to
2883   *              the value
2884   */
2885  public Measure setDateElement(DateTimeType value) {
2886    this.date = value;
2887    return this;
2888  }
2889
2890  /**
2891   * @return The date (and optionally time) when the measure was published. The
2892   *         date must change when the business version changes and it must change
2893   *         if the status code changes. In addition, it should change when the
2894   *         substantive content of the measure changes.
2895   */
2896  public Date getDate() {
2897    return this.date == null ? null : this.date.getValue();
2898  }
2899
2900  /**
2901   * @param value The date (and optionally time) when the measure was published.
2902   *              The date must change when the business version changes and it
2903   *              must change if the status code changes. In addition, it should
2904   *              change when the substantive content of the measure changes.
2905   */
2906  public Measure setDate(Date value) {
2907    if (value == null)
2908      this.date = null;
2909    else {
2910      if (this.date == null)
2911        this.date = new DateTimeType();
2912      this.date.setValue(value);
2913    }
2914    return this;
2915  }
2916
2917  /**
2918   * @return {@link #publisher} (The name of the organization or individual that
2919   *         published the measure.). This is the underlying object with id, value
2920   *         and extensions. The accessor "getPublisher" gives direct access to
2921   *         the value
2922   */
2923  public StringType getPublisherElement() {
2924    if (this.publisher == null)
2925      if (Configuration.errorOnAutoCreate())
2926        throw new Error("Attempt to auto-create Measure.publisher");
2927      else if (Configuration.doAutoCreate())
2928        this.publisher = new StringType(); // bb
2929    return this.publisher;
2930  }
2931
2932  public boolean hasPublisherElement() {
2933    return this.publisher != null && !this.publisher.isEmpty();
2934  }
2935
2936  public boolean hasPublisher() {
2937    return this.publisher != null && !this.publisher.isEmpty();
2938  }
2939
2940  /**
2941   * @param value {@link #publisher} (The name of the organization or individual
2942   *              that published the measure.). This is the underlying object with
2943   *              id, value and extensions. The accessor "getPublisher" gives
2944   *              direct access to the value
2945   */
2946  public Measure setPublisherElement(StringType value) {
2947    this.publisher = value;
2948    return this;
2949  }
2950
2951  /**
2952   * @return The name of the organization or individual that published the
2953   *         measure.
2954   */
2955  public String getPublisher() {
2956    return this.publisher == null ? null : this.publisher.getValue();
2957  }
2958
2959  /**
2960   * @param value The name of the organization or individual that published the
2961   *              measure.
2962   */
2963  public Measure setPublisher(String value) {
2964    if (Utilities.noString(value))
2965      this.publisher = null;
2966    else {
2967      if (this.publisher == null)
2968        this.publisher = new StringType();
2969      this.publisher.setValue(value);
2970    }
2971    return this;
2972  }
2973
2974  /**
2975   * @return {@link #contact} (Contact details to assist a user in finding and
2976   *         communicating with the publisher.)
2977   */
2978  public List<ContactDetail> getContact() {
2979    if (this.contact == null)
2980      this.contact = new ArrayList<ContactDetail>();
2981    return this.contact;
2982  }
2983
2984  /**
2985   * @return Returns a reference to <code>this</code> for easy method chaining
2986   */
2987  public Measure setContact(List<ContactDetail> theContact) {
2988    this.contact = theContact;
2989    return this;
2990  }
2991
2992  public boolean hasContact() {
2993    if (this.contact == null)
2994      return false;
2995    for (ContactDetail item : this.contact)
2996      if (!item.isEmpty())
2997        return true;
2998    return false;
2999  }
3000
3001  public ContactDetail addContact() { // 3
3002    ContactDetail t = new ContactDetail();
3003    if (this.contact == null)
3004      this.contact = new ArrayList<ContactDetail>();
3005    this.contact.add(t);
3006    return t;
3007  }
3008
3009  public Measure addContact(ContactDetail t) { // 3
3010    if (t == null)
3011      return this;
3012    if (this.contact == null)
3013      this.contact = new ArrayList<ContactDetail>();
3014    this.contact.add(t);
3015    return this;
3016  }
3017
3018  /**
3019   * @return The first repetition of repeating field {@link #contact}, creating it
3020   *         if it does not already exist
3021   */
3022  public ContactDetail getContactFirstRep() {
3023    if (getContact().isEmpty()) {
3024      addContact();
3025    }
3026    return getContact().get(0);
3027  }
3028
3029  /**
3030   * @return {@link #description} (A free text natural language description of the
3031   *         measure from a consumer's perspective.). This is the underlying
3032   *         object with id, value and extensions. The accessor "getDescription"
3033   *         gives direct access to the value
3034   */
3035  public MarkdownType getDescriptionElement() {
3036    if (this.description == null)
3037      if (Configuration.errorOnAutoCreate())
3038        throw new Error("Attempt to auto-create Measure.description");
3039      else if (Configuration.doAutoCreate())
3040        this.description = new MarkdownType(); // bb
3041    return this.description;
3042  }
3043
3044  public boolean hasDescriptionElement() {
3045    return this.description != null && !this.description.isEmpty();
3046  }
3047
3048  public boolean hasDescription() {
3049    return this.description != null && !this.description.isEmpty();
3050  }
3051
3052  /**
3053   * @param value {@link #description} (A free text natural language description
3054   *              of the measure from a consumer's perspective.). This is the
3055   *              underlying object with id, value and extensions. The accessor
3056   *              "getDescription" gives direct access to the value
3057   */
3058  public Measure setDescriptionElement(MarkdownType value) {
3059    this.description = value;
3060    return this;
3061  }
3062
3063  /**
3064   * @return A free text natural language description of the measure from a
3065   *         consumer's perspective.
3066   */
3067  public String getDescription() {
3068    return this.description == null ? null : this.description.getValue();
3069  }
3070
3071  /**
3072   * @param value A free text natural language description of the measure from a
3073   *              consumer's perspective.
3074   */
3075  public Measure setDescription(String value) {
3076    if (value == null)
3077      this.description = null;
3078    else {
3079      if (this.description == null)
3080        this.description = new MarkdownType();
3081      this.description.setValue(value);
3082    }
3083    return this;
3084  }
3085
3086  /**
3087   * @return {@link #useContext} (The content was developed with a focus and
3088   *         intent of supporting the contexts that are listed. These contexts may
3089   *         be general categories (gender, age, ...) or may be references to
3090   *         specific programs (insurance plans, studies, ...) and may be used to
3091   *         assist with indexing and searching for appropriate measure
3092   *         instances.)
3093   */
3094  public List<UsageContext> getUseContext() {
3095    if (this.useContext == null)
3096      this.useContext = new ArrayList<UsageContext>();
3097    return this.useContext;
3098  }
3099
3100  /**
3101   * @return Returns a reference to <code>this</code> for easy method chaining
3102   */
3103  public Measure setUseContext(List<UsageContext> theUseContext) {
3104    this.useContext = theUseContext;
3105    return this;
3106  }
3107
3108  public boolean hasUseContext() {
3109    if (this.useContext == null)
3110      return false;
3111    for (UsageContext item : this.useContext)
3112      if (!item.isEmpty())
3113        return true;
3114    return false;
3115  }
3116
3117  public UsageContext addUseContext() { // 3
3118    UsageContext t = new UsageContext();
3119    if (this.useContext == null)
3120      this.useContext = new ArrayList<UsageContext>();
3121    this.useContext.add(t);
3122    return t;
3123  }
3124
3125  public Measure addUseContext(UsageContext t) { // 3
3126    if (t == null)
3127      return this;
3128    if (this.useContext == null)
3129      this.useContext = new ArrayList<UsageContext>();
3130    this.useContext.add(t);
3131    return this;
3132  }
3133
3134  /**
3135   * @return The first repetition of repeating field {@link #useContext}, creating
3136   *         it if it does not already exist
3137   */
3138  public UsageContext getUseContextFirstRep() {
3139    if (getUseContext().isEmpty()) {
3140      addUseContext();
3141    }
3142    return getUseContext().get(0);
3143  }
3144
3145  /**
3146   * @return {@link #jurisdiction} (A legal or geographic region in which the
3147   *         measure is intended to be used.)
3148   */
3149  public List<CodeableConcept> getJurisdiction() {
3150    if (this.jurisdiction == null)
3151      this.jurisdiction = new ArrayList<CodeableConcept>();
3152    return this.jurisdiction;
3153  }
3154
3155  /**
3156   * @return Returns a reference to <code>this</code> for easy method chaining
3157   */
3158  public Measure setJurisdiction(List<CodeableConcept> theJurisdiction) {
3159    this.jurisdiction = theJurisdiction;
3160    return this;
3161  }
3162
3163  public boolean hasJurisdiction() {
3164    if (this.jurisdiction == null)
3165      return false;
3166    for (CodeableConcept item : this.jurisdiction)
3167      if (!item.isEmpty())
3168        return true;
3169    return false;
3170  }
3171
3172  public CodeableConcept addJurisdiction() { // 3
3173    CodeableConcept t = new CodeableConcept();
3174    if (this.jurisdiction == null)
3175      this.jurisdiction = new ArrayList<CodeableConcept>();
3176    this.jurisdiction.add(t);
3177    return t;
3178  }
3179
3180  public Measure addJurisdiction(CodeableConcept t) { // 3
3181    if (t == null)
3182      return this;
3183    if (this.jurisdiction == null)
3184      this.jurisdiction = new ArrayList<CodeableConcept>();
3185    this.jurisdiction.add(t);
3186    return this;
3187  }
3188
3189  /**
3190   * @return The first repetition of repeating field {@link #jurisdiction},
3191   *         creating it if it does not already exist
3192   */
3193  public CodeableConcept getJurisdictionFirstRep() {
3194    if (getJurisdiction().isEmpty()) {
3195      addJurisdiction();
3196    }
3197    return getJurisdiction().get(0);
3198  }
3199
3200  /**
3201   * @return {@link #purpose} (Explanation of why this measure is needed and why
3202   *         it has been designed as it has.). This is the underlying object with
3203   *         id, value and extensions. The accessor "getPurpose" gives direct
3204   *         access to the value
3205   */
3206  public MarkdownType getPurposeElement() {
3207    if (this.purpose == null)
3208      if (Configuration.errorOnAutoCreate())
3209        throw new Error("Attempt to auto-create Measure.purpose");
3210      else if (Configuration.doAutoCreate())
3211        this.purpose = new MarkdownType(); // bb
3212    return this.purpose;
3213  }
3214
3215  public boolean hasPurposeElement() {
3216    return this.purpose != null && !this.purpose.isEmpty();
3217  }
3218
3219  public boolean hasPurpose() {
3220    return this.purpose != null && !this.purpose.isEmpty();
3221  }
3222
3223  /**
3224   * @param value {@link #purpose} (Explanation of why this measure is needed and
3225   *              why it has been designed as it has.). This is the underlying
3226   *              object with id, value and extensions. The accessor "getPurpose"
3227   *              gives direct access to the value
3228   */
3229  public Measure setPurposeElement(MarkdownType value) {
3230    this.purpose = value;
3231    return this;
3232  }
3233
3234  /**
3235   * @return Explanation of why this measure is needed and why it has been
3236   *         designed as it has.
3237   */
3238  public String getPurpose() {
3239    return this.purpose == null ? null : this.purpose.getValue();
3240  }
3241
3242  /**
3243   * @param value Explanation of why this measure is needed and why it has been
3244   *              designed as it has.
3245   */
3246  public Measure setPurpose(String value) {
3247    if (value == null)
3248      this.purpose = null;
3249    else {
3250      if (this.purpose == null)
3251        this.purpose = new MarkdownType();
3252      this.purpose.setValue(value);
3253    }
3254    return this;
3255  }
3256
3257  /**
3258   * @return {@link #usage} (A detailed description, from a clinical perspective,
3259   *         of how the measure is used.). This is the underlying object with id,
3260   *         value and extensions. The accessor "getUsage" gives direct access to
3261   *         the value
3262   */
3263  public StringType getUsageElement() {
3264    if (this.usage == null)
3265      if (Configuration.errorOnAutoCreate())
3266        throw new Error("Attempt to auto-create Measure.usage");
3267      else if (Configuration.doAutoCreate())
3268        this.usage = new StringType(); // bb
3269    return this.usage;
3270  }
3271
3272  public boolean hasUsageElement() {
3273    return this.usage != null && !this.usage.isEmpty();
3274  }
3275
3276  public boolean hasUsage() {
3277    return this.usage != null && !this.usage.isEmpty();
3278  }
3279
3280  /**
3281   * @param value {@link #usage} (A detailed description, from a clinical
3282   *              perspective, of how the measure is used.). This is the
3283   *              underlying object with id, value and extensions. The accessor
3284   *              "getUsage" gives direct access to the value
3285   */
3286  public Measure setUsageElement(StringType value) {
3287    this.usage = value;
3288    return this;
3289  }
3290
3291  /**
3292   * @return A detailed description, from a clinical perspective, of how the
3293   *         measure is used.
3294   */
3295  public String getUsage() {
3296    return this.usage == null ? null : this.usage.getValue();
3297  }
3298
3299  /**
3300   * @param value A detailed description, from a clinical perspective, of how the
3301   *              measure is used.
3302   */
3303  public Measure setUsage(String value) {
3304    if (Utilities.noString(value))
3305      this.usage = null;
3306    else {
3307      if (this.usage == null)
3308        this.usage = new StringType();
3309      this.usage.setValue(value);
3310    }
3311    return this;
3312  }
3313
3314  /**
3315   * @return {@link #copyright} (A copyright statement relating to the measure
3316   *         and/or its contents. Copyright statements are generally legal
3317   *         restrictions on the use and publishing of the measure.). This is the
3318   *         underlying object with id, value and extensions. The accessor
3319   *         "getCopyright" gives direct access to the value
3320   */
3321  public MarkdownType getCopyrightElement() {
3322    if (this.copyright == null)
3323      if (Configuration.errorOnAutoCreate())
3324        throw new Error("Attempt to auto-create Measure.copyright");
3325      else if (Configuration.doAutoCreate())
3326        this.copyright = new MarkdownType(); // bb
3327    return this.copyright;
3328  }
3329
3330  public boolean hasCopyrightElement() {
3331    return this.copyright != null && !this.copyright.isEmpty();
3332  }
3333
3334  public boolean hasCopyright() {
3335    return this.copyright != null && !this.copyright.isEmpty();
3336  }
3337
3338  /**
3339   * @param value {@link #copyright} (A copyright statement relating to the
3340   *              measure and/or its contents. Copyright statements are generally
3341   *              legal restrictions on the use and publishing of the measure.).
3342   *              This is the underlying object with id, value and extensions. The
3343   *              accessor "getCopyright" gives direct access to the value
3344   */
3345  public Measure setCopyrightElement(MarkdownType value) {
3346    this.copyright = value;
3347    return this;
3348  }
3349
3350  /**
3351   * @return A copyright statement relating to the measure and/or its contents.
3352   *         Copyright statements are generally legal restrictions on the use and
3353   *         publishing of the measure.
3354   */
3355  public String getCopyright() {
3356    return this.copyright == null ? null : this.copyright.getValue();
3357  }
3358
3359  /**
3360   * @param value A copyright statement relating to the measure and/or its
3361   *              contents. Copyright statements are generally legal restrictions
3362   *              on the use and publishing of the measure.
3363   */
3364  public Measure setCopyright(String value) {
3365    if (value == null)
3366      this.copyright = null;
3367    else {
3368      if (this.copyright == null)
3369        this.copyright = new MarkdownType();
3370      this.copyright.setValue(value);
3371    }
3372    return this;
3373  }
3374
3375  /**
3376   * @return {@link #approvalDate} (The date on which the resource content was
3377   *         approved by the publisher. Approval happens once when the content is
3378   *         officially approved for usage.). This is the underlying object with
3379   *         id, value and extensions. The accessor "getApprovalDate" gives direct
3380   *         access to the value
3381   */
3382  public DateType getApprovalDateElement() {
3383    if (this.approvalDate == null)
3384      if (Configuration.errorOnAutoCreate())
3385        throw new Error("Attempt to auto-create Measure.approvalDate");
3386      else if (Configuration.doAutoCreate())
3387        this.approvalDate = new DateType(); // bb
3388    return this.approvalDate;
3389  }
3390
3391  public boolean hasApprovalDateElement() {
3392    return this.approvalDate != null && !this.approvalDate.isEmpty();
3393  }
3394
3395  public boolean hasApprovalDate() {
3396    return this.approvalDate != null && !this.approvalDate.isEmpty();
3397  }
3398
3399  /**
3400   * @param value {@link #approvalDate} (The date on which the resource content
3401   *              was approved by the publisher. Approval happens once when the
3402   *              content is officially approved for usage.). This is the
3403   *              underlying object with id, value and extensions. The accessor
3404   *              "getApprovalDate" gives direct access to the value
3405   */
3406  public Measure setApprovalDateElement(DateType value) {
3407    this.approvalDate = value;
3408    return this;
3409  }
3410
3411  /**
3412   * @return The date on which the resource content was approved by the publisher.
3413   *         Approval happens once when the content is officially approved for
3414   *         usage.
3415   */
3416  public Date getApprovalDate() {
3417    return this.approvalDate == null ? null : this.approvalDate.getValue();
3418  }
3419
3420  /**
3421   * @param value The date on which the resource content was approved by the
3422   *              publisher. Approval happens once when the content is officially
3423   *              approved for usage.
3424   */
3425  public Measure setApprovalDate(Date value) {
3426    if (value == null)
3427      this.approvalDate = null;
3428    else {
3429      if (this.approvalDate == null)
3430        this.approvalDate = new DateType();
3431      this.approvalDate.setValue(value);
3432    }
3433    return this;
3434  }
3435
3436  /**
3437   * @return {@link #lastReviewDate} (The date on which the resource content was
3438   *         last reviewed. Review happens periodically after approval but does
3439   *         not change the original approval date.). This is the underlying
3440   *         object with id, value and extensions. The accessor
3441   *         "getLastReviewDate" gives direct access to the value
3442   */
3443  public DateType getLastReviewDateElement() {
3444    if (this.lastReviewDate == null)
3445      if (Configuration.errorOnAutoCreate())
3446        throw new Error("Attempt to auto-create Measure.lastReviewDate");
3447      else if (Configuration.doAutoCreate())
3448        this.lastReviewDate = new DateType(); // bb
3449    return this.lastReviewDate;
3450  }
3451
3452  public boolean hasLastReviewDateElement() {
3453    return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
3454  }
3455
3456  public boolean hasLastReviewDate() {
3457    return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
3458  }
3459
3460  /**
3461   * @param value {@link #lastReviewDate} (The date on which the resource content
3462   *              was last reviewed. Review happens periodically after approval
3463   *              but does not change the original approval date.). This is the
3464   *              underlying object with id, value and extensions. The accessor
3465   *              "getLastReviewDate" gives direct access to the value
3466   */
3467  public Measure setLastReviewDateElement(DateType value) {
3468    this.lastReviewDate = value;
3469    return this;
3470  }
3471
3472  /**
3473   * @return The date on which the resource content was last reviewed. Review
3474   *         happens periodically after approval but does not change the original
3475   *         approval date.
3476   */
3477  public Date getLastReviewDate() {
3478    return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
3479  }
3480
3481  /**
3482   * @param value The date on which the resource content was last reviewed. Review
3483   *              happens periodically after approval but does not change the
3484   *              original approval date.
3485   */
3486  public Measure setLastReviewDate(Date value) {
3487    if (value == null)
3488      this.lastReviewDate = null;
3489    else {
3490      if (this.lastReviewDate == null)
3491        this.lastReviewDate = new DateType();
3492      this.lastReviewDate.setValue(value);
3493    }
3494    return this;
3495  }
3496
3497  /**
3498   * @return {@link #effectivePeriod} (The period during which the measure content
3499   *         was or is planned to be in active use.)
3500   */
3501  public Period getEffectivePeriod() {
3502    if (this.effectivePeriod == null)
3503      if (Configuration.errorOnAutoCreate())
3504        throw new Error("Attempt to auto-create Measure.effectivePeriod");
3505      else if (Configuration.doAutoCreate())
3506        this.effectivePeriod = new Period(); // cc
3507    return this.effectivePeriod;
3508  }
3509
3510  public boolean hasEffectivePeriod() {
3511    return this.effectivePeriod != null && !this.effectivePeriod.isEmpty();
3512  }
3513
3514  /**
3515   * @param value {@link #effectivePeriod} (The period during which the measure
3516   *              content was or is planned to be in active use.)
3517   */
3518  public Measure setEffectivePeriod(Period value) {
3519    this.effectivePeriod = value;
3520    return this;
3521  }
3522
3523  /**
3524   * @return {@link #topic} (Descriptive topics related to the content of the
3525   *         measure. Topics provide a high-level categorization grouping types of
3526   *         measures that can be useful for filtering and searching.)
3527   */
3528  public List<CodeableConcept> getTopic() {
3529    if (this.topic == null)
3530      this.topic = new ArrayList<CodeableConcept>();
3531    return this.topic;
3532  }
3533
3534  /**
3535   * @return Returns a reference to <code>this</code> for easy method chaining
3536   */
3537  public Measure setTopic(List<CodeableConcept> theTopic) {
3538    this.topic = theTopic;
3539    return this;
3540  }
3541
3542  public boolean hasTopic() {
3543    if (this.topic == null)
3544      return false;
3545    for (CodeableConcept item : this.topic)
3546      if (!item.isEmpty())
3547        return true;
3548    return false;
3549  }
3550
3551  public CodeableConcept addTopic() { // 3
3552    CodeableConcept t = new CodeableConcept();
3553    if (this.topic == null)
3554      this.topic = new ArrayList<CodeableConcept>();
3555    this.topic.add(t);
3556    return t;
3557  }
3558
3559  public Measure addTopic(CodeableConcept t) { // 3
3560    if (t == null)
3561      return this;
3562    if (this.topic == null)
3563      this.topic = new ArrayList<CodeableConcept>();
3564    this.topic.add(t);
3565    return this;
3566  }
3567
3568  /**
3569   * @return The first repetition of repeating field {@link #topic}, creating it
3570   *         if it does not already exist
3571   */
3572  public CodeableConcept getTopicFirstRep() {
3573    if (getTopic().isEmpty()) {
3574      addTopic();
3575    }
3576    return getTopic().get(0);
3577  }
3578
3579  /**
3580   * @return {@link #author} (An individiual or organization primarily involved in
3581   *         the creation and maintenance of the content.)
3582   */
3583  public List<ContactDetail> getAuthor() {
3584    if (this.author == null)
3585      this.author = new ArrayList<ContactDetail>();
3586    return this.author;
3587  }
3588
3589  /**
3590   * @return Returns a reference to <code>this</code> for easy method chaining
3591   */
3592  public Measure setAuthor(List<ContactDetail> theAuthor) {
3593    this.author = theAuthor;
3594    return this;
3595  }
3596
3597  public boolean hasAuthor() {
3598    if (this.author == null)
3599      return false;
3600    for (ContactDetail item : this.author)
3601      if (!item.isEmpty())
3602        return true;
3603    return false;
3604  }
3605
3606  public ContactDetail addAuthor() { // 3
3607    ContactDetail t = new ContactDetail();
3608    if (this.author == null)
3609      this.author = new ArrayList<ContactDetail>();
3610    this.author.add(t);
3611    return t;
3612  }
3613
3614  public Measure addAuthor(ContactDetail t) { // 3
3615    if (t == null)
3616      return this;
3617    if (this.author == null)
3618      this.author = new ArrayList<ContactDetail>();
3619    this.author.add(t);
3620    return this;
3621  }
3622
3623  /**
3624   * @return The first repetition of repeating field {@link #author}, creating it
3625   *         if it does not already exist
3626   */
3627  public ContactDetail getAuthorFirstRep() {
3628    if (getAuthor().isEmpty()) {
3629      addAuthor();
3630    }
3631    return getAuthor().get(0);
3632  }
3633
3634  /**
3635   * @return {@link #editor} (An individual or organization primarily responsible
3636   *         for internal coherence of the content.)
3637   */
3638  public List<ContactDetail> getEditor() {
3639    if (this.editor == null)
3640      this.editor = new ArrayList<ContactDetail>();
3641    return this.editor;
3642  }
3643
3644  /**
3645   * @return Returns a reference to <code>this</code> for easy method chaining
3646   */
3647  public Measure setEditor(List<ContactDetail> theEditor) {
3648    this.editor = theEditor;
3649    return this;
3650  }
3651
3652  public boolean hasEditor() {
3653    if (this.editor == null)
3654      return false;
3655    for (ContactDetail item : this.editor)
3656      if (!item.isEmpty())
3657        return true;
3658    return false;
3659  }
3660
3661  public ContactDetail addEditor() { // 3
3662    ContactDetail t = new ContactDetail();
3663    if (this.editor == null)
3664      this.editor = new ArrayList<ContactDetail>();
3665    this.editor.add(t);
3666    return t;
3667  }
3668
3669  public Measure addEditor(ContactDetail t) { // 3
3670    if (t == null)
3671      return this;
3672    if (this.editor == null)
3673      this.editor = new ArrayList<ContactDetail>();
3674    this.editor.add(t);
3675    return this;
3676  }
3677
3678  /**
3679   * @return The first repetition of repeating field {@link #editor}, creating it
3680   *         if it does not already exist
3681   */
3682  public ContactDetail getEditorFirstRep() {
3683    if (getEditor().isEmpty()) {
3684      addEditor();
3685    }
3686    return getEditor().get(0);
3687  }
3688
3689  /**
3690   * @return {@link #reviewer} (An individual or organization primarily
3691   *         responsible for review of some aspect of the content.)
3692   */
3693  public List<ContactDetail> getReviewer() {
3694    if (this.reviewer == null)
3695      this.reviewer = new ArrayList<ContactDetail>();
3696    return this.reviewer;
3697  }
3698
3699  /**
3700   * @return Returns a reference to <code>this</code> for easy method chaining
3701   */
3702  public Measure setReviewer(List<ContactDetail> theReviewer) {
3703    this.reviewer = theReviewer;
3704    return this;
3705  }
3706
3707  public boolean hasReviewer() {
3708    if (this.reviewer == null)
3709      return false;
3710    for (ContactDetail item : this.reviewer)
3711      if (!item.isEmpty())
3712        return true;
3713    return false;
3714  }
3715
3716  public ContactDetail addReviewer() { // 3
3717    ContactDetail t = new ContactDetail();
3718    if (this.reviewer == null)
3719      this.reviewer = new ArrayList<ContactDetail>();
3720    this.reviewer.add(t);
3721    return t;
3722  }
3723
3724  public Measure addReviewer(ContactDetail t) { // 3
3725    if (t == null)
3726      return this;
3727    if (this.reviewer == null)
3728      this.reviewer = new ArrayList<ContactDetail>();
3729    this.reviewer.add(t);
3730    return this;
3731  }
3732
3733  /**
3734   * @return The first repetition of repeating field {@link #reviewer}, creating
3735   *         it if it does not already exist
3736   */
3737  public ContactDetail getReviewerFirstRep() {
3738    if (getReviewer().isEmpty()) {
3739      addReviewer();
3740    }
3741    return getReviewer().get(0);
3742  }
3743
3744  /**
3745   * @return {@link #endorser} (An individual or organization responsible for
3746   *         officially endorsing the content for use in some setting.)
3747   */
3748  public List<ContactDetail> getEndorser() {
3749    if (this.endorser == null)
3750      this.endorser = new ArrayList<ContactDetail>();
3751    return this.endorser;
3752  }
3753
3754  /**
3755   * @return Returns a reference to <code>this</code> for easy method chaining
3756   */
3757  public Measure setEndorser(List<ContactDetail> theEndorser) {
3758    this.endorser = theEndorser;
3759    return this;
3760  }
3761
3762  public boolean hasEndorser() {
3763    if (this.endorser == null)
3764      return false;
3765    for (ContactDetail item : this.endorser)
3766      if (!item.isEmpty())
3767        return true;
3768    return false;
3769  }
3770
3771  public ContactDetail addEndorser() { // 3
3772    ContactDetail t = new ContactDetail();
3773    if (this.endorser == null)
3774      this.endorser = new ArrayList<ContactDetail>();
3775    this.endorser.add(t);
3776    return t;
3777  }
3778
3779  public Measure addEndorser(ContactDetail t) { // 3
3780    if (t == null)
3781      return this;
3782    if (this.endorser == null)
3783      this.endorser = new ArrayList<ContactDetail>();
3784    this.endorser.add(t);
3785    return this;
3786  }
3787
3788  /**
3789   * @return The first repetition of repeating field {@link #endorser}, creating
3790   *         it if it does not already exist
3791   */
3792  public ContactDetail getEndorserFirstRep() {
3793    if (getEndorser().isEmpty()) {
3794      addEndorser();
3795    }
3796    return getEndorser().get(0);
3797  }
3798
3799  /**
3800   * @return {@link #relatedArtifact} (Related artifacts such as additional
3801   *         documentation, justification, or bibliographic references.)
3802   */
3803  public List<RelatedArtifact> getRelatedArtifact() {
3804    if (this.relatedArtifact == null)
3805      this.relatedArtifact = new ArrayList<RelatedArtifact>();
3806    return this.relatedArtifact;
3807  }
3808
3809  /**
3810   * @return Returns a reference to <code>this</code> for easy method chaining
3811   */
3812  public Measure setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) {
3813    this.relatedArtifact = theRelatedArtifact;
3814    return this;
3815  }
3816
3817  public boolean hasRelatedArtifact() {
3818    if (this.relatedArtifact == null)
3819      return false;
3820    for (RelatedArtifact item : this.relatedArtifact)
3821      if (!item.isEmpty())
3822        return true;
3823    return false;
3824  }
3825
3826  public RelatedArtifact addRelatedArtifact() { // 3
3827    RelatedArtifact t = new RelatedArtifact();
3828    if (this.relatedArtifact == null)
3829      this.relatedArtifact = new ArrayList<RelatedArtifact>();
3830    this.relatedArtifact.add(t);
3831    return t;
3832  }
3833
3834  public Measure addRelatedArtifact(RelatedArtifact t) { // 3
3835    if (t == null)
3836      return this;
3837    if (this.relatedArtifact == null)
3838      this.relatedArtifact = new ArrayList<RelatedArtifact>();
3839    this.relatedArtifact.add(t);
3840    return this;
3841  }
3842
3843  /**
3844   * @return The first repetition of repeating field {@link #relatedArtifact},
3845   *         creating it if it does not already exist
3846   */
3847  public RelatedArtifact getRelatedArtifactFirstRep() {
3848    if (getRelatedArtifact().isEmpty()) {
3849      addRelatedArtifact();
3850    }
3851    return getRelatedArtifact().get(0);
3852  }
3853
3854  /**
3855   * @return {@link #library} (A reference to a Library resource containing the
3856   *         formal logic used by the measure.)
3857   */
3858  public List<CanonicalType> getLibrary() {
3859    if (this.library == null)
3860      this.library = new ArrayList<CanonicalType>();
3861    return this.library;
3862  }
3863
3864  /**
3865   * @return Returns a reference to <code>this</code> for easy method chaining
3866   */
3867  public Measure setLibrary(List<CanonicalType> theLibrary) {
3868    this.library = theLibrary;
3869    return this;
3870  }
3871
3872  public boolean hasLibrary() {
3873    if (this.library == null)
3874      return false;
3875    for (CanonicalType item : this.library)
3876      if (!item.isEmpty())
3877        return true;
3878    return false;
3879  }
3880
3881  /**
3882   * @return {@link #library} (A reference to a Library resource containing the
3883   *         formal logic used by the measure.)
3884   */
3885  public CanonicalType addLibraryElement() {// 2
3886    CanonicalType t = new CanonicalType();
3887    if (this.library == null)
3888      this.library = new ArrayList<CanonicalType>();
3889    this.library.add(t);
3890    return t;
3891  }
3892
3893  /**
3894   * @param value {@link #library} (A reference to a Library resource containing
3895   *              the formal logic used by the measure.)
3896   */
3897  public Measure addLibrary(String value) { // 1
3898    CanonicalType t = new CanonicalType();
3899    t.setValue(value);
3900    if (this.library == null)
3901      this.library = new ArrayList<CanonicalType>();
3902    this.library.add(t);
3903    return this;
3904  }
3905
3906  /**
3907   * @param value {@link #library} (A reference to a Library resource containing
3908   *              the formal logic used by the measure.)
3909   */
3910  public boolean hasLibrary(String value) {
3911    if (this.library == null)
3912      return false;
3913    for (CanonicalType v : this.library)
3914      if (v.getValue().equals(value)) // canonical(Library)
3915        return true;
3916    return false;
3917  }
3918
3919  /**
3920   * @return {@link #disclaimer} (Notices and disclaimers regarding the use of the
3921   *         measure or related to intellectual property (such as code systems)
3922   *         referenced by the measure.). This is the underlying object with id,
3923   *         value and extensions. The accessor "getDisclaimer" gives direct
3924   *         access to the value
3925   */
3926  public MarkdownType getDisclaimerElement() {
3927    if (this.disclaimer == null)
3928      if (Configuration.errorOnAutoCreate())
3929        throw new Error("Attempt to auto-create Measure.disclaimer");
3930      else if (Configuration.doAutoCreate())
3931        this.disclaimer = new MarkdownType(); // bb
3932    return this.disclaimer;
3933  }
3934
3935  public boolean hasDisclaimerElement() {
3936    return this.disclaimer != null && !this.disclaimer.isEmpty();
3937  }
3938
3939  public boolean hasDisclaimer() {
3940    return this.disclaimer != null && !this.disclaimer.isEmpty();
3941  }
3942
3943  /**
3944   * @param value {@link #disclaimer} (Notices and disclaimers regarding the use
3945   *              of the measure or related to intellectual property (such as code
3946   *              systems) referenced by the measure.). This is the underlying
3947   *              object with id, value and extensions. The accessor
3948   *              "getDisclaimer" gives direct access to the value
3949   */
3950  public Measure setDisclaimerElement(MarkdownType value) {
3951    this.disclaimer = value;
3952    return this;
3953  }
3954
3955  /**
3956   * @return Notices and disclaimers regarding the use of the measure or related
3957   *         to intellectual property (such as code systems) referenced by the
3958   *         measure.
3959   */
3960  public String getDisclaimer() {
3961    return this.disclaimer == null ? null : this.disclaimer.getValue();
3962  }
3963
3964  /**
3965   * @param value Notices and disclaimers regarding the use of the measure or
3966   *              related to intellectual property (such as code systems)
3967   *              referenced by the measure.
3968   */
3969  public Measure setDisclaimer(String value) {
3970    if (value == null)
3971      this.disclaimer = null;
3972    else {
3973      if (this.disclaimer == null)
3974        this.disclaimer = new MarkdownType();
3975      this.disclaimer.setValue(value);
3976    }
3977    return this;
3978  }
3979
3980  /**
3981   * @return {@link #scoring} (Indicates how the calculation is performed for the
3982   *         measure, including proportion, ratio, continuous-variable, and
3983   *         cohort. The value set is extensible, allowing additional measure
3984   *         scoring types to be represented.)
3985   */
3986  public CodeableConcept getScoring() {
3987    if (this.scoring == null)
3988      if (Configuration.errorOnAutoCreate())
3989        throw new Error("Attempt to auto-create Measure.scoring");
3990      else if (Configuration.doAutoCreate())
3991        this.scoring = new CodeableConcept(); // cc
3992    return this.scoring;
3993  }
3994
3995  public boolean hasScoring() {
3996    return this.scoring != null && !this.scoring.isEmpty();
3997  }
3998
3999  /**
4000   * @param value {@link #scoring} (Indicates how the calculation is performed for
4001   *              the measure, including proportion, ratio, continuous-variable,
4002   *              and cohort. The value set is extensible, allowing additional
4003   *              measure scoring types to be represented.)
4004   */
4005  public Measure setScoring(CodeableConcept value) {
4006    this.scoring = value;
4007    return this;
4008  }
4009
4010  /**
4011   * @return {@link #compositeScoring} (If this is a composite measure, the
4012   *         scoring method used to combine the component measures to determine
4013   *         the composite score.)
4014   */
4015  public CodeableConcept getCompositeScoring() {
4016    if (this.compositeScoring == null)
4017      if (Configuration.errorOnAutoCreate())
4018        throw new Error("Attempt to auto-create Measure.compositeScoring");
4019      else if (Configuration.doAutoCreate())
4020        this.compositeScoring = new CodeableConcept(); // cc
4021    return this.compositeScoring;
4022  }
4023
4024  public boolean hasCompositeScoring() {
4025    return this.compositeScoring != null && !this.compositeScoring.isEmpty();
4026  }
4027
4028  /**
4029   * @param value {@link #compositeScoring} (If this is a composite measure, the
4030   *              scoring method used to combine the component measures to
4031   *              determine the composite score.)
4032   */
4033  public Measure setCompositeScoring(CodeableConcept value) {
4034    this.compositeScoring = value;
4035    return this;
4036  }
4037
4038  /**
4039   * @return {@link #type} (Indicates whether the measure is used to examine a
4040   *         process, an outcome over time, a patient-reported outcome, or a
4041   *         structure measure such as utilization.)
4042   */
4043  public List<CodeableConcept> getType() {
4044    if (this.type == null)
4045      this.type = new ArrayList<CodeableConcept>();
4046    return this.type;
4047  }
4048
4049  /**
4050   * @return Returns a reference to <code>this</code> for easy method chaining
4051   */
4052  public Measure setType(List<CodeableConcept> theType) {
4053    this.type = theType;
4054    return this;
4055  }
4056
4057  public boolean hasType() {
4058    if (this.type == null)
4059      return false;
4060    for (CodeableConcept item : this.type)
4061      if (!item.isEmpty())
4062        return true;
4063    return false;
4064  }
4065
4066  public CodeableConcept addType() { // 3
4067    CodeableConcept t = new CodeableConcept();
4068    if (this.type == null)
4069      this.type = new ArrayList<CodeableConcept>();
4070    this.type.add(t);
4071    return t;
4072  }
4073
4074  public Measure addType(CodeableConcept t) { // 3
4075    if (t == null)
4076      return this;
4077    if (this.type == null)
4078      this.type = new ArrayList<CodeableConcept>();
4079    this.type.add(t);
4080    return this;
4081  }
4082
4083  /**
4084   * @return The first repetition of repeating field {@link #type}, creating it if
4085   *         it does not already exist
4086   */
4087  public CodeableConcept getTypeFirstRep() {
4088    if (getType().isEmpty()) {
4089      addType();
4090    }
4091    return getType().get(0);
4092  }
4093
4094  /**
4095   * @return {@link #riskAdjustment} (A description of the risk adjustment factors
4096   *         that may impact the resulting score for the measure and how they may
4097   *         be accounted for when computing and reporting measure results.). This
4098   *         is the underlying object with id, value and extensions. The accessor
4099   *         "getRiskAdjustment" gives direct access to the value
4100   */
4101  public StringType getRiskAdjustmentElement() {
4102    if (this.riskAdjustment == null)
4103      if (Configuration.errorOnAutoCreate())
4104        throw new Error("Attempt to auto-create Measure.riskAdjustment");
4105      else if (Configuration.doAutoCreate())
4106        this.riskAdjustment = new StringType(); // bb
4107    return this.riskAdjustment;
4108  }
4109
4110  public boolean hasRiskAdjustmentElement() {
4111    return this.riskAdjustment != null && !this.riskAdjustment.isEmpty();
4112  }
4113
4114  public boolean hasRiskAdjustment() {
4115    return this.riskAdjustment != null && !this.riskAdjustment.isEmpty();
4116  }
4117
4118  /**
4119   * @param value {@link #riskAdjustment} (A description of the risk adjustment
4120   *              factors that may impact the resulting score for the measure and
4121   *              how they may be accounted for when computing and reporting
4122   *              measure results.). This is the underlying object with id, value
4123   *              and extensions. The accessor "getRiskAdjustment" gives direct
4124   *              access to the value
4125   */
4126  public Measure setRiskAdjustmentElement(StringType value) {
4127    this.riskAdjustment = value;
4128    return this;
4129  }
4130
4131  /**
4132   * @return A description of the risk adjustment factors that may impact the
4133   *         resulting score for the measure and how they may be accounted for
4134   *         when computing and reporting measure results.
4135   */
4136  public String getRiskAdjustment() {
4137    return this.riskAdjustment == null ? null : this.riskAdjustment.getValue();
4138  }
4139
4140  /**
4141   * @param value A description of the risk adjustment factors that may impact the
4142   *              resulting score for the measure and how they may be accounted
4143   *              for when computing and reporting measure results.
4144   */
4145  public Measure setRiskAdjustment(String value) {
4146    if (Utilities.noString(value))
4147      this.riskAdjustment = null;
4148    else {
4149      if (this.riskAdjustment == null)
4150        this.riskAdjustment = new StringType();
4151      this.riskAdjustment.setValue(value);
4152    }
4153    return this;
4154  }
4155
4156  /**
4157   * @return {@link #rateAggregation} (Describes how to combine the information
4158   *         calculated, based on logic in each of several populations, into one
4159   *         summarized result.). This is the underlying object with id, value and
4160   *         extensions. The accessor "getRateAggregation" gives direct access to
4161   *         the value
4162   */
4163  public StringType getRateAggregationElement() {
4164    if (this.rateAggregation == null)
4165      if (Configuration.errorOnAutoCreate())
4166        throw new Error("Attempt to auto-create Measure.rateAggregation");
4167      else if (Configuration.doAutoCreate())
4168        this.rateAggregation = new StringType(); // bb
4169    return this.rateAggregation;
4170  }
4171
4172  public boolean hasRateAggregationElement() {
4173    return this.rateAggregation != null && !this.rateAggregation.isEmpty();
4174  }
4175
4176  public boolean hasRateAggregation() {
4177    return this.rateAggregation != null && !this.rateAggregation.isEmpty();
4178  }
4179
4180  /**
4181   * @param value {@link #rateAggregation} (Describes how to combine the
4182   *              information calculated, based on logic in each of several
4183   *              populations, into one summarized result.). This is the
4184   *              underlying object with id, value and extensions. The accessor
4185   *              "getRateAggregation" gives direct access to the value
4186   */
4187  public Measure setRateAggregationElement(StringType value) {
4188    this.rateAggregation = value;
4189    return this;
4190  }
4191
4192  /**
4193   * @return Describes how to combine the information calculated, based on logic
4194   *         in each of several populations, into one summarized result.
4195   */
4196  public String getRateAggregation() {
4197    return this.rateAggregation == null ? null : this.rateAggregation.getValue();
4198  }
4199
4200  /**
4201   * @param value Describes how to combine the information calculated, based on
4202   *              logic in each of several populations, into one summarized
4203   *              result.
4204   */
4205  public Measure setRateAggregation(String value) {
4206    if (Utilities.noString(value))
4207      this.rateAggregation = null;
4208    else {
4209      if (this.rateAggregation == null)
4210        this.rateAggregation = new StringType();
4211      this.rateAggregation.setValue(value);
4212    }
4213    return this;
4214  }
4215
4216  /**
4217   * @return {@link #rationale} (Provides a succinct statement of the need for the
4218   *         measure. Usually includes statements pertaining to importance
4219   *         criterion: impact, gap in care, and evidence.). This is the
4220   *         underlying object with id, value and extensions. The accessor
4221   *         "getRationale" gives direct access to the value
4222   */
4223  public MarkdownType getRationaleElement() {
4224    if (this.rationale == null)
4225      if (Configuration.errorOnAutoCreate())
4226        throw new Error("Attempt to auto-create Measure.rationale");
4227      else if (Configuration.doAutoCreate())
4228        this.rationale = new MarkdownType(); // bb
4229    return this.rationale;
4230  }
4231
4232  public boolean hasRationaleElement() {
4233    return this.rationale != null && !this.rationale.isEmpty();
4234  }
4235
4236  public boolean hasRationale() {
4237    return this.rationale != null && !this.rationale.isEmpty();
4238  }
4239
4240  /**
4241   * @param value {@link #rationale} (Provides a succinct statement of the need
4242   *              for the measure. Usually includes statements pertaining to
4243   *              importance criterion: impact, gap in care, and evidence.). This
4244   *              is the underlying object with id, value and extensions. The
4245   *              accessor "getRationale" gives direct access to the value
4246   */
4247  public Measure setRationaleElement(MarkdownType value) {
4248    this.rationale = value;
4249    return this;
4250  }
4251
4252  /**
4253   * @return Provides a succinct statement of the need for the measure. Usually
4254   *         includes statements pertaining to importance criterion: impact, gap
4255   *         in care, and evidence.
4256   */
4257  public String getRationale() {
4258    return this.rationale == null ? null : this.rationale.getValue();
4259  }
4260
4261  /**
4262   * @param value Provides a succinct statement of the need for the measure.
4263   *              Usually includes statements pertaining to importance criterion:
4264   *              impact, gap in care, and evidence.
4265   */
4266  public Measure setRationale(String value) {
4267    if (value == null)
4268      this.rationale = null;
4269    else {
4270      if (this.rationale == null)
4271        this.rationale = new MarkdownType();
4272      this.rationale.setValue(value);
4273    }
4274    return this;
4275  }
4276
4277  /**
4278   * @return {@link #clinicalRecommendationStatement} (Provides a summary of
4279   *         relevant clinical guidelines or other clinical recommendations
4280   *         supporting the measure.). This is the underlying object with id,
4281   *         value and extensions. The accessor
4282   *         "getClinicalRecommendationStatement" gives direct access to the value
4283   */
4284  public MarkdownType getClinicalRecommendationStatementElement() {
4285    if (this.clinicalRecommendationStatement == null)
4286      if (Configuration.errorOnAutoCreate())
4287        throw new Error("Attempt to auto-create Measure.clinicalRecommendationStatement");
4288      else if (Configuration.doAutoCreate())
4289        this.clinicalRecommendationStatement = new MarkdownType(); // bb
4290    return this.clinicalRecommendationStatement;
4291  }
4292
4293  public boolean hasClinicalRecommendationStatementElement() {
4294    return this.clinicalRecommendationStatement != null && !this.clinicalRecommendationStatement.isEmpty();
4295  }
4296
4297  public boolean hasClinicalRecommendationStatement() {
4298    return this.clinicalRecommendationStatement != null && !this.clinicalRecommendationStatement.isEmpty();
4299  }
4300
4301  /**
4302   * @param value {@link #clinicalRecommendationStatement} (Provides a summary of
4303   *              relevant clinical guidelines or other clinical recommendations
4304   *              supporting the measure.). This is the underlying object with id,
4305   *              value and extensions. The accessor
4306   *              "getClinicalRecommendationStatement" gives direct access to the
4307   *              value
4308   */
4309  public Measure setClinicalRecommendationStatementElement(MarkdownType value) {
4310    this.clinicalRecommendationStatement = value;
4311    return this;
4312  }
4313
4314  /**
4315   * @return Provides a summary of relevant clinical guidelines or other clinical
4316   *         recommendations supporting the measure.
4317   */
4318  public String getClinicalRecommendationStatement() {
4319    return this.clinicalRecommendationStatement == null ? null : this.clinicalRecommendationStatement.getValue();
4320  }
4321
4322  /**
4323   * @param value Provides a summary of relevant clinical guidelines or other
4324   *              clinical recommendations supporting the measure.
4325   */
4326  public Measure setClinicalRecommendationStatement(String value) {
4327    if (value == null)
4328      this.clinicalRecommendationStatement = null;
4329    else {
4330      if (this.clinicalRecommendationStatement == null)
4331        this.clinicalRecommendationStatement = new MarkdownType();
4332      this.clinicalRecommendationStatement.setValue(value);
4333    }
4334    return this;
4335  }
4336
4337  /**
4338   * @return {@link #improvementNotation} (Information on whether an increase or
4339   *         decrease in score is the preferred result (e.g., a higher score
4340   *         indicates better quality OR a lower score indicates better quality OR
4341   *         quality is within a range).)
4342   */
4343  public CodeableConcept getImprovementNotation() {
4344    if (this.improvementNotation == null)
4345      if (Configuration.errorOnAutoCreate())
4346        throw new Error("Attempt to auto-create Measure.improvementNotation");
4347      else if (Configuration.doAutoCreate())
4348        this.improvementNotation = new CodeableConcept(); // cc
4349    return this.improvementNotation;
4350  }
4351
4352  public boolean hasImprovementNotation() {
4353    return this.improvementNotation != null && !this.improvementNotation.isEmpty();
4354  }
4355
4356  /**
4357   * @param value {@link #improvementNotation} (Information on whether an increase
4358   *              or decrease in score is the preferred result (e.g., a higher
4359   *              score indicates better quality OR a lower score indicates better
4360   *              quality OR quality is within a range).)
4361   */
4362  public Measure setImprovementNotation(CodeableConcept value) {
4363    this.improvementNotation = value;
4364    return this;
4365  }
4366
4367  /**
4368   * @return {@link #definition} (Provides a description of an individual term
4369   *         used within the measure.)
4370   */
4371  public List<MarkdownType> getDefinition() {
4372    if (this.definition == null)
4373      this.definition = new ArrayList<MarkdownType>();
4374    return this.definition;
4375  }
4376
4377  /**
4378   * @return Returns a reference to <code>this</code> for easy method chaining
4379   */
4380  public Measure setDefinition(List<MarkdownType> theDefinition) {
4381    this.definition = theDefinition;
4382    return this;
4383  }
4384
4385  public boolean hasDefinition() {
4386    if (this.definition == null)
4387      return false;
4388    for (MarkdownType item : this.definition)
4389      if (!item.isEmpty())
4390        return true;
4391    return false;
4392  }
4393
4394  /**
4395   * @return {@link #definition} (Provides a description of an individual term
4396   *         used within the measure.)
4397   */
4398  public MarkdownType addDefinitionElement() {// 2
4399    MarkdownType t = new MarkdownType();
4400    if (this.definition == null)
4401      this.definition = new ArrayList<MarkdownType>();
4402    this.definition.add(t);
4403    return t;
4404  }
4405
4406  /**
4407   * @param value {@link #definition} (Provides a description of an individual
4408   *              term used within the measure.)
4409   */
4410  public Measure addDefinition(String value) { // 1
4411    MarkdownType t = new MarkdownType();
4412    t.setValue(value);
4413    if (this.definition == null)
4414      this.definition = new ArrayList<MarkdownType>();
4415    this.definition.add(t);
4416    return this;
4417  }
4418
4419  /**
4420   * @param value {@link #definition} (Provides a description of an individual
4421   *              term used within the measure.)
4422   */
4423  public boolean hasDefinition(String value) {
4424    if (this.definition == null)
4425      return false;
4426    for (MarkdownType v : this.definition)
4427      if (v.getValue().equals(value)) // markdown
4428        return true;
4429    return false;
4430  }
4431
4432  /**
4433   * @return {@link #guidance} (Additional guidance for the measure including how
4434   *         it can be used in a clinical context, and the intent of the
4435   *         measure.). This is the underlying object with id, value and
4436   *         extensions. The accessor "getGuidance" gives direct access to the
4437   *         value
4438   */
4439  public MarkdownType getGuidanceElement() {
4440    if (this.guidance == null)
4441      if (Configuration.errorOnAutoCreate())
4442        throw new Error("Attempt to auto-create Measure.guidance");
4443      else if (Configuration.doAutoCreate())
4444        this.guidance = new MarkdownType(); // bb
4445    return this.guidance;
4446  }
4447
4448  public boolean hasGuidanceElement() {
4449    return this.guidance != null && !this.guidance.isEmpty();
4450  }
4451
4452  public boolean hasGuidance() {
4453    return this.guidance != null && !this.guidance.isEmpty();
4454  }
4455
4456  /**
4457   * @param value {@link #guidance} (Additional guidance for the measure including
4458   *              how it can be used in a clinical context, and the intent of the
4459   *              measure.). This is the underlying object with id, value and
4460   *              extensions. The accessor "getGuidance" gives direct access to
4461   *              the value
4462   */
4463  public Measure setGuidanceElement(MarkdownType value) {
4464    this.guidance = value;
4465    return this;
4466  }
4467
4468  /**
4469   * @return Additional guidance for the measure including how it can be used in a
4470   *         clinical context, and the intent of the measure.
4471   */
4472  public String getGuidance() {
4473    return this.guidance == null ? null : this.guidance.getValue();
4474  }
4475
4476  /**
4477   * @param value Additional guidance for the measure including how it can be used
4478   *              in a clinical context, and the intent of the measure.
4479   */
4480  public Measure setGuidance(String value) {
4481    if (value == null)
4482      this.guidance = null;
4483    else {
4484      if (this.guidance == null)
4485        this.guidance = new MarkdownType();
4486      this.guidance.setValue(value);
4487    }
4488    return this;
4489  }
4490
4491  /**
4492   * @return {@link #group} (A group of population criteria for the measure.)
4493   */
4494  public List<MeasureGroupComponent> getGroup() {
4495    if (this.group == null)
4496      this.group = new ArrayList<MeasureGroupComponent>();
4497    return this.group;
4498  }
4499
4500  /**
4501   * @return Returns a reference to <code>this</code> for easy method chaining
4502   */
4503  public Measure setGroup(List<MeasureGroupComponent> theGroup) {
4504    this.group = theGroup;
4505    return this;
4506  }
4507
4508  public boolean hasGroup() {
4509    if (this.group == null)
4510      return false;
4511    for (MeasureGroupComponent item : this.group)
4512      if (!item.isEmpty())
4513        return true;
4514    return false;
4515  }
4516
4517  public MeasureGroupComponent addGroup() { // 3
4518    MeasureGroupComponent t = new MeasureGroupComponent();
4519    if (this.group == null)
4520      this.group = new ArrayList<MeasureGroupComponent>();
4521    this.group.add(t);
4522    return t;
4523  }
4524
4525  public Measure addGroup(MeasureGroupComponent t) { // 3
4526    if (t == null)
4527      return this;
4528    if (this.group == null)
4529      this.group = new ArrayList<MeasureGroupComponent>();
4530    this.group.add(t);
4531    return this;
4532  }
4533
4534  /**
4535   * @return The first repetition of repeating field {@link #group}, creating it
4536   *         if it does not already exist
4537   */
4538  public MeasureGroupComponent getGroupFirstRep() {
4539    if (getGroup().isEmpty()) {
4540      addGroup();
4541    }
4542    return getGroup().get(0);
4543  }
4544
4545  /**
4546   * @return {@link #supplementalData} (The supplemental data criteria for the
4547   *         measure report, specified as either the name of a valid CQL
4548   *         expression within a referenced library, or a valid FHIR Resource
4549   *         Path.)
4550   */
4551  public List<MeasureSupplementalDataComponent> getSupplementalData() {
4552    if (this.supplementalData == null)
4553      this.supplementalData = new ArrayList<MeasureSupplementalDataComponent>();
4554    return this.supplementalData;
4555  }
4556
4557  /**
4558   * @return Returns a reference to <code>this</code> for easy method chaining
4559   */
4560  public Measure setSupplementalData(List<MeasureSupplementalDataComponent> theSupplementalData) {
4561    this.supplementalData = theSupplementalData;
4562    return this;
4563  }
4564
4565  public boolean hasSupplementalData() {
4566    if (this.supplementalData == null)
4567      return false;
4568    for (MeasureSupplementalDataComponent item : this.supplementalData)
4569      if (!item.isEmpty())
4570        return true;
4571    return false;
4572  }
4573
4574  public MeasureSupplementalDataComponent addSupplementalData() { // 3
4575    MeasureSupplementalDataComponent t = new MeasureSupplementalDataComponent();
4576    if (this.supplementalData == null)
4577      this.supplementalData = new ArrayList<MeasureSupplementalDataComponent>();
4578    this.supplementalData.add(t);
4579    return t;
4580  }
4581
4582  public Measure addSupplementalData(MeasureSupplementalDataComponent t) { // 3
4583    if (t == null)
4584      return this;
4585    if (this.supplementalData == null)
4586      this.supplementalData = new ArrayList<MeasureSupplementalDataComponent>();
4587    this.supplementalData.add(t);
4588    return this;
4589  }
4590
4591  /**
4592   * @return The first repetition of repeating field {@link #supplementalData},
4593   *         creating it if it does not already exist
4594   */
4595  public MeasureSupplementalDataComponent getSupplementalDataFirstRep() {
4596    if (getSupplementalData().isEmpty()) {
4597      addSupplementalData();
4598    }
4599    return getSupplementalData().get(0);
4600  }
4601
4602  protected void listChildren(List<Property> children) {
4603    super.listChildren(children);
4604    children.add(new Property("url", "uri",
4605        "An absolute URI that is used to identify this measure 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 measure is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the measure is stored on different servers.",
4606        0, 1, url));
4607    children.add(new Property("identifier", "Identifier",
4608        "A formal identifier that is used to identify this measure when it is represented in other formats, or referenced in a specification, model, design or an instance.",
4609        0, java.lang.Integer.MAX_VALUE, identifier));
4610    children.add(new Property("version", "string",
4611        "The identifier that is used to identify this version of the measure when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the measure 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 artifacts.",
4612        0, 1, version));
4613    children.add(new Property("name", "string",
4614        "A natural language name identifying the measure. This name should be usable as an identifier for the module by machine processing applications such as code generation.",
4615        0, 1, name));
4616    children.add(
4617        new Property("title", "string", "A short, descriptive, user-friendly title for the measure.", 0, 1, title));
4618    children.add(new Property("subtitle", "string",
4619        "An explanatory or alternate title for the measure giving additional information about its content.", 0, 1,
4620        subtitle));
4621    children.add(new Property("status", "code",
4622        "The status of this measure. Enables tracking the life-cycle of the content.", 0, 1, status));
4623    children.add(new Property("experimental", "boolean",
4624        "A Boolean value to indicate that this measure is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.",
4625        0, 1, experimental));
4626    children.add(new Property("subject[x]", "CodeableConcept|Reference(Group)",
4627        "The intended subjects for the measure. If this element is not provided, a Patient subject is assumed, but the subject of the measure can be anything.",
4628        0, 1, subject));
4629    children.add(new Property("date", "dateTime",
4630        "The date  (and optionally time) when the measure 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 measure changes.",
4631        0, 1, date));
4632    children.add(new Property("publisher", "string",
4633        "The name of the organization or individual that published the measure.", 0, 1, publisher));
4634    children.add(new Property("contact", "ContactDetail",
4635        "Contact details to assist a user in finding and communicating with the publisher.", 0,
4636        java.lang.Integer.MAX_VALUE, contact));
4637    children.add(new Property("description", "markdown",
4638        "A free text natural language description of the measure from a consumer's perspective.", 0, 1, description));
4639    children.add(new Property("useContext", "UsageContext",
4640        "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 measure instances.",
4641        0, java.lang.Integer.MAX_VALUE, useContext));
4642    children.add(new Property("jurisdiction", "CodeableConcept",
4643        "A legal or geographic region in which the measure is intended to be used.", 0, java.lang.Integer.MAX_VALUE,
4644        jurisdiction));
4645    children.add(new Property("purpose", "markdown",
4646        "Explanation of why this measure is needed and why it has been designed as it has.", 0, 1, purpose));
4647    children.add(new Property("usage", "string",
4648        "A detailed description, from a clinical perspective, of how the measure is used.", 0, 1, usage));
4649    children.add(new Property("copyright", "markdown",
4650        "A copyright statement relating to the measure and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the measure.",
4651        0, 1, copyright));
4652    children.add(new Property("approvalDate", "date",
4653        "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.",
4654        0, 1, approvalDate));
4655    children.add(new Property("lastReviewDate", "date",
4656        "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.",
4657        0, 1, lastReviewDate));
4658    children.add(new Property("effectivePeriod", "Period",
4659        "The period during which the measure content was or is planned to be in active use.", 0, 1, effectivePeriod));
4660    children.add(new Property("topic", "CodeableConcept",
4661        "Descriptive topics related to the content of the measure. Topics provide a high-level categorization grouping types of measures that can be useful for filtering and searching.",
4662        0, java.lang.Integer.MAX_VALUE, topic));
4663    children.add(new Property("author", "ContactDetail",
4664        "An individiual or organization primarily involved in the creation and maintenance of the content.", 0,
4665        java.lang.Integer.MAX_VALUE, author));
4666    children.add(new Property("editor", "ContactDetail",
4667        "An individual or organization primarily responsible for internal coherence of the content.", 0,
4668        java.lang.Integer.MAX_VALUE, editor));
4669    children.add(new Property("reviewer", "ContactDetail",
4670        "An individual or organization primarily responsible for review of some aspect of the content.", 0,
4671        java.lang.Integer.MAX_VALUE, reviewer));
4672    children.add(new Property("endorser", "ContactDetail",
4673        "An individual or organization responsible for officially endorsing the content for use in some setting.", 0,
4674        java.lang.Integer.MAX_VALUE, endorser));
4675    children.add(new Property("relatedArtifact", "RelatedArtifact",
4676        "Related artifacts such as additional documentation, justification, or bibliographic references.", 0,
4677        java.lang.Integer.MAX_VALUE, relatedArtifact));
4678    children.add(new Property("library", "canonical(Library)",
4679        "A reference to a Library resource containing the formal logic used by the measure.", 0,
4680        java.lang.Integer.MAX_VALUE, library));
4681    children.add(new Property("disclaimer", "markdown",
4682        "Notices and disclaimers regarding the use of the measure or related to intellectual property (such as code systems) referenced by the measure.",
4683        0, 1, disclaimer));
4684    children.add(new Property("scoring", "CodeableConcept",
4685        "Indicates how the calculation is performed for the measure, including proportion, ratio, continuous-variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented.",
4686        0, 1, scoring));
4687    children.add(new Property("compositeScoring", "CodeableConcept",
4688        "If this is a composite measure, the scoring method used to combine the component measures to determine the composite score.",
4689        0, 1, compositeScoring));
4690    children.add(new Property("type", "CodeableConcept",
4691        "Indicates whether the measure is used to examine a process, an outcome over time, a patient-reported outcome, or a structure measure such as utilization.",
4692        0, java.lang.Integer.MAX_VALUE, type));
4693    children.add(new Property("riskAdjustment", "string",
4694        "A description of the risk adjustment factors that may impact the resulting score for the measure and how they may be accounted for when computing and reporting measure results.",
4695        0, 1, riskAdjustment));
4696    children.add(new Property("rateAggregation", "string",
4697        "Describes how to combine the information calculated, based on logic in each of several populations, into one summarized result.",
4698        0, 1, rateAggregation));
4699    children.add(new Property("rationale", "markdown",
4700        "Provides a succinct statement of the need for the measure. Usually includes statements pertaining to importance criterion: impact, gap in care, and evidence.",
4701        0, 1, rationale));
4702    children.add(new Property("clinicalRecommendationStatement", "markdown",
4703        "Provides a summary of relevant clinical guidelines or other clinical recommendations supporting the measure.",
4704        0, 1, clinicalRecommendationStatement));
4705    children.add(new Property("improvementNotation", "CodeableConcept",
4706        "Information on whether an increase or decrease in score is the preferred result (e.g., a higher score indicates better quality OR a lower score indicates better quality OR quality is within a range).",
4707        0, 1, improvementNotation));
4708    children.add(
4709        new Property("definition", "markdown", "Provides a description of an individual term used within the measure.",
4710            0, java.lang.Integer.MAX_VALUE, definition));
4711    children.add(new Property("guidance", "markdown",
4712        "Additional guidance for the measure including how it can be used in a clinical context, and the intent of the measure.",
4713        0, 1, guidance));
4714    children.add(new Property("group", "", "A group of population criteria for the measure.", 0,
4715        java.lang.Integer.MAX_VALUE, group));
4716    children.add(new Property("supplementalData", "",
4717        "The supplemental data criteria for the measure report, specified as either the name of a valid CQL expression within a referenced library, or a valid FHIR Resource Path.",
4718        0, java.lang.Integer.MAX_VALUE, supplementalData));
4719  }
4720
4721  @Override
4722  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4723    switch (_hash) {
4724    case 116079:
4725      /* url */ return new Property("url", "uri",
4726          "An absolute URI that is used to identify this measure 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 measure is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the measure is stored on different servers.",
4727          0, 1, url);
4728    case -1618432855:
4729      /* identifier */ return new Property("identifier", "Identifier",
4730          "A formal identifier that is used to identify this measure when it is represented in other formats, or referenced in a specification, model, design or an instance.",
4731          0, java.lang.Integer.MAX_VALUE, identifier);
4732    case 351608024:
4733      /* version */ return new Property("version", "string",
4734          "The identifier that is used to identify this version of the measure when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the measure 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 artifacts.",
4735          0, 1, version);
4736    case 3373707:
4737      /* name */ return new Property("name", "string",
4738          "A natural language name identifying the measure. This name should be usable as an identifier for the module by machine processing applications such as code generation.",
4739          0, 1, name);
4740    case 110371416:
4741      /* title */ return new Property("title", "string", "A short, descriptive, user-friendly title for the measure.",
4742          0, 1, title);
4743    case -2060497896:
4744      /* subtitle */ return new Property("subtitle", "string",
4745          "An explanatory or alternate title for the measure giving additional information about its content.", 0, 1,
4746          subtitle);
4747    case -892481550:
4748      /* status */ return new Property("status", "code",
4749          "The status of this measure. Enables tracking the life-cycle of the content.", 0, 1, status);
4750    case -404562712:
4751      /* experimental */ return new Property("experimental", "boolean",
4752          "A Boolean value to indicate that this measure is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.",
4753          0, 1, experimental);
4754    case -573640748:
4755      /* subject[x] */ return new Property("subject[x]", "CodeableConcept|Reference(Group)",
4756          "The intended subjects for the measure. If this element is not provided, a Patient subject is assumed, but the subject of the measure can be anything.",
4757          0, 1, subject);
4758    case -1867885268:
4759      /* subject */ return new Property("subject[x]", "CodeableConcept|Reference(Group)",
4760          "The intended subjects for the measure. If this element is not provided, a Patient subject is assumed, but the subject of the measure can be anything.",
4761          0, 1, subject);
4762    case -1257122603:
4763      /* subjectCodeableConcept */ return new Property("subject[x]", "CodeableConcept|Reference(Group)",
4764          "The intended subjects for the measure. If this element is not provided, a Patient subject is assumed, but the subject of the measure can be anything.",
4765          0, 1, subject);
4766    case 772938623:
4767      /* subjectReference */ return new Property("subject[x]", "CodeableConcept|Reference(Group)",
4768          "The intended subjects for the measure. If this element is not provided, a Patient subject is assumed, but the subject of the measure can be anything.",
4769          0, 1, subject);
4770    case 3076014:
4771      /* date */ return new Property("date", "dateTime",
4772          "The date  (and optionally time) when the measure 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 measure changes.",
4773          0, 1, date);
4774    case 1447404028:
4775      /* publisher */ return new Property("publisher", "string",
4776          "The name of the organization or individual that published the measure.", 0, 1, publisher);
4777    case 951526432:
4778      /* contact */ return new Property("contact", "ContactDetail",
4779          "Contact details to assist a user in finding and communicating with the publisher.", 0,
4780          java.lang.Integer.MAX_VALUE, contact);
4781    case -1724546052:
4782      /* description */ return new Property("description", "markdown",
4783          "A free text natural language description of the measure from a consumer's perspective.", 0, 1, description);
4784    case -669707736:
4785      /* useContext */ return new Property("useContext", "UsageContext",
4786          "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 measure instances.",
4787          0, java.lang.Integer.MAX_VALUE, useContext);
4788    case -507075711:
4789      /* jurisdiction */ return new Property("jurisdiction", "CodeableConcept",
4790          "A legal or geographic region in which the measure is intended to be used.", 0, java.lang.Integer.MAX_VALUE,
4791          jurisdiction);
4792    case -220463842:
4793      /* purpose */ return new Property("purpose", "markdown",
4794          "Explanation of why this measure is needed and why it has been designed as it has.", 0, 1, purpose);
4795    case 111574433:
4796      /* usage */ return new Property("usage", "string",
4797          "A detailed description, from a clinical perspective, of how the measure is used.", 0, 1, usage);
4798    case 1522889671:
4799      /* copyright */ return new Property("copyright", "markdown",
4800          "A copyright statement relating to the measure and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the measure.",
4801          0, 1, copyright);
4802    case 223539345:
4803      /* approvalDate */ return new Property("approvalDate", "date",
4804          "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.",
4805          0, 1, approvalDate);
4806    case -1687512484:
4807      /* lastReviewDate */ return new Property("lastReviewDate", "date",
4808          "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.",
4809          0, 1, lastReviewDate);
4810    case -403934648:
4811      /* effectivePeriod */ return new Property("effectivePeriod", "Period",
4812          "The period during which the measure content was or is planned to be in active use.", 0, 1, effectivePeriod);
4813    case 110546223:
4814      /* topic */ return new Property("topic", "CodeableConcept",
4815          "Descriptive topics related to the content of the measure. Topics provide a high-level categorization grouping types of measures that can be useful for filtering and searching.",
4816          0, java.lang.Integer.MAX_VALUE, topic);
4817    case -1406328437:
4818      /* author */ return new Property("author", "ContactDetail",
4819          "An individiual or organization primarily involved in the creation and maintenance of the content.", 0,
4820          java.lang.Integer.MAX_VALUE, author);
4821    case -1307827859:
4822      /* editor */ return new Property("editor", "ContactDetail",
4823          "An individual or organization primarily responsible for internal coherence of the content.", 0,
4824          java.lang.Integer.MAX_VALUE, editor);
4825    case -261190139:
4826      /* reviewer */ return new Property("reviewer", "ContactDetail",
4827          "An individual or organization primarily responsible for review of some aspect of the content.", 0,
4828          java.lang.Integer.MAX_VALUE, reviewer);
4829    case 1740277666:
4830      /* endorser */ return new Property("endorser", "ContactDetail",
4831          "An individual or organization responsible for officially endorsing the content for use in some setting.", 0,
4832          java.lang.Integer.MAX_VALUE, endorser);
4833    case 666807069:
4834      /* relatedArtifact */ return new Property("relatedArtifact", "RelatedArtifact",
4835          "Related artifacts such as additional documentation, justification, or bibliographic references.", 0,
4836          java.lang.Integer.MAX_VALUE, relatedArtifact);
4837    case 166208699:
4838      /* library */ return new Property("library", "canonical(Library)",
4839          "A reference to a Library resource containing the formal logic used by the measure.", 0,
4840          java.lang.Integer.MAX_VALUE, library);
4841    case 432371099:
4842      /* disclaimer */ return new Property("disclaimer", "markdown",
4843          "Notices and disclaimers regarding the use of the measure or related to intellectual property (such as code systems) referenced by the measure.",
4844          0, 1, disclaimer);
4845    case 1924005583:
4846      /* scoring */ return new Property("scoring", "CodeableConcept",
4847          "Indicates how the calculation is performed for the measure, including proportion, ratio, continuous-variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented.",
4848          0, 1, scoring);
4849    case 569347656:
4850      /* compositeScoring */ return new Property("compositeScoring", "CodeableConcept",
4851          "If this is a composite measure, the scoring method used to combine the component measures to determine the composite score.",
4852          0, 1, compositeScoring);
4853    case 3575610:
4854      /* type */ return new Property("type", "CodeableConcept",
4855          "Indicates whether the measure is used to examine a process, an outcome over time, a patient-reported outcome, or a structure measure such as utilization.",
4856          0, java.lang.Integer.MAX_VALUE, type);
4857    case 93273500:
4858      /* riskAdjustment */ return new Property("riskAdjustment", "string",
4859          "A description of the risk adjustment factors that may impact the resulting score for the measure and how they may be accounted for when computing and reporting measure results.",
4860          0, 1, riskAdjustment);
4861    case 1254503906:
4862      /* rateAggregation */ return new Property("rateAggregation", "string",
4863          "Describes how to combine the information calculated, based on logic in each of several populations, into one summarized result.",
4864          0, 1, rateAggregation);
4865    case 345689335:
4866      /* rationale */ return new Property("rationale", "markdown",
4867          "Provides a succinct statement of the need for the measure. Usually includes statements pertaining to importance criterion: impact, gap in care, and evidence.",
4868          0, 1, rationale);
4869    case -18631389:
4870      /* clinicalRecommendationStatement */ return new Property("clinicalRecommendationStatement", "markdown",
4871          "Provides a summary of relevant clinical guidelines or other clinical recommendations supporting the measure.",
4872          0, 1, clinicalRecommendationStatement);
4873    case -2085456136:
4874      /* improvementNotation */ return new Property("improvementNotation", "CodeableConcept",
4875          "Information on whether an increase or decrease in score is the preferred result (e.g., a higher score indicates better quality OR a lower score indicates better quality OR quality is within a range).",
4876          0, 1, improvementNotation);
4877    case -1014418093:
4878      /* definition */ return new Property("definition", "markdown",
4879          "Provides a description of an individual term used within the measure.", 0, java.lang.Integer.MAX_VALUE,
4880          definition);
4881    case -1314002088:
4882      /* guidance */ return new Property("guidance", "markdown",
4883          "Additional guidance for the measure including how it can be used in a clinical context, and the intent of the measure.",
4884          0, 1, guidance);
4885    case 98629247:
4886      /* group */ return new Property("group", "", "A group of population criteria for the measure.", 0,
4887          java.lang.Integer.MAX_VALUE, group);
4888    case 1447496814:
4889      /* supplementalData */ return new Property("supplementalData", "",
4890          "The supplemental data criteria for the measure report, specified as either the name of a valid CQL expression within a referenced library, or a valid FHIR Resource Path.",
4891          0, java.lang.Integer.MAX_VALUE, supplementalData);
4892    default:
4893      return super.getNamedProperty(_hash, _name, _checkValid);
4894    }
4895
4896  }
4897
4898  @Override
4899  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4900    switch (hash) {
4901    case 116079:
4902      /* url */ return this.url == null ? new Base[0] : new Base[] { this.url }; // UriType
4903    case -1618432855:
4904      /* identifier */ return this.identifier == null ? new Base[0]
4905          : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
4906    case 351608024:
4907      /* version */ return this.version == null ? new Base[0] : new Base[] { this.version }; // StringType
4908    case 3373707:
4909      /* name */ return this.name == null ? new Base[0] : new Base[] { this.name }; // StringType
4910    case 110371416:
4911      /* title */ return this.title == null ? new Base[0] : new Base[] { this.title }; // StringType
4912    case -2060497896:
4913      /* subtitle */ return this.subtitle == null ? new Base[0] : new Base[] { this.subtitle }; // StringType
4914    case -892481550:
4915      /* status */ return this.status == null ? new Base[0] : new Base[] { this.status }; // Enumeration<PublicationStatus>
4916    case -404562712:
4917      /* experimental */ return this.experimental == null ? new Base[0] : new Base[] { this.experimental }; // BooleanType
4918    case -1867885268:
4919      /* subject */ return this.subject == null ? new Base[0] : new Base[] { this.subject }; // Type
4920    case 3076014:
4921      /* date */ return this.date == null ? new Base[0] : new Base[] { this.date }; // DateTimeType
4922    case 1447404028:
4923      /* publisher */ return this.publisher == null ? new Base[0] : new Base[] { this.publisher }; // StringType
4924    case 951526432:
4925      /* contact */ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
4926    case -1724546052:
4927      /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // MarkdownType
4928    case -669707736:
4929      /* useContext */ return this.useContext == null ? new Base[0]
4930          : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
4931    case -507075711:
4932      /* jurisdiction */ return this.jurisdiction == null ? new Base[0]
4933          : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
4934    case -220463842:
4935      /* purpose */ return this.purpose == null ? new Base[0] : new Base[] { this.purpose }; // MarkdownType
4936    case 111574433:
4937      /* usage */ return this.usage == null ? new Base[0] : new Base[] { this.usage }; // StringType
4938    case 1522889671:
4939      /* copyright */ return this.copyright == null ? new Base[0] : new Base[] { this.copyright }; // MarkdownType
4940    case 223539345:
4941      /* approvalDate */ return this.approvalDate == null ? new Base[0] : new Base[] { this.approvalDate }; // DateType
4942    case -1687512484:
4943      /* lastReviewDate */ return this.lastReviewDate == null ? new Base[0] : new Base[] { this.lastReviewDate }; // DateType
4944    case -403934648:
4945      /* effectivePeriod */ return this.effectivePeriod == null ? new Base[0] : new Base[] { this.effectivePeriod }; // Period
4946    case 110546223:
4947      /* topic */ return this.topic == null ? new Base[0] : this.topic.toArray(new Base[this.topic.size()]); // CodeableConcept
4948    case -1406328437:
4949      /* author */ return this.author == null ? new Base[0] : this.author.toArray(new Base[this.author.size()]); // ContactDetail
4950    case -1307827859:
4951      /* editor */ return this.editor == null ? new Base[0] : this.editor.toArray(new Base[this.editor.size()]); // ContactDetail
4952    case -261190139:
4953      /* reviewer */ return this.reviewer == null ? new Base[0] : this.reviewer.toArray(new Base[this.reviewer.size()]); // ContactDetail
4954    case 1740277666:
4955      /* endorser */ return this.endorser == null ? new Base[0] : this.endorser.toArray(new Base[this.endorser.size()]); // ContactDetail
4956    case 666807069:
4957      /* relatedArtifact */ return this.relatedArtifact == null ? new Base[0]
4958          : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
4959    case 166208699:
4960      /* library */ return this.library == null ? new Base[0] : this.library.toArray(new Base[this.library.size()]); // CanonicalType
4961    case 432371099:
4962      /* disclaimer */ return this.disclaimer == null ? new Base[0] : new Base[] { this.disclaimer }; // MarkdownType
4963    case 1924005583:
4964      /* scoring */ return this.scoring == null ? new Base[0] : new Base[] { this.scoring }; // CodeableConcept
4965    case 569347656:
4966      /* compositeScoring */ return this.compositeScoring == null ? new Base[0] : new Base[] { this.compositeScoring }; // CodeableConcept
4967    case 3575610:
4968      /* type */ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
4969    case 93273500:
4970      /* riskAdjustment */ return this.riskAdjustment == null ? new Base[0] : new Base[] { this.riskAdjustment }; // StringType
4971    case 1254503906:
4972      /* rateAggregation */ return this.rateAggregation == null ? new Base[0] : new Base[] { this.rateAggregation }; // StringType
4973    case 345689335:
4974      /* rationale */ return this.rationale == null ? new Base[0] : new Base[] { this.rationale }; // MarkdownType
4975    case -18631389:
4976      /* clinicalRecommendationStatement */ return this.clinicalRecommendationStatement == null ? new Base[0]
4977          : new Base[] { this.clinicalRecommendationStatement }; // MarkdownType
4978    case -2085456136:
4979      /* improvementNotation */ return this.improvementNotation == null ? new Base[0]
4980          : new Base[] { this.improvementNotation }; // CodeableConcept
4981    case -1014418093:
4982      /* definition */ return this.definition == null ? new Base[0]
4983          : this.definition.toArray(new Base[this.definition.size()]); // MarkdownType
4984    case -1314002088:
4985      /* guidance */ return this.guidance == null ? new Base[0] : new Base[] { this.guidance }; // MarkdownType
4986    case 98629247:
4987      /* group */ return this.group == null ? new Base[0] : this.group.toArray(new Base[this.group.size()]); // MeasureGroupComponent
4988    case 1447496814:
4989      /* supplementalData */ return this.supplementalData == null ? new Base[0]
4990          : this.supplementalData.toArray(new Base[this.supplementalData.size()]); // MeasureSupplementalDataComponent
4991    default:
4992      return super.getProperty(hash, name, checkValid);
4993    }
4994
4995  }
4996
4997  @Override
4998  public Base setProperty(int hash, String name, Base value) throws FHIRException {
4999    switch (hash) {
5000    case 116079: // url
5001      this.url = castToUri(value); // UriType
5002      return value;
5003    case -1618432855: // identifier
5004      this.getIdentifier().add(castToIdentifier(value)); // Identifier
5005      return value;
5006    case 351608024: // version
5007      this.version = castToString(value); // StringType
5008      return value;
5009    case 3373707: // name
5010      this.name = castToString(value); // StringType
5011      return value;
5012    case 110371416: // title
5013      this.title = castToString(value); // StringType
5014      return value;
5015    case -2060497896: // subtitle
5016      this.subtitle = castToString(value); // StringType
5017      return value;
5018    case -892481550: // status
5019      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
5020      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
5021      return value;
5022    case -404562712: // experimental
5023      this.experimental = castToBoolean(value); // BooleanType
5024      return value;
5025    case -1867885268: // subject
5026      this.subject = castToType(value); // Type
5027      return value;
5028    case 3076014: // date
5029      this.date = castToDateTime(value); // DateTimeType
5030      return value;
5031    case 1447404028: // publisher
5032      this.publisher = castToString(value); // StringType
5033      return value;
5034    case 951526432: // contact
5035      this.getContact().add(castToContactDetail(value)); // ContactDetail
5036      return value;
5037    case -1724546052: // description
5038      this.description = castToMarkdown(value); // MarkdownType
5039      return value;
5040    case -669707736: // useContext
5041      this.getUseContext().add(castToUsageContext(value)); // UsageContext
5042      return value;
5043    case -507075711: // jurisdiction
5044      this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
5045      return value;
5046    case -220463842: // purpose
5047      this.purpose = castToMarkdown(value); // MarkdownType
5048      return value;
5049    case 111574433: // usage
5050      this.usage = castToString(value); // StringType
5051      return value;
5052    case 1522889671: // copyright
5053      this.copyright = castToMarkdown(value); // MarkdownType
5054      return value;
5055    case 223539345: // approvalDate
5056      this.approvalDate = castToDate(value); // DateType
5057      return value;
5058    case -1687512484: // lastReviewDate
5059      this.lastReviewDate = castToDate(value); // DateType
5060      return value;
5061    case -403934648: // effectivePeriod
5062      this.effectivePeriod = castToPeriod(value); // Period
5063      return value;
5064    case 110546223: // topic
5065      this.getTopic().add(castToCodeableConcept(value)); // CodeableConcept
5066      return value;
5067    case -1406328437: // author
5068      this.getAuthor().add(castToContactDetail(value)); // ContactDetail
5069      return value;
5070    case -1307827859: // editor
5071      this.getEditor().add(castToContactDetail(value)); // ContactDetail
5072      return value;
5073    case -261190139: // reviewer
5074      this.getReviewer().add(castToContactDetail(value)); // ContactDetail
5075      return value;
5076    case 1740277666: // endorser
5077      this.getEndorser().add(castToContactDetail(value)); // ContactDetail
5078      return value;
5079    case 666807069: // relatedArtifact
5080      this.getRelatedArtifact().add(castToRelatedArtifact(value)); // RelatedArtifact
5081      return value;
5082    case 166208699: // library
5083      this.getLibrary().add(castToCanonical(value)); // CanonicalType
5084      return value;
5085    case 432371099: // disclaimer
5086      this.disclaimer = castToMarkdown(value); // MarkdownType
5087      return value;
5088    case 1924005583: // scoring
5089      this.scoring = castToCodeableConcept(value); // CodeableConcept
5090      return value;
5091    case 569347656: // compositeScoring
5092      this.compositeScoring = castToCodeableConcept(value); // CodeableConcept
5093      return value;
5094    case 3575610: // type
5095      this.getType().add(castToCodeableConcept(value)); // CodeableConcept
5096      return value;
5097    case 93273500: // riskAdjustment
5098      this.riskAdjustment = castToString(value); // StringType
5099      return value;
5100    case 1254503906: // rateAggregation
5101      this.rateAggregation = castToString(value); // StringType
5102      return value;
5103    case 345689335: // rationale
5104      this.rationale = castToMarkdown(value); // MarkdownType
5105      return value;
5106    case -18631389: // clinicalRecommendationStatement
5107      this.clinicalRecommendationStatement = castToMarkdown(value); // MarkdownType
5108      return value;
5109    case -2085456136: // improvementNotation
5110      this.improvementNotation = castToCodeableConcept(value); // CodeableConcept
5111      return value;
5112    case -1014418093: // definition
5113      this.getDefinition().add(castToMarkdown(value)); // MarkdownType
5114      return value;
5115    case -1314002088: // guidance
5116      this.guidance = castToMarkdown(value); // MarkdownType
5117      return value;
5118    case 98629247: // group
5119      this.getGroup().add((MeasureGroupComponent) value); // MeasureGroupComponent
5120      return value;
5121    case 1447496814: // supplementalData
5122      this.getSupplementalData().add((MeasureSupplementalDataComponent) value); // MeasureSupplementalDataComponent
5123      return value;
5124    default:
5125      return super.setProperty(hash, name, value);
5126    }
5127
5128  }
5129
5130  @Override
5131  public Base setProperty(String name, Base value) throws FHIRException {
5132    if (name.equals("url")) {
5133      this.url = castToUri(value); // UriType
5134    } else if (name.equals("identifier")) {
5135      this.getIdentifier().add(castToIdentifier(value));
5136    } else if (name.equals("version")) {
5137      this.version = castToString(value); // StringType
5138    } else if (name.equals("name")) {
5139      this.name = castToString(value); // StringType
5140    } else if (name.equals("title")) {
5141      this.title = castToString(value); // StringType
5142    } else if (name.equals("subtitle")) {
5143      this.subtitle = castToString(value); // StringType
5144    } else if (name.equals("status")) {
5145      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
5146      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
5147    } else if (name.equals("experimental")) {
5148      this.experimental = castToBoolean(value); // BooleanType
5149    } else if (name.equals("subject[x]")) {
5150      this.subject = castToType(value); // Type
5151    } else if (name.equals("date")) {
5152      this.date = castToDateTime(value); // DateTimeType
5153    } else if (name.equals("publisher")) {
5154      this.publisher = castToString(value); // StringType
5155    } else if (name.equals("contact")) {
5156      this.getContact().add(castToContactDetail(value));
5157    } else if (name.equals("description")) {
5158      this.description = castToMarkdown(value); // MarkdownType
5159    } else if (name.equals("useContext")) {
5160      this.getUseContext().add(castToUsageContext(value));
5161    } else if (name.equals("jurisdiction")) {
5162      this.getJurisdiction().add(castToCodeableConcept(value));
5163    } else if (name.equals("purpose")) {
5164      this.purpose = castToMarkdown(value); // MarkdownType
5165    } else if (name.equals("usage")) {
5166      this.usage = castToString(value); // StringType
5167    } else if (name.equals("copyright")) {
5168      this.copyright = castToMarkdown(value); // MarkdownType
5169    } else if (name.equals("approvalDate")) {
5170      this.approvalDate = castToDate(value); // DateType
5171    } else if (name.equals("lastReviewDate")) {
5172      this.lastReviewDate = castToDate(value); // DateType
5173    } else if (name.equals("effectivePeriod")) {
5174      this.effectivePeriod = castToPeriod(value); // Period
5175    } else if (name.equals("topic")) {
5176      this.getTopic().add(castToCodeableConcept(value));
5177    } else if (name.equals("author")) {
5178      this.getAuthor().add(castToContactDetail(value));
5179    } else if (name.equals("editor")) {
5180      this.getEditor().add(castToContactDetail(value));
5181    } else if (name.equals("reviewer")) {
5182      this.getReviewer().add(castToContactDetail(value));
5183    } else if (name.equals("endorser")) {
5184      this.getEndorser().add(castToContactDetail(value));
5185    } else if (name.equals("relatedArtifact")) {
5186      this.getRelatedArtifact().add(castToRelatedArtifact(value));
5187    } else if (name.equals("library")) {
5188      this.getLibrary().add(castToCanonical(value));
5189    } else if (name.equals("disclaimer")) {
5190      this.disclaimer = castToMarkdown(value); // MarkdownType
5191    } else if (name.equals("scoring")) {
5192      this.scoring = castToCodeableConcept(value); // CodeableConcept
5193    } else if (name.equals("compositeScoring")) {
5194      this.compositeScoring = castToCodeableConcept(value); // CodeableConcept
5195    } else if (name.equals("type")) {
5196      this.getType().add(castToCodeableConcept(value));
5197    } else if (name.equals("riskAdjustment")) {
5198      this.riskAdjustment = castToString(value); // StringType
5199    } else if (name.equals("rateAggregation")) {
5200      this.rateAggregation = castToString(value); // StringType
5201    } else if (name.equals("rationale")) {
5202      this.rationale = castToMarkdown(value); // MarkdownType
5203    } else if (name.equals("clinicalRecommendationStatement")) {
5204      this.clinicalRecommendationStatement = castToMarkdown(value); // MarkdownType
5205    } else if (name.equals("improvementNotation")) {
5206      this.improvementNotation = castToCodeableConcept(value); // CodeableConcept
5207    } else if (name.equals("definition")) {
5208      this.getDefinition().add(castToMarkdown(value));
5209    } else if (name.equals("guidance")) {
5210      this.guidance = castToMarkdown(value); // MarkdownType
5211    } else if (name.equals("group")) {
5212      this.getGroup().add((MeasureGroupComponent) value);
5213    } else if (name.equals("supplementalData")) {
5214      this.getSupplementalData().add((MeasureSupplementalDataComponent) value);
5215    } else
5216      return super.setProperty(name, value);
5217    return value;
5218  }
5219
5220  @Override
5221  public Base makeProperty(int hash, String name) throws FHIRException {
5222    switch (hash) {
5223    case 116079:
5224      return getUrlElement();
5225    case -1618432855:
5226      return addIdentifier();
5227    case 351608024:
5228      return getVersionElement();
5229    case 3373707:
5230      return getNameElement();
5231    case 110371416:
5232      return getTitleElement();
5233    case -2060497896:
5234      return getSubtitleElement();
5235    case -892481550:
5236      return getStatusElement();
5237    case -404562712:
5238      return getExperimentalElement();
5239    case -573640748:
5240      return getSubject();
5241    case -1867885268:
5242      return getSubject();
5243    case 3076014:
5244      return getDateElement();
5245    case 1447404028:
5246      return getPublisherElement();
5247    case 951526432:
5248      return addContact();
5249    case -1724546052:
5250      return getDescriptionElement();
5251    case -669707736:
5252      return addUseContext();
5253    case -507075711:
5254      return addJurisdiction();
5255    case -220463842:
5256      return getPurposeElement();
5257    case 111574433:
5258      return getUsageElement();
5259    case 1522889671:
5260      return getCopyrightElement();
5261    case 223539345:
5262      return getApprovalDateElement();
5263    case -1687512484:
5264      return getLastReviewDateElement();
5265    case -403934648:
5266      return getEffectivePeriod();
5267    case 110546223:
5268      return addTopic();
5269    case -1406328437:
5270      return addAuthor();
5271    case -1307827859:
5272      return addEditor();
5273    case -261190139:
5274      return addReviewer();
5275    case 1740277666:
5276      return addEndorser();
5277    case 666807069:
5278      return addRelatedArtifact();
5279    case 166208699:
5280      return addLibraryElement();
5281    case 432371099:
5282      return getDisclaimerElement();
5283    case 1924005583:
5284      return getScoring();
5285    case 569347656:
5286      return getCompositeScoring();
5287    case 3575610:
5288      return addType();
5289    case 93273500:
5290      return getRiskAdjustmentElement();
5291    case 1254503906:
5292      return getRateAggregationElement();
5293    case 345689335:
5294      return getRationaleElement();
5295    case -18631389:
5296      return getClinicalRecommendationStatementElement();
5297    case -2085456136:
5298      return getImprovementNotation();
5299    case -1014418093:
5300      return addDefinitionElement();
5301    case -1314002088:
5302      return getGuidanceElement();
5303    case 98629247:
5304      return addGroup();
5305    case 1447496814:
5306      return addSupplementalData();
5307    default:
5308      return super.makeProperty(hash, name);
5309    }
5310
5311  }
5312
5313  @Override
5314  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5315    switch (hash) {
5316    case 116079:
5317      /* url */ return new String[] { "uri" };
5318    case -1618432855:
5319      /* identifier */ return new String[] { "Identifier" };
5320    case 351608024:
5321      /* version */ return new String[] { "string" };
5322    case 3373707:
5323      /* name */ return new String[] { "string" };
5324    case 110371416:
5325      /* title */ return new String[] { "string" };
5326    case -2060497896:
5327      /* subtitle */ return new String[] { "string" };
5328    case -892481550:
5329      /* status */ return new String[] { "code" };
5330    case -404562712:
5331      /* experimental */ return new String[] { "boolean" };
5332    case -1867885268:
5333      /* subject */ return new String[] { "CodeableConcept", "Reference" };
5334    case 3076014:
5335      /* date */ return new String[] { "dateTime" };
5336    case 1447404028:
5337      /* publisher */ return new String[] { "string" };
5338    case 951526432:
5339      /* contact */ return new String[] { "ContactDetail" };
5340    case -1724546052:
5341      /* description */ return new String[] { "markdown" };
5342    case -669707736:
5343      /* useContext */ return new String[] { "UsageContext" };
5344    case -507075711:
5345      /* jurisdiction */ return new String[] { "CodeableConcept" };
5346    case -220463842:
5347      /* purpose */ return new String[] { "markdown" };
5348    case 111574433:
5349      /* usage */ return new String[] { "string" };
5350    case 1522889671:
5351      /* copyright */ return new String[] { "markdown" };
5352    case 223539345:
5353      /* approvalDate */ return new String[] { "date" };
5354    case -1687512484:
5355      /* lastReviewDate */ return new String[] { "date" };
5356    case -403934648:
5357      /* effectivePeriod */ return new String[] { "Period" };
5358    case 110546223:
5359      /* topic */ return new String[] { "CodeableConcept" };
5360    case -1406328437:
5361      /* author */ return new String[] { "ContactDetail" };
5362    case -1307827859:
5363      /* editor */ return new String[] { "ContactDetail" };
5364    case -261190139:
5365      /* reviewer */ return new String[] { "ContactDetail" };
5366    case 1740277666:
5367      /* endorser */ return new String[] { "ContactDetail" };
5368    case 666807069:
5369      /* relatedArtifact */ return new String[] { "RelatedArtifact" };
5370    case 166208699:
5371      /* library */ return new String[] { "canonical" };
5372    case 432371099:
5373      /* disclaimer */ return new String[] { "markdown" };
5374    case 1924005583:
5375      /* scoring */ return new String[] { "CodeableConcept" };
5376    case 569347656:
5377      /* compositeScoring */ return new String[] { "CodeableConcept" };
5378    case 3575610:
5379      /* type */ return new String[] { "CodeableConcept" };
5380    case 93273500:
5381      /* riskAdjustment */ return new String[] { "string" };
5382    case 1254503906:
5383      /* rateAggregation */ return new String[] { "string" };
5384    case 345689335:
5385      /* rationale */ return new String[] { "markdown" };
5386    case -18631389:
5387      /* clinicalRecommendationStatement */ return new String[] { "markdown" };
5388    case -2085456136:
5389      /* improvementNotation */ return new String[] { "CodeableConcept" };
5390    case -1014418093:
5391      /* definition */ return new String[] { "markdown" };
5392    case -1314002088:
5393      /* guidance */ return new String[] { "markdown" };
5394    case 98629247:
5395      /* group */ return new String[] {};
5396    case 1447496814:
5397      /* supplementalData */ return new String[] {};
5398    default:
5399      return super.getTypesForProperty(hash, name);
5400    }
5401
5402  }
5403
5404  @Override
5405  public Base addChild(String name) throws FHIRException {
5406    if (name.equals("url")) {
5407      throw new FHIRException("Cannot call addChild on a singleton property Measure.url");
5408    } else if (name.equals("identifier")) {
5409      return addIdentifier();
5410    } else if (name.equals("version")) {
5411      throw new FHIRException("Cannot call addChild on a singleton property Measure.version");
5412    } else if (name.equals("name")) {
5413      throw new FHIRException("Cannot call addChild on a singleton property Measure.name");
5414    } else if (name.equals("title")) {
5415      throw new FHIRException("Cannot call addChild on a singleton property Measure.title");
5416    } else if (name.equals("subtitle")) {
5417      throw new FHIRException("Cannot call addChild on a singleton property Measure.subtitle");
5418    } else if (name.equals("status")) {
5419      throw new FHIRException("Cannot call addChild on a singleton property Measure.status");
5420    } else if (name.equals("experimental")) {
5421      throw new FHIRException("Cannot call addChild on a singleton property Measure.experimental");
5422    } else if (name.equals("subjectCodeableConcept")) {
5423      this.subject = new CodeableConcept();
5424      return this.subject;
5425    } else if (name.equals("subjectReference")) {
5426      this.subject = new Reference();
5427      return this.subject;
5428    } else if (name.equals("date")) {
5429      throw new FHIRException("Cannot call addChild on a singleton property Measure.date");
5430    } else if (name.equals("publisher")) {
5431      throw new FHIRException("Cannot call addChild on a singleton property Measure.publisher");
5432    } else if (name.equals("contact")) {
5433      return addContact();
5434    } else if (name.equals("description")) {
5435      throw new FHIRException("Cannot call addChild on a singleton property Measure.description");
5436    } else if (name.equals("useContext")) {
5437      return addUseContext();
5438    } else if (name.equals("jurisdiction")) {
5439      return addJurisdiction();
5440    } else if (name.equals("purpose")) {
5441      throw new FHIRException("Cannot call addChild on a singleton property Measure.purpose");
5442    } else if (name.equals("usage")) {
5443      throw new FHIRException("Cannot call addChild on a singleton property Measure.usage");
5444    } else if (name.equals("copyright")) {
5445      throw new FHIRException("Cannot call addChild on a singleton property Measure.copyright");
5446    } else if (name.equals("approvalDate")) {
5447      throw new FHIRException("Cannot call addChild on a singleton property Measure.approvalDate");
5448    } else if (name.equals("lastReviewDate")) {
5449      throw new FHIRException("Cannot call addChild on a singleton property Measure.lastReviewDate");
5450    } else if (name.equals("effectivePeriod")) {
5451      this.effectivePeriod = new Period();
5452      return this.effectivePeriod;
5453    } else if (name.equals("topic")) {
5454      return addTopic();
5455    } else if (name.equals("author")) {
5456      return addAuthor();
5457    } else if (name.equals("editor")) {
5458      return addEditor();
5459    } else if (name.equals("reviewer")) {
5460      return addReviewer();
5461    } else if (name.equals("endorser")) {
5462      return addEndorser();
5463    } else if (name.equals("relatedArtifact")) {
5464      return addRelatedArtifact();
5465    } else if (name.equals("library")) {
5466      throw new FHIRException("Cannot call addChild on a singleton property Measure.library");
5467    } else if (name.equals("disclaimer")) {
5468      throw new FHIRException("Cannot call addChild on a singleton property Measure.disclaimer");
5469    } else if (name.equals("scoring")) {
5470      this.scoring = new CodeableConcept();
5471      return this.scoring;
5472    } else if (name.equals("compositeScoring")) {
5473      this.compositeScoring = new CodeableConcept();
5474      return this.compositeScoring;
5475    } else if (name.equals("type")) {
5476      return addType();
5477    } else if (name.equals("riskAdjustment")) {
5478      throw new FHIRException("Cannot call addChild on a singleton property Measure.riskAdjustment");
5479    } else if (name.equals("rateAggregation")) {
5480      throw new FHIRException("Cannot call addChild on a singleton property Measure.rateAggregation");
5481    } else if (name.equals("rationale")) {
5482      throw new FHIRException("Cannot call addChild on a singleton property Measure.rationale");
5483    } else if (name.equals("clinicalRecommendationStatement")) {
5484      throw new FHIRException("Cannot call addChild on a singleton property Measure.clinicalRecommendationStatement");
5485    } else if (name.equals("improvementNotation")) {
5486      this.improvementNotation = new CodeableConcept();
5487      return this.improvementNotation;
5488    } else if (name.equals("definition")) {
5489      throw new FHIRException("Cannot call addChild on a singleton property Measure.definition");
5490    } else if (name.equals("guidance")) {
5491      throw new FHIRException("Cannot call addChild on a singleton property Measure.guidance");
5492    } else if (name.equals("group")) {
5493      return addGroup();
5494    } else if (name.equals("supplementalData")) {
5495      return addSupplementalData();
5496    } else
5497      return super.addChild(name);
5498  }
5499
5500  public String fhirType() {
5501    return "Measure";
5502
5503  }
5504
5505  public Measure copy() {
5506    Measure dst = new Measure();
5507    copyValues(dst);
5508    return dst;
5509  }
5510
5511  public void copyValues(Measure dst) {
5512    super.copyValues(dst);
5513    dst.url = url == null ? null : url.copy();
5514    if (identifier != null) {
5515      dst.identifier = new ArrayList<Identifier>();
5516      for (Identifier i : identifier)
5517        dst.identifier.add(i.copy());
5518    }
5519    ;
5520    dst.version = version == null ? null : version.copy();
5521    dst.name = name == null ? null : name.copy();
5522    dst.title = title == null ? null : title.copy();
5523    dst.subtitle = subtitle == null ? null : subtitle.copy();
5524    dst.status = status == null ? null : status.copy();
5525    dst.experimental = experimental == null ? null : experimental.copy();
5526    dst.subject = subject == null ? null : subject.copy();
5527    dst.date = date == null ? null : date.copy();
5528    dst.publisher = publisher == null ? null : publisher.copy();
5529    if (contact != null) {
5530      dst.contact = new ArrayList<ContactDetail>();
5531      for (ContactDetail i : contact)
5532        dst.contact.add(i.copy());
5533    }
5534    ;
5535    dst.description = description == null ? null : description.copy();
5536    if (useContext != null) {
5537      dst.useContext = new ArrayList<UsageContext>();
5538      for (UsageContext i : useContext)
5539        dst.useContext.add(i.copy());
5540    }
5541    ;
5542    if (jurisdiction != null) {
5543      dst.jurisdiction = new ArrayList<CodeableConcept>();
5544      for (CodeableConcept i : jurisdiction)
5545        dst.jurisdiction.add(i.copy());
5546    }
5547    ;
5548    dst.purpose = purpose == null ? null : purpose.copy();
5549    dst.usage = usage == null ? null : usage.copy();
5550    dst.copyright = copyright == null ? null : copyright.copy();
5551    dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
5552    dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
5553    dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
5554    if (topic != null) {
5555      dst.topic = new ArrayList<CodeableConcept>();
5556      for (CodeableConcept i : topic)
5557        dst.topic.add(i.copy());
5558    }
5559    ;
5560    if (author != null) {
5561      dst.author = new ArrayList<ContactDetail>();
5562      for (ContactDetail i : author)
5563        dst.author.add(i.copy());
5564    }
5565    ;
5566    if (editor != null) {
5567      dst.editor = new ArrayList<ContactDetail>();
5568      for (ContactDetail i : editor)
5569        dst.editor.add(i.copy());
5570    }
5571    ;
5572    if (reviewer != null) {
5573      dst.reviewer = new ArrayList<ContactDetail>();
5574      for (ContactDetail i : reviewer)
5575        dst.reviewer.add(i.copy());
5576    }
5577    ;
5578    if (endorser != null) {
5579      dst.endorser = new ArrayList<ContactDetail>();
5580      for (ContactDetail i : endorser)
5581        dst.endorser.add(i.copy());
5582    }
5583    ;
5584    if (relatedArtifact != null) {
5585      dst.relatedArtifact = new ArrayList<RelatedArtifact>();
5586      for (RelatedArtifact i : relatedArtifact)
5587        dst.relatedArtifact.add(i.copy());
5588    }
5589    ;
5590    if (library != null) {
5591      dst.library = new ArrayList<CanonicalType>();
5592      for (CanonicalType i : library)
5593        dst.library.add(i.copy());
5594    }
5595    ;
5596    dst.disclaimer = disclaimer == null ? null : disclaimer.copy();
5597    dst.scoring = scoring == null ? null : scoring.copy();
5598    dst.compositeScoring = compositeScoring == null ? null : compositeScoring.copy();
5599    if (type != null) {
5600      dst.type = new ArrayList<CodeableConcept>();
5601      for (CodeableConcept i : type)
5602        dst.type.add(i.copy());
5603    }
5604    ;
5605    dst.riskAdjustment = riskAdjustment == null ? null : riskAdjustment.copy();
5606    dst.rateAggregation = rateAggregation == null ? null : rateAggregation.copy();
5607    dst.rationale = rationale == null ? null : rationale.copy();
5608    dst.clinicalRecommendationStatement = clinicalRecommendationStatement == null ? null
5609        : clinicalRecommendationStatement.copy();
5610    dst.improvementNotation = improvementNotation == null ? null : improvementNotation.copy();
5611    if (definition != null) {
5612      dst.definition = new ArrayList<MarkdownType>();
5613      for (MarkdownType i : definition)
5614        dst.definition.add(i.copy());
5615    }
5616    ;
5617    dst.guidance = guidance == null ? null : guidance.copy();
5618    if (group != null) {
5619      dst.group = new ArrayList<MeasureGroupComponent>();
5620      for (MeasureGroupComponent i : group)
5621        dst.group.add(i.copy());
5622    }
5623    ;
5624    if (supplementalData != null) {
5625      dst.supplementalData = new ArrayList<MeasureSupplementalDataComponent>();
5626      for (MeasureSupplementalDataComponent i : supplementalData)
5627        dst.supplementalData.add(i.copy());
5628    }
5629    ;
5630  }
5631
5632  protected Measure typedCopy() {
5633    return copy();
5634  }
5635
5636  @Override
5637  public boolean equalsDeep(Base other_) {
5638    if (!super.equalsDeep(other_))
5639      return false;
5640    if (!(other_ instanceof Measure))
5641      return false;
5642    Measure o = (Measure) other_;
5643    return compareDeep(identifier, o.identifier, true) && compareDeep(subtitle, o.subtitle, true)
5644        && compareDeep(subject, o.subject, true) && compareDeep(purpose, o.purpose, true)
5645        && compareDeep(usage, o.usage, true) && compareDeep(copyright, o.copyright, true)
5646        && compareDeep(approvalDate, o.approvalDate, true) && compareDeep(lastReviewDate, o.lastReviewDate, true)
5647        && compareDeep(effectivePeriod, o.effectivePeriod, true) && compareDeep(topic, o.topic, true)
5648        && compareDeep(author, o.author, true) && compareDeep(editor, o.editor, true)
5649        && compareDeep(reviewer, o.reviewer, true) && compareDeep(endorser, o.endorser, true)
5650        && compareDeep(relatedArtifact, o.relatedArtifact, true) && compareDeep(library, o.library, true)
5651        && compareDeep(disclaimer, o.disclaimer, true) && compareDeep(scoring, o.scoring, true)
5652        && compareDeep(compositeScoring, o.compositeScoring, true) && compareDeep(type, o.type, true)
5653        && compareDeep(riskAdjustment, o.riskAdjustment, true) && compareDeep(rateAggregation, o.rateAggregation, true)
5654        && compareDeep(rationale, o.rationale, true)
5655        && compareDeep(clinicalRecommendationStatement, o.clinicalRecommendationStatement, true)
5656        && compareDeep(improvementNotation, o.improvementNotation, true) && compareDeep(definition, o.definition, true)
5657        && compareDeep(guidance, o.guidance, true) && compareDeep(group, o.group, true)
5658        && compareDeep(supplementalData, o.supplementalData, true);
5659  }
5660
5661  @Override
5662  public boolean equalsShallow(Base other_) {
5663    if (!super.equalsShallow(other_))
5664      return false;
5665    if (!(other_ instanceof Measure))
5666      return false;
5667    Measure o = (Measure) other_;
5668    return compareValues(subtitle, o.subtitle, true) && compareValues(purpose, o.purpose, true)
5669        && compareValues(usage, o.usage, true) && compareValues(copyright, o.copyright, true)
5670        && compareValues(approvalDate, o.approvalDate, true) && compareValues(lastReviewDate, o.lastReviewDate, true)
5671        && compareValues(disclaimer, o.disclaimer, true) && compareValues(riskAdjustment, o.riskAdjustment, true)
5672        && compareValues(rateAggregation, o.rateAggregation, true) && compareValues(rationale, o.rationale, true)
5673        && compareValues(clinicalRecommendationStatement, o.clinicalRecommendationStatement, true)
5674        && compareValues(definition, o.definition, true) && compareValues(guidance, o.guidance, true);
5675  }
5676
5677  public boolean isEmpty() {
5678    return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, subtitle, subject, purpose, usage,
5679        copyright, approvalDate, lastReviewDate, effectivePeriod, topic, author, editor, reviewer, endorser,
5680        relatedArtifact, library, disclaimer, scoring, compositeScoring, type, riskAdjustment, rateAggregation,
5681        rationale, clinicalRecommendationStatement, improvementNotation, definition, guidance, group, supplementalData);
5682  }
5683
5684  @Override
5685  public ResourceType getResourceType() {
5686    return ResourceType.Measure;
5687  }
5688
5689  /**
5690   * Search parameter: <b>date</b>
5691   * <p>
5692   * Description: <b>The measure publication date</b><br>
5693   * Type: <b>date</b><br>
5694   * Path: <b>Measure.date</b><br>
5695   * </p>
5696   */
5697  @SearchParamDefinition(name = "date", path = "Measure.date", description = "The measure publication date", type = "date")
5698  public static final String SP_DATE = "date";
5699  /**
5700   * <b>Fluent Client</b> search parameter constant for <b>date</b>
5701   * <p>
5702   * Description: <b>The measure publication date</b><br>
5703   * Type: <b>date</b><br>
5704   * Path: <b>Measure.date</b><br>
5705   * </p>
5706   */
5707  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(
5708      SP_DATE);
5709
5710  /**
5711   * Search parameter: <b>identifier</b>
5712   * <p>
5713   * Description: <b>External identifier for the measure</b><br>
5714   * Type: <b>token</b><br>
5715   * Path: <b>Measure.identifier</b><br>
5716   * </p>
5717   */
5718  @SearchParamDefinition(name = "identifier", path = "Measure.identifier", description = "External identifier for the measure", type = "token")
5719  public static final String SP_IDENTIFIER = "identifier";
5720  /**
5721   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
5722   * <p>
5723   * Description: <b>External identifier for the measure</b><br>
5724   * Type: <b>token</b><br>
5725   * Path: <b>Measure.identifier</b><br>
5726   * </p>
5727   */
5728  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(
5729      SP_IDENTIFIER);
5730
5731  /**
5732   * Search parameter: <b>successor</b>
5733   * <p>
5734   * Description: <b>What resource is being referenced</b><br>
5735   * Type: <b>reference</b><br>
5736   * Path: <b>Measure.relatedArtifact.resource</b><br>
5737   * </p>
5738   */
5739  @SearchParamDefinition(name = "successor", path = "Measure.relatedArtifact.where(type='successor').resource", description = "What resource is being referenced", type = "reference")
5740  public static final String SP_SUCCESSOR = "successor";
5741  /**
5742   * <b>Fluent Client</b> search parameter constant for <b>successor</b>
5743   * <p>
5744   * Description: <b>What resource is being referenced</b><br>
5745   * Type: <b>reference</b><br>
5746   * Path: <b>Measure.relatedArtifact.resource</b><br>
5747   * </p>
5748   */
5749  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUCCESSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
5750      SP_SUCCESSOR);
5751
5752  /**
5753   * Constant for fluent queries to be used to add include statements. Specifies
5754   * the path value of "<b>Measure:successor</b>".
5755   */
5756  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUCCESSOR = new ca.uhn.fhir.model.api.Include(
5757      "Measure:successor").toLocked();
5758
5759  /**
5760   * Search parameter: <b>context-type-value</b>
5761   * <p>
5762   * Description: <b>A use context type and value assigned to the measure</b><br>
5763   * Type: <b>composite</b><br>
5764   * Path: <b></b><br>
5765   * </p>
5766   */
5767  @SearchParamDefinition(name = "context-type-value", path = "Measure.useContext", description = "A use context type and value assigned to the measure", type = "composite", compositeOf = {
5768      "context-type", "context" })
5769  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
5770  /**
5771   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
5772   * <p>
5773   * Description: <b>A use context type and value assigned to the measure</b><br>
5774   * Type: <b>composite</b><br>
5775   * Path: <b></b><br>
5776   * </p>
5777   */
5778  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>(
5779      SP_CONTEXT_TYPE_VALUE);
5780
5781  /**
5782   * Search parameter: <b>jurisdiction</b>
5783   * <p>
5784   * Description: <b>Intended jurisdiction for the measure</b><br>
5785   * Type: <b>token</b><br>
5786   * Path: <b>Measure.jurisdiction</b><br>
5787   * </p>
5788   */
5789  @SearchParamDefinition(name = "jurisdiction", path = "Measure.jurisdiction", description = "Intended jurisdiction for the measure", type = "token")
5790  public static final String SP_JURISDICTION = "jurisdiction";
5791  /**
5792   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
5793   * <p>
5794   * Description: <b>Intended jurisdiction for the measure</b><br>
5795   * Type: <b>token</b><br>
5796   * Path: <b>Measure.jurisdiction</b><br>
5797   * </p>
5798   */
5799  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
5800      SP_JURISDICTION);
5801
5802  /**
5803   * Search parameter: <b>description</b>
5804   * <p>
5805   * Description: <b>The description of the measure</b><br>
5806   * Type: <b>string</b><br>
5807   * Path: <b>Measure.description</b><br>
5808   * </p>
5809   */
5810  @SearchParamDefinition(name = "description", path = "Measure.description", description = "The description of the measure", type = "string")
5811  public static final String SP_DESCRIPTION = "description";
5812  /**
5813   * <b>Fluent Client</b> search parameter constant for <b>description</b>
5814   * <p>
5815   * Description: <b>The description of the measure</b><br>
5816   * Type: <b>string</b><br>
5817   * Path: <b>Measure.description</b><br>
5818   * </p>
5819   */
5820  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(
5821      SP_DESCRIPTION);
5822
5823  /**
5824   * Search parameter: <b>derived-from</b>
5825   * <p>
5826   * Description: <b>What resource is being referenced</b><br>
5827   * Type: <b>reference</b><br>
5828   * Path: <b>Measure.relatedArtifact.resource</b><br>
5829   * </p>
5830   */
5831  @SearchParamDefinition(name = "derived-from", path = "Measure.relatedArtifact.where(type='derived-from').resource", description = "What resource is being referenced", type = "reference")
5832  public static final String SP_DERIVED_FROM = "derived-from";
5833  /**
5834   * <b>Fluent Client</b> search parameter constant for <b>derived-from</b>
5835   * <p>
5836   * Description: <b>What resource is being referenced</b><br>
5837   * Type: <b>reference</b><br>
5838   * Path: <b>Measure.relatedArtifact.resource</b><br>
5839   * </p>
5840   */
5841  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DERIVED_FROM = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
5842      SP_DERIVED_FROM);
5843
5844  /**
5845   * Constant for fluent queries to be used to add include statements. Specifies
5846   * the path value of "<b>Measure:derived-from</b>".
5847   */
5848  public static final ca.uhn.fhir.model.api.Include INCLUDE_DERIVED_FROM = new ca.uhn.fhir.model.api.Include(
5849      "Measure:derived-from").toLocked();
5850
5851  /**
5852   * Search parameter: <b>context-type</b>
5853   * <p>
5854   * Description: <b>A type of use context assigned to the measure</b><br>
5855   * Type: <b>token</b><br>
5856   * Path: <b>Measure.useContext.code</b><br>
5857   * </p>
5858   */
5859  @SearchParamDefinition(name = "context-type", path = "Measure.useContext.code", description = "A type of use context assigned to the measure", type = "token")
5860  public static final String SP_CONTEXT_TYPE = "context-type";
5861  /**
5862   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
5863   * <p>
5864   * Description: <b>A type of use context assigned to the measure</b><br>
5865   * Type: <b>token</b><br>
5866   * Path: <b>Measure.useContext.code</b><br>
5867   * </p>
5868   */
5869  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(
5870      SP_CONTEXT_TYPE);
5871
5872  /**
5873   * Search parameter: <b>predecessor</b>
5874   * <p>
5875   * Description: <b>What resource is being referenced</b><br>
5876   * Type: <b>reference</b><br>
5877   * Path: <b>Measure.relatedArtifact.resource</b><br>
5878   * </p>
5879   */
5880  @SearchParamDefinition(name = "predecessor", path = "Measure.relatedArtifact.where(type='predecessor').resource", description = "What resource is being referenced", type = "reference")
5881  public static final String SP_PREDECESSOR = "predecessor";
5882  /**
5883   * <b>Fluent Client</b> search parameter constant for <b>predecessor</b>
5884   * <p>
5885   * Description: <b>What resource is being referenced</b><br>
5886   * Type: <b>reference</b><br>
5887   * Path: <b>Measure.relatedArtifact.resource</b><br>
5888   * </p>
5889   */
5890  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PREDECESSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
5891      SP_PREDECESSOR);
5892
5893  /**
5894   * Constant for fluent queries to be used to add include statements. Specifies
5895   * the path value of "<b>Measure:predecessor</b>".
5896   */
5897  public static final ca.uhn.fhir.model.api.Include INCLUDE_PREDECESSOR = new ca.uhn.fhir.model.api.Include(
5898      "Measure:predecessor").toLocked();
5899
5900  /**
5901   * Search parameter: <b>title</b>
5902   * <p>
5903   * Description: <b>The human-friendly name of the measure</b><br>
5904   * Type: <b>string</b><br>
5905   * Path: <b>Measure.title</b><br>
5906   * </p>
5907   */
5908  @SearchParamDefinition(name = "title", path = "Measure.title", description = "The human-friendly name of the measure", type = "string")
5909  public static final String SP_TITLE = "title";
5910  /**
5911   * <b>Fluent Client</b> search parameter constant for <b>title</b>
5912   * <p>
5913   * Description: <b>The human-friendly name of the measure</b><br>
5914   * Type: <b>string</b><br>
5915   * Path: <b>Measure.title</b><br>
5916   * </p>
5917   */
5918  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(
5919      SP_TITLE);
5920
5921  /**
5922   * Search parameter: <b>composed-of</b>
5923   * <p>
5924   * Description: <b>What resource is being referenced</b><br>
5925   * Type: <b>reference</b><br>
5926   * Path: <b>Measure.relatedArtifact.resource</b><br>
5927   * </p>
5928   */
5929  @SearchParamDefinition(name = "composed-of", path = "Measure.relatedArtifact.where(type='composed-of').resource", description = "What resource is being referenced", type = "reference")
5930  public static final String SP_COMPOSED_OF = "composed-of";
5931  /**
5932   * <b>Fluent Client</b> search parameter constant for <b>composed-of</b>
5933   * <p>
5934   * Description: <b>What resource is being referenced</b><br>
5935   * Type: <b>reference</b><br>
5936   * Path: <b>Measure.relatedArtifact.resource</b><br>
5937   * </p>
5938   */
5939  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam COMPOSED_OF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
5940      SP_COMPOSED_OF);
5941
5942  /**
5943   * Constant for fluent queries to be used to add include statements. Specifies
5944   * the path value of "<b>Measure:composed-of</b>".
5945   */
5946  public static final ca.uhn.fhir.model.api.Include INCLUDE_COMPOSED_OF = new ca.uhn.fhir.model.api.Include(
5947      "Measure:composed-of").toLocked();
5948
5949  /**
5950   * Search parameter: <b>version</b>
5951   * <p>
5952   * Description: <b>The business version of the measure</b><br>
5953   * Type: <b>token</b><br>
5954   * Path: <b>Measure.version</b><br>
5955   * </p>
5956   */
5957  @SearchParamDefinition(name = "version", path = "Measure.version", description = "The business version of the measure", type = "token")
5958  public static final String SP_VERSION = "version";
5959  /**
5960   * <b>Fluent Client</b> search parameter constant for <b>version</b>
5961   * <p>
5962   * Description: <b>The business version of the measure</b><br>
5963   * Type: <b>token</b><br>
5964   * Path: <b>Measure.version</b><br>
5965   * </p>
5966   */
5967  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
5968      SP_VERSION);
5969
5970  /**
5971   * Search parameter: <b>url</b>
5972   * <p>
5973   * Description: <b>The uri that identifies the measure</b><br>
5974   * Type: <b>uri</b><br>
5975   * Path: <b>Measure.url</b><br>
5976   * </p>
5977   */
5978  @SearchParamDefinition(name = "url", path = "Measure.url", description = "The uri that identifies the measure", type = "uri")
5979  public static final String SP_URL = "url";
5980  /**
5981   * <b>Fluent Client</b> search parameter constant for <b>url</b>
5982   * <p>
5983   * Description: <b>The uri that identifies the measure</b><br>
5984   * Type: <b>uri</b><br>
5985   * Path: <b>Measure.url</b><br>
5986   * </p>
5987   */
5988  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
5989
5990  /**
5991   * Search parameter: <b>context-quantity</b>
5992   * <p>
5993   * Description: <b>A quantity- or range-valued use context assigned to the
5994   * measure</b><br>
5995   * Type: <b>quantity</b><br>
5996   * Path: <b>Measure.useContext.valueQuantity,
5997   * Measure.useContext.valueRange</b><br>
5998   * </p>
5999   */
6000  @SearchParamDefinition(name = "context-quantity", path = "(Measure.useContext.value as Quantity) | (Measure.useContext.value as Range)", description = "A quantity- or range-valued use context assigned to the measure", type = "quantity")
6001  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
6002  /**
6003   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
6004   * <p>
6005   * Description: <b>A quantity- or range-valued use context assigned to the
6006   * measure</b><br>
6007   * Type: <b>quantity</b><br>
6008   * Path: <b>Measure.useContext.valueQuantity,
6009   * Measure.useContext.valueRange</b><br>
6010   * </p>
6011   */
6012  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(
6013      SP_CONTEXT_QUANTITY);
6014
6015  /**
6016   * Search parameter: <b>effective</b>
6017   * <p>
6018   * Description: <b>The time during which the measure is intended to be in
6019   * use</b><br>
6020   * Type: <b>date</b><br>
6021   * Path: <b>Measure.effectivePeriod</b><br>
6022   * </p>
6023   */
6024  @SearchParamDefinition(name = "effective", path = "Measure.effectivePeriod", description = "The time during which the measure is intended to be in use", type = "date")
6025  public static final String SP_EFFECTIVE = "effective";
6026  /**
6027   * <b>Fluent Client</b> search parameter constant for <b>effective</b>
6028   * <p>
6029   * Description: <b>The time during which the measure is intended to be in
6030   * use</b><br>
6031   * Type: <b>date</b><br>
6032   * Path: <b>Measure.effectivePeriod</b><br>
6033   * </p>
6034   */
6035  public static final ca.uhn.fhir.rest.gclient.DateClientParam EFFECTIVE = new ca.uhn.fhir.rest.gclient.DateClientParam(
6036      SP_EFFECTIVE);
6037
6038  /**
6039   * Search parameter: <b>depends-on</b>
6040   * <p>
6041   * Description: <b>What resource is being referenced</b><br>
6042   * Type: <b>reference</b><br>
6043   * Path: <b>Measure.relatedArtifact.resource, Measure.library</b><br>
6044   * </p>
6045   */
6046  @SearchParamDefinition(name = "depends-on", path = "Measure.relatedArtifact.where(type='depends-on').resource | Measure.library", description = "What resource is being referenced", type = "reference")
6047  public static final String SP_DEPENDS_ON = "depends-on";
6048  /**
6049   * <b>Fluent Client</b> search parameter constant for <b>depends-on</b>
6050   * <p>
6051   * Description: <b>What resource is being referenced</b><br>
6052   * Type: <b>reference</b><br>
6053   * Path: <b>Measure.relatedArtifact.resource, Measure.library</b><br>
6054   * </p>
6055   */
6056  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DEPENDS_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
6057      SP_DEPENDS_ON);
6058
6059  /**
6060   * Constant for fluent queries to be used to add include statements. Specifies
6061   * the path value of "<b>Measure:depends-on</b>".
6062   */
6063  public static final ca.uhn.fhir.model.api.Include INCLUDE_DEPENDS_ON = new ca.uhn.fhir.model.api.Include(
6064      "Measure:depends-on").toLocked();
6065
6066  /**
6067   * Search parameter: <b>name</b>
6068   * <p>
6069   * Description: <b>Computationally friendly name of the measure</b><br>
6070   * Type: <b>string</b><br>
6071   * Path: <b>Measure.name</b><br>
6072   * </p>
6073   */
6074  @SearchParamDefinition(name = "name", path = "Measure.name", description = "Computationally friendly name of the measure", type = "string")
6075  public static final String SP_NAME = "name";
6076  /**
6077   * <b>Fluent Client</b> search parameter constant for <b>name</b>
6078   * <p>
6079   * Description: <b>Computationally friendly name of the measure</b><br>
6080   * Type: <b>string</b><br>
6081   * Path: <b>Measure.name</b><br>
6082   * </p>
6083   */
6084  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(
6085      SP_NAME);
6086
6087  /**
6088   * Search parameter: <b>context</b>
6089   * <p>
6090   * Description: <b>A use context assigned to the measure</b><br>
6091   * Type: <b>token</b><br>
6092   * Path: <b>Measure.useContext.valueCodeableConcept</b><br>
6093   * </p>
6094   */
6095  @SearchParamDefinition(name = "context", path = "(Measure.useContext.value as CodeableConcept)", description = "A use context assigned to the measure", type = "token")
6096  public static final String SP_CONTEXT = "context";
6097  /**
6098   * <b>Fluent Client</b> search parameter constant for <b>context</b>
6099   * <p>
6100   * Description: <b>A use context assigned to the measure</b><br>
6101   * Type: <b>token</b><br>
6102   * Path: <b>Measure.useContext.valueCodeableConcept</b><br>
6103   * </p>
6104   */
6105  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(
6106      SP_CONTEXT);
6107
6108  /**
6109   * Search parameter: <b>publisher</b>
6110   * <p>
6111   * Description: <b>Name of the publisher of the measure</b><br>
6112   * Type: <b>string</b><br>
6113   * Path: <b>Measure.publisher</b><br>
6114   * </p>
6115   */
6116  @SearchParamDefinition(name = "publisher", path = "Measure.publisher", description = "Name of the publisher of the measure", type = "string")
6117  public static final String SP_PUBLISHER = "publisher";
6118  /**
6119   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
6120   * <p>
6121   * Description: <b>Name of the publisher of the measure</b><br>
6122   * Type: <b>string</b><br>
6123   * Path: <b>Measure.publisher</b><br>
6124   * </p>
6125   */
6126  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(
6127      SP_PUBLISHER);
6128
6129  /**
6130   * Search parameter: <b>topic</b>
6131   * <p>
6132   * Description: <b>Topics associated with the measure</b><br>
6133   * Type: <b>token</b><br>
6134   * Path: <b>Measure.topic</b><br>
6135   * </p>
6136   */
6137  @SearchParamDefinition(name = "topic", path = "Measure.topic", description = "Topics associated with the measure", type = "token")
6138  public static final String SP_TOPIC = "topic";
6139  /**
6140   * <b>Fluent Client</b> search parameter constant for <b>topic</b>
6141   * <p>
6142   * Description: <b>Topics associated with the measure</b><br>
6143   * Type: <b>token</b><br>
6144   * Path: <b>Measure.topic</b><br>
6145   * </p>
6146   */
6147  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TOPIC = new ca.uhn.fhir.rest.gclient.TokenClientParam(
6148      SP_TOPIC);
6149
6150  /**
6151   * Search parameter: <b>context-type-quantity</b>
6152   * <p>
6153   * Description: <b>A use context type and quantity- or range-based value
6154   * assigned to the measure</b><br>
6155   * Type: <b>composite</b><br>
6156   * Path: <b></b><br>
6157   * </p>
6158   */
6159  @SearchParamDefinition(name = "context-type-quantity", path = "Measure.useContext", description = "A use context type and quantity- or range-based value assigned to the measure", type = "composite", compositeOf = {
6160      "context-type", "context-quantity" })
6161  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
6162  /**
6163   * <b>Fluent Client</b> search parameter constant for
6164   * <b>context-type-quantity</b>
6165   * <p>
6166   * Description: <b>A use context type and quantity- or range-based value
6167   * assigned to the measure</b><br>
6168   * Type: <b>composite</b><br>
6169   * Path: <b></b><br>
6170   * </p>
6171   */
6172  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>(
6173      SP_CONTEXT_TYPE_QUANTITY);
6174
6175  /**
6176   * Search parameter: <b>status</b>
6177   * <p>
6178   * Description: <b>The current status of the measure</b><br>
6179   * Type: <b>token</b><br>
6180   * Path: <b>Measure.status</b><br>
6181   * </p>
6182   */
6183  @SearchParamDefinition(name = "status", path = "Measure.status", description = "The current status of the measure", type = "token")
6184  public static final String SP_STATUS = "status";
6185  /**
6186   * <b>Fluent Client</b> search parameter constant for <b>status</b>
6187   * <p>
6188   * Description: <b>The current status of the measure</b><br>
6189   * Type: <b>token</b><br>
6190   * Path: <b>Measure.status</b><br>
6191   * </p>
6192   */
6193  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(
6194      SP_STATUS);
6195
6196}