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