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