001package org.hl7.fhir.dstu2016may.model;
002
003
004
005
006import java.math.BigDecimal;
007
008/*
009  Copyright (c) 2011+, HL7, Inc.
010  All rights reserved.
011  
012  Redistribution and use in source and binary forms, with or without modification, 
013  are permitted provided that the following conditions are met:
014  
015   * Redistributions of source code must retain the above copyright notice, this 
016     list of conditions and the following disclaimer.
017   * Redistributions in binary form must reproduce the above copyright notice, 
018     this list of conditions and the following disclaimer in the documentation 
019     and/or other materials provided with the distribution.
020   * Neither the name of HL7 nor the names of its contributors may be used to 
021     endorse or promote products derived from this software without specific 
022     prior written permission.
023  
024  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
025  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
026  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
027  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
028  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
029  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
030  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
031  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
032  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
033  POSSIBILITY OF SUCH DAMAGE.
034  
035*/
036
037// Generated on Sun, May 8, 2016 03:05+1000 for FHIR v1.4.0
038import java.util.ArrayList;
039import java.util.Date;
040import java.util.List;
041
042import org.hl7.fhir.exceptions.FHIRException;
043import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
044
045import ca.uhn.fhir.model.api.annotation.Block;
046import ca.uhn.fhir.model.api.annotation.Child;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.ResourceDef;
049import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
050/**
051 * The MeasureReport resource contains the results of evaluating a measure.
052 */
053@ResourceDef(name="MeasureReport", profile="http://hl7.org/fhir/Profile/MeasureReport")
054public class MeasureReport extends DomainResource {
055
056    public enum MeasureReportType {
057        /**
058         * An individual report that provides information on the performance for a given measure with respect to a single patient
059         */
060        INDIVIDUAL, 
061        /**
062         * A patient list report that includes a listing of patients that satisfied each population criteria in the measure
063         */
064        PATIENTLIST, 
065        /**
066         * A summary report that returns the number of patients in each population criteria for the measure
067         */
068        SUMMARY, 
069        /**
070         * added to help the parsers
071         */
072        NULL;
073        public static MeasureReportType fromCode(String codeString) throws FHIRException {
074            if (codeString == null || "".equals(codeString))
075                return null;
076        if ("individual".equals(codeString))
077          return INDIVIDUAL;
078        if ("patient-list".equals(codeString))
079          return PATIENTLIST;
080        if ("summary".equals(codeString))
081          return SUMMARY;
082        throw new FHIRException("Unknown MeasureReportType code '"+codeString+"'");
083        }
084        public String toCode() {
085          switch (this) {
086            case INDIVIDUAL: return "individual";
087            case PATIENTLIST: return "patient-list";
088            case SUMMARY: return "summary";
089            case NULL: return null;
090            default: return "?";
091          }
092        }
093        public String getSystem() {
094          switch (this) {
095            case INDIVIDUAL: return "http://hl7.org/fhir/measure-report-type";
096            case PATIENTLIST: return "http://hl7.org/fhir/measure-report-type";
097            case SUMMARY: return "http://hl7.org/fhir/measure-report-type";
098            case NULL: return null;
099            default: return "?";
100          }
101        }
102        public String getDefinition() {
103          switch (this) {
104            case INDIVIDUAL: return "An individual report that provides information on the performance for a given measure with respect to a single patient";
105            case PATIENTLIST: return "A patient list report that includes a listing of patients that satisfied each population criteria in the measure";
106            case SUMMARY: return "A summary report that returns the number of patients in each population criteria for the measure";
107            case NULL: return null;
108            default: return "?";
109          }
110        }
111        public String getDisplay() {
112          switch (this) {
113            case INDIVIDUAL: return "Individual";
114            case PATIENTLIST: return "Patient List";
115            case SUMMARY: return "Summary";
116            case NULL: return null;
117            default: return "?";
118          }
119        }
120    }
121
122  public static class MeasureReportTypeEnumFactory implements EnumFactory<MeasureReportType> {
123    public MeasureReportType fromCode(String codeString) throws IllegalArgumentException {
124      if (codeString == null || "".equals(codeString))
125            if (codeString == null || "".equals(codeString))
126                return null;
127        if ("individual".equals(codeString))
128          return MeasureReportType.INDIVIDUAL;
129        if ("patient-list".equals(codeString))
130          return MeasureReportType.PATIENTLIST;
131        if ("summary".equals(codeString))
132          return MeasureReportType.SUMMARY;
133        throw new IllegalArgumentException("Unknown MeasureReportType code '"+codeString+"'");
134        }
135        public Enumeration<MeasureReportType> fromType(Base code) throws FHIRException {
136          if (code == null || code.isEmpty())
137            return null;
138          String codeString = ((PrimitiveType) code).asStringValue();
139          if (codeString == null || "".equals(codeString))
140            return null;
141        if ("individual".equals(codeString))
142          return new Enumeration<MeasureReportType>(this, MeasureReportType.INDIVIDUAL);
143        if ("patient-list".equals(codeString))
144          return new Enumeration<MeasureReportType>(this, MeasureReportType.PATIENTLIST);
145        if ("summary".equals(codeString))
146          return new Enumeration<MeasureReportType>(this, MeasureReportType.SUMMARY);
147        throw new FHIRException("Unknown MeasureReportType code '"+codeString+"'");
148        }
149    public String toCode(MeasureReportType code) {
150      if (code == MeasureReportType.INDIVIDUAL)
151        return "individual";
152      if (code == MeasureReportType.PATIENTLIST)
153        return "patient-list";
154      if (code == MeasureReportType.SUMMARY)
155        return "summary";
156      return "?";
157      }
158    public String toSystem(MeasureReportType code) {
159      return code.getSystem();
160      }
161    }
162
163    public enum MeasureReportStatus {
164        /**
165         * The report is complete and ready for use
166         */
167        COMPLETE, 
168        /**
169         * The report is currently being generated
170         */
171        PENDING, 
172        /**
173         * An error occurred attempting to generate the report
174         */
175        ERROR, 
176        /**
177         * added to help the parsers
178         */
179        NULL;
180        public static MeasureReportStatus fromCode(String codeString) throws FHIRException {
181            if (codeString == null || "".equals(codeString))
182                return null;
183        if ("complete".equals(codeString))
184          return COMPLETE;
185        if ("pending".equals(codeString))
186          return PENDING;
187        if ("error".equals(codeString))
188          return ERROR;
189        throw new FHIRException("Unknown MeasureReportStatus code '"+codeString+"'");
190        }
191        public String toCode() {
192          switch (this) {
193            case COMPLETE: return "complete";
194            case PENDING: return "pending";
195            case ERROR: return "error";
196            case NULL: return null;
197            default: return "?";
198          }
199        }
200        public String getSystem() {
201          switch (this) {
202            case COMPLETE: return "http://hl7.org/fhir/measure-report-status";
203            case PENDING: return "http://hl7.org/fhir/measure-report-status";
204            case ERROR: return "http://hl7.org/fhir/measure-report-status";
205            case NULL: return null;
206            default: return "?";
207          }
208        }
209        public String getDefinition() {
210          switch (this) {
211            case COMPLETE: return "The report is complete and ready for use";
212            case PENDING: return "The report is currently being generated";
213            case ERROR: return "An error occurred attempting to generate the report";
214            case NULL: return null;
215            default: return "?";
216          }
217        }
218        public String getDisplay() {
219          switch (this) {
220            case COMPLETE: return "Complete";
221            case PENDING: return "Pending";
222            case ERROR: return "Error";
223            case NULL: return null;
224            default: return "?";
225          }
226        }
227    }
228
229  public static class MeasureReportStatusEnumFactory implements EnumFactory<MeasureReportStatus> {
230    public MeasureReportStatus fromCode(String codeString) throws IllegalArgumentException {
231      if (codeString == null || "".equals(codeString))
232            if (codeString == null || "".equals(codeString))
233                return null;
234        if ("complete".equals(codeString))
235          return MeasureReportStatus.COMPLETE;
236        if ("pending".equals(codeString))
237          return MeasureReportStatus.PENDING;
238        if ("error".equals(codeString))
239          return MeasureReportStatus.ERROR;
240        throw new IllegalArgumentException("Unknown MeasureReportStatus code '"+codeString+"'");
241        }
242        public Enumeration<MeasureReportStatus> fromType(Base code) throws FHIRException {
243          if (code == null || code.isEmpty())
244            return null;
245          String codeString = ((PrimitiveType) code).asStringValue();
246          if (codeString == null || "".equals(codeString))
247            return null;
248        if ("complete".equals(codeString))
249          return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.COMPLETE);
250        if ("pending".equals(codeString))
251          return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.PENDING);
252        if ("error".equals(codeString))
253          return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.ERROR);
254        throw new FHIRException("Unknown MeasureReportStatus code '"+codeString+"'");
255        }
256    public String toCode(MeasureReportStatus code) {
257      if (code == MeasureReportStatus.COMPLETE)
258        return "complete";
259      if (code == MeasureReportStatus.PENDING)
260        return "pending";
261      if (code == MeasureReportStatus.ERROR)
262        return "error";
263      return "?";
264      }
265    public String toSystem(MeasureReportStatus code) {
266      return code.getSystem();
267      }
268    }
269
270    @Block()
271    public static class MeasureReportGroupComponent extends BackboneElement implements IBaseBackboneElement {
272        /**
273         * The identifier of the population group as defined in the measure definition.
274         */
275        @Child(name = "identifier", type = {Identifier.class}, order=1, min=1, max=1, modifier=false, summary=true)
276        @Description(shortDefinition="Identifier of the population group being reported", formalDefinition="The identifier of the population group as defined in the measure definition." )
277        protected Identifier identifier;
278
279        /**
280         * The populations that make up the population group, one for each type of population appropriate for the measure.
281         */
282        @Child(name = "population", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
283        @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." )
284        protected List<MeasureReportGroupPopulationComponent> population;
285
286        /**
287         * The measure score.
288         */
289        @Child(name = "measureScore", type = {DecimalType.class}, order=3, min=0, max=1, modifier=false, summary=true)
290        @Description(shortDefinition="The measure score", formalDefinition="The measure score." )
291        protected DecimalType measureScore;
292
293        /**
294         * When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.
295         */
296        @Child(name = "stratifier", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
297        @Description(shortDefinition="Stratification results", formalDefinition="When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure." )
298        protected List<MeasureReportGroupStratifierComponent> stratifier;
299
300        /**
301         * Supplemental data elements for the measure provide additional information requested by the measure for each patient involved in the populations.
302         */
303        @Child(name = "supplementalData", type = {}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
304        @Description(shortDefinition="Supplemental data elements for the measure", formalDefinition="Supplemental data elements for the measure provide additional information requested by the measure for each patient involved in the populations." )
305        protected List<MeasureReportGroupSupplementalDataComponent> supplementalData;
306
307        private static final long serialVersionUID = -832029515L;
308
309    /**
310     * Constructor
311     */
312      public MeasureReportGroupComponent() {
313        super();
314      }
315
316    /**
317     * Constructor
318     */
319      public MeasureReportGroupComponent(Identifier identifier) {
320        super();
321        this.identifier = identifier;
322      }
323
324        /**
325         * @return {@link #identifier} (The identifier of the population group as defined in the measure definition.)
326         */
327        public Identifier getIdentifier() { 
328          if (this.identifier == null)
329            if (Configuration.errorOnAutoCreate())
330              throw new Error("Attempt to auto-create MeasureReportGroupComponent.identifier");
331            else if (Configuration.doAutoCreate())
332              this.identifier = new Identifier(); // cc
333          return this.identifier;
334        }
335
336        public boolean hasIdentifier() { 
337          return this.identifier != null && !this.identifier.isEmpty();
338        }
339
340        /**
341         * @param value {@link #identifier} (The identifier of the population group as defined in the measure definition.)
342         */
343        public MeasureReportGroupComponent setIdentifier(Identifier value) { 
344          this.identifier = value;
345          return this;
346        }
347
348        /**
349         * @return {@link #population} (The populations that make up the population group, one for each type of population appropriate for the measure.)
350         */
351        public List<MeasureReportGroupPopulationComponent> getPopulation() { 
352          if (this.population == null)
353            this.population = new ArrayList<MeasureReportGroupPopulationComponent>();
354          return this.population;
355        }
356
357        public boolean hasPopulation() { 
358          if (this.population == null)
359            return false;
360          for (MeasureReportGroupPopulationComponent item : this.population)
361            if (!item.isEmpty())
362              return true;
363          return false;
364        }
365
366        /**
367         * @return {@link #population} (The populations that make up the population group, one for each type of population appropriate for the measure.)
368         */
369    // syntactic sugar
370        public MeasureReportGroupPopulationComponent addPopulation() { //3
371          MeasureReportGroupPopulationComponent t = new MeasureReportGroupPopulationComponent();
372          if (this.population == null)
373            this.population = new ArrayList<MeasureReportGroupPopulationComponent>();
374          this.population.add(t);
375          return t;
376        }
377
378    // syntactic sugar
379        public MeasureReportGroupComponent addPopulation(MeasureReportGroupPopulationComponent t) { //3
380          if (t == null)
381            return this;
382          if (this.population == null)
383            this.population = new ArrayList<MeasureReportGroupPopulationComponent>();
384          this.population.add(t);
385          return this;
386        }
387
388        /**
389         * @return {@link #measureScore} (The measure score.). This is the underlying object with id, value and extensions. The accessor "getMeasureScore" gives direct access to the value
390         */
391        public DecimalType getMeasureScoreElement() { 
392          if (this.measureScore == null)
393            if (Configuration.errorOnAutoCreate())
394              throw new Error("Attempt to auto-create MeasureReportGroupComponent.measureScore");
395            else if (Configuration.doAutoCreate())
396              this.measureScore = new DecimalType(); // bb
397          return this.measureScore;
398        }
399
400        public boolean hasMeasureScoreElement() { 
401          return this.measureScore != null && !this.measureScore.isEmpty();
402        }
403
404        public boolean hasMeasureScore() { 
405          return this.measureScore != null && !this.measureScore.isEmpty();
406        }
407
408        /**
409         * @param value {@link #measureScore} (The measure score.). This is the underlying object with id, value and extensions. The accessor "getMeasureScore" gives direct access to the value
410         */
411        public MeasureReportGroupComponent setMeasureScoreElement(DecimalType value) { 
412          this.measureScore = value;
413          return this;
414        }
415
416        /**
417         * @return The measure score.
418         */
419        public BigDecimal getMeasureScore() { 
420          return this.measureScore == null ? null : this.measureScore.getValue();
421        }
422
423        /**
424         * @param value The measure score.
425         */
426        public MeasureReportGroupComponent setMeasureScore(BigDecimal value) { 
427          if (value == null)
428            this.measureScore = null;
429          else {
430            if (this.measureScore == null)
431              this.measureScore = new DecimalType();
432            this.measureScore.setValue(value);
433          }
434          return this;
435        }
436
437        /**
438         * @param value The measure score.
439         */
440        public MeasureReportGroupComponent setMeasureScore(long value) { 
441              this.measureScore = new DecimalType();
442            this.measureScore.setValue(value);
443          return this;
444        }
445
446        /**
447         * @param value The measure score.
448         */
449        public MeasureReportGroupComponent setMeasureScore(double value) { 
450              this.measureScore = new DecimalType();
451            this.measureScore.setValue(value);
452          return this;
453        }
454
455        /**
456         * @return {@link #stratifier} (When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.)
457         */
458        public List<MeasureReportGroupStratifierComponent> getStratifier() { 
459          if (this.stratifier == null)
460            this.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
461          return this.stratifier;
462        }
463
464        public boolean hasStratifier() { 
465          if (this.stratifier == null)
466            return false;
467          for (MeasureReportGroupStratifierComponent item : this.stratifier)
468            if (!item.isEmpty())
469              return true;
470          return false;
471        }
472
473        /**
474         * @return {@link #stratifier} (When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.)
475         */
476    // syntactic sugar
477        public MeasureReportGroupStratifierComponent addStratifier() { //3
478          MeasureReportGroupStratifierComponent t = new MeasureReportGroupStratifierComponent();
479          if (this.stratifier == null)
480            this.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
481          this.stratifier.add(t);
482          return t;
483        }
484
485    // syntactic sugar
486        public MeasureReportGroupComponent addStratifier(MeasureReportGroupStratifierComponent t) { //3
487          if (t == null)
488            return this;
489          if (this.stratifier == null)
490            this.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
491          this.stratifier.add(t);
492          return this;
493        }
494
495        /**
496         * @return {@link #supplementalData} (Supplemental data elements for the measure provide additional information requested by the measure for each patient involved in the populations.)
497         */
498        public List<MeasureReportGroupSupplementalDataComponent> getSupplementalData() { 
499          if (this.supplementalData == null)
500            this.supplementalData = new ArrayList<MeasureReportGroupSupplementalDataComponent>();
501          return this.supplementalData;
502        }
503
504        public boolean hasSupplementalData() { 
505          if (this.supplementalData == null)
506            return false;
507          for (MeasureReportGroupSupplementalDataComponent item : this.supplementalData)
508            if (!item.isEmpty())
509              return true;
510          return false;
511        }
512
513        /**
514         * @return {@link #supplementalData} (Supplemental data elements for the measure provide additional information requested by the measure for each patient involved in the populations.)
515         */
516    // syntactic sugar
517        public MeasureReportGroupSupplementalDataComponent addSupplementalData() { //3
518          MeasureReportGroupSupplementalDataComponent t = new MeasureReportGroupSupplementalDataComponent();
519          if (this.supplementalData == null)
520            this.supplementalData = new ArrayList<MeasureReportGroupSupplementalDataComponent>();
521          this.supplementalData.add(t);
522          return t;
523        }
524
525    // syntactic sugar
526        public MeasureReportGroupComponent addSupplementalData(MeasureReportGroupSupplementalDataComponent t) { //3
527          if (t == null)
528            return this;
529          if (this.supplementalData == null)
530            this.supplementalData = new ArrayList<MeasureReportGroupSupplementalDataComponent>();
531          this.supplementalData.add(t);
532          return this;
533        }
534
535        protected void listChildren(List<Property> childrenList) {
536          super.listChildren(childrenList);
537          childrenList.add(new Property("identifier", "Identifier", "The identifier of the population group as defined in the measure definition.", 0, java.lang.Integer.MAX_VALUE, identifier));
538          childrenList.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));
539          childrenList.add(new Property("measureScore", "decimal", "The measure score.", 0, java.lang.Integer.MAX_VALUE, measureScore));
540          childrenList.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));
541          childrenList.add(new Property("supplementalData", "", "Supplemental data elements for the measure provide additional information requested by the measure for each patient involved in the populations.", 0, java.lang.Integer.MAX_VALUE, supplementalData));
542        }
543
544      @Override
545      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
546        switch (hash) {
547        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // Identifier
548        case -2023558323: /*population*/ return this.population == null ? new Base[0] : this.population.toArray(new Base[this.population.size()]); // MeasureReportGroupPopulationComponent
549        case -386313260: /*measureScore*/ return this.measureScore == null ? new Base[0] : new Base[] {this.measureScore}; // DecimalType
550        case 90983669: /*stratifier*/ return this.stratifier == null ? new Base[0] : this.stratifier.toArray(new Base[this.stratifier.size()]); // MeasureReportGroupStratifierComponent
551        case 1447496814: /*supplementalData*/ return this.supplementalData == null ? new Base[0] : this.supplementalData.toArray(new Base[this.supplementalData.size()]); // MeasureReportGroupSupplementalDataComponent
552        default: return super.getProperty(hash, name, checkValid);
553        }
554
555      }
556
557      @Override
558      public void setProperty(int hash, String name, Base value) throws FHIRException {
559        switch (hash) {
560        case -1618432855: // identifier
561          this.identifier = castToIdentifier(value); // Identifier
562          break;
563        case -2023558323: // population
564          this.getPopulation().add((MeasureReportGroupPopulationComponent) value); // MeasureReportGroupPopulationComponent
565          break;
566        case -386313260: // measureScore
567          this.measureScore = castToDecimal(value); // DecimalType
568          break;
569        case 90983669: // stratifier
570          this.getStratifier().add((MeasureReportGroupStratifierComponent) value); // MeasureReportGroupStratifierComponent
571          break;
572        case 1447496814: // supplementalData
573          this.getSupplementalData().add((MeasureReportGroupSupplementalDataComponent) value); // MeasureReportGroupSupplementalDataComponent
574          break;
575        default: super.setProperty(hash, name, value);
576        }
577
578      }
579
580      @Override
581      public void setProperty(String name, Base value) throws FHIRException {
582        if (name.equals("identifier"))
583          this.identifier = castToIdentifier(value); // Identifier
584        else if (name.equals("population"))
585          this.getPopulation().add((MeasureReportGroupPopulationComponent) value);
586        else if (name.equals("measureScore"))
587          this.measureScore = castToDecimal(value); // DecimalType
588        else if (name.equals("stratifier"))
589          this.getStratifier().add((MeasureReportGroupStratifierComponent) value);
590        else if (name.equals("supplementalData"))
591          this.getSupplementalData().add((MeasureReportGroupSupplementalDataComponent) value);
592        else
593          super.setProperty(name, value);
594      }
595
596      @Override
597      public Base makeProperty(int hash, String name) throws FHIRException {
598        switch (hash) {
599        case -1618432855:  return getIdentifier(); // Identifier
600        case -2023558323:  return addPopulation(); // MeasureReportGroupPopulationComponent
601        case -386313260: throw new FHIRException("Cannot make property measureScore as it is not a complex type"); // DecimalType
602        case 90983669:  return addStratifier(); // MeasureReportGroupStratifierComponent
603        case 1447496814:  return addSupplementalData(); // MeasureReportGroupSupplementalDataComponent
604        default: return super.makeProperty(hash, name);
605        }
606
607      }
608
609      @Override
610      public Base addChild(String name) throws FHIRException {
611        if (name.equals("identifier")) {
612          this.identifier = new Identifier();
613          return this.identifier;
614        }
615        else if (name.equals("population")) {
616          return addPopulation();
617        }
618        else if (name.equals("measureScore")) {
619          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.measureScore");
620        }
621        else if (name.equals("stratifier")) {
622          return addStratifier();
623        }
624        else if (name.equals("supplementalData")) {
625          return addSupplementalData();
626        }
627        else
628          return super.addChild(name);
629      }
630
631      public MeasureReportGroupComponent copy() {
632        MeasureReportGroupComponent dst = new MeasureReportGroupComponent();
633        copyValues(dst);
634        dst.identifier = identifier == null ? null : identifier.copy();
635        if (population != null) {
636          dst.population = new ArrayList<MeasureReportGroupPopulationComponent>();
637          for (MeasureReportGroupPopulationComponent i : population)
638            dst.population.add(i.copy());
639        };
640        dst.measureScore = measureScore == null ? null : measureScore.copy();
641        if (stratifier != null) {
642          dst.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
643          for (MeasureReportGroupStratifierComponent i : stratifier)
644            dst.stratifier.add(i.copy());
645        };
646        if (supplementalData != null) {
647          dst.supplementalData = new ArrayList<MeasureReportGroupSupplementalDataComponent>();
648          for (MeasureReportGroupSupplementalDataComponent i : supplementalData)
649            dst.supplementalData.add(i.copy());
650        };
651        return dst;
652      }
653
654      @Override
655      public boolean equalsDeep(Base other) {
656        if (!super.equalsDeep(other))
657          return false;
658        if (!(other instanceof MeasureReportGroupComponent))
659          return false;
660        MeasureReportGroupComponent o = (MeasureReportGroupComponent) other;
661        return compareDeep(identifier, o.identifier, true) && compareDeep(population, o.population, true)
662           && compareDeep(measureScore, o.measureScore, true) && compareDeep(stratifier, o.stratifier, true)
663           && compareDeep(supplementalData, o.supplementalData, true);
664      }
665
666      @Override
667      public boolean equalsShallow(Base other) {
668        if (!super.equalsShallow(other))
669          return false;
670        if (!(other instanceof MeasureReportGroupComponent))
671          return false;
672        MeasureReportGroupComponent o = (MeasureReportGroupComponent) other;
673        return compareValues(measureScore, o.measureScore, true);
674      }
675
676      public boolean isEmpty() {
677        return super.isEmpty() && (identifier == null || identifier.isEmpty()) && (population == null || population.isEmpty())
678           && (measureScore == null || measureScore.isEmpty()) && (stratifier == null || stratifier.isEmpty())
679           && (supplementalData == null || supplementalData.isEmpty());
680      }
681
682  public String fhirType() {
683    return "MeasureReport.group";
684
685  }
686
687  }
688
689    @Block()
690    public static class MeasureReportGroupPopulationComponent extends BackboneElement implements IBaseBackboneElement {
691        /**
692         * The type of the population.
693         */
694        @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
695        @Description(shortDefinition="initial-population | numerator | numerator-exclusion | denominator | denominator-exclusion | denominator-exception | measure-population | measure-population-exclusion | measure-score", formalDefinition="The type of the population." )
696        protected CodeType type;
697
698        /**
699         * The number of members of the population.
700         */
701        @Child(name = "count", type = {IntegerType.class}, order=2, min=0, max=1, modifier=false, summary=true)
702        @Description(shortDefinition="Size of the population", formalDefinition="The number of members of the population." )
703        protected IntegerType count;
704
705        /**
706         * This element refers to a List of patient level MeasureReport resources, one for each patient in this population.
707         */
708        @Child(name = "patients", type = {ListResource.class}, order=3, min=0, max=1, modifier=false, summary=true)
709        @Description(shortDefinition="For patient-list reports, the patients in this population", formalDefinition="This element refers to a List of patient level MeasureReport resources, one for each patient in this population." )
710        protected Reference patients;
711
712        /**
713         * The actual object that is the target of the reference (This element refers to a List of patient level MeasureReport resources, one for each patient in this population.)
714         */
715        protected ListResource patientsTarget;
716
717        private static final long serialVersionUID = 407500224L;
718
719    /**
720     * Constructor
721     */
722      public MeasureReportGroupPopulationComponent() {
723        super();
724      }
725
726    /**
727     * Constructor
728     */
729      public MeasureReportGroupPopulationComponent(CodeType type) {
730        super();
731        this.type = type;
732      }
733
734        /**
735         * @return {@link #type} (The type of the population.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
736         */
737        public CodeType getTypeElement() { 
738          if (this.type == null)
739            if (Configuration.errorOnAutoCreate())
740              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.type");
741            else if (Configuration.doAutoCreate())
742              this.type = new CodeType(); // bb
743          return this.type;
744        }
745
746        public boolean hasTypeElement() { 
747          return this.type != null && !this.type.isEmpty();
748        }
749
750        public boolean hasType() { 
751          return this.type != null && !this.type.isEmpty();
752        }
753
754        /**
755         * @param value {@link #type} (The type of the population.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
756         */
757        public MeasureReportGroupPopulationComponent setTypeElement(CodeType value) { 
758          this.type = value;
759          return this;
760        }
761
762        /**
763         * @return The type of the population.
764         */
765        public String getType() { 
766          return this.type == null ? null : this.type.getValue();
767        }
768
769        /**
770         * @param value The type of the population.
771         */
772        public MeasureReportGroupPopulationComponent setType(String value) { 
773            if (this.type == null)
774              this.type = new CodeType();
775            this.type.setValue(value);
776          return this;
777        }
778
779        /**
780         * @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
781         */
782        public IntegerType getCountElement() { 
783          if (this.count == null)
784            if (Configuration.errorOnAutoCreate())
785              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.count");
786            else if (Configuration.doAutoCreate())
787              this.count = new IntegerType(); // bb
788          return this.count;
789        }
790
791        public boolean hasCountElement() { 
792          return this.count != null && !this.count.isEmpty();
793        }
794
795        public boolean hasCount() { 
796          return this.count != null && !this.count.isEmpty();
797        }
798
799        /**
800         * @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
801         */
802        public MeasureReportGroupPopulationComponent setCountElement(IntegerType value) { 
803          this.count = value;
804          return this;
805        }
806
807        /**
808         * @return The number of members of the population.
809         */
810        public int getCount() { 
811          return this.count == null || this.count.isEmpty() ? 0 : this.count.getValue();
812        }
813
814        /**
815         * @param value The number of members of the population.
816         */
817        public MeasureReportGroupPopulationComponent setCount(int value) { 
818            if (this.count == null)
819              this.count = new IntegerType();
820            this.count.setValue(value);
821          return this;
822        }
823
824        /**
825         * @return {@link #patients} (This element refers to a List of patient level MeasureReport resources, one for each patient in this population.)
826         */
827        public Reference getPatients() { 
828          if (this.patients == null)
829            if (Configuration.errorOnAutoCreate())
830              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.patients");
831            else if (Configuration.doAutoCreate())
832              this.patients = new Reference(); // cc
833          return this.patients;
834        }
835
836        public boolean hasPatients() { 
837          return this.patients != null && !this.patients.isEmpty();
838        }
839
840        /**
841         * @param value {@link #patients} (This element refers to a List of patient level MeasureReport resources, one for each patient in this population.)
842         */
843        public MeasureReportGroupPopulationComponent setPatients(Reference value) { 
844          this.patients = value;
845          return this;
846        }
847
848        /**
849         * @return {@link #patients} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (This element refers to a List of patient level MeasureReport resources, one for each patient in this population.)
850         */
851        public ListResource getPatientsTarget() { 
852          if (this.patientsTarget == null)
853            if (Configuration.errorOnAutoCreate())
854              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.patients");
855            else if (Configuration.doAutoCreate())
856              this.patientsTarget = new ListResource(); // aa
857          return this.patientsTarget;
858        }
859
860        /**
861         * @param value {@link #patients} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (This element refers to a List of patient level MeasureReport resources, one for each patient in this population.)
862         */
863        public MeasureReportGroupPopulationComponent setPatientsTarget(ListResource value) { 
864          this.patientsTarget = value;
865          return this;
866        }
867
868        protected void listChildren(List<Property> childrenList) {
869          super.listChildren(childrenList);
870          childrenList.add(new Property("type", "code", "The type of the population.", 0, java.lang.Integer.MAX_VALUE, type));
871          childrenList.add(new Property("count", "integer", "The number of members of the population.", 0, java.lang.Integer.MAX_VALUE, count));
872          childrenList.add(new Property("patients", "Reference(List)", "This element refers to a List of patient level MeasureReport resources, one for each patient in this population.", 0, java.lang.Integer.MAX_VALUE, patients));
873        }
874
875      @Override
876      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
877        switch (hash) {
878        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeType
879        case 94851343: /*count*/ return this.count == null ? new Base[0] : new Base[] {this.count}; // IntegerType
880        case 1235842574: /*patients*/ return this.patients == null ? new Base[0] : new Base[] {this.patients}; // Reference
881        default: return super.getProperty(hash, name, checkValid);
882        }
883
884      }
885
886      @Override
887      public void setProperty(int hash, String name, Base value) throws FHIRException {
888        switch (hash) {
889        case 3575610: // type
890          this.type = castToCode(value); // CodeType
891          break;
892        case 94851343: // count
893          this.count = castToInteger(value); // IntegerType
894          break;
895        case 1235842574: // patients
896          this.patients = castToReference(value); // Reference
897          break;
898        default: super.setProperty(hash, name, value);
899        }
900
901      }
902
903      @Override
904      public void setProperty(String name, Base value) throws FHIRException {
905        if (name.equals("type"))
906          this.type = castToCode(value); // CodeType
907        else if (name.equals("count"))
908          this.count = castToInteger(value); // IntegerType
909        else if (name.equals("patients"))
910          this.patients = castToReference(value); // Reference
911        else
912          super.setProperty(name, value);
913      }
914
915      @Override
916      public Base makeProperty(int hash, String name) throws FHIRException {
917        switch (hash) {
918        case 3575610: throw new FHIRException("Cannot make property type as it is not a complex type"); // CodeType
919        case 94851343: throw new FHIRException("Cannot make property count as it is not a complex type"); // IntegerType
920        case 1235842574:  return getPatients(); // Reference
921        default: return super.makeProperty(hash, name);
922        }
923
924      }
925
926      @Override
927      public Base addChild(String name) throws FHIRException {
928        if (name.equals("type")) {
929          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.type");
930        }
931        else if (name.equals("count")) {
932          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.count");
933        }
934        else if (name.equals("patients")) {
935          this.patients = new Reference();
936          return this.patients;
937        }
938        else
939          return super.addChild(name);
940      }
941
942      public MeasureReportGroupPopulationComponent copy() {
943        MeasureReportGroupPopulationComponent dst = new MeasureReportGroupPopulationComponent();
944        copyValues(dst);
945        dst.type = type == null ? null : type.copy();
946        dst.count = count == null ? null : count.copy();
947        dst.patients = patients == null ? null : patients.copy();
948        return dst;
949      }
950
951      @Override
952      public boolean equalsDeep(Base other) {
953        if (!super.equalsDeep(other))
954          return false;
955        if (!(other instanceof MeasureReportGroupPopulationComponent))
956          return false;
957        MeasureReportGroupPopulationComponent o = (MeasureReportGroupPopulationComponent) other;
958        return compareDeep(type, o.type, true) && compareDeep(count, o.count, true) && compareDeep(patients, o.patients, true)
959          ;
960      }
961
962      @Override
963      public boolean equalsShallow(Base other) {
964        if (!super.equalsShallow(other))
965          return false;
966        if (!(other instanceof MeasureReportGroupPopulationComponent))
967          return false;
968        MeasureReportGroupPopulationComponent o = (MeasureReportGroupPopulationComponent) other;
969        return compareValues(type, o.type, true) && compareValues(count, o.count, true);
970      }
971
972      public boolean isEmpty() {
973        return super.isEmpty() && (type == null || type.isEmpty()) && (count == null || count.isEmpty())
974           && (patients == null || patients.isEmpty());
975      }
976
977  public String fhirType() {
978    return "MeasureReport.group.population";
979
980  }
981
982  }
983
984    @Block()
985    public static class MeasureReportGroupStratifierComponent extends BackboneElement implements IBaseBackboneElement {
986        /**
987         * The identifier of this stratifier, as defined in the measure definition.
988         */
989        @Child(name = "identifier", type = {Identifier.class}, order=1, min=1, max=1, modifier=false, summary=true)
990        @Description(shortDefinition="Identifier of the stratifier", formalDefinition="The identifier of this stratifier, as defined in the measure definition." )
991        protected Identifier identifier;
992
993        /**
994         * 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.
995         */
996        @Child(name = "group", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
997        @Description(shortDefinition="Stratum results, one for each unique value in the stratifier", 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." )
998        protected List<MeasureReportGroupStratifierGroupComponent> group;
999
1000        private static final long serialVersionUID = -229867715L;
1001
1002    /**
1003     * Constructor
1004     */
1005      public MeasureReportGroupStratifierComponent() {
1006        super();
1007      }
1008
1009    /**
1010     * Constructor
1011     */
1012      public MeasureReportGroupStratifierComponent(Identifier identifier) {
1013        super();
1014        this.identifier = identifier;
1015      }
1016
1017        /**
1018         * @return {@link #identifier} (The identifier of this stratifier, as defined in the measure definition.)
1019         */
1020        public Identifier getIdentifier() { 
1021          if (this.identifier == null)
1022            if (Configuration.errorOnAutoCreate())
1023              throw new Error("Attempt to auto-create MeasureReportGroupStratifierComponent.identifier");
1024            else if (Configuration.doAutoCreate())
1025              this.identifier = new Identifier(); // cc
1026          return this.identifier;
1027        }
1028
1029        public boolean hasIdentifier() { 
1030          return this.identifier != null && !this.identifier.isEmpty();
1031        }
1032
1033        /**
1034         * @param value {@link #identifier} (The identifier of this stratifier, as defined in the measure definition.)
1035         */
1036        public MeasureReportGroupStratifierComponent setIdentifier(Identifier value) { 
1037          this.identifier = value;
1038          return this;
1039        }
1040
1041        /**
1042         * @return {@link #group} (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.)
1043         */
1044        public List<MeasureReportGroupStratifierGroupComponent> getGroup() { 
1045          if (this.group == null)
1046            this.group = new ArrayList<MeasureReportGroupStratifierGroupComponent>();
1047          return this.group;
1048        }
1049
1050        public boolean hasGroup() { 
1051          if (this.group == null)
1052            return false;
1053          for (MeasureReportGroupStratifierGroupComponent item : this.group)
1054            if (!item.isEmpty())
1055              return true;
1056          return false;
1057        }
1058
1059        /**
1060         * @return {@link #group} (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.)
1061         */
1062    // syntactic sugar
1063        public MeasureReportGroupStratifierGroupComponent addGroup() { //3
1064          MeasureReportGroupStratifierGroupComponent t = new MeasureReportGroupStratifierGroupComponent();
1065          if (this.group == null)
1066            this.group = new ArrayList<MeasureReportGroupStratifierGroupComponent>();
1067          this.group.add(t);
1068          return t;
1069        }
1070
1071    // syntactic sugar
1072        public MeasureReportGroupStratifierComponent addGroup(MeasureReportGroupStratifierGroupComponent t) { //3
1073          if (t == null)
1074            return this;
1075          if (this.group == null)
1076            this.group = new ArrayList<MeasureReportGroupStratifierGroupComponent>();
1077          this.group.add(t);
1078          return this;
1079        }
1080
1081        protected void listChildren(List<Property> childrenList) {
1082          super.listChildren(childrenList);
1083          childrenList.add(new Property("identifier", "Identifier", "The identifier of this stratifier, as defined in the measure definition.", 0, java.lang.Integer.MAX_VALUE, identifier));
1084          childrenList.add(new Property("group", "", "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, group));
1085        }
1086
1087      @Override
1088      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1089        switch (hash) {
1090        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // Identifier
1091        case 98629247: /*group*/ return this.group == null ? new Base[0] : this.group.toArray(new Base[this.group.size()]); // MeasureReportGroupStratifierGroupComponent
1092        default: return super.getProperty(hash, name, checkValid);
1093        }
1094
1095      }
1096
1097      @Override
1098      public void setProperty(int hash, String name, Base value) throws FHIRException {
1099        switch (hash) {
1100        case -1618432855: // identifier
1101          this.identifier = castToIdentifier(value); // Identifier
1102          break;
1103        case 98629247: // group
1104          this.getGroup().add((MeasureReportGroupStratifierGroupComponent) value); // MeasureReportGroupStratifierGroupComponent
1105          break;
1106        default: super.setProperty(hash, name, value);
1107        }
1108
1109      }
1110
1111      @Override
1112      public void setProperty(String name, Base value) throws FHIRException {
1113        if (name.equals("identifier"))
1114          this.identifier = castToIdentifier(value); // Identifier
1115        else if (name.equals("group"))
1116          this.getGroup().add((MeasureReportGroupStratifierGroupComponent) value);
1117        else
1118          super.setProperty(name, value);
1119      }
1120
1121      @Override
1122      public Base makeProperty(int hash, String name) throws FHIRException {
1123        switch (hash) {
1124        case -1618432855:  return getIdentifier(); // Identifier
1125        case 98629247:  return addGroup(); // MeasureReportGroupStratifierGroupComponent
1126        default: return super.makeProperty(hash, name);
1127        }
1128
1129      }
1130
1131      @Override
1132      public Base addChild(String name) throws FHIRException {
1133        if (name.equals("identifier")) {
1134          this.identifier = new Identifier();
1135          return this.identifier;
1136        }
1137        else if (name.equals("group")) {
1138          return addGroup();
1139        }
1140        else
1141          return super.addChild(name);
1142      }
1143
1144      public MeasureReportGroupStratifierComponent copy() {
1145        MeasureReportGroupStratifierComponent dst = new MeasureReportGroupStratifierComponent();
1146        copyValues(dst);
1147        dst.identifier = identifier == null ? null : identifier.copy();
1148        if (group != null) {
1149          dst.group = new ArrayList<MeasureReportGroupStratifierGroupComponent>();
1150          for (MeasureReportGroupStratifierGroupComponent i : group)
1151            dst.group.add(i.copy());
1152        };
1153        return dst;
1154      }
1155
1156      @Override
1157      public boolean equalsDeep(Base other) {
1158        if (!super.equalsDeep(other))
1159          return false;
1160        if (!(other instanceof MeasureReportGroupStratifierComponent))
1161          return false;
1162        MeasureReportGroupStratifierComponent o = (MeasureReportGroupStratifierComponent) other;
1163        return compareDeep(identifier, o.identifier, true) && compareDeep(group, o.group, true);
1164      }
1165
1166      @Override
1167      public boolean equalsShallow(Base other) {
1168        if (!super.equalsShallow(other))
1169          return false;
1170        if (!(other instanceof MeasureReportGroupStratifierComponent))
1171          return false;
1172        MeasureReportGroupStratifierComponent o = (MeasureReportGroupStratifierComponent) other;
1173        return true;
1174      }
1175
1176      public boolean isEmpty() {
1177        return super.isEmpty() && (identifier == null || identifier.isEmpty()) && (group == null || group.isEmpty())
1178          ;
1179      }
1180
1181  public String fhirType() {
1182    return "MeasureReport.group.stratifier";
1183
1184  }
1185
1186  }
1187
1188    @Block()
1189    public static class MeasureReportGroupStratifierGroupComponent extends BackboneElement implements IBaseBackboneElement {
1190        /**
1191         * The value for this stratum, expressed as a string. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.
1192         */
1193        @Child(name = "value", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
1194        @Description(shortDefinition="The stratum value, e.g. male", formalDefinition="The value for this stratum, expressed as a string. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique." )
1195        protected StringType value;
1196
1197        /**
1198         * The populations that make up the stratum, one for each type of population appropriate to the measure.
1199         */
1200        @Child(name = "population", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1201        @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." )
1202        protected List<MeasureReportGroupStratifierGroupPopulationComponent> population;
1203
1204        /**
1205         * The measure score for this stratum.
1206         */
1207        @Child(name = "measureScore", type = {DecimalType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1208        @Description(shortDefinition="The measure score", formalDefinition="The measure score for this stratum." )
1209        protected DecimalType measureScore;
1210
1211        private static final long serialVersionUID = -1663404087L;
1212
1213    /**
1214     * Constructor
1215     */
1216      public MeasureReportGroupStratifierGroupComponent() {
1217        super();
1218      }
1219
1220    /**
1221     * Constructor
1222     */
1223      public MeasureReportGroupStratifierGroupComponent(StringType value) {
1224        super();
1225        this.value = value;
1226      }
1227
1228        /**
1229         * @return {@link #value} (The value for this stratum, expressed as a string. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
1230         */
1231        public StringType getValueElement() { 
1232          if (this.value == null)
1233            if (Configuration.errorOnAutoCreate())
1234              throw new Error("Attempt to auto-create MeasureReportGroupStratifierGroupComponent.value");
1235            else if (Configuration.doAutoCreate())
1236              this.value = new StringType(); // bb
1237          return this.value;
1238        }
1239
1240        public boolean hasValueElement() { 
1241          return this.value != null && !this.value.isEmpty();
1242        }
1243
1244        public boolean hasValue() { 
1245          return this.value != null && !this.value.isEmpty();
1246        }
1247
1248        /**
1249         * @param value {@link #value} (The value for this stratum, expressed as a string. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
1250         */
1251        public MeasureReportGroupStratifierGroupComponent setValueElement(StringType value) { 
1252          this.value = value;
1253          return this;
1254        }
1255
1256        /**
1257         * @return The value for this stratum, expressed as a string. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.
1258         */
1259        public String getValue() { 
1260          return this.value == null ? null : this.value.getValue();
1261        }
1262
1263        /**
1264         * @param value The value for this stratum, expressed as a string. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.
1265         */
1266        public MeasureReportGroupStratifierGroupComponent setValue(String value) { 
1267            if (this.value == null)
1268              this.value = new StringType();
1269            this.value.setValue(value);
1270          return this;
1271        }
1272
1273        /**
1274         * @return {@link #population} (The populations that make up the stratum, one for each type of population appropriate to the measure.)
1275         */
1276        public List<MeasureReportGroupStratifierGroupPopulationComponent> getPopulation() { 
1277          if (this.population == null)
1278            this.population = new ArrayList<MeasureReportGroupStratifierGroupPopulationComponent>();
1279          return this.population;
1280        }
1281
1282        public boolean hasPopulation() { 
1283          if (this.population == null)
1284            return false;
1285          for (MeasureReportGroupStratifierGroupPopulationComponent item : this.population)
1286            if (!item.isEmpty())
1287              return true;
1288          return false;
1289        }
1290
1291        /**
1292         * @return {@link #population} (The populations that make up the stratum, one for each type of population appropriate to the measure.)
1293         */
1294    // syntactic sugar
1295        public MeasureReportGroupStratifierGroupPopulationComponent addPopulation() { //3
1296          MeasureReportGroupStratifierGroupPopulationComponent t = new MeasureReportGroupStratifierGroupPopulationComponent();
1297          if (this.population == null)
1298            this.population = new ArrayList<MeasureReportGroupStratifierGroupPopulationComponent>();
1299          this.population.add(t);
1300          return t;
1301        }
1302
1303    // syntactic sugar
1304        public MeasureReportGroupStratifierGroupComponent addPopulation(MeasureReportGroupStratifierGroupPopulationComponent t) { //3
1305          if (t == null)
1306            return this;
1307          if (this.population == null)
1308            this.population = new ArrayList<MeasureReportGroupStratifierGroupPopulationComponent>();
1309          this.population.add(t);
1310          return this;
1311        }
1312
1313        /**
1314         * @return {@link #measureScore} (The measure score for this stratum.). This is the underlying object with id, value and extensions. The accessor "getMeasureScore" gives direct access to the value
1315         */
1316        public DecimalType getMeasureScoreElement() { 
1317          if (this.measureScore == null)
1318            if (Configuration.errorOnAutoCreate())
1319              throw new Error("Attempt to auto-create MeasureReportGroupStratifierGroupComponent.measureScore");
1320            else if (Configuration.doAutoCreate())
1321              this.measureScore = new DecimalType(); // bb
1322          return this.measureScore;
1323        }
1324
1325        public boolean hasMeasureScoreElement() { 
1326          return this.measureScore != null && !this.measureScore.isEmpty();
1327        }
1328
1329        public boolean hasMeasureScore() { 
1330          return this.measureScore != null && !this.measureScore.isEmpty();
1331        }
1332
1333        /**
1334         * @param value {@link #measureScore} (The measure score for this stratum.). This is the underlying object with id, value and extensions. The accessor "getMeasureScore" gives direct access to the value
1335         */
1336        public MeasureReportGroupStratifierGroupComponent setMeasureScoreElement(DecimalType value) { 
1337          this.measureScore = value;
1338          return this;
1339        }
1340
1341        /**
1342         * @return The measure score for this stratum.
1343         */
1344        public BigDecimal getMeasureScore() { 
1345          return this.measureScore == null ? null : this.measureScore.getValue();
1346        }
1347
1348        /**
1349         * @param value The measure score for this stratum.
1350         */
1351        public MeasureReportGroupStratifierGroupComponent setMeasureScore(BigDecimal value) { 
1352          if (value == null)
1353            this.measureScore = null;
1354          else {
1355            if (this.measureScore == null)
1356              this.measureScore = new DecimalType();
1357            this.measureScore.setValue(value);
1358          }
1359          return this;
1360        }
1361
1362        /**
1363         * @param value The measure score for this stratum.
1364         */
1365        public MeasureReportGroupStratifierGroupComponent setMeasureScore(long value) { 
1366              this.measureScore = new DecimalType();
1367            this.measureScore.setValue(value);
1368          return this;
1369        }
1370
1371        /**
1372         * @param value The measure score for this stratum.
1373         */
1374        public MeasureReportGroupStratifierGroupComponent setMeasureScore(double value) { 
1375              this.measureScore = new DecimalType();
1376            this.measureScore.setValue(value);
1377          return this;
1378        }
1379
1380        protected void listChildren(List<Property> childrenList) {
1381          super.listChildren(childrenList);
1382          childrenList.add(new Property("value", "string", "The value for this stratum, expressed as a string. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, java.lang.Integer.MAX_VALUE, value));
1383          childrenList.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));
1384          childrenList.add(new Property("measureScore", "decimal", "The measure score for this stratum.", 0, java.lang.Integer.MAX_VALUE, measureScore));
1385        }
1386
1387      @Override
1388      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1389        switch (hash) {
1390        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
1391        case -2023558323: /*population*/ return this.population == null ? new Base[0] : this.population.toArray(new Base[this.population.size()]); // MeasureReportGroupStratifierGroupPopulationComponent
1392        case -386313260: /*measureScore*/ return this.measureScore == null ? new Base[0] : new Base[] {this.measureScore}; // DecimalType
1393        default: return super.getProperty(hash, name, checkValid);
1394        }
1395
1396      }
1397
1398      @Override
1399      public void setProperty(int hash, String name, Base value) throws FHIRException {
1400        switch (hash) {
1401        case 111972721: // value
1402          this.value = castToString(value); // StringType
1403          break;
1404        case -2023558323: // population
1405          this.getPopulation().add((MeasureReportGroupStratifierGroupPopulationComponent) value); // MeasureReportGroupStratifierGroupPopulationComponent
1406          break;
1407        case -386313260: // measureScore
1408          this.measureScore = castToDecimal(value); // DecimalType
1409          break;
1410        default: super.setProperty(hash, name, value);
1411        }
1412
1413      }
1414
1415      @Override
1416      public void setProperty(String name, Base value) throws FHIRException {
1417        if (name.equals("value"))
1418          this.value = castToString(value); // StringType
1419        else if (name.equals("population"))
1420          this.getPopulation().add((MeasureReportGroupStratifierGroupPopulationComponent) value);
1421        else if (name.equals("measureScore"))
1422          this.measureScore = castToDecimal(value); // DecimalType
1423        else
1424          super.setProperty(name, value);
1425      }
1426
1427      @Override
1428      public Base makeProperty(int hash, String name) throws FHIRException {
1429        switch (hash) {
1430        case 111972721: throw new FHIRException("Cannot make property value as it is not a complex type"); // StringType
1431        case -2023558323:  return addPopulation(); // MeasureReportGroupStratifierGroupPopulationComponent
1432        case -386313260: throw new FHIRException("Cannot make property measureScore as it is not a complex type"); // DecimalType
1433        default: return super.makeProperty(hash, name);
1434        }
1435
1436      }
1437
1438      @Override
1439      public Base addChild(String name) throws FHIRException {
1440        if (name.equals("value")) {
1441          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.value");
1442        }
1443        else if (name.equals("population")) {
1444          return addPopulation();
1445        }
1446        else if (name.equals("measureScore")) {
1447          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.measureScore");
1448        }
1449        else
1450          return super.addChild(name);
1451      }
1452
1453      public MeasureReportGroupStratifierGroupComponent copy() {
1454        MeasureReportGroupStratifierGroupComponent dst = new MeasureReportGroupStratifierGroupComponent();
1455        copyValues(dst);
1456        dst.value = value == null ? null : value.copy();
1457        if (population != null) {
1458          dst.population = new ArrayList<MeasureReportGroupStratifierGroupPopulationComponent>();
1459          for (MeasureReportGroupStratifierGroupPopulationComponent i : population)
1460            dst.population.add(i.copy());
1461        };
1462        dst.measureScore = measureScore == null ? null : measureScore.copy();
1463        return dst;
1464      }
1465
1466      @Override
1467      public boolean equalsDeep(Base other) {
1468        if (!super.equalsDeep(other))
1469          return false;
1470        if (!(other instanceof MeasureReportGroupStratifierGroupComponent))
1471          return false;
1472        MeasureReportGroupStratifierGroupComponent o = (MeasureReportGroupStratifierGroupComponent) other;
1473        return compareDeep(value, o.value, true) && compareDeep(population, o.population, true) && compareDeep(measureScore, o.measureScore, true)
1474          ;
1475      }
1476
1477      @Override
1478      public boolean equalsShallow(Base other) {
1479        if (!super.equalsShallow(other))
1480          return false;
1481        if (!(other instanceof MeasureReportGroupStratifierGroupComponent))
1482          return false;
1483        MeasureReportGroupStratifierGroupComponent o = (MeasureReportGroupStratifierGroupComponent) other;
1484        return compareValues(value, o.value, true) && compareValues(measureScore, o.measureScore, true);
1485      }
1486
1487      public boolean isEmpty() {
1488        return super.isEmpty() && (value == null || value.isEmpty()) && (population == null || population.isEmpty())
1489           && (measureScore == null || measureScore.isEmpty());
1490      }
1491
1492  public String fhirType() {
1493    return "MeasureReport.group.stratifier.group";
1494
1495  }
1496
1497  }
1498
1499    @Block()
1500    public static class MeasureReportGroupStratifierGroupPopulationComponent extends BackboneElement implements IBaseBackboneElement {
1501        /**
1502         * The type of the population.
1503         */
1504        @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
1505        @Description(shortDefinition="initial-population | numerator | numerator-exclusion | denominator | denominator-exclusion | denominator-exception | measure-population | measure-population-exclusion | measure-score", formalDefinition="The type of the population." )
1506        protected CodeType type;
1507
1508        /**
1509         * The number of members of the population in this stratum.
1510         */
1511        @Child(name = "count", type = {IntegerType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1512        @Description(shortDefinition="Size of the population", formalDefinition="The number of members of the population in this stratum." )
1513        protected IntegerType count;
1514
1515        /**
1516         * This element refers to a List of patient level MeasureReport resources, one for each patient in this population in this stratum.
1517         */
1518        @Child(name = "patients", type = {ListResource.class}, order=3, min=0, max=1, modifier=false, summary=true)
1519        @Description(shortDefinition="For patient-list reports, the patients in this population", formalDefinition="This element refers to a List of patient level MeasureReport resources, one for each patient in this population in this stratum." )
1520        protected Reference patients;
1521
1522        /**
1523         * The actual object that is the target of the reference (This element refers to a List of patient level MeasureReport resources, one for each patient in this population in this stratum.)
1524         */
1525        protected ListResource patientsTarget;
1526
1527        private static final long serialVersionUID = 407500224L;
1528
1529    /**
1530     * Constructor
1531     */
1532      public MeasureReportGroupStratifierGroupPopulationComponent() {
1533        super();
1534      }
1535
1536    /**
1537     * Constructor
1538     */
1539      public MeasureReportGroupStratifierGroupPopulationComponent(CodeType type) {
1540        super();
1541        this.type = type;
1542      }
1543
1544        /**
1545         * @return {@link #type} (The type of the population.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1546         */
1547        public CodeType getTypeElement() { 
1548          if (this.type == null)
1549            if (Configuration.errorOnAutoCreate())
1550              throw new Error("Attempt to auto-create MeasureReportGroupStratifierGroupPopulationComponent.type");
1551            else if (Configuration.doAutoCreate())
1552              this.type = new CodeType(); // bb
1553          return this.type;
1554        }
1555
1556        public boolean hasTypeElement() { 
1557          return this.type != null && !this.type.isEmpty();
1558        }
1559
1560        public boolean hasType() { 
1561          return this.type != null && !this.type.isEmpty();
1562        }
1563
1564        /**
1565         * @param value {@link #type} (The type of the population.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1566         */
1567        public MeasureReportGroupStratifierGroupPopulationComponent setTypeElement(CodeType value) { 
1568          this.type = value;
1569          return this;
1570        }
1571
1572        /**
1573         * @return The type of the population.
1574         */
1575        public String getType() { 
1576          return this.type == null ? null : this.type.getValue();
1577        }
1578
1579        /**
1580         * @param value The type of the population.
1581         */
1582        public MeasureReportGroupStratifierGroupPopulationComponent setType(String value) { 
1583            if (this.type == null)
1584              this.type = new CodeType();
1585            this.type.setValue(value);
1586          return this;
1587        }
1588
1589        /**
1590         * @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
1591         */
1592        public IntegerType getCountElement() { 
1593          if (this.count == null)
1594            if (Configuration.errorOnAutoCreate())
1595              throw new Error("Attempt to auto-create MeasureReportGroupStratifierGroupPopulationComponent.count");
1596            else if (Configuration.doAutoCreate())
1597              this.count = new IntegerType(); // bb
1598          return this.count;
1599        }
1600
1601        public boolean hasCountElement() { 
1602          return this.count != null && !this.count.isEmpty();
1603        }
1604
1605        public boolean hasCount() { 
1606          return this.count != null && !this.count.isEmpty();
1607        }
1608
1609        /**
1610         * @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
1611         */
1612        public MeasureReportGroupStratifierGroupPopulationComponent setCountElement(IntegerType value) { 
1613          this.count = value;
1614          return this;
1615        }
1616
1617        /**
1618         * @return The number of members of the population in this stratum.
1619         */
1620        public int getCount() { 
1621          return this.count == null || this.count.isEmpty() ? 0 : this.count.getValue();
1622        }
1623
1624        /**
1625         * @param value The number of members of the population in this stratum.
1626         */
1627        public MeasureReportGroupStratifierGroupPopulationComponent setCount(int value) { 
1628            if (this.count == null)
1629              this.count = new IntegerType();
1630            this.count.setValue(value);
1631          return this;
1632        }
1633
1634        /**
1635         * @return {@link #patients} (This element refers to a List of patient level MeasureReport resources, one for each patient in this population in this stratum.)
1636         */
1637        public Reference getPatients() { 
1638          if (this.patients == null)
1639            if (Configuration.errorOnAutoCreate())
1640              throw new Error("Attempt to auto-create MeasureReportGroupStratifierGroupPopulationComponent.patients");
1641            else if (Configuration.doAutoCreate())
1642              this.patients = new Reference(); // cc
1643          return this.patients;
1644        }
1645
1646        public boolean hasPatients() { 
1647          return this.patients != null && !this.patients.isEmpty();
1648        }
1649
1650        /**
1651         * @param value {@link #patients} (This element refers to a List of patient level MeasureReport resources, one for each patient in this population in this stratum.)
1652         */
1653        public MeasureReportGroupStratifierGroupPopulationComponent setPatients(Reference value) { 
1654          this.patients = value;
1655          return this;
1656        }
1657
1658        /**
1659         * @return {@link #patients} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (This element refers to a List of patient level MeasureReport resources, one for each patient in this population in this stratum.)
1660         */
1661        public ListResource getPatientsTarget() { 
1662          if (this.patientsTarget == null)
1663            if (Configuration.errorOnAutoCreate())
1664              throw new Error("Attempt to auto-create MeasureReportGroupStratifierGroupPopulationComponent.patients");
1665            else if (Configuration.doAutoCreate())
1666              this.patientsTarget = new ListResource(); // aa
1667          return this.patientsTarget;
1668        }
1669
1670        /**
1671         * @param value {@link #patients} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (This element refers to a List of patient level MeasureReport resources, one for each patient in this population in this stratum.)
1672         */
1673        public MeasureReportGroupStratifierGroupPopulationComponent setPatientsTarget(ListResource value) { 
1674          this.patientsTarget = value;
1675          return this;
1676        }
1677
1678        protected void listChildren(List<Property> childrenList) {
1679          super.listChildren(childrenList);
1680          childrenList.add(new Property("type", "code", "The type of the population.", 0, java.lang.Integer.MAX_VALUE, type));
1681          childrenList.add(new Property("count", "integer", "The number of members of the population in this stratum.", 0, java.lang.Integer.MAX_VALUE, count));
1682          childrenList.add(new Property("patients", "Reference(List)", "This element refers to a List of patient level MeasureReport resources, one for each patient in this population in this stratum.", 0, java.lang.Integer.MAX_VALUE, patients));
1683        }
1684
1685      @Override
1686      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1687        switch (hash) {
1688        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeType
1689        case 94851343: /*count*/ return this.count == null ? new Base[0] : new Base[] {this.count}; // IntegerType
1690        case 1235842574: /*patients*/ return this.patients == null ? new Base[0] : new Base[] {this.patients}; // Reference
1691        default: return super.getProperty(hash, name, checkValid);
1692        }
1693
1694      }
1695
1696      @Override
1697      public void setProperty(int hash, String name, Base value) throws FHIRException {
1698        switch (hash) {
1699        case 3575610: // type
1700          this.type = castToCode(value); // CodeType
1701          break;
1702        case 94851343: // count
1703          this.count = castToInteger(value); // IntegerType
1704          break;
1705        case 1235842574: // patients
1706          this.patients = castToReference(value); // Reference
1707          break;
1708        default: super.setProperty(hash, name, value);
1709        }
1710
1711      }
1712
1713      @Override
1714      public void setProperty(String name, Base value) throws FHIRException {
1715        if (name.equals("type"))
1716          this.type = castToCode(value); // CodeType
1717        else if (name.equals("count"))
1718          this.count = castToInteger(value); // IntegerType
1719        else if (name.equals("patients"))
1720          this.patients = castToReference(value); // Reference
1721        else
1722          super.setProperty(name, value);
1723      }
1724
1725      @Override
1726      public Base makeProperty(int hash, String name) throws FHIRException {
1727        switch (hash) {
1728        case 3575610: throw new FHIRException("Cannot make property type as it is not a complex type"); // CodeType
1729        case 94851343: throw new FHIRException("Cannot make property count as it is not a complex type"); // IntegerType
1730        case 1235842574:  return getPatients(); // Reference
1731        default: return super.makeProperty(hash, name);
1732        }
1733
1734      }
1735
1736      @Override
1737      public Base addChild(String name) throws FHIRException {
1738        if (name.equals("type")) {
1739          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.type");
1740        }
1741        else if (name.equals("count")) {
1742          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.count");
1743        }
1744        else if (name.equals("patients")) {
1745          this.patients = new Reference();
1746          return this.patients;
1747        }
1748        else
1749          return super.addChild(name);
1750      }
1751
1752      public MeasureReportGroupStratifierGroupPopulationComponent copy() {
1753        MeasureReportGroupStratifierGroupPopulationComponent dst = new MeasureReportGroupStratifierGroupPopulationComponent();
1754        copyValues(dst);
1755        dst.type = type == null ? null : type.copy();
1756        dst.count = count == null ? null : count.copy();
1757        dst.patients = patients == null ? null : patients.copy();
1758        return dst;
1759      }
1760
1761      @Override
1762      public boolean equalsDeep(Base other) {
1763        if (!super.equalsDeep(other))
1764          return false;
1765        if (!(other instanceof MeasureReportGroupStratifierGroupPopulationComponent))
1766          return false;
1767        MeasureReportGroupStratifierGroupPopulationComponent o = (MeasureReportGroupStratifierGroupPopulationComponent) other;
1768        return compareDeep(type, o.type, true) && compareDeep(count, o.count, true) && compareDeep(patients, o.patients, true)
1769          ;
1770      }
1771
1772      @Override
1773      public boolean equalsShallow(Base other) {
1774        if (!super.equalsShallow(other))
1775          return false;
1776        if (!(other instanceof MeasureReportGroupStratifierGroupPopulationComponent))
1777          return false;
1778        MeasureReportGroupStratifierGroupPopulationComponent o = (MeasureReportGroupStratifierGroupPopulationComponent) other;
1779        return compareValues(type, o.type, true) && compareValues(count, o.count, true);
1780      }
1781
1782      public boolean isEmpty() {
1783        return super.isEmpty() && (type == null || type.isEmpty()) && (count == null || count.isEmpty())
1784           && (patients == null || patients.isEmpty());
1785      }
1786
1787  public String fhirType() {
1788    return "MeasureReport.group.stratifier.group.population";
1789
1790  }
1791
1792  }
1793
1794    @Block()
1795    public static class MeasureReportGroupSupplementalDataComponent extends BackboneElement implements IBaseBackboneElement {
1796        /**
1797         * The identifier of the supplemental data element as defined in the measure.
1798         */
1799        @Child(name = "identifier", type = {Identifier.class}, order=1, min=1, max=1, modifier=false, summary=true)
1800        @Description(shortDefinition="Identifier of the supplemental data element", formalDefinition="The identifier of the supplemental data element as defined in the measure." )
1801        protected Identifier identifier;
1802
1803        /**
1804         * This element contains the results for a single value within the supplemental data. For example, when reporting supplemental data for administrative gender, there will be four groups, one for each possible gender value.
1805         */
1806        @Child(name = "group", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1807        @Description(shortDefinition="Supplemental data results, one for each unique supplemental data value", formalDefinition="This element contains the results for a single value within the supplemental data. For example, when reporting supplemental data for administrative gender, there will be four groups, one for each possible gender value." )
1808        protected List<MeasureReportGroupSupplementalDataGroupComponent> group;
1809
1810        private static final long serialVersionUID = -1254392714L;
1811
1812    /**
1813     * Constructor
1814     */
1815      public MeasureReportGroupSupplementalDataComponent() {
1816        super();
1817      }
1818
1819    /**
1820     * Constructor
1821     */
1822      public MeasureReportGroupSupplementalDataComponent(Identifier identifier) {
1823        super();
1824        this.identifier = identifier;
1825      }
1826
1827        /**
1828         * @return {@link #identifier} (The identifier of the supplemental data element as defined in the measure.)
1829         */
1830        public Identifier getIdentifier() { 
1831          if (this.identifier == null)
1832            if (Configuration.errorOnAutoCreate())
1833              throw new Error("Attempt to auto-create MeasureReportGroupSupplementalDataComponent.identifier");
1834            else if (Configuration.doAutoCreate())
1835              this.identifier = new Identifier(); // cc
1836          return this.identifier;
1837        }
1838
1839        public boolean hasIdentifier() { 
1840          return this.identifier != null && !this.identifier.isEmpty();
1841        }
1842
1843        /**
1844         * @param value {@link #identifier} (The identifier of the supplemental data element as defined in the measure.)
1845         */
1846        public MeasureReportGroupSupplementalDataComponent setIdentifier(Identifier value) { 
1847          this.identifier = value;
1848          return this;
1849        }
1850
1851        /**
1852         * @return {@link #group} (This element contains the results for a single value within the supplemental data. For example, when reporting supplemental data for administrative gender, there will be four groups, one for each possible gender value.)
1853         */
1854        public List<MeasureReportGroupSupplementalDataGroupComponent> getGroup() { 
1855          if (this.group == null)
1856            this.group = new ArrayList<MeasureReportGroupSupplementalDataGroupComponent>();
1857          return this.group;
1858        }
1859
1860        public boolean hasGroup() { 
1861          if (this.group == null)
1862            return false;
1863          for (MeasureReportGroupSupplementalDataGroupComponent item : this.group)
1864            if (!item.isEmpty())
1865              return true;
1866          return false;
1867        }
1868
1869        /**
1870         * @return {@link #group} (This element contains the results for a single value within the supplemental data. For example, when reporting supplemental data for administrative gender, there will be four groups, one for each possible gender value.)
1871         */
1872    // syntactic sugar
1873        public MeasureReportGroupSupplementalDataGroupComponent addGroup() { //3
1874          MeasureReportGroupSupplementalDataGroupComponent t = new MeasureReportGroupSupplementalDataGroupComponent();
1875          if (this.group == null)
1876            this.group = new ArrayList<MeasureReportGroupSupplementalDataGroupComponent>();
1877          this.group.add(t);
1878          return t;
1879        }
1880
1881    // syntactic sugar
1882        public MeasureReportGroupSupplementalDataComponent addGroup(MeasureReportGroupSupplementalDataGroupComponent t) { //3
1883          if (t == null)
1884            return this;
1885          if (this.group == null)
1886            this.group = new ArrayList<MeasureReportGroupSupplementalDataGroupComponent>();
1887          this.group.add(t);
1888          return this;
1889        }
1890
1891        protected void listChildren(List<Property> childrenList) {
1892          super.listChildren(childrenList);
1893          childrenList.add(new Property("identifier", "Identifier", "The identifier of the supplemental data element as defined in the measure.", 0, java.lang.Integer.MAX_VALUE, identifier));
1894          childrenList.add(new Property("group", "", "This element contains the results for a single value within the supplemental data. For example, when reporting supplemental data for administrative gender, there will be four groups, one for each possible gender value.", 0, java.lang.Integer.MAX_VALUE, group));
1895        }
1896
1897      @Override
1898      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1899        switch (hash) {
1900        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // Identifier
1901        case 98629247: /*group*/ return this.group == null ? new Base[0] : this.group.toArray(new Base[this.group.size()]); // MeasureReportGroupSupplementalDataGroupComponent
1902        default: return super.getProperty(hash, name, checkValid);
1903        }
1904
1905      }
1906
1907      @Override
1908      public void setProperty(int hash, String name, Base value) throws FHIRException {
1909        switch (hash) {
1910        case -1618432855: // identifier
1911          this.identifier = castToIdentifier(value); // Identifier
1912          break;
1913        case 98629247: // group
1914          this.getGroup().add((MeasureReportGroupSupplementalDataGroupComponent) value); // MeasureReportGroupSupplementalDataGroupComponent
1915          break;
1916        default: super.setProperty(hash, name, value);
1917        }
1918
1919      }
1920
1921      @Override
1922      public void setProperty(String name, Base value) throws FHIRException {
1923        if (name.equals("identifier"))
1924          this.identifier = castToIdentifier(value); // Identifier
1925        else if (name.equals("group"))
1926          this.getGroup().add((MeasureReportGroupSupplementalDataGroupComponent) value);
1927        else
1928          super.setProperty(name, value);
1929      }
1930
1931      @Override
1932      public Base makeProperty(int hash, String name) throws FHIRException {
1933        switch (hash) {
1934        case -1618432855:  return getIdentifier(); // Identifier
1935        case 98629247:  return addGroup(); // MeasureReportGroupSupplementalDataGroupComponent
1936        default: return super.makeProperty(hash, name);
1937        }
1938
1939      }
1940
1941      @Override
1942      public Base addChild(String name) throws FHIRException {
1943        if (name.equals("identifier")) {
1944          this.identifier = new Identifier();
1945          return this.identifier;
1946        }
1947        else if (name.equals("group")) {
1948          return addGroup();
1949        }
1950        else
1951          return super.addChild(name);
1952      }
1953
1954      public MeasureReportGroupSupplementalDataComponent copy() {
1955        MeasureReportGroupSupplementalDataComponent dst = new MeasureReportGroupSupplementalDataComponent();
1956        copyValues(dst);
1957        dst.identifier = identifier == null ? null : identifier.copy();
1958        if (group != null) {
1959          dst.group = new ArrayList<MeasureReportGroupSupplementalDataGroupComponent>();
1960          for (MeasureReportGroupSupplementalDataGroupComponent i : group)
1961            dst.group.add(i.copy());
1962        };
1963        return dst;
1964      }
1965
1966      @Override
1967      public boolean equalsDeep(Base other) {
1968        if (!super.equalsDeep(other))
1969          return false;
1970        if (!(other instanceof MeasureReportGroupSupplementalDataComponent))
1971          return false;
1972        MeasureReportGroupSupplementalDataComponent o = (MeasureReportGroupSupplementalDataComponent) other;
1973        return compareDeep(identifier, o.identifier, true) && compareDeep(group, o.group, true);
1974      }
1975
1976      @Override
1977      public boolean equalsShallow(Base other) {
1978        if (!super.equalsShallow(other))
1979          return false;
1980        if (!(other instanceof MeasureReportGroupSupplementalDataComponent))
1981          return false;
1982        MeasureReportGroupSupplementalDataComponent o = (MeasureReportGroupSupplementalDataComponent) other;
1983        return true;
1984      }
1985
1986      public boolean isEmpty() {
1987        return super.isEmpty() && (identifier == null || identifier.isEmpty()) && (group == null || group.isEmpty())
1988          ;
1989      }
1990
1991  public String fhirType() {
1992    return "MeasureReport.group.supplementalData";
1993
1994  }
1995
1996  }
1997
1998    @Block()
1999    public static class MeasureReportGroupSupplementalDataGroupComponent extends BackboneElement implements IBaseBackboneElement {
2000        /**
2001         * The value for this supplemental data element, expressed as a string.  When defining supplemental data  on complex values, the value must be rendered such that the value for each group within the supplemental data element is unique.
2002         */
2003        @Child(name = "value", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
2004        @Description(shortDefinition="The data value, e.g. male", formalDefinition="The value for this supplemental data element, expressed as a string.  When defining supplemental data  on complex values, the value must be rendered such that the value for each group within the supplemental data element is unique." )
2005        protected StringType value;
2006
2007        /**
2008         * The number of members in the supplemental data group.
2009         */
2010        @Child(name = "count", type = {IntegerType.class}, order=2, min=0, max=1, modifier=false, summary=true)
2011        @Description(shortDefinition="Number of members in the group", formalDefinition="The number of members in the supplemental data group." )
2012        protected IntegerType count;
2013
2014        /**
2015         * This element refers to a List of patient level MeasureReport resources, one for each patient in this population.
2016         */
2017        @Child(name = "patients", type = {ListResource.class}, order=3, min=0, max=1, modifier=false, summary=true)
2018        @Description(shortDefinition="For patient-list reports, the patients in this population", formalDefinition="This element refers to a List of patient level MeasureReport resources, one for each patient in this population." )
2019        protected Reference patients;
2020
2021        /**
2022         * The actual object that is the target of the reference (This element refers to a List of patient level MeasureReport resources, one for each patient in this population.)
2023         */
2024        protected ListResource patientsTarget;
2025
2026        private static final long serialVersionUID = 1011446829L;
2027
2028    /**
2029     * Constructor
2030     */
2031      public MeasureReportGroupSupplementalDataGroupComponent() {
2032        super();
2033      }
2034
2035    /**
2036     * Constructor
2037     */
2038      public MeasureReportGroupSupplementalDataGroupComponent(StringType value) {
2039        super();
2040        this.value = value;
2041      }
2042
2043        /**
2044         * @return {@link #value} (The value for this supplemental data element, expressed as a string.  When defining supplemental data  on complex values, the value must be rendered such that the value for each group within the supplemental data element is unique.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
2045         */
2046        public StringType getValueElement() { 
2047          if (this.value == null)
2048            if (Configuration.errorOnAutoCreate())
2049              throw new Error("Attempt to auto-create MeasureReportGroupSupplementalDataGroupComponent.value");
2050            else if (Configuration.doAutoCreate())
2051              this.value = new StringType(); // bb
2052          return this.value;
2053        }
2054
2055        public boolean hasValueElement() { 
2056          return this.value != null && !this.value.isEmpty();
2057        }
2058
2059        public boolean hasValue() { 
2060          return this.value != null && !this.value.isEmpty();
2061        }
2062
2063        /**
2064         * @param value {@link #value} (The value for this supplemental data element, expressed as a string.  When defining supplemental data  on complex values, the value must be rendered such that the value for each group within the supplemental data element is unique.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
2065         */
2066        public MeasureReportGroupSupplementalDataGroupComponent setValueElement(StringType value) { 
2067          this.value = value;
2068          return this;
2069        }
2070
2071        /**
2072         * @return The value for this supplemental data element, expressed as a string.  When defining supplemental data  on complex values, the value must be rendered such that the value for each group within the supplemental data element is unique.
2073         */
2074        public String getValue() { 
2075          return this.value == null ? null : this.value.getValue();
2076        }
2077
2078        /**
2079         * @param value The value for this supplemental data element, expressed as a string.  When defining supplemental data  on complex values, the value must be rendered such that the value for each group within the supplemental data element is unique.
2080         */
2081        public MeasureReportGroupSupplementalDataGroupComponent setValue(String value) { 
2082            if (this.value == null)
2083              this.value = new StringType();
2084            this.value.setValue(value);
2085          return this;
2086        }
2087
2088        /**
2089         * @return {@link #count} (The number of members in the supplemental data group.). This is the underlying object with id, value and extensions. The accessor "getCount" gives direct access to the value
2090         */
2091        public IntegerType getCountElement() { 
2092          if (this.count == null)
2093            if (Configuration.errorOnAutoCreate())
2094              throw new Error("Attempt to auto-create MeasureReportGroupSupplementalDataGroupComponent.count");
2095            else if (Configuration.doAutoCreate())
2096              this.count = new IntegerType(); // bb
2097          return this.count;
2098        }
2099
2100        public boolean hasCountElement() { 
2101          return this.count != null && !this.count.isEmpty();
2102        }
2103
2104        public boolean hasCount() { 
2105          return this.count != null && !this.count.isEmpty();
2106        }
2107
2108        /**
2109         * @param value {@link #count} (The number of members in the supplemental data group.). This is the underlying object with id, value and extensions. The accessor "getCount" gives direct access to the value
2110         */
2111        public MeasureReportGroupSupplementalDataGroupComponent setCountElement(IntegerType value) { 
2112          this.count = value;
2113          return this;
2114        }
2115
2116        /**
2117         * @return The number of members in the supplemental data group.
2118         */
2119        public int getCount() { 
2120          return this.count == null || this.count.isEmpty() ? 0 : this.count.getValue();
2121        }
2122
2123        /**
2124         * @param value The number of members in the supplemental data group.
2125         */
2126        public MeasureReportGroupSupplementalDataGroupComponent setCount(int value) { 
2127            if (this.count == null)
2128              this.count = new IntegerType();
2129            this.count.setValue(value);
2130          return this;
2131        }
2132
2133        /**
2134         * @return {@link #patients} (This element refers to a List of patient level MeasureReport resources, one for each patient in this population.)
2135         */
2136        public Reference getPatients() { 
2137          if (this.patients == null)
2138            if (Configuration.errorOnAutoCreate())
2139              throw new Error("Attempt to auto-create MeasureReportGroupSupplementalDataGroupComponent.patients");
2140            else if (Configuration.doAutoCreate())
2141              this.patients = new Reference(); // cc
2142          return this.patients;
2143        }
2144
2145        public boolean hasPatients() { 
2146          return this.patients != null && !this.patients.isEmpty();
2147        }
2148
2149        /**
2150         * @param value {@link #patients} (This element refers to a List of patient level MeasureReport resources, one for each patient in this population.)
2151         */
2152        public MeasureReportGroupSupplementalDataGroupComponent setPatients(Reference value) { 
2153          this.patients = value;
2154          return this;
2155        }
2156
2157        /**
2158         * @return {@link #patients} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (This element refers to a List of patient level MeasureReport resources, one for each patient in this population.)
2159         */
2160        public ListResource getPatientsTarget() { 
2161          if (this.patientsTarget == null)
2162            if (Configuration.errorOnAutoCreate())
2163              throw new Error("Attempt to auto-create MeasureReportGroupSupplementalDataGroupComponent.patients");
2164            else if (Configuration.doAutoCreate())
2165              this.patientsTarget = new ListResource(); // aa
2166          return this.patientsTarget;
2167        }
2168
2169        /**
2170         * @param value {@link #patients} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (This element refers to a List of patient level MeasureReport resources, one for each patient in this population.)
2171         */
2172        public MeasureReportGroupSupplementalDataGroupComponent setPatientsTarget(ListResource value) { 
2173          this.patientsTarget = value;
2174          return this;
2175        }
2176
2177        protected void listChildren(List<Property> childrenList) {
2178          super.listChildren(childrenList);
2179          childrenList.add(new Property("value", "string", "The value for this supplemental data element, expressed as a string.  When defining supplemental data  on complex values, the value must be rendered such that the value for each group within the supplemental data element is unique.", 0, java.lang.Integer.MAX_VALUE, value));
2180          childrenList.add(new Property("count", "integer", "The number of members in the supplemental data group.", 0, java.lang.Integer.MAX_VALUE, count));
2181          childrenList.add(new Property("patients", "Reference(List)", "This element refers to a List of patient level MeasureReport resources, one for each patient in this population.", 0, java.lang.Integer.MAX_VALUE, patients));
2182        }
2183
2184      @Override
2185      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2186        switch (hash) {
2187        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
2188        case 94851343: /*count*/ return this.count == null ? new Base[0] : new Base[] {this.count}; // IntegerType
2189        case 1235842574: /*patients*/ return this.patients == null ? new Base[0] : new Base[] {this.patients}; // Reference
2190        default: return super.getProperty(hash, name, checkValid);
2191        }
2192
2193      }
2194
2195      @Override
2196      public void setProperty(int hash, String name, Base value) throws FHIRException {
2197        switch (hash) {
2198        case 111972721: // value
2199          this.value = castToString(value); // StringType
2200          break;
2201        case 94851343: // count
2202          this.count = castToInteger(value); // IntegerType
2203          break;
2204        case 1235842574: // patients
2205          this.patients = castToReference(value); // Reference
2206          break;
2207        default: super.setProperty(hash, name, value);
2208        }
2209
2210      }
2211
2212      @Override
2213      public void setProperty(String name, Base value) throws FHIRException {
2214        if (name.equals("value"))
2215          this.value = castToString(value); // StringType
2216        else if (name.equals("count"))
2217          this.count = castToInteger(value); // IntegerType
2218        else if (name.equals("patients"))
2219          this.patients = castToReference(value); // Reference
2220        else
2221          super.setProperty(name, value);
2222      }
2223
2224      @Override
2225      public Base makeProperty(int hash, String name) throws FHIRException {
2226        switch (hash) {
2227        case 111972721: throw new FHIRException("Cannot make property value as it is not a complex type"); // StringType
2228        case 94851343: throw new FHIRException("Cannot make property count as it is not a complex type"); // IntegerType
2229        case 1235842574:  return getPatients(); // Reference
2230        default: return super.makeProperty(hash, name);
2231        }
2232
2233      }
2234
2235      @Override
2236      public Base addChild(String name) throws FHIRException {
2237        if (name.equals("value")) {
2238          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.value");
2239        }
2240        else if (name.equals("count")) {
2241          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.count");
2242        }
2243        else if (name.equals("patients")) {
2244          this.patients = new Reference();
2245          return this.patients;
2246        }
2247        else
2248          return super.addChild(name);
2249      }
2250
2251      public MeasureReportGroupSupplementalDataGroupComponent copy() {
2252        MeasureReportGroupSupplementalDataGroupComponent dst = new MeasureReportGroupSupplementalDataGroupComponent();
2253        copyValues(dst);
2254        dst.value = value == null ? null : value.copy();
2255        dst.count = count == null ? null : count.copy();
2256        dst.patients = patients == null ? null : patients.copy();
2257        return dst;
2258      }
2259
2260      @Override
2261      public boolean equalsDeep(Base other) {
2262        if (!super.equalsDeep(other))
2263          return false;
2264        if (!(other instanceof MeasureReportGroupSupplementalDataGroupComponent))
2265          return false;
2266        MeasureReportGroupSupplementalDataGroupComponent o = (MeasureReportGroupSupplementalDataGroupComponent) other;
2267        return compareDeep(value, o.value, true) && compareDeep(count, o.count, true) && compareDeep(patients, o.patients, true)
2268          ;
2269      }
2270
2271      @Override
2272      public boolean equalsShallow(Base other) {
2273        if (!super.equalsShallow(other))
2274          return false;
2275        if (!(other instanceof MeasureReportGroupSupplementalDataGroupComponent))
2276          return false;
2277        MeasureReportGroupSupplementalDataGroupComponent o = (MeasureReportGroupSupplementalDataGroupComponent) other;
2278        return compareValues(value, o.value, true) && compareValues(count, o.count, true);
2279      }
2280
2281      public boolean isEmpty() {
2282        return super.isEmpty() && (value == null || value.isEmpty()) && (count == null || count.isEmpty())
2283           && (patients == null || patients.isEmpty());
2284      }
2285
2286  public String fhirType() {
2287    return "MeasureReport.group.supplementalData.group";
2288
2289  }
2290
2291  }
2292
2293    /**
2294     * A reference to the Measure that was evaluated to produce this report.
2295     */
2296    @Child(name = "measure", type = {Measure.class}, order=0, min=1, max=1, modifier=false, summary=true)
2297    @Description(shortDefinition="Measure that was evaluated", formalDefinition="A reference to the Measure that was evaluated to produce this report." )
2298    protected Reference measure;
2299
2300    /**
2301     * The actual object that is the target of the reference (A reference to the Measure that was evaluated to produce this report.)
2302     */
2303    protected Measure measureTarget;
2304
2305    /**
2306     * The type of measure report. This may be an individual report, which provides a single patient's score for the measure, a patient listing, which returns the list of patients that meet the various criteria in the measure, or a summary report, which returns a population count for each criteria in the measure.
2307     */
2308    @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
2309    @Description(shortDefinition="individual | patient-list | summary", formalDefinition="The type of measure report. This may be an individual report, which provides a single patient's score for the measure, a patient listing, which returns the list of patients that meet the various criteria in the measure, or a summary report, which returns a population count for each criteria in the measure." )
2310    protected Enumeration<MeasureReportType> type;
2311
2312    /**
2313     * Optional Patient if the report was requested for a single patient.
2314     */
2315    @Child(name = "patient", type = {Patient.class}, order=2, min=0, max=1, modifier=false, summary=true)
2316    @Description(shortDefinition="Optional Patient", formalDefinition="Optional Patient if the report was requested for a single patient." )
2317    protected Reference patient;
2318
2319    /**
2320     * The actual object that is the target of the reference (Optional Patient if the report was requested for a single patient.)
2321     */
2322    protected Patient patientTarget;
2323
2324    /**
2325     * The reporting period for which the report was calculated.
2326     */
2327    @Child(name = "period", type = {Period.class}, order=3, min=1, max=1, modifier=false, summary=true)
2328    @Description(shortDefinition="Reporting period", formalDefinition="The reporting period for which the report was calculated." )
2329    protected Period period;
2330
2331    /**
2332     * The report status. No data will be available until the report status is complete.
2333     */
2334    @Child(name = "status", type = {CodeType.class}, order=4, min=1, max=1, modifier=false, summary=true)
2335    @Description(shortDefinition="complete | pending | error", formalDefinition="The report status. No data will be available until the report status is complete." )
2336    protected Enumeration<MeasureReportStatus> status;
2337
2338    /**
2339     * The date this measure report was generated.
2340     */
2341    @Child(name = "date", type = {DateTimeType.class}, order=5, min=0, max=1, modifier=false, summary=true)
2342    @Description(shortDefinition="Date the report was generated", formalDefinition="The date this measure report was generated." )
2343    protected DateTimeType date;
2344
2345    /**
2346     * Reporting Organization.
2347     */
2348    @Child(name = "reportingOrganization", type = {Organization.class}, order=6, min=0, max=1, modifier=false, summary=true)
2349    @Description(shortDefinition="Reporting Organization", formalDefinition="Reporting Organization." )
2350    protected Reference reportingOrganization;
2351
2352    /**
2353     * The actual object that is the target of the reference (Reporting Organization.)
2354     */
2355    protected Organization reportingOrganizationTarget;
2356
2357    /**
2358     * The results of the calculation, one for each population group in the measure.
2359     */
2360    @Child(name = "group", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2361    @Description(shortDefinition="Measure results for each group", formalDefinition="The results of the calculation, one for each population group in the measure." )
2362    protected List<MeasureReportGroupComponent> group;
2363
2364    /**
2365     * A reference to a Bundle containing the Resources that were used in the evaluation of this report.
2366     */
2367    @Child(name = "evaluatedResources", type = {Bundle.class}, order=8, min=0, max=1, modifier=false, summary=true)
2368    @Description(shortDefinition="Evaluated Resources", formalDefinition="A reference to a Bundle containing the Resources that were used in the evaluation of this report." )
2369    protected Reference evaluatedResources;
2370
2371    /**
2372     * The actual object that is the target of the reference (A reference to a Bundle containing the Resources that were used in the evaluation of this report.)
2373     */
2374    protected Bundle evaluatedResourcesTarget;
2375
2376    private static final long serialVersionUID = -891268298L;
2377
2378  /**
2379   * Constructor
2380   */
2381    public MeasureReport() {
2382      super();
2383    }
2384
2385  /**
2386   * Constructor
2387   */
2388    public MeasureReport(Reference measure, Enumeration<MeasureReportType> type, Period period, Enumeration<MeasureReportStatus> status) {
2389      super();
2390      this.measure = measure;
2391      this.type = type;
2392      this.period = period;
2393      this.status = status;
2394    }
2395
2396    /**
2397     * @return {@link #measure} (A reference to the Measure that was evaluated to produce this report.)
2398     */
2399    public Reference getMeasure() { 
2400      if (this.measure == null)
2401        if (Configuration.errorOnAutoCreate())
2402          throw new Error("Attempt to auto-create MeasureReport.measure");
2403        else if (Configuration.doAutoCreate())
2404          this.measure = new Reference(); // cc
2405      return this.measure;
2406    }
2407
2408    public boolean hasMeasure() { 
2409      return this.measure != null && !this.measure.isEmpty();
2410    }
2411
2412    /**
2413     * @param value {@link #measure} (A reference to the Measure that was evaluated to produce this report.)
2414     */
2415    public MeasureReport setMeasure(Reference value) { 
2416      this.measure = value;
2417      return this;
2418    }
2419
2420    /**
2421     * @return {@link #measure} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (A reference to the Measure that was evaluated to produce this report.)
2422     */
2423    public Measure getMeasureTarget() { 
2424      if (this.measureTarget == null)
2425        if (Configuration.errorOnAutoCreate())
2426          throw new Error("Attempt to auto-create MeasureReport.measure");
2427        else if (Configuration.doAutoCreate())
2428          this.measureTarget = new Measure(); // aa
2429      return this.measureTarget;
2430    }
2431
2432    /**
2433     * @param value {@link #measure} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (A reference to the Measure that was evaluated to produce this report.)
2434     */
2435    public MeasureReport setMeasureTarget(Measure value) { 
2436      this.measureTarget = value;
2437      return this;
2438    }
2439
2440    /**
2441     * @return {@link #type} (The type of measure report. This may be an individual report, which provides a single patient's score for the measure, a patient listing, which returns the list of patients that meet the various criteria in the measure, or a summary report, which returns a population count for each criteria in the measure.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
2442     */
2443    public Enumeration<MeasureReportType> getTypeElement() { 
2444      if (this.type == null)
2445        if (Configuration.errorOnAutoCreate())
2446          throw new Error("Attempt to auto-create MeasureReport.type");
2447        else if (Configuration.doAutoCreate())
2448          this.type = new Enumeration<MeasureReportType>(new MeasureReportTypeEnumFactory()); // bb
2449      return this.type;
2450    }
2451
2452    public boolean hasTypeElement() { 
2453      return this.type != null && !this.type.isEmpty();
2454    }
2455
2456    public boolean hasType() { 
2457      return this.type != null && !this.type.isEmpty();
2458    }
2459
2460    /**
2461     * @param value {@link #type} (The type of measure report. This may be an individual report, which provides a single patient's score for the measure, a patient listing, which returns the list of patients that meet the various criteria in the measure, or a summary report, which returns a population count for each criteria in the measure.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
2462     */
2463    public MeasureReport setTypeElement(Enumeration<MeasureReportType> value) { 
2464      this.type = value;
2465      return this;
2466    }
2467
2468    /**
2469     * @return The type of measure report. This may be an individual report, which provides a single patient's score for the measure, a patient listing, which returns the list of patients that meet the various criteria in the measure, or a summary report, which returns a population count for each criteria in the measure.
2470     */
2471    public MeasureReportType getType() { 
2472      return this.type == null ? null : this.type.getValue();
2473    }
2474
2475    /**
2476     * @param value The type of measure report. This may be an individual report, which provides a single patient's score for the measure, a patient listing, which returns the list of patients that meet the various criteria in the measure, or a summary report, which returns a population count for each criteria in the measure.
2477     */
2478    public MeasureReport setType(MeasureReportType value) { 
2479        if (this.type == null)
2480          this.type = new Enumeration<MeasureReportType>(new MeasureReportTypeEnumFactory());
2481        this.type.setValue(value);
2482      return this;
2483    }
2484
2485    /**
2486     * @return {@link #patient} (Optional Patient if the report was requested for a single patient.)
2487     */
2488    public Reference getPatient() { 
2489      if (this.patient == null)
2490        if (Configuration.errorOnAutoCreate())
2491          throw new Error("Attempt to auto-create MeasureReport.patient");
2492        else if (Configuration.doAutoCreate())
2493          this.patient = new Reference(); // cc
2494      return this.patient;
2495    }
2496
2497    public boolean hasPatient() { 
2498      return this.patient != null && !this.patient.isEmpty();
2499    }
2500
2501    /**
2502     * @param value {@link #patient} (Optional Patient if the report was requested for a single patient.)
2503     */
2504    public MeasureReport setPatient(Reference value) { 
2505      this.patient = value;
2506      return this;
2507    }
2508
2509    /**
2510     * @return {@link #patient} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Optional Patient if the report was requested for a single patient.)
2511     */
2512    public Patient getPatientTarget() { 
2513      if (this.patientTarget == null)
2514        if (Configuration.errorOnAutoCreate())
2515          throw new Error("Attempt to auto-create MeasureReport.patient");
2516        else if (Configuration.doAutoCreate())
2517          this.patientTarget = new Patient(); // aa
2518      return this.patientTarget;
2519    }
2520
2521    /**
2522     * @param value {@link #patient} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Optional Patient if the report was requested for a single patient.)
2523     */
2524    public MeasureReport setPatientTarget(Patient value) { 
2525      this.patientTarget = value;
2526      return this;
2527    }
2528
2529    /**
2530     * @return {@link #period} (The reporting period for which the report was calculated.)
2531     */
2532    public Period getPeriod() { 
2533      if (this.period == null)
2534        if (Configuration.errorOnAutoCreate())
2535          throw new Error("Attempt to auto-create MeasureReport.period");
2536        else if (Configuration.doAutoCreate())
2537          this.period = new Period(); // cc
2538      return this.period;
2539    }
2540
2541    public boolean hasPeriod() { 
2542      return this.period != null && !this.period.isEmpty();
2543    }
2544
2545    /**
2546     * @param value {@link #period} (The reporting period for which the report was calculated.)
2547     */
2548    public MeasureReport setPeriod(Period value) { 
2549      this.period = value;
2550      return this;
2551    }
2552
2553    /**
2554     * @return {@link #status} (The report status. No data will be available until the report status is complete.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2555     */
2556    public Enumeration<MeasureReportStatus> getStatusElement() { 
2557      if (this.status == null)
2558        if (Configuration.errorOnAutoCreate())
2559          throw new Error("Attempt to auto-create MeasureReport.status");
2560        else if (Configuration.doAutoCreate())
2561          this.status = new Enumeration<MeasureReportStatus>(new MeasureReportStatusEnumFactory()); // bb
2562      return this.status;
2563    }
2564
2565    public boolean hasStatusElement() { 
2566      return this.status != null && !this.status.isEmpty();
2567    }
2568
2569    public boolean hasStatus() { 
2570      return this.status != null && !this.status.isEmpty();
2571    }
2572
2573    /**
2574     * @param value {@link #status} (The report status. No data will be available until the report status is complete.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2575     */
2576    public MeasureReport setStatusElement(Enumeration<MeasureReportStatus> value) { 
2577      this.status = value;
2578      return this;
2579    }
2580
2581    /**
2582     * @return The report status. No data will be available until the report status is complete.
2583     */
2584    public MeasureReportStatus getStatus() { 
2585      return this.status == null ? null : this.status.getValue();
2586    }
2587
2588    /**
2589     * @param value The report status. No data will be available until the report status is complete.
2590     */
2591    public MeasureReport setStatus(MeasureReportStatus value) { 
2592        if (this.status == null)
2593          this.status = new Enumeration<MeasureReportStatus>(new MeasureReportStatusEnumFactory());
2594        this.status.setValue(value);
2595      return this;
2596    }
2597
2598    /**
2599     * @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
2600     */
2601    public DateTimeType getDateElement() { 
2602      if (this.date == null)
2603        if (Configuration.errorOnAutoCreate())
2604          throw new Error("Attempt to auto-create MeasureReport.date");
2605        else if (Configuration.doAutoCreate())
2606          this.date = new DateTimeType(); // bb
2607      return this.date;
2608    }
2609
2610    public boolean hasDateElement() { 
2611      return this.date != null && !this.date.isEmpty();
2612    }
2613
2614    public boolean hasDate() { 
2615      return this.date != null && !this.date.isEmpty();
2616    }
2617
2618    /**
2619     * @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
2620     */
2621    public MeasureReport setDateElement(DateTimeType value) { 
2622      this.date = value;
2623      return this;
2624    }
2625
2626    /**
2627     * @return The date this measure report was generated.
2628     */
2629    public Date getDate() { 
2630      return this.date == null ? null : this.date.getValue();
2631    }
2632
2633    /**
2634     * @param value The date this measure report was generated.
2635     */
2636    public MeasureReport setDate(Date value) { 
2637      if (value == null)
2638        this.date = null;
2639      else {
2640        if (this.date == null)
2641          this.date = new DateTimeType();
2642        this.date.setValue(value);
2643      }
2644      return this;
2645    }
2646
2647    /**
2648     * @return {@link #reportingOrganization} (Reporting Organization.)
2649     */
2650    public Reference getReportingOrganization() { 
2651      if (this.reportingOrganization == null)
2652        if (Configuration.errorOnAutoCreate())
2653          throw new Error("Attempt to auto-create MeasureReport.reportingOrganization");
2654        else if (Configuration.doAutoCreate())
2655          this.reportingOrganization = new Reference(); // cc
2656      return this.reportingOrganization;
2657    }
2658
2659    public boolean hasReportingOrganization() { 
2660      return this.reportingOrganization != null && !this.reportingOrganization.isEmpty();
2661    }
2662
2663    /**
2664     * @param value {@link #reportingOrganization} (Reporting Organization.)
2665     */
2666    public MeasureReport setReportingOrganization(Reference value) { 
2667      this.reportingOrganization = value;
2668      return this;
2669    }
2670
2671    /**
2672     * @return {@link #reportingOrganization} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Reporting Organization.)
2673     */
2674    public Organization getReportingOrganizationTarget() { 
2675      if (this.reportingOrganizationTarget == null)
2676        if (Configuration.errorOnAutoCreate())
2677          throw new Error("Attempt to auto-create MeasureReport.reportingOrganization");
2678        else if (Configuration.doAutoCreate())
2679          this.reportingOrganizationTarget = new Organization(); // aa
2680      return this.reportingOrganizationTarget;
2681    }
2682
2683    /**
2684     * @param value {@link #reportingOrganization} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Reporting Organization.)
2685     */
2686    public MeasureReport setReportingOrganizationTarget(Organization value) { 
2687      this.reportingOrganizationTarget = value;
2688      return this;
2689    }
2690
2691    /**
2692     * @return {@link #group} (The results of the calculation, one for each population group in the measure.)
2693     */
2694    public List<MeasureReportGroupComponent> getGroup() { 
2695      if (this.group == null)
2696        this.group = new ArrayList<MeasureReportGroupComponent>();
2697      return this.group;
2698    }
2699
2700    public boolean hasGroup() { 
2701      if (this.group == null)
2702        return false;
2703      for (MeasureReportGroupComponent item : this.group)
2704        if (!item.isEmpty())
2705          return true;
2706      return false;
2707    }
2708
2709    /**
2710     * @return {@link #group} (The results of the calculation, one for each population group in the measure.)
2711     */
2712    // syntactic sugar
2713    public MeasureReportGroupComponent addGroup() { //3
2714      MeasureReportGroupComponent t = new MeasureReportGroupComponent();
2715      if (this.group == null)
2716        this.group = new ArrayList<MeasureReportGroupComponent>();
2717      this.group.add(t);
2718      return t;
2719    }
2720
2721    // syntactic sugar
2722    public MeasureReport addGroup(MeasureReportGroupComponent t) { //3
2723      if (t == null)
2724        return this;
2725      if (this.group == null)
2726        this.group = new ArrayList<MeasureReportGroupComponent>();
2727      this.group.add(t);
2728      return this;
2729    }
2730
2731    /**
2732     * @return {@link #evaluatedResources} (A reference to a Bundle containing the Resources that were used in the evaluation of this report.)
2733     */
2734    public Reference getEvaluatedResources() { 
2735      if (this.evaluatedResources == null)
2736        if (Configuration.errorOnAutoCreate())
2737          throw new Error("Attempt to auto-create MeasureReport.evaluatedResources");
2738        else if (Configuration.doAutoCreate())
2739          this.evaluatedResources = new Reference(); // cc
2740      return this.evaluatedResources;
2741    }
2742
2743    public boolean hasEvaluatedResources() { 
2744      return this.evaluatedResources != null && !this.evaluatedResources.isEmpty();
2745    }
2746
2747    /**
2748     * @param value {@link #evaluatedResources} (A reference to a Bundle containing the Resources that were used in the evaluation of this report.)
2749     */
2750    public MeasureReport setEvaluatedResources(Reference value) { 
2751      this.evaluatedResources = value;
2752      return this;
2753    }
2754
2755    /**
2756     * @return {@link #evaluatedResources} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (A reference to a Bundle containing the Resources that were used in the evaluation of this report.)
2757     */
2758    public Bundle getEvaluatedResourcesTarget() { 
2759      if (this.evaluatedResourcesTarget == null)
2760        if (Configuration.errorOnAutoCreate())
2761          throw new Error("Attempt to auto-create MeasureReport.evaluatedResources");
2762        else if (Configuration.doAutoCreate())
2763          this.evaluatedResourcesTarget = new Bundle(); // aa
2764      return this.evaluatedResourcesTarget;
2765    }
2766
2767    /**
2768     * @param value {@link #evaluatedResources} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (A reference to a Bundle containing the Resources that were used in the evaluation of this report.)
2769     */
2770    public MeasureReport setEvaluatedResourcesTarget(Bundle value) { 
2771      this.evaluatedResourcesTarget = value;
2772      return this;
2773    }
2774
2775      protected void listChildren(List<Property> childrenList) {
2776        super.listChildren(childrenList);
2777        childrenList.add(new Property("measure", "Reference(Measure)", "A reference to the Measure that was evaluated to produce this report.", 0, java.lang.Integer.MAX_VALUE, measure));
2778        childrenList.add(new Property("type", "code", "The type of measure report. This may be an individual report, which provides a single patient's score for the measure, a patient listing, which returns the list of patients that meet the various criteria in the measure, or a summary report, which returns a population count for each criteria in the measure.", 0, java.lang.Integer.MAX_VALUE, type));
2779        childrenList.add(new Property("patient", "Reference(Patient)", "Optional Patient if the report was requested for a single patient.", 0, java.lang.Integer.MAX_VALUE, patient));
2780        childrenList.add(new Property("period", "Period", "The reporting period for which the report was calculated.", 0, java.lang.Integer.MAX_VALUE, period));
2781        childrenList.add(new Property("status", "code", "The report status. No data will be available until the report status is complete.", 0, java.lang.Integer.MAX_VALUE, status));
2782        childrenList.add(new Property("date", "dateTime", "The date this measure report was generated.", 0, java.lang.Integer.MAX_VALUE, date));
2783        childrenList.add(new Property("reportingOrganization", "Reference(Organization)", "Reporting Organization.", 0, java.lang.Integer.MAX_VALUE, reportingOrganization));
2784        childrenList.add(new Property("group", "", "The results of the calculation, one for each population group in the measure.", 0, java.lang.Integer.MAX_VALUE, group));
2785        childrenList.add(new Property("evaluatedResources", "Reference(Bundle)", "A reference to a Bundle containing the Resources that were used in the evaluation of this report.", 0, java.lang.Integer.MAX_VALUE, evaluatedResources));
2786      }
2787
2788      @Override
2789      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2790        switch (hash) {
2791        case 938321246: /*measure*/ return this.measure == null ? new Base[0] : new Base[] {this.measure}; // Reference
2792        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<MeasureReportType>
2793        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
2794        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
2795        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<MeasureReportStatus>
2796        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2797        case -2053950847: /*reportingOrganization*/ return this.reportingOrganization == null ? new Base[0] : new Base[] {this.reportingOrganization}; // Reference
2798        case 98629247: /*group*/ return this.group == null ? new Base[0] : this.group.toArray(new Base[this.group.size()]); // MeasureReportGroupComponent
2799        case 1599836026: /*evaluatedResources*/ return this.evaluatedResources == null ? new Base[0] : new Base[] {this.evaluatedResources}; // Reference
2800        default: return super.getProperty(hash, name, checkValid);
2801        }
2802
2803      }
2804
2805      @Override
2806      public void setProperty(int hash, String name, Base value) throws FHIRException {
2807        switch (hash) {
2808        case 938321246: // measure
2809          this.measure = castToReference(value); // Reference
2810          break;
2811        case 3575610: // type
2812          this.type = new MeasureReportTypeEnumFactory().fromType(value); // Enumeration<MeasureReportType>
2813          break;
2814        case -791418107: // patient
2815          this.patient = castToReference(value); // Reference
2816          break;
2817        case -991726143: // period
2818          this.period = castToPeriod(value); // Period
2819          break;
2820        case -892481550: // status
2821          this.status = new MeasureReportStatusEnumFactory().fromType(value); // Enumeration<MeasureReportStatus>
2822          break;
2823        case 3076014: // date
2824          this.date = castToDateTime(value); // DateTimeType
2825          break;
2826        case -2053950847: // reportingOrganization
2827          this.reportingOrganization = castToReference(value); // Reference
2828          break;
2829        case 98629247: // group
2830          this.getGroup().add((MeasureReportGroupComponent) value); // MeasureReportGroupComponent
2831          break;
2832        case 1599836026: // evaluatedResources
2833          this.evaluatedResources = castToReference(value); // Reference
2834          break;
2835        default: super.setProperty(hash, name, value);
2836        }
2837
2838      }
2839
2840      @Override
2841      public void setProperty(String name, Base value) throws FHIRException {
2842        if (name.equals("measure"))
2843          this.measure = castToReference(value); // Reference
2844        else if (name.equals("type"))
2845          this.type = new MeasureReportTypeEnumFactory().fromType(value); // Enumeration<MeasureReportType>
2846        else if (name.equals("patient"))
2847          this.patient = castToReference(value); // Reference
2848        else if (name.equals("period"))
2849          this.period = castToPeriod(value); // Period
2850        else if (name.equals("status"))
2851          this.status = new MeasureReportStatusEnumFactory().fromType(value); // Enumeration<MeasureReportStatus>
2852        else if (name.equals("date"))
2853          this.date = castToDateTime(value); // DateTimeType
2854        else if (name.equals("reportingOrganization"))
2855          this.reportingOrganization = castToReference(value); // Reference
2856        else if (name.equals("group"))
2857          this.getGroup().add((MeasureReportGroupComponent) value);
2858        else if (name.equals("evaluatedResources"))
2859          this.evaluatedResources = castToReference(value); // Reference
2860        else
2861          super.setProperty(name, value);
2862      }
2863
2864      @Override
2865      public Base makeProperty(int hash, String name) throws FHIRException {
2866        switch (hash) {
2867        case 938321246:  return getMeasure(); // Reference
2868        case 3575610: throw new FHIRException("Cannot make property type as it is not a complex type"); // Enumeration<MeasureReportType>
2869        case -791418107:  return getPatient(); // Reference
2870        case -991726143:  return getPeriod(); // Period
2871        case -892481550: throw new FHIRException("Cannot make property status as it is not a complex type"); // Enumeration<MeasureReportStatus>
2872        case 3076014: throw new FHIRException("Cannot make property date as it is not a complex type"); // DateTimeType
2873        case -2053950847:  return getReportingOrganization(); // Reference
2874        case 98629247:  return addGroup(); // MeasureReportGroupComponent
2875        case 1599836026:  return getEvaluatedResources(); // Reference
2876        default: return super.makeProperty(hash, name);
2877        }
2878
2879      }
2880
2881      @Override
2882      public Base addChild(String name) throws FHIRException {
2883        if (name.equals("measure")) {
2884          this.measure = new Reference();
2885          return this.measure;
2886        }
2887        else if (name.equals("type")) {
2888          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.type");
2889        }
2890        else if (name.equals("patient")) {
2891          this.patient = new Reference();
2892          return this.patient;
2893        }
2894        else if (name.equals("period")) {
2895          this.period = new Period();
2896          return this.period;
2897        }
2898        else if (name.equals("status")) {
2899          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.status");
2900        }
2901        else if (name.equals("date")) {
2902          throw new FHIRException("Cannot call addChild on a primitive type MeasureReport.date");
2903        }
2904        else if (name.equals("reportingOrganization")) {
2905          this.reportingOrganization = new Reference();
2906          return this.reportingOrganization;
2907        }
2908        else if (name.equals("group")) {
2909          return addGroup();
2910        }
2911        else if (name.equals("evaluatedResources")) {
2912          this.evaluatedResources = new Reference();
2913          return this.evaluatedResources;
2914        }
2915        else
2916          return super.addChild(name);
2917      }
2918
2919  public String fhirType() {
2920    return "MeasureReport";
2921
2922  }
2923
2924      public MeasureReport copy() {
2925        MeasureReport dst = new MeasureReport();
2926        copyValues(dst);
2927        dst.measure = measure == null ? null : measure.copy();
2928        dst.type = type == null ? null : type.copy();
2929        dst.patient = patient == null ? null : patient.copy();
2930        dst.period = period == null ? null : period.copy();
2931        dst.status = status == null ? null : status.copy();
2932        dst.date = date == null ? null : date.copy();
2933        dst.reportingOrganization = reportingOrganization == null ? null : reportingOrganization.copy();
2934        if (group != null) {
2935          dst.group = new ArrayList<MeasureReportGroupComponent>();
2936          for (MeasureReportGroupComponent i : group)
2937            dst.group.add(i.copy());
2938        };
2939        dst.evaluatedResources = evaluatedResources == null ? null : evaluatedResources.copy();
2940        return dst;
2941      }
2942
2943      protected MeasureReport typedCopy() {
2944        return copy();
2945      }
2946
2947      @Override
2948      public boolean equalsDeep(Base other) {
2949        if (!super.equalsDeep(other))
2950          return false;
2951        if (!(other instanceof MeasureReport))
2952          return false;
2953        MeasureReport o = (MeasureReport) other;
2954        return compareDeep(measure, o.measure, true) && compareDeep(type, o.type, true) && compareDeep(patient, o.patient, true)
2955           && compareDeep(period, o.period, true) && compareDeep(status, o.status, true) && compareDeep(date, o.date, true)
2956           && compareDeep(reportingOrganization, o.reportingOrganization, true) && compareDeep(group, o.group, true)
2957           && compareDeep(evaluatedResources, o.evaluatedResources, true);
2958      }
2959
2960      @Override
2961      public boolean equalsShallow(Base other) {
2962        if (!super.equalsShallow(other))
2963          return false;
2964        if (!(other instanceof MeasureReport))
2965          return false;
2966        MeasureReport o = (MeasureReport) other;
2967        return compareValues(type, o.type, true) && compareValues(status, o.status, true) && compareValues(date, o.date, true)
2968          ;
2969      }
2970
2971      public boolean isEmpty() {
2972        return super.isEmpty() && (measure == null || measure.isEmpty()) && (type == null || type.isEmpty())
2973           && (patient == null || patient.isEmpty()) && (period == null || period.isEmpty()) && (status == null || status.isEmpty())
2974           && (date == null || date.isEmpty()) && (reportingOrganization == null || reportingOrganization.isEmpty())
2975           && (group == null || group.isEmpty()) && (evaluatedResources == null || evaluatedResources.isEmpty())
2976          ;
2977      }
2978
2979  @Override
2980  public ResourceType getResourceType() {
2981    return ResourceType.MeasureReport;
2982   }
2983
2984 /**
2985   * Search parameter: <b>patient</b>
2986   * <p>
2987   * Description: <b>The identity of a patient to search for individual measure report results for</b><br>
2988   * Type: <b>reference</b><br>
2989   * Path: <b>MeasureReport.patient</b><br>
2990   * </p>
2991   */
2992  @SearchParamDefinition(name="patient", path="MeasureReport.patient", description="The identity of a patient to search for individual measure report results for", type="reference" )
2993  public static final String SP_PATIENT = "patient";
2994 /**
2995   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2996   * <p>
2997   * Description: <b>The identity of a patient to search for individual measure report results for</b><br>
2998   * Type: <b>reference</b><br>
2999   * Path: <b>MeasureReport.patient</b><br>
3000   * </p>
3001   */
3002  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3003
3004/**
3005   * Constant for fluent queries to be used to add include statements. Specifies
3006   * the path value of "<b>MeasureReport:patient</b>".
3007   */
3008  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("MeasureReport:patient").toLocked();
3009
3010
3011}