001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * The MeasureReport resource contains the results of the calculation of a measure; and optionally a reference to the resources involved in that calculation.
052 */
053@ResourceDef(name="MeasureReport", profile="http://hl7.org/fhir/StructureDefinition/MeasureReport")
054public class MeasureReport extends DomainResource {
055
056    public enum MeasureReportStatus {
057        /**
058         * The report is complete and ready for use.
059         */
060        COMPLETE, 
061        /**
062         * The report is currently being generated.
063         */
064        PENDING, 
065        /**
066         * An error occurred attempting to generate the report.
067         */
068        ERROR, 
069        /**
070         * added to help the parsers with the generic types
071         */
072        NULL;
073        public static MeasureReportStatus fromCode(String codeString) throws FHIRException {
074            if (codeString == null || "".equals(codeString))
075                return null;
076        if ("complete".equals(codeString))
077          return COMPLETE;
078        if ("pending".equals(codeString))
079          return PENDING;
080        if ("error".equals(codeString))
081          return ERROR;
082        if (Configuration.isAcceptInvalidEnums())
083          return null;
084        else
085          throw new FHIRException("Unknown MeasureReportStatus code '"+codeString+"'");
086        }
087        public String toCode() {
088          switch (this) {
089            case COMPLETE: return "complete";
090            case PENDING: return "pending";
091            case ERROR: return "error";
092            case NULL: return null;
093            default: return "?";
094          }
095        }
096        public String getSystem() {
097          switch (this) {
098            case COMPLETE: return "http://hl7.org/fhir/measure-report-status";
099            case PENDING: return "http://hl7.org/fhir/measure-report-status";
100            case ERROR: return "http://hl7.org/fhir/measure-report-status";
101            case NULL: return null;
102            default: return "?";
103          }
104        }
105        public String getDefinition() {
106          switch (this) {
107            case COMPLETE: return "The report is complete and ready for use.";
108            case PENDING: return "The report is currently being generated.";
109            case ERROR: return "An error occurred attempting to generate the report.";
110            case NULL: return null;
111            default: return "?";
112          }
113        }
114        public String getDisplay() {
115          switch (this) {
116            case COMPLETE: return "Complete";
117            case PENDING: return "Pending";
118            case ERROR: return "Error";
119            case NULL: return null;
120            default: return "?";
121          }
122        }
123    }
124
125  public static class MeasureReportStatusEnumFactory implements EnumFactory<MeasureReportStatus> {
126    public MeasureReportStatus fromCode(String codeString) throws IllegalArgumentException {
127      if (codeString == null || "".equals(codeString))
128            if (codeString == null || "".equals(codeString))
129                return null;
130        if ("complete".equals(codeString))
131          return MeasureReportStatus.COMPLETE;
132        if ("pending".equals(codeString))
133          return MeasureReportStatus.PENDING;
134        if ("error".equals(codeString))
135          return MeasureReportStatus.ERROR;
136        throw new IllegalArgumentException("Unknown MeasureReportStatus code '"+codeString+"'");
137        }
138        public Enumeration<MeasureReportStatus> fromType(PrimitiveType<?> code) throws FHIRException {
139          if (code == null)
140            return null;
141          if (code.isEmpty())
142            return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.NULL, code);
143          String codeString = ((PrimitiveType) code).asStringValue();
144          if (codeString == null || "".equals(codeString))
145            return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.NULL, code);
146        if ("complete".equals(codeString))
147          return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.COMPLETE, code);
148        if ("pending".equals(codeString))
149          return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.PENDING, code);
150        if ("error".equals(codeString))
151          return new Enumeration<MeasureReportStatus>(this, MeasureReportStatus.ERROR, code);
152        throw new FHIRException("Unknown MeasureReportStatus code '"+codeString+"'");
153        }
154    public String toCode(MeasureReportStatus code) {
155      if (code == MeasureReportStatus.COMPLETE)
156        return "complete";
157      if (code == MeasureReportStatus.PENDING)
158        return "pending";
159      if (code == MeasureReportStatus.ERROR)
160        return "error";
161      return "?";
162      }
163    public String toSystem(MeasureReportStatus code) {
164      return code.getSystem();
165      }
166    }
167
168    public enum MeasureReportType {
169        /**
170         * An individual report that provides information on the performance for a given measure with respect to a single subject.
171         */
172        INDIVIDUAL, 
173        /**
174         * A subject list report that includes a listing of subjects that satisfied each population criteria in the measure.
175         */
176        SUBJECTLIST, 
177        /**
178         * A summary report that returns the number of members in each population criteria for the measure.
179         */
180        SUMMARY, 
181        /**
182         * A data exchange report that contains data-of-interest for the measure (i.e. data that is needed to calculate the measure)
183         */
184        DATAEXCHANGE, 
185        /**
186         * added to help the parsers with the generic types
187         */
188        NULL;
189        public static MeasureReportType fromCode(String codeString) throws FHIRException {
190            if (codeString == null || "".equals(codeString))
191                return null;
192        if ("individual".equals(codeString))
193          return INDIVIDUAL;
194        if ("subject-list".equals(codeString))
195          return SUBJECTLIST;
196        if ("summary".equals(codeString))
197          return SUMMARY;
198        if ("data-exchange".equals(codeString))
199          return DATAEXCHANGE;
200        if (Configuration.isAcceptInvalidEnums())
201          return null;
202        else
203          throw new FHIRException("Unknown MeasureReportType code '"+codeString+"'");
204        }
205        public String toCode() {
206          switch (this) {
207            case INDIVIDUAL: return "individual";
208            case SUBJECTLIST: return "subject-list";
209            case SUMMARY: return "summary";
210            case DATAEXCHANGE: return "data-exchange";
211            case NULL: return null;
212            default: return "?";
213          }
214        }
215        public String getSystem() {
216          switch (this) {
217            case INDIVIDUAL: return "http://hl7.org/fhir/measure-report-type";
218            case SUBJECTLIST: return "http://hl7.org/fhir/measure-report-type";
219            case SUMMARY: return "http://hl7.org/fhir/measure-report-type";
220            case DATAEXCHANGE: return "http://hl7.org/fhir/measure-report-type";
221            case NULL: return null;
222            default: return "?";
223          }
224        }
225        public String getDefinition() {
226          switch (this) {
227            case INDIVIDUAL: return "An individual report that provides information on the performance for a given measure with respect to a single subject.";
228            case SUBJECTLIST: return "A subject list report that includes a listing of subjects that satisfied each population criteria in the measure.";
229            case SUMMARY: return "A summary report that returns the number of members in each population criteria for the measure.";
230            case DATAEXCHANGE: return "A data exchange report that contains data-of-interest for the measure (i.e. data that is needed to calculate the measure)";
231            case NULL: return null;
232            default: return "?";
233          }
234        }
235        public String getDisplay() {
236          switch (this) {
237            case INDIVIDUAL: return "Individual";
238            case SUBJECTLIST: return "Subject List";
239            case SUMMARY: return "Summary";
240            case DATAEXCHANGE: return "Data Exchange";
241            case NULL: return null;
242            default: return "?";
243          }
244        }
245    }
246
247  public static class MeasureReportTypeEnumFactory implements EnumFactory<MeasureReportType> {
248    public MeasureReportType fromCode(String codeString) throws IllegalArgumentException {
249      if (codeString == null || "".equals(codeString))
250            if (codeString == null || "".equals(codeString))
251                return null;
252        if ("individual".equals(codeString))
253          return MeasureReportType.INDIVIDUAL;
254        if ("subject-list".equals(codeString))
255          return MeasureReportType.SUBJECTLIST;
256        if ("summary".equals(codeString))
257          return MeasureReportType.SUMMARY;
258        if ("data-exchange".equals(codeString))
259          return MeasureReportType.DATAEXCHANGE;
260        throw new IllegalArgumentException("Unknown MeasureReportType code '"+codeString+"'");
261        }
262        public Enumeration<MeasureReportType> fromType(PrimitiveType<?> code) throws FHIRException {
263          if (code == null)
264            return null;
265          if (code.isEmpty())
266            return new Enumeration<MeasureReportType>(this, MeasureReportType.NULL, code);
267          String codeString = ((PrimitiveType) code).asStringValue();
268          if (codeString == null || "".equals(codeString))
269            return new Enumeration<MeasureReportType>(this, MeasureReportType.NULL, code);
270        if ("individual".equals(codeString))
271          return new Enumeration<MeasureReportType>(this, MeasureReportType.INDIVIDUAL, code);
272        if ("subject-list".equals(codeString))
273          return new Enumeration<MeasureReportType>(this, MeasureReportType.SUBJECTLIST, code);
274        if ("summary".equals(codeString))
275          return new Enumeration<MeasureReportType>(this, MeasureReportType.SUMMARY, code);
276        if ("data-exchange".equals(codeString))
277          return new Enumeration<MeasureReportType>(this, MeasureReportType.DATAEXCHANGE, code);
278        throw new FHIRException("Unknown MeasureReportType code '"+codeString+"'");
279        }
280    public String toCode(MeasureReportType code) {
281      if (code == MeasureReportType.INDIVIDUAL)
282        return "individual";
283      if (code == MeasureReportType.SUBJECTLIST)
284        return "subject-list";
285      if (code == MeasureReportType.SUMMARY)
286        return "summary";
287      if (code == MeasureReportType.DATAEXCHANGE)
288        return "data-exchange";
289      return "?";
290      }
291    public String toSystem(MeasureReportType code) {
292      return code.getSystem();
293      }
294    }
295
296    public enum SubmitDataUpdateType {
297        /**
298         * In contrast to the Snapshot Update, the FHIR Parameters resource used in a Submit Data or the Collect Data scenario contains only the new and updated DEQM and QI Core Profiles since the last transaction. If the Consumer supports incremental updates, the contents of the updated payload updates the previous payload data.
299         */
300        INCREMENTAL, 
301        /**
302         * In contrast to the Incremental Update, the FHIR Parameters resource used in a Submit Data or the Collect Data scenario contains all the DEQM and QI Core Profiles for each transaction.  If the Consumer supports snapshot updates, the contents of the updated payload entirely replaces the previous payload
303         */
304        SNAPSHOT, 
305        /**
306         * added to help the parsers with the generic types
307         */
308        NULL;
309        public static SubmitDataUpdateType fromCode(String codeString) throws FHIRException {
310            if (codeString == null || "".equals(codeString))
311                return null;
312        if ("incremental".equals(codeString))
313          return INCREMENTAL;
314        if ("snapshot".equals(codeString))
315          return SNAPSHOT;
316        if (Configuration.isAcceptInvalidEnums())
317          return null;
318        else
319          throw new FHIRException("Unknown SubmitDataUpdateType code '"+codeString+"'");
320        }
321        public String toCode() {
322          switch (this) {
323            case INCREMENTAL: return "incremental";
324            case SNAPSHOT: return "snapshot";
325            case NULL: return null;
326            default: return "?";
327          }
328        }
329        public String getSystem() {
330          switch (this) {
331            case INCREMENTAL: return "http://hl7.org/fhir/CodeSystem/submit-data-update-type";
332            case SNAPSHOT: return "http://hl7.org/fhir/CodeSystem/submit-data-update-type";
333            case NULL: return null;
334            default: return "?";
335          }
336        }
337        public String getDefinition() {
338          switch (this) {
339            case INCREMENTAL: return "In contrast to the Snapshot Update, the FHIR Parameters resource used in a Submit Data or the Collect Data scenario contains only the new and updated DEQM and QI Core Profiles since the last transaction. If the Consumer supports incremental updates, the contents of the updated payload updates the previous payload data.";
340            case SNAPSHOT: return "In contrast to the Incremental Update, the FHIR Parameters resource used in a Submit Data or the Collect Data scenario contains all the DEQM and QI Core Profiles for each transaction.  If the Consumer supports snapshot updates, the contents of the updated payload entirely replaces the previous payload";
341            case NULL: return null;
342            default: return "?";
343          }
344        }
345        public String getDisplay() {
346          switch (this) {
347            case INCREMENTAL: return "Incremental";
348            case SNAPSHOT: return "Snapshot";
349            case NULL: return null;
350            default: return "?";
351          }
352        }
353    }
354
355  public static class SubmitDataUpdateTypeEnumFactory implements EnumFactory<SubmitDataUpdateType> {
356    public SubmitDataUpdateType fromCode(String codeString) throws IllegalArgumentException {
357      if (codeString == null || "".equals(codeString))
358            if (codeString == null || "".equals(codeString))
359                return null;
360        if ("incremental".equals(codeString))
361          return SubmitDataUpdateType.INCREMENTAL;
362        if ("snapshot".equals(codeString))
363          return SubmitDataUpdateType.SNAPSHOT;
364        throw new IllegalArgumentException("Unknown SubmitDataUpdateType code '"+codeString+"'");
365        }
366        public Enumeration<SubmitDataUpdateType> fromType(PrimitiveType<?> code) throws FHIRException {
367          if (code == null)
368            return null;
369          if (code.isEmpty())
370            return new Enumeration<SubmitDataUpdateType>(this, SubmitDataUpdateType.NULL, code);
371          String codeString = ((PrimitiveType) code).asStringValue();
372          if (codeString == null || "".equals(codeString))
373            return new Enumeration<SubmitDataUpdateType>(this, SubmitDataUpdateType.NULL, code);
374        if ("incremental".equals(codeString))
375          return new Enumeration<SubmitDataUpdateType>(this, SubmitDataUpdateType.INCREMENTAL, code);
376        if ("snapshot".equals(codeString))
377          return new Enumeration<SubmitDataUpdateType>(this, SubmitDataUpdateType.SNAPSHOT, code);
378        throw new FHIRException("Unknown SubmitDataUpdateType code '"+codeString+"'");
379        }
380    public String toCode(SubmitDataUpdateType code) {
381      if (code == SubmitDataUpdateType.INCREMENTAL)
382        return "incremental";
383      if (code == SubmitDataUpdateType.SNAPSHOT)
384        return "snapshot";
385      return "?";
386      }
387    public String toSystem(SubmitDataUpdateType code) {
388      return code.getSystem();
389      }
390    }
391
392    @Block()
393    public static class MeasureReportGroupComponent extends BackboneElement implements IBaseBackboneElement {
394        /**
395         * The group from the Measure that corresponds to this group in the MeasureReport resource.
396         */
397        @Child(name = "linkId", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
398        @Description(shortDefinition="Pointer to specific group from Measure", formalDefinition="The group from the Measure that corresponds to this group in the MeasureReport resource." )
399        protected StringType linkId;
400
401        /**
402         * The meaning of the population group as defined in the measure definition.
403         */
404        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
405        @Description(shortDefinition="Meaning of the group", formalDefinition="The meaning of the population group as defined in the measure definition." )
406        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-group-example")
407        protected CodeableConcept code;
408
409        /**
410         * Optional subject identifying the individual or individuals the report is for.
411         */
412        @Child(name = "subject", type = {CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class}, order=3, min=0, max=1, modifier=false, summary=true)
413        @Description(shortDefinition="What individual(s) the report is for", formalDefinition="Optional subject identifying the individual or individuals the report is for." )
414        protected Reference subject;
415
416        /**
417         * The populations that make up the population group, one for each type of population appropriate for the measure.
418         */
419        @Child(name = "population", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
420        @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." )
421        protected List<MeasureReportGroupPopulationComponent> population;
422
423        /**
424         * 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.
425         */
426        @Child(name = "measureScore", type = {Quantity.class, DateTimeType.class, CodeableConcept.class, Period.class, Range.class, Duration.class}, order=5, min=0, max=1, modifier=false, summary=true)
427        @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." )
428        protected DataType measureScore;
429
430        /**
431         * When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.
432         */
433        @Child(name = "stratifier", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
434        @Description(shortDefinition="Stratification results", formalDefinition="When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure." )
435        protected List<MeasureReportGroupStratifierComponent> stratifier;
436
437        private static final long serialVersionUID = 438553747L;
438
439    /**
440     * Constructor
441     */
442      public MeasureReportGroupComponent() {
443        super();
444      }
445
446        /**
447         * @return {@link #linkId} (The group from the Measure that corresponds to this group in the MeasureReport resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
448         */
449        public StringType getLinkIdElement() { 
450          if (this.linkId == null)
451            if (Configuration.errorOnAutoCreate())
452              throw new Error("Attempt to auto-create MeasureReportGroupComponent.linkId");
453            else if (Configuration.doAutoCreate())
454              this.linkId = new StringType(); // bb
455          return this.linkId;
456        }
457
458        public boolean hasLinkIdElement() { 
459          return this.linkId != null && !this.linkId.isEmpty();
460        }
461
462        public boolean hasLinkId() { 
463          return this.linkId != null && !this.linkId.isEmpty();
464        }
465
466        /**
467         * @param value {@link #linkId} (The group from the Measure that corresponds to this group in the MeasureReport resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
468         */
469        public MeasureReportGroupComponent setLinkIdElement(StringType value) { 
470          this.linkId = value;
471          return this;
472        }
473
474        /**
475         * @return The group from the Measure that corresponds to this group in the MeasureReport resource.
476         */
477        public String getLinkId() { 
478          return this.linkId == null ? null : this.linkId.getValue();
479        }
480
481        /**
482         * @param value The group from the Measure that corresponds to this group in the MeasureReport resource.
483         */
484        public MeasureReportGroupComponent setLinkId(String value) { 
485          if (Utilities.noString(value))
486            this.linkId = null;
487          else {
488            if (this.linkId == null)
489              this.linkId = new StringType();
490            this.linkId.setValue(value);
491          }
492          return this;
493        }
494
495        /**
496         * @return {@link #code} (The meaning of the population group as defined in the measure definition.)
497         */
498        public CodeableConcept getCode() { 
499          if (this.code == null)
500            if (Configuration.errorOnAutoCreate())
501              throw new Error("Attempt to auto-create MeasureReportGroupComponent.code");
502            else if (Configuration.doAutoCreate())
503              this.code = new CodeableConcept(); // cc
504          return this.code;
505        }
506
507        public boolean hasCode() { 
508          return this.code != null && !this.code.isEmpty();
509        }
510
511        /**
512         * @param value {@link #code} (The meaning of the population group as defined in the measure definition.)
513         */
514        public MeasureReportGroupComponent setCode(CodeableConcept value) { 
515          this.code = value;
516          return this;
517        }
518
519        /**
520         * @return {@link #subject} (Optional subject identifying the individual or individuals the report is for.)
521         */
522        public Reference getSubject() { 
523          if (this.subject == null)
524            if (Configuration.errorOnAutoCreate())
525              throw new Error("Attempt to auto-create MeasureReportGroupComponent.subject");
526            else if (Configuration.doAutoCreate())
527              this.subject = new Reference(); // cc
528          return this.subject;
529        }
530
531        public boolean hasSubject() { 
532          return this.subject != null && !this.subject.isEmpty();
533        }
534
535        /**
536         * @param value {@link #subject} (Optional subject identifying the individual or individuals the report is for.)
537         */
538        public MeasureReportGroupComponent setSubject(Reference value) { 
539          this.subject = value;
540          return this;
541        }
542
543        /**
544         * @return {@link #population} (The populations that make up the population group, one for each type of population appropriate for the measure.)
545         */
546        public List<MeasureReportGroupPopulationComponent> getPopulation() { 
547          if (this.population == null)
548            this.population = new ArrayList<MeasureReportGroupPopulationComponent>();
549          return this.population;
550        }
551
552        /**
553         * @return Returns a reference to <code>this</code> for easy method chaining
554         */
555        public MeasureReportGroupComponent setPopulation(List<MeasureReportGroupPopulationComponent> thePopulation) { 
556          this.population = thePopulation;
557          return this;
558        }
559
560        public boolean hasPopulation() { 
561          if (this.population == null)
562            return false;
563          for (MeasureReportGroupPopulationComponent item : this.population)
564            if (!item.isEmpty())
565              return true;
566          return false;
567        }
568
569        public MeasureReportGroupPopulationComponent addPopulation() { //3
570          MeasureReportGroupPopulationComponent t = new MeasureReportGroupPopulationComponent();
571          if (this.population == null)
572            this.population = new ArrayList<MeasureReportGroupPopulationComponent>();
573          this.population.add(t);
574          return t;
575        }
576
577        public MeasureReportGroupComponent addPopulation(MeasureReportGroupPopulationComponent t) { //3
578          if (t == null)
579            return this;
580          if (this.population == null)
581            this.population = new ArrayList<MeasureReportGroupPopulationComponent>();
582          this.population.add(t);
583          return this;
584        }
585
586        /**
587         * @return The first repetition of repeating field {@link #population}, creating it if it does not already exist {3}
588         */
589        public MeasureReportGroupPopulationComponent getPopulationFirstRep() { 
590          if (getPopulation().isEmpty()) {
591            addPopulation();
592          }
593          return getPopulation().get(0);
594        }
595
596        /**
597         * @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.)
598         */
599        public DataType getMeasureScore() { 
600          return this.measureScore;
601        }
602
603        /**
604         * @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.)
605         */
606        public Quantity getMeasureScoreQuantity() throws FHIRException { 
607          if (this.measureScore == null)
608            this.measureScore = new Quantity();
609          if (!(this.measureScore instanceof Quantity))
610            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.measureScore.getClass().getName()+" was encountered");
611          return (Quantity) this.measureScore;
612        }
613
614        public boolean hasMeasureScoreQuantity() { 
615          return this != null && this.measureScore instanceof Quantity;
616        }
617
618        /**
619         * @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.)
620         */
621        public DateTimeType getMeasureScoreDateTimeType() throws FHIRException { 
622          if (this.measureScore == null)
623            this.measureScore = new DateTimeType();
624          if (!(this.measureScore instanceof DateTimeType))
625            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.measureScore.getClass().getName()+" was encountered");
626          return (DateTimeType) this.measureScore;
627        }
628
629        public boolean hasMeasureScoreDateTimeType() { 
630          return this != null && this.measureScore instanceof DateTimeType;
631        }
632
633        /**
634         * @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.)
635         */
636        public CodeableConcept getMeasureScoreCodeableConcept() throws FHIRException { 
637          if (this.measureScore == null)
638            this.measureScore = new CodeableConcept();
639          if (!(this.measureScore instanceof CodeableConcept))
640            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.measureScore.getClass().getName()+" was encountered");
641          return (CodeableConcept) this.measureScore;
642        }
643
644        public boolean hasMeasureScoreCodeableConcept() { 
645          return this != null && this.measureScore instanceof CodeableConcept;
646        }
647
648        /**
649         * @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.)
650         */
651        public Period getMeasureScorePeriod() throws FHIRException { 
652          if (this.measureScore == null)
653            this.measureScore = new Period();
654          if (!(this.measureScore instanceof Period))
655            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.measureScore.getClass().getName()+" was encountered");
656          return (Period) this.measureScore;
657        }
658
659        public boolean hasMeasureScorePeriod() { 
660          return this != null && this.measureScore instanceof Period;
661        }
662
663        /**
664         * @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.)
665         */
666        public Range getMeasureScoreRange() throws FHIRException { 
667          if (this.measureScore == null)
668            this.measureScore = new Range();
669          if (!(this.measureScore instanceof Range))
670            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.measureScore.getClass().getName()+" was encountered");
671          return (Range) this.measureScore;
672        }
673
674        public boolean hasMeasureScoreRange() { 
675          return this != null && this.measureScore instanceof Range;
676        }
677
678        /**
679         * @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.)
680         */
681        public Duration getMeasureScoreDuration() throws FHIRException { 
682          if (this.measureScore == null)
683            this.measureScore = new Duration();
684          if (!(this.measureScore instanceof Duration))
685            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.measureScore.getClass().getName()+" was encountered");
686          return (Duration) this.measureScore;
687        }
688
689        public boolean hasMeasureScoreDuration() { 
690          return this != null && this.measureScore instanceof Duration;
691        }
692
693        public boolean hasMeasureScore() { 
694          return this.measureScore != null && !this.measureScore.isEmpty();
695        }
696
697        /**
698         * @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.)
699         */
700        public MeasureReportGroupComponent setMeasureScore(DataType value) { 
701          if (value != null && !(value instanceof Quantity || value instanceof DateTimeType || value instanceof CodeableConcept || value instanceof Period || value instanceof Range || value instanceof Duration))
702            throw new FHIRException("Not the right type for MeasureReport.group.measureScore[x]: "+value.fhirType());
703          this.measureScore = value;
704          return this;
705        }
706
707        /**
708         * @return {@link #stratifier} (When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.)
709         */
710        public List<MeasureReportGroupStratifierComponent> getStratifier() { 
711          if (this.stratifier == null)
712            this.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
713          return this.stratifier;
714        }
715
716        /**
717         * @return Returns a reference to <code>this</code> for easy method chaining
718         */
719        public MeasureReportGroupComponent setStratifier(List<MeasureReportGroupStratifierComponent> theStratifier) { 
720          this.stratifier = theStratifier;
721          return this;
722        }
723
724        public boolean hasStratifier() { 
725          if (this.stratifier == null)
726            return false;
727          for (MeasureReportGroupStratifierComponent item : this.stratifier)
728            if (!item.isEmpty())
729              return true;
730          return false;
731        }
732
733        public MeasureReportGroupStratifierComponent addStratifier() { //3
734          MeasureReportGroupStratifierComponent t = new MeasureReportGroupStratifierComponent();
735          if (this.stratifier == null)
736            this.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
737          this.stratifier.add(t);
738          return t;
739        }
740
741        public MeasureReportGroupComponent addStratifier(MeasureReportGroupStratifierComponent t) { //3
742          if (t == null)
743            return this;
744          if (this.stratifier == null)
745            this.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
746          this.stratifier.add(t);
747          return this;
748        }
749
750        /**
751         * @return The first repetition of repeating field {@link #stratifier}, creating it if it does not already exist {3}
752         */
753        public MeasureReportGroupStratifierComponent getStratifierFirstRep() { 
754          if (getStratifier().isEmpty()) {
755            addStratifier();
756          }
757          return getStratifier().get(0);
758        }
759
760        protected void listChildren(List<Property> children) {
761          super.listChildren(children);
762          children.add(new Property("linkId", "string", "The group from the Measure that corresponds to this group in the MeasureReport resource.", 0, 1, linkId));
763          children.add(new Property("code", "CodeableConcept", "The meaning of the population group as defined in the measure definition.", 0, 1, code));
764          children.add(new Property("subject", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "Optional subject identifying the individual or individuals the report is for.", 0, 1, subject));
765          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));
766          children.add(new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore));
767          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));
768        }
769
770        @Override
771        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
772          switch (_hash) {
773          case -1102667083: /*linkId*/  return new Property("linkId", "string", "The group from the Measure that corresponds to this group in the MeasureReport resource.", 0, 1, linkId);
774          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The meaning of the population group as defined in the measure definition.", 0, 1, code);
775          case -1867885268: /*subject*/  return new Property("subject", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "Optional subject identifying the individual or individuals the report is for.", 0, 1, subject);
776          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);
777          case 1854115884: /*measureScore[x]*/  return new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
778          case -386313260: /*measureScore*/  return new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
779          case -1880815489: /*measureScoreQuantity*/  return new Property("measureScore[x]", "Quantity", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
780          case 1196938127: /*measureScoreDateTime*/  return new Property("measureScore[x]", "dateTime", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
781          case -1193234131: /*measureScoreCodeableConcept*/  return new Property("measureScore[x]", "CodeableConcept", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
782          case -1939831115: /*measureScorePeriod*/  return new Property("measureScore[x]", "Period", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
783          case -615040567: /*measureScoreRange*/  return new Property("measureScore[x]", "Range", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
784          case 1707143560: /*measureScoreDuration*/  return new Property("measureScore[x]", "Duration", "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", 0, 1, measureScore);
785          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);
786          default: return super.getNamedProperty(_hash, _name, _checkValid);
787          }
788
789        }
790
791      @Override
792      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
793        switch (hash) {
794        case -1102667083: /*linkId*/ return this.linkId == null ? new Base[0] : new Base[] {this.linkId}; // StringType
795        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
796        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
797        case -2023558323: /*population*/ return this.population == null ? new Base[0] : this.population.toArray(new Base[this.population.size()]); // MeasureReportGroupPopulationComponent
798        case -386313260: /*measureScore*/ return this.measureScore == null ? new Base[0] : new Base[] {this.measureScore}; // DataType
799        case 90983669: /*stratifier*/ return this.stratifier == null ? new Base[0] : this.stratifier.toArray(new Base[this.stratifier.size()]); // MeasureReportGroupStratifierComponent
800        default: return super.getProperty(hash, name, checkValid);
801        }
802
803      }
804
805      @Override
806      public Base setProperty(int hash, String name, Base value) throws FHIRException {
807        switch (hash) {
808        case -1102667083: // linkId
809          this.linkId = TypeConvertor.castToString(value); // StringType
810          return value;
811        case 3059181: // code
812          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
813          return value;
814        case -1867885268: // subject
815          this.subject = TypeConvertor.castToReference(value); // Reference
816          return value;
817        case -2023558323: // population
818          this.getPopulation().add((MeasureReportGroupPopulationComponent) value); // MeasureReportGroupPopulationComponent
819          return value;
820        case -386313260: // measureScore
821          this.measureScore = TypeConvertor.castToType(value); // DataType
822          return value;
823        case 90983669: // stratifier
824          this.getStratifier().add((MeasureReportGroupStratifierComponent) value); // MeasureReportGroupStratifierComponent
825          return value;
826        default: return super.setProperty(hash, name, value);
827        }
828
829      }
830
831      @Override
832      public Base setProperty(String name, Base value) throws FHIRException {
833        if (name.equals("linkId")) {
834          this.linkId = TypeConvertor.castToString(value); // StringType
835        } else if (name.equals("code")) {
836          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
837        } else if (name.equals("subject")) {
838          this.subject = TypeConvertor.castToReference(value); // Reference
839        } else if (name.equals("population")) {
840          this.getPopulation().add((MeasureReportGroupPopulationComponent) value);
841        } else if (name.equals("measureScore[x]")) {
842          this.measureScore = TypeConvertor.castToType(value); // DataType
843        } else if (name.equals("stratifier")) {
844          this.getStratifier().add((MeasureReportGroupStratifierComponent) value);
845        } else
846          return super.setProperty(name, value);
847        return value;
848      }
849
850      @Override
851      public Base makeProperty(int hash, String name) throws FHIRException {
852        switch (hash) {
853        case -1102667083:  return getLinkIdElement();
854        case 3059181:  return getCode();
855        case -1867885268:  return getSubject();
856        case -2023558323:  return addPopulation(); 
857        case 1854115884:  return getMeasureScore();
858        case -386313260:  return getMeasureScore();
859        case 90983669:  return addStratifier(); 
860        default: return super.makeProperty(hash, name);
861        }
862
863      }
864
865      @Override
866      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
867        switch (hash) {
868        case -1102667083: /*linkId*/ return new String[] {"string"};
869        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
870        case -1867885268: /*subject*/ return new String[] {"Reference"};
871        case -2023558323: /*population*/ return new String[] {};
872        case -386313260: /*measureScore*/ return new String[] {"Quantity", "dateTime", "CodeableConcept", "Period", "Range", "Duration"};
873        case 90983669: /*stratifier*/ return new String[] {};
874        default: return super.getTypesForProperty(hash, name);
875        }
876
877      }
878
879      @Override
880      public Base addChild(String name) throws FHIRException {
881        if (name.equals("linkId")) {
882          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.group.linkId");
883        }
884        else if (name.equals("code")) {
885          this.code = new CodeableConcept();
886          return this.code;
887        }
888        else if (name.equals("subject")) {
889          this.subject = new Reference();
890          return this.subject;
891        }
892        else if (name.equals("population")) {
893          return addPopulation();
894        }
895        else if (name.equals("measureScoreQuantity")) {
896          this.measureScore = new Quantity();
897          return this.measureScore;
898        }
899        else if (name.equals("measureScoreDateTime")) {
900          this.measureScore = new DateTimeType();
901          return this.measureScore;
902        }
903        else if (name.equals("measureScoreCodeableConcept")) {
904          this.measureScore = new CodeableConcept();
905          return this.measureScore;
906        }
907        else if (name.equals("measureScorePeriod")) {
908          this.measureScore = new Period();
909          return this.measureScore;
910        }
911        else if (name.equals("measureScoreRange")) {
912          this.measureScore = new Range();
913          return this.measureScore;
914        }
915        else if (name.equals("measureScoreDuration")) {
916          this.measureScore = new Duration();
917          return this.measureScore;
918        }
919        else if (name.equals("stratifier")) {
920          return addStratifier();
921        }
922        else
923          return super.addChild(name);
924      }
925
926      public MeasureReportGroupComponent copy() {
927        MeasureReportGroupComponent dst = new MeasureReportGroupComponent();
928        copyValues(dst);
929        return dst;
930      }
931
932      public void copyValues(MeasureReportGroupComponent dst) {
933        super.copyValues(dst);
934        dst.linkId = linkId == null ? null : linkId.copy();
935        dst.code = code == null ? null : code.copy();
936        dst.subject = subject == null ? null : subject.copy();
937        if (population != null) {
938          dst.population = new ArrayList<MeasureReportGroupPopulationComponent>();
939          for (MeasureReportGroupPopulationComponent i : population)
940            dst.population.add(i.copy());
941        };
942        dst.measureScore = measureScore == null ? null : measureScore.copy();
943        if (stratifier != null) {
944          dst.stratifier = new ArrayList<MeasureReportGroupStratifierComponent>();
945          for (MeasureReportGroupStratifierComponent i : stratifier)
946            dst.stratifier.add(i.copy());
947        };
948      }
949
950      @Override
951      public boolean equalsDeep(Base other_) {
952        if (!super.equalsDeep(other_))
953          return false;
954        if (!(other_ instanceof MeasureReportGroupComponent))
955          return false;
956        MeasureReportGroupComponent o = (MeasureReportGroupComponent) other_;
957        return compareDeep(linkId, o.linkId, true) && compareDeep(code, o.code, true) && compareDeep(subject, o.subject, true)
958           && compareDeep(population, o.population, true) && compareDeep(measureScore, o.measureScore, true)
959           && compareDeep(stratifier, o.stratifier, true);
960      }
961
962      @Override
963      public boolean equalsShallow(Base other_) {
964        if (!super.equalsShallow(other_))
965          return false;
966        if (!(other_ instanceof MeasureReportGroupComponent))
967          return false;
968        MeasureReportGroupComponent o = (MeasureReportGroupComponent) other_;
969        return compareValues(linkId, o.linkId, true);
970      }
971
972      public boolean isEmpty() {
973        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(linkId, code, subject, population
974          , measureScore, stratifier);
975      }
976
977  public String fhirType() {
978    return "MeasureReport.group";
979
980  }
981
982  }
983
984    @Block()
985    public static class MeasureReportGroupPopulationComponent extends BackboneElement implements IBaseBackboneElement {
986        /**
987         * The population from the Measure that corresponds to this population in the MeasureReport resource.
988         */
989        @Child(name = "linkId", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
990        @Description(shortDefinition="Pointer to specific population from Measure", formalDefinition="The population from the Measure that corresponds to this population in the MeasureReport resource." )
991        protected StringType linkId;
992
993        /**
994         * The type of the population.
995         */
996        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
997        @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." )
998        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-population")
999        protected CodeableConcept code;
1000
1001        /**
1002         * The number of members of the population.
1003         */
1004        @Child(name = "count", type = {IntegerType.class}, order=3, min=0, max=1, modifier=false, summary=false)
1005        @Description(shortDefinition="Size of the population", formalDefinition="The number of members of the population." )
1006        protected IntegerType count;
1007
1008        /**
1009         * This element refers to a List of individual level MeasureReport resources, one for each subject in this population.
1010         */
1011        @Child(name = "subjectResults", type = {ListResource.class}, order=4, min=0, max=1, modifier=false, summary=false)
1012        @Description(shortDefinition="For subject-list reports, the subject results in this population", formalDefinition="This element refers to a List of individual level MeasureReport resources, one for each subject in this population." )
1013        protected Reference subjectResults;
1014
1015        /**
1016         * A reference to an individual level MeasureReport resource for a member of the population.
1017         */
1018        @Child(name = "subjectReport", type = {MeasureReport.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1019        @Description(shortDefinition="For subject-list reports, a subject result in this population", formalDefinition="A reference to an individual level MeasureReport resource for a member of the population." )
1020        protected List<Reference> subjectReport;
1021
1022        /**
1023         * Optional Group identifying the individuals that make up the population.
1024         */
1025        @Child(name = "subjects", type = {Group.class}, order=6, min=0, max=1, modifier=false, summary=false)
1026        @Description(shortDefinition="What individual(s) in the population", formalDefinition="Optional Group identifying the individuals that make up the population." )
1027        protected Reference subjects;
1028
1029        private static final long serialVersionUID = -203678073L;
1030
1031    /**
1032     * Constructor
1033     */
1034      public MeasureReportGroupPopulationComponent() {
1035        super();
1036      }
1037
1038        /**
1039         * @return {@link #linkId} (The population from the Measure that corresponds to this population in the MeasureReport resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
1040         */
1041        public StringType getLinkIdElement() { 
1042          if (this.linkId == null)
1043            if (Configuration.errorOnAutoCreate())
1044              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.linkId");
1045            else if (Configuration.doAutoCreate())
1046              this.linkId = new StringType(); // bb
1047          return this.linkId;
1048        }
1049
1050        public boolean hasLinkIdElement() { 
1051          return this.linkId != null && !this.linkId.isEmpty();
1052        }
1053
1054        public boolean hasLinkId() { 
1055          return this.linkId != null && !this.linkId.isEmpty();
1056        }
1057
1058        /**
1059         * @param value {@link #linkId} (The population from the Measure that corresponds to this population in the MeasureReport resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
1060         */
1061        public MeasureReportGroupPopulationComponent setLinkIdElement(StringType value) { 
1062          this.linkId = value;
1063          return this;
1064        }
1065
1066        /**
1067         * @return The population from the Measure that corresponds to this population in the MeasureReport resource.
1068         */
1069        public String getLinkId() { 
1070          return this.linkId == null ? null : this.linkId.getValue();
1071        }
1072
1073        /**
1074         * @param value The population from the Measure that corresponds to this population in the MeasureReport resource.
1075         */
1076        public MeasureReportGroupPopulationComponent setLinkId(String value) { 
1077          if (Utilities.noString(value))
1078            this.linkId = null;
1079          else {
1080            if (this.linkId == null)
1081              this.linkId = new StringType();
1082            this.linkId.setValue(value);
1083          }
1084          return this;
1085        }
1086
1087        /**
1088         * @return {@link #code} (The type of the population.)
1089         */
1090        public CodeableConcept getCode() { 
1091          if (this.code == null)
1092            if (Configuration.errorOnAutoCreate())
1093              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.code");
1094            else if (Configuration.doAutoCreate())
1095              this.code = new CodeableConcept(); // cc
1096          return this.code;
1097        }
1098
1099        public boolean hasCode() { 
1100          return this.code != null && !this.code.isEmpty();
1101        }
1102
1103        /**
1104         * @param value {@link #code} (The type of the population.)
1105         */
1106        public MeasureReportGroupPopulationComponent setCode(CodeableConcept value) { 
1107          this.code = value;
1108          return this;
1109        }
1110
1111        /**
1112         * @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
1113         */
1114        public IntegerType getCountElement() { 
1115          if (this.count == null)
1116            if (Configuration.errorOnAutoCreate())
1117              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.count");
1118            else if (Configuration.doAutoCreate())
1119              this.count = new IntegerType(); // bb
1120          return this.count;
1121        }
1122
1123        public boolean hasCountElement() { 
1124          return this.count != null && !this.count.isEmpty();
1125        }
1126
1127        public boolean hasCount() { 
1128          return this.count != null && !this.count.isEmpty();
1129        }
1130
1131        /**
1132         * @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
1133         */
1134        public MeasureReportGroupPopulationComponent setCountElement(IntegerType value) { 
1135          this.count = value;
1136          return this;
1137        }
1138
1139        /**
1140         * @return The number of members of the population.
1141         */
1142        public int getCount() { 
1143          return this.count == null || this.count.isEmpty() ? 0 : this.count.getValue();
1144        }
1145
1146        /**
1147         * @param value The number of members of the population.
1148         */
1149        public MeasureReportGroupPopulationComponent setCount(int value) { 
1150            if (this.count == null)
1151              this.count = new IntegerType();
1152            this.count.setValue(value);
1153          return this;
1154        }
1155
1156        /**
1157         * @return {@link #subjectResults} (This element refers to a List of individual level MeasureReport resources, one for each subject in this population.)
1158         */
1159        public Reference getSubjectResults() { 
1160          if (this.subjectResults == null)
1161            if (Configuration.errorOnAutoCreate())
1162              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.subjectResults");
1163            else if (Configuration.doAutoCreate())
1164              this.subjectResults = new Reference(); // cc
1165          return this.subjectResults;
1166        }
1167
1168        public boolean hasSubjectResults() { 
1169          return this.subjectResults != null && !this.subjectResults.isEmpty();
1170        }
1171
1172        /**
1173         * @param value {@link #subjectResults} (This element refers to a List of individual level MeasureReport resources, one for each subject in this population.)
1174         */
1175        public MeasureReportGroupPopulationComponent setSubjectResults(Reference value) { 
1176          this.subjectResults = value;
1177          return this;
1178        }
1179
1180        /**
1181         * @return {@link #subjectReport} (A reference to an individual level MeasureReport resource for a member of the population.)
1182         */
1183        public List<Reference> getSubjectReport() { 
1184          if (this.subjectReport == null)
1185            this.subjectReport = new ArrayList<Reference>();
1186          return this.subjectReport;
1187        }
1188
1189        /**
1190         * @return Returns a reference to <code>this</code> for easy method chaining
1191         */
1192        public MeasureReportGroupPopulationComponent setSubjectReport(List<Reference> theSubjectReport) { 
1193          this.subjectReport = theSubjectReport;
1194          return this;
1195        }
1196
1197        public boolean hasSubjectReport() { 
1198          if (this.subjectReport == null)
1199            return false;
1200          for (Reference item : this.subjectReport)
1201            if (!item.isEmpty())
1202              return true;
1203          return false;
1204        }
1205
1206        public Reference addSubjectReport() { //3
1207          Reference t = new Reference();
1208          if (this.subjectReport == null)
1209            this.subjectReport = new ArrayList<Reference>();
1210          this.subjectReport.add(t);
1211          return t;
1212        }
1213
1214        public MeasureReportGroupPopulationComponent addSubjectReport(Reference t) { //3
1215          if (t == null)
1216            return this;
1217          if (this.subjectReport == null)
1218            this.subjectReport = new ArrayList<Reference>();
1219          this.subjectReport.add(t);
1220          return this;
1221        }
1222
1223        /**
1224         * @return The first repetition of repeating field {@link #subjectReport}, creating it if it does not already exist {3}
1225         */
1226        public Reference getSubjectReportFirstRep() { 
1227          if (getSubjectReport().isEmpty()) {
1228            addSubjectReport();
1229          }
1230          return getSubjectReport().get(0);
1231        }
1232
1233        /**
1234         * @return {@link #subjects} (Optional Group identifying the individuals that make up the population.)
1235         */
1236        public Reference getSubjects() { 
1237          if (this.subjects == null)
1238            if (Configuration.errorOnAutoCreate())
1239              throw new Error("Attempt to auto-create MeasureReportGroupPopulationComponent.subjects");
1240            else if (Configuration.doAutoCreate())
1241              this.subjects = new Reference(); // cc
1242          return this.subjects;
1243        }
1244
1245        public boolean hasSubjects() { 
1246          return this.subjects != null && !this.subjects.isEmpty();
1247        }
1248
1249        /**
1250         * @param value {@link #subjects} (Optional Group identifying the individuals that make up the population.)
1251         */
1252        public MeasureReportGroupPopulationComponent setSubjects(Reference value) { 
1253          this.subjects = value;
1254          return this;
1255        }
1256
1257        protected void listChildren(List<Property> children) {
1258          super.listChildren(children);
1259          children.add(new Property("linkId", "string", "The population from the Measure that corresponds to this population in the MeasureReport resource.", 0, 1, linkId));
1260          children.add(new Property("code", "CodeableConcept", "The type of the population.", 0, 1, code));
1261          children.add(new Property("count", "integer", "The number of members of the population.", 0, 1, count));
1262          children.add(new Property("subjectResults", "Reference(List)", "This element refers to a List of individual level MeasureReport resources, one for each subject in this population.", 0, 1, subjectResults));
1263          children.add(new Property("subjectReport", "Reference(MeasureReport)", "A reference to an individual level MeasureReport resource for a member of the population.", 0, java.lang.Integer.MAX_VALUE, subjectReport));
1264          children.add(new Property("subjects", "Reference(Group)", "Optional Group identifying the individuals that make up the population.", 0, 1, subjects));
1265        }
1266
1267        @Override
1268        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1269          switch (_hash) {
1270          case -1102667083: /*linkId*/  return new Property("linkId", "string", "The population from the Measure that corresponds to this population in the MeasureReport resource.", 0, 1, linkId);
1271          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The type of the population.", 0, 1, code);
1272          case 94851343: /*count*/  return new Property("count", "integer", "The number of members of the population.", 0, 1, count);
1273          case 2136184106: /*subjectResults*/  return new Property("subjectResults", "Reference(List)", "This element refers to a List of individual level MeasureReport resources, one for each subject in this population.", 0, 1, subjectResults);
1274          case 68814208: /*subjectReport*/  return new Property("subjectReport", "Reference(MeasureReport)", "A reference to an individual level MeasureReport resource for a member of the population.", 0, java.lang.Integer.MAX_VALUE, subjectReport);
1275          case -2069868345: /*subjects*/  return new Property("subjects", "Reference(Group)", "Optional Group identifying the individuals that make up the population.", 0, 1, subjects);
1276          default: return super.getNamedProperty(_hash, _name, _checkValid);
1277          }
1278
1279        }
1280
1281      @Override
1282      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1283        switch (hash) {
1284        case -1102667083: /*linkId*/ return this.linkId == null ? new Base[0] : new Base[] {this.linkId}; // StringType
1285        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1286        case 94851343: /*count*/ return this.count == null ? new Base[0] : new Base[] {this.count}; // IntegerType
1287        case 2136184106: /*subjectResults*/ return this.subjectResults == null ? new Base[0] : new Base[] {this.subjectResults}; // Reference
1288        case 68814208: /*subjectReport*/ return this.subjectReport == null ? new Base[0] : this.subjectReport.toArray(new Base[this.subjectReport.size()]); // Reference
1289        case -2069868345: /*subjects*/ return this.subjects == null ? new Base[0] : new Base[] {this.subjects}; // Reference
1290        default: return super.getProperty(hash, name, checkValid);
1291        }
1292
1293      }
1294
1295      @Override
1296      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1297        switch (hash) {
1298        case -1102667083: // linkId
1299          this.linkId = TypeConvertor.castToString(value); // StringType
1300          return value;
1301        case 3059181: // code
1302          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1303          return value;
1304        case 94851343: // count
1305          this.count = TypeConvertor.castToInteger(value); // IntegerType
1306          return value;
1307        case 2136184106: // subjectResults
1308          this.subjectResults = TypeConvertor.castToReference(value); // Reference
1309          return value;
1310        case 68814208: // subjectReport
1311          this.getSubjectReport().add(TypeConvertor.castToReference(value)); // Reference
1312          return value;
1313        case -2069868345: // subjects
1314          this.subjects = TypeConvertor.castToReference(value); // Reference
1315          return value;
1316        default: return super.setProperty(hash, name, value);
1317        }
1318
1319      }
1320
1321      @Override
1322      public Base setProperty(String name, Base value) throws FHIRException {
1323        if (name.equals("linkId")) {
1324          this.linkId = TypeConvertor.castToString(value); // StringType
1325        } else if (name.equals("code")) {
1326          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1327        } else if (name.equals("count")) {
1328          this.count = TypeConvertor.castToInteger(value); // IntegerType
1329        } else if (name.equals("subjectResults")) {
1330          this.subjectResults = TypeConvertor.castToReference(value); // Reference
1331        } else if (name.equals("subjectReport")) {
1332          this.getSubjectReport().add(TypeConvertor.castToReference(value));
1333        } else if (name.equals("subjects")) {
1334          this.subjects = TypeConvertor.castToReference(value); // Reference
1335        } else
1336          return super.setProperty(name, value);
1337        return value;
1338      }
1339
1340      @Override
1341      public Base makeProperty(int hash, String name) throws FHIRException {
1342        switch (hash) {
1343        case -1102667083:  return getLinkIdElement();
1344        case 3059181:  return getCode();
1345        case 94851343:  return getCountElement();
1346        case 2136184106:  return getSubjectResults();
1347        case 68814208:  return addSubjectReport(); 
1348        case -2069868345:  return getSubjects();
1349        default: return super.makeProperty(hash, name);
1350        }
1351
1352      }
1353
1354      @Override
1355      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1356        switch (hash) {
1357        case -1102667083: /*linkId*/ return new String[] {"string"};
1358        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1359        case 94851343: /*count*/ return new String[] {"integer"};
1360        case 2136184106: /*subjectResults*/ return new String[] {"Reference"};
1361        case 68814208: /*subjectReport*/ return new String[] {"Reference"};
1362        case -2069868345: /*subjects*/ return new String[] {"Reference"};
1363        default: return super.getTypesForProperty(hash, name);
1364        }
1365
1366      }
1367
1368      @Override
1369      public Base addChild(String name) throws FHIRException {
1370        if (name.equals("linkId")) {
1371          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.group.population.linkId");
1372        }
1373        else if (name.equals("code")) {
1374          this.code = new CodeableConcept();
1375          return this.code;
1376        }
1377        else if (name.equals("count")) {
1378          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.group.population.count");
1379        }
1380        else if (name.equals("subjectResults")) {
1381          this.subjectResults = new Reference();
1382          return this.subjectResults;
1383        }
1384        else if (name.equals("subjectReport")) {
1385          return addSubjectReport();
1386        }
1387        else if (name.equals("subjects")) {
1388          this.subjects = new Reference();
1389          return this.subjects;
1390        }
1391        else
1392          return super.addChild(name);
1393      }
1394
1395      public MeasureReportGroupPopulationComponent copy() {
1396        MeasureReportGroupPopulationComponent dst = new MeasureReportGroupPopulationComponent();
1397        copyValues(dst);
1398        return dst;
1399      }
1400
1401      public void copyValues(MeasureReportGroupPopulationComponent dst) {
1402        super.copyValues(dst);
1403        dst.linkId = linkId == null ? null : linkId.copy();
1404        dst.code = code == null ? null : code.copy();
1405        dst.count = count == null ? null : count.copy();
1406        dst.subjectResults = subjectResults == null ? null : subjectResults.copy();
1407        if (subjectReport != null) {
1408          dst.subjectReport = new ArrayList<Reference>();
1409          for (Reference i : subjectReport)
1410            dst.subjectReport.add(i.copy());
1411        };
1412        dst.subjects = subjects == null ? null : subjects.copy();
1413      }
1414
1415      @Override
1416      public boolean equalsDeep(Base other_) {
1417        if (!super.equalsDeep(other_))
1418          return false;
1419        if (!(other_ instanceof MeasureReportGroupPopulationComponent))
1420          return false;
1421        MeasureReportGroupPopulationComponent o = (MeasureReportGroupPopulationComponent) other_;
1422        return compareDeep(linkId, o.linkId, true) && compareDeep(code, o.code, true) && compareDeep(count, o.count, true)
1423           && compareDeep(subjectResults, o.subjectResults, true) && compareDeep(subjectReport, o.subjectReport, true)
1424           && compareDeep(subjects, o.subjects, true);
1425      }
1426
1427      @Override
1428      public boolean equalsShallow(Base other_) {
1429        if (!super.equalsShallow(other_))
1430          return false;
1431        if (!(other_ instanceof MeasureReportGroupPopulationComponent))
1432          return false;
1433        MeasureReportGroupPopulationComponent o = (MeasureReportGroupPopulationComponent) other_;
1434        return compareValues(linkId, o.linkId, true) && compareValues(count, o.count, true);
1435      }
1436
1437      public boolean isEmpty() {
1438        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(linkId, code, count, subjectResults
1439          , subjectReport, subjects);
1440      }
1441
1442  public String fhirType() {
1443    return "MeasureReport.group.population";
1444
1445  }
1446
1447  }
1448
1449    @Block()
1450    public static class MeasureReportGroupStratifierComponent extends BackboneElement implements IBaseBackboneElement {
1451        /**
1452         * The stratifier from the Measure that corresponds to this stratifier in the MeasureReport resource.
1453         */
1454        @Child(name = "linkId", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1455        @Description(shortDefinition="Pointer to specific stratifier from Measure", formalDefinition="The stratifier from the Measure that corresponds to this stratifier in the MeasureReport resource." )
1456        protected StringType linkId;
1457
1458        /**
1459         * The meaning of this stratifier, as defined in the measure definition.
1460         */
1461        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
1462        @Description(shortDefinition="What stratifier of the group", formalDefinition="The meaning of this stratifier, as defined in the measure definition." )
1463        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-stratifier-example")
1464        protected CodeableConcept code;
1465
1466        /**
1467         * 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.
1468         */
1469        @Child(name = "stratum", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1470        @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." )
1471        protected List<StratifierGroupComponent> stratum;
1472
1473        private static final long serialVersionUID = 1021076195L;
1474
1475    /**
1476     * Constructor
1477     */
1478      public MeasureReportGroupStratifierComponent() {
1479        super();
1480      }
1481
1482        /**
1483         * @return {@link #linkId} (The stratifier from the Measure that corresponds to this stratifier in the MeasureReport resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
1484         */
1485        public StringType getLinkIdElement() { 
1486          if (this.linkId == null)
1487            if (Configuration.errorOnAutoCreate())
1488              throw new Error("Attempt to auto-create MeasureReportGroupStratifierComponent.linkId");
1489            else if (Configuration.doAutoCreate())
1490              this.linkId = new StringType(); // bb
1491          return this.linkId;
1492        }
1493
1494        public boolean hasLinkIdElement() { 
1495          return this.linkId != null && !this.linkId.isEmpty();
1496        }
1497
1498        public boolean hasLinkId() { 
1499          return this.linkId != null && !this.linkId.isEmpty();
1500        }
1501
1502        /**
1503         * @param value {@link #linkId} (The stratifier from the Measure that corresponds to this stratifier in the MeasureReport resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
1504         */
1505        public MeasureReportGroupStratifierComponent setLinkIdElement(StringType value) { 
1506          this.linkId = value;
1507          return this;
1508        }
1509
1510        /**
1511         * @return The stratifier from the Measure that corresponds to this stratifier in the MeasureReport resource.
1512         */
1513        public String getLinkId() { 
1514          return this.linkId == null ? null : this.linkId.getValue();
1515        }
1516
1517        /**
1518         * @param value The stratifier from the Measure that corresponds to this stratifier in the MeasureReport resource.
1519         */
1520        public MeasureReportGroupStratifierComponent setLinkId(String value) { 
1521          if (Utilities.noString(value))
1522            this.linkId = null;
1523          else {
1524            if (this.linkId == null)
1525              this.linkId = new StringType();
1526            this.linkId.setValue(value);
1527          }
1528          return this;
1529        }
1530
1531        /**
1532         * @return {@link #code} (The meaning of this stratifier, as defined in the measure definition.)
1533         */
1534        public CodeableConcept getCode() { 
1535          if (this.code == null)
1536            if (Configuration.errorOnAutoCreate())
1537              throw new Error("Attempt to auto-create MeasureReportGroupStratifierComponent.code");
1538            else if (Configuration.doAutoCreate())
1539              this.code = new CodeableConcept(); // cc
1540          return this.code;
1541        }
1542
1543        public boolean hasCode() { 
1544          return this.code != null && !this.code.isEmpty();
1545        }
1546
1547        /**
1548         * @param value {@link #code} (The meaning of this stratifier, as defined in the measure definition.)
1549         */
1550        public MeasureReportGroupStratifierComponent setCode(CodeableConcept value) { 
1551          this.code = value;
1552          return this;
1553        }
1554
1555        /**
1556         * @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.)
1557         */
1558        public List<StratifierGroupComponent> getStratum() { 
1559          if (this.stratum == null)
1560            this.stratum = new ArrayList<StratifierGroupComponent>();
1561          return this.stratum;
1562        }
1563
1564        /**
1565         * @return Returns a reference to <code>this</code> for easy method chaining
1566         */
1567        public MeasureReportGroupStratifierComponent setStratum(List<StratifierGroupComponent> theStratum) { 
1568          this.stratum = theStratum;
1569          return this;
1570        }
1571
1572        public boolean hasStratum() { 
1573          if (this.stratum == null)
1574            return false;
1575          for (StratifierGroupComponent item : this.stratum)
1576            if (!item.isEmpty())
1577              return true;
1578          return false;
1579        }
1580
1581        public StratifierGroupComponent addStratum() { //3
1582          StratifierGroupComponent t = new StratifierGroupComponent();
1583          if (this.stratum == null)
1584            this.stratum = new ArrayList<StratifierGroupComponent>();
1585          this.stratum.add(t);
1586          return t;
1587        }
1588
1589        public MeasureReportGroupStratifierComponent addStratum(StratifierGroupComponent t) { //3
1590          if (t == null)
1591            return this;
1592          if (this.stratum == null)
1593            this.stratum = new ArrayList<StratifierGroupComponent>();
1594          this.stratum.add(t);
1595          return this;
1596        }
1597
1598        /**
1599         * @return The first repetition of repeating field {@link #stratum}, creating it if it does not already exist {3}
1600         */
1601        public StratifierGroupComponent getStratumFirstRep() { 
1602          if (getStratum().isEmpty()) {
1603            addStratum();
1604          }
1605          return getStratum().get(0);
1606        }
1607
1608        protected void listChildren(List<Property> children) {
1609          super.listChildren(children);
1610          children.add(new Property("linkId", "string", "The stratifier from the Measure that corresponds to this stratifier in the MeasureReport resource.", 0, 1, linkId));
1611          children.add(new Property("code", "CodeableConcept", "The meaning of this stratifier, as defined in the measure definition.", 0, 1, code));
1612          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));
1613        }
1614
1615        @Override
1616        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1617          switch (_hash) {
1618          case -1102667083: /*linkId*/  return new Property("linkId", "string", "The stratifier from the Measure that corresponds to this stratifier in the MeasureReport resource.", 0, 1, linkId);
1619          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The meaning of this stratifier, as defined in the measure definition.", 0, 1, code);
1620          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);
1621          default: return super.getNamedProperty(_hash, _name, _checkValid);
1622          }
1623
1624        }
1625
1626      @Override
1627      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1628        switch (hash) {
1629        case -1102667083: /*linkId*/ return this.linkId == null ? new Base[0] : new Base[] {this.linkId}; // StringType
1630        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1631        case -1881991236: /*stratum*/ return this.stratum == null ? new Base[0] : this.stratum.toArray(new Base[this.stratum.size()]); // StratifierGroupComponent
1632        default: return super.getProperty(hash, name, checkValid);
1633        }
1634
1635      }
1636
1637      @Override
1638      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1639        switch (hash) {
1640        case -1102667083: // linkId
1641          this.linkId = TypeConvertor.castToString(value); // StringType
1642          return value;
1643        case 3059181: // code
1644          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1645          return value;
1646        case -1881991236: // stratum
1647          this.getStratum().add((StratifierGroupComponent) value); // StratifierGroupComponent
1648          return value;
1649        default: return super.setProperty(hash, name, value);
1650        }
1651
1652      }
1653
1654      @Override
1655      public Base setProperty(String name, Base value) throws FHIRException {
1656        if (name.equals("linkId")) {
1657          this.linkId = TypeConvertor.castToString(value); // StringType
1658        } else if (name.equals("code")) {
1659          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1660        } else if (name.equals("stratum")) {
1661          this.getStratum().add((StratifierGroupComponent) value);
1662        } else
1663          return super.setProperty(name, value);
1664        return value;
1665      }
1666
1667      @Override
1668      public Base makeProperty(int hash, String name) throws FHIRException {
1669        switch (hash) {
1670        case -1102667083:  return getLinkIdElement();
1671        case 3059181:  return getCode();
1672        case -1881991236:  return addStratum(); 
1673        default: return super.makeProperty(hash, name);
1674        }
1675
1676      }
1677
1678      @Override
1679      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1680        switch (hash) {
1681        case -1102667083: /*linkId*/ return new String[] {"string"};
1682        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1683        case -1881991236: /*stratum*/ return new String[] {};
1684        default: return super.getTypesForProperty(hash, name);
1685        }
1686
1687      }
1688
1689      @Override
1690      public Base addChild(String name) throws FHIRException {
1691        if (name.equals("linkId")) {
1692          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.group.stratifier.linkId");
1693        }
1694        else if (name.equals("code")) {
1695          this.code = new CodeableConcept();
1696          return this.code;
1697        }
1698        else if (name.equals("stratum")) {
1699          return addStratum();
1700        }
1701        else
1702          return super.addChild(name);
1703      }
1704
1705      public MeasureReportGroupStratifierComponent copy() {
1706        MeasureReportGroupStratifierComponent dst = new MeasureReportGroupStratifierComponent();
1707        copyValues(dst);
1708        return dst;
1709      }
1710
1711      public void copyValues(MeasureReportGroupStratifierComponent dst) {
1712        super.copyValues(dst);
1713        dst.linkId = linkId == null ? null : linkId.copy();
1714        dst.code = code == null ? null : code.copy();
1715        if (stratum != null) {
1716          dst.stratum = new ArrayList<StratifierGroupComponent>();
1717          for (StratifierGroupComponent i : stratum)
1718            dst.stratum.add(i.copy());
1719        };
1720      }
1721
1722      @Override
1723      public boolean equalsDeep(Base other_) {
1724        if (!super.equalsDeep(other_))
1725          return false;
1726        if (!(other_ instanceof MeasureReportGroupStratifierComponent))
1727          return false;
1728        MeasureReportGroupStratifierComponent o = (MeasureReportGroupStratifierComponent) other_;
1729        return compareDeep(linkId, o.linkId, true) && compareDeep(code, o.code, true) && compareDeep(stratum, o.stratum, true)
1730          ;
1731      }
1732
1733      @Override
1734      public boolean equalsShallow(Base other_) {
1735        if (!super.equalsShallow(other_))
1736          return false;
1737        if (!(other_ instanceof MeasureReportGroupStratifierComponent))
1738          return false;
1739        MeasureReportGroupStratifierComponent o = (MeasureReportGroupStratifierComponent) other_;
1740        return compareValues(linkId, o.linkId, true);
1741      }
1742
1743      public boolean isEmpty() {
1744        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(linkId, code, stratum);
1745      }
1746
1747  public String fhirType() {
1748    return "MeasureReport.group.stratifier";
1749
1750  }
1751
1752  }
1753
1754    @Block()
1755    public static class StratifierGroupComponent extends BackboneElement implements IBaseBackboneElement {
1756        /**
1757         * 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.
1758         */
1759        @Child(name = "value", type = {CodeableConcept.class, BooleanType.class, Quantity.class, Range.class, Reference.class}, order=1, min=0, max=1, modifier=false, summary=false)
1760        @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." )
1761        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measurereport-stratifier-value-example")
1762        protected DataType value;
1763
1764        /**
1765         * A stratifier component value.
1766         */
1767        @Child(name = "component", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1768        @Description(shortDefinition="Stratifier component values", formalDefinition="A stratifier component value." )
1769        protected List<StratifierGroupComponentComponent> component;
1770
1771        /**
1772         * The populations that make up the stratum, one for each type of population appropriate to the measure.
1773         */
1774        @Child(name = "population", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1775        @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." )
1776        protected List<StratifierGroupPopulationComponent> population;
1777
1778        /**
1779         * 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.
1780         */
1781        @Child(name = "measureScore", type = {Quantity.class, DateTimeType.class, CodeableConcept.class, Period.class, Range.class, Duration.class}, order=4, min=0, max=1, modifier=false, summary=false)
1782        @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." )
1783        protected DataType measureScore;
1784
1785        private static final long serialVersionUID = -1713783491L;
1786
1787    /**
1788     * Constructor
1789     */
1790      public StratifierGroupComponent() {
1791        super();
1792      }
1793
1794        /**
1795         * @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.)
1796         */
1797        public DataType getValue() { 
1798          return this.value;
1799        }
1800
1801        /**
1802         * @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.)
1803         */
1804        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
1805          if (this.value == null)
1806            this.value = new CodeableConcept();
1807          if (!(this.value instanceof CodeableConcept))
1808            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
1809          return (CodeableConcept) this.value;
1810        }
1811
1812        public boolean hasValueCodeableConcept() { 
1813          return this != null && this.value instanceof CodeableConcept;
1814        }
1815
1816        /**
1817         * @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.)
1818         */
1819        public BooleanType getValueBooleanType() throws FHIRException { 
1820          if (this.value == null)
1821            this.value = new BooleanType();
1822          if (!(this.value instanceof BooleanType))
1823            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
1824          return (BooleanType) this.value;
1825        }
1826
1827        public boolean hasValueBooleanType() { 
1828          return this != null && this.value instanceof BooleanType;
1829        }
1830
1831        /**
1832         * @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.)
1833         */
1834        public Quantity getValueQuantity() throws FHIRException { 
1835          if (this.value == null)
1836            this.value = new Quantity();
1837          if (!(this.value instanceof Quantity))
1838            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
1839          return (Quantity) this.value;
1840        }
1841
1842        public boolean hasValueQuantity() { 
1843          return this != null && this.value instanceof Quantity;
1844        }
1845
1846        /**
1847         * @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.)
1848         */
1849        public Range getValueRange() throws FHIRException { 
1850          if (this.value == null)
1851            this.value = new Range();
1852          if (!(this.value instanceof Range))
1853            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
1854          return (Range) this.value;
1855        }
1856
1857        public boolean hasValueRange() { 
1858          return this != null && this.value instanceof Range;
1859        }
1860
1861        /**
1862         * @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.)
1863         */
1864        public Reference getValueReference() throws FHIRException { 
1865          if (this.value == null)
1866            this.value = new Reference();
1867          if (!(this.value instanceof Reference))
1868            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
1869          return (Reference) this.value;
1870        }
1871
1872        public boolean hasValueReference() { 
1873          return this != null && this.value instanceof Reference;
1874        }
1875
1876        public boolean hasValue() { 
1877          return this.value != null && !this.value.isEmpty();
1878        }
1879
1880        /**
1881         * @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.)
1882         */
1883        public StratifierGroupComponent setValue(DataType value) { 
1884          if (value != null && !(value instanceof CodeableConcept || value instanceof BooleanType || value instanceof Quantity || value instanceof Range || value instanceof Reference))
1885            throw new FHIRException("Not the right type for MeasureReport.group.stratifier.stratum.value[x]: "+value.fhirType());
1886          this.value = value;
1887          return this;
1888        }
1889
1890        /**
1891         * @return {@link #component} (A stratifier component value.)
1892         */
1893        public List<StratifierGroupComponentComponent> getComponent() { 
1894          if (this.component == null)
1895            this.component = new ArrayList<StratifierGroupComponentComponent>();
1896          return this.component;
1897        }
1898
1899        /**
1900         * @return Returns a reference to <code>this</code> for easy method chaining
1901         */
1902        public StratifierGroupComponent setComponent(List<StratifierGroupComponentComponent> theComponent) { 
1903          this.component = theComponent;
1904          return this;
1905        }
1906
1907        public boolean hasComponent() { 
1908          if (this.component == null)
1909            return false;
1910          for (StratifierGroupComponentComponent item : this.component)
1911            if (!item.isEmpty())
1912              return true;
1913          return false;
1914        }
1915
1916        public StratifierGroupComponentComponent addComponent() { //3
1917          StratifierGroupComponentComponent t = new StratifierGroupComponentComponent();
1918          if (this.component == null)
1919            this.component = new ArrayList<StratifierGroupComponentComponent>();
1920          this.component.add(t);
1921          return t;
1922        }
1923
1924        public StratifierGroupComponent addComponent(StratifierGroupComponentComponent t) { //3
1925          if (t == null)
1926            return this;
1927          if (this.component == null)
1928            this.component = new ArrayList<StratifierGroupComponentComponent>();
1929          this.component.add(t);
1930          return this;
1931        }
1932
1933        /**
1934         * @return The first repetition of repeating field {@link #component}, creating it if it does not already exist {3}
1935         */
1936        public StratifierGroupComponentComponent getComponentFirstRep() { 
1937          if (getComponent().isEmpty()) {
1938            addComponent();
1939          }
1940          return getComponent().get(0);
1941        }
1942
1943        /**
1944         * @return {@link #population} (The populations that make up the stratum, one for each type of population appropriate to the measure.)
1945         */
1946        public List<StratifierGroupPopulationComponent> getPopulation() { 
1947          if (this.population == null)
1948            this.population = new ArrayList<StratifierGroupPopulationComponent>();
1949          return this.population;
1950        }
1951
1952        /**
1953         * @return Returns a reference to <code>this</code> for easy method chaining
1954         */
1955        public StratifierGroupComponent setPopulation(List<StratifierGroupPopulationComponent> thePopulation) { 
1956          this.population = thePopulation;
1957          return this;
1958        }
1959
1960        public boolean hasPopulation() { 
1961          if (this.population == null)
1962            return false;
1963          for (StratifierGroupPopulationComponent item : this.population)
1964            if (!item.isEmpty())
1965              return true;
1966          return false;
1967        }
1968
1969        public StratifierGroupPopulationComponent addPopulation() { //3
1970          StratifierGroupPopulationComponent t = new StratifierGroupPopulationComponent();
1971          if (this.population == null)
1972            this.population = new ArrayList<StratifierGroupPopulationComponent>();
1973          this.population.add(t);
1974          return t;
1975        }
1976
1977        public StratifierGroupComponent addPopulation(StratifierGroupPopulationComponent t) { //3
1978          if (t == null)
1979            return this;
1980          if (this.population == null)
1981            this.population = new ArrayList<StratifierGroupPopulationComponent>();
1982          this.population.add(t);
1983          return this;
1984        }
1985
1986        /**
1987         * @return The first repetition of repeating field {@link #population}, creating it if it does not already exist {3}
1988         */
1989        public StratifierGroupPopulationComponent getPopulationFirstRep() { 
1990          if (getPopulation().isEmpty()) {
1991            addPopulation();
1992          }
1993          return getPopulation().get(0);
1994        }
1995
1996        /**
1997         * @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.)
1998         */
1999        public DataType getMeasureScore() { 
2000          return this.measureScore;
2001        }
2002
2003        /**
2004         * @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.)
2005         */
2006        public Quantity getMeasureScoreQuantity() throws FHIRException { 
2007          if (this.measureScore == null)
2008            this.measureScore = new Quantity();
2009          if (!(this.measureScore instanceof Quantity))
2010            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.measureScore.getClass().getName()+" was encountered");
2011          return (Quantity) this.measureScore;
2012        }
2013
2014        public boolean hasMeasureScoreQuantity() { 
2015          return this != null && this.measureScore instanceof Quantity;
2016        }
2017
2018        /**
2019         * @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.)
2020         */
2021        public DateTimeType getMeasureScoreDateTimeType() throws FHIRException { 
2022          if (this.measureScore == null)
2023            this.measureScore = new DateTimeType();
2024          if (!(this.measureScore instanceof DateTimeType))
2025            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.measureScore.getClass().getName()+" was encountered");
2026          return (DateTimeType) this.measureScore;
2027        }
2028
2029        public boolean hasMeasureScoreDateTimeType() { 
2030          return this != null && this.measureScore instanceof DateTimeType;
2031        }
2032
2033        /**
2034         * @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.)
2035         */
2036        public CodeableConcept getMeasureScoreCodeableConcept() throws FHIRException { 
2037          if (this.measureScore == null)
2038            this.measureScore = new CodeableConcept();
2039          if (!(this.measureScore instanceof CodeableConcept))
2040            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.measureScore.getClass().getName()+" was encountered");
2041          return (CodeableConcept) this.measureScore;
2042        }
2043
2044        public boolean hasMeasureScoreCodeableConcept() { 
2045          return this != null && this.measureScore instanceof CodeableConcept;
2046        }
2047
2048        /**
2049         * @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.)
2050         */
2051        public Period getMeasureScorePeriod() throws FHIRException { 
2052          if (this.measureScore == null)
2053            this.measureScore = new Period();
2054          if (!(this.measureScore instanceof Period))
2055            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.measureScore.getClass().getName()+" was encountered");
2056          return (Period) this.measureScore;
2057        }
2058
2059        public boolean hasMeasureScorePeriod() { 
2060          return this != null && this.measureScore instanceof Period;
2061        }
2062
2063        /**
2064         * @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.)
2065         */
2066        public Range getMeasureScoreRange() throws FHIRException { 
2067          if (this.measureScore == null)
2068            this.measureScore = new Range();
2069          if (!(this.measureScore instanceof Range))
2070            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.measureScore.getClass().getName()+" was encountered");
2071          return (Range) this.measureScore;
2072        }
2073
2074        public boolean hasMeasureScoreRange() { 
2075          return this != null && this.measureScore instanceof Range;
2076        }
2077
2078        /**
2079         * @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.)
2080         */
2081        public Duration getMeasureScoreDuration() throws FHIRException { 
2082          if (this.measureScore == null)
2083            this.measureScore = new Duration();
2084          if (!(this.measureScore instanceof Duration))
2085            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.measureScore.getClass().getName()+" was encountered");
2086          return (Duration) this.measureScore;
2087        }
2088
2089        public boolean hasMeasureScoreDuration() { 
2090          return this != null && this.measureScore instanceof Duration;
2091        }
2092
2093        public boolean hasMeasureScore() { 
2094          return this.measureScore != null && !this.measureScore.isEmpty();
2095        }
2096
2097        /**
2098         * @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.)
2099         */
2100        public StratifierGroupComponent setMeasureScore(DataType value) { 
2101          if (value != null && !(value instanceof Quantity || value instanceof DateTimeType || value instanceof CodeableConcept || value instanceof Period || value instanceof Range || value instanceof Duration))
2102            throw new FHIRException("Not the right type for MeasureReport.group.stratifier.stratum.measureScore[x]: "+value.fhirType());
2103          this.measureScore = value;
2104          return this;
2105        }
2106
2107        protected void listChildren(List<Property> children) {
2108          super.listChildren(children);
2109          children.add(new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value));
2110          children.add(new Property("component", "", "A stratifier component value.", 0, java.lang.Integer.MAX_VALUE, component));
2111          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));
2112          children.add(new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore));
2113        }
2114
2115        @Override
2116        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2117          switch (_hash) {
2118          case -1410166417: /*value[x]*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
2119          case 111972721: /*value*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
2120          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
2121          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
2122          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
2123          case 2030761548: /*valueRange*/  return new Property("value[x]", "Range", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
2124          case 1755241690: /*valueReference*/  return new Property("value[x]", "Reference", "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", 0, 1, value);
2125          case -1399907075: /*component*/  return new Property("component", "", "A stratifier component value.", 0, java.lang.Integer.MAX_VALUE, component);
2126          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);
2127          case 1854115884: /*measureScore[x]*/  return new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
2128          case -386313260: /*measureScore*/  return new Property("measureScore[x]", "Quantity|dateTime|CodeableConcept|Period|Range|Duration", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
2129          case -1880815489: /*measureScoreQuantity*/  return new Property("measureScore[x]", "Quantity", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
2130          case 1196938127: /*measureScoreDateTime*/  return new Property("measureScore[x]", "dateTime", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
2131          case -1193234131: /*measureScoreCodeableConcept*/  return new Property("measureScore[x]", "CodeableConcept", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
2132          case -1939831115: /*measureScorePeriod*/  return new Property("measureScore[x]", "Period", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
2133          case -615040567: /*measureScoreRange*/  return new Property("measureScore[x]", "Range", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
2134          case 1707143560: /*measureScoreDuration*/  return new Property("measureScore[x]", "Duration", "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", 0, 1, measureScore);
2135          default: return super.getNamedProperty(_hash, _name, _checkValid);
2136          }
2137
2138        }
2139
2140      @Override
2141      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2142        switch (hash) {
2143        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
2144        case -1399907075: /*component*/ return this.component == null ? new Base[0] : this.component.toArray(new Base[this.component.size()]); // StratifierGroupComponentComponent
2145        case -2023558323: /*population*/ return this.population == null ? new Base[0] : this.population.toArray(new Base[this.population.size()]); // StratifierGroupPopulationComponent
2146        case -386313260: /*measureScore*/ return this.measureScore == null ? new Base[0] : new Base[] {this.measureScore}; // DataType
2147        default: return super.getProperty(hash, name, checkValid);
2148        }
2149
2150      }
2151
2152      @Override
2153      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2154        switch (hash) {
2155        case 111972721: // value
2156          this.value = TypeConvertor.castToType(value); // DataType
2157          return value;
2158        case -1399907075: // component
2159          this.getComponent().add((StratifierGroupComponentComponent) value); // StratifierGroupComponentComponent
2160          return value;
2161        case -2023558323: // population
2162          this.getPopulation().add((StratifierGroupPopulationComponent) value); // StratifierGroupPopulationComponent
2163          return value;
2164        case -386313260: // measureScore
2165          this.measureScore = TypeConvertor.castToType(value); // DataType
2166          return value;
2167        default: return super.setProperty(hash, name, value);
2168        }
2169
2170      }
2171
2172      @Override
2173      public Base setProperty(String name, Base value) throws FHIRException {
2174        if (name.equals("value[x]")) {
2175          this.value = TypeConvertor.castToType(value); // DataType
2176        } else if (name.equals("component")) {
2177          this.getComponent().add((StratifierGroupComponentComponent) value);
2178        } else if (name.equals("population")) {
2179          this.getPopulation().add((StratifierGroupPopulationComponent) value);
2180        } else if (name.equals("measureScore[x]")) {
2181          this.measureScore = TypeConvertor.castToType(value); // DataType
2182        } else
2183          return super.setProperty(name, value);
2184        return value;
2185      }
2186
2187      @Override
2188      public Base makeProperty(int hash, String name) throws FHIRException {
2189        switch (hash) {
2190        case -1410166417:  return getValue();
2191        case 111972721:  return getValue();
2192        case -1399907075:  return addComponent(); 
2193        case -2023558323:  return addPopulation(); 
2194        case 1854115884:  return getMeasureScore();
2195        case -386313260:  return getMeasureScore();
2196        default: return super.makeProperty(hash, name);
2197        }
2198
2199      }
2200
2201      @Override
2202      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2203        switch (hash) {
2204        case 111972721: /*value*/ return new String[] {"CodeableConcept", "boolean", "Quantity", "Range", "Reference"};
2205        case -1399907075: /*component*/ return new String[] {};
2206        case -2023558323: /*population*/ return new String[] {};
2207        case -386313260: /*measureScore*/ return new String[] {"Quantity", "dateTime", "CodeableConcept", "Period", "Range", "Duration"};
2208        default: return super.getTypesForProperty(hash, name);
2209        }
2210
2211      }
2212
2213      @Override
2214      public Base addChild(String name) throws FHIRException {
2215        if (name.equals("valueCodeableConcept")) {
2216          this.value = new CodeableConcept();
2217          return this.value;
2218        }
2219        else if (name.equals("valueBoolean")) {
2220          this.value = new BooleanType();
2221          return this.value;
2222        }
2223        else if (name.equals("valueQuantity")) {
2224          this.value = new Quantity();
2225          return this.value;
2226        }
2227        else if (name.equals("valueRange")) {
2228          this.value = new Range();
2229          return this.value;
2230        }
2231        else if (name.equals("valueReference")) {
2232          this.value = new Reference();
2233          return this.value;
2234        }
2235        else if (name.equals("component")) {
2236          return addComponent();
2237        }
2238        else if (name.equals("population")) {
2239          return addPopulation();
2240        }
2241        else if (name.equals("measureScoreQuantity")) {
2242          this.measureScore = new Quantity();
2243          return this.measureScore;
2244        }
2245        else if (name.equals("measureScoreDateTime")) {
2246          this.measureScore = new DateTimeType();
2247          return this.measureScore;
2248        }
2249        else if (name.equals("measureScoreCodeableConcept")) {
2250          this.measureScore = new CodeableConcept();
2251          return this.measureScore;
2252        }
2253        else if (name.equals("measureScorePeriod")) {
2254          this.measureScore = new Period();
2255          return this.measureScore;
2256        }
2257        else if (name.equals("measureScoreRange")) {
2258          this.measureScore = new Range();
2259          return this.measureScore;
2260        }
2261        else if (name.equals("measureScoreDuration")) {
2262          this.measureScore = new Duration();
2263          return this.measureScore;
2264        }
2265        else
2266          return super.addChild(name);
2267      }
2268
2269      public StratifierGroupComponent copy() {
2270        StratifierGroupComponent dst = new StratifierGroupComponent();
2271        copyValues(dst);
2272        return dst;
2273      }
2274
2275      public void copyValues(StratifierGroupComponent dst) {
2276        super.copyValues(dst);
2277        dst.value = value == null ? null : value.copy();
2278        if (component != null) {
2279          dst.component = new ArrayList<StratifierGroupComponentComponent>();
2280          for (StratifierGroupComponentComponent i : component)
2281            dst.component.add(i.copy());
2282        };
2283        if (population != null) {
2284          dst.population = new ArrayList<StratifierGroupPopulationComponent>();
2285          for (StratifierGroupPopulationComponent i : population)
2286            dst.population.add(i.copy());
2287        };
2288        dst.measureScore = measureScore == null ? null : measureScore.copy();
2289      }
2290
2291      @Override
2292      public boolean equalsDeep(Base other_) {
2293        if (!super.equalsDeep(other_))
2294          return false;
2295        if (!(other_ instanceof StratifierGroupComponent))
2296          return false;
2297        StratifierGroupComponent o = (StratifierGroupComponent) other_;
2298        return compareDeep(value, o.value, true) && compareDeep(component, o.component, true) && compareDeep(population, o.population, true)
2299           && compareDeep(measureScore, o.measureScore, true);
2300      }
2301
2302      @Override
2303      public boolean equalsShallow(Base other_) {
2304        if (!super.equalsShallow(other_))
2305          return false;
2306        if (!(other_ instanceof StratifierGroupComponent))
2307          return false;
2308        StratifierGroupComponent o = (StratifierGroupComponent) other_;
2309        return true;
2310      }
2311
2312      public boolean isEmpty() {
2313        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(value, component, population
2314          , measureScore);
2315      }
2316
2317  public String fhirType() {
2318    return "MeasureReport.group.stratifier.stratum";
2319
2320  }
2321
2322  }
2323
2324    @Block()
2325    public static class StratifierGroupComponentComponent extends BackboneElement implements IBaseBackboneElement {
2326        /**
2327         * The stratifier component from the Measure that corresponds to this stratifier component in the MeasureReport resource.
2328         */
2329        @Child(name = "linkId", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
2330        @Description(shortDefinition="Pointer to specific stratifier component from Measure", formalDefinition="The stratifier component from the Measure that corresponds to this stratifier component in the MeasureReport resource." )
2331        protected StringType linkId;
2332
2333        /**
2334         * The code for the stratum component value.
2335         */
2336        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=1, max=1, modifier=false, summary=false)
2337        @Description(shortDefinition="What stratifier component of the group", formalDefinition="The code for the stratum component value." )
2338        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-stratifier-example")
2339        protected CodeableConcept code;
2340
2341        /**
2342         * The stratum component value.
2343         */
2344        @Child(name = "value", type = {CodeableConcept.class, BooleanType.class, Quantity.class, Range.class, Reference.class}, order=3, min=1, max=1, modifier=false, summary=false)
2345        @Description(shortDefinition="The stratum component value, e.g. male", formalDefinition="The stratum component value." )
2346        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measurereport-stratifier-value-example")
2347        protected DataType value;
2348
2349        private static final long serialVersionUID = 368088311L;
2350
2351    /**
2352     * Constructor
2353     */
2354      public StratifierGroupComponentComponent() {
2355        super();
2356      }
2357
2358    /**
2359     * Constructor
2360     */
2361      public StratifierGroupComponentComponent(CodeableConcept code, DataType value) {
2362        super();
2363        this.setCode(code);
2364        this.setValue(value);
2365      }
2366
2367        /**
2368         * @return {@link #linkId} (The stratifier component from the Measure that corresponds to this stratifier component in the MeasureReport resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
2369         */
2370        public StringType getLinkIdElement() { 
2371          if (this.linkId == null)
2372            if (Configuration.errorOnAutoCreate())
2373              throw new Error("Attempt to auto-create StratifierGroupComponentComponent.linkId");
2374            else if (Configuration.doAutoCreate())
2375              this.linkId = new StringType(); // bb
2376          return this.linkId;
2377        }
2378
2379        public boolean hasLinkIdElement() { 
2380          return this.linkId != null && !this.linkId.isEmpty();
2381        }
2382
2383        public boolean hasLinkId() { 
2384          return this.linkId != null && !this.linkId.isEmpty();
2385        }
2386
2387        /**
2388         * @param value {@link #linkId} (The stratifier component from the Measure that corresponds to this stratifier component in the MeasureReport resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
2389         */
2390        public StratifierGroupComponentComponent setLinkIdElement(StringType value) { 
2391          this.linkId = value;
2392          return this;
2393        }
2394
2395        /**
2396         * @return The stratifier component from the Measure that corresponds to this stratifier component in the MeasureReport resource.
2397         */
2398        public String getLinkId() { 
2399          return this.linkId == null ? null : this.linkId.getValue();
2400        }
2401
2402        /**
2403         * @param value The stratifier component from the Measure that corresponds to this stratifier component in the MeasureReport resource.
2404         */
2405        public StratifierGroupComponentComponent setLinkId(String value) { 
2406          if (Utilities.noString(value))
2407            this.linkId = null;
2408          else {
2409            if (this.linkId == null)
2410              this.linkId = new StringType();
2411            this.linkId.setValue(value);
2412          }
2413          return this;
2414        }
2415
2416        /**
2417         * @return {@link #code} (The code for the stratum component value.)
2418         */
2419        public CodeableConcept getCode() { 
2420          if (this.code == null)
2421            if (Configuration.errorOnAutoCreate())
2422              throw new Error("Attempt to auto-create StratifierGroupComponentComponent.code");
2423            else if (Configuration.doAutoCreate())
2424              this.code = new CodeableConcept(); // cc
2425          return this.code;
2426        }
2427
2428        public boolean hasCode() { 
2429          return this.code != null && !this.code.isEmpty();
2430        }
2431
2432        /**
2433         * @param value {@link #code} (The code for the stratum component value.)
2434         */
2435        public StratifierGroupComponentComponent setCode(CodeableConcept value) { 
2436          this.code = value;
2437          return this;
2438        }
2439
2440        /**
2441         * @return {@link #value} (The stratum component value.)
2442         */
2443        public DataType getValue() { 
2444          return this.value;
2445        }
2446
2447        /**
2448         * @return {@link #value} (The stratum component value.)
2449         */
2450        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
2451          if (this.value == null)
2452            this.value = new CodeableConcept();
2453          if (!(this.value instanceof CodeableConcept))
2454            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
2455          return (CodeableConcept) this.value;
2456        }
2457
2458        public boolean hasValueCodeableConcept() { 
2459          return this != null && this.value instanceof CodeableConcept;
2460        }
2461
2462        /**
2463         * @return {@link #value} (The stratum component value.)
2464         */
2465        public BooleanType getValueBooleanType() throws FHIRException { 
2466          if (this.value == null)
2467            this.value = new BooleanType();
2468          if (!(this.value instanceof BooleanType))
2469            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
2470          return (BooleanType) this.value;
2471        }
2472
2473        public boolean hasValueBooleanType() { 
2474          return this != null && this.value instanceof BooleanType;
2475        }
2476
2477        /**
2478         * @return {@link #value} (The stratum component value.)
2479         */
2480        public Quantity getValueQuantity() throws FHIRException { 
2481          if (this.value == null)
2482            this.value = new Quantity();
2483          if (!(this.value instanceof Quantity))
2484            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
2485          return (Quantity) this.value;
2486        }
2487
2488        public boolean hasValueQuantity() { 
2489          return this != null && this.value instanceof Quantity;
2490        }
2491
2492        /**
2493         * @return {@link #value} (The stratum component value.)
2494         */
2495        public Range getValueRange() throws FHIRException { 
2496          if (this.value == null)
2497            this.value = new Range();
2498          if (!(this.value instanceof Range))
2499            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
2500          return (Range) this.value;
2501        }
2502
2503        public boolean hasValueRange() { 
2504          return this != null && this.value instanceof Range;
2505        }
2506
2507        /**
2508         * @return {@link #value} (The stratum component value.)
2509         */
2510        public Reference getValueReference() throws FHIRException { 
2511          if (this.value == null)
2512            this.value = new Reference();
2513          if (!(this.value instanceof Reference))
2514            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
2515          return (Reference) this.value;
2516        }
2517
2518        public boolean hasValueReference() { 
2519          return this != null && this.value instanceof Reference;
2520        }
2521
2522        public boolean hasValue() { 
2523          return this.value != null && !this.value.isEmpty();
2524        }
2525
2526        /**
2527         * @param value {@link #value} (The stratum component value.)
2528         */
2529        public StratifierGroupComponentComponent setValue(DataType value) { 
2530          if (value != null && !(value instanceof CodeableConcept || value instanceof BooleanType || value instanceof Quantity || value instanceof Range || value instanceof Reference))
2531            throw new FHIRException("Not the right type for MeasureReport.group.stratifier.stratum.component.value[x]: "+value.fhirType());
2532          this.value = value;
2533          return this;
2534        }
2535
2536        protected void listChildren(List<Property> children) {
2537          super.listChildren(children);
2538          children.add(new Property("linkId", "string", "The stratifier component from the Measure that corresponds to this stratifier component in the MeasureReport resource.", 0, 1, linkId));
2539          children.add(new Property("code", "CodeableConcept", "The code for the stratum component value.", 0, 1, code));
2540          children.add(new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The stratum component value.", 0, 1, value));
2541        }
2542
2543        @Override
2544        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2545          switch (_hash) {
2546          case -1102667083: /*linkId*/  return new Property("linkId", "string", "The stratifier component from the Measure that corresponds to this stratifier component in the MeasureReport resource.", 0, 1, linkId);
2547          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The code for the stratum component value.", 0, 1, code);
2548          case -1410166417: /*value[x]*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The stratum component value.", 0, 1, value);
2549          case 111972721: /*value*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The stratum component value.", 0, 1, value);
2550          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "The stratum component value.", 0, 1, value);
2551          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The stratum component value.", 0, 1, value);
2552          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "The stratum component value.", 0, 1, value);
2553          case 2030761548: /*valueRange*/  return new Property("value[x]", "Range", "The stratum component value.", 0, 1, value);
2554          case 1755241690: /*valueReference*/  return new Property("value[x]", "Reference", "The stratum component value.", 0, 1, value);
2555          default: return super.getNamedProperty(_hash, _name, _checkValid);
2556          }
2557
2558        }
2559
2560      @Override
2561      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2562        switch (hash) {
2563        case -1102667083: /*linkId*/ return this.linkId == null ? new Base[0] : new Base[] {this.linkId}; // StringType
2564        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
2565        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
2566        default: return super.getProperty(hash, name, checkValid);
2567        }
2568
2569      }
2570
2571      @Override
2572      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2573        switch (hash) {
2574        case -1102667083: // linkId
2575          this.linkId = TypeConvertor.castToString(value); // StringType
2576          return value;
2577        case 3059181: // code
2578          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2579          return value;
2580        case 111972721: // value
2581          this.value = TypeConvertor.castToType(value); // DataType
2582          return value;
2583        default: return super.setProperty(hash, name, value);
2584        }
2585
2586      }
2587
2588      @Override
2589      public Base setProperty(String name, Base value) throws FHIRException {
2590        if (name.equals("linkId")) {
2591          this.linkId = TypeConvertor.castToString(value); // StringType
2592        } else if (name.equals("code")) {
2593          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2594        } else if (name.equals("value[x]")) {
2595          this.value = TypeConvertor.castToType(value); // DataType
2596        } else
2597          return super.setProperty(name, value);
2598        return value;
2599      }
2600
2601      @Override
2602      public Base makeProperty(int hash, String name) throws FHIRException {
2603        switch (hash) {
2604        case -1102667083:  return getLinkIdElement();
2605        case 3059181:  return getCode();
2606        case -1410166417:  return getValue();
2607        case 111972721:  return getValue();
2608        default: return super.makeProperty(hash, name);
2609        }
2610
2611      }
2612
2613      @Override
2614      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2615        switch (hash) {
2616        case -1102667083: /*linkId*/ return new String[] {"string"};
2617        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2618        case 111972721: /*value*/ return new String[] {"CodeableConcept", "boolean", "Quantity", "Range", "Reference"};
2619        default: return super.getTypesForProperty(hash, name);
2620        }
2621
2622      }
2623
2624      @Override
2625      public Base addChild(String name) throws FHIRException {
2626        if (name.equals("linkId")) {
2627          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.group.stratifier.stratum.component.linkId");
2628        }
2629        else if (name.equals("code")) {
2630          this.code = new CodeableConcept();
2631          return this.code;
2632        }
2633        else if (name.equals("valueCodeableConcept")) {
2634          this.value = new CodeableConcept();
2635          return this.value;
2636        }
2637        else if (name.equals("valueBoolean")) {
2638          this.value = new BooleanType();
2639          return this.value;
2640        }
2641        else if (name.equals("valueQuantity")) {
2642          this.value = new Quantity();
2643          return this.value;
2644        }
2645        else if (name.equals("valueRange")) {
2646          this.value = new Range();
2647          return this.value;
2648        }
2649        else if (name.equals("valueReference")) {
2650          this.value = new Reference();
2651          return this.value;
2652        }
2653        else
2654          return super.addChild(name);
2655      }
2656
2657      public StratifierGroupComponentComponent copy() {
2658        StratifierGroupComponentComponent dst = new StratifierGroupComponentComponent();
2659        copyValues(dst);
2660        return dst;
2661      }
2662
2663      public void copyValues(StratifierGroupComponentComponent dst) {
2664        super.copyValues(dst);
2665        dst.linkId = linkId == null ? null : linkId.copy();
2666        dst.code = code == null ? null : code.copy();
2667        dst.value = value == null ? null : value.copy();
2668      }
2669
2670      @Override
2671      public boolean equalsDeep(Base other_) {
2672        if (!super.equalsDeep(other_))
2673          return false;
2674        if (!(other_ instanceof StratifierGroupComponentComponent))
2675          return false;
2676        StratifierGroupComponentComponent o = (StratifierGroupComponentComponent) other_;
2677        return compareDeep(linkId, o.linkId, true) && compareDeep(code, o.code, true) && compareDeep(value, o.value, true)
2678          ;
2679      }
2680
2681      @Override
2682      public boolean equalsShallow(Base other_) {
2683        if (!super.equalsShallow(other_))
2684          return false;
2685        if (!(other_ instanceof StratifierGroupComponentComponent))
2686          return false;
2687        StratifierGroupComponentComponent o = (StratifierGroupComponentComponent) other_;
2688        return compareValues(linkId, o.linkId, true);
2689      }
2690
2691      public boolean isEmpty() {
2692        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(linkId, code, value);
2693      }
2694
2695  public String fhirType() {
2696    return "MeasureReport.group.stratifier.stratum.component";
2697
2698  }
2699
2700  }
2701
2702    @Block()
2703    public static class StratifierGroupPopulationComponent extends BackboneElement implements IBaseBackboneElement {
2704        /**
2705         * The population from the Measure that corresponds to this population in the MeasureReport resource.
2706         */
2707        @Child(name = "linkId", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
2708        @Description(shortDefinition="Pointer to specific population from Measure", formalDefinition="The population from the Measure that corresponds to this population in the MeasureReport resource." )
2709        protected StringType linkId;
2710
2711        /**
2712         * The type of the population.
2713         */
2714        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
2715        @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." )
2716        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-population")
2717        protected CodeableConcept code;
2718
2719        /**
2720         * The number of members of the population in this stratum.
2721         */
2722        @Child(name = "count", type = {IntegerType.class}, order=3, min=0, max=1, modifier=false, summary=false)
2723        @Description(shortDefinition="Size of the population", formalDefinition="The number of members of the population in this stratum." )
2724        protected IntegerType count;
2725
2726        /**
2727         * This element refers to a List of individual level MeasureReport resources, one for each subject in this population in this stratum.
2728         */
2729        @Child(name = "subjectResults", type = {ListResource.class}, order=4, min=0, max=1, modifier=false, summary=false)
2730        @Description(shortDefinition="For subject-list reports, the subject results in this population", formalDefinition="This element refers to a List of individual level MeasureReport resources, one for each subject in this population in this stratum." )
2731        protected Reference subjectResults;
2732
2733        /**
2734         * A reference to an individual level MeasureReport resource for a member of the population.
2735         */
2736        @Child(name = "subjectReport", type = {MeasureReport.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2737        @Description(shortDefinition="For subject-list reports, a subject result in this population", formalDefinition="A reference to an individual level MeasureReport resource for a member of the population." )
2738        protected List<Reference> subjectReport;
2739
2740        /**
2741         * Optional Group identifying the individuals that make up the population.
2742         */
2743        @Child(name = "subjects", type = {Group.class}, order=6, min=0, max=1, modifier=false, summary=false)
2744        @Description(shortDefinition="What individual(s) in the population", formalDefinition="Optional Group identifying the individuals that make up the population." )
2745        protected Reference subjects;
2746
2747        private static final long serialVersionUID = -203678073L;
2748
2749    /**
2750     * Constructor
2751     */
2752      public StratifierGroupPopulationComponent() {
2753        super();
2754      }
2755
2756        /**
2757         * @return {@link #linkId} (The population from the Measure that corresponds to this population in the MeasureReport resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
2758         */
2759        public StringType getLinkIdElement() { 
2760          if (this.linkId == null)
2761            if (Configuration.errorOnAutoCreate())
2762              throw new Error("Attempt to auto-create StratifierGroupPopulationComponent.linkId");
2763            else if (Configuration.doAutoCreate())
2764              this.linkId = new StringType(); // bb
2765          return this.linkId;
2766        }
2767
2768        public boolean hasLinkIdElement() { 
2769          return this.linkId != null && !this.linkId.isEmpty();
2770        }
2771
2772        public boolean hasLinkId() { 
2773          return this.linkId != null && !this.linkId.isEmpty();
2774        }
2775
2776        /**
2777         * @param value {@link #linkId} (The population from the Measure that corresponds to this population in the MeasureReport resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
2778         */
2779        public StratifierGroupPopulationComponent setLinkIdElement(StringType value) { 
2780          this.linkId = value;
2781          return this;
2782        }
2783
2784        /**
2785         * @return The population from the Measure that corresponds to this population in the MeasureReport resource.
2786         */
2787        public String getLinkId() { 
2788          return this.linkId == null ? null : this.linkId.getValue();
2789        }
2790
2791        /**
2792         * @param value The population from the Measure that corresponds to this population in the MeasureReport resource.
2793         */
2794        public StratifierGroupPopulationComponent setLinkId(String value) { 
2795          if (Utilities.noString(value))
2796            this.linkId = null;
2797          else {
2798            if (this.linkId == null)
2799              this.linkId = new StringType();
2800            this.linkId.setValue(value);
2801          }
2802          return this;
2803        }
2804
2805        /**
2806         * @return {@link #code} (The type of the population.)
2807         */
2808        public CodeableConcept getCode() { 
2809          if (this.code == null)
2810            if (Configuration.errorOnAutoCreate())
2811              throw new Error("Attempt to auto-create StratifierGroupPopulationComponent.code");
2812            else if (Configuration.doAutoCreate())
2813              this.code = new CodeableConcept(); // cc
2814          return this.code;
2815        }
2816
2817        public boolean hasCode() { 
2818          return this.code != null && !this.code.isEmpty();
2819        }
2820
2821        /**
2822         * @param value {@link #code} (The type of the population.)
2823         */
2824        public StratifierGroupPopulationComponent setCode(CodeableConcept value) { 
2825          this.code = value;
2826          return this;
2827        }
2828
2829        /**
2830         * @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
2831         */
2832        public IntegerType getCountElement() { 
2833          if (this.count == null)
2834            if (Configuration.errorOnAutoCreate())
2835              throw new Error("Attempt to auto-create StratifierGroupPopulationComponent.count");
2836            else if (Configuration.doAutoCreate())
2837              this.count = new IntegerType(); // bb
2838          return this.count;
2839        }
2840
2841        public boolean hasCountElement() { 
2842          return this.count != null && !this.count.isEmpty();
2843        }
2844
2845        public boolean hasCount() { 
2846          return this.count != null && !this.count.isEmpty();
2847        }
2848
2849        /**
2850         * @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
2851         */
2852        public StratifierGroupPopulationComponent setCountElement(IntegerType value) { 
2853          this.count = value;
2854          return this;
2855        }
2856
2857        /**
2858         * @return The number of members of the population in this stratum.
2859         */
2860        public int getCount() { 
2861          return this.count == null || this.count.isEmpty() ? 0 : this.count.getValue();
2862        }
2863
2864        /**
2865         * @param value The number of members of the population in this stratum.
2866         */
2867        public StratifierGroupPopulationComponent setCount(int value) { 
2868            if (this.count == null)
2869              this.count = new IntegerType();
2870            this.count.setValue(value);
2871          return this;
2872        }
2873
2874        /**
2875         * @return {@link #subjectResults} (This element refers to a List of individual level MeasureReport resources, one for each subject in this population in this stratum.)
2876         */
2877        public Reference getSubjectResults() { 
2878          if (this.subjectResults == null)
2879            if (Configuration.errorOnAutoCreate())
2880              throw new Error("Attempt to auto-create StratifierGroupPopulationComponent.subjectResults");
2881            else if (Configuration.doAutoCreate())
2882              this.subjectResults = new Reference(); // cc
2883          return this.subjectResults;
2884        }
2885
2886        public boolean hasSubjectResults() { 
2887          return this.subjectResults != null && !this.subjectResults.isEmpty();
2888        }
2889
2890        /**
2891         * @param value {@link #subjectResults} (This element refers to a List of individual level MeasureReport resources, one for each subject in this population in this stratum.)
2892         */
2893        public StratifierGroupPopulationComponent setSubjectResults(Reference value) { 
2894          this.subjectResults = value;
2895          return this;
2896        }
2897
2898        /**
2899         * @return {@link #subjectReport} (A reference to an individual level MeasureReport resource for a member of the population.)
2900         */
2901        public List<Reference> getSubjectReport() { 
2902          if (this.subjectReport == null)
2903            this.subjectReport = new ArrayList<Reference>();
2904          return this.subjectReport;
2905        }
2906
2907        /**
2908         * @return Returns a reference to <code>this</code> for easy method chaining
2909         */
2910        public StratifierGroupPopulationComponent setSubjectReport(List<Reference> theSubjectReport) { 
2911          this.subjectReport = theSubjectReport;
2912          return this;
2913        }
2914
2915        public boolean hasSubjectReport() { 
2916          if (this.subjectReport == null)
2917            return false;
2918          for (Reference item : this.subjectReport)
2919            if (!item.isEmpty())
2920              return true;
2921          return false;
2922        }
2923
2924        public Reference addSubjectReport() { //3
2925          Reference t = new Reference();
2926          if (this.subjectReport == null)
2927            this.subjectReport = new ArrayList<Reference>();
2928          this.subjectReport.add(t);
2929          return t;
2930        }
2931
2932        public StratifierGroupPopulationComponent addSubjectReport(Reference t) { //3
2933          if (t == null)
2934            return this;
2935          if (this.subjectReport == null)
2936            this.subjectReport = new ArrayList<Reference>();
2937          this.subjectReport.add(t);
2938          return this;
2939        }
2940
2941        /**
2942         * @return The first repetition of repeating field {@link #subjectReport}, creating it if it does not already exist {3}
2943         */
2944        public Reference getSubjectReportFirstRep() { 
2945          if (getSubjectReport().isEmpty()) {
2946            addSubjectReport();
2947          }
2948          return getSubjectReport().get(0);
2949        }
2950
2951        /**
2952         * @return {@link #subjects} (Optional Group identifying the individuals that make up the population.)
2953         */
2954        public Reference getSubjects() { 
2955          if (this.subjects == null)
2956            if (Configuration.errorOnAutoCreate())
2957              throw new Error("Attempt to auto-create StratifierGroupPopulationComponent.subjects");
2958            else if (Configuration.doAutoCreate())
2959              this.subjects = new Reference(); // cc
2960          return this.subjects;
2961        }
2962
2963        public boolean hasSubjects() { 
2964          return this.subjects != null && !this.subjects.isEmpty();
2965        }
2966
2967        /**
2968         * @param value {@link #subjects} (Optional Group identifying the individuals that make up the population.)
2969         */
2970        public StratifierGroupPopulationComponent setSubjects(Reference value) { 
2971          this.subjects = value;
2972          return this;
2973        }
2974
2975        protected void listChildren(List<Property> children) {
2976          super.listChildren(children);
2977          children.add(new Property("linkId", "string", "The population from the Measure that corresponds to this population in the MeasureReport resource.", 0, 1, linkId));
2978          children.add(new Property("code", "CodeableConcept", "The type of the population.", 0, 1, code));
2979          children.add(new Property("count", "integer", "The number of members of the population in this stratum.", 0, 1, count));
2980          children.add(new Property("subjectResults", "Reference(List)", "This element refers to a List of individual level MeasureReport resources, one for each subject in this population in this stratum.", 0, 1, subjectResults));
2981          children.add(new Property("subjectReport", "Reference(MeasureReport)", "A reference to an individual level MeasureReport resource for a member of the population.", 0, java.lang.Integer.MAX_VALUE, subjectReport));
2982          children.add(new Property("subjects", "Reference(Group)", "Optional Group identifying the individuals that make up the population.", 0, 1, subjects));
2983        }
2984
2985        @Override
2986        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2987          switch (_hash) {
2988          case -1102667083: /*linkId*/  return new Property("linkId", "string", "The population from the Measure that corresponds to this population in the MeasureReport resource.", 0, 1, linkId);
2989          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The type of the population.", 0, 1, code);
2990          case 94851343: /*count*/  return new Property("count", "integer", "The number of members of the population in this stratum.", 0, 1, count);
2991          case 2136184106: /*subjectResults*/  return new Property("subjectResults", "Reference(List)", "This element refers to a List of individual level MeasureReport resources, one for each subject in this population in this stratum.", 0, 1, subjectResults);
2992          case 68814208: /*subjectReport*/  return new Property("subjectReport", "Reference(MeasureReport)", "A reference to an individual level MeasureReport resource for a member of the population.", 0, java.lang.Integer.MAX_VALUE, subjectReport);
2993          case -2069868345: /*subjects*/  return new Property("subjects", "Reference(Group)", "Optional Group identifying the individuals that make up the population.", 0, 1, subjects);
2994          default: return super.getNamedProperty(_hash, _name, _checkValid);
2995          }
2996
2997        }
2998
2999      @Override
3000      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3001        switch (hash) {
3002        case -1102667083: /*linkId*/ return this.linkId == null ? new Base[0] : new Base[] {this.linkId}; // StringType
3003        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
3004        case 94851343: /*count*/ return this.count == null ? new Base[0] : new Base[] {this.count}; // IntegerType
3005        case 2136184106: /*subjectResults*/ return this.subjectResults == null ? new Base[0] : new Base[] {this.subjectResults}; // Reference
3006        case 68814208: /*subjectReport*/ return this.subjectReport == null ? new Base[0] : this.subjectReport.toArray(new Base[this.subjectReport.size()]); // Reference
3007        case -2069868345: /*subjects*/ return this.subjects == null ? new Base[0] : new Base[] {this.subjects}; // Reference
3008        default: return super.getProperty(hash, name, checkValid);
3009        }
3010
3011      }
3012
3013      @Override
3014      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3015        switch (hash) {
3016        case -1102667083: // linkId
3017          this.linkId = TypeConvertor.castToString(value); // StringType
3018          return value;
3019        case 3059181: // code
3020          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3021          return value;
3022        case 94851343: // count
3023          this.count = TypeConvertor.castToInteger(value); // IntegerType
3024          return value;
3025        case 2136184106: // subjectResults
3026          this.subjectResults = TypeConvertor.castToReference(value); // Reference
3027          return value;
3028        case 68814208: // subjectReport
3029          this.getSubjectReport().add(TypeConvertor.castToReference(value)); // Reference
3030          return value;
3031        case -2069868345: // subjects
3032          this.subjects = TypeConvertor.castToReference(value); // Reference
3033          return value;
3034        default: return super.setProperty(hash, name, value);
3035        }
3036
3037      }
3038
3039      @Override
3040      public Base setProperty(String name, Base value) throws FHIRException {
3041        if (name.equals("linkId")) {
3042          this.linkId = TypeConvertor.castToString(value); // StringType
3043        } else if (name.equals("code")) {
3044          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3045        } else if (name.equals("count")) {
3046          this.count = TypeConvertor.castToInteger(value); // IntegerType
3047        } else if (name.equals("subjectResults")) {
3048          this.subjectResults = TypeConvertor.castToReference(value); // Reference
3049        } else if (name.equals("subjectReport")) {
3050          this.getSubjectReport().add(TypeConvertor.castToReference(value));
3051        } else if (name.equals("subjects")) {
3052          this.subjects = TypeConvertor.castToReference(value); // Reference
3053        } else
3054          return super.setProperty(name, value);
3055        return value;
3056      }
3057
3058      @Override
3059      public Base makeProperty(int hash, String name) throws FHIRException {
3060        switch (hash) {
3061        case -1102667083:  return getLinkIdElement();
3062        case 3059181:  return getCode();
3063        case 94851343:  return getCountElement();
3064        case 2136184106:  return getSubjectResults();
3065        case 68814208:  return addSubjectReport(); 
3066        case -2069868345:  return getSubjects();
3067        default: return super.makeProperty(hash, name);
3068        }
3069
3070      }
3071
3072      @Override
3073      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3074        switch (hash) {
3075        case -1102667083: /*linkId*/ return new String[] {"string"};
3076        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
3077        case 94851343: /*count*/ return new String[] {"integer"};
3078        case 2136184106: /*subjectResults*/ return new String[] {"Reference"};
3079        case 68814208: /*subjectReport*/ return new String[] {"Reference"};
3080        case -2069868345: /*subjects*/ return new String[] {"Reference"};
3081        default: return super.getTypesForProperty(hash, name);
3082        }
3083
3084      }
3085
3086      @Override
3087      public Base addChild(String name) throws FHIRException {
3088        if (name.equals("linkId")) {
3089          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.group.stratifier.stratum.population.linkId");
3090        }
3091        else if (name.equals("code")) {
3092          this.code = new CodeableConcept();
3093          return this.code;
3094        }
3095        else if (name.equals("count")) {
3096          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.group.stratifier.stratum.population.count");
3097        }
3098        else if (name.equals("subjectResults")) {
3099          this.subjectResults = new Reference();
3100          return this.subjectResults;
3101        }
3102        else if (name.equals("subjectReport")) {
3103          return addSubjectReport();
3104        }
3105        else if (name.equals("subjects")) {
3106          this.subjects = new Reference();
3107          return this.subjects;
3108        }
3109        else
3110          return super.addChild(name);
3111      }
3112
3113      public StratifierGroupPopulationComponent copy() {
3114        StratifierGroupPopulationComponent dst = new StratifierGroupPopulationComponent();
3115        copyValues(dst);
3116        return dst;
3117      }
3118
3119      public void copyValues(StratifierGroupPopulationComponent dst) {
3120        super.copyValues(dst);
3121        dst.linkId = linkId == null ? null : linkId.copy();
3122        dst.code = code == null ? null : code.copy();
3123        dst.count = count == null ? null : count.copy();
3124        dst.subjectResults = subjectResults == null ? null : subjectResults.copy();
3125        if (subjectReport != null) {
3126          dst.subjectReport = new ArrayList<Reference>();
3127          for (Reference i : subjectReport)
3128            dst.subjectReport.add(i.copy());
3129        };
3130        dst.subjects = subjects == null ? null : subjects.copy();
3131      }
3132
3133      @Override
3134      public boolean equalsDeep(Base other_) {
3135        if (!super.equalsDeep(other_))
3136          return false;
3137        if (!(other_ instanceof StratifierGroupPopulationComponent))
3138          return false;
3139        StratifierGroupPopulationComponent o = (StratifierGroupPopulationComponent) other_;
3140        return compareDeep(linkId, o.linkId, true) && compareDeep(code, o.code, true) && compareDeep(count, o.count, true)
3141           && compareDeep(subjectResults, o.subjectResults, true) && compareDeep(subjectReport, o.subjectReport, true)
3142           && compareDeep(subjects, o.subjects, true);
3143      }
3144
3145      @Override
3146      public boolean equalsShallow(Base other_) {
3147        if (!super.equalsShallow(other_))
3148          return false;
3149        if (!(other_ instanceof StratifierGroupPopulationComponent))
3150          return false;
3151        StratifierGroupPopulationComponent o = (StratifierGroupPopulationComponent) other_;
3152        return compareValues(linkId, o.linkId, true) && compareValues(count, o.count, true);
3153      }
3154
3155      public boolean isEmpty() {
3156        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(linkId, code, count, subjectResults
3157          , subjectReport, subjects);
3158      }
3159
3160  public String fhirType() {
3161    return "MeasureReport.group.stratifier.stratum.population";
3162
3163  }
3164
3165  }
3166
3167    /**
3168     * 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.
3169     */
3170    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3171    @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." )
3172    protected List<Identifier> identifier;
3173
3174    /**
3175     * The MeasureReport status. No data will be available until the MeasureReport status is complete.
3176     */
3177    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
3178    @Description(shortDefinition="complete | pending | error", formalDefinition="The MeasureReport status. No data will be available until the MeasureReport status is complete." )
3179    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-report-status")
3180    protected Enumeration<MeasureReportStatus> status;
3181
3182    /**
3183     * 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.
3184     */
3185    @Child(name = "type", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=true)
3186    @Description(shortDefinition="individual | subject-list | summary | data-exchange", formalDefinition="The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure." )
3187    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-report-type")
3188    protected Enumeration<MeasureReportType> type;
3189
3190    /**
3191     * Indicates whether the data submitted in a data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.
3192     */
3193    @Child(name = "dataUpdateType", type = {CodeType.class}, order=3, min=0, max=1, modifier=true, summary=true)
3194    @Description(shortDefinition="incremental | snapshot", formalDefinition="Indicates whether the data submitted in a data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver." )
3195    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/submit-data-update-type")
3196    protected Enumeration<SubmitDataUpdateType> dataUpdateType;
3197
3198    /**
3199     * A reference to the Measure that was calculated to produce this report.
3200     */
3201    @Child(name = "measure", type = {CanonicalType.class}, order=4, min=0, max=1, modifier=false, summary=true)
3202    @Description(shortDefinition="What measure was calculated", formalDefinition="A reference to the Measure that was calculated to produce this report." )
3203    protected CanonicalType measure;
3204
3205    /**
3206     * Optional subject identifying the individual or individuals the report is for.
3207     */
3208    @Child(name = "subject", type = {CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class}, order=5, min=0, max=1, modifier=false, summary=true)
3209    @Description(shortDefinition="What individual(s) the report is for", formalDefinition="Optional subject identifying the individual or individuals the report is for." )
3210    protected Reference subject;
3211
3212    /**
3213     * The date this measure was calculated.
3214     */
3215    @Child(name = "date", type = {DateTimeType.class}, order=6, min=0, max=1, modifier=false, summary=true)
3216    @Description(shortDefinition="When the measure was calculated", formalDefinition="The date this measure was calculated." )
3217    protected DateTimeType date;
3218
3219    /**
3220     * The individual or organization that is reporting the data.
3221     */
3222    @Child(name = "reporter", type = {Practitioner.class, PractitionerRole.class, Organization.class, Group.class}, order=7, min=0, max=1, modifier=false, summary=true)
3223    @Description(shortDefinition="Who is reporting the data", formalDefinition="The individual or organization that is reporting the data." )
3224    protected Reference reporter;
3225
3226    /**
3227     * A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report.
3228     */
3229    @Child(name = "reportingVendor", type = {Organization.class}, order=8, min=0, max=1, modifier=false, summary=false)
3230    @Description(shortDefinition="What vendor prepared the data", formalDefinition="A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report." )
3231    protected Reference reportingVendor;
3232
3233    /**
3234     * A reference to the location for which the data is being reported.
3235     */
3236    @Child(name = "location", type = {Location.class}, order=9, min=0, max=1, modifier=false, summary=false)
3237    @Description(shortDefinition="Where the reported data is from", formalDefinition="A reference to the location for which the data is being reported." )
3238    protected Reference location;
3239
3240    /**
3241     * The reporting period for which the report was calculated.
3242     */
3243    @Child(name = "period", type = {Period.class}, order=10, min=1, max=1, modifier=false, summary=true)
3244    @Description(shortDefinition="What period the report covers", formalDefinition="The reporting period for which the report was calculated." )
3245    protected Period period;
3246
3247    /**
3248     * A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report.
3249     */
3250    @Child(name = "inputParameters", type = {Parameters.class}, order=11, min=0, max=1, modifier=false, summary=false)
3251    @Description(shortDefinition="What parameters were provided to the report", formalDefinition="A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report." )
3252    protected Reference inputParameters;
3253
3254    /**
3255     * Indicates how the calculation is performed for the measure, including proportion, ratio, continuous-variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented. It is expected to be the same as the scoring element on the referenced Measure.
3256     */
3257    @Child(name = "scoring", type = {CodeableConcept.class}, order=12, min=0, max=1, modifier=true, summary=true)
3258    @Description(shortDefinition="What scoring method (e.g. proportion, ratio, continuous-variable)", formalDefinition="Indicates how the calculation is performed for the measure, including proportion, ratio, continuous-variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented. It is expected to be the same as the scoring element on the referenced Measure." )
3259    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/measure-scoring")
3260    protected CodeableConcept scoring;
3261
3262    /**
3263     * Whether improvement in the measure is noted by an increase or decrease in the measure score.
3264     */
3265    @Child(name = "improvementNotation", type = {CodeableConcept.class}, order=13, min=0, max=1, modifier=true, summary=true)
3266    @Description(shortDefinition="increase | decrease", formalDefinition="Whether improvement in the measure is noted by an increase or decrease in the measure score." )
3267    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/measure-improvement-notation")
3268    protected CodeableConcept improvementNotation;
3269
3270    /**
3271     * The results of the calculation, one for each population group in the measure.
3272     */
3273    @Child(name = "group", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3274    @Description(shortDefinition="Measure results for each group", formalDefinition="The results of the calculation, one for each population group in the measure." )
3275    protected List<MeasureReportGroupComponent> group;
3276
3277    /**
3278     * A reference to a Resource that represents additional information collected for the report. If the value of the supplemental data is not a Resource (i.e. evaluating the supplementalData expression for this case in the measure results in a value that is not a FHIR Resource), it is reported as a reference to a contained Observation resource.
3279     */
3280    @Child(name = "supplementalData", type = {Reference.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3281    @Description(shortDefinition="Additional information collected for the report", formalDefinition="A reference to a Resource that represents additional information collected for the report. If the value of the supplemental data is not a Resource (i.e. evaluating the supplementalData expression for this case in the measure results in a value that is not a FHIR Resource), it is reported as a reference to a contained Observation resource." )
3282    protected List<Reference> supplementalData;
3283
3284    /**
3285     * Evaluated resources are used to capture what data was involved in the calculation of a measure. This usage is only allowed for individual reports to ensure that the size of the MeasureReport resource is bounded.
3286     */
3287    @Child(name = "evaluatedResource", type = {Reference.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3288    @Description(shortDefinition="What data was used to calculate the measure score", formalDefinition="Evaluated resources are used to capture what data was involved in the calculation of a measure. This usage is only allowed for individual reports to ensure that the size of the MeasureReport resource is bounded." )
3289    protected List<Reference> evaluatedResource;
3290
3291    private static final long serialVersionUID = 962133374L;
3292
3293  /**
3294   * Constructor
3295   */
3296    public MeasureReport() {
3297      super();
3298    }
3299
3300  /**
3301   * Constructor
3302   */
3303    public MeasureReport(MeasureReportStatus status, MeasureReportType type, Period period) {
3304      super();
3305      this.setStatus(status);
3306      this.setType(type);
3307      this.setPeriod(period);
3308    }
3309
3310    /**
3311     * @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.)
3312     */
3313    public List<Identifier> getIdentifier() { 
3314      if (this.identifier == null)
3315        this.identifier = new ArrayList<Identifier>();
3316      return this.identifier;
3317    }
3318
3319    /**
3320     * @return Returns a reference to <code>this</code> for easy method chaining
3321     */
3322    public MeasureReport setIdentifier(List<Identifier> theIdentifier) { 
3323      this.identifier = theIdentifier;
3324      return this;
3325    }
3326
3327    public boolean hasIdentifier() { 
3328      if (this.identifier == null)
3329        return false;
3330      for (Identifier item : this.identifier)
3331        if (!item.isEmpty())
3332          return true;
3333      return false;
3334    }
3335
3336    public Identifier addIdentifier() { //3
3337      Identifier t = new Identifier();
3338      if (this.identifier == null)
3339        this.identifier = new ArrayList<Identifier>();
3340      this.identifier.add(t);
3341      return t;
3342    }
3343
3344    public MeasureReport addIdentifier(Identifier t) { //3
3345      if (t == null)
3346        return this;
3347      if (this.identifier == null)
3348        this.identifier = new ArrayList<Identifier>();
3349      this.identifier.add(t);
3350      return this;
3351    }
3352
3353    /**
3354     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
3355     */
3356    public Identifier getIdentifierFirstRep() { 
3357      if (getIdentifier().isEmpty()) {
3358        addIdentifier();
3359      }
3360      return getIdentifier().get(0);
3361    }
3362
3363    /**
3364     * @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
3365     */
3366    public Enumeration<MeasureReportStatus> getStatusElement() { 
3367      if (this.status == null)
3368        if (Configuration.errorOnAutoCreate())
3369          throw new Error("Attempt to auto-create MeasureReport.status");
3370        else if (Configuration.doAutoCreate())
3371          this.status = new Enumeration<MeasureReportStatus>(new MeasureReportStatusEnumFactory()); // bb
3372      return this.status;
3373    }
3374
3375    public boolean hasStatusElement() { 
3376      return this.status != null && !this.status.isEmpty();
3377    }
3378
3379    public boolean hasStatus() { 
3380      return this.status != null && !this.status.isEmpty();
3381    }
3382
3383    /**
3384     * @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
3385     */
3386    public MeasureReport setStatusElement(Enumeration<MeasureReportStatus> value) { 
3387      this.status = value;
3388      return this;
3389    }
3390
3391    /**
3392     * @return The MeasureReport status. No data will be available until the MeasureReport status is complete.
3393     */
3394    public MeasureReportStatus getStatus() { 
3395      return this.status == null ? null : this.status.getValue();
3396    }
3397
3398    /**
3399     * @param value The MeasureReport status. No data will be available until the MeasureReport status is complete.
3400     */
3401    public MeasureReport setStatus(MeasureReportStatus value) { 
3402        if (this.status == null)
3403          this.status = new Enumeration<MeasureReportStatus>(new MeasureReportStatusEnumFactory());
3404        this.status.setValue(value);
3405      return this;
3406    }
3407
3408    /**
3409     * @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
3410     */
3411    public Enumeration<MeasureReportType> getTypeElement() { 
3412      if (this.type == null)
3413        if (Configuration.errorOnAutoCreate())
3414          throw new Error("Attempt to auto-create MeasureReport.type");
3415        else if (Configuration.doAutoCreate())
3416          this.type = new Enumeration<MeasureReportType>(new MeasureReportTypeEnumFactory()); // bb
3417      return this.type;
3418    }
3419
3420    public boolean hasTypeElement() { 
3421      return this.type != null && !this.type.isEmpty();
3422    }
3423
3424    public boolean hasType() { 
3425      return this.type != null && !this.type.isEmpty();
3426    }
3427
3428    /**
3429     * @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
3430     */
3431    public MeasureReport setTypeElement(Enumeration<MeasureReportType> value) { 
3432      this.type = value;
3433      return this;
3434    }
3435
3436    /**
3437     * @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.
3438     */
3439    public MeasureReportType getType() { 
3440      return this.type == null ? null : this.type.getValue();
3441    }
3442
3443    /**
3444     * @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.
3445     */
3446    public MeasureReport setType(MeasureReportType value) { 
3447        if (this.type == null)
3448          this.type = new Enumeration<MeasureReportType>(new MeasureReportTypeEnumFactory());
3449        this.type.setValue(value);
3450      return this;
3451    }
3452
3453    /**
3454     * @return {@link #dataUpdateType} (Indicates whether the data submitted in a data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.). This is the underlying object with id, value and extensions. The accessor "getDataUpdateType" gives direct access to the value
3455     */
3456    public Enumeration<SubmitDataUpdateType> getDataUpdateTypeElement() { 
3457      if (this.dataUpdateType == null)
3458        if (Configuration.errorOnAutoCreate())
3459          throw new Error("Attempt to auto-create MeasureReport.dataUpdateType");
3460        else if (Configuration.doAutoCreate())
3461          this.dataUpdateType = new Enumeration<SubmitDataUpdateType>(new SubmitDataUpdateTypeEnumFactory()); // bb
3462      return this.dataUpdateType;
3463    }
3464
3465    public boolean hasDataUpdateTypeElement() { 
3466      return this.dataUpdateType != null && !this.dataUpdateType.isEmpty();
3467    }
3468
3469    public boolean hasDataUpdateType() { 
3470      return this.dataUpdateType != null && !this.dataUpdateType.isEmpty();
3471    }
3472
3473    /**
3474     * @param value {@link #dataUpdateType} (Indicates whether the data submitted in a data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.). This is the underlying object with id, value and extensions. The accessor "getDataUpdateType" gives direct access to the value
3475     */
3476    public MeasureReport setDataUpdateTypeElement(Enumeration<SubmitDataUpdateType> value) { 
3477      this.dataUpdateType = value;
3478      return this;
3479    }
3480
3481    /**
3482     * @return Indicates whether the data submitted in a data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.
3483     */
3484    public SubmitDataUpdateType getDataUpdateType() { 
3485      return this.dataUpdateType == null ? null : this.dataUpdateType.getValue();
3486    }
3487
3488    /**
3489     * @param value Indicates whether the data submitted in a data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.
3490     */
3491    public MeasureReport setDataUpdateType(SubmitDataUpdateType value) { 
3492      if (value == null)
3493        this.dataUpdateType = null;
3494      else {
3495        if (this.dataUpdateType == null)
3496          this.dataUpdateType = new Enumeration<SubmitDataUpdateType>(new SubmitDataUpdateTypeEnumFactory());
3497        this.dataUpdateType.setValue(value);
3498      }
3499      return this;
3500    }
3501
3502    /**
3503     * @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
3504     */
3505    public CanonicalType getMeasureElement() { 
3506      if (this.measure == null)
3507        if (Configuration.errorOnAutoCreate())
3508          throw new Error("Attempt to auto-create MeasureReport.measure");
3509        else if (Configuration.doAutoCreate())
3510          this.measure = new CanonicalType(); // bb
3511      return this.measure;
3512    }
3513
3514    public boolean hasMeasureElement() { 
3515      return this.measure != null && !this.measure.isEmpty();
3516    }
3517
3518    public boolean hasMeasure() { 
3519      return this.measure != null && !this.measure.isEmpty();
3520    }
3521
3522    /**
3523     * @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
3524     */
3525    public MeasureReport setMeasureElement(CanonicalType value) { 
3526      this.measure = value;
3527      return this;
3528    }
3529
3530    /**
3531     * @return A reference to the Measure that was calculated to produce this report.
3532     */
3533    public String getMeasure() { 
3534      return this.measure == null ? null : this.measure.getValue();
3535    }
3536
3537    /**
3538     * @param value A reference to the Measure that was calculated to produce this report.
3539     */
3540    public MeasureReport setMeasure(String value) { 
3541      if (Utilities.noString(value))
3542        this.measure = null;
3543      else {
3544        if (this.measure == null)
3545          this.measure = new CanonicalType();
3546        this.measure.setValue(value);
3547      }
3548      return this;
3549    }
3550
3551    /**
3552     * @return {@link #subject} (Optional subject identifying the individual or individuals the report is for.)
3553     */
3554    public Reference getSubject() { 
3555      if (this.subject == null)
3556        if (Configuration.errorOnAutoCreate())
3557          throw new Error("Attempt to auto-create MeasureReport.subject");
3558        else if (Configuration.doAutoCreate())
3559          this.subject = new Reference(); // cc
3560      return this.subject;
3561    }
3562
3563    public boolean hasSubject() { 
3564      return this.subject != null && !this.subject.isEmpty();
3565    }
3566
3567    /**
3568     * @param value {@link #subject} (Optional subject identifying the individual or individuals the report is for.)
3569     */
3570    public MeasureReport setSubject(Reference value) { 
3571      this.subject = value;
3572      return this;
3573    }
3574
3575    /**
3576     * @return {@link #date} (The date this measure was calculated.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
3577     */
3578    public DateTimeType getDateElement() { 
3579      if (this.date == null)
3580        if (Configuration.errorOnAutoCreate())
3581          throw new Error("Attempt to auto-create MeasureReport.date");
3582        else if (Configuration.doAutoCreate())
3583          this.date = new DateTimeType(); // bb
3584      return this.date;
3585    }
3586
3587    public boolean hasDateElement() { 
3588      return this.date != null && !this.date.isEmpty();
3589    }
3590
3591    public boolean hasDate() { 
3592      return this.date != null && !this.date.isEmpty();
3593    }
3594
3595    /**
3596     * @param value {@link #date} (The date this measure was calculated.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
3597     */
3598    public MeasureReport setDateElement(DateTimeType value) { 
3599      this.date = value;
3600      return this;
3601    }
3602
3603    /**
3604     * @return The date this measure was calculated.
3605     */
3606    public Date getDate() { 
3607      return this.date == null ? null : this.date.getValue();
3608    }
3609
3610    /**
3611     * @param value The date this measure was calculated.
3612     */
3613    public MeasureReport setDate(Date value) { 
3614      if (value == null)
3615        this.date = null;
3616      else {
3617        if (this.date == null)
3618          this.date = new DateTimeType();
3619        this.date.setValue(value);
3620      }
3621      return this;
3622    }
3623
3624    /**
3625     * @return {@link #reporter} (The individual or organization that is reporting the data.)
3626     */
3627    public Reference getReporter() { 
3628      if (this.reporter == null)
3629        if (Configuration.errorOnAutoCreate())
3630          throw new Error("Attempt to auto-create MeasureReport.reporter");
3631        else if (Configuration.doAutoCreate())
3632          this.reporter = new Reference(); // cc
3633      return this.reporter;
3634    }
3635
3636    public boolean hasReporter() { 
3637      return this.reporter != null && !this.reporter.isEmpty();
3638    }
3639
3640    /**
3641     * @param value {@link #reporter} (The individual or organization that is reporting the data.)
3642     */
3643    public MeasureReport setReporter(Reference value) { 
3644      this.reporter = value;
3645      return this;
3646    }
3647
3648    /**
3649     * @return {@link #reportingVendor} (A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report.)
3650     */
3651    public Reference getReportingVendor() { 
3652      if (this.reportingVendor == null)
3653        if (Configuration.errorOnAutoCreate())
3654          throw new Error("Attempt to auto-create MeasureReport.reportingVendor");
3655        else if (Configuration.doAutoCreate())
3656          this.reportingVendor = new Reference(); // cc
3657      return this.reportingVendor;
3658    }
3659
3660    public boolean hasReportingVendor() { 
3661      return this.reportingVendor != null && !this.reportingVendor.isEmpty();
3662    }
3663
3664    /**
3665     * @param value {@link #reportingVendor} (A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report.)
3666     */
3667    public MeasureReport setReportingVendor(Reference value) { 
3668      this.reportingVendor = value;
3669      return this;
3670    }
3671
3672    /**
3673     * @return {@link #location} (A reference to the location for which the data is being reported.)
3674     */
3675    public Reference getLocation() { 
3676      if (this.location == null)
3677        if (Configuration.errorOnAutoCreate())
3678          throw new Error("Attempt to auto-create MeasureReport.location");
3679        else if (Configuration.doAutoCreate())
3680          this.location = new Reference(); // cc
3681      return this.location;
3682    }
3683
3684    public boolean hasLocation() { 
3685      return this.location != null && !this.location.isEmpty();
3686    }
3687
3688    /**
3689     * @param value {@link #location} (A reference to the location for which the data is being reported.)
3690     */
3691    public MeasureReport setLocation(Reference value) { 
3692      this.location = value;
3693      return this;
3694    }
3695
3696    /**
3697     * @return {@link #period} (The reporting period for which the report was calculated.)
3698     */
3699    public Period getPeriod() { 
3700      if (this.period == null)
3701        if (Configuration.errorOnAutoCreate())
3702          throw new Error("Attempt to auto-create MeasureReport.period");
3703        else if (Configuration.doAutoCreate())
3704          this.period = new Period(); // cc
3705      return this.period;
3706    }
3707
3708    public boolean hasPeriod() { 
3709      return this.period != null && !this.period.isEmpty();
3710    }
3711
3712    /**
3713     * @param value {@link #period} (The reporting period for which the report was calculated.)
3714     */
3715    public MeasureReport setPeriod(Period value) { 
3716      this.period = value;
3717      return this;
3718    }
3719
3720    /**
3721     * @return {@link #inputParameters} (A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report.)
3722     */
3723    public Reference getInputParameters() { 
3724      if (this.inputParameters == null)
3725        if (Configuration.errorOnAutoCreate())
3726          throw new Error("Attempt to auto-create MeasureReport.inputParameters");
3727        else if (Configuration.doAutoCreate())
3728          this.inputParameters = new Reference(); // cc
3729      return this.inputParameters;
3730    }
3731
3732    public boolean hasInputParameters() { 
3733      return this.inputParameters != null && !this.inputParameters.isEmpty();
3734    }
3735
3736    /**
3737     * @param value {@link #inputParameters} (A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report.)
3738     */
3739    public MeasureReport setInputParameters(Reference value) { 
3740      this.inputParameters = value;
3741      return this;
3742    }
3743
3744    /**
3745     * @return {@link #scoring} (Indicates how the calculation is performed for the measure, including proportion, ratio, continuous-variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented. It is expected to be the same as the scoring element on the referenced Measure.)
3746     */
3747    public CodeableConcept getScoring() { 
3748      if (this.scoring == null)
3749        if (Configuration.errorOnAutoCreate())
3750          throw new Error("Attempt to auto-create MeasureReport.scoring");
3751        else if (Configuration.doAutoCreate())
3752          this.scoring = new CodeableConcept(); // cc
3753      return this.scoring;
3754    }
3755
3756    public boolean hasScoring() { 
3757      return this.scoring != null && !this.scoring.isEmpty();
3758    }
3759
3760    /**
3761     * @param value {@link #scoring} (Indicates how the calculation is performed for the measure, including proportion, ratio, continuous-variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented. It is expected to be the same as the scoring element on the referenced Measure.)
3762     */
3763    public MeasureReport setScoring(CodeableConcept value) { 
3764      this.scoring = value;
3765      return this;
3766    }
3767
3768    /**
3769     * @return {@link #improvementNotation} (Whether improvement in the measure is noted by an increase or decrease in the measure score.)
3770     */
3771    public CodeableConcept getImprovementNotation() { 
3772      if (this.improvementNotation == null)
3773        if (Configuration.errorOnAutoCreate())
3774          throw new Error("Attempt to auto-create MeasureReport.improvementNotation");
3775        else if (Configuration.doAutoCreate())
3776          this.improvementNotation = new CodeableConcept(); // cc
3777      return this.improvementNotation;
3778    }
3779
3780    public boolean hasImprovementNotation() { 
3781      return this.improvementNotation != null && !this.improvementNotation.isEmpty();
3782    }
3783
3784    /**
3785     * @param value {@link #improvementNotation} (Whether improvement in the measure is noted by an increase or decrease in the measure score.)
3786     */
3787    public MeasureReport setImprovementNotation(CodeableConcept value) { 
3788      this.improvementNotation = value;
3789      return this;
3790    }
3791
3792    /**
3793     * @return {@link #group} (The results of the calculation, one for each population group in the measure.)
3794     */
3795    public List<MeasureReportGroupComponent> getGroup() { 
3796      if (this.group == null)
3797        this.group = new ArrayList<MeasureReportGroupComponent>();
3798      return this.group;
3799    }
3800
3801    /**
3802     * @return Returns a reference to <code>this</code> for easy method chaining
3803     */
3804    public MeasureReport setGroup(List<MeasureReportGroupComponent> theGroup) { 
3805      this.group = theGroup;
3806      return this;
3807    }
3808
3809    public boolean hasGroup() { 
3810      if (this.group == null)
3811        return false;
3812      for (MeasureReportGroupComponent item : this.group)
3813        if (!item.isEmpty())
3814          return true;
3815      return false;
3816    }
3817
3818    public MeasureReportGroupComponent addGroup() { //3
3819      MeasureReportGroupComponent t = new MeasureReportGroupComponent();
3820      if (this.group == null)
3821        this.group = new ArrayList<MeasureReportGroupComponent>();
3822      this.group.add(t);
3823      return t;
3824    }
3825
3826    public MeasureReport addGroup(MeasureReportGroupComponent t) { //3
3827      if (t == null)
3828        return this;
3829      if (this.group == null)
3830        this.group = new ArrayList<MeasureReportGroupComponent>();
3831      this.group.add(t);
3832      return this;
3833    }
3834
3835    /**
3836     * @return The first repetition of repeating field {@link #group}, creating it if it does not already exist {3}
3837     */
3838    public MeasureReportGroupComponent getGroupFirstRep() { 
3839      if (getGroup().isEmpty()) {
3840        addGroup();
3841      }
3842      return getGroup().get(0);
3843    }
3844
3845    /**
3846     * @return {@link #supplementalData} (A reference to a Resource that represents additional information collected for the report. If the value of the supplemental data is not a Resource (i.e. evaluating the supplementalData expression for this case in the measure results in a value that is not a FHIR Resource), it is reported as a reference to a contained Observation resource.)
3847     */
3848    public List<Reference> getSupplementalData() { 
3849      if (this.supplementalData == null)
3850        this.supplementalData = new ArrayList<Reference>();
3851      return this.supplementalData;
3852    }
3853
3854    /**
3855     * @return Returns a reference to <code>this</code> for easy method chaining
3856     */
3857    public MeasureReport setSupplementalData(List<Reference> theSupplementalData) { 
3858      this.supplementalData = theSupplementalData;
3859      return this;
3860    }
3861
3862    public boolean hasSupplementalData() { 
3863      if (this.supplementalData == null)
3864        return false;
3865      for (Reference item : this.supplementalData)
3866        if (!item.isEmpty())
3867          return true;
3868      return false;
3869    }
3870
3871    public Reference addSupplementalData() { //3
3872      Reference t = new Reference();
3873      if (this.supplementalData == null)
3874        this.supplementalData = new ArrayList<Reference>();
3875      this.supplementalData.add(t);
3876      return t;
3877    }
3878
3879    public MeasureReport addSupplementalData(Reference t) { //3
3880      if (t == null)
3881        return this;
3882      if (this.supplementalData == null)
3883        this.supplementalData = new ArrayList<Reference>();
3884      this.supplementalData.add(t);
3885      return this;
3886    }
3887
3888    /**
3889     * @return The first repetition of repeating field {@link #supplementalData}, creating it if it does not already exist {3}
3890     */
3891    public Reference getSupplementalDataFirstRep() { 
3892      if (getSupplementalData().isEmpty()) {
3893        addSupplementalData();
3894      }
3895      return getSupplementalData().get(0);
3896    }
3897
3898    /**
3899     * @return {@link #evaluatedResource} (Evaluated resources are used to capture what data was involved in the calculation of a measure. This usage is only allowed for individual reports to ensure that the size of the MeasureReport resource is bounded.)
3900     */
3901    public List<Reference> getEvaluatedResource() { 
3902      if (this.evaluatedResource == null)
3903        this.evaluatedResource = new ArrayList<Reference>();
3904      return this.evaluatedResource;
3905    }
3906
3907    /**
3908     * @return Returns a reference to <code>this</code> for easy method chaining
3909     */
3910    public MeasureReport setEvaluatedResource(List<Reference> theEvaluatedResource) { 
3911      this.evaluatedResource = theEvaluatedResource;
3912      return this;
3913    }
3914
3915    public boolean hasEvaluatedResource() { 
3916      if (this.evaluatedResource == null)
3917        return false;
3918      for (Reference item : this.evaluatedResource)
3919        if (!item.isEmpty())
3920          return true;
3921      return false;
3922    }
3923
3924    public Reference addEvaluatedResource() { //3
3925      Reference t = new Reference();
3926      if (this.evaluatedResource == null)
3927        this.evaluatedResource = new ArrayList<Reference>();
3928      this.evaluatedResource.add(t);
3929      return t;
3930    }
3931
3932    public MeasureReport addEvaluatedResource(Reference t) { //3
3933      if (t == null)
3934        return this;
3935      if (this.evaluatedResource == null)
3936        this.evaluatedResource = new ArrayList<Reference>();
3937      this.evaluatedResource.add(t);
3938      return this;
3939    }
3940
3941    /**
3942     * @return The first repetition of repeating field {@link #evaluatedResource}, creating it if it does not already exist {3}
3943     */
3944    public Reference getEvaluatedResourceFirstRep() { 
3945      if (getEvaluatedResource().isEmpty()) {
3946        addEvaluatedResource();
3947      }
3948      return getEvaluatedResource().get(0);
3949    }
3950
3951      protected void listChildren(List<Property> children) {
3952        super.listChildren(children);
3953        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));
3954        children.add(new Property("status", "code", "The MeasureReport status. No data will be available until the MeasureReport status is complete.", 0, 1, status));
3955        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));
3956        children.add(new Property("dataUpdateType", "code", "Indicates whether the data submitted in a data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.", 0, 1, dataUpdateType));
3957        children.add(new Property("measure", "canonical(Measure)", "A reference to the Measure that was calculated to produce this report.", 0, 1, measure));
3958        children.add(new Property("subject", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "Optional subject identifying the individual or individuals the report is for.", 0, 1, subject));
3959        children.add(new Property("date", "dateTime", "The date this measure was calculated.", 0, 1, date));
3960        children.add(new Property("reporter", "Reference(Practitioner|PractitionerRole|Organization|Group)", "The individual or organization that is reporting the data.", 0, 1, reporter));
3961        children.add(new Property("reportingVendor", "Reference(Organization)", "A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report.", 0, 1, reportingVendor));
3962        children.add(new Property("location", "Reference(Location)", "A reference to the location for which the data is being reported.", 0, 1, location));
3963        children.add(new Property("period", "Period", "The reporting period for which the report was calculated.", 0, 1, period));
3964        children.add(new Property("inputParameters", "Reference(Parameters)", "A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report.", 0, 1, inputParameters));
3965        children.add(new Property("scoring", "CodeableConcept", "Indicates how the calculation is performed for the measure, including proportion, ratio, continuous-variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented. It is expected to be the same as the scoring element on the referenced Measure.", 0, 1, scoring));
3966        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));
3967        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));
3968        children.add(new Property("supplementalData", "Reference(Any)", "A reference to a Resource that represents additional information collected for the report. If the value of the supplemental data is not a Resource (i.e. evaluating the supplementalData expression for this case in the measure results in a value that is not a FHIR Resource), it is reported as a reference to a contained Observation resource.", 0, java.lang.Integer.MAX_VALUE, supplementalData));
3969        children.add(new Property("evaluatedResource", "Reference(Any)", "Evaluated resources are used to capture what data was involved in the calculation of a measure. This usage is only allowed for individual reports to ensure that the size of the MeasureReport resource is bounded.", 0, java.lang.Integer.MAX_VALUE, evaluatedResource));
3970      }
3971
3972      @Override
3973      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3974        switch (_hash) {
3975        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);
3976        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);
3977        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);
3978        case -425890067: /*dataUpdateType*/  return new Property("dataUpdateType", "code", "Indicates whether the data submitted in a data-exchange report represents a snapshot or incremental update. A snapshot update replaces all previously submitted data for the receiver, whereas an incremental update represents only updated and/or changed data and should be applied as a differential update to the existing submitted data for the receiver.", 0, 1, dataUpdateType);
3979        case 938321246: /*measure*/  return new Property("measure", "canonical(Measure)", "A reference to the Measure that was calculated to produce this report.", 0, 1, measure);
3980        case -1867885268: /*subject*/  return new Property("subject", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "Optional subject identifying the individual or individuals the report is for.", 0, 1, subject);
3981        case 3076014: /*date*/  return new Property("date", "dateTime", "The date this measure was calculated.", 0, 1, date);
3982        case -427039519: /*reporter*/  return new Property("reporter", "Reference(Practitioner|PractitionerRole|Organization|Group)", "The individual or organization that is reporting the data.", 0, 1, reporter);
3983        case 581336342: /*reportingVendor*/  return new Property("reportingVendor", "Reference(Organization)", "A reference to the vendor who queried the data, calculated results and/or generated the report. The ?reporting vendor? is intended to represent the submitting entity when it is not the same as the reporting entity. This extension is used when the Receiver is interested in getting vendor information in the report.", 0, 1, reportingVendor);
3984        case 1901043637: /*location*/  return new Property("location", "Reference(Location)", "A reference to the location for which the data is being reported.", 0, 1, location);
3985        case -991726143: /*period*/  return new Property("period", "Period", "The reporting period for which the report was calculated.", 0, 1, period);
3986        case -812039852: /*inputParameters*/  return new Property("inputParameters", "Reference(Parameters)", "A reference to a Parameters resource (typically represented using a contained resource) that represents any input parameters that were provided to the operation that generated the report.", 0, 1, inputParameters);
3987        case 1924005583: /*scoring*/  return new Property("scoring", "CodeableConcept", "Indicates how the calculation is performed for the measure, including proportion, ratio, continuous-variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented. It is expected to be the same as the scoring element on the referenced Measure.", 0, 1, scoring);
3988        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);
3989        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);
3990        case 1447496814: /*supplementalData*/  return new Property("supplementalData", "Reference(Any)", "A reference to a Resource that represents additional information collected for the report. If the value of the supplemental data is not a Resource (i.e. evaluating the supplementalData expression for this case in the measure results in a value that is not a FHIR Resource), it is reported as a reference to a contained Observation resource.", 0, java.lang.Integer.MAX_VALUE, supplementalData);
3991        case -1056771047: /*evaluatedResource*/  return new Property("evaluatedResource", "Reference(Any)", "Evaluated resources are used to capture what data was involved in the calculation of a measure. This usage is only allowed for individual reports to ensure that the size of the MeasureReport resource is bounded.", 0, java.lang.Integer.MAX_VALUE, evaluatedResource);
3992        default: return super.getNamedProperty(_hash, _name, _checkValid);
3993        }
3994
3995      }
3996
3997      @Override
3998      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3999        switch (hash) {
4000        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
4001        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<MeasureReportStatus>
4002        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<MeasureReportType>
4003        case -425890067: /*dataUpdateType*/ return this.dataUpdateType == null ? new Base[0] : new Base[] {this.dataUpdateType}; // Enumeration<SubmitDataUpdateType>
4004        case 938321246: /*measure*/ return this.measure == null ? new Base[0] : new Base[] {this.measure}; // CanonicalType
4005        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
4006        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
4007        case -427039519: /*reporter*/ return this.reporter == null ? new Base[0] : new Base[] {this.reporter}; // Reference
4008        case 581336342: /*reportingVendor*/ return this.reportingVendor == null ? new Base[0] : new Base[] {this.reportingVendor}; // Reference
4009        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // Reference
4010        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
4011        case -812039852: /*inputParameters*/ return this.inputParameters == null ? new Base[0] : new Base[] {this.inputParameters}; // Reference
4012        case 1924005583: /*scoring*/ return this.scoring == null ? new Base[0] : new Base[] {this.scoring}; // CodeableConcept
4013        case -2085456136: /*improvementNotation*/ return this.improvementNotation == null ? new Base[0] : new Base[] {this.improvementNotation}; // CodeableConcept
4014        case 98629247: /*group*/ return this.group == null ? new Base[0] : this.group.toArray(new Base[this.group.size()]); // MeasureReportGroupComponent
4015        case 1447496814: /*supplementalData*/ return this.supplementalData == null ? new Base[0] : this.supplementalData.toArray(new Base[this.supplementalData.size()]); // Reference
4016        case -1056771047: /*evaluatedResource*/ return this.evaluatedResource == null ? new Base[0] : this.evaluatedResource.toArray(new Base[this.evaluatedResource.size()]); // Reference
4017        default: return super.getProperty(hash, name, checkValid);
4018        }
4019
4020      }
4021
4022      @Override
4023      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4024        switch (hash) {
4025        case -1618432855: // identifier
4026          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
4027          return value;
4028        case -892481550: // status
4029          value = new MeasureReportStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
4030          this.status = (Enumeration) value; // Enumeration<MeasureReportStatus>
4031          return value;
4032        case 3575610: // type
4033          value = new MeasureReportTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
4034          this.type = (Enumeration) value; // Enumeration<MeasureReportType>
4035          return value;
4036        case -425890067: // dataUpdateType
4037          value = new SubmitDataUpdateTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
4038          this.dataUpdateType = (Enumeration) value; // Enumeration<SubmitDataUpdateType>
4039          return value;
4040        case 938321246: // measure
4041          this.measure = TypeConvertor.castToCanonical(value); // CanonicalType
4042          return value;
4043        case -1867885268: // subject
4044          this.subject = TypeConvertor.castToReference(value); // Reference
4045          return value;
4046        case 3076014: // date
4047          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
4048          return value;
4049        case -427039519: // reporter
4050          this.reporter = TypeConvertor.castToReference(value); // Reference
4051          return value;
4052        case 581336342: // reportingVendor
4053          this.reportingVendor = TypeConvertor.castToReference(value); // Reference
4054          return value;
4055        case 1901043637: // location
4056          this.location = TypeConvertor.castToReference(value); // Reference
4057          return value;
4058        case -991726143: // period
4059          this.period = TypeConvertor.castToPeriod(value); // Period
4060          return value;
4061        case -812039852: // inputParameters
4062          this.inputParameters = TypeConvertor.castToReference(value); // Reference
4063          return value;
4064        case 1924005583: // scoring
4065          this.scoring = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4066          return value;
4067        case -2085456136: // improvementNotation
4068          this.improvementNotation = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4069          return value;
4070        case 98629247: // group
4071          this.getGroup().add((MeasureReportGroupComponent) value); // MeasureReportGroupComponent
4072          return value;
4073        case 1447496814: // supplementalData
4074          this.getSupplementalData().add(TypeConvertor.castToReference(value)); // Reference
4075          return value;
4076        case -1056771047: // evaluatedResource
4077          this.getEvaluatedResource().add(TypeConvertor.castToReference(value)); // Reference
4078          return value;
4079        default: return super.setProperty(hash, name, value);
4080        }
4081
4082      }
4083
4084      @Override
4085      public Base setProperty(String name, Base value) throws FHIRException {
4086        if (name.equals("identifier")) {
4087          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
4088        } else if (name.equals("status")) {
4089          value = new MeasureReportStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
4090          this.status = (Enumeration) value; // Enumeration<MeasureReportStatus>
4091        } else if (name.equals("type")) {
4092          value = new MeasureReportTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
4093          this.type = (Enumeration) value; // Enumeration<MeasureReportType>
4094        } else if (name.equals("dataUpdateType")) {
4095          value = new SubmitDataUpdateTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
4096          this.dataUpdateType = (Enumeration) value; // Enumeration<SubmitDataUpdateType>
4097        } else if (name.equals("measure")) {
4098          this.measure = TypeConvertor.castToCanonical(value); // CanonicalType
4099        } else if (name.equals("subject")) {
4100          this.subject = TypeConvertor.castToReference(value); // Reference
4101        } else if (name.equals("date")) {
4102          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
4103        } else if (name.equals("reporter")) {
4104          this.reporter = TypeConvertor.castToReference(value); // Reference
4105        } else if (name.equals("reportingVendor")) {
4106          this.reportingVendor = TypeConvertor.castToReference(value); // Reference
4107        } else if (name.equals("location")) {
4108          this.location = TypeConvertor.castToReference(value); // Reference
4109        } else if (name.equals("period")) {
4110          this.period = TypeConvertor.castToPeriod(value); // Period
4111        } else if (name.equals("inputParameters")) {
4112          this.inputParameters = TypeConvertor.castToReference(value); // Reference
4113        } else if (name.equals("scoring")) {
4114          this.scoring = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4115        } else if (name.equals("improvementNotation")) {
4116          this.improvementNotation = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4117        } else if (name.equals("group")) {
4118          this.getGroup().add((MeasureReportGroupComponent) value);
4119        } else if (name.equals("supplementalData")) {
4120          this.getSupplementalData().add(TypeConvertor.castToReference(value));
4121        } else if (name.equals("evaluatedResource")) {
4122          this.getEvaluatedResource().add(TypeConvertor.castToReference(value));
4123        } else
4124          return super.setProperty(name, value);
4125        return value;
4126      }
4127
4128      @Override
4129      public Base makeProperty(int hash, String name) throws FHIRException {
4130        switch (hash) {
4131        case -1618432855:  return addIdentifier(); 
4132        case -892481550:  return getStatusElement();
4133        case 3575610:  return getTypeElement();
4134        case -425890067:  return getDataUpdateTypeElement();
4135        case 938321246:  return getMeasureElement();
4136        case -1867885268:  return getSubject();
4137        case 3076014:  return getDateElement();
4138        case -427039519:  return getReporter();
4139        case 581336342:  return getReportingVendor();
4140        case 1901043637:  return getLocation();
4141        case -991726143:  return getPeriod();
4142        case -812039852:  return getInputParameters();
4143        case 1924005583:  return getScoring();
4144        case -2085456136:  return getImprovementNotation();
4145        case 98629247:  return addGroup(); 
4146        case 1447496814:  return addSupplementalData(); 
4147        case -1056771047:  return addEvaluatedResource(); 
4148        default: return super.makeProperty(hash, name);
4149        }
4150
4151      }
4152
4153      @Override
4154      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4155        switch (hash) {
4156        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
4157        case -892481550: /*status*/ return new String[] {"code"};
4158        case 3575610: /*type*/ return new String[] {"code"};
4159        case -425890067: /*dataUpdateType*/ return new String[] {"code"};
4160        case 938321246: /*measure*/ return new String[] {"canonical"};
4161        case -1867885268: /*subject*/ return new String[] {"Reference"};
4162        case 3076014: /*date*/ return new String[] {"dateTime"};
4163        case -427039519: /*reporter*/ return new String[] {"Reference"};
4164        case 581336342: /*reportingVendor*/ return new String[] {"Reference"};
4165        case 1901043637: /*location*/ return new String[] {"Reference"};
4166        case -991726143: /*period*/ return new String[] {"Period"};
4167        case -812039852: /*inputParameters*/ return new String[] {"Reference"};
4168        case 1924005583: /*scoring*/ return new String[] {"CodeableConcept"};
4169        case -2085456136: /*improvementNotation*/ return new String[] {"CodeableConcept"};
4170        case 98629247: /*group*/ return new String[] {};
4171        case 1447496814: /*supplementalData*/ return new String[] {"Reference"};
4172        case -1056771047: /*evaluatedResource*/ return new String[] {"Reference"};
4173        default: return super.getTypesForProperty(hash, name);
4174        }
4175
4176      }
4177
4178      @Override
4179      public Base addChild(String name) throws FHIRException {
4180        if (name.equals("identifier")) {
4181          return addIdentifier();
4182        }
4183        else if (name.equals("status")) {
4184          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.status");
4185        }
4186        else if (name.equals("type")) {
4187          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.type");
4188        }
4189        else if (name.equals("dataUpdateType")) {
4190          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.dataUpdateType");
4191        }
4192        else if (name.equals("measure")) {
4193          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.measure");
4194        }
4195        else if (name.equals("subject")) {
4196          this.subject = new Reference();
4197          return this.subject;
4198        }
4199        else if (name.equals("date")) {
4200          throw new FHIRException("Cannot call addChild on a singleton property MeasureReport.date");
4201        }
4202        else if (name.equals("reporter")) {
4203          this.reporter = new Reference();
4204          return this.reporter;
4205        }
4206        else if (name.equals("reportingVendor")) {
4207          this.reportingVendor = new Reference();
4208          return this.reportingVendor;
4209        }
4210        else if (name.equals("location")) {
4211          this.location = new Reference();
4212          return this.location;
4213        }
4214        else if (name.equals("period")) {
4215          this.period = new Period();
4216          return this.period;
4217        }
4218        else if (name.equals("inputParameters")) {
4219          this.inputParameters = new Reference();
4220          return this.inputParameters;
4221        }
4222        else if (name.equals("scoring")) {
4223          this.scoring = new CodeableConcept();
4224          return this.scoring;
4225        }
4226        else if (name.equals("improvementNotation")) {
4227          this.improvementNotation = new CodeableConcept();
4228          return this.improvementNotation;
4229        }
4230        else if (name.equals("group")) {
4231          return addGroup();
4232        }
4233        else if (name.equals("supplementalData")) {
4234          return addSupplementalData();
4235        }
4236        else if (name.equals("evaluatedResource")) {
4237          return addEvaluatedResource();
4238        }
4239        else
4240          return super.addChild(name);
4241      }
4242
4243  public String fhirType() {
4244    return "MeasureReport";
4245
4246  }
4247
4248      public MeasureReport copy() {
4249        MeasureReport dst = new MeasureReport();
4250        copyValues(dst);
4251        return dst;
4252      }
4253
4254      public void copyValues(MeasureReport dst) {
4255        super.copyValues(dst);
4256        if (identifier != null) {
4257          dst.identifier = new ArrayList<Identifier>();
4258          for (Identifier i : identifier)
4259            dst.identifier.add(i.copy());
4260        };
4261        dst.status = status == null ? null : status.copy();
4262        dst.type = type == null ? null : type.copy();
4263        dst.dataUpdateType = dataUpdateType == null ? null : dataUpdateType.copy();
4264        dst.measure = measure == null ? null : measure.copy();
4265        dst.subject = subject == null ? null : subject.copy();
4266        dst.date = date == null ? null : date.copy();
4267        dst.reporter = reporter == null ? null : reporter.copy();
4268        dst.reportingVendor = reportingVendor == null ? null : reportingVendor.copy();
4269        dst.location = location == null ? null : location.copy();
4270        dst.period = period == null ? null : period.copy();
4271        dst.inputParameters = inputParameters == null ? null : inputParameters.copy();
4272        dst.scoring = scoring == null ? null : scoring.copy();
4273        dst.improvementNotation = improvementNotation == null ? null : improvementNotation.copy();
4274        if (group != null) {
4275          dst.group = new ArrayList<MeasureReportGroupComponent>();
4276          for (MeasureReportGroupComponent i : group)
4277            dst.group.add(i.copy());
4278        };
4279        if (supplementalData != null) {
4280          dst.supplementalData = new ArrayList<Reference>();
4281          for (Reference i : supplementalData)
4282            dst.supplementalData.add(i.copy());
4283        };
4284        if (evaluatedResource != null) {
4285          dst.evaluatedResource = new ArrayList<Reference>();
4286          for (Reference i : evaluatedResource)
4287            dst.evaluatedResource.add(i.copy());
4288        };
4289      }
4290
4291      protected MeasureReport typedCopy() {
4292        return copy();
4293      }
4294
4295      @Override
4296      public boolean equalsDeep(Base other_) {
4297        if (!super.equalsDeep(other_))
4298          return false;
4299        if (!(other_ instanceof MeasureReport))
4300          return false;
4301        MeasureReport o = (MeasureReport) other_;
4302        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(type, o.type, true)
4303           && compareDeep(dataUpdateType, o.dataUpdateType, true) && compareDeep(measure, o.measure, true)
4304           && compareDeep(subject, o.subject, true) && compareDeep(date, o.date, true) && compareDeep(reporter, o.reporter, true)
4305           && compareDeep(reportingVendor, o.reportingVendor, true) && compareDeep(location, o.location, true)
4306           && compareDeep(period, o.period, true) && compareDeep(inputParameters, o.inputParameters, true)
4307           && compareDeep(scoring, o.scoring, true) && compareDeep(improvementNotation, o.improvementNotation, true)
4308           && compareDeep(group, o.group, true) && compareDeep(supplementalData, o.supplementalData, true)
4309           && compareDeep(evaluatedResource, o.evaluatedResource, true);
4310      }
4311
4312      @Override
4313      public boolean equalsShallow(Base other_) {
4314        if (!super.equalsShallow(other_))
4315          return false;
4316        if (!(other_ instanceof MeasureReport))
4317          return false;
4318        MeasureReport o = (MeasureReport) other_;
4319        return compareValues(status, o.status, true) && compareValues(type, o.type, true) && compareValues(dataUpdateType, o.dataUpdateType, true)
4320           && compareValues(measure, o.measure, true) && compareValues(date, o.date, true);
4321      }
4322
4323      public boolean isEmpty() {
4324        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, type
4325          , dataUpdateType, measure, subject, date, reporter, reportingVendor, location
4326          , period, inputParameters, scoring, improvementNotation, group, supplementalData
4327          , evaluatedResource);
4328      }
4329
4330  @Override
4331  public ResourceType getResourceType() {
4332    return ResourceType.MeasureReport;
4333   }
4334
4335 /**
4336   * Search parameter: <b>evaluated-resource</b>
4337   * <p>
4338   * Description: <b>An evaluated resource referenced by the measure report</b><br>
4339   * Type: <b>reference</b><br>
4340   * Path: <b>MeasureReport.evaluatedResource</b><br>
4341   * </p>
4342   */
4343  @SearchParamDefinition(name="evaluated-resource", path="MeasureReport.evaluatedResource", description="An evaluated resource referenced by the measure report", type="reference", target={Account.class, ActivityDefinition.class, ActorDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, ArtifactAssessment.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BiologicallyDerivedProductDispense.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, ConditionDefinition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceAssociation.class, DeviceDefinition.class, DeviceDispense.class, DeviceMetric.class, DeviceRequest.class, DeviceUsage.class, DiagnosticReport.class, DocumentReference.class, Encounter.class, EncounterHistory.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, FormularyItem.class, GenomicStudy.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingSelection.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, InventoryItem.class, InventoryReport.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationStatement.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionIntake.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Parameters.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Permission.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestOrchestration.class, Requirements.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SubstanceNucleicAcid.class, SubstancePolymer.class, SubstanceProtein.class, SubstanceReferenceInformation.class, SubstanceSourceMaterial.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestPlan.class, TestReport.class, TestScript.class, Transport.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
4344  public static final String SP_EVALUATED_RESOURCE = "evaluated-resource";
4345 /**
4346   * <b>Fluent Client</b> search parameter constant for <b>evaluated-resource</b>
4347   * <p>
4348   * Description: <b>An evaluated resource referenced by the measure report</b><br>
4349   * Type: <b>reference</b><br>
4350   * Path: <b>MeasureReport.evaluatedResource</b><br>
4351   * </p>
4352   */
4353  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam EVALUATED_RESOURCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_EVALUATED_RESOURCE);
4354
4355/**
4356   * Constant for fluent queries to be used to add include statements. Specifies
4357   * the path value of "<b>MeasureReport:evaluated-resource</b>".
4358   */
4359  public static final ca.uhn.fhir.model.api.Include INCLUDE_EVALUATED_RESOURCE = new ca.uhn.fhir.model.api.Include("MeasureReport:evaluated-resource").toLocked();
4360
4361 /**
4362   * Search parameter: <b>location</b>
4363   * <p>
4364   * Description: <b>The location to return measure report results for</b><br>
4365   * Type: <b>reference</b><br>
4366   * Path: <b>MeasureReport.location</b><br>
4367   * </p>
4368   */
4369  @SearchParamDefinition(name="location", path="MeasureReport.location", description="The location to return measure report results for", type="reference", target={Location.class } )
4370  public static final String SP_LOCATION = "location";
4371 /**
4372   * <b>Fluent Client</b> search parameter constant for <b>location</b>
4373   * <p>
4374   * Description: <b>The location to return measure report results for</b><br>
4375   * Type: <b>reference</b><br>
4376   * Path: <b>MeasureReport.location</b><br>
4377   * </p>
4378   */
4379  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
4380
4381/**
4382   * Constant for fluent queries to be used to add include statements. Specifies
4383   * the path value of "<b>MeasureReport:location</b>".
4384   */
4385  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("MeasureReport:location").toLocked();
4386
4387 /**
4388   * Search parameter: <b>measure</b>
4389   * <p>
4390   * Description: <b>The measure to return measure report results for</b><br>
4391   * Type: <b>reference</b><br>
4392   * Path: <b>MeasureReport.measure</b><br>
4393   * </p>
4394   */
4395  @SearchParamDefinition(name="measure", path="MeasureReport.measure", description="The measure to return measure report results for", type="reference", target={Measure.class } )
4396  public static final String SP_MEASURE = "measure";
4397 /**
4398   * <b>Fluent Client</b> search parameter constant for <b>measure</b>
4399   * <p>
4400   * Description: <b>The measure to return measure report results for</b><br>
4401   * Type: <b>reference</b><br>
4402   * Path: <b>MeasureReport.measure</b><br>
4403   * </p>
4404   */
4405  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam MEASURE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_MEASURE);
4406
4407/**
4408   * Constant for fluent queries to be used to add include statements. Specifies
4409   * the path value of "<b>MeasureReport:measure</b>".
4410   */
4411  public static final ca.uhn.fhir.model.api.Include INCLUDE_MEASURE = new ca.uhn.fhir.model.api.Include("MeasureReport:measure").toLocked();
4412
4413 /**
4414   * Search parameter: <b>period</b>
4415   * <p>
4416   * Description: <b>The period of the measure report</b><br>
4417   * Type: <b>date</b><br>
4418   * Path: <b>MeasureReport.period</b><br>
4419   * </p>
4420   */
4421  @SearchParamDefinition(name="period", path="MeasureReport.period", description="The period of the measure report", type="date" )
4422  public static final String SP_PERIOD = "period";
4423 /**
4424   * <b>Fluent Client</b> search parameter constant for <b>period</b>
4425   * <p>
4426   * Description: <b>The period of the measure report</b><br>
4427   * Type: <b>date</b><br>
4428   * Path: <b>MeasureReport.period</b><br>
4429   * </p>
4430   */
4431  public static final ca.uhn.fhir.rest.gclient.DateClientParam PERIOD = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_PERIOD);
4432
4433 /**
4434   * Search parameter: <b>reporter</b>
4435   * <p>
4436   * Description: <b>The reporter to return measure report results for</b><br>
4437   * Type: <b>reference</b><br>
4438   * Path: <b>MeasureReport.reporter</b><br>
4439   * </p>
4440   */
4441  @SearchParamDefinition(name="reporter", path="MeasureReport.reporter", description="The reporter to return measure report results for", type="reference", target={Group.class, Organization.class, Practitioner.class, PractitionerRole.class } )
4442  public static final String SP_REPORTER = "reporter";
4443 /**
4444   * <b>Fluent Client</b> search parameter constant for <b>reporter</b>
4445   * <p>
4446   * Description: <b>The reporter to return measure report results for</b><br>
4447   * Type: <b>reference</b><br>
4448   * Path: <b>MeasureReport.reporter</b><br>
4449   * </p>
4450   */
4451  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REPORTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REPORTER);
4452
4453/**
4454   * Constant for fluent queries to be used to add include statements. Specifies
4455   * the path value of "<b>MeasureReport:reporter</b>".
4456   */
4457  public static final ca.uhn.fhir.model.api.Include INCLUDE_REPORTER = new ca.uhn.fhir.model.api.Include("MeasureReport:reporter").toLocked();
4458
4459 /**
4460   * Search parameter: <b>status</b>
4461   * <p>
4462   * Description: <b>The status of the measure report</b><br>
4463   * Type: <b>token</b><br>
4464   * Path: <b>MeasureReport.status</b><br>
4465   * </p>
4466   */
4467  @SearchParamDefinition(name="status", path="MeasureReport.status", description="The status of the measure report", type="token" )
4468  public static final String SP_STATUS = "status";
4469 /**
4470   * <b>Fluent Client</b> search parameter constant for <b>status</b>
4471   * <p>
4472   * Description: <b>The status of the measure report</b><br>
4473   * Type: <b>token</b><br>
4474   * Path: <b>MeasureReport.status</b><br>
4475   * </p>
4476   */
4477  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
4478
4479 /**
4480   * Search parameter: <b>subject</b>
4481   * <p>
4482   * Description: <b>The identity of a subject to search for individual measure report results for</b><br>
4483   * Type: <b>reference</b><br>
4484   * Path: <b>MeasureReport.subject</b><br>
4485   * </p>
4486   */
4487  @SearchParamDefinition(name="subject", path="MeasureReport.subject", description="The identity of a subject to search for individual measure report results for", type="reference", target={CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
4488  public static final String SP_SUBJECT = "subject";
4489 /**
4490   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
4491   * <p>
4492   * Description: <b>The identity of a subject to search for individual measure report results for</b><br>
4493   * Type: <b>reference</b><br>
4494   * Path: <b>MeasureReport.subject</b><br>
4495   * </p>
4496   */
4497  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
4498
4499/**
4500   * Constant for fluent queries to be used to add include statements. Specifies
4501   * the path value of "<b>MeasureReport:subject</b>".
4502   */
4503  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("MeasureReport:subject").toLocked();
4504
4505 /**
4506   * Search parameter: <b>date</b>
4507   * <p>
4508   * Description: <b>Multiple Resources: 
4509
4510* [AdverseEvent](adverseevent.html): When the event occurred
4511* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
4512* [Appointment](appointment.html): Appointment date/time.
4513* [AuditEvent](auditevent.html): Time when the event was recorded
4514* [CarePlan](careplan.html): Time period plan covers
4515* [CareTeam](careteam.html): A date within the coverage time period.
4516* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
4517* [Composition](composition.html): Composition editing time
4518* [Consent](consent.html): When consent was agreed to
4519* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
4520* [DocumentReference](documentreference.html): When this document reference was created
4521* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted
4522* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
4523* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
4524* [Flag](flag.html): Time period when flag is active
4525* [Immunization](immunization.html): Vaccination  (non)-Administration Date
4526* [ImmunizationEvaluation](immunizationevaluation.html): Date the evaluation was generated
4527* [ImmunizationRecommendation](immunizationrecommendation.html): Date recommendation(s) created
4528* [Invoice](invoice.html): Invoice date / posting date
4529* [List](list.html): When the list was prepared
4530* [MeasureReport](measurereport.html): The date of the measure report
4531* [NutritionIntake](nutritionintake.html): Date when patient was taking (or not taking) the medication
4532* [Observation](observation.html): Clinically relevant time/time-period for observation
4533* [Procedure](procedure.html): When the procedure occurred or is occurring
4534* [ResearchSubject](researchsubject.html): Start and end of participation
4535* [RiskAssessment](riskassessment.html): When was assessment made?
4536* [SupplyRequest](supplyrequest.html): When the request was made
4537</b><br>
4538   * Type: <b>date</b><br>
4539   * Path: <b>AdverseEvent.occurrence.ofType(dateTime) | AdverseEvent.occurrence.ofType(Period) | AdverseEvent.occurrence.ofType(Timing) | AllergyIntolerance.recordedDate | (start | requestedPeriod.start).first() | AuditEvent.recorded | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.date | DiagnosticReport.effective.ofType(dateTime) | DiagnosticReport.effective.ofType(Period) | DocumentReference.date | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence.ofType(dateTime)) | ImmunizationEvaluation.date | ImmunizationRecommendation.date | Invoice.date | List.date | MeasureReport.date | NutritionIntake.occurrence.ofType(dateTime) | NutritionIntake.occurrence.ofType(Period) | Observation.effective.ofType(dateTime) | Observation.effective.ofType(Period) | Observation.effective.ofType(Timing) | Observation.effective.ofType(instant) | Procedure.occurrence.ofType(dateTime) | Procedure.occurrence.ofType(Period) | Procedure.occurrence.ofType(Timing) | ResearchSubject.period | (RiskAssessment.occurrence.ofType(dateTime)) | SupplyRequest.authoredOn</b><br>
4540   * </p>
4541   */
4542  @SearchParamDefinition(name="date", path="AdverseEvent.occurrence.ofType(dateTime) | AdverseEvent.occurrence.ofType(Period) | AdverseEvent.occurrence.ofType(Timing) | AllergyIntolerance.recordedDate | (start | requestedPeriod.start).first() | AuditEvent.recorded | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.date | DiagnosticReport.effective.ofType(dateTime) | DiagnosticReport.effective.ofType(Period) | DocumentReference.date | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence.ofType(dateTime)) | ImmunizationEvaluation.date | ImmunizationRecommendation.date | Invoice.date | List.date | MeasureReport.date | NutritionIntake.occurrence.ofType(dateTime) | NutritionIntake.occurrence.ofType(Period) | Observation.effective.ofType(dateTime) | Observation.effective.ofType(Period) | Observation.effective.ofType(Timing) | Observation.effective.ofType(instant) | Procedure.occurrence.ofType(dateTime) | Procedure.occurrence.ofType(Period) | Procedure.occurrence.ofType(Timing) | ResearchSubject.period | (RiskAssessment.occurrence.ofType(dateTime)) | SupplyRequest.authoredOn", description="Multiple Resources: \r\n\r\n* [AdverseEvent](adverseevent.html): When the event occurred\r\n* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded\r\n* [Appointment](appointment.html): Appointment date/time.\r\n* [AuditEvent](auditevent.html): Time when the event was recorded\r\n* [CarePlan](careplan.html): Time period plan covers\r\n* [CareTeam](careteam.html): A date within the coverage time period.\r\n* [ClinicalImpression](clinicalimpression.html): When the assessment was documented\r\n* [Composition](composition.html): Composition editing time\r\n* [Consent](consent.html): When consent was agreed to\r\n* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report\r\n* [DocumentReference](documentreference.html): When this document reference was created\r\n* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted\r\n* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period\r\n* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated\r\n* [Flag](flag.html): Time period when flag is active\r\n* [Immunization](immunization.html): Vaccination  (non)-Administration Date\r\n* [ImmunizationEvaluation](immunizationevaluation.html): Date the evaluation was generated\r\n* [ImmunizationRecommendation](immunizationrecommendation.html): Date recommendation(s) created\r\n* [Invoice](invoice.html): Invoice date / posting date\r\n* [List](list.html): When the list was prepared\r\n* [MeasureReport](measurereport.html): The date of the measure report\r\n* [NutritionIntake](nutritionintake.html): Date when patient was taking (or not taking) the medication\r\n* [Observation](observation.html): Clinically relevant time/time-period for observation\r\n* [Procedure](procedure.html): When the procedure occurred or is occurring\r\n* [ResearchSubject](researchsubject.html): Start and end of participation\r\n* [RiskAssessment](riskassessment.html): When was assessment made?\r\n* [SupplyRequest](supplyrequest.html): When the request was made\r\n", type="date" )
4543  public static final String SP_DATE = "date";
4544 /**
4545   * <b>Fluent Client</b> search parameter constant for <b>date</b>
4546   * <p>
4547   * Description: <b>Multiple Resources: 
4548
4549* [AdverseEvent](adverseevent.html): When the event occurred
4550* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
4551* [Appointment](appointment.html): Appointment date/time.
4552* [AuditEvent](auditevent.html): Time when the event was recorded
4553* [CarePlan](careplan.html): Time period plan covers
4554* [CareTeam](careteam.html): A date within the coverage time period.
4555* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
4556* [Composition](composition.html): Composition editing time
4557* [Consent](consent.html): When consent was agreed to
4558* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
4559* [DocumentReference](documentreference.html): When this document reference was created
4560* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted
4561* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
4562* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
4563* [Flag](flag.html): Time period when flag is active
4564* [Immunization](immunization.html): Vaccination  (non)-Administration Date
4565* [ImmunizationEvaluation](immunizationevaluation.html): Date the evaluation was generated
4566* [ImmunizationRecommendation](immunizationrecommendation.html): Date recommendation(s) created
4567* [Invoice](invoice.html): Invoice date / posting date
4568* [List](list.html): When the list was prepared
4569* [MeasureReport](measurereport.html): The date of the measure report
4570* [NutritionIntake](nutritionintake.html): Date when patient was taking (or not taking) the medication
4571* [Observation](observation.html): Clinically relevant time/time-period for observation
4572* [Procedure](procedure.html): When the procedure occurred or is occurring
4573* [ResearchSubject](researchsubject.html): Start and end of participation
4574* [RiskAssessment](riskassessment.html): When was assessment made?
4575* [SupplyRequest](supplyrequest.html): When the request was made
4576</b><br>
4577   * Type: <b>date</b><br>
4578   * Path: <b>AdverseEvent.occurrence.ofType(dateTime) | AdverseEvent.occurrence.ofType(Period) | AdverseEvent.occurrence.ofType(Timing) | AllergyIntolerance.recordedDate | (start | requestedPeriod.start).first() | AuditEvent.recorded | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.date | DiagnosticReport.effective.ofType(dateTime) | DiagnosticReport.effective.ofType(Period) | DocumentReference.date | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence.ofType(dateTime)) | ImmunizationEvaluation.date | ImmunizationRecommendation.date | Invoice.date | List.date | MeasureReport.date | NutritionIntake.occurrence.ofType(dateTime) | NutritionIntake.occurrence.ofType(Period) | Observation.effective.ofType(dateTime) | Observation.effective.ofType(Period) | Observation.effective.ofType(Timing) | Observation.effective.ofType(instant) | Procedure.occurrence.ofType(dateTime) | Procedure.occurrence.ofType(Period) | Procedure.occurrence.ofType(Timing) | ResearchSubject.period | (RiskAssessment.occurrence.ofType(dateTime)) | SupplyRequest.authoredOn</b><br>
4579   * </p>
4580   */
4581  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
4582
4583 /**
4584   * Search parameter: <b>identifier</b>
4585   * <p>
4586   * Description: <b>Multiple Resources: 
4587
4588* [Account](account.html): Account number
4589* [AdverseEvent](adverseevent.html): Business identifier for the event
4590* [AllergyIntolerance](allergyintolerance.html): External ids for this item
4591* [Appointment](appointment.html): An Identifier of the Appointment
4592* [AppointmentResponse](appointmentresponse.html): An Identifier in this appointment response
4593* [Basic](basic.html): Business identifier
4594* [BodyStructure](bodystructure.html): Bodystructure identifier
4595* [CarePlan](careplan.html): External Ids for this plan
4596* [CareTeam](careteam.html): External Ids for this team
4597* [ChargeItem](chargeitem.html): Business Identifier for item
4598* [Claim](claim.html): The primary identifier of the financial resource
4599* [ClaimResponse](claimresponse.html): The identity of the ClaimResponse
4600* [ClinicalImpression](clinicalimpression.html): Business identifier
4601* [Communication](communication.html): Unique identifier
4602* [CommunicationRequest](communicationrequest.html): Unique identifier
4603* [Composition](composition.html): Version-independent identifier for the Composition
4604* [Condition](condition.html): A unique identifier of the condition record
4605* [Consent](consent.html): Identifier for this record (external references)
4606* [Contract](contract.html): The identity of the contract
4607* [Coverage](coverage.html): The primary identifier of the insured and the coverage
4608* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The business identifier of the Eligibility
4609* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The business identifier
4610* [DetectedIssue](detectedissue.html): Unique id for the detected issue
4611* [DeviceRequest](devicerequest.html): Business identifier for request/order
4612* [DeviceUsage](deviceusage.html): Search by identifier
4613* [DiagnosticReport](diagnosticreport.html): An identifier for the report
4614* [DocumentReference](documentreference.html): Identifier of the attachment binary
4615* [Encounter](encounter.html): Identifier(s) by which this encounter is known
4616* [EnrollmentRequest](enrollmentrequest.html): The business identifier of the Enrollment
4617* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
4618* [ExplanationOfBenefit](explanationofbenefit.html): The business identifier of the Explanation of Benefit
4619* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
4620* [Flag](flag.html): Business identifier
4621* [Goal](goal.html): External Ids for this goal
4622* [GuidanceResponse](guidanceresponse.html): The identifier of the guidance response
4623* [ImagingSelection](imagingselection.html): Identifiers for the imaging selection
4624* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID
4625* [Immunization](immunization.html): Business identifier
4626* [ImmunizationEvaluation](immunizationevaluation.html): ID of the evaluation
4627* [ImmunizationRecommendation](immunizationrecommendation.html): Business identifier
4628* [Invoice](invoice.html): Business Identifier for item
4629* [List](list.html): Business identifier
4630* [MeasureReport](measurereport.html): External identifier of the measure report to be returned
4631* [Medication](medication.html): Returns medications with this external identifier
4632* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
4633* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
4634* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
4635* [MedicationStatement](medicationstatement.html): Return statements with this external identifier
4636* [MolecularSequence](molecularsequence.html): The unique identity for a particular sequence
4637* [NutritionIntake](nutritionintake.html): Return statements with this external identifier
4638* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
4639* [Observation](observation.html): The unique id for a particular observation
4640* [Person](person.html): A person Identifier
4641* [Procedure](procedure.html): A unique identifier for a procedure
4642* [QuestionnaireResponse](questionnaireresponse.html): The unique identifier for the questionnaire response
4643* [RelatedPerson](relatedperson.html): An Identifier of the RelatedPerson
4644* [RequestOrchestration](requestorchestration.html): External identifiers for the request orchestration
4645* [ResearchSubject](researchsubject.html): Business Identifier for research subject in a study
4646* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
4647* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
4648* [Specimen](specimen.html): The unique identifier associated with the specimen
4649* [SupplyDelivery](supplydelivery.html): External identifier
4650* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
4651* [Task](task.html): Search for a task instance by its business identifier
4652* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
4653</b><br>
4654   * Type: <b>token</b><br>
4655   * Path: <b>Account.identifier | AdverseEvent.identifier | AllergyIntolerance.identifier | Appointment.identifier | AppointmentResponse.identifier | Basic.identifier | BodyStructure.identifier | CarePlan.identifier | CareTeam.identifier | ChargeItem.identifier | Claim.identifier | ClaimResponse.identifier | ClinicalImpression.identifier | Communication.identifier | CommunicationRequest.identifier | Composition.identifier | Condition.identifier | Consent.identifier | Contract.identifier | Coverage.identifier | CoverageEligibilityRequest.identifier | CoverageEligibilityResponse.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DeviceUsage.identifier | DiagnosticReport.identifier | DocumentReference.identifier | Encounter.identifier | EnrollmentRequest.identifier | EpisodeOfCare.identifier | ExplanationOfBenefit.identifier | FamilyMemberHistory.identifier | Flag.identifier | Goal.identifier | GuidanceResponse.identifier | ImagingSelection.identifier | ImagingStudy.identifier | Immunization.identifier | ImmunizationEvaluation.identifier | ImmunizationRecommendation.identifier | Invoice.identifier | List.identifier | MeasureReport.identifier | Medication.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | MolecularSequence.identifier | NutritionIntake.identifier | NutritionOrder.identifier | Observation.identifier | Person.identifier | Procedure.identifier | QuestionnaireResponse.identifier | RelatedPerson.identifier | RequestOrchestration.identifier | ResearchSubject.identifier | RiskAssessment.identifier | ServiceRequest.identifier | Specimen.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | Task.identifier | VisionPrescription.identifier</b><br>
4656   * </p>
4657   */
4658  @SearchParamDefinition(name="identifier", path="Account.identifier | AdverseEvent.identifier | AllergyIntolerance.identifier | Appointment.identifier | AppointmentResponse.identifier | Basic.identifier | BodyStructure.identifier | CarePlan.identifier | CareTeam.identifier | ChargeItem.identifier | Claim.identifier | ClaimResponse.identifier | ClinicalImpression.identifier | Communication.identifier | CommunicationRequest.identifier | Composition.identifier | Condition.identifier | Consent.identifier | Contract.identifier | Coverage.identifier | CoverageEligibilityRequest.identifier | CoverageEligibilityResponse.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DeviceUsage.identifier | DiagnosticReport.identifier | DocumentReference.identifier | Encounter.identifier | EnrollmentRequest.identifier | EpisodeOfCare.identifier | ExplanationOfBenefit.identifier | FamilyMemberHistory.identifier | Flag.identifier | Goal.identifier | GuidanceResponse.identifier | ImagingSelection.identifier | ImagingStudy.identifier | Immunization.identifier | ImmunizationEvaluation.identifier | ImmunizationRecommendation.identifier | Invoice.identifier | List.identifier | MeasureReport.identifier | Medication.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | MolecularSequence.identifier | NutritionIntake.identifier | NutritionOrder.identifier | Observation.identifier | Person.identifier | Procedure.identifier | QuestionnaireResponse.identifier | RelatedPerson.identifier | RequestOrchestration.identifier | ResearchSubject.identifier | RiskAssessment.identifier | ServiceRequest.identifier | Specimen.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | Task.identifier | VisionPrescription.identifier", description="Multiple Resources: \r\n\r\n* [Account](account.html): Account number\r\n* [AdverseEvent](adverseevent.html): Business identifier for the event\r\n* [AllergyIntolerance](allergyintolerance.html): External ids for this item\r\n* [Appointment](appointment.html): An Identifier of the Appointment\r\n* [AppointmentResponse](appointmentresponse.html): An Identifier in this appointment response\r\n* [Basic](basic.html): Business identifier\r\n* [BodyStructure](bodystructure.html): Bodystructure identifier\r\n* [CarePlan](careplan.html): External Ids for this plan\r\n* [CareTeam](careteam.html): External Ids for this team\r\n* [ChargeItem](chargeitem.html): Business Identifier for item\r\n* [Claim](claim.html): The primary identifier of the financial resource\r\n* [ClaimResponse](claimresponse.html): The identity of the ClaimResponse\r\n* [ClinicalImpression](clinicalimpression.html): Business identifier\r\n* [Communication](communication.html): Unique identifier\r\n* [CommunicationRequest](communicationrequest.html): Unique identifier\r\n* [Composition](composition.html): Version-independent identifier for the Composition\r\n* [Condition](condition.html): A unique identifier of the condition record\r\n* [Consent](consent.html): Identifier for this record (external references)\r\n* [Contract](contract.html): The identity of the contract\r\n* [Coverage](coverage.html): The primary identifier of the insured and the coverage\r\n* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The business identifier of the Eligibility\r\n* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The business identifier\r\n* [DetectedIssue](detectedissue.html): Unique id for the detected issue\r\n* [DeviceRequest](devicerequest.html): Business identifier for request/order\r\n* [DeviceUsage](deviceusage.html): Search by identifier\r\n* [DiagnosticReport](diagnosticreport.html): An identifier for the report\r\n* [DocumentReference](documentreference.html): Identifier of the attachment binary\r\n* [Encounter](encounter.html): Identifier(s) by which this encounter is known\r\n* [EnrollmentRequest](enrollmentrequest.html): The business identifier of the Enrollment\r\n* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare\r\n* [ExplanationOfBenefit](explanationofbenefit.html): The business identifier of the Explanation of Benefit\r\n* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier\r\n* [Flag](flag.html): Business identifier\r\n* [Goal](goal.html): External Ids for this goal\r\n* [GuidanceResponse](guidanceresponse.html): The identifier of the guidance response\r\n* [ImagingSelection](imagingselection.html): Identifiers for the imaging selection\r\n* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID\r\n* [Immunization](immunization.html): Business identifier\r\n* [ImmunizationEvaluation](immunizationevaluation.html): ID of the evaluation\r\n* [ImmunizationRecommendation](immunizationrecommendation.html): Business identifier\r\n* [Invoice](invoice.html): Business Identifier for item\r\n* [List](list.html): Business identifier\r\n* [MeasureReport](measurereport.html): External identifier of the measure report to be returned\r\n* [Medication](medication.html): Returns medications with this external identifier\r\n* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier\r\n* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier\r\n* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier\r\n* [MedicationStatement](medicationstatement.html): Return statements with this external identifier\r\n* [MolecularSequence](molecularsequence.html): The unique identity for a particular sequence\r\n* [NutritionIntake](nutritionintake.html): Return statements with this external identifier\r\n* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier\r\n* [Observation](observation.html): The unique id for a particular observation\r\n* [Person](person.html): A person Identifier\r\n* [Procedure](procedure.html): A unique identifier for a procedure\r\n* [QuestionnaireResponse](questionnaireresponse.html): The unique identifier for the questionnaire response\r\n* [RelatedPerson](relatedperson.html): An Identifier of the RelatedPerson\r\n* [RequestOrchestration](requestorchestration.html): External identifiers for the request orchestration\r\n* [ResearchSubject](researchsubject.html): Business Identifier for research subject in a study\r\n* [RiskAssessment](riskassessment.html): Unique identifier for the assessment\r\n* [ServiceRequest](servicerequest.html): Identifiers assigned to this order\r\n* [Specimen](specimen.html): The unique identifier associated with the specimen\r\n* [SupplyDelivery](supplydelivery.html): External identifier\r\n* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest\r\n* [Task](task.html): Search for a task instance by its business identifier\r\n* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier\r\n", type="token" )
4659  public static final String SP_IDENTIFIER = "identifier";
4660 /**
4661   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
4662   * <p>
4663   * Description: <b>Multiple Resources: 
4664
4665* [Account](account.html): Account number
4666* [AdverseEvent](adverseevent.html): Business identifier for the event
4667* [AllergyIntolerance](allergyintolerance.html): External ids for this item
4668* [Appointment](appointment.html): An Identifier of the Appointment
4669* [AppointmentResponse](appointmentresponse.html): An Identifier in this appointment response
4670* [Basic](basic.html): Business identifier
4671* [BodyStructure](bodystructure.html): Bodystructure identifier
4672* [CarePlan](careplan.html): External Ids for this plan
4673* [CareTeam](careteam.html): External Ids for this team
4674* [ChargeItem](chargeitem.html): Business Identifier for item
4675* [Claim](claim.html): The primary identifier of the financial resource
4676* [ClaimResponse](claimresponse.html): The identity of the ClaimResponse
4677* [ClinicalImpression](clinicalimpression.html): Business identifier
4678* [Communication](communication.html): Unique identifier
4679* [CommunicationRequest](communicationrequest.html): Unique identifier
4680* [Composition](composition.html): Version-independent identifier for the Composition
4681* [Condition](condition.html): A unique identifier of the condition record
4682* [Consent](consent.html): Identifier for this record (external references)
4683* [Contract](contract.html): The identity of the contract
4684* [Coverage](coverage.html): The primary identifier of the insured and the coverage
4685* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The business identifier of the Eligibility
4686* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The business identifier
4687* [DetectedIssue](detectedissue.html): Unique id for the detected issue
4688* [DeviceRequest](devicerequest.html): Business identifier for request/order
4689* [DeviceUsage](deviceusage.html): Search by identifier
4690* [DiagnosticReport](diagnosticreport.html): An identifier for the report
4691* [DocumentReference](documentreference.html): Identifier of the attachment binary
4692* [Encounter](encounter.html): Identifier(s) by which this encounter is known
4693* [EnrollmentRequest](enrollmentrequest.html): The business identifier of the Enrollment
4694* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
4695* [ExplanationOfBenefit](explanationofbenefit.html): The business identifier of the Explanation of Benefit
4696* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
4697* [Flag](flag.html): Business identifier
4698* [Goal](goal.html): External Ids for this goal
4699* [GuidanceResponse](guidanceresponse.html): The identifier of the guidance response
4700* [ImagingSelection](imagingselection.html): Identifiers for the imaging selection
4701* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID
4702* [Immunization](immunization.html): Business identifier
4703* [ImmunizationEvaluation](immunizationevaluation.html): ID of the evaluation
4704* [ImmunizationRecommendation](immunizationrecommendation.html): Business identifier
4705* [Invoice](invoice.html): Business Identifier for item
4706* [List](list.html): Business identifier
4707* [MeasureReport](measurereport.html): External identifier of the measure report to be returned
4708* [Medication](medication.html): Returns medications with this external identifier
4709* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
4710* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
4711* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
4712* [MedicationStatement](medicationstatement.html): Return statements with this external identifier
4713* [MolecularSequence](molecularsequence.html): The unique identity for a particular sequence
4714* [NutritionIntake](nutritionintake.html): Return statements with this external identifier
4715* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
4716* [Observation](observation.html): The unique id for a particular observation
4717* [Person](person.html): A person Identifier
4718* [Procedure](procedure.html): A unique identifier for a procedure
4719* [QuestionnaireResponse](questionnaireresponse.html): The unique identifier for the questionnaire response
4720* [RelatedPerson](relatedperson.html): An Identifier of the RelatedPerson
4721* [RequestOrchestration](requestorchestration.html): External identifiers for the request orchestration
4722* [ResearchSubject](researchsubject.html): Business Identifier for research subject in a study
4723* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
4724* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
4725* [Specimen](specimen.html): The unique identifier associated with the specimen
4726* [SupplyDelivery](supplydelivery.html): External identifier
4727* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
4728* [Task](task.html): Search for a task instance by its business identifier
4729* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
4730</b><br>
4731   * Type: <b>token</b><br>
4732   * Path: <b>Account.identifier | AdverseEvent.identifier | AllergyIntolerance.identifier | Appointment.identifier | AppointmentResponse.identifier | Basic.identifier | BodyStructure.identifier | CarePlan.identifier | CareTeam.identifier | ChargeItem.identifier | Claim.identifier | ClaimResponse.identifier | ClinicalImpression.identifier | Communication.identifier | CommunicationRequest.identifier | Composition.identifier | Condition.identifier | Consent.identifier | Contract.identifier | Coverage.identifier | CoverageEligibilityRequest.identifier | CoverageEligibilityResponse.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DeviceUsage.identifier | DiagnosticReport.identifier | DocumentReference.identifier | Encounter.identifier | EnrollmentRequest.identifier | EpisodeOfCare.identifier | ExplanationOfBenefit.identifier | FamilyMemberHistory.identifier | Flag.identifier | Goal.identifier | GuidanceResponse.identifier | ImagingSelection.identifier | ImagingStudy.identifier | Immunization.identifier | ImmunizationEvaluation.identifier | ImmunizationRecommendation.identifier | Invoice.identifier | List.identifier | MeasureReport.identifier | Medication.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | MolecularSequence.identifier | NutritionIntake.identifier | NutritionOrder.identifier | Observation.identifier | Person.identifier | Procedure.identifier | QuestionnaireResponse.identifier | RelatedPerson.identifier | RequestOrchestration.identifier | ResearchSubject.identifier | RiskAssessment.identifier | ServiceRequest.identifier | Specimen.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | Task.identifier | VisionPrescription.identifier</b><br>
4733   * </p>
4734   */
4735  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
4736
4737 /**
4738   * Search parameter: <b>patient</b>
4739   * <p>
4740   * Description: <b>Multiple Resources: 
4741
4742* [Account](account.html): The entity that caused the expenses
4743* [AdverseEvent](adverseevent.html): Subject impacted by event
4744* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
4745* [Appointment](appointment.html): One of the individuals of the appointment is this patient
4746* [AppointmentResponse](appointmentresponse.html): This Response is for this Patient
4747* [AuditEvent](auditevent.html): Where the activity involved patient data
4748* [Basic](basic.html): Identifies the focus of this resource
4749* [BodyStructure](bodystructure.html): Who this is about
4750* [CarePlan](careplan.html): Who the care plan is for
4751* [CareTeam](careteam.html): Who care team is for
4752* [ChargeItem](chargeitem.html): Individual service was done for/to
4753* [Claim](claim.html): Patient receiving the products or services
4754* [ClaimResponse](claimresponse.html): The subject of care
4755* [ClinicalImpression](clinicalimpression.html): Patient assessed
4756* [Communication](communication.html): Focus of message
4757* [CommunicationRequest](communicationrequest.html): Focus of message
4758* [Composition](composition.html): Who and/or what the composition is about
4759* [Condition](condition.html): Who has the condition?
4760* [Consent](consent.html): Who the consent applies to
4761* [Contract](contract.html): The identity of the subject of the contract (if a patient)
4762* [Coverage](coverage.html): Retrieve coverages for a patient
4763* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The reference to the patient
4764* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The reference to the patient
4765* [DetectedIssue](detectedissue.html): Associated patient
4766* [DeviceRequest](devicerequest.html): Individual the service is ordered for
4767* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device
4768* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
4769* [DocumentReference](documentreference.html): Who/what is the subject of the document
4770* [Encounter](encounter.html): The patient present at the encounter
4771* [EnrollmentRequest](enrollmentrequest.html): The party to be enrolled
4772* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
4773* [ExplanationOfBenefit](explanationofbenefit.html): The reference to the patient
4774* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
4775* [Flag](flag.html): The identity of a subject to list flags for
4776* [Goal](goal.html): Who this goal is intended for
4777* [GuidanceResponse](guidanceresponse.html): The identity of a patient to search for guidance response results
4778* [ImagingSelection](imagingselection.html): Who the study is about
4779* [ImagingStudy](imagingstudy.html): Who the study is about
4780* [Immunization](immunization.html): The patient for the vaccination record
4781* [ImmunizationEvaluation](immunizationevaluation.html): The patient being evaluated
4782* [ImmunizationRecommendation](immunizationrecommendation.html): Who this profile is for
4783* [Invoice](invoice.html): Recipient(s) of goods and services
4784* [List](list.html): If all resources have the same subject
4785* [MeasureReport](measurereport.html): The identity of a patient to search for individual measure report results for
4786* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
4787* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
4788* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
4789* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
4790* [MolecularSequence](molecularsequence.html): The subject that the sequence is about
4791* [NutritionIntake](nutritionintake.html): Returns statements for a specific patient.
4792* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement
4793* [Observation](observation.html): The subject that the observation is about (if patient)
4794* [Person](person.html): The Person links to this Patient
4795* [Procedure](procedure.html): Search by subject - a patient
4796* [Provenance](provenance.html): Where the activity involved patient data
4797* [QuestionnaireResponse](questionnaireresponse.html): The patient that is the subject of the questionnaire response
4798* [RelatedPerson](relatedperson.html): The patient this related person is related to
4799* [RequestOrchestration](requestorchestration.html): The identity of a patient to search for request orchestrations
4800* [ResearchSubject](researchsubject.html): Who or what is part of study
4801* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
4802* [ServiceRequest](servicerequest.html): Search by subject - a patient
4803* [Specimen](specimen.html): The patient the specimen comes from
4804* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
4805* [SupplyRequest](supplyrequest.html): The patient or subject for whom the supply is destined
4806* [Task](task.html): Search by patient
4807* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
4808</b><br>
4809   * Type: <b>reference</b><br>
4810   * Path: <b>Account.subject.where(resolve() is Patient) | AdverseEvent.subject.where(resolve() is Patient) | AllergyIntolerance.patient | Appointment.participant.actor.where(resolve() is Patient) | Appointment.subject.where(resolve() is Patient) | AppointmentResponse.actor.where(resolve() is Patient) | AuditEvent.patient | Basic.subject.where(resolve() is Patient) | BodyStructure.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ChargeItem.subject.where(resolve() is Patient) | Claim.patient | ClaimResponse.patient | ClinicalImpression.subject.where(resolve() is Patient) | Communication.subject.where(resolve() is Patient) | CommunicationRequest.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | Contract.subject.where(resolve() is Patient) | Coverage.beneficiary | CoverageEligibilityRequest.patient | CoverageEligibilityResponse.patient | DetectedIssue.subject.where(resolve() is Patient) | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EnrollmentRequest.candidate | EpisodeOfCare.patient | ExplanationOfBenefit.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | GuidanceResponse.subject.where(resolve() is Patient) | ImagingSelection.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | ImmunizationEvaluation.patient | ImmunizationRecommendation.patient | Invoice.subject.where(resolve() is Patient) | List.subject.where(resolve() is Patient) | MeasureReport.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | MolecularSequence.subject.where(resolve() is Patient) | NutritionIntake.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Person.link.target.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | Provenance.patient | QuestionnaireResponse.subject.where(resolve() is Patient) | RelatedPerson.patient | RequestOrchestration.subject.where(resolve() is Patient) | ResearchSubject.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | Specimen.subject.where(resolve() is Patient) | SupplyDelivery.patient | SupplyRequest.deliverFor | Task.for.where(resolve() is Patient) | VisionPrescription.patient</b><br>
4811   * </p>
4812   */
4813  @SearchParamDefinition(name="patient", path="Account.subject.where(resolve() is Patient) | AdverseEvent.subject.where(resolve() is Patient) | AllergyIntolerance.patient | Appointment.participant.actor.where(resolve() is Patient) | Appointment.subject.where(resolve() is Patient) | AppointmentResponse.actor.where(resolve() is Patient) | AuditEvent.patient | Basic.subject.where(resolve() is Patient) | BodyStructure.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ChargeItem.subject.where(resolve() is Patient) | Claim.patient | ClaimResponse.patient | ClinicalImpression.subject.where(resolve() is Patient) | Communication.subject.where(resolve() is Patient) | CommunicationRequest.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | Contract.subject.where(resolve() is Patient) | Coverage.beneficiary | CoverageEligibilityRequest.patient | CoverageEligibilityResponse.patient | DetectedIssue.subject.where(resolve() is Patient) | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EnrollmentRequest.candidate | EpisodeOfCare.patient | ExplanationOfBenefit.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | GuidanceResponse.subject.where(resolve() is Patient) | ImagingSelection.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | ImmunizationEvaluation.patient | ImmunizationRecommendation.patient | Invoice.subject.where(resolve() is Patient) | List.subject.where(resolve() is Patient) | MeasureReport.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | MolecularSequence.subject.where(resolve() is Patient) | NutritionIntake.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Person.link.target.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | Provenance.patient | QuestionnaireResponse.subject.where(resolve() is Patient) | RelatedPerson.patient | RequestOrchestration.subject.where(resolve() is Patient) | ResearchSubject.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | Specimen.subject.where(resolve() is Patient) | SupplyDelivery.patient | SupplyRequest.deliverFor | Task.for.where(resolve() is Patient) | VisionPrescription.patient", description="Multiple Resources: \r\n\r\n* [Account](account.html): The entity that caused the expenses\r\n* [AdverseEvent](adverseevent.html): Subject impacted by event\r\n* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for\r\n* [Appointment](appointment.html): One of the individuals of the appointment is this patient\r\n* [AppointmentResponse](appointmentresponse.html): This Response is for this Patient\r\n* [AuditEvent](auditevent.html): Where the activity involved patient data\r\n* [Basic](basic.html): Identifies the focus of this resource\r\n* [BodyStructure](bodystructure.html): Who this is about\r\n* [CarePlan](careplan.html): Who the care plan is for\r\n* [CareTeam](careteam.html): Who care team is for\r\n* [ChargeItem](chargeitem.html): Individual service was done for/to\r\n* [Claim](claim.html): Patient receiving the products or services\r\n* [ClaimResponse](claimresponse.html): The subject of care\r\n* [ClinicalImpression](clinicalimpression.html): Patient assessed\r\n* [Communication](communication.html): Focus of message\r\n* [CommunicationRequest](communicationrequest.html): Focus of message\r\n* [Composition](composition.html): Who and/or what the composition is about\r\n* [Condition](condition.html): Who has the condition?\r\n* [Consent](consent.html): Who the consent applies to\r\n* [Contract](contract.html): The identity of the subject of the contract (if a patient)\r\n* [Coverage](coverage.html): Retrieve coverages for a patient\r\n* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The reference to the patient\r\n* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The reference to the patient\r\n* [DetectedIssue](detectedissue.html): Associated patient\r\n* [DeviceRequest](devicerequest.html): Individual the service is ordered for\r\n* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device\r\n* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient\r\n* [DocumentReference](documentreference.html): Who/what is the subject of the document\r\n* [Encounter](encounter.html): The patient present at the encounter\r\n* [EnrollmentRequest](enrollmentrequest.html): The party to be enrolled\r\n* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care\r\n* [ExplanationOfBenefit](explanationofbenefit.html): The reference to the patient\r\n* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for\r\n* [Flag](flag.html): The identity of a subject to list flags for\r\n* [Goal](goal.html): Who this goal is intended for\r\n* [GuidanceResponse](guidanceresponse.html): The identity of a patient to search for guidance response results\r\n* [ImagingSelection](imagingselection.html): Who the study is about\r\n* [ImagingStudy](imagingstudy.html): Who the study is about\r\n* [Immunization](immunization.html): The patient for the vaccination record\r\n* [ImmunizationEvaluation](immunizationevaluation.html): The patient being evaluated\r\n* [ImmunizationRecommendation](immunizationrecommendation.html): Who this profile is for\r\n* [Invoice](invoice.html): Recipient(s) of goods and services\r\n* [List](list.html): If all resources have the same subject\r\n* [MeasureReport](measurereport.html): The identity of a patient to search for individual measure report results for\r\n* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for\r\n* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for\r\n* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient\r\n* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.\r\n* [MolecularSequence](molecularsequence.html): The subject that the sequence is about\r\n* [NutritionIntake](nutritionintake.html): Returns statements for a specific patient.\r\n* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement\r\n* [Observation](observation.html): The subject that the observation is about (if patient)\r\n* [Person](person.html): The Person links to this Patient\r\n* [Procedure](procedure.html): Search by subject - a patient\r\n* [Provenance](provenance.html): Where the activity involved patient data\r\n* [QuestionnaireResponse](questionnaireresponse.html): The patient that is the subject of the questionnaire response\r\n* [RelatedPerson](relatedperson.html): The patient this related person is related to\r\n* [RequestOrchestration](requestorchestration.html): The identity of a patient to search for request orchestrations\r\n* [ResearchSubject](researchsubject.html): Who or what is part of study\r\n* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?\r\n* [ServiceRequest](servicerequest.html): Search by subject - a patient\r\n* [Specimen](specimen.html): The patient the specimen comes from\r\n* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied\r\n* [SupplyRequest](supplyrequest.html): The patient or subject for whom the supply is destined\r\n* [Task](task.html): Search by patient\r\n* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for\r\n", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Patient.class } )
4814  public static final String SP_PATIENT = "patient";
4815 /**
4816   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
4817   * <p>
4818   * Description: <b>Multiple Resources: 
4819
4820* [Account](account.html): The entity that caused the expenses
4821* [AdverseEvent](adverseevent.html): Subject impacted by event
4822* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
4823* [Appointment](appointment.html): One of the individuals of the appointment is this patient
4824* [AppointmentResponse](appointmentresponse.html): This Response is for this Patient
4825* [AuditEvent](auditevent.html): Where the activity involved patient data
4826* [Basic](basic.html): Identifies the focus of this resource
4827* [BodyStructure](bodystructure.html): Who this is about
4828* [CarePlan](careplan.html): Who the care plan is for
4829* [CareTeam](careteam.html): Who care team is for
4830* [ChargeItem](chargeitem.html): Individual service was done for/to
4831* [Claim](claim.html): Patient receiving the products or services
4832* [ClaimResponse](claimresponse.html): The subject of care
4833* [ClinicalImpression](clinicalimpression.html): Patient assessed
4834* [Communication](communication.html): Focus of message
4835* [CommunicationRequest](communicationrequest.html): Focus of message
4836* [Composition](composition.html): Who and/or what the composition is about
4837* [Condition](condition.html): Who has the condition?
4838* [Consent](consent.html): Who the consent applies to
4839* [Contract](contract.html): The identity of the subject of the contract (if a patient)
4840* [Coverage](coverage.html): Retrieve coverages for a patient
4841* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The reference to the patient
4842* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The reference to the patient
4843* [DetectedIssue](detectedissue.html): Associated patient
4844* [DeviceRequest](devicerequest.html): Individual the service is ordered for
4845* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device
4846* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
4847* [DocumentReference](documentreference.html): Who/what is the subject of the document
4848* [Encounter](encounter.html): The patient present at the encounter
4849* [EnrollmentRequest](enrollmentrequest.html): The party to be enrolled
4850* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
4851* [ExplanationOfBenefit](explanationofbenefit.html): The reference to the patient
4852* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
4853* [Flag](flag.html): The identity of a subject to list flags for
4854* [Goal](goal.html): Who this goal is intended for
4855* [GuidanceResponse](guidanceresponse.html): The identity of a patient to search for guidance response results
4856* [ImagingSelection](imagingselection.html): Who the study is about
4857* [ImagingStudy](imagingstudy.html): Who the study is about
4858* [Immunization](immunization.html): The patient for the vaccination record
4859* [ImmunizationEvaluation](immunizationevaluation.html): The patient being evaluated
4860* [ImmunizationRecommendation](immunizationrecommendation.html): Who this profile is for
4861* [Invoice](invoice.html): Recipient(s) of goods and services
4862* [List](list.html): If all resources have the same subject
4863* [MeasureReport](measurereport.html): The identity of a patient to search for individual measure report results for
4864* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
4865* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
4866* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
4867* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
4868* [MolecularSequence](molecularsequence.html): The subject that the sequence is about
4869* [NutritionIntake](nutritionintake.html): Returns statements for a specific patient.
4870* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement
4871* [Observation](observation.html): The subject that the observation is about (if patient)
4872* [Person](person.html): The Person links to this Patient
4873* [Procedure](procedure.html): Search by subject - a patient
4874* [Provenance](provenance.html): Where the activity involved patient data
4875* [QuestionnaireResponse](questionnaireresponse.html): The patient that is the subject of the questionnaire response
4876* [RelatedPerson](relatedperson.html): The patient this related person is related to
4877* [RequestOrchestration](requestorchestration.html): The identity of a patient to search for request orchestrations
4878* [ResearchSubject](researchsubject.html): Who or what is part of study
4879* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
4880* [ServiceRequest](servicerequest.html): Search by subject - a patient
4881* [Specimen](specimen.html): The patient the specimen comes from
4882* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
4883* [SupplyRequest](supplyrequest.html): The patient or subject for whom the supply is destined
4884* [Task](task.html): Search by patient
4885* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
4886</b><br>
4887   * Type: <b>reference</b><br>
4888   * Path: <b>Account.subject.where(resolve() is Patient) | AdverseEvent.subject.where(resolve() is Patient) | AllergyIntolerance.patient | Appointment.participant.actor.where(resolve() is Patient) | Appointment.subject.where(resolve() is Patient) | AppointmentResponse.actor.where(resolve() is Patient) | AuditEvent.patient | Basic.subject.where(resolve() is Patient) | BodyStructure.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ChargeItem.subject.where(resolve() is Patient) | Claim.patient | ClaimResponse.patient | ClinicalImpression.subject.where(resolve() is Patient) | Communication.subject.where(resolve() is Patient) | CommunicationRequest.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | Contract.subject.where(resolve() is Patient) | Coverage.beneficiary | CoverageEligibilityRequest.patient | CoverageEligibilityResponse.patient | DetectedIssue.subject.where(resolve() is Patient) | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EnrollmentRequest.candidate | EpisodeOfCare.patient | ExplanationOfBenefit.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | GuidanceResponse.subject.where(resolve() is Patient) | ImagingSelection.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | ImmunizationEvaluation.patient | ImmunizationRecommendation.patient | Invoice.subject.where(resolve() is Patient) | List.subject.where(resolve() is Patient) | MeasureReport.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | MolecularSequence.subject.where(resolve() is Patient) | NutritionIntake.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Person.link.target.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | Provenance.patient | QuestionnaireResponse.subject.where(resolve() is Patient) | RelatedPerson.patient | RequestOrchestration.subject.where(resolve() is Patient) | ResearchSubject.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | Specimen.subject.where(resolve() is Patient) | SupplyDelivery.patient | SupplyRequest.deliverFor | Task.for.where(resolve() is Patient) | VisionPrescription.patient</b><br>
4889   * </p>
4890   */
4891  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
4892
4893/**
4894   * Constant for fluent queries to be used to add include statements. Specifies
4895   * the path value of "<b>MeasureReport:patient</b>".
4896   */
4897  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("MeasureReport:patient").toLocked();
4898
4899
4900}
4901