001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Sat, Nov 5, 2022 10:47+1100 for FHIR v5.0.0-ballot
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * The MeasureReport resource contains the results of the calculation of a measure; and optionally a reference to the resources involved in that calculation.
052 */
053@ResourceDef(name="MeasureReport", profile="http://hl7.org/fhir/StructureDefinition/MeasureReport")
054public class MeasureReport extends DomainResource {
055
056    public enum MeasureReportStatus {
057        /**
058         * The report is complete and ready for use.
059         */
060        COMPLETE, 
061        /**
062         * The report is currently being generated.
063         */
064        PENDING, 
065        /**
066         * An error occurred attempting to generate the report.
067         */
068        ERROR, 
069        /**
070         * added to help the parsers with the generic types
071         */
072        NULL;
073        public static MeasureReportStatus fromCode(String codeString) throws FHIRException {
074            if (codeString == null || "".equals(codeString))
075                return null;
076        if ("complete".equals(codeString))
077          return COMPLETE;
078        if ("pending".equals(codeString))
079          return PENDING;
080        if ("error".equals(codeString))
081          return ERROR;
082        if (Configuration.isAcceptInvalidEnums())
083          return null;
084        else
085          throw new FHIRException("Unknown MeasureReportStatus code '"+codeString+"'");
086        }
087        public String toCode() {
088          switch (this) {
089            case COMPLETE: return "complete";
090            case PENDING: return "pending";
091            case ERROR: return "error";
092            case NULL: return null;
093            default: return "?";
094          }
095        }
096        public String getSystem() {
097          switch (this) {
098            case COMPLETE: return "http://hl7.org/fhir/measure-report-status";
099            case PENDING: return "http://hl7.org/fhir/measure-report-status";
100            case ERROR: return "http://hl7.org/fhir/measure-report-status";
101            case NULL: return null;
102            default: return "?";
103          }
104        }
105        public String getDefinition() {
106          switch (this) {
107            case COMPLETE: return "The report is complete and ready for use.";
108            case PENDING: return "The report is currently being generated.";
109            case ERROR: return "An error occurred attempting to generate the report.";
110            case NULL: return null;
111            default: return "?";
112          }
113        }
114        public String getDisplay() {
115          switch (this) {
116            case COMPLETE: return "Complete";
117            case PENDING: return "Pending";
118            case ERROR: return "Error";
119            case NULL: return null;
120            default: return "?";
121          }
122        }
123    }
124
125  public static class MeasureReportStatusEnumFactory implements EnumFactory<MeasureReportStatus> {
126    public MeasureReportStatus fromCode(String codeString) throws IllegalArgumentException {
127      if (codeString == null || "".equals(codeString))
128            if (codeString == null || "".equals(codeString))
129                return null;
130        if ("complete".equals(codeString))
131          return MeasureReportStatus.COMPLETE;
132        if ("pending".equals(codeString))
133          return MeasureReportStatus.PENDING;
134        if ("error".equals(codeString))
135          return MeasureReportStatus.ERROR;
136        throw new IllegalArgumentException("Unknown MeasureReportStatus code '"+codeString+"'");
137        }
138        public Enumeration<MeasureReportStatus> fromType(Base code) throws FHIRException {
139          if (code == null)
140            return null;
141          if (code.isEmpty())
142            return new Enumeration<MeasureReportStatus>(this);
143          String codeString = ((PrimitiveType) code).asStringValue();
144          if (codeString == null || "".equals(codeString))
145            return null;
146        if ("complete".equals(codeString))
147          return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.COMPLETE);
148        if ("pending".equals(codeString))
149          return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.PENDING);
150        if ("error".equals(codeString))
151          return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.ERROR);
152        throw new FHIRException("Unknown MeasureReportStatus code '"+codeString+"'");
153        }
154    public String toCode(MeasureReportStatus code) {
155      if (code == MeasureReportStatus.COMPLETE)
156        return "complete";
157      if (code == MeasureReportStatus.PENDING)
158        return "pending";
159      if (code == MeasureReportStatus.ERROR)
160        return "error";
161      return "?";
162      }
163    public String toSystem(MeasureReportStatus code) {
164      return code.getSystem();
165      }
166    }
167
168    public enum MeasureReportType {
169        /**
170         * An individual report that provides information on the performance for a given measure with respect to a single subject.
171         */
172        INDIVIDUAL, 
173        /**
174         * A subject list report that includes a listing of subjects that satisfied each population criteria in the measure.
175         */
176        SUBJECTLIST, 
177        /**
178         * A summary report that returns the number of members in each population criteria for the measure.
179         */
180        SUMMARY, 
181        /**
182         * A data exchange report that contains data-of-interest for the measure (i.e. data that is needed to calculate the measure)
183         */
184        DATAEXCHANGE, 
185        /**
186         * added to help the parsers with the generic types
187         */
188        NULL;
189        public static MeasureReportType fromCode(String codeString) throws FHIRException {
190            if (codeString == null || "".equals(codeString))
191                return null;
192        if ("individual".equals(codeString))
193          return INDIVIDUAL;
194        if ("subject-list".equals(codeString))
195          return SUBJECTLIST;
196        if ("summary".equals(codeString))
197          return SUMMARY;
198        if ("data-exchange".equals(codeString))
199          return DATAEXCHANGE;
200        if (Configuration.isAcceptInvalidEnums())
201          return null;
202        else
203          throw new FHIRException("Unknown MeasureReportType code '"+codeString+"'");
204        }
205        public String toCode() {
206          switch (this) {
207            case INDIVIDUAL: return "individual";
208            case SUBJECTLIST: return "subject-list";
209            case SUMMARY: return "summary";
210            case DATAEXCHANGE: return "data-exchange";
211            case NULL: return null;
212            default: return "?";
213          }
214        }
215        public String getSystem() {
216          switch (this) {
217            case INDIVIDUAL: return "http://hl7.org/fhir/measure-report-type";
218            case SUBJECTLIST: return "http://hl7.org/fhir/measure-report-type";
219            case SUMMARY: return "http://hl7.org/fhir/measure-report-type";
220            case DATAEXCHANGE: return "http://hl7.org/fhir/measure-report-type";
221            case NULL: return null;
222            default: return "?";
223          }
224        }
225        public String getDefinition() {
226          switch (this) {
227            case INDIVIDUAL: return "An individual report that provides information on the performance for a given measure with respect to a single subject.";
228            case SUBJECTLIST: return "A subject list report that includes a listing of subjects that satisfied each population criteria in the measure.";
229            case SUMMARY: return "A summary report that returns the number of members in each population criteria for the measure.";
230            case DATAEXCHANGE: return "A data exchange report that contains data-of-interest for the measure (i.e. data that is needed to calculate the measure)";
231            case NULL: return null;
232            default: return "?";
233          }
234        }
235        public String getDisplay() {
236          switch (this) {
237            case INDIVIDUAL: return "Individual";
238            case SUBJECTLIST: return "Subject List";
239            case SUMMARY: return "Summary";
240            case DATAEXCHANGE: return "Data Exchange";
241            case NULL: return null;
242            default: return "?";
243          }
244        }
245    }
246
247  public static class MeasureReportTypeEnumFactory implements EnumFactory<MeasureReportType> {
248    public MeasureReportType fromCode(String codeString) throws IllegalArgumentException {
249      if (codeString == null || "".equals(codeString))
250            if (codeString == null || "".equals(codeString))
251                return null;
252        if ("individual".equals(codeString))
253          return MeasureReportType.INDIVIDUAL;
254        if ("subject-list".equals(codeString))
255          return MeasureReportType.SUBJECTLIST;
256        if ("summary".equals(codeString))
257          return MeasureReportType.SUMMARY;
258        if ("data-exchange".equals(codeString))
259          return MeasureReportType.DATAEXCHANGE;
260        throw new IllegalArgumentException("Unknown MeasureReportType code '"+codeString+"'");
261        }
262        public Enumeration<MeasureReportType> fromType(Base code) throws FHIRException {
263          if (code == null)
264            return null;
265          if (code.isEmpty())
266            return new Enumeration<MeasureReportType>(this);
267          String codeString = ((PrimitiveType) code).asStringValue();
268          if (codeString == null || "".equals(codeString))
269            return null;
270        if ("individual".equals(codeString))
271          return new Enumeration<MeasureReportType>(this, MeasureReportType.INDIVIDUAL);
272        if ("subject-list".equals(codeString))
273          return new Enumeration<MeasureReportType>(this, MeasureReportType.SUBJECTLIST);
274        if ("summary".equals(codeString))
275          return new Enumeration<MeasureReportType>(this, MeasureReportType.SUMMARY);
276        if ("data-exchange".equals(codeString))
277          return new Enumeration<MeasureReportType>(this, MeasureReportType.DATAEXCHANGE);
278        throw new FHIRException("Unknown MeasureReportType code '"+codeString+"'");
279        }
280    public String toCode(MeasureReportType code) {
281      if (code == MeasureReportType.INDIVIDUAL)
282        return "individual";
283      if (code == MeasureReportType.SUBJECTLIST)
284        return "subject-list";
285      if (code == MeasureReportType.SUMMARY)
286        return "summary";
287      if (code == MeasureReportType.DATAEXCHANGE)
288        return "data-exchange";
289      return "?";
290      }
291    public String toSystem(MeasureReportType code) {
292      return code.getSystem();
293      }
294    }
295
296    public enum SubmitDataUpdateType {
297        /**
298         * In contrast to the Snapshot Update, the FHIR Parameters resource used in a Submit Data or the Collect Data scenario contains only the new and updated DEQM and QI Core Profiles since the last transaction. If the Consumer supports incremental updates, the contents of the updated payload updates the previous payload data.
299         */
300        INCREMENTAL, 
301        /**
302         * In contrast to the Incremental Update, the FHIR Parameters resource used in a Submit Data or the Collect Data scenario contains all the DEQM and QI Core Profiles for each transaction.  If the Consumer supports snapshot updates, the contents of the updated payload entirely replaces the previous payload
303         */
304        SNAPSHOT, 
305        /**
306         * added to help the parsers with the generic types
307         */
308        NULL;
309        public static SubmitDataUpdateType fromCode(String codeString) throws FHIRException {
310            if (codeString == null || "".equals(codeString))
311                return null;
312        if ("incremental".equals(codeString))
313          return INCREMENTAL;
314        if ("snapshot".equals(codeString))
315          return SNAPSHOT;
316        if (Configuration.isAcceptInvalidEnums())
317          return null;
318        else
319          throw new FHIRException("Unknown SubmitDataUpdateType code '"+codeString+"'");
320        }
321        public String toCode() {
322          switch (this) {
323            case INCREMENTAL: return "incremental";
324            case SNAPSHOT: return "snapshot";
325            case NULL: return null;
326            default: return "?";
327          }
328        }
329        public String getSystem() {
330          switch (this) {
331            case INCREMENTAL: return "http://hl7.org/fhir/CodeSystem/submit-data-update-type";
332            case SNAPSHOT: return "http://hl7.org/fhir/CodeSystem/submit-data-update-type";
333            case NULL: return null;
334            default: return "?";
335          }
336        }
337        public String getDefinition() {
338          switch (this) {
339            case INCREMENTAL: return "In contrast to the Snapshot Update, the FHIR Parameters resource used in a Submit Data or the Collect Data scenario contains only the new and updated DEQM and QI Core Profiles since the last transaction. If the Consumer supports incremental updates, the contents of the updated payload updates the previous payload data.";
340            case SNAPSHOT: return "In contrast to the Incremental Update, the FHIR Parameters resource used in a Submit Data or the Collect Data scenario contains all the DEQM and QI Core Profiles for each transaction.  If the Consumer supports snapshot updates, the contents of the updated payload entirely replaces the previous payload";
341            case NULL: return null;
342            default: return "?";
343          }
344        }
345        public String getDisplay() {
346          switch (this) {
347            case INCREMENTAL: return "Incremental";
348            case SNAPSHOT: return "Snapshot";
349            case NULL: return null;
350            default: return "?";
351          }
352        }
353    }
354
355  public static class SubmitDataUpdateTypeEnumFactory implements EnumFactory<SubmitDataUpdateType> {
356    public SubmitDataUpdateType fromCode(String codeString) throws IllegalArgumentException {
357      if (codeString == null || "".equals(codeString))
358            if (codeString == null || "".equals(codeString))
359                return null;
360        if ("incremental".equals(codeString))
361          return SubmitDataUpdateType.INCREMENTAL;
362        if ("snapshot".equals(codeString))
363          return SubmitDataUpdateType.SNAPSHOT;
364        throw new IllegalArgumentException("Unknown SubmitDataUpdateType code '"+codeString+"'");
365        }
366        public Enumeration<SubmitDataUpdateType> fromType(Base code) throws FHIRException {
367          if (code == null)
368            return null;
369          if (code.isEmpty())
370            return new Enumeration<SubmitDataUpdateType>(this);
371          String codeString = ((PrimitiveType) code).asStringValue();
372          if (codeString == null || "".equals(codeString))
373            return null;
374        if ("incremental".equals(codeString))
375          return new Enumeration<SubmitDataUpdateType>(this, SubmitDataUpdateType.INCREMENTAL);
376        if ("snapshot".equals(codeString))
377          return new Enumeration<SubmitDataUpdateType>(this, SubmitDataUpdateType.SNAPSHOT);
378        throw new FHIRException("Unknown SubmitDataUpdateType code '"+codeString+"'");
379        }
380    public String toCode(SubmitDataUpdateType code) {
381      if (code == SubmitDataUpdateType.INCREMENTAL)
382        return "incremental";
383      if (code == SubmitDataUpdateType.SNAPSHOT)
384        return "snapshot";
385      return "?";
386      }
387    public String toSystem(SubmitDataUpdateType code) {
388      return code.getSystem();
389      }
390    }
391
392    @Block()
393    public static class MeasureReportGroupComponent extends BackboneElement implements IBaseBackboneElement {
394        /**
395         * The meaning of the population group as defined in the measure definition.
396         */
397        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
398        @Description(shortDefinition="Meaning of the group", formalDefinition="The meaning of the population group as defined in the measure definition." )
399        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-group-example")
400        protected CodeableConcept code;
401
402        /**
403         * The populations that make up the population group, one for each type of population appropriate for the measure.
404         */
405        @Child(name = "population", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
406        @Description(shortDefinition="The populations in the group", formalDefinition="The populations that make up the population group, one for each type of population appropriate for the measure." )
407        protected List<MeasureReportGroupPopulationComponent> population;
408
409        /**
410         * The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.
411         */
412        @Child(name = "measureScore", type = {Quantity.class, DateTimeType.class, CodeableConcept.class, Period.class, Range.class, Duration.class}, order=3, min=0, max=1, modifier=false, summary=true)
413        @Description(shortDefinition="What score this group achieved", formalDefinition="The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group." )
414        protected DataType measureScore;
415
416        /**
417         * When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.
418         */
419        @Child(name = "stratifier", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
420        @Description(shortDefinition="Stratification results", formalDefinition="When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure." )
421        protected List<MeasureReportGroupStratifierComponent> stratifier;
422
423        private static final long serialVersionUID = -631288064L;
424
425    /**
426     * Constructor
427     */
428      public MeasureReportGroupComponent() {
429        super();
430      }
431
432        /**
433         * @return {@link #code} (The meaning of the population group as defined in the measure definition.)
434         */
435        public CodeableConcept getCode() { 
436          if (this.code == null)
437            if (Configuration.errorOnAutoCreate())
438              throw new Error("Attempt to auto-create MeasureReportGroupComponent.code");
439            else if (Configuration.doAutoCreate())
440              this.code = new CodeableConcept(); // cc
441          return this.code;
442        }
443
444        public boolean hasCode() { 
445          return this.code != null && !this.code.isEmpty();
446        }
447
448        /**
449         * @param value {@link #code} (The meaning of the population group as defined in the measure definition.)
450         */
451        public MeasureReportGroupComponent setCode(CodeableConcept value) { 
452          this.code = value;
453          return this;
454        }
455
456        /**
457         * @return {@link #population} (The populations that make up the population group, one for each type of population appropriate for the measure.)
458         */
459        public List<MeasureReportGroupPopulationComponent> getPopulation() { 
460          if (this.population == null)
461            this.population = new ArrayList<MeasureReportGroupPopulationComponent>();
462          return this.population;
463        }
464
465        /**
466         * @return Returns a reference to <code>this</code> for easy method chaining
467         */
468        public MeasureReportGroupComponent setPopulation(List<MeasureReportGroupPopulationComponent> thePopulation) { 
469          this.population = thePopulation;
470          return this;
471        }
472
473        public boolean hasPopulation() { 
474          if (this.population == null)
475            return false;
476          for (MeasureReportGroupPopulationComponent item : this.population)
477            if (!item.isEmpty())
478              return true;
479          return false;
480        }
481
482        public MeasureReportGroupPopulationComponent addPopulation() { //3
483          MeasureReportGroupPopulationComponent t = new MeasureReportGroupPopulationComponent();
484          if (this.population == null)
485            this.population = new ArrayList<MeasureReportGroupPopulationComponent>();
486          this.population.add(t);
487          return t;
488        }
489
490        public MeasureReportGroupComponent addPopulation(MeasureReportGroupPopulationComponent t) { //3
491          if (t == null)
492            return this;
493          if (this.population == null)
494            this.population = new ArrayList<MeasureReportGroupPopulationComponent>();
495          this.population.add(t);
496          return this;
497        }
498
499        /**
500         * @return The first repetition of repeating field {@link #population}, creating it if it does not already exist {3}
501         */
502        public MeasureReportGroupPopulationComponent getPopulationFirstRep() { 
503          if (getPopulation().isEmpty()) {
504            addPopulation();
505          }
506          return getPopulation().get(0);
507        }
508
509        /**
510         * @return {@link #measureScore} (The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.)
511         */
512        public DataType getMeasureScore() { 
513          return this.measureScore;
514        }
515
516        /**
517         * @return {@link #measureScore} (The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.)
518         */
519        public Quantity getMeasureScoreQuantity() throws FHIRException { 
520          if (this.measureScore == null)
521            this.measureScore = new Quantity();
522          if (!(this.measureScore instanceof Quantity))
523            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.measureScore.getClass().getName()+" was encountered");
524          return (Quantity) this.measureScore;
525        }
526
527        public boolean hasMeasureScoreQuantity() { 
528          return this != null && this.measureScore instanceof Quantity;
529        }
530
531        /**
532         * @return {@link #measureScore} (The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.)
533         */
534        public DateTimeType getMeasureScoreDateTimeType() throws FHIRException { 
535          if (this.measureScore == null)
536            this.measureScore = new DateTimeType();
537          if (!(this.measureScore instanceof DateTimeType))
538            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.measureScore.getClass().getName()+" was encountered");
539          return (DateTimeType) this.measureScore;
540        }
541
542        public boolean hasMeasureScoreDateTimeType() { 
543          return this != null && this.measureScore instanceof DateTimeType;
544        }
545
546        /**
547         * @return {@link #measureScore} (The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.)
548         */
549        public CodeableConcept getMeasureScoreCodeableConcept() throws FHIRException { 
550          if (this.measureScore == null)
551            this.measureScore = new CodeableConcept();
552          if (!(this.measureScore instanceof CodeableConcept))
553            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.measureScore.getClass().getName()+" was encountered");
554          return (CodeableConcept) this.measureScore;
555        }
556
557        public boolean hasMeasureScoreCodeableConcept() { 
558          return this != null && this.measureScore instanceof CodeableConcept;
559        }
560
561        /**
562         * @return {@link #measureScore} (The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.)
563         */
564        public Period getMeasureScorePeriod() throws FHIRException { 
565          if (this.measureScore == null)
566            this.measureScore = new Period();
567          if (!(this.measureScore instanceof Period))
568            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.measureScore.getClass().getName()+" was encountered");
569          return (Period) this.measureScore;
570        }
571
572        public boolean hasMeasureScorePeriod() { 
573          return this != null && this.measureScore instanceof Period;
574        }
575
576        /**
577         * @return {@link #measureScore} (The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.)
578         */
579        public Range getMeasureScoreRange() throws FHIRException { 
580          if (this.measureScore == null)
581            this.measureScore = new Range();
582          if (!(this.measureScore instanceof Range))
583            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.measureScore.getClass().getName()+" was encountered");
584          return (Range) this.measureScore;
585        }
586
587        public boolean hasMeasureScoreRange() { 
588          return this != null && this.measureScore instanceof Range;
589        }
590
591        /**
592         * @return {@link #measureScore} (The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.)
593         */
594        public Duration getMeasureScoreDuration() throws FHIRException { 
595          if (this.measureScore == null)
596            this.measureScore = new Duration();
597          if (!(this.measureScore instanceof Duration))
598            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.measureScore.getClass().getName()+" was encountered");
599          return (Duration) this.measureScore;
600        }
601
602        public boolean hasMeasureScoreDuration() { 
603          return this != null && this.measureScore instanceof Duration;
604        }
605
606        public boolean hasMeasureScore() { 
607          return this.measureScore != null && !this.measureScore.isEmpty();
608        }
609
610        /**
611         * @param value {@link #measureScore} (The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.)
612         */
613        public MeasureReportGroupComponent setMeasureScore(DataType value) { 
614          if (value != null && !(value instanceof Quantity || value instanceof DateTimeType || value instanceof CodeableConcept || value instanceof Period || value instanceof Range || value instanceof Duration))
615            throw new Error("Not the right type for MeasureReport.group.measureScore[x]: "+value.fhirType());
616          this.measureScore = value;
617          return this;
618        }
619
620        /**
621         * @return {@link #stratifier} (When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.)
622         */
623        public List<MeasureReportGroupStratifierComponent> getStratifier() { 
624          if (this.stratifier == null)
625            this.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
626          return this.stratifier;
627        }
628
629        /**
630         * @return Returns a reference to <code>this</code> for easy method chaining
631         */
632        public MeasureReportGroupComponent setStratifier(List<MeasureReportGroupStratifierComponent> theStratifier) { 
633          this.stratifier = theStratifier;
634          return this;
635        }
636
637        public boolean hasStratifier() { 
638          if (this.stratifier == null)
639            return false;
640          for (MeasureReportGroupStratifierComponent item : this.stratifier)
641            if (!item.isEmpty())
642              return true;
643          return false;
644        }
645
646        public MeasureReportGroupStratifierComponent addStratifier() { //3
647          MeasureReportGroupStratifierComponent t = new MeasureReportGroupStratifierComponent();
648          if (this.stratifier == null)
649            this.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
650          this.stratifier.add(t);
651          return t;
652        }
653
654        public MeasureReportGroupComponent addStratifier(MeasureReportGroupStratifierComponent t) { //3
655          if (t == null)
656            return this;
657          if (this.stratifier == null)
658            this.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
659          this.stratifier.add(t);
660          return this;
661        }
662
663        /**
664         * @return The first repetition of repeating field {@link #stratifier}, creating it if it does not already exist {3}
665         */
666        public MeasureReportGroupStratifierComponent getStratifierFirstRep() { 
667          if (getStratifier().isEmpty()) {
668            addStratifier();
669          }
670          return getStratifier().get(0);
671        }
672
673        protected void listChildren(List<Property> children) {
674          super.listChildren(children);
675          children.add(new Property("code", "CodeableConcept", "The meaning of the population group as defined in the measure definition.", 0, 1, code));
676          children.add(new Property("population", "", "The populations that make up the population group, one for each type of population appropriate for the measure.", 0, java.lang.Integer.MAX_VALUE, population));
677          children.add(new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore));
678          children.add(new Property("stratifier", "", "When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.", 0, java.lang.Integer.MAX_VALUE, stratifier));
679        }
680
681        @Override
682        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
683          switch (_hash) {
684          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The meaning of the population group as defined in the measure definition.", 0, 1, code);
685          case -2023558323: /*population*/  return new Property("population", "", "The populations that make up the population group, one for each type of population appropriate for the measure.", 0, java.lang.Integer.MAX_VALUE, population);
686          case 1854115884: /*measureScore[x]*/  return new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
687          case -386313260: /*measureScore*/  return new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
688          case -1880815489: /*measureScoreQuantity*/  return new Property("measureScore[x]", "Quantity", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
689          case 1196938127: /*measureScoreDateTime*/  return new Property("measureScore[x]", "dateTime", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
690          case -1193234131: /*measureScoreCodeableConcept*/  return new Property("measureScore[x]", "CodeableConcept", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
691          case -1939831115: /*measureScorePeriod*/  return new Property("measureScore[x]", "Period", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
692          case -615040567: /*measureScoreRange*/  return new Property("measureScore[x]", "Range", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
693          case 1707143560: /*measureScoreDuration*/  return new Property("measureScore[x]", "Duration", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
694          case 90983669: /*stratifier*/  return new Property("stratifier", "", "When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.", 0, java.lang.Integer.MAX_VALUE, stratifier);
695          default: return super.getNamedProperty(_hash, _name, _checkValid);
696          }
697
698        }
699
700      @Override
701      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
702        switch (hash) {
703        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
704        case -2023558323: /*population*/ return this.population == null ? new Base[0] : this.population.toArray(new Base[this.population.size()]); // MeasureReportGroupPopulationComponent
705        case -386313260: /*measureScore*/ return this.measureScore == null ? new Base[0] : new Base[] {this.measureScore}; // DataType
706        case 90983669: /*stratifier*/ return this.stratifier == null ? new Base[0] : this.stratifier.toArray(new Base[this.stratifier.size()]); // MeasureReportGroupStratifierComponent
707        default: return super.getProperty(hash, name, checkValid);
708        }
709
710      }
711
712      @Override
713      public Base setProperty(int hash, String name, Base value) throws FHIRException {
714        switch (hash) {
715        case 3059181: // code
716          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
717          return value;
718        case -2023558323: // population
719          this.getPopulation().add((MeasureReportGroupPopulationComponent) value); // MeasureReportGroupPopulationComponent
720          return value;
721        case -386313260: // measureScore
722          this.measureScore = TypeConvertor.castToType(value); // DataType
723          return value;
724        case 90983669: // stratifier
725          this.getStratifier().add((MeasureReportGroupStratifierComponent) value); // MeasureReportGroupStratifierComponent
726          return value;
727        default: return super.setProperty(hash, name, value);
728        }
729
730      }
731
732      @Override
733      public Base setProperty(String name, Base value) throws FHIRException {
734        if (name.equals("code")) {
735          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
736        } else if (name.equals("population")) {
737          this.getPopulation().add((MeasureReportGroupPopulationComponent) value);
738        } else if (name.equals("measureScore[x]")) {
739          this.measureScore = TypeConvertor.castToType(value); // DataType
740        } else if (name.equals("stratifier")) {
741          this.getStratifier().add((MeasureReportGroupStratifierComponent) value);
742        } else
743          return super.setProperty(name, value);
744        return value;
745      }
746
747      @Override
748      public Base makeProperty(int hash, String name) throws FHIRException {
749        switch (hash) {
750        case 3059181:  return getCode();
751        case -2023558323:  return addPopulation(); 
752        case 1854115884:  return getMeasureScore();
753        case -386313260:  return getMeasureScore();
754        case 90983669:  return addStratifier(); 
755        default: return super.makeProperty(hash, name);
756        }
757
758      }
759
760      @Override
761      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
762        switch (hash) {
763        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
764        case -2023558323: /*population*/ return new String[] {};
765        case -386313260: /*measureScore*/ return new String[] {"Quantity", "dateTime", "CodeableConcept", "Period", "Range", "Duration"};
766        case 90983669: /*stratifier*/ return new String[] {};
767        default: return super.getTypesForProperty(hash, name);
768        }
769
770      }
771
772      @Override
773      public Base addChild(String name) throws FHIRException {
774        if (name.equals("code")) {
775          this.code = new CodeableConcept();
776          return this.code;
777        }
778        else if (name.equals("population")) {
779          return addPopulation();
780        }
781        else if (name.equals("measureScoreQuantity")) {
782          this.measureScore = new Quantity();
783          return this.measureScore;
784        }
785        else if (name.equals("measureScoreDateTime")) {
786          this.measureScore = new DateTimeType();
787          return this.measureScore;
788        }
789        else if (name.equals("measureScoreCodeableConcept")) {
790          this.measureScore = new CodeableConcept();
791          return this.measureScore;
792        }
793        else if (name.equals("measureScorePeriod")) {
794          this.measureScore = new Period();
795          return this.measureScore;
796        }
797        else if (name.equals("measureScoreRange")) {
798          this.measureScore = new Range();
799          return this.measureScore;
800        }
801        else if (name.equals("measureScoreDuration")) {
802          this.measureScore = new Duration();
803          return this.measureScore;
804        }
805        else if (name.equals("stratifier")) {
806          return addStratifier();
807        }
808        else
809          return super.addChild(name);
810      }
811
812      public MeasureReportGroupComponent copy() {
813        MeasureReportGroupComponent dst = new MeasureReportGroupComponent();
814        copyValues(dst);
815        return dst;
816      }
817
818      public void copyValues(MeasureReportGroupComponent dst) {
819        super.copyValues(dst);
820        dst.code = code == null ? null : code.copy();
821        if (population != null) {
822          dst.population = new ArrayList<MeasureReportGroupPopulationComponent>();
823          for (MeasureReportGroupPopulationComponent i : population)
824            dst.population.add(i.copy());
825        };
826        dst.measureScore = measureScore == null ? null : measureScore.copy();
827        if (stratifier != null) {
828          dst.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
829          for (MeasureReportGroupStratifierComponent i : stratifier)
830            dst.stratifier.add(i.copy());
831        };
832      }
833
834      @Override
835      public boolean equalsDeep(Base other_) {
836        if (!super.equalsDeep(other_))
837          return false;
838        if (!(other_ instanceof MeasureReportGroupComponent))
839          return false;
840        MeasureReportGroupComponent o = (MeasureReportGroupComponent) other_;
841        return compareDeep(code, o.code, true) && compareDeep(population, o.population, true) && compareDeep(measureScore, o.measureScore, true)
842           && compareDeep(stratifier, o.stratifier, true);
843      }
844
845      @Override
846      public boolean equalsShallow(Base other_) {
847        if (!super.equalsShallow(other_))
848          return false;
849        if (!(other_ instanceof MeasureReportGroupComponent))
850          return false;
851        MeasureReportGroupComponent o = (MeasureReportGroupComponent) other_;
852        return true;
853      }
854
855      public boolean isEmpty() {
856        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, population, measureScore
857          , stratifier);
858      }
859
860  public String fhirType() {
861    return "MeasureReport.group";
862
863  }
864
865  }
866
867    @Block()
868    public static class MeasureReportGroupPopulationComponent extends BackboneElement implements IBaseBackboneElement {
869        /**
870         * The type of the population.
871         */
872        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
873        @Description(shortDefinition="initial-population | numerator | numerator-exclusion | denominator | denominator-exclusion | denominator-exception | measure-population | measure-population-exclusion | measure-observation", formalDefinition="The type of the population." )
874        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-population")
875        protected CodeableConcept code;
876
877        /**
878         * The number of members of the population.
879         */
880        @Child(name = "count", type = {IntegerType.class}, order=2, min=0, max=1, modifier=false, summary=false)
881        @Description(shortDefinition="Size of the population", formalDefinition="The number of members of the population." )
882        protected IntegerType count;
883
884        /**
885         * This element refers to a List of subject level MeasureReport resources, one for each subject in this population.
886         */
887        @Child(name = "subjectResults", type = {ListResource.class}, order=3, min=0, max=1, modifier=false, summary=false)
888        @Description(shortDefinition="For subject-list reports, the subject results in this population", formalDefinition="This element refers to a List of subject level MeasureReport resources, one for each subject in this population." )
889        protected Reference subjectResults;
890
891        private static final long serialVersionUID = 1086153898L;
892
893    /**
894     * Constructor
895     */
896      public MeasureReportGroupPopulationComponent() {
897        super();
898      }
899
900        /**
901         * @return {@link #code} (The type of the population.)
902         */
903        public CodeableConcept getCode() { 
904          if (this.code == null)
905            if (Configuration.errorOnAutoCreate())
906              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.code");
907            else if (Configuration.doAutoCreate())
908              this.code = new CodeableConcept(); // cc
909          return this.code;
910        }
911
912        public boolean hasCode() { 
913          return this.code != null && !this.code.isEmpty();
914        }
915
916        /**
917         * @param value {@link #code} (The type of the population.)
918         */
919        public MeasureReportGroupPopulationComponent setCode(CodeableConcept value) { 
920          this.code = value;
921          return this;
922        }
923
924        /**
925         * @return {@link #count} (The number of members of the population.). This is the underlying object with id, value and extensions. The accessor "getCount" gives direct access to the value
926         */
927        public IntegerType getCountElement() { 
928          if (this.count == null)
929            if (Configuration.errorOnAutoCreate())
930              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.count");
931            else if (Configuration.doAutoCreate())
932              this.count = new IntegerType(); // bb
933          return this.count;
934        }
935
936        public boolean hasCountElement() { 
937          return this.count != null && !this.count.isEmpty();
938        }
939
940        public boolean hasCount() { 
941          return this.count != null && !this.count.isEmpty();
942        }
943
944        /**
945         * @param value {@link #count} (The number of members of the population.). This is the underlying object with id, value and extensions. The accessor "getCount" gives direct access to the value
946         */
947        public MeasureReportGroupPopulationComponent setCountElement(IntegerType value) { 
948          this.count = value;
949          return this;
950        }
951
952        /**
953         * @return The number of members of the population.
954         */
955        public int getCount() { 
956          return this.count == null || this.count.isEmpty() ? 0 : this.count.getValue();
957        }
958
959        /**
960         * @param value The number of members of the population.
961         */
962        public MeasureReportGroupPopulationComponent setCount(int value) { 
963            if (this.count == null)
964              this.count = new IntegerType();
965            this.count.setValue(value);
966          return this;
967        }
968
969        /**
970         * @return {@link #subjectResults} (This element refers to a List of subject level MeasureReport resources, one for each subject in this population.)
971         */
972        public Reference getSubjectResults() { 
973          if (this.subjectResults == null)
974            if (Configuration.errorOnAutoCreate())
975              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.subjectResults");
976            else if (Configuration.doAutoCreate())
977              this.subjectResults = new Reference(); // cc
978          return this.subjectResults;
979        }
980
981        public boolean hasSubjectResults() { 
982          return this.subjectResults != null && !this.subjectResults.isEmpty();
983        }
984
985        /**
986         * @param value {@link #subjectResults} (This element refers to a List of subject level MeasureReport resources, one for each subject in this population.)
987         */
988        public MeasureReportGroupPopulationComponent setSubjectResults(Reference value) { 
989          this.subjectResults = value;
990          return this;
991        }
992
993        protected void listChildren(List<Property> children) {
994          super.listChildren(children);
995          children.add(new Property("code", "CodeableConcept", "The type of the population.", 0, 1, code));
996          children.add(new Property("count", "integer", "The number of members of the population.", 0, 1, count));
997          children.add(new Property("subjectResults", "Reference(List)", "This element refers to a List of subject level MeasureReport resources, one for each subject in this population.", 0, 1, subjectResults));
998        }
999
1000        @Override
1001        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1002          switch (_hash) {
1003          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The type of the population.", 0, 1, code);
1004          case 94851343: /*count*/  return new Property("count", "integer", "The number of members of the population.", 0, 1, count);
1005          case 2136184106: /*subjectResults*/  return new Property("subjectResults", "Reference(List)", "This element refers to a List of subject level MeasureReport resources, one for each subject in this population.", 0, 1, subjectResults);
1006          default: return super.getNamedProperty(_hash, _name, _checkValid);
1007          }
1008
1009        }
1010
1011      @Override
1012      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1013        switch (hash) {
1014        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1015        case 94851343: /*count*/ return this.count == null ? new Base[0] : new Base[] {this.count}; // IntegerType
1016        case 2136184106: /*subjectResults*/ return this.subjectResults == null ? new Base[0] : new Base[] {this.subjectResults}; // Reference
1017        default: return super.getProperty(hash, name, checkValid);
1018        }
1019
1020      }
1021
1022      @Override
1023      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1024        switch (hash) {
1025        case 3059181: // code
1026          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1027          return value;
1028        case 94851343: // count
1029          this.count = TypeConvertor.castToInteger(value); // IntegerType
1030          return value;
1031        case 2136184106: // subjectResults
1032          this.subjectResults = TypeConvertor.castToReference(value); // Reference
1033          return value;
1034        default: return super.setProperty(hash, name, value);
1035        }
1036
1037      }
1038
1039      @Override
1040      public Base setProperty(String name, Base value) throws FHIRException {
1041        if (name.equals("code")) {
1042          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1043        } else if (name.equals("count")) {
1044          this.count = TypeConvertor.castToInteger(value); // IntegerType
1045        } else if (name.equals("subjectResults")) {
1046          this.subjectResults = TypeConvertor.castToReference(value); // Reference
1047        } else
1048          return super.setProperty(name, value);
1049        return value;
1050      }
1051
1052      @Override
1053      public Base makeProperty(int hash, String name) throws FHIRException {
1054        switch (hash) {
1055        case 3059181:  return getCode();
1056        case 94851343:  return getCountElement();
1057        case 2136184106:  return getSubjectResults();
1058        default: return super.makeProperty(hash, name);
1059        }
1060
1061      }
1062
1063      @Override
1064      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1065        switch (hash) {
1066        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1067        case 94851343: /*count*/ return new String[] {"integer"};
1068        case 2136184106: /*subjectResults*/ return new String[] {"Reference"};
1069        default: return super.getTypesForProperty(hash, name);
1070        }
1071
1072      }
1073
1074      @Override
1075      public Base addChild(String name) throws FHIRException {
1076        if (name.equals("code")) {
1077          this.code = new CodeableConcept();
1078          return this.code;
1079        }
1080        else if (name.equals("count")) {
1081          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.group.population.count");
1082        }
1083        else if (name.equals("subjectResults")) {
1084          this.subjectResults = new Reference();
1085          return this.subjectResults;
1086        }
1087        else
1088          return super.addChild(name);
1089      }
1090
1091      public MeasureReportGroupPopulationComponent copy() {
1092        MeasureReportGroupPopulationComponent dst = new MeasureReportGroupPopulationComponent();
1093        copyValues(dst);
1094        return dst;
1095      }
1096
1097      public void copyValues(MeasureReportGroupPopulationComponent dst) {
1098        super.copyValues(dst);
1099        dst.code = code == null ? null : code.copy();
1100        dst.count = count == null ? null : count.copy();
1101        dst.subjectResults = subjectResults == null ? null : subjectResults.copy();
1102      }
1103
1104      @Override
1105      public boolean equalsDeep(Base other_) {
1106        if (!super.equalsDeep(other_))
1107          return false;
1108        if (!(other_ instanceof MeasureReportGroupPopulationComponent))
1109          return false;
1110        MeasureReportGroupPopulationComponent o = (MeasureReportGroupPopulationComponent) other_;
1111        return compareDeep(code, o.code, true) && compareDeep(count, o.count, true) && compareDeep(subjectResults, o.subjectResults, true)
1112          ;
1113      }
1114
1115      @Override
1116      public boolean equalsShallow(Base other_) {
1117        if (!super.equalsShallow(other_))
1118          return false;
1119        if (!(other_ instanceof MeasureReportGroupPopulationComponent))
1120          return false;
1121        MeasureReportGroupPopulationComponent o = (MeasureReportGroupPopulationComponent) other_;
1122        return compareValues(count, o.count, true);
1123      }
1124
1125      public boolean isEmpty() {
1126        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, count, subjectResults
1127          );
1128      }
1129
1130  public String fhirType() {
1131    return "MeasureReport.group.population";
1132
1133  }
1134
1135  }
1136
1137    @Block()
1138    public static class MeasureReportGroupStratifierComponent extends BackboneElement implements IBaseBackboneElement {
1139        /**
1140         * The meaning of this stratifier, as defined in the measure definition.
1141         */
1142        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
1143        @Description(shortDefinition="What stratifier of the group", formalDefinition="The meaning of this stratifier, as defined in the measure definition." )
1144        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-stratifier-example")
1145        protected CodeableConcept code;
1146
1147        /**
1148         * This element contains the results for a single stratum within the stratifier. For example, when stratifying on administrative gender, there will be four strata, one for each possible gender value.
1149         */
1150        @Child(name = "stratum", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1151        @Description(shortDefinition="Stratum results, one for each unique value, or set of values, in the stratifier, or stratifier components", formalDefinition="This element contains the results for a single stratum within the stratifier. For example, when stratifying on administrative gender, there will be four strata, one for each possible gender value." )
1152        protected List<StratifierGroupComponent> stratum;
1153
1154        private static final long serialVersionUID = 362479683L;
1155
1156    /**
1157     * Constructor
1158     */
1159      public MeasureReportGroupStratifierComponent() {
1160        super();
1161      }
1162
1163        /**
1164         * @return {@link #code} (The meaning of this stratifier, as defined in the measure definition.)
1165         */
1166        public CodeableConcept getCode() { 
1167          if (this.code == null)
1168            if (Configuration.errorOnAutoCreate())
1169              throw new Error("Attempt to auto-create MeasureReportGroupStratifierComponent.code");
1170            else if (Configuration.doAutoCreate())
1171              this.code = new CodeableConcept(); // cc
1172          return this.code;
1173        }
1174
1175        public boolean hasCode() { 
1176          return this.code != null && !this.code.isEmpty();
1177        }
1178
1179        /**
1180         * @param value {@link #code} (The meaning of this stratifier, as defined in the measure definition.)
1181         */
1182        public MeasureReportGroupStratifierComponent setCode(CodeableConcept value) { 
1183          this.code = value;
1184          return this;
1185        }
1186
1187        /**
1188         * @return {@link #stratum} (This element contains the results for a single stratum within the stratifier. For example, when stratifying on administrative gender, there will be four strata, one for each possible gender value.)
1189         */
1190        public List<StratifierGroupComponent> getStratum() { 
1191          if (this.stratum == null)
1192            this.stratum = new ArrayList<StratifierGroupComponent>();
1193          return this.stratum;
1194        }
1195
1196        /**
1197         * @return Returns a reference to <code>this</code> for easy method chaining
1198         */
1199        public MeasureReportGroupStratifierComponent setStratum(List<StratifierGroupComponent> theStratum) { 
1200          this.stratum = theStratum;
1201          return this;
1202        }
1203
1204        public boolean hasStratum() { 
1205          if (this.stratum == null)
1206            return false;
1207          for (StratifierGroupComponent item : this.stratum)
1208            if (!item.isEmpty())
1209              return true;
1210          return false;
1211        }
1212
1213        public StratifierGroupComponent addStratum() { //3
1214          StratifierGroupComponent t = new StratifierGroupComponent();
1215          if (this.stratum == null)
1216            this.stratum = new ArrayList<StratifierGroupComponent>();
1217          this.stratum.add(t);
1218          return t;
1219        }
1220
1221        public MeasureReportGroupStratifierComponent addStratum(StratifierGroupComponent t) { //3
1222          if (t == null)
1223            return this;
1224          if (this.stratum == null)
1225            this.stratum = new ArrayList<StratifierGroupComponent>();
1226          this.stratum.add(t);
1227          return this;
1228        }
1229
1230        /**
1231         * @return The first repetition of repeating field {@link #stratum}, creating it if it does not already exist {3}
1232         */
1233        public StratifierGroupComponent getStratumFirstRep() { 
1234          if (getStratum().isEmpty()) {
1235            addStratum();
1236          }
1237          return getStratum().get(0);
1238        }
1239
1240        protected void listChildren(List<Property> children) {
1241          super.listChildren(children);
1242          children.add(new Property("code", "CodeableConcept", "The meaning of this stratifier, as defined in the measure definition.", 0, 1, code));
1243          children.add(new Property("stratum", "", "This element contains the results for a single stratum within the stratifier. For example, when stratifying on administrative gender, there will be four strata, one for each possible gender value.", 0, java.lang.Integer.MAX_VALUE, stratum));
1244        }
1245
1246        @Override
1247        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1248          switch (_hash) {
1249          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The meaning of this stratifier, as defined in the measure definition.", 0, 1, code);
1250          case -1881991236: /*stratum*/  return new Property("stratum", "", "This element contains the results for a single stratum within the stratifier. For example, when stratifying on administrative gender, there will be four strata, one for each possible gender value.", 0, java.lang.Integer.MAX_VALUE, stratum);
1251          default: return super.getNamedProperty(_hash, _name, _checkValid);
1252          }
1253
1254        }
1255
1256      @Override
1257      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1258        switch (hash) {
1259        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1260        case -1881991236: /*stratum*/ return this.stratum == null ? new Base[0] : this.stratum.toArray(new Base[this.stratum.size()]); // StratifierGroupComponent
1261        default: return super.getProperty(hash, name, checkValid);
1262        }
1263
1264      }
1265
1266      @Override
1267      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1268        switch (hash) {
1269        case 3059181: // code
1270          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1271          return value;
1272        case -1881991236: // stratum
1273          this.getStratum().add((StratifierGroupComponent) value); // StratifierGroupComponent
1274          return value;
1275        default: return super.setProperty(hash, name, value);
1276        }
1277
1278      }
1279
1280      @Override
1281      public Base setProperty(String name, Base value) throws FHIRException {
1282        if (name.equals("code")) {
1283          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1284        } else if (name.equals("stratum")) {
1285          this.getStratum().add((StratifierGroupComponent) value);
1286        } else
1287          return super.setProperty(name, value);
1288        return value;
1289      }
1290
1291      @Override
1292      public Base makeProperty(int hash, String name) throws FHIRException {
1293        switch (hash) {
1294        case 3059181:  return getCode();
1295        case -1881991236:  return addStratum(); 
1296        default: return super.makeProperty(hash, name);
1297        }
1298
1299      }
1300
1301      @Override
1302      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1303        switch (hash) {
1304        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1305        case -1881991236: /*stratum*/ return new String[] {};
1306        default: return super.getTypesForProperty(hash, name);
1307        }
1308
1309      }
1310
1311      @Override
1312      public Base addChild(String name) throws FHIRException {
1313        if (name.equals("code")) {
1314          this.code = new CodeableConcept();
1315          return this.code;
1316        }
1317        else if (name.equals("stratum")) {
1318          return addStratum();
1319        }
1320        else
1321          return super.addChild(name);
1322      }
1323
1324      public MeasureReportGroupStratifierComponent copy() {
1325        MeasureReportGroupStratifierComponent dst = new MeasureReportGroupStratifierComponent();
1326        copyValues(dst);
1327        return dst;
1328      }
1329
1330      public void copyValues(MeasureReportGroupStratifierComponent dst) {
1331        super.copyValues(dst);
1332        dst.code = code == null ? null : code.copy();
1333        if (stratum != null) {
1334          dst.stratum = new ArrayList<StratifierGroupComponent>();
1335          for (StratifierGroupComponent i : stratum)
1336            dst.stratum.add(i.copy());
1337        };
1338      }
1339
1340      @Override
1341      public boolean equalsDeep(Base other_) {
1342        if (!super.equalsDeep(other_))
1343          return false;
1344        if (!(other_ instanceof MeasureReportGroupStratifierComponent))
1345          return false;
1346        MeasureReportGroupStratifierComponent o = (MeasureReportGroupStratifierComponent) other_;
1347        return compareDeep(code, o.code, true) && compareDeep(stratum, o.stratum, true);
1348      }
1349
1350      @Override
1351      public boolean equalsShallow(Base other_) {
1352        if (!super.equalsShallow(other_))
1353          return false;
1354        if (!(other_ instanceof MeasureReportGroupStratifierComponent))
1355          return false;
1356        MeasureReportGroupStratifierComponent o = (MeasureReportGroupStratifierComponent) other_;
1357        return true;
1358      }
1359
1360      public boolean isEmpty() {
1361        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, stratum);
1362      }
1363
1364  public String fhirType() {
1365    return "MeasureReport.group.stratifier";
1366
1367  }
1368
1369  }
1370
1371    @Block()
1372    public static class StratifierGroupComponent extends BackboneElement implements IBaseBackboneElement {
1373        /**
1374         * The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.
1375         */
1376        @Child(name = "value", type = {CodeableConcept.class, BooleanType.class, Quantity.class, Range.class, Reference.class}, order=1, min=0, max=1, modifier=false, summary=false)
1377        @Description(shortDefinition="The stratum value, e.g. male", formalDefinition="The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique." )
1378        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measurereport-stratifier-value-example")
1379        protected DataType value;
1380
1381        /**
1382         * A stratifier component value.
1383         */
1384        @Child(name = "component", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1385        @Description(shortDefinition="Stratifier component values", formalDefinition="A stratifier component value." )
1386        protected List<StratifierGroupComponentComponent> component;
1387
1388        /**
1389         * The populations that make up the stratum, one for each type of population appropriate to the measure.
1390         */
1391        @Child(name = "population", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1392        @Description(shortDefinition="Population results in this stratum", formalDefinition="The populations that make up the stratum, one for each type of population appropriate to the measure." )
1393        protected List<StratifierGroupPopulationComponent> population;
1394
1395        /**
1396         * The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.
1397         */
1398        @Child(name = "measureScore", type = {Quantity.class, DateTimeType.class, CodeableConcept.class, Period.class, Range.class, Duration.class}, order=4, min=0, max=1, modifier=false, summary=false)
1399        @Description(shortDefinition="What score this stratum achieved", formalDefinition="The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum." )
1400        protected DataType measureScore;
1401
1402        private static final long serialVersionUID = -1713783491L;
1403
1404    /**
1405     * Constructor
1406     */
1407      public StratifierGroupComponent() {
1408        super();
1409      }
1410
1411        /**
1412         * @return {@link #value} (The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.)
1413         */
1414        public DataType getValue() { 
1415          return this.value;
1416        }
1417
1418        /**
1419         * @return {@link #value} (The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.)
1420         */
1421        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
1422          if (this.value == null)
1423            this.value = new CodeableConcept();
1424          if (!(this.value instanceof CodeableConcept))
1425            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
1426          return (CodeableConcept) this.value;
1427        }
1428
1429        public boolean hasValueCodeableConcept() { 
1430          return this != null && this.value instanceof CodeableConcept;
1431        }
1432
1433        /**
1434         * @return {@link #value} (The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.)
1435         */
1436        public BooleanType getValueBooleanType() throws FHIRException { 
1437          if (this.value == null)
1438            this.value = new BooleanType();
1439          if (!(this.value instanceof BooleanType))
1440            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
1441          return (BooleanType) this.value;
1442        }
1443
1444        public boolean hasValueBooleanType() { 
1445          return this != null && this.value instanceof BooleanType;
1446        }
1447
1448        /**
1449         * @return {@link #value} (The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.)
1450         */
1451        public Quantity getValueQuantity() throws FHIRException { 
1452          if (this.value == null)
1453            this.value = new Quantity();
1454          if (!(this.value instanceof Quantity))
1455            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
1456          return (Quantity) this.value;
1457        }
1458
1459        public boolean hasValueQuantity() { 
1460          return this != null && this.value instanceof Quantity;
1461        }
1462
1463        /**
1464         * @return {@link #value} (The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.)
1465         */
1466        public Range getValueRange() throws FHIRException { 
1467          if (this.value == null)
1468            this.value = new Range();
1469          if (!(this.value instanceof Range))
1470            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
1471          return (Range) this.value;
1472        }
1473
1474        public boolean hasValueRange() { 
1475          return this != null && this.value instanceof Range;
1476        }
1477
1478        /**
1479         * @return {@link #value} (The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.)
1480         */
1481        public Reference getValueReference() throws FHIRException { 
1482          if (this.value == null)
1483            this.value = new Reference();
1484          if (!(this.value instanceof Reference))
1485            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
1486          return (Reference) this.value;
1487        }
1488
1489        public boolean hasValueReference() { 
1490          return this != null && this.value instanceof Reference;
1491        }
1492
1493        public boolean hasValue() { 
1494          return this.value != null && !this.value.isEmpty();
1495        }
1496
1497        /**
1498         * @param value {@link #value} (The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.)
1499         */
1500        public StratifierGroupComponent setValue(DataType value) { 
1501          if (value != null && !(value instanceof CodeableConcept || value instanceof BooleanType || value instanceof Quantity || value instanceof Range || value instanceof Reference))
1502            throw new Error("Not the right type for MeasureReport.group.stratifier.stratum.value[x]: "+value.fhirType());
1503          this.value = value;
1504          return this;
1505        }
1506
1507        /**
1508         * @return {@link #component} (A stratifier component value.)
1509         */
1510        public List<StratifierGroupComponentComponent> getComponent() { 
1511          if (this.component == null)
1512            this.component = new ArrayList<StratifierGroupComponentComponent>();
1513          return this.component;
1514        }
1515
1516        /**
1517         * @return Returns a reference to <code>this</code> for easy method chaining
1518         */
1519        public StratifierGroupComponent setComponent(List<StratifierGroupComponentComponent> theComponent) { 
1520          this.component = theComponent;
1521          return this;
1522        }
1523
1524        public boolean hasComponent() { 
1525          if (this.component == null)
1526            return false;
1527          for (StratifierGroupComponentComponent item : this.component)
1528            if (!item.isEmpty())
1529              return true;
1530          return false;
1531        }
1532
1533        public StratifierGroupComponentComponent addComponent() { //3
1534          StratifierGroupComponentComponent t = new StratifierGroupComponentComponent();
1535          if (this.component == null)
1536            this.component = new ArrayList<StratifierGroupComponentComponent>();
1537          this.component.add(t);
1538          return t;
1539        }
1540
1541        public StratifierGroupComponent addComponent(StratifierGroupComponentComponent t) { //3
1542          if (t == null)
1543            return this;
1544          if (this.component == null)
1545            this.component = new ArrayList<StratifierGroupComponentComponent>();
1546          this.component.add(t);
1547          return this;
1548        }
1549
1550        /**
1551         * @return The first repetition of repeating field {@link #component}, creating it if it does not already exist {3}
1552         */
1553        public StratifierGroupComponentComponent getComponentFirstRep() { 
1554          if (getComponent().isEmpty()) {
1555            addComponent();
1556          }
1557          return getComponent().get(0);
1558        }
1559
1560        /**
1561         * @return {@link #population} (The populations that make up the stratum, one for each type of population appropriate to the measure.)
1562         */
1563        public List<StratifierGroupPopulationComponent> getPopulation() { 
1564          if (this.population == null)
1565            this.population = new ArrayList<StratifierGroupPopulationComponent>();
1566          return this.population;
1567        }
1568
1569        /**
1570         * @return Returns a reference to <code>this</code> for easy method chaining
1571         */
1572        public StratifierGroupComponent setPopulation(List<StratifierGroupPopulationComponent> thePopulation) { 
1573          this.population = thePopulation;
1574          return this;
1575        }
1576
1577        public boolean hasPopulation() { 
1578          if (this.population == null)
1579            return false;
1580          for (StratifierGroupPopulationComponent item : this.population)
1581            if (!item.isEmpty())
1582              return true;
1583          return false;
1584        }
1585
1586        public StratifierGroupPopulationComponent addPopulation() { //3
1587          StratifierGroupPopulationComponent t = new StratifierGroupPopulationComponent();
1588          if (this.population == null)
1589            this.population = new ArrayList<StratifierGroupPopulationComponent>();
1590          this.population.add(t);
1591          return t;
1592        }
1593
1594        public StratifierGroupComponent addPopulation(StratifierGroupPopulationComponent t) { //3
1595          if (t == null)
1596            return this;
1597          if (this.population == null)
1598            this.population = new ArrayList<StratifierGroupPopulationComponent>();
1599          this.population.add(t);
1600          return this;
1601        }
1602
1603        /**
1604         * @return The first repetition of repeating field {@link #population}, creating it if it does not already exist {3}
1605         */
1606        public StratifierGroupPopulationComponent getPopulationFirstRep() { 
1607          if (getPopulation().isEmpty()) {
1608            addPopulation();
1609          }
1610          return getPopulation().get(0);
1611        }
1612
1613        /**
1614         * @return {@link #measureScore} (The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.)
1615         */
1616        public DataType getMeasureScore() { 
1617          return this.measureScore;
1618        }
1619
1620        /**
1621         * @return {@link #measureScore} (The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.)
1622         */
1623        public Quantity getMeasureScoreQuantity() throws FHIRException { 
1624          if (this.measureScore == null)
1625            this.measureScore = new Quantity();
1626          if (!(this.measureScore instanceof Quantity))
1627            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.measureScore.getClass().getName()+" was encountered");
1628          return (Quantity) this.measureScore;
1629        }
1630
1631        public boolean hasMeasureScoreQuantity() { 
1632          return this != null && this.measureScore instanceof Quantity;
1633        }
1634
1635        /**
1636         * @return {@link #measureScore} (The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.)
1637         */
1638        public DateTimeType getMeasureScoreDateTimeType() throws FHIRException { 
1639          if (this.measureScore == null)
1640            this.measureScore = new DateTimeType();
1641          if (!(this.measureScore instanceof DateTimeType))
1642            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.measureScore.getClass().getName()+" was encountered");
1643          return (DateTimeType) this.measureScore;
1644        }
1645
1646        public boolean hasMeasureScoreDateTimeType() { 
1647          return this != null && this.measureScore instanceof DateTimeType;
1648        }
1649
1650        /**
1651         * @return {@link #measureScore} (The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.)
1652         */
1653        public CodeableConcept getMeasureScoreCodeableConcept() throws FHIRException { 
1654          if (this.measureScore == null)
1655            this.measureScore = new CodeableConcept();
1656          if (!(this.measureScore instanceof CodeableConcept))
1657            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.measureScore.getClass().getName()+" was encountered");
1658          return (CodeableConcept) this.measureScore;
1659        }
1660
1661        public boolean hasMeasureScoreCodeableConcept() { 
1662          return this != null && this.measureScore instanceof CodeableConcept;
1663        }
1664
1665        /**
1666         * @return {@link #measureScore} (The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.)
1667         */
1668        public Period getMeasureScorePeriod() throws FHIRException { 
1669          if (this.measureScore == null)
1670            this.measureScore = new Period();
1671          if (!(this.measureScore instanceof Period))
1672            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.measureScore.getClass().getName()+" was encountered");
1673          return (Period) this.measureScore;
1674        }
1675
1676        public boolean hasMeasureScorePeriod() { 
1677          return this != null && this.measureScore instanceof Period;
1678        }
1679
1680        /**
1681         * @return {@link #measureScore} (The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.)
1682         */
1683        public Range getMeasureScoreRange() throws FHIRException { 
1684          if (this.measureScore == null)
1685            this.measureScore = new Range();
1686          if (!(this.measureScore instanceof Range))
1687            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.measureScore.getClass().getName()+" was encountered");
1688          return (Range) this.measureScore;
1689        }
1690
1691        public boolean hasMeasureScoreRange() { 
1692          return this != null && this.measureScore instanceof Range;
1693        }
1694
1695        /**
1696         * @return {@link #measureScore} (The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.)
1697         */
1698        public Duration getMeasureScoreDuration() throws FHIRException { 
1699          if (this.measureScore == null)
1700            this.measureScore = new Duration();
1701          if (!(this.measureScore instanceof Duration))
1702            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.measureScore.getClass().getName()+" was encountered");
1703          return (Duration) this.measureScore;
1704        }
1705
1706        public boolean hasMeasureScoreDuration() { 
1707          return this != null && this.measureScore instanceof Duration;
1708        }
1709
1710        public boolean hasMeasureScore() { 
1711          return this.measureScore != null && !this.measureScore.isEmpty();
1712        }
1713
1714        /**
1715         * @param value {@link #measureScore} (The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.)
1716         */
1717        public StratifierGroupComponent setMeasureScore(DataType value) { 
1718          if (value != null && !(value instanceof Quantity || value instanceof DateTimeType || value instanceof CodeableConcept || value instanceof Period || value instanceof Range || value instanceof Duration))
1719            throw new Error("Not the right type for MeasureReport.group.stratifier.stratum.measureScore[x]: "+value.fhirType());
1720          this.measureScore = value;
1721          return this;
1722        }
1723
1724        protected void listChildren(List<Property> children) {
1725          super.listChildren(children);
1726          children.add(new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value));
1727          children.add(new Property("component", "", "A stratifier component value.", 0, java.lang.Integer.MAX_VALUE, component));
1728          children.add(new Property("population", "", "The populations that make up the stratum, one for each type of population appropriate to the measure.", 0, java.lang.Integer.MAX_VALUE, population));
1729          children.add(new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore));
1730        }
1731
1732        @Override
1733        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1734          switch (_hash) {
1735          case -1410166417: /*value[x]*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
1736          case 111972721: /*value*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
1737          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
1738          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
1739          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
1740          case 2030761548: /*valueRange*/  return new Property("value[x]", "Range", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
1741          case 1755241690: /*valueReference*/  return new Property("value[x]", "Reference", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
1742          case -1399907075: /*component*/  return new Property("component", "", "A stratifier component value.", 0, java.lang.Integer.MAX_VALUE, component);
1743          case -2023558323: /*population*/  return new Property("population", "", "The populations that make up the stratum, one for each type of population appropriate to the measure.", 0, java.lang.Integer.MAX_VALUE, population);
1744          case 1854115884: /*measureScore[x]*/  return new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
1745          case -386313260: /*measureScore*/  return new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
1746          case -1880815489: /*measureScoreQuantity*/  return new Property("measureScore[x]", "Quantity", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
1747          case 1196938127: /*measureScoreDateTime*/  return new Property("measureScore[x]", "dateTime", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
1748          case -1193234131: /*measureScoreCodeableConcept*/  return new Property("measureScore[x]", "CodeableConcept", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
1749          case -1939831115: /*measureScorePeriod*/  return new Property("measureScore[x]", "Period", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
1750          case -615040567: /*measureScoreRange*/  return new Property("measureScore[x]", "Range", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
1751          case 1707143560: /*measureScoreDuration*/  return new Property("measureScore[x]", "Duration", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
1752          default: return super.getNamedProperty(_hash, _name, _checkValid);
1753          }
1754
1755        }
1756
1757      @Override
1758      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1759        switch (hash) {
1760        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
1761        case -1399907075: /*component*/ return this.component == null ? new Base[0] : this.component.toArray(new Base[this.component.size()]); // StratifierGroupComponentComponent
1762        case -2023558323: /*population*/ return this.population == null ? new Base[0] : this.population.toArray(new Base[this.population.size()]); // StratifierGroupPopulationComponent
1763        case -386313260: /*measureScore*/ return this.measureScore == null ? new Base[0] : new Base[] {this.measureScore}; // DataType
1764        default: return super.getProperty(hash, name, checkValid);
1765        }
1766
1767      }
1768
1769      @Override
1770      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1771        switch (hash) {
1772        case 111972721: // value
1773          this.value = TypeConvertor.castToType(value); // DataType
1774          return value;
1775        case -1399907075: // component
1776          this.getComponent().add((StratifierGroupComponentComponent) value); // StratifierGroupComponentComponent
1777          return value;
1778        case -2023558323: // population
1779          this.getPopulation().add((StratifierGroupPopulationComponent) value); // StratifierGroupPopulationComponent
1780          return value;
1781        case -386313260: // measureScore
1782          this.measureScore = TypeConvertor.castToType(value); // DataType
1783          return value;
1784        default: return super.setProperty(hash, name, value);
1785        }
1786
1787      }
1788
1789      @Override
1790      public Base setProperty(String name, Base value) throws FHIRException {
1791        if (name.equals("value[x]")) {
1792          this.value = TypeConvertor.castToType(value); // DataType
1793        } else if (name.equals("component")) {
1794          this.getComponent().add((StratifierGroupComponentComponent) value);
1795        } else if (name.equals("population")) {
1796          this.getPopulation().add((StratifierGroupPopulationComponent) value);
1797        } else if (name.equals("measureScore[x]")) {
1798          this.measureScore = TypeConvertor.castToType(value); // DataType
1799        } else
1800          return super.setProperty(name, value);
1801        return value;
1802      }
1803
1804      @Override
1805      public Base makeProperty(int hash, String name) throws FHIRException {
1806        switch (hash) {
1807        case -1410166417:  return getValue();
1808        case 111972721:  return getValue();
1809        case -1399907075:  return addComponent(); 
1810        case -2023558323:  return addPopulation(); 
1811        case 1854115884:  return getMeasureScore();
1812        case -386313260:  return getMeasureScore();
1813        default: return super.makeProperty(hash, name);
1814        }
1815
1816      }
1817
1818      @Override
1819      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1820        switch (hash) {
1821        case 111972721: /*value*/ return new String[] {"CodeableConcept", "boolean", "Quantity", "Range", "Reference"};
1822        case -1399907075: /*component*/ return new String[] {};
1823        case -2023558323: /*population*/ return new String[] {};
1824        case -386313260: /*measureScore*/ return new String[] {"Quantity", "dateTime", "CodeableConcept", "Period", "Range", "Duration"};
1825        default: return super.getTypesForProperty(hash, name);
1826        }
1827
1828      }
1829
1830      @Override
1831      public Base addChild(String name) throws FHIRException {
1832        if (name.equals("valueCodeableConcept")) {
1833          this.value = new CodeableConcept();
1834          return this.value;
1835        }
1836        else if (name.equals("valueBoolean")) {
1837          this.value = new BooleanType();
1838          return this.value;
1839        }
1840        else if (name.equals("valueQuantity")) {
1841          this.value = new Quantity();
1842          return this.value;
1843        }
1844        else if (name.equals("valueRange")) {
1845          this.value = new Range();
1846          return this.value;
1847        }
1848        else if (name.equals("valueReference")) {
1849          this.value = new Reference();
1850          return this.value;
1851        }
1852        else if (name.equals("component")) {
1853          return addComponent();
1854        }
1855        else if (name.equals("population")) {
1856          return addPopulation();
1857        }
1858        else if (name.equals("measureScoreQuantity")) {
1859          this.measureScore = new Quantity();
1860          return this.measureScore;
1861        }
1862        else if (name.equals("measureScoreDateTime")) {
1863          this.measureScore = new DateTimeType();
1864          return this.measureScore;
1865        }
1866        else if (name.equals("measureScoreCodeableConcept")) {
1867          this.measureScore = new CodeableConcept();
1868          return this.measureScore;
1869        }
1870        else if (name.equals("measureScorePeriod")) {
1871          this.measureScore = new Period();
1872          return this.measureScore;
1873        }
1874        else if (name.equals("measureScoreRange")) {
1875          this.measureScore = new Range();
1876          return this.measureScore;
1877        }
1878        else if (name.equals("measureScoreDuration")) {
1879          this.measureScore = new Duration();
1880          return this.measureScore;
1881        }
1882        else
1883          return super.addChild(name);
1884      }
1885
1886      public StratifierGroupComponent copy() {
1887        StratifierGroupComponent dst = new StratifierGroupComponent();
1888        copyValues(dst);
1889        return dst;
1890      }
1891
1892      public void copyValues(StratifierGroupComponent dst) {
1893        super.copyValues(dst);
1894        dst.value = value == null ? null : value.copy();
1895        if (component != null) {
1896          dst.component = new ArrayList<StratifierGroupComponentComponent>();
1897          for (StratifierGroupComponentComponent i : component)
1898            dst.component.add(i.copy());
1899        };
1900        if (population != null) {
1901          dst.population = new ArrayList<StratifierGroupPopulationComponent>();
1902          for (StratifierGroupPopulationComponent i : population)
1903            dst.population.add(i.copy());
1904        };
1905        dst.measureScore = measureScore == null ? null : measureScore.copy();
1906      }
1907
1908      @Override
1909      public boolean equalsDeep(Base other_) {
1910        if (!super.equalsDeep(other_))
1911          return false;
1912        if (!(other_ instanceof StratifierGroupComponent))
1913          return false;
1914        StratifierGroupComponent o = (StratifierGroupComponent) other_;
1915        return compareDeep(value, o.value, true) && compareDeep(component, o.component, true) && compareDeep(population, o.population, true)
1916           && compareDeep(measureScore, o.measureScore, true);
1917      }
1918
1919      @Override
1920      public boolean equalsShallow(Base other_) {
1921        if (!super.equalsShallow(other_))
1922          return false;
1923        if (!(other_ instanceof StratifierGroupComponent))
1924          return false;
1925        StratifierGroupComponent o = (StratifierGroupComponent) other_;
1926        return true;
1927      }
1928
1929      public boolean isEmpty() {
1930        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(value, component, population
1931          , measureScore);
1932      }
1933
1934  public String fhirType() {
1935    return "MeasureReport.group.stratifier.stratum";
1936
1937  }
1938
1939  }
1940
1941    @Block()
1942    public static class StratifierGroupComponentComponent extends BackboneElement implements IBaseBackboneElement {
1943        /**
1944         * The code for the stratum component value.
1945         */
1946        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
1947        @Description(shortDefinition="What stratifier component of the group", formalDefinition="The code for the stratum component value." )
1948        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-stratifier-example")
1949        protected CodeableConcept code;
1950
1951        /**
1952         * The stratum component value.
1953         */
1954        @Child(name = "value", type = {CodeableConcept.class, BooleanType.class, Quantity.class, Range.class, Reference.class}, order=2, min=1, max=1, modifier=false, summary=false)
1955        @Description(shortDefinition="The stratum component value, e.g. male", formalDefinition="The stratum component value." )
1956        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measurereport-stratifier-value-example")
1957        protected DataType value;
1958
1959        private static final long serialVersionUID = -1950789033L;
1960
1961    /**
1962     * Constructor
1963     */
1964      public StratifierGroupComponentComponent() {
1965        super();
1966      }
1967
1968    /**
1969     * Constructor
1970     */
1971      public StratifierGroupComponentComponent(CodeableConcept code, DataType value) {
1972        super();
1973        this.setCode(code);
1974        this.setValue(value);
1975      }
1976
1977        /**
1978         * @return {@link #code} (The code for the stratum component value.)
1979         */
1980        public CodeableConcept getCode() { 
1981          if (this.code == null)
1982            if (Configuration.errorOnAutoCreate())
1983              throw new Error("Attempt to auto-create StratifierGroupComponentComponent.code");
1984            else if (Configuration.doAutoCreate())
1985              this.code = new CodeableConcept(); // cc
1986          return this.code;
1987        }
1988
1989        public boolean hasCode() { 
1990          return this.code != null && !this.code.isEmpty();
1991        }
1992
1993        /**
1994         * @param value {@link #code} (The code for the stratum component value.)
1995         */
1996        public StratifierGroupComponentComponent setCode(CodeableConcept value) { 
1997          this.code = value;
1998          return this;
1999        }
2000
2001        /**
2002         * @return {@link #value} (The stratum component value.)
2003         */
2004        public DataType getValue() { 
2005          return this.value;
2006        }
2007
2008        /**
2009         * @return {@link #value} (The stratum component value.)
2010         */
2011        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
2012          if (this.value == null)
2013            this.value = new CodeableConcept();
2014          if (!(this.value instanceof CodeableConcept))
2015            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
2016          return (CodeableConcept) this.value;
2017        }
2018
2019        public boolean hasValueCodeableConcept() { 
2020          return this != null && this.value instanceof CodeableConcept;
2021        }
2022
2023        /**
2024         * @return {@link #value} (The stratum component value.)
2025         */
2026        public BooleanType getValueBooleanType() throws FHIRException { 
2027          if (this.value == null)
2028            this.value = new BooleanType();
2029          if (!(this.value instanceof BooleanType))
2030            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
2031          return (BooleanType) this.value;
2032        }
2033
2034        public boolean hasValueBooleanType() { 
2035          return this != null && this.value instanceof BooleanType;
2036        }
2037
2038        /**
2039         * @return {@link #value} (The stratum component value.)
2040         */
2041        public Quantity getValueQuantity() throws FHIRException { 
2042          if (this.value == null)
2043            this.value = new Quantity();
2044          if (!(this.value instanceof Quantity))
2045            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
2046          return (Quantity) this.value;
2047        }
2048
2049        public boolean hasValueQuantity() { 
2050          return this != null && this.value instanceof Quantity;
2051        }
2052
2053        /**
2054         * @return {@link #value} (The stratum component value.)
2055         */
2056        public Range getValueRange() throws FHIRException { 
2057          if (this.value == null)
2058            this.value = new Range();
2059          if (!(this.value instanceof Range))
2060            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
2061          return (Range) this.value;
2062        }
2063
2064        public boolean hasValueRange() { 
2065          return this != null && this.value instanceof Range;
2066        }
2067
2068        /**
2069         * @return {@link #value} (The stratum component value.)
2070         */
2071        public Reference getValueReference() throws FHIRException { 
2072          if (this.value == null)
2073            this.value = new Reference();
2074          if (!(this.value instanceof Reference))
2075            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
2076          return (Reference) this.value;
2077        }
2078
2079        public boolean hasValueReference() { 
2080          return this != null && this.value instanceof Reference;
2081        }
2082
2083        public boolean hasValue() { 
2084          return this.value != null && !this.value.isEmpty();
2085        }
2086
2087        /**
2088         * @param value {@link #value} (The stratum component value.)
2089         */
2090        public StratifierGroupComponentComponent setValue(DataType value) { 
2091          if (value != null && !(value instanceof CodeableConcept || value instanceof BooleanType || value instanceof Quantity || value instanceof Range || value instanceof Reference))
2092            throw new Error("Not the right type for MeasureReport.group.stratifier.stratum.component.value[x]: "+value.fhirType());
2093          this.value = value;
2094          return this;
2095        }
2096
2097        protected void listChildren(List<Property> children) {
2098          super.listChildren(children);
2099          children.add(new Property("code", "CodeableConcept", "The code for the stratum component value.", 0, 1, code));
2100          children.add(new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The stratum component value.", 0, 1, value));
2101        }
2102
2103        @Override
2104        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2105          switch (_hash) {
2106          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The code for the stratum component value.", 0, 1, code);
2107          case -1410166417: /*value[x]*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The stratum component value.", 0, 1, value);
2108          case 111972721: /*value*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The stratum component value.", 0, 1, value);
2109          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "The stratum component value.", 0, 1, value);
2110          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The stratum component value.", 0, 1, value);
2111          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "The stratum component value.", 0, 1, value);
2112          case 2030761548: /*valueRange*/  return new Property("value[x]", "Range", "The stratum component value.", 0, 1, value);
2113          case 1755241690: /*valueReference*/  return new Property("value[x]", "Reference", "The stratum component value.", 0, 1, value);
2114          default: return super.getNamedProperty(_hash, _name, _checkValid);
2115          }
2116
2117        }
2118
2119      @Override
2120      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2121        switch (hash) {
2122        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
2123        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
2124        default: return super.getProperty(hash, name, checkValid);
2125        }
2126
2127      }
2128
2129      @Override
2130      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2131        switch (hash) {
2132        case 3059181: // code
2133          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2134          return value;
2135        case 111972721: // value
2136          this.value = TypeConvertor.castToType(value); // DataType
2137          return value;
2138        default: return super.setProperty(hash, name, value);
2139        }
2140
2141      }
2142
2143      @Override
2144      public Base setProperty(String name, Base value) throws FHIRException {
2145        if (name.equals("code")) {
2146          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2147        } else if (name.equals("value[x]")) {
2148          this.value = TypeConvertor.castToType(value); // DataType
2149        } else
2150          return super.setProperty(name, value);
2151        return value;
2152      }
2153
2154      @Override
2155      public Base makeProperty(int hash, String name) throws FHIRException {
2156        switch (hash) {
2157        case 3059181:  return getCode();
2158        case -1410166417:  return getValue();
2159        case 111972721:  return getValue();
2160        default: return super.makeProperty(hash, name);
2161        }
2162
2163      }
2164
2165      @Override
2166      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2167        switch (hash) {
2168        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2169        case 111972721: /*value*/ return new String[] {"CodeableConcept", "boolean", "Quantity", "Range", "Reference"};
2170        default: return super.getTypesForProperty(hash, name);
2171        }
2172
2173      }
2174
2175      @Override
2176      public Base addChild(String name) throws FHIRException {
2177        if (name.equals("code")) {
2178          this.code = new CodeableConcept();
2179          return this.code;
2180        }
2181        else if (name.equals("valueCodeableConcept")) {
2182          this.value = new CodeableConcept();
2183          return this.value;
2184        }
2185        else if (name.equals("valueBoolean")) {
2186          this.value = new BooleanType();
2187          return this.value;
2188        }
2189        else if (name.equals("valueQuantity")) {
2190          this.value = new Quantity();
2191          return this.value;
2192        }
2193        else if (name.equals("valueRange")) {
2194          this.value = new Range();
2195          return this.value;
2196        }
2197        else if (name.equals("valueReference")) {
2198          this.value = new Reference();
2199          return this.value;
2200        }
2201        else
2202          return super.addChild(name);
2203      }
2204
2205      public StratifierGroupComponentComponent copy() {
2206        StratifierGroupComponentComponent dst = new StratifierGroupComponentComponent();
2207        copyValues(dst);
2208        return dst;
2209      }
2210
2211      public void copyValues(StratifierGroupComponentComponent dst) {
2212        super.copyValues(dst);
2213        dst.code = code == null ? null : code.copy();
2214        dst.value = value == null ? null : value.copy();
2215      }
2216
2217      @Override
2218      public boolean equalsDeep(Base other_) {
2219        if (!super.equalsDeep(other_))
2220          return false;
2221        if (!(other_ instanceof StratifierGroupComponentComponent))
2222          return false;
2223        StratifierGroupComponentComponent o = (StratifierGroupComponentComponent) other_;
2224        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true);
2225      }
2226
2227      @Override
2228      public boolean equalsShallow(Base other_) {
2229        if (!super.equalsShallow(other_))
2230          return false;
2231        if (!(other_ instanceof StratifierGroupComponentComponent))
2232          return false;
2233        StratifierGroupComponentComponent o = (StratifierGroupComponentComponent) other_;
2234        return true;
2235      }
2236
2237      public boolean isEmpty() {
2238        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value);
2239      }
2240
2241  public String fhirType() {
2242    return "MeasureReport.group.stratifier.stratum.component";
2243
2244  }
2245
2246  }
2247
2248    @Block()
2249    public static class StratifierGroupPopulationComponent extends BackboneElement implements IBaseBackboneElement {
2250        /**
2251         * The type of the population.
2252         */
2253        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
2254        @Description(shortDefinition="initial-population | numerator | numerator-exclusion | denominator | denominator-exclusion | denominator-exception | measure-population | measure-population-exclusion | measure-observation", formalDefinition="The type of the population." )
2255        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-population")
2256        protected CodeableConcept code;
2257
2258        /**
2259         * The number of members of the population in this stratum.
2260         */
2261        @Child(name = "count", type = {IntegerType.class}, order=2, min=0, max=1, modifier=false, summary=false)
2262        @Description(shortDefinition="Size of the population", formalDefinition="The number of members of the population in this stratum." )
2263        protected IntegerType count;
2264
2265        /**
2266         * This element refers to a List of subject level MeasureReport resources, one for each subject in this population in this stratum.
2267         */
2268        @Child(name = "subjectResults", type = {ListResource.class}, order=3, min=0, max=1, modifier=false, summary=false)
2269        @Description(shortDefinition="For subject-list reports, the subject results in this population", formalDefinition="This element refers to a List of subject level MeasureReport resources, one for each subject in this population in this stratum." )
2270        protected Reference subjectResults;
2271
2272        private static final long serialVersionUID = 1086153898L;
2273
2274    /**
2275     * Constructor
2276     */
2277      public StratifierGroupPopulationComponent() {
2278        super();
2279      }
2280
2281        /**
2282         * @return {@link #code} (The type of the population.)
2283         */
2284        public CodeableConcept getCode() { 
2285          if (this.code == null)
2286            if (Configuration.errorOnAutoCreate())
2287              throw new Error("Attempt to auto-create StratifierGroupPopulationComponent.code");
2288            else if (Configuration.doAutoCreate())
2289              this.code = new CodeableConcept(); // cc
2290          return this.code;
2291        }
2292
2293        public boolean hasCode() { 
2294          return this.code != null && !this.code.isEmpty();
2295        }
2296
2297        /**
2298         * @param value {@link #code} (The type of the population.)
2299         */
2300        public StratifierGroupPopulationComponent setCode(CodeableConcept value) { 
2301          this.code = value;
2302          return this;
2303        }
2304
2305        /**
2306         * @return {@link #count} (The number of members of the population in this stratum.). This is the underlying object with id, value and extensions. The accessor "getCount" gives direct access to the value
2307         */
2308        public IntegerType getCountElement() { 
2309          if (this.count == null)
2310            if (Configuration.errorOnAutoCreate())
2311              throw new Error("Attempt to auto-create StratifierGroupPopulationComponent.count");
2312            else if (Configuration.doAutoCreate())
2313              this.count = new IntegerType(); // bb
2314          return this.count;
2315        }
2316
2317        public boolean hasCountElement() { 
2318          return this.count != null && !this.count.isEmpty();
2319        }
2320
2321        public boolean hasCount() { 
2322          return this.count != null && !this.count.isEmpty();
2323        }
2324
2325        /**
2326         * @param value {@link #count} (The number of members of the population in this stratum.). This is the underlying object with id, value and extensions. The accessor "getCount" gives direct access to the value
2327         */
2328        public StratifierGroupPopulationComponent setCountElement(IntegerType value) { 
2329          this.count = value;
2330          return this;
2331        }
2332
2333        /**
2334         * @return The number of members of the population in this stratum.
2335         */
2336        public int getCount() { 
2337          return this.count == null || this.count.isEmpty() ? 0 : this.count.getValue();
2338        }
2339
2340        /**
2341         * @param value The number of members of the population in this stratum.
2342         */
2343        public StratifierGroupPopulationComponent setCount(int value) { 
2344            if (this.count == null)
2345              this.count = new IntegerType();
2346            this.count.setValue(value);
2347          return this;
2348        }
2349
2350        /**
2351         * @return {@link #subjectResults} (This element refers to a List of subject level MeasureReport resources, one for each subject in this population in this stratum.)
2352         */
2353        public Reference getSubjectResults() { 
2354          if (this.subjectResults == null)
2355            if (Configuration.errorOnAutoCreate())
2356              throw new Error("Attempt to auto-create StratifierGroupPopulationComponent.subjectResults");
2357            else if (Configuration.doAutoCreate())
2358              this.subjectResults = new Reference(); // cc
2359          return this.subjectResults;
2360        }
2361
2362        public boolean hasSubjectResults() { 
2363          return this.subjectResults != null && !this.subjectResults.isEmpty();
2364        }
2365
2366        /**
2367         * @param value {@link #subjectResults} (This element refers to a List of subject level MeasureReport resources, one for each subject in this population in this stratum.)
2368         */
2369        public StratifierGroupPopulationComponent setSubjectResults(Reference value) { 
2370          this.subjectResults = value;
2371          return this;
2372        }
2373
2374        protected void listChildren(List<Property> children) {
2375          super.listChildren(children);
2376          children.add(new Property("code", "CodeableConcept", "The type of the population.", 0, 1, code));
2377          children.add(new Property("count", "integer", "The number of members of the population in this stratum.", 0, 1, count));
2378          children.add(new Property("subjectResults", "Reference(List)", "This element refers to a List of subject level MeasureReport resources, one for each subject in this population in this stratum.", 0, 1, subjectResults));
2379        }
2380
2381        @Override
2382        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2383          switch (_hash) {
2384          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The type of the population.", 0, 1, code);
2385          case 94851343: /*count*/  return new Property("count", "integer", "The number of members of the population in this stratum.", 0, 1, count);
2386          case 2136184106: /*subjectResults*/  return new Property("subjectResults", "Reference(List)", "This element refers to a List of subject level MeasureReport resources, one for each subject in this population in this stratum.", 0, 1, subjectResults);
2387          default: return super.getNamedProperty(_hash, _name, _checkValid);
2388          }
2389
2390        }
2391
2392      @Override
2393      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2394        switch (hash) {
2395        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
2396        case 94851343: /*count*/ return this.count == null ? new Base[0] : new Base[] {this.count}; // IntegerType
2397        case 2136184106: /*subjectResults*/ return this.subjectResults == null ? new Base[0] : new Base[] {this.subjectResults}; // Reference
2398        default: return super.getProperty(hash, name, checkValid);
2399        }
2400
2401      }
2402
2403      @Override
2404      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2405        switch (hash) {
2406        case 3059181: // code
2407          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2408          return value;
2409        case 94851343: // count
2410          this.count = TypeConvertor.castToInteger(value); // IntegerType
2411          return value;
2412        case 2136184106: // subjectResults
2413          this.subjectResults = TypeConvertor.castToReference(value); // Reference
2414          return value;
2415        default: return super.setProperty(hash, name, value);
2416        }
2417
2418      }
2419
2420      @Override
2421      public Base setProperty(String name, Base value) throws FHIRException {
2422        if (name.equals("code")) {
2423          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2424        } else if (name.equals("count")) {
2425          this.count = TypeConvertor.castToInteger(value); // IntegerType
2426        } else if (name.equals("subjectResults")) {
2427          this.subjectResults = TypeConvertor.castToReference(value); // Reference
2428        } else
2429          return super.setProperty(name, value);
2430        return value;
2431      }
2432
2433      @Override
2434      public Base makeProperty(int hash, String name) throws FHIRException {
2435        switch (hash) {
2436        case 3059181:  return getCode();
2437        case 94851343:  return getCountElement();
2438        case 2136184106:  return getSubjectResults();
2439        default: return super.makeProperty(hash, name);
2440        }
2441
2442      }
2443
2444      @Override
2445      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2446        switch (hash) {
2447        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2448        case 94851343: /*count*/ return new String[] {"integer"};
2449        case 2136184106: /*subjectResults*/ return new String[] {"Reference"};
2450        default: return super.getTypesForProperty(hash, name);
2451        }
2452
2453      }
2454
2455      @Override
2456      public Base addChild(String name) throws FHIRException {
2457        if (name.equals("code")) {
2458          this.code = new CodeableConcept();
2459          return this.code;
2460        }
2461        else if (name.equals("count")) {
2462          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.group.stratifier.stratum.population.count");
2463        }
2464        else if (name.equals("subjectResults")) {
2465          this.subjectResults = new Reference();
2466          return this.subjectResults;
2467        }
2468        else
2469          return super.addChild(name);
2470      }
2471
2472      public StratifierGroupPopulationComponent copy() {
2473        StratifierGroupPopulationComponent dst = new StratifierGroupPopulationComponent();
2474        copyValues(dst);
2475        return dst;
2476      }
2477
2478      public void copyValues(StratifierGroupPopulationComponent dst) {
2479        super.copyValues(dst);
2480        dst.code = code == null ? null : code.copy();
2481        dst.count = count == null ? null : count.copy();
2482        dst.subjectResults = subjectResults == null ? null : subjectResults.copy();
2483      }
2484
2485      @Override
2486      public boolean equalsDeep(Base other_) {
2487        if (!super.equalsDeep(other_))
2488          return false;
2489        if (!(other_ instanceof StratifierGroupPopulationComponent))
2490          return false;
2491        StratifierGroupPopulationComponent o = (StratifierGroupPopulationComponent) other_;
2492        return compareDeep(code, o.code, true) && compareDeep(count, o.count, true) && compareDeep(subjectResults, o.subjectResults, true)
2493          ;
2494      }
2495
2496      @Override
2497      public boolean equalsShallow(Base other_) {
2498        if (!super.equalsShallow(other_))
2499          return false;
2500        if (!(other_ instanceof StratifierGroupPopulationComponent))
2501          return false;
2502        StratifierGroupPopulationComponent o = (StratifierGroupPopulationComponent) other_;
2503        return compareValues(count, o.count, true);
2504      }
2505
2506      public boolean isEmpty() {
2507        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, count, subjectResults
2508          );
2509      }
2510
2511  public String fhirType() {
2512    return "MeasureReport.group.stratifier.stratum.population";
2513
2514  }
2515
2516  }
2517
2518    /**
2519     * A formal identifier that is used to identify this MeasureReport when it is represented in other formats or referenced in a specification, model, design or an instance.
2520     */
2521    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2522    @Description(shortDefinition="Additional identifier for the MeasureReport", formalDefinition="A formal identifier that is used to identify this MeasureReport when it is represented in other formats or referenced in a specification, model, design or an instance." )
2523    protected List<Identifier> identifier;
2524
2525    /**
2526     * The MeasureReport status. No data will be available until the MeasureReport status is complete.
2527     */
2528    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
2529    @Description(shortDefinition="complete | pending | error", formalDefinition="The MeasureReport status. No data will be available until the MeasureReport status is complete." )
2530    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-report-status")
2531    protected Enumeration<MeasureReportStatus> status;
2532
2533    /**
2534     * The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure.
2535     */
2536    @Child(name = "type", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=true)
2537    @Description(shortDefinition="individual | subject-list | summary | data-exchange", formalDefinition="The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure." )
2538    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-report-type")
2539    protected Enumeration<MeasureReportType> type;
2540
2541    /**
2542     * Indicates whether the data submitted in an data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.
2543     */
2544    @Child(name = "dataUpdateType", type = {CodeType.class}, order=3, min=0, max=1, modifier=true, summary=true)
2545    @Description(shortDefinition="incremental | snapshot", formalDefinition="Indicates whether the data submitted in an data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver." )
2546    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/submit-data-update-type")
2547    protected Enumeration<SubmitDataUpdateType> dataUpdateType;
2548
2549    /**
2550     * A reference to the Measure that was calculated to produce this report.
2551     */
2552    @Child(name = "measure", type = {CanonicalType.class}, order=4, min=0, max=1, modifier=false, summary=true)
2553    @Description(shortDefinition="What measure was calculated", formalDefinition="A reference to the Measure that was calculated to produce this report." )
2554    protected CanonicalType measure;
2555
2556    /**
2557     * Optional subject identifying the individual or individuals the report is for.
2558     */
2559    @Child(name = "subject", type = {CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class}, order=5, min=0, max=1, modifier=false, summary=true)
2560    @Description(shortDefinition="What individual(s) the report is for", formalDefinition="Optional subject identifying the individual or individuals the report is for." )
2561    protected Reference subject;
2562
2563    /**
2564     * The date this measure report was generated.
2565     */
2566    @Child(name = "date", type = {DateTimeType.class}, order=6, min=0, max=1, modifier=false, summary=true)
2567    @Description(shortDefinition="When the report was generated", formalDefinition="The date this measure report was generated." )
2568    protected DateTimeType date;
2569
2570    /**
2571     * The individual or organization that is reporting the data.
2572     */
2573    @Child(name = "reporter", type = {Practitioner.class, PractitionerRole.class, Organization.class, Group.class}, order=7, min=0, max=1, modifier=false, summary=true)
2574    @Description(shortDefinition="Who is reporting the data", formalDefinition="The individual or organization that is reporting the data." )
2575    protected Reference reporter;
2576
2577    /**
2578     * A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report.
2579     */
2580    @Child(name = "reportingVendor", type = {Organization.class}, order=8, min=0, max=1, modifier=false, summary=false)
2581    @Description(shortDefinition="What vendor prepared the data", formalDefinition="A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report." )
2582    protected Reference reportingVendor;
2583
2584    /**
2585     * A reference to the location for which the data is being reported.
2586     */
2587    @Child(name = "location", type = {Location.class}, order=9, min=0, max=1, modifier=false, summary=false)
2588    @Description(shortDefinition="Where the reported data is from", formalDefinition="A reference to the location for which the data is being reported." )
2589    protected Reference location;
2590
2591    /**
2592     * The reporting period for which the report was calculated.
2593     */
2594    @Child(name = "period", type = {Period.class}, order=10, min=1, max=1, modifier=false, summary=true)
2595    @Description(shortDefinition="What period the report covers", formalDefinition="The reporting period for which the report was calculated." )
2596    protected Period period;
2597
2598    /**
2599     * A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report.
2600     */
2601    @Child(name = "inputParameters", type = {Parameters.class}, order=11, min=0, max=1, modifier=false, summary=false)
2602    @Description(shortDefinition="What parameters were provided to the report", formalDefinition="A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report." )
2603    protected Reference inputParameters;
2604
2605    /**
2606     * 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. It is expected to be the same as the scoring element on the referenced Measure.
2607     */
2608    @Child(name = "scoring", type = {CodeableConcept.class}, order=12, min=0, max=1, modifier=true, summary=true)
2609    @Description(shortDefinition="What scoring method (e.g. proportion, ratio, continuous-variable)", 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. It is expected to be the same as the scoring element on the referenced Measure." )
2610    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-scoring")
2611    protected CodeableConcept scoring;
2612
2613    /**
2614     * Whether improvement in the measure is noted by an increase or decrease in the measure score.
2615     */
2616    @Child(name = "improvementNotation", type = {CodeableConcept.class}, order=13, min=0, max=1, modifier=true, summary=true)
2617    @Description(shortDefinition="increase | decrease", formalDefinition="Whether improvement in the measure is noted by an increase or decrease in the measure score." )
2618    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-improvement-notation")
2619    protected CodeableConcept improvementNotation;
2620
2621    /**
2622     * The results of the calculation, one for each population group in the measure.
2623     */
2624    @Child(name = "group", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2625    @Description(shortDefinition="Measure results for each group", formalDefinition="The results of the calculation, one for each population group in the measure." )
2626    protected List<MeasureReportGroupComponent> group;
2627
2628    /**
2629     * A reference to a Resource that was used in the calculation of this measure.
2630     */
2631    @Child(name = "evaluatedResource", type = {Reference.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2632    @Description(shortDefinition="What data was used to calculate the measure score", formalDefinition="A reference to a Resource that was used in the calculation of this measure." )
2633    protected List<Reference> evaluatedResource;
2634
2635    private static final long serialVersionUID = 1805899755L;
2636
2637  /**
2638   * Constructor
2639   */
2640    public MeasureReport() {
2641      super();
2642    }
2643
2644  /**
2645   * Constructor
2646   */
2647    public MeasureReport(MeasureReportStatus status, MeasureReportType type, Period period) {
2648      super();
2649      this.setStatus(status);
2650      this.setType(type);
2651      this.setPeriod(period);
2652    }
2653
2654    /**
2655     * @return {@link #identifier} (A formal identifier that is used to identify this MeasureReport when it is represented in other formats or referenced in a specification, model, design or an instance.)
2656     */
2657    public List<Identifier> getIdentifier() { 
2658      if (this.identifier == null)
2659        this.identifier = new ArrayList<Identifier>();
2660      return this.identifier;
2661    }
2662
2663    /**
2664     * @return Returns a reference to <code>this</code> for easy method chaining
2665     */
2666    public MeasureReport setIdentifier(List<Identifier> theIdentifier) { 
2667      this.identifier = theIdentifier;
2668      return this;
2669    }
2670
2671    public boolean hasIdentifier() { 
2672      if (this.identifier == null)
2673        return false;
2674      for (Identifier item : this.identifier)
2675        if (!item.isEmpty())
2676          return true;
2677      return false;
2678    }
2679
2680    public Identifier addIdentifier() { //3
2681      Identifier t = new Identifier();
2682      if (this.identifier == null)
2683        this.identifier = new ArrayList<Identifier>();
2684      this.identifier.add(t);
2685      return t;
2686    }
2687
2688    public MeasureReport addIdentifier(Identifier t) { //3
2689      if (t == null)
2690        return this;
2691      if (this.identifier == null)
2692        this.identifier = new ArrayList<Identifier>();
2693      this.identifier.add(t);
2694      return this;
2695    }
2696
2697    /**
2698     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
2699     */
2700    public Identifier getIdentifierFirstRep() { 
2701      if (getIdentifier().isEmpty()) {
2702        addIdentifier();
2703      }
2704      return getIdentifier().get(0);
2705    }
2706
2707    /**
2708     * @return {@link #status} (The MeasureReport status. No data will be available until the MeasureReport status is complete.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2709     */
2710    public Enumeration<MeasureReportStatus> getStatusElement() { 
2711      if (this.status == null)
2712        if (Configuration.errorOnAutoCreate())
2713          throw new Error("Attempt to auto-create MeasureReport.status");
2714        else if (Configuration.doAutoCreate())
2715          this.status = new Enumeration<MeasureReportStatus>(new MeasureReportStatusEnumFactory()); // bb
2716      return this.status;
2717    }
2718
2719    public boolean hasStatusElement() { 
2720      return this.status != null && !this.status.isEmpty();
2721    }
2722
2723    public boolean hasStatus() { 
2724      return this.status != null && !this.status.isEmpty();
2725    }
2726
2727    /**
2728     * @param value {@link #status} (The MeasureReport status. No data will be available until the MeasureReport status is complete.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2729     */
2730    public MeasureReport setStatusElement(Enumeration<MeasureReportStatus> value) { 
2731      this.status = value;
2732      return this;
2733    }
2734
2735    /**
2736     * @return The MeasureReport status. No data will be available until the MeasureReport status is complete.
2737     */
2738    public MeasureReportStatus getStatus() { 
2739      return this.status == null ? null : this.status.getValue();
2740    }
2741
2742    /**
2743     * @param value The MeasureReport status. No data will be available until the MeasureReport status is complete.
2744     */
2745    public MeasureReport setStatus(MeasureReportStatus value) { 
2746        if (this.status == null)
2747          this.status = new Enumeration<MeasureReportStatus>(new MeasureReportStatusEnumFactory());
2748        this.status.setValue(value);
2749      return this;
2750    }
2751
2752    /**
2753     * @return {@link #type} (The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
2754     */
2755    public Enumeration<MeasureReportType> getTypeElement() { 
2756      if (this.type == null)
2757        if (Configuration.errorOnAutoCreate())
2758          throw new Error("Attempt to auto-create MeasureReport.type");
2759        else if (Configuration.doAutoCreate())
2760          this.type = new Enumeration<MeasureReportType>(new MeasureReportTypeEnumFactory()); // bb
2761      return this.type;
2762    }
2763
2764    public boolean hasTypeElement() { 
2765      return this.type != null && !this.type.isEmpty();
2766    }
2767
2768    public boolean hasType() { 
2769      return this.type != null && !this.type.isEmpty();
2770    }
2771
2772    /**
2773     * @param value {@link #type} (The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
2774     */
2775    public MeasureReport setTypeElement(Enumeration<MeasureReportType> value) { 
2776      this.type = value;
2777      return this;
2778    }
2779
2780    /**
2781     * @return The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure.
2782     */
2783    public MeasureReportType getType() { 
2784      return this.type == null ? null : this.type.getValue();
2785    }
2786
2787    /**
2788     * @param value The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure.
2789     */
2790    public MeasureReport setType(MeasureReportType value) { 
2791        if (this.type == null)
2792          this.type = new Enumeration<MeasureReportType>(new MeasureReportTypeEnumFactory());
2793        this.type.setValue(value);
2794      return this;
2795    }
2796
2797    /**
2798     * @return {@link #dataUpdateType} (Indicates whether the data submitted in an data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.). This is the underlying object with id, value and extensions. The accessor "getDataUpdateType" gives direct access to the value
2799     */
2800    public Enumeration<SubmitDataUpdateType> getDataUpdateTypeElement() { 
2801      if (this.dataUpdateType == null)
2802        if (Configuration.errorOnAutoCreate())
2803          throw new Error("Attempt to auto-create MeasureReport.dataUpdateType");
2804        else if (Configuration.doAutoCreate())
2805          this.dataUpdateType = new Enumeration<SubmitDataUpdateType>(new SubmitDataUpdateTypeEnumFactory()); // bb
2806      return this.dataUpdateType;
2807    }
2808
2809    public boolean hasDataUpdateTypeElement() { 
2810      return this.dataUpdateType != null && !this.dataUpdateType.isEmpty();
2811    }
2812
2813    public boolean hasDataUpdateType() { 
2814      return this.dataUpdateType != null && !this.dataUpdateType.isEmpty();
2815    }
2816
2817    /**
2818     * @param value {@link #dataUpdateType} (Indicates whether the data submitted in an data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.). This is the underlying object with id, value and extensions. The accessor "getDataUpdateType" gives direct access to the value
2819     */
2820    public MeasureReport setDataUpdateTypeElement(Enumeration<SubmitDataUpdateType> value) { 
2821      this.dataUpdateType = value;
2822      return this;
2823    }
2824
2825    /**
2826     * @return Indicates whether the data submitted in an data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.
2827     */
2828    public SubmitDataUpdateType getDataUpdateType() { 
2829      return this.dataUpdateType == null ? null : this.dataUpdateType.getValue();
2830    }
2831
2832    /**
2833     * @param value Indicates whether the data submitted in an data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.
2834     */
2835    public MeasureReport setDataUpdateType(SubmitDataUpdateType value) { 
2836      if (value == null)
2837        this.dataUpdateType = null;
2838      else {
2839        if (this.dataUpdateType == null)
2840          this.dataUpdateType = new Enumeration<SubmitDataUpdateType>(new SubmitDataUpdateTypeEnumFactory());
2841        this.dataUpdateType.setValue(value);
2842      }
2843      return this;
2844    }
2845
2846    /**
2847     * @return {@link #measure} (A reference to the Measure that was calculated to produce this report.). This is the underlying object with id, value and extensions. The accessor "getMeasure" gives direct access to the value
2848     */
2849    public CanonicalType getMeasureElement() { 
2850      if (this.measure == null)
2851        if (Configuration.errorOnAutoCreate())
2852          throw new Error("Attempt to auto-create MeasureReport.measure");
2853        else if (Configuration.doAutoCreate())
2854          this.measure = new CanonicalType(); // bb
2855      return this.measure;
2856    }
2857
2858    public boolean hasMeasureElement() { 
2859      return this.measure != null && !this.measure.isEmpty();
2860    }
2861
2862    public boolean hasMeasure() { 
2863      return this.measure != null && !this.measure.isEmpty();
2864    }
2865
2866    /**
2867     * @param value {@link #measure} (A reference to the Measure that was calculated to produce this report.). This is the underlying object with id, value and extensions. The accessor "getMeasure" gives direct access to the value
2868     */
2869    public MeasureReport setMeasureElement(CanonicalType value) { 
2870      this.measure = value;
2871      return this;
2872    }
2873
2874    /**
2875     * @return A reference to the Measure that was calculated to produce this report.
2876     */
2877    public String getMeasure() { 
2878      return this.measure == null ? null : this.measure.getValue();
2879    }
2880
2881    /**
2882     * @param value A reference to the Measure that was calculated to produce this report.
2883     */
2884    public MeasureReport setMeasure(String value) { 
2885      if (Utilities.noString(value))
2886        this.measure = null;
2887      else {
2888        if (this.measure == null)
2889          this.measure = new CanonicalType();
2890        this.measure.setValue(value);
2891      }
2892      return this;
2893    }
2894
2895    /**
2896     * @return {@link #subject} (Optional subject identifying the individual or individuals the report is for.)
2897     */
2898    public Reference getSubject() { 
2899      if (this.subject == null)
2900        if (Configuration.errorOnAutoCreate())
2901          throw new Error("Attempt to auto-create MeasureReport.subject");
2902        else if (Configuration.doAutoCreate())
2903          this.subject = new Reference(); // cc
2904      return this.subject;
2905    }
2906
2907    public boolean hasSubject() { 
2908      return this.subject != null && !this.subject.isEmpty();
2909    }
2910
2911    /**
2912     * @param value {@link #subject} (Optional subject identifying the individual or individuals the report is for.)
2913     */
2914    public MeasureReport setSubject(Reference value) { 
2915      this.subject = value;
2916      return this;
2917    }
2918
2919    /**
2920     * @return {@link #date} (The date this measure report was generated.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2921     */
2922    public DateTimeType getDateElement() { 
2923      if (this.date == null)
2924        if (Configuration.errorOnAutoCreate())
2925          throw new Error("Attempt to auto-create MeasureReport.date");
2926        else if (Configuration.doAutoCreate())
2927          this.date = new DateTimeType(); // bb
2928      return this.date;
2929    }
2930
2931    public boolean hasDateElement() { 
2932      return this.date != null && !this.date.isEmpty();
2933    }
2934
2935    public boolean hasDate() { 
2936      return this.date != null && !this.date.isEmpty();
2937    }
2938
2939    /**
2940     * @param value {@link #date} (The date this measure report was generated.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2941     */
2942    public MeasureReport setDateElement(DateTimeType value) { 
2943      this.date = value;
2944      return this;
2945    }
2946
2947    /**
2948     * @return The date this measure report was generated.
2949     */
2950    public Date getDate() { 
2951      return this.date == null ? null : this.date.getValue();
2952    }
2953
2954    /**
2955     * @param value The date this measure report was generated.
2956     */
2957    public MeasureReport setDate(Date value) { 
2958      if (value == null)
2959        this.date = null;
2960      else {
2961        if (this.date == null)
2962          this.date = new DateTimeType();
2963        this.date.setValue(value);
2964      }
2965      return this;
2966    }
2967
2968    /**
2969     * @return {@link #reporter} (The individual or organization that is reporting the data.)
2970     */
2971    public Reference getReporter() { 
2972      if (this.reporter == null)
2973        if (Configuration.errorOnAutoCreate())
2974          throw new Error("Attempt to auto-create MeasureReport.reporter");
2975        else if (Configuration.doAutoCreate())
2976          this.reporter = new Reference(); // cc
2977      return this.reporter;
2978    }
2979
2980    public boolean hasReporter() { 
2981      return this.reporter != null && !this.reporter.isEmpty();
2982    }
2983
2984    /**
2985     * @param value {@link #reporter} (The individual or organization that is reporting the data.)
2986     */
2987    public MeasureReport setReporter(Reference value) { 
2988      this.reporter = value;
2989      return this;
2990    }
2991
2992    /**
2993     * @return {@link #reportingVendor} (A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report.)
2994     */
2995    public Reference getReportingVendor() { 
2996      if (this.reportingVendor == null)
2997        if (Configuration.errorOnAutoCreate())
2998          throw new Error("Attempt to auto-create MeasureReport.reportingVendor");
2999        else if (Configuration.doAutoCreate())
3000          this.reportingVendor = new Reference(); // cc
3001      return this.reportingVendor;
3002    }
3003
3004    public boolean hasReportingVendor() { 
3005      return this.reportingVendor != null && !this.reportingVendor.isEmpty();
3006    }
3007
3008    /**
3009     * @param value {@link #reportingVendor} (A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report.)
3010     */
3011    public MeasureReport setReportingVendor(Reference value) { 
3012      this.reportingVendor = value;
3013      return this;
3014    }
3015
3016    /**
3017     * @return {@link #location} (A reference to the location for which the data is being reported.)
3018     */
3019    public Reference getLocation() { 
3020      if (this.location == null)
3021        if (Configuration.errorOnAutoCreate())
3022          throw new Error("Attempt to auto-create MeasureReport.location");
3023        else if (Configuration.doAutoCreate())
3024          this.location = new Reference(); // cc
3025      return this.location;
3026    }
3027
3028    public boolean hasLocation() { 
3029      return this.location != null && !this.location.isEmpty();
3030    }
3031
3032    /**
3033     * @param value {@link #location} (A reference to the location for which the data is being reported.)
3034     */
3035    public MeasureReport setLocation(Reference value) { 
3036      this.location = value;
3037      return this;
3038    }
3039
3040    /**
3041     * @return {@link #period} (The reporting period for which the report was calculated.)
3042     */
3043    public Period getPeriod() { 
3044      if (this.period == null)
3045        if (Configuration.errorOnAutoCreate())
3046          throw new Error("Attempt to auto-create MeasureReport.period");
3047        else if (Configuration.doAutoCreate())
3048          this.period = new Period(); // cc
3049      return this.period;
3050    }
3051
3052    public boolean hasPeriod() { 
3053      return this.period != null && !this.period.isEmpty();
3054    }
3055
3056    /**
3057     * @param value {@link #period} (The reporting period for which the report was calculated.)
3058     */
3059    public MeasureReport setPeriod(Period value) { 
3060      this.period = value;
3061      return this;
3062    }
3063
3064    /**
3065     * @return {@link #inputParameters} (A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report.)
3066     */
3067    public Reference getInputParameters() { 
3068      if (this.inputParameters == null)
3069        if (Configuration.errorOnAutoCreate())
3070          throw new Error("Attempt to auto-create MeasureReport.inputParameters");
3071        else if (Configuration.doAutoCreate())
3072          this.inputParameters = new Reference(); // cc
3073      return this.inputParameters;
3074    }
3075
3076    public boolean hasInputParameters() { 
3077      return this.inputParameters != null && !this.inputParameters.isEmpty();
3078    }
3079
3080    /**
3081     * @param value {@link #inputParameters} (A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report.)
3082     */
3083    public MeasureReport setInputParameters(Reference value) { 
3084      this.inputParameters = value;
3085      return this;
3086    }
3087
3088    /**
3089     * @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. It is expected to be the same as the scoring element on the referenced Measure.)
3090     */
3091    public CodeableConcept getScoring() { 
3092      if (this.scoring == null)
3093        if (Configuration.errorOnAutoCreate())
3094          throw new Error("Attempt to auto-create MeasureReport.scoring");
3095        else if (Configuration.doAutoCreate())
3096          this.scoring = new CodeableConcept(); // cc
3097      return this.scoring;
3098    }
3099
3100    public boolean hasScoring() { 
3101      return this.scoring != null && !this.scoring.isEmpty();
3102    }
3103
3104    /**
3105     * @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. It is expected to be the same as the scoring element on the referenced Measure.)
3106     */
3107    public MeasureReport setScoring(CodeableConcept value) { 
3108      this.scoring = value;
3109      return this;
3110    }
3111
3112    /**
3113     * @return {@link #improvementNotation} (Whether improvement in the measure is noted by an increase or decrease in the measure score.)
3114     */
3115    public CodeableConcept getImprovementNotation() { 
3116      if (this.improvementNotation == null)
3117        if (Configuration.errorOnAutoCreate())
3118          throw new Error("Attempt to auto-create MeasureReport.improvementNotation");
3119        else if (Configuration.doAutoCreate())
3120          this.improvementNotation = new CodeableConcept(); // cc
3121      return this.improvementNotation;
3122    }
3123
3124    public boolean hasImprovementNotation() { 
3125      return this.improvementNotation != null && !this.improvementNotation.isEmpty();
3126    }
3127
3128    /**
3129     * @param value {@link #improvementNotation} (Whether improvement in the measure is noted by an increase or decrease in the measure score.)
3130     */
3131    public MeasureReport setImprovementNotation(CodeableConcept value) { 
3132      this.improvementNotation = value;
3133      return this;
3134    }
3135
3136    /**
3137     * @return {@link #group} (The results of the calculation, one for each population group in the measure.)
3138     */
3139    public List<MeasureReportGroupComponent> getGroup() { 
3140      if (this.group == null)
3141        this.group = new ArrayList<MeasureReportGroupComponent>();
3142      return this.group;
3143    }
3144
3145    /**
3146     * @return Returns a reference to <code>this</code> for easy method chaining
3147     */
3148    public MeasureReport setGroup(List<MeasureReportGroupComponent> theGroup) { 
3149      this.group = theGroup;
3150      return this;
3151    }
3152
3153    public boolean hasGroup() { 
3154      if (this.group == null)
3155        return false;
3156      for (MeasureReportGroupComponent item : this.group)
3157        if (!item.isEmpty())
3158          return true;
3159      return false;
3160    }
3161
3162    public MeasureReportGroupComponent addGroup() { //3
3163      MeasureReportGroupComponent t = new MeasureReportGroupComponent();
3164      if (this.group == null)
3165        this.group = new ArrayList<MeasureReportGroupComponent>();
3166      this.group.add(t);
3167      return t;
3168    }
3169
3170    public MeasureReport addGroup(MeasureReportGroupComponent t) { //3
3171      if (t == null)
3172        return this;
3173      if (this.group == null)
3174        this.group = new ArrayList<MeasureReportGroupComponent>();
3175      this.group.add(t);
3176      return this;
3177    }
3178
3179    /**
3180     * @return The first repetition of repeating field {@link #group}, creating it if it does not already exist {3}
3181     */
3182    public MeasureReportGroupComponent getGroupFirstRep() { 
3183      if (getGroup().isEmpty()) {
3184        addGroup();
3185      }
3186      return getGroup().get(0);
3187    }
3188
3189    /**
3190     * @return {@link #evaluatedResource} (A reference to a Resource that was used in the calculation of this measure.)
3191     */
3192    public List<Reference> getEvaluatedResource() { 
3193      if (this.evaluatedResource == null)
3194        this.evaluatedResource = new ArrayList<Reference>();
3195      return this.evaluatedResource;
3196    }
3197
3198    /**
3199     * @return Returns a reference to <code>this</code> for easy method chaining
3200     */
3201    public MeasureReport setEvaluatedResource(List<Reference> theEvaluatedResource) { 
3202      this.evaluatedResource = theEvaluatedResource;
3203      return this;
3204    }
3205
3206    public boolean hasEvaluatedResource() { 
3207      if (this.evaluatedResource == null)
3208        return false;
3209      for (Reference item : this.evaluatedResource)
3210        if (!item.isEmpty())
3211          return true;
3212      return false;
3213    }
3214
3215    public Reference addEvaluatedResource() { //3
3216      Reference t = new Reference();
3217      if (this.evaluatedResource == null)
3218        this.evaluatedResource = new ArrayList<Reference>();
3219      this.evaluatedResource.add(t);
3220      return t;
3221    }
3222
3223    public MeasureReport addEvaluatedResource(Reference t) { //3
3224      if (t == null)
3225        return this;
3226      if (this.evaluatedResource == null)
3227        this.evaluatedResource = new ArrayList<Reference>();
3228      this.evaluatedResource.add(t);
3229      return this;
3230    }
3231
3232    /**
3233     * @return The first repetition of repeating field {@link #evaluatedResource}, creating it if it does not already exist {3}
3234     */
3235    public Reference getEvaluatedResourceFirstRep() { 
3236      if (getEvaluatedResource().isEmpty()) {
3237        addEvaluatedResource();
3238      }
3239      return getEvaluatedResource().get(0);
3240    }
3241
3242      protected void listChildren(List<Property> children) {
3243        super.listChildren(children);
3244        children.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this MeasureReport when it is represented in other formats or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier));
3245        children.add(new Property("status", "code", "The MeasureReport status. No data will be available until the MeasureReport status is complete.", 0, 1, status));
3246        children.add(new Property("type", "code", "The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure.", 0, 1, type));
3247        children.add(new Property("dataUpdateType", "code", "Indicates whether the data submitted in an data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.", 0, 1, dataUpdateType));
3248        children.add(new Property("measure", "canonical(Measure)", "A reference to the Measure that was calculated to produce this report.", 0, 1, measure));
3249        children.add(new Property("subject", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "Optional subject identifying the individual or individuals the report is for.", 0, 1, subject));
3250        children.add(new Property("date", "dateTime", "The date this measure report was generated.", 0, 1, date));
3251        children.add(new Property("reporter", "Reference(Practitioner|PractitionerRole|Organization|Group)", "The individual or organization that is reporting the data.", 0, 1, reporter));
3252        children.add(new Property("reportingVendor", "Reference(Organization)", "A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report.", 0, 1, reportingVendor));
3253        children.add(new Property("location", "Reference(Location)", "A reference to the location for which the data is being reported.", 0, 1, location));
3254        children.add(new Property("period", "Period", "The reporting period for which the report was calculated.", 0, 1, period));
3255        children.add(new Property("inputParameters", "Reference(Parameters)", "A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report.", 0, 1, inputParameters));
3256        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. It is expected to be the same as the scoring element on the referenced Measure.", 0, 1, scoring));
3257        children.add(new Property("improvementNotation", "CodeableConcept", "Whether improvement in the measure is noted by an increase or decrease in the measure score.", 0, 1, improvementNotation));
3258        children.add(new Property("group", "", "The results of the calculation, one for each population group in the measure.", 0, java.lang.Integer.MAX_VALUE, group));
3259        children.add(new Property("evaluatedResource", "Reference(Any)", "A reference to a Resource that was used in the calculation of this measure.", 0, java.lang.Integer.MAX_VALUE, evaluatedResource));
3260      }
3261
3262      @Override
3263      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3264        switch (_hash) {
3265        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A formal identifier that is used to identify this MeasureReport when it is represented in other formats or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier);
3266        case -892481550: /*status*/  return new Property("status", "code", "The MeasureReport status. No data will be available until the MeasureReport status is complete.", 0, 1, status);
3267        case 3575610: /*type*/  return new Property("type", "code", "The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure.", 0, 1, type);
3268        case -425890067: /*dataUpdateType*/  return new Property("dataUpdateType", "code", "Indicates whether the data submitted in an data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.", 0, 1, dataUpdateType);
3269        case 938321246: /*measure*/  return new Property("measure", "canonical(Measure)", "A reference to the Measure that was calculated to produce this report.", 0, 1, measure);
3270        case -1867885268: /*subject*/  return new Property("subject", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "Optional subject identifying the individual or individuals the report is for.", 0, 1, subject);
3271        case 3076014: /*date*/  return new Property("date", "dateTime", "The date this measure report was generated.", 0, 1, date);
3272        case -427039519: /*reporter*/  return new Property("reporter", "Reference(Practitioner|PractitionerRole|Organization|Group)", "The individual or organization that is reporting the data.", 0, 1, reporter);
3273        case 581336342: /*reportingVendor*/  return new Property("reportingVendor", "Reference(Organization)", "A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report.", 0, 1, reportingVendor);
3274        case 1901043637: /*location*/  return new Property("location", "Reference(Location)", "A reference to the location for which the data is being reported.", 0, 1, location);
3275        case -991726143: /*period*/  return new Property("period", "Period", "The reporting period for which the report was calculated.", 0, 1, period);
3276        case -812039852: /*inputParameters*/  return new Property("inputParameters", "Reference(Parameters)", "A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report.", 0, 1, inputParameters);
3277        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. It is expected to be the same as the scoring element on the referenced Measure.", 0, 1, scoring);
3278        case -2085456136: /*improvementNotation*/  return new Property("improvementNotation", "CodeableConcept", "Whether improvement in the measure is noted by an increase or decrease in the measure score.", 0, 1, improvementNotation);
3279        case 98629247: /*group*/  return new Property("group", "", "The results of the calculation, one for each population group in the measure.", 0, java.lang.Integer.MAX_VALUE, group);
3280        case -1056771047: /*evaluatedResource*/  return new Property("evaluatedResource", "Reference(Any)", "A reference to a Resource that was used in the calculation of this measure.", 0, java.lang.Integer.MAX_VALUE, evaluatedResource);
3281        default: return super.getNamedProperty(_hash, _name, _checkValid);
3282        }
3283
3284      }
3285
3286      @Override
3287      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3288        switch (hash) {
3289        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3290        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<MeasureReportStatus>
3291        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<MeasureReportType>
3292        case -425890067: /*dataUpdateType*/ return this.dataUpdateType == null ? new Base[0] : new Base[] {this.dataUpdateType}; // Enumeration<SubmitDataUpdateType>
3293        case 938321246: /*measure*/ return this.measure == null ? new Base[0] : new Base[] {this.measure}; // CanonicalType
3294        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
3295        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
3296        case -427039519: /*reporter*/ return this.reporter == null ? new Base[0] : new Base[] {this.reporter}; // Reference
3297        case 581336342: /*reportingVendor*/ return this.reportingVendor == null ? new Base[0] : new Base[] {this.reportingVendor}; // Reference
3298        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // Reference
3299        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
3300        case -812039852: /*inputParameters*/ return this.inputParameters == null ? new Base[0] : new Base[] {this.inputParameters}; // Reference
3301        case 1924005583: /*scoring*/ return this.scoring == null ? new Base[0] : new Base[] {this.scoring}; // CodeableConcept
3302        case -2085456136: /*improvementNotation*/ return this.improvementNotation == null ? new Base[0] : new Base[] {this.improvementNotation}; // CodeableConcept
3303        case 98629247: /*group*/ return this.group == null ? new Base[0] : this.group.toArray(new Base[this.group.size()]); // MeasureReportGroupComponent
3304        case -1056771047: /*evaluatedResource*/ return this.evaluatedResource == null ? new Base[0] : this.evaluatedResource.toArray(new Base[this.evaluatedResource.size()]); // Reference
3305        default: return super.getProperty(hash, name, checkValid);
3306        }
3307
3308      }
3309
3310      @Override
3311      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3312        switch (hash) {
3313        case -1618432855: // identifier
3314          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3315          return value;
3316        case -892481550: // status
3317          value = new MeasureReportStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3318          this.status = (Enumeration) value; // Enumeration<MeasureReportStatus>
3319          return value;
3320        case 3575610: // type
3321          value = new MeasureReportTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
3322          this.type = (Enumeration) value; // Enumeration<MeasureReportType>
3323          return value;
3324        case -425890067: // dataUpdateType
3325          value = new SubmitDataUpdateTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
3326          this.dataUpdateType = (Enumeration) value; // Enumeration<SubmitDataUpdateType>
3327          return value;
3328        case 938321246: // measure
3329          this.measure = TypeConvertor.castToCanonical(value); // CanonicalType
3330          return value;
3331        case -1867885268: // subject
3332          this.subject = TypeConvertor.castToReference(value); // Reference
3333          return value;
3334        case 3076014: // date
3335          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
3336          return value;
3337        case -427039519: // reporter
3338          this.reporter = TypeConvertor.castToReference(value); // Reference
3339          return value;
3340        case 581336342: // reportingVendor
3341          this.reportingVendor = TypeConvertor.castToReference(value); // Reference
3342          return value;
3343        case 1901043637: // location
3344          this.location = TypeConvertor.castToReference(value); // Reference
3345          return value;
3346        case -991726143: // period
3347          this.period = TypeConvertor.castToPeriod(value); // Period
3348          return value;
3349        case -812039852: // inputParameters
3350          this.inputParameters = TypeConvertor.castToReference(value); // Reference
3351          return value;
3352        case 1924005583: // scoring
3353          this.scoring = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3354          return value;
3355        case -2085456136: // improvementNotation
3356          this.improvementNotation = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3357          return value;
3358        case 98629247: // group
3359          this.getGroup().add((MeasureReportGroupComponent) value); // MeasureReportGroupComponent
3360          return value;
3361        case -1056771047: // evaluatedResource
3362          this.getEvaluatedResource().add(TypeConvertor.castToReference(value)); // Reference
3363          return value;
3364        default: return super.setProperty(hash, name, value);
3365        }
3366
3367      }
3368
3369      @Override
3370      public Base setProperty(String name, Base value) throws FHIRException {
3371        if (name.equals("identifier")) {
3372          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
3373        } else if (name.equals("status")) {
3374          value = new MeasureReportStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3375          this.status = (Enumeration) value; // Enumeration<MeasureReportStatus>
3376        } else if (name.equals("type")) {
3377          value = new MeasureReportTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
3378          this.type = (Enumeration) value; // Enumeration<MeasureReportType>
3379        } else if (name.equals("dataUpdateType")) {
3380          value = new SubmitDataUpdateTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
3381          this.dataUpdateType = (Enumeration) value; // Enumeration<SubmitDataUpdateType>
3382        } else if (name.equals("measure")) {
3383          this.measure = TypeConvertor.castToCanonical(value); // CanonicalType
3384        } else if (name.equals("subject")) {
3385          this.subject = TypeConvertor.castToReference(value); // Reference
3386        } else if (name.equals("date")) {
3387          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
3388        } else if (name.equals("reporter")) {
3389          this.reporter = TypeConvertor.castToReference(value); // Reference
3390        } else if (name.equals("reportingVendor")) {
3391          this.reportingVendor = TypeConvertor.castToReference(value); // Reference
3392        } else if (name.equals("location")) {
3393          this.location = TypeConvertor.castToReference(value); // Reference
3394        } else if (name.equals("period")) {
3395          this.period = TypeConvertor.castToPeriod(value); // Period
3396        } else if (name.equals("inputParameters")) {
3397          this.inputParameters = TypeConvertor.castToReference(value); // Reference
3398        } else if (name.equals("scoring")) {
3399          this.scoring = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3400        } else if (name.equals("improvementNotation")) {
3401          this.improvementNotation = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3402        } else if (name.equals("group")) {
3403          this.getGroup().add((MeasureReportGroupComponent) value);
3404        } else if (name.equals("evaluatedResource")) {
3405          this.getEvaluatedResource().add(TypeConvertor.castToReference(value));
3406        } else
3407          return super.setProperty(name, value);
3408        return value;
3409      }
3410
3411      @Override
3412      public Base makeProperty(int hash, String name) throws FHIRException {
3413        switch (hash) {
3414        case -1618432855:  return addIdentifier(); 
3415        case -892481550:  return getStatusElement();
3416        case 3575610:  return getTypeElement();
3417        case -425890067:  return getDataUpdateTypeElement();
3418        case 938321246:  return getMeasureElement();
3419        case -1867885268:  return getSubject();
3420        case 3076014:  return getDateElement();
3421        case -427039519:  return getReporter();
3422        case 581336342:  return getReportingVendor();
3423        case 1901043637:  return getLocation();
3424        case -991726143:  return getPeriod();
3425        case -812039852:  return getInputParameters();
3426        case 1924005583:  return getScoring();
3427        case -2085456136:  return getImprovementNotation();
3428        case 98629247:  return addGroup(); 
3429        case -1056771047:  return addEvaluatedResource(); 
3430        default: return super.makeProperty(hash, name);
3431        }
3432
3433      }
3434
3435      @Override
3436      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3437        switch (hash) {
3438        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3439        case -892481550: /*status*/ return new String[] {"code"};
3440        case 3575610: /*type*/ return new String[] {"code"};
3441        case -425890067: /*dataUpdateType*/ return new String[] {"code"};
3442        case 938321246: /*measure*/ return new String[] {"canonical"};
3443        case -1867885268: /*subject*/ return new String[] {"Reference"};
3444        case 3076014: /*date*/ return new String[] {"dateTime"};
3445        case -427039519: /*reporter*/ return new String[] {"Reference"};
3446        case 581336342: /*reportingVendor*/ return new String[] {"Reference"};
3447        case 1901043637: /*location*/ return new String[] {"Reference"};
3448        case -991726143: /*period*/ return new String[] {"Period"};
3449        case -812039852: /*inputParameters*/ return new String[] {"Reference"};
3450        case 1924005583: /*scoring*/ return new String[] {"CodeableConcept"};
3451        case -2085456136: /*improvementNotation*/ return new String[] {"CodeableConcept"};
3452        case 98629247: /*group*/ return new String[] {};
3453        case -1056771047: /*evaluatedResource*/ return new String[] {"Reference"};
3454        default: return super.getTypesForProperty(hash, name);
3455        }
3456
3457      }
3458
3459      @Override
3460      public Base addChild(String name) throws FHIRException {
3461        if (name.equals("identifier")) {
3462          return addIdentifier();
3463        }
3464        else if (name.equals("status")) {
3465          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.status");
3466        }
3467        else if (name.equals("type")) {
3468          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.type");
3469        }
3470        else if (name.equals("dataUpdateType")) {
3471          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.dataUpdateType");
3472        }
3473        else if (name.equals("measure")) {
3474          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.measure");
3475        }
3476        else if (name.equals("subject")) {
3477          this.subject = new Reference();
3478          return this.subject;
3479        }
3480        else if (name.equals("date")) {
3481          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.date");
3482        }
3483        else if (name.equals("reporter")) {
3484          this.reporter = new Reference();
3485          return this.reporter;
3486        }
3487        else if (name.equals("reportingVendor")) {
3488          this.reportingVendor = new Reference();
3489          return this.reportingVendor;
3490        }
3491        else if (name.equals("location")) {
3492          this.location = new Reference();
3493          return this.location;
3494        }
3495        else if (name.equals("period")) {
3496          this.period = new Period();
3497          return this.period;
3498        }
3499        else if (name.equals("inputParameters")) {
3500          this.inputParameters = new Reference();
3501          return this.inputParameters;
3502        }
3503        else if (name.equals("scoring")) {
3504          this.scoring = new CodeableConcept();
3505          return this.scoring;
3506        }
3507        else if (name.equals("improvementNotation")) {
3508          this.improvementNotation = new CodeableConcept();
3509          return this.improvementNotation;
3510        }
3511        else if (name.equals("group")) {
3512          return addGroup();
3513        }
3514        else if (name.equals("evaluatedResource")) {
3515          return addEvaluatedResource();
3516        }
3517        else
3518          return super.addChild(name);
3519      }
3520
3521  public String fhirType() {
3522    return "MeasureReport";
3523
3524  }
3525
3526      public MeasureReport copy() {
3527        MeasureReport dst = new MeasureReport();
3528        copyValues(dst);
3529        return dst;
3530      }
3531
3532      public void copyValues(MeasureReport dst) {
3533        super.copyValues(dst);
3534        if (identifier != null) {
3535          dst.identifier = new ArrayList<Identifier>();
3536          for (Identifier i : identifier)
3537            dst.identifier.add(i.copy());
3538        };
3539        dst.status = status == null ? null : status.copy();
3540        dst.type = type == null ? null : type.copy();
3541        dst.dataUpdateType = dataUpdateType == null ? null : dataUpdateType.copy();
3542        dst.measure = measure == null ? null : measure.copy();
3543        dst.subject = subject == null ? null : subject.copy();
3544        dst.date = date == null ? null : date.copy();
3545        dst.reporter = reporter == null ? null : reporter.copy();
3546        dst.reportingVendor = reportingVendor == null ? null : reportingVendor.copy();
3547        dst.location = location == null ? null : location.copy();
3548        dst.period = period == null ? null : period.copy();
3549        dst.inputParameters = inputParameters == null ? null : inputParameters.copy();
3550        dst.scoring = scoring == null ? null : scoring.copy();
3551        dst.improvementNotation = improvementNotation == null ? null : improvementNotation.copy();
3552        if (group != null) {
3553          dst.group = new ArrayList<MeasureReportGroupComponent>();
3554          for (MeasureReportGroupComponent i : group)
3555            dst.group.add(i.copy());
3556        };
3557        if (evaluatedResource != null) {
3558          dst.evaluatedResource = new ArrayList<Reference>();
3559          for (Reference i : evaluatedResource)
3560            dst.evaluatedResource.add(i.copy());
3561        };
3562      }
3563
3564      protected MeasureReport typedCopy() {
3565        return copy();
3566      }
3567
3568      @Override
3569      public boolean equalsDeep(Base other_) {
3570        if (!super.equalsDeep(other_))
3571          return false;
3572        if (!(other_ instanceof MeasureReport))
3573          return false;
3574        MeasureReport o = (MeasureReport) other_;
3575        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(type, o.type, true)
3576           && compareDeep(dataUpdateType, o.dataUpdateType, true) && compareDeep(measure, o.measure, true)
3577           && compareDeep(subject, o.subject, true) && compareDeep(date, o.date, true) && compareDeep(reporter, o.reporter, true)
3578           && compareDeep(reportingVendor, o.reportingVendor, true) && compareDeep(location, o.location, true)
3579           && compareDeep(period, o.period, true) && compareDeep(inputParameters, o.inputParameters, true)
3580           && compareDeep(scoring, o.scoring, true) && compareDeep(improvementNotation, o.improvementNotation, true)
3581           && compareDeep(group, o.group, true) && compareDeep(evaluatedResource, o.evaluatedResource, true)
3582          ;
3583      }
3584
3585      @Override
3586      public boolean equalsShallow(Base other_) {
3587        if (!super.equalsShallow(other_))
3588          return false;
3589        if (!(other_ instanceof MeasureReport))
3590          return false;
3591        MeasureReport o = (MeasureReport) other_;
3592        return compareValues(status, o.status, true) && compareValues(type, o.type, true) && compareValues(dataUpdateType, o.dataUpdateType, true)
3593           && compareValues(measure, o.measure, true) && compareValues(date, o.date, true);
3594      }
3595
3596      public boolean isEmpty() {
3597        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, type
3598          , dataUpdateType, measure, subject, date, reporter, reportingVendor, location
3599          , period, inputParameters, scoring, improvementNotation, group, evaluatedResource
3600          );
3601      }
3602
3603  @Override
3604  public ResourceType getResourceType() {
3605    return ResourceType.MeasureReport;
3606   }
3607
3608 /**
3609   * Search parameter: <b>date</b>
3610   * <p>
3611   * Description: <b>The date of the measure report</b><br>
3612   * Type: <b>date</b><br>
3613   * Path: <b>MeasureReport.date</b><br>
3614   * </p>
3615   */
3616  @SearchParamDefinition(name="date", path="MeasureReport.date", description="The date of the measure report", type="date" )
3617  public static final String SP_DATE = "date";
3618 /**
3619   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3620   * <p>
3621   * Description: <b>The date of the measure report</b><br>
3622   * Type: <b>date</b><br>
3623   * Path: <b>MeasureReport.date</b><br>
3624   * </p>
3625   */
3626  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3627
3628 /**
3629   * Search parameter: <b>evaluated-resource</b>
3630   * <p>
3631   * Description: <b>An evaluated resource referenced by the measure report</b><br>
3632   * Type: <b>reference</b><br>
3633   * Path: <b>MeasureReport.evaluatedResource</b><br>
3634   * </p>
3635   */
3636  @SearchParamDefinition(name="evaluated-resource", path="MeasureReport.evaluatedResource", description="An evaluated resource referenced by the measure report", type="reference", target={Account.class, ActivityDefinition.class, ActorDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, ArtifactAssessment.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, ConditionDefinition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceDispense.class, DeviceMetric.class, DeviceRequest.class, DeviceUsage.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, FormularyItem.class, GenomicStudy.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingSelection.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, InventoryReport.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationUsage.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionIntake.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Permission.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestOrchestration.class, Requirements.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SubstanceNucleicAcid.class, SubstancePolymer.class, SubstanceProtein.class, SubstanceReferenceInformation.class, SubstanceSourceMaterial.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, Transport.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
3637  public static final String SP_EVALUATED_RESOURCE = "evaluated-resource";
3638 /**
3639   * <b>Fluent Client</b> search parameter constant for <b>evaluated-resource</b>
3640   * <p>
3641   * Description: <b>An evaluated resource referenced by the measure report</b><br>
3642   * Type: <b>reference</b><br>
3643   * Path: <b>MeasureReport.evaluatedResource</b><br>
3644   * </p>
3645   */
3646  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam EVALUATED_RESOURCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_EVALUATED_RESOURCE);
3647
3648/**
3649   * Constant for fluent queries to be used to add include statements. Specifies
3650   * the path value of "<b>MeasureReport:evaluated-resource</b>".
3651   */
3652  public static final ca.uhn.fhir.model.api.Include INCLUDE_EVALUATED_RESOURCE = new ca.uhn.fhir.model.api.Include("MeasureReport:evaluated-resource").toLocked();
3653
3654 /**
3655   * Search parameter: <b>identifier</b>
3656   * <p>
3657   * Description: <b>External identifier of the measure report to be returned</b><br>
3658   * Type: <b>token</b><br>
3659   * Path: <b>MeasureReport.identifier</b><br>
3660   * </p>
3661   */
3662  @SearchParamDefinition(name="identifier", path="MeasureReport.identifier", description="External identifier of the measure report to be returned", type="token" )
3663  public static final String SP_IDENTIFIER = "identifier";
3664 /**
3665   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3666   * <p>
3667   * Description: <b>External identifier of the measure report to be returned</b><br>
3668   * Type: <b>token</b><br>
3669   * Path: <b>MeasureReport.identifier</b><br>
3670   * </p>
3671   */
3672  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3673
3674 /**
3675   * Search parameter: <b>location</b>
3676   * <p>
3677   * Description: <b>The location to return measure report results for</b><br>
3678   * Type: <b>reference</b><br>
3679   * Path: <b>MeasureReport.location</b><br>
3680   * </p>
3681   */
3682  @SearchParamDefinition(name="location", path="MeasureReport.location", description="The location to return measure report results for", type="reference", target={Location.class } )
3683  public static final String SP_LOCATION = "location";
3684 /**
3685   * <b>Fluent Client</b> search parameter constant for <b>location</b>
3686   * <p>
3687   * Description: <b>The location to return measure report results for</b><br>
3688   * Type: <b>reference</b><br>
3689   * Path: <b>MeasureReport.location</b><br>
3690   * </p>
3691   */
3692  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
3693
3694/**
3695   * Constant for fluent queries to be used to add include statements. Specifies
3696   * the path value of "<b>MeasureReport:location</b>".
3697   */
3698  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("MeasureReport:location").toLocked();
3699
3700 /**
3701   * Search parameter: <b>measure</b>
3702   * <p>
3703   * Description: <b>The measure to return measure report results for</b><br>
3704   * Type: <b>reference</b><br>
3705   * Path: <b>MeasureReport.measure</b><br>
3706   * </p>
3707   */
3708  @SearchParamDefinition(name="measure", path="MeasureReport.measure", description="The measure to return measure report results for", type="reference", target={Measure.class } )
3709  public static final String SP_MEASURE = "measure";
3710 /**
3711   * <b>Fluent Client</b> search parameter constant for <b>measure</b>
3712   * <p>
3713   * Description: <b>The measure to return measure report results for</b><br>
3714   * Type: <b>reference</b><br>
3715   * Path: <b>MeasureReport.measure</b><br>
3716   * </p>
3717   */
3718  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam MEASURE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_MEASURE);
3719
3720/**
3721   * Constant for fluent queries to be used to add include statements. Specifies
3722   * the path value of "<b>MeasureReport:measure</b>".
3723   */
3724  public static final ca.uhn.fhir.model.api.Include INCLUDE_MEASURE = new ca.uhn.fhir.model.api.Include("MeasureReport:measure").toLocked();
3725
3726 /**
3727   * Search parameter: <b>patient</b>
3728   * <p>
3729   * Description: <b>The identity of a patient to search for individual measure report results for</b><br>
3730   * Type: <b>reference</b><br>
3731   * Path: <b>MeasureReport.subject.where(resolve() is Patient)</b><br>
3732   * </p>
3733   */
3734  @SearchParamDefinition(name="patient", path="MeasureReport.subject.where(resolve() is Patient)", description="The identity of a patient to search for individual measure report results for", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Patient.class } )
3735  public static final String SP_PATIENT = "patient";
3736 /**
3737   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3738   * <p>
3739   * Description: <b>The identity of a patient to search for individual measure report results for</b><br>
3740   * Type: <b>reference</b><br>
3741   * Path: <b>MeasureReport.subject.where(resolve() is Patient)</b><br>
3742   * </p>
3743   */
3744  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3745
3746/**
3747   * Constant for fluent queries to be used to add include statements. Specifies
3748   * the path value of "<b>MeasureReport:patient</b>".
3749   */
3750  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("MeasureReport:patient").toLocked();
3751
3752 /**
3753   * Search parameter: <b>period</b>
3754   * <p>
3755   * Description: <b>The period of the measure report</b><br>
3756   * Type: <b>date</b><br>
3757   * Path: <b>MeasureReport.period</b><br>
3758   * </p>
3759   */
3760  @SearchParamDefinition(name="period", path="MeasureReport.period", description="The period of the measure report", type="date" )
3761  public static final String SP_PERIOD = "period";
3762 /**
3763   * <b>Fluent Client</b> search parameter constant for <b>period</b>
3764   * <p>
3765   * Description: <b>The period of the measure report</b><br>
3766   * Type: <b>date</b><br>
3767   * Path: <b>MeasureReport.period</b><br>
3768   * </p>
3769   */
3770  public static final ca.uhn.fhir.rest.gclient.DateClientParam PERIOD = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_PERIOD);
3771
3772 /**
3773   * Search parameter: <b>reporter</b>
3774   * <p>
3775   * Description: <b>The reporter to return measure report results for</b><br>
3776   * Type: <b>reference</b><br>
3777   * Path: <b>MeasureReport.reporter</b><br>
3778   * </p>
3779   */
3780  @SearchParamDefinition(name="reporter", path="MeasureReport.reporter", description="The reporter to return measure report results for", type="reference", target={Group.class, Organization.class, Practitioner.class, PractitionerRole.class } )
3781  public static final String SP_REPORTER = "reporter";
3782 /**
3783   * <b>Fluent Client</b> search parameter constant for <b>reporter</b>
3784   * <p>
3785   * Description: <b>The reporter to return measure report results for</b><br>
3786   * Type: <b>reference</b><br>
3787   * Path: <b>MeasureReport.reporter</b><br>
3788   * </p>
3789   */
3790  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REPORTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REPORTER);
3791
3792/**
3793   * Constant for fluent queries to be used to add include statements. Specifies
3794   * the path value of "<b>MeasureReport:reporter</b>".
3795   */
3796  public static final ca.uhn.fhir.model.api.Include INCLUDE_REPORTER = new ca.uhn.fhir.model.api.Include("MeasureReport:reporter").toLocked();
3797
3798 /**
3799   * Search parameter: <b>status</b>
3800   * <p>
3801   * Description: <b>The status of the measure report</b><br>
3802   * Type: <b>token</b><br>
3803   * Path: <b>MeasureReport.status</b><br>
3804   * </p>
3805   */
3806  @SearchParamDefinition(name="status", path="MeasureReport.status", description="The status of the measure report", type="token" )
3807  public static final String SP_STATUS = "status";
3808 /**
3809   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3810   * <p>
3811   * Description: <b>The status of the measure report</b><br>
3812   * Type: <b>token</b><br>
3813   * Path: <b>MeasureReport.status</b><br>
3814   * </p>
3815   */
3816  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3817
3818 /**
3819   * Search parameter: <b>subject</b>
3820   * <p>
3821   * Description: <b>The identity of a subject to search for individual measure report results for</b><br>
3822   * Type: <b>reference</b><br>
3823   * Path: <b>MeasureReport.subject</b><br>
3824   * </p>
3825   */
3826  @SearchParamDefinition(name="subject", path="MeasureReport.subject", description="The identity of a subject to search for individual measure report results for", type="reference", target={CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
3827  public static final String SP_SUBJECT = "subject";
3828 /**
3829   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
3830   * <p>
3831   * Description: <b>The identity of a subject to search for individual measure report results for</b><br>
3832   * Type: <b>reference</b><br>
3833   * Path: <b>MeasureReport.subject</b><br>
3834   * </p>
3835   */
3836  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
3837
3838/**
3839   * Constant for fluent queries to be used to add include statements. Specifies
3840   * the path value of "<b>MeasureReport:subject</b>".
3841   */
3842  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("MeasureReport:subject").toLocked();
3843
3844
3845}
3846