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