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