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