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