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