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