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 * Represents a defined collection of entities that may be discussed or acted upon collectively but which are not expected to act collectively, and are not formally or legally recognized; i.e. a collection of entities that isn't an Organization.
052 */
053@ResourceDef(name="Group", profile="http://hl7.org/fhir/StructureDefinition/Group")
054public class Group extends DomainResource {
055
056    public enum GroupMembershipBasis {
057        /**
058         * The Group.characteristics specified are both necessary and sufficient to determine membership. All entities that meet the criteria are considered to be members of the group, whether referenced by the group or not. If members are present, they are individuals that happen to be known as meeting the Group.characteristics. The list cannot be presumed to be complete.
059         */
060        DEFINITIONAL, 
061        /**
062         * The Group.characteristics are necessary but not sufficient to determine membership. Membership is determined by being listed as one of the Group.member.
063         */
064        ENUMERATED, 
065        /**
066         * added to help the parsers with the generic types
067         */
068        NULL;
069        public static GroupMembershipBasis fromCode(String codeString) throws FHIRException {
070            if (codeString == null || "".equals(codeString))
071                return null;
072        if ("definitional".equals(codeString))
073          return DEFINITIONAL;
074        if ("enumerated".equals(codeString))
075          return ENUMERATED;
076        if (Configuration.isAcceptInvalidEnums())
077          return null;
078        else
079          throw new FHIRException("Unknown GroupMembershipBasis code '"+codeString+"'");
080        }
081        public String toCode() {
082          switch (this) {
083            case DEFINITIONAL: return "definitional";
084            case ENUMERATED: return "enumerated";
085            case NULL: return null;
086            default: return "?";
087          }
088        }
089        public String getSystem() {
090          switch (this) {
091            case DEFINITIONAL: return "http://hl7.org/fhir/group-membership-basis";
092            case ENUMERATED: return "http://hl7.org/fhir/group-membership-basis";
093            case NULL: return null;
094            default: return "?";
095          }
096        }
097        public String getDefinition() {
098          switch (this) {
099            case DEFINITIONAL: return "The Group.characteristics specified are both necessary and sufficient to determine membership. All entities that meet the criteria are considered to be members of the group, whether referenced by the group or not. If members are present, they are individuals that happen to be known as meeting the Group.characteristics. The list cannot be presumed to be complete.";
100            case ENUMERATED: return "The Group.characteristics are necessary but not sufficient to determine membership. Membership is determined by being listed as one of the Group.member.";
101            case NULL: return null;
102            default: return "?";
103          }
104        }
105        public String getDisplay() {
106          switch (this) {
107            case DEFINITIONAL: return "Definitional";
108            case ENUMERATED: return "Enumerated";
109            case NULL: return null;
110            default: return "?";
111          }
112        }
113    }
114
115  public static class GroupMembershipBasisEnumFactory implements EnumFactory<GroupMembershipBasis> {
116    public GroupMembershipBasis fromCode(String codeString) throws IllegalArgumentException {
117      if (codeString == null || "".equals(codeString))
118            if (codeString == null || "".equals(codeString))
119                return null;
120        if ("definitional".equals(codeString))
121          return GroupMembershipBasis.DEFINITIONAL;
122        if ("enumerated".equals(codeString))
123          return GroupMembershipBasis.ENUMERATED;
124        throw new IllegalArgumentException("Unknown GroupMembershipBasis code '"+codeString+"'");
125        }
126        public Enumeration<GroupMembershipBasis> fromType(PrimitiveType<?> code) throws FHIRException {
127          if (code == null)
128            return null;
129          if (code.isEmpty())
130            return new Enumeration<GroupMembershipBasis>(this, GroupMembershipBasis.NULL, code);
131          String codeString = ((PrimitiveType) code).asStringValue();
132          if (codeString == null || "".equals(codeString))
133            return new Enumeration<GroupMembershipBasis>(this, GroupMembershipBasis.NULL, code);
134        if ("definitional".equals(codeString))
135          return new Enumeration<GroupMembershipBasis>(this, GroupMembershipBasis.DEFINITIONAL, code);
136        if ("enumerated".equals(codeString))
137          return new Enumeration<GroupMembershipBasis>(this, GroupMembershipBasis.ENUMERATED, code);
138        throw new FHIRException("Unknown GroupMembershipBasis code '"+codeString+"'");
139        }
140    public String toCode(GroupMembershipBasis code) {
141       if (code == GroupMembershipBasis.NULL)
142           return null;
143       if (code == GroupMembershipBasis.DEFINITIONAL)
144        return "definitional";
145      if (code == GroupMembershipBasis.ENUMERATED)
146        return "enumerated";
147      return "?";
148   }
149    public String toSystem(GroupMembershipBasis code) {
150      return code.getSystem();
151      }
152    }
153
154    public enum GroupType {
155        /**
156         * Group contains \"person\" Patient resources.
157         */
158        PERSON, 
159        /**
160         * Group contains \"animal\" Patient resources.
161         */
162        ANIMAL, 
163        /**
164         * Group contains healthcare practitioner resources (Practitioner or PractitionerRole).
165         */
166        PRACTITIONER, 
167        /**
168         * Group contains Device resources.
169         */
170        DEVICE, 
171        /**
172         * Group contains CareTeam resources.
173         */
174        CARETEAM, 
175        /**
176         * Group contains HealthcareService resources.
177         */
178        HEALTHCARESERVICE, 
179        /**
180         * Group contains Location resources.
181         */
182        LOCATION, 
183        /**
184         * Group contains Organization resources.
185         */
186        ORGANIZATION, 
187        /**
188         * Group contains RelatedPerson resources.
189         */
190        RELATEDPERSON, 
191        /**
192         * Group contains Specimen resources.
193         */
194        SPECIMEN, 
195        /**
196         * added to help the parsers with the generic types
197         */
198        NULL;
199        public static GroupType fromCode(String codeString) throws FHIRException {
200            if (codeString == null || "".equals(codeString))
201                return null;
202        if ("person".equals(codeString))
203          return PERSON;
204        if ("animal".equals(codeString))
205          return ANIMAL;
206        if ("practitioner".equals(codeString))
207          return PRACTITIONER;
208        if ("device".equals(codeString))
209          return DEVICE;
210        if ("careteam".equals(codeString))
211          return CARETEAM;
212        if ("healthcareservice".equals(codeString))
213          return HEALTHCARESERVICE;
214        if ("location".equals(codeString))
215          return LOCATION;
216        if ("organization".equals(codeString))
217          return ORGANIZATION;
218        if ("relatedperson".equals(codeString))
219          return RELATEDPERSON;
220        if ("specimen".equals(codeString))
221          return SPECIMEN;
222        if (Configuration.isAcceptInvalidEnums())
223          return null;
224        else
225          throw new FHIRException("Unknown GroupType code '"+codeString+"'");
226        }
227        public String toCode() {
228          switch (this) {
229            case PERSON: return "person";
230            case ANIMAL: return "animal";
231            case PRACTITIONER: return "practitioner";
232            case DEVICE: return "device";
233            case CARETEAM: return "careteam";
234            case HEALTHCARESERVICE: return "healthcareservice";
235            case LOCATION: return "location";
236            case ORGANIZATION: return "organization";
237            case RELATEDPERSON: return "relatedperson";
238            case SPECIMEN: return "specimen";
239            case NULL: return null;
240            default: return "?";
241          }
242        }
243        public String getSystem() {
244          switch (this) {
245            case PERSON: return "http://hl7.org/fhir/group-type";
246            case ANIMAL: return "http://hl7.org/fhir/group-type";
247            case PRACTITIONER: return "http://hl7.org/fhir/group-type";
248            case DEVICE: return "http://hl7.org/fhir/group-type";
249            case CARETEAM: return "http://hl7.org/fhir/group-type";
250            case HEALTHCARESERVICE: return "http://hl7.org/fhir/group-type";
251            case LOCATION: return "http://hl7.org/fhir/group-type";
252            case ORGANIZATION: return "http://hl7.org/fhir/group-type";
253            case RELATEDPERSON: return "http://hl7.org/fhir/group-type";
254            case SPECIMEN: return "http://hl7.org/fhir/group-type";
255            case NULL: return null;
256            default: return "?";
257          }
258        }
259        public String getDefinition() {
260          switch (this) {
261            case PERSON: return "Group contains \"person\" Patient resources.";
262            case ANIMAL: return "Group contains \"animal\" Patient resources.";
263            case PRACTITIONER: return "Group contains healthcare practitioner resources (Practitioner or PractitionerRole).";
264            case DEVICE: return "Group contains Device resources.";
265            case CARETEAM: return "Group contains CareTeam resources.";
266            case HEALTHCARESERVICE: return "Group contains HealthcareService resources.";
267            case LOCATION: return "Group contains Location resources.";
268            case ORGANIZATION: return "Group contains Organization resources.";
269            case RELATEDPERSON: return "Group contains RelatedPerson resources.";
270            case SPECIMEN: return "Group contains Specimen resources.";
271            case NULL: return null;
272            default: return "?";
273          }
274        }
275        public String getDisplay() {
276          switch (this) {
277            case PERSON: return "Person";
278            case ANIMAL: return "Animal";
279            case PRACTITIONER: return "Practitioner";
280            case DEVICE: return "Device";
281            case CARETEAM: return "CareTeam";
282            case HEALTHCARESERVICE: return "HealthcareService";
283            case LOCATION: return "Location";
284            case ORGANIZATION: return "Organization";
285            case RELATEDPERSON: return "RelatedPerson";
286            case SPECIMEN: return "Specimen";
287            case NULL: return null;
288            default: return "?";
289          }
290        }
291    }
292
293  public static class GroupTypeEnumFactory implements EnumFactory<GroupType> {
294    public GroupType fromCode(String codeString) throws IllegalArgumentException {
295      if (codeString == null || "".equals(codeString))
296            if (codeString == null || "".equals(codeString))
297                return null;
298        if ("person".equals(codeString))
299          return GroupType.PERSON;
300        if ("animal".equals(codeString))
301          return GroupType.ANIMAL;
302        if ("practitioner".equals(codeString))
303          return GroupType.PRACTITIONER;
304        if ("device".equals(codeString))
305          return GroupType.DEVICE;
306        if ("careteam".equals(codeString))
307          return GroupType.CARETEAM;
308        if ("healthcareservice".equals(codeString))
309          return GroupType.HEALTHCARESERVICE;
310        if ("location".equals(codeString))
311          return GroupType.LOCATION;
312        if ("organization".equals(codeString))
313          return GroupType.ORGANIZATION;
314        if ("relatedperson".equals(codeString))
315          return GroupType.RELATEDPERSON;
316        if ("specimen".equals(codeString))
317          return GroupType.SPECIMEN;
318        throw new IllegalArgumentException("Unknown GroupType code '"+codeString+"'");
319        }
320        public Enumeration<GroupType> fromType(PrimitiveType<?> code) throws FHIRException {
321          if (code == null)
322            return null;
323          if (code.isEmpty())
324            return new Enumeration<GroupType>(this, GroupType.NULL, code);
325          String codeString = ((PrimitiveType) code).asStringValue();
326          if (codeString == null || "".equals(codeString))
327            return new Enumeration<GroupType>(this, GroupType.NULL, code);
328        if ("person".equals(codeString))
329          return new Enumeration<GroupType>(this, GroupType.PERSON, code);
330        if ("animal".equals(codeString))
331          return new Enumeration<GroupType>(this, GroupType.ANIMAL, code);
332        if ("practitioner".equals(codeString))
333          return new Enumeration<GroupType>(this, GroupType.PRACTITIONER, code);
334        if ("device".equals(codeString))
335          return new Enumeration<GroupType>(this, GroupType.DEVICE, code);
336        if ("careteam".equals(codeString))
337          return new Enumeration<GroupType>(this, GroupType.CARETEAM, code);
338        if ("healthcareservice".equals(codeString))
339          return new Enumeration<GroupType>(this, GroupType.HEALTHCARESERVICE, code);
340        if ("location".equals(codeString))
341          return new Enumeration<GroupType>(this, GroupType.LOCATION, code);
342        if ("organization".equals(codeString))
343          return new Enumeration<GroupType>(this, GroupType.ORGANIZATION, code);
344        if ("relatedperson".equals(codeString))
345          return new Enumeration<GroupType>(this, GroupType.RELATEDPERSON, code);
346        if ("specimen".equals(codeString))
347          return new Enumeration<GroupType>(this, GroupType.SPECIMEN, code);
348        throw new FHIRException("Unknown GroupType code '"+codeString+"'");
349        }
350    public String toCode(GroupType code) {
351       if (code == GroupType.NULL)
352           return null;
353       if (code == GroupType.PERSON)
354        return "person";
355      if (code == GroupType.ANIMAL)
356        return "animal";
357      if (code == GroupType.PRACTITIONER)
358        return "practitioner";
359      if (code == GroupType.DEVICE)
360        return "device";
361      if (code == GroupType.CARETEAM)
362        return "careteam";
363      if (code == GroupType.HEALTHCARESERVICE)
364        return "healthcareservice";
365      if (code == GroupType.LOCATION)
366        return "location";
367      if (code == GroupType.ORGANIZATION)
368        return "organization";
369      if (code == GroupType.RELATEDPERSON)
370        return "relatedperson";
371      if (code == GroupType.SPECIMEN)
372        return "specimen";
373      return "?";
374   }
375    public String toSystem(GroupType code) {
376      return code.getSystem();
377      }
378    }
379
380    @Block()
381    public static class GroupCharacteristicComponent extends BackboneElement implements IBaseBackboneElement {
382        /**
383         * A code that identifies the kind of trait being asserted.
384         */
385        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=true)
386        @Description(shortDefinition="Kind of characteristic", formalDefinition="A code that identifies the kind of trait being asserted." )
387        protected CodeableConcept code;
388
389        /**
390         * The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
391         */
392        @Child(name = "value", type = {CodeableConcept.class, BooleanType.class, Quantity.class, Range.class, Reference.class}, order=2, min=1, max=1, modifier=false, summary=true)
393        @Description(shortDefinition="Value held by characteristic", formalDefinition="The value of the trait that holds (or does not hold - see 'exclude') for members of the group." )
394        protected DataType value;
395
396        /**
397         * If true, indicates the characteristic is one that is NOT held by members of the group.
398         */
399        @Child(name = "exclude", type = {BooleanType.class}, order=3, min=1, max=1, modifier=false, summary=true)
400        @Description(shortDefinition="Group includes or excludes", formalDefinition="If true, indicates the characteristic is one that is NOT held by members of the group." )
401        protected BooleanType exclude;
402
403        /**
404         * The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.
405         */
406        @Child(name = "period", type = {Period.class}, order=4, min=0, max=1, modifier=false, summary=false)
407        @Description(shortDefinition="Period over which characteristic is tested", formalDefinition="The period over which the characteristic is tested; e.g. the patient had an operation during the month of June." )
408        protected Period period;
409
410        private static final long serialVersionUID = 279867823L;
411
412    /**
413     * Constructor
414     */
415      public GroupCharacteristicComponent() {
416        super();
417      }
418
419    /**
420     * Constructor
421     */
422      public GroupCharacteristicComponent(CodeableConcept code, DataType value, boolean exclude) {
423        super();
424        this.setCode(code);
425        this.setValue(value);
426        this.setExclude(exclude);
427      }
428
429        /**
430         * @return {@link #code} (A code that identifies the kind of trait being asserted.)
431         */
432        public CodeableConcept getCode() { 
433          if (this.code == null)
434            if (Configuration.errorOnAutoCreate())
435              throw new Error("Attempt to auto-create GroupCharacteristicComponent.code");
436            else if (Configuration.doAutoCreate())
437              this.code = new CodeableConcept(); // cc
438          return this.code;
439        }
440
441        public boolean hasCode() { 
442          return this.code != null && !this.code.isEmpty();
443        }
444
445        /**
446         * @param value {@link #code} (A code that identifies the kind of trait being asserted.)
447         */
448        public GroupCharacteristicComponent setCode(CodeableConcept value) { 
449          this.code = value;
450          return this;
451        }
452
453        /**
454         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
455         */
456        public DataType getValue() { 
457          return this.value;
458        }
459
460        /**
461         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
462         */
463        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
464          if (this.value == null)
465            this.value = new CodeableConcept();
466          if (!(this.value instanceof CodeableConcept))
467            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
468          return (CodeableConcept) this.value;
469        }
470
471        public boolean hasValueCodeableConcept() { 
472          return this != null && this.value instanceof CodeableConcept;
473        }
474
475        /**
476         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
477         */
478        public BooleanType getValueBooleanType() throws FHIRException { 
479          if (this.value == null)
480            this.value = new BooleanType();
481          if (!(this.value instanceof BooleanType))
482            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
483          return (BooleanType) this.value;
484        }
485
486        public boolean hasValueBooleanType() { 
487          return this != null && this.value instanceof BooleanType;
488        }
489
490        /**
491         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
492         */
493        public Quantity getValueQuantity() throws FHIRException { 
494          if (this.value == null)
495            this.value = new Quantity();
496          if (!(this.value instanceof Quantity))
497            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
498          return (Quantity) this.value;
499        }
500
501        public boolean hasValueQuantity() { 
502          return this != null && this.value instanceof Quantity;
503        }
504
505        /**
506         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
507         */
508        public Range getValueRange() throws FHIRException { 
509          if (this.value == null)
510            this.value = new Range();
511          if (!(this.value instanceof Range))
512            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
513          return (Range) this.value;
514        }
515
516        public boolean hasValueRange() { 
517          return this != null && this.value instanceof Range;
518        }
519
520        /**
521         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
522         */
523        public Reference getValueReference() throws FHIRException { 
524          if (this.value == null)
525            this.value = new Reference();
526          if (!(this.value instanceof Reference))
527            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
528          return (Reference) this.value;
529        }
530
531        public boolean hasValueReference() { 
532          return this != null && this.value instanceof Reference;
533        }
534
535        public boolean hasValue() { 
536          return this.value != null && !this.value.isEmpty();
537        }
538
539        /**
540         * @param value {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
541         */
542        public GroupCharacteristicComponent setValue(DataType value) { 
543          if (value != null && !(value instanceof CodeableConcept || value instanceof BooleanType || value instanceof Quantity || value instanceof Range || value instanceof Reference))
544            throw new FHIRException("Not the right type for Group.characteristic.value[x]: "+value.fhirType());
545          this.value = value;
546          return this;
547        }
548
549        /**
550         * @return {@link #exclude} (If true, indicates the characteristic is one that is NOT held by members of the group.). This is the underlying object with id, value and extensions. The accessor "getExclude" gives direct access to the value
551         */
552        public BooleanType getExcludeElement() { 
553          if (this.exclude == null)
554            if (Configuration.errorOnAutoCreate())
555              throw new Error("Attempt to auto-create GroupCharacteristicComponent.exclude");
556            else if (Configuration.doAutoCreate())
557              this.exclude = new BooleanType(); // bb
558          return this.exclude;
559        }
560
561        public boolean hasExcludeElement() { 
562          return this.exclude != null && !this.exclude.isEmpty();
563        }
564
565        public boolean hasExclude() { 
566          return this.exclude != null && !this.exclude.isEmpty();
567        }
568
569        /**
570         * @param value {@link #exclude} (If true, indicates the characteristic is one that is NOT held by members of the group.). This is the underlying object with id, value and extensions. The accessor "getExclude" gives direct access to the value
571         */
572        public GroupCharacteristicComponent setExcludeElement(BooleanType value) { 
573          this.exclude = value;
574          return this;
575        }
576
577        /**
578         * @return If true, indicates the characteristic is one that is NOT held by members of the group.
579         */
580        public boolean getExclude() { 
581          return this.exclude == null || this.exclude.isEmpty() ? false : this.exclude.getValue();
582        }
583
584        /**
585         * @param value If true, indicates the characteristic is one that is NOT held by members of the group.
586         */
587        public GroupCharacteristicComponent setExclude(boolean value) { 
588            if (this.exclude == null)
589              this.exclude = new BooleanType();
590            this.exclude.setValue(value);
591          return this;
592        }
593
594        /**
595         * @return {@link #period} (The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.)
596         */
597        public Period getPeriod() { 
598          if (this.period == null)
599            if (Configuration.errorOnAutoCreate())
600              throw new Error("Attempt to auto-create GroupCharacteristicComponent.period");
601            else if (Configuration.doAutoCreate())
602              this.period = new Period(); // cc
603          return this.period;
604        }
605
606        public boolean hasPeriod() { 
607          return this.period != null && !this.period.isEmpty();
608        }
609
610        /**
611         * @param value {@link #period} (The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.)
612         */
613        public GroupCharacteristicComponent setPeriod(Period value) { 
614          this.period = value;
615          return this;
616        }
617
618        protected void listChildren(List<Property> children) {
619          super.listChildren(children);
620          children.add(new Property("code", "CodeableConcept", "A code that identifies the kind of trait being asserted.", 0, 1, code));
621          children.add(new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value));
622          children.add(new Property("exclude", "boolean", "If true, indicates the characteristic is one that is NOT held by members of the group.", 0, 1, exclude));
623          children.add(new Property("period", "Period", "The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.", 0, 1, period));
624        }
625
626        @Override
627        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
628          switch (_hash) {
629          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A code that identifies the kind of trait being asserted.", 0, 1, code);
630          case -1410166417: /*value[x]*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
631          case 111972721: /*value*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range|Reference", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
632          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
633          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
634          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
635          case 2030761548: /*valueRange*/  return new Property("value[x]", "Range", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
636          case 1755241690: /*valueReference*/  return new Property("value[x]", "Reference", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
637          case -1321148966: /*exclude*/  return new Property("exclude", "boolean", "If true, indicates the characteristic is one that is NOT held by members of the group.", 0, 1, exclude);
638          case -991726143: /*period*/  return new Property("period", "Period", "The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.", 0, 1, period);
639          default: return super.getNamedProperty(_hash, _name, _checkValid);
640          }
641
642        }
643
644      @Override
645      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
646        switch (hash) {
647        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
648        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
649        case -1321148966: /*exclude*/ return this.exclude == null ? new Base[0] : new Base[] {this.exclude}; // BooleanType
650        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
651        default: return super.getProperty(hash, name, checkValid);
652        }
653
654      }
655
656      @Override
657      public Base setProperty(int hash, String name, Base value) throws FHIRException {
658        switch (hash) {
659        case 3059181: // code
660          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
661          return value;
662        case 111972721: // value
663          this.value = TypeConvertor.castToType(value); // DataType
664          return value;
665        case -1321148966: // exclude
666          this.exclude = TypeConvertor.castToBoolean(value); // BooleanType
667          return value;
668        case -991726143: // period
669          this.period = TypeConvertor.castToPeriod(value); // Period
670          return value;
671        default: return super.setProperty(hash, name, value);
672        }
673
674      }
675
676      @Override
677      public Base setProperty(String name, Base value) throws FHIRException {
678        if (name.equals("code")) {
679          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
680        } else if (name.equals("value[x]")) {
681          this.value = TypeConvertor.castToType(value); // DataType
682        } else if (name.equals("exclude")) {
683          this.exclude = TypeConvertor.castToBoolean(value); // BooleanType
684        } else if (name.equals("period")) {
685          this.period = TypeConvertor.castToPeriod(value); // Period
686        } else
687          return super.setProperty(name, value);
688        return value;
689      }
690
691  @Override
692  public void removeChild(String name, Base value) throws FHIRException {
693        if (name.equals("code")) {
694          this.code = null;
695        } else if (name.equals("value[x]")) {
696          this.value = null;
697        } else if (name.equals("exclude")) {
698          this.exclude = null;
699        } else if (name.equals("period")) {
700          this.period = null;
701        } else
702          super.removeChild(name, value);
703        
704      }
705
706      @Override
707      public Base makeProperty(int hash, String name) throws FHIRException {
708        switch (hash) {
709        case 3059181:  return getCode();
710        case -1410166417:  return getValue();
711        case 111972721:  return getValue();
712        case -1321148966:  return getExcludeElement();
713        case -991726143:  return getPeriod();
714        default: return super.makeProperty(hash, name);
715        }
716
717      }
718
719      @Override
720      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
721        switch (hash) {
722        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
723        case 111972721: /*value*/ return new String[] {"CodeableConcept", "boolean", "Quantity", "Range", "Reference"};
724        case -1321148966: /*exclude*/ return new String[] {"boolean"};
725        case -991726143: /*period*/ return new String[] {"Period"};
726        default: return super.getTypesForProperty(hash, name);
727        }
728
729      }
730
731      @Override
732      public Base addChild(String name) throws FHIRException {
733        if (name.equals("code")) {
734          this.code = new CodeableConcept();
735          return this.code;
736        }
737        else if (name.equals("valueCodeableConcept")) {
738          this.value = new CodeableConcept();
739          return this.value;
740        }
741        else if (name.equals("valueBoolean")) {
742          this.value = new BooleanType();
743          return this.value;
744        }
745        else if (name.equals("valueQuantity")) {
746          this.value = new Quantity();
747          return this.value;
748        }
749        else if (name.equals("valueRange")) {
750          this.value = new Range();
751          return this.value;
752        }
753        else if (name.equals("valueReference")) {
754          this.value = new Reference();
755          return this.value;
756        }
757        else if (name.equals("exclude")) {
758          throw new FHIRException("Cannot call addChild on a singleton property Group.characteristic.exclude");
759        }
760        else if (name.equals("period")) {
761          this.period = new Period();
762          return this.period;
763        }
764        else
765          return super.addChild(name);
766      }
767
768      public GroupCharacteristicComponent copy() {
769        GroupCharacteristicComponent dst = new GroupCharacteristicComponent();
770        copyValues(dst);
771        return dst;
772      }
773
774      public void copyValues(GroupCharacteristicComponent dst) {
775        super.copyValues(dst);
776        dst.code = code == null ? null : code.copy();
777        dst.value = value == null ? null : value.copy();
778        dst.exclude = exclude == null ? null : exclude.copy();
779        dst.period = period == null ? null : period.copy();
780      }
781
782      @Override
783      public boolean equalsDeep(Base other_) {
784        if (!super.equalsDeep(other_))
785          return false;
786        if (!(other_ instanceof GroupCharacteristicComponent))
787          return false;
788        GroupCharacteristicComponent o = (GroupCharacteristicComponent) other_;
789        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true) && compareDeep(exclude, o.exclude, true)
790           && compareDeep(period, o.period, true);
791      }
792
793      @Override
794      public boolean equalsShallow(Base other_) {
795        if (!super.equalsShallow(other_))
796          return false;
797        if (!(other_ instanceof GroupCharacteristicComponent))
798          return false;
799        GroupCharacteristicComponent o = (GroupCharacteristicComponent) other_;
800        return compareValues(exclude, o.exclude, true);
801      }
802
803      public boolean isEmpty() {
804        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value, exclude, period
805          );
806      }
807
808  public String fhirType() {
809    return "Group.characteristic";
810
811  }
812
813  }
814
815    @Block()
816    public static class GroupMemberComponent extends BackboneElement implements IBaseBackboneElement {
817        /**
818         * A reference to the entity that is a member of the group. Must be consistent with Group.type. If the entity is another group, then the type must be the same.
819         */
820        @Child(name = "entity", type = {CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class, Specimen.class}, order=1, min=1, max=1, modifier=false, summary=false)
821        @Description(shortDefinition="Reference to the group member", formalDefinition="A reference to the entity that is a member of the group. Must be consistent with Group.type. If the entity is another group, then the type must be the same." )
822        protected Reference entity;
823
824        /**
825         * The period that the member was in the group, if known.
826         */
827        @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
828        @Description(shortDefinition="Period member belonged to the group", formalDefinition="The period that the member was in the group, if known." )
829        protected Period period;
830
831        /**
832         * A flag to indicate that the member is no longer in the group, but previously may have been a member.
833         */
834        @Child(name = "inactive", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
835        @Description(shortDefinition="If member is no longer in group", formalDefinition="A flag to indicate that the member is no longer in the group, but previously may have been a member." )
836        protected BooleanType inactive;
837
838        private static final long serialVersionUID = -1206153083L;
839
840    /**
841     * Constructor
842     */
843      public GroupMemberComponent() {
844        super();
845      }
846
847    /**
848     * Constructor
849     */
850      public GroupMemberComponent(Reference entity) {
851        super();
852        this.setEntity(entity);
853      }
854
855        /**
856         * @return {@link #entity} (A reference to the entity that is a member of the group. Must be consistent with Group.type. If the entity is another group, then the type must be the same.)
857         */
858        public Reference getEntity() { 
859          if (this.entity == null)
860            if (Configuration.errorOnAutoCreate())
861              throw new Error("Attempt to auto-create GroupMemberComponent.entity");
862            else if (Configuration.doAutoCreate())
863              this.entity = new Reference(); // cc
864          return this.entity;
865        }
866
867        public boolean hasEntity() { 
868          return this.entity != null && !this.entity.isEmpty();
869        }
870
871        /**
872         * @param value {@link #entity} (A reference to the entity that is a member of the group. Must be consistent with Group.type. If the entity is another group, then the type must be the same.)
873         */
874        public GroupMemberComponent setEntity(Reference value) { 
875          this.entity = value;
876          return this;
877        }
878
879        /**
880         * @return {@link #period} (The period that the member was in the group, if known.)
881         */
882        public Period getPeriod() { 
883          if (this.period == null)
884            if (Configuration.errorOnAutoCreate())
885              throw new Error("Attempt to auto-create GroupMemberComponent.period");
886            else if (Configuration.doAutoCreate())
887              this.period = new Period(); // cc
888          return this.period;
889        }
890
891        public boolean hasPeriod() { 
892          return this.period != null && !this.period.isEmpty();
893        }
894
895        /**
896         * @param value {@link #period} (The period that the member was in the group, if known.)
897         */
898        public GroupMemberComponent setPeriod(Period value) { 
899          this.period = value;
900          return this;
901        }
902
903        /**
904         * @return {@link #inactive} (A flag to indicate that the member is no longer in the group, but previously may have been a member.). This is the underlying object with id, value and extensions. The accessor "getInactive" gives direct access to the value
905         */
906        public BooleanType getInactiveElement() { 
907          if (this.inactive == null)
908            if (Configuration.errorOnAutoCreate())
909              throw new Error("Attempt to auto-create GroupMemberComponent.inactive");
910            else if (Configuration.doAutoCreate())
911              this.inactive = new BooleanType(); // bb
912          return this.inactive;
913        }
914
915        public boolean hasInactiveElement() { 
916          return this.inactive != null && !this.inactive.isEmpty();
917        }
918
919        public boolean hasInactive() { 
920          return this.inactive != null && !this.inactive.isEmpty();
921        }
922
923        /**
924         * @param value {@link #inactive} (A flag to indicate that the member is no longer in the group, but previously may have been a member.). This is the underlying object with id, value and extensions. The accessor "getInactive" gives direct access to the value
925         */
926        public GroupMemberComponent setInactiveElement(BooleanType value) { 
927          this.inactive = value;
928          return this;
929        }
930
931        /**
932         * @return A flag to indicate that the member is no longer in the group, but previously may have been a member.
933         */
934        public boolean getInactive() { 
935          return this.inactive == null || this.inactive.isEmpty() ? false : this.inactive.getValue();
936        }
937
938        /**
939         * @param value A flag to indicate that the member is no longer in the group, but previously may have been a member.
940         */
941        public GroupMemberComponent setInactive(boolean value) { 
942            if (this.inactive == null)
943              this.inactive = new BooleanType();
944            this.inactive.setValue(value);
945          return this;
946        }
947
948        protected void listChildren(List<Property> children) {
949          super.listChildren(children);
950          children.add(new Property("entity", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson|Specimen)", "A reference to the entity that is a member of the group. Must be consistent with Group.type. If the entity is another group, then the type must be the same.", 0, 1, entity));
951          children.add(new Property("period", "Period", "The period that the member was in the group, if known.", 0, 1, period));
952          children.add(new Property("inactive", "boolean", "A flag to indicate that the member is no longer in the group, but previously may have been a member.", 0, 1, inactive));
953        }
954
955        @Override
956        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
957          switch (_hash) {
958          case -1298275357: /*entity*/  return new Property("entity", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson|Specimen)", "A reference to the entity that is a member of the group. Must be consistent with Group.type. If the entity is another group, then the type must be the same.", 0, 1, entity);
959          case -991726143: /*period*/  return new Property("period", "Period", "The period that the member was in the group, if known.", 0, 1, period);
960          case 24665195: /*inactive*/  return new Property("inactive", "boolean", "A flag to indicate that the member is no longer in the group, but previously may have been a member.", 0, 1, inactive);
961          default: return super.getNamedProperty(_hash, _name, _checkValid);
962          }
963
964        }
965
966      @Override
967      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
968        switch (hash) {
969        case -1298275357: /*entity*/ return this.entity == null ? new Base[0] : new Base[] {this.entity}; // Reference
970        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
971        case 24665195: /*inactive*/ return this.inactive == null ? new Base[0] : new Base[] {this.inactive}; // BooleanType
972        default: return super.getProperty(hash, name, checkValid);
973        }
974
975      }
976
977      @Override
978      public Base setProperty(int hash, String name, Base value) throws FHIRException {
979        switch (hash) {
980        case -1298275357: // entity
981          this.entity = TypeConvertor.castToReference(value); // Reference
982          return value;
983        case -991726143: // period
984          this.period = TypeConvertor.castToPeriod(value); // Period
985          return value;
986        case 24665195: // inactive
987          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
988          return value;
989        default: return super.setProperty(hash, name, value);
990        }
991
992      }
993
994      @Override
995      public Base setProperty(String name, Base value) throws FHIRException {
996        if (name.equals("entity")) {
997          this.entity = TypeConvertor.castToReference(value); // Reference
998        } else if (name.equals("period")) {
999          this.period = TypeConvertor.castToPeriod(value); // Period
1000        } else if (name.equals("inactive")) {
1001          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
1002        } else
1003          return super.setProperty(name, value);
1004        return value;
1005      }
1006
1007  @Override
1008  public void removeChild(String name, Base value) throws FHIRException {
1009        if (name.equals("entity")) {
1010          this.entity = null;
1011        } else if (name.equals("period")) {
1012          this.period = null;
1013        } else if (name.equals("inactive")) {
1014          this.inactive = null;
1015        } else
1016          super.removeChild(name, value);
1017        
1018      }
1019
1020      @Override
1021      public Base makeProperty(int hash, String name) throws FHIRException {
1022        switch (hash) {
1023        case -1298275357:  return getEntity();
1024        case -991726143:  return getPeriod();
1025        case 24665195:  return getInactiveElement();
1026        default: return super.makeProperty(hash, name);
1027        }
1028
1029      }
1030
1031      @Override
1032      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1033        switch (hash) {
1034        case -1298275357: /*entity*/ return new String[] {"Reference"};
1035        case -991726143: /*period*/ return new String[] {"Period"};
1036        case 24665195: /*inactive*/ return new String[] {"boolean"};
1037        default: return super.getTypesForProperty(hash, name);
1038        }
1039
1040      }
1041
1042      @Override
1043      public Base addChild(String name) throws FHIRException {
1044        if (name.equals("entity")) {
1045          this.entity = new Reference();
1046          return this.entity;
1047        }
1048        else if (name.equals("period")) {
1049          this.period = new Period();
1050          return this.period;
1051        }
1052        else if (name.equals("inactive")) {
1053          throw new FHIRException("Cannot call addChild on a singleton property Group.member.inactive");
1054        }
1055        else
1056          return super.addChild(name);
1057      }
1058
1059      public GroupMemberComponent copy() {
1060        GroupMemberComponent dst = new GroupMemberComponent();
1061        copyValues(dst);
1062        return dst;
1063      }
1064
1065      public void copyValues(GroupMemberComponent dst) {
1066        super.copyValues(dst);
1067        dst.entity = entity == null ? null : entity.copy();
1068        dst.period = period == null ? null : period.copy();
1069        dst.inactive = inactive == null ? null : inactive.copy();
1070      }
1071
1072      @Override
1073      public boolean equalsDeep(Base other_) {
1074        if (!super.equalsDeep(other_))
1075          return false;
1076        if (!(other_ instanceof GroupMemberComponent))
1077          return false;
1078        GroupMemberComponent o = (GroupMemberComponent) other_;
1079        return compareDeep(entity, o.entity, true) && compareDeep(period, o.period, true) && compareDeep(inactive, o.inactive, true)
1080          ;
1081      }
1082
1083      @Override
1084      public boolean equalsShallow(Base other_) {
1085        if (!super.equalsShallow(other_))
1086          return false;
1087        if (!(other_ instanceof GroupMemberComponent))
1088          return false;
1089        GroupMemberComponent o = (GroupMemberComponent) other_;
1090        return compareValues(inactive, o.inactive, true);
1091      }
1092
1093      public boolean isEmpty() {
1094        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(entity, period, inactive
1095          );
1096      }
1097
1098  public String fhirType() {
1099    return "Group.member";
1100
1101  }
1102
1103  }
1104
1105    /**
1106     * Business identifiers assigned to this participant by one of the applications involved.  These identifiers remain constant as the resource is updated and propagates from server to server.
1107     */
1108    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1109    @Description(shortDefinition="Business Identifier for this Group", formalDefinition="Business identifiers assigned to this participant by one of the applications involved.  These identifiers remain constant as the resource is updated and propagates from server to server." )
1110    protected List<Identifier> identifier;
1111
1112    /**
1113     * Indicates whether the record for the group is available for use or is merely being retained for historical purposes.
1114     */
1115    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=true, summary=true)
1116    @Description(shortDefinition="Whether this group's record is in active use", formalDefinition="Indicates whether the record for the group is available for use or is merely being retained for historical purposes." )
1117    protected BooleanType active;
1118
1119    /**
1120     * Identifies the broad classification of the kind of resources the group includes.
1121     */
1122    @Child(name = "type", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=true)
1123    @Description(shortDefinition="person | animal | practitioner | device | careteam | healthcareservice | location | organization | relatedperson | specimen", formalDefinition="Identifies the broad classification of the kind of resources the group includes." )
1124    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/group-type")
1125    protected Enumeration<GroupType> type;
1126
1127    /**
1128     * Basis for membership in the Group:
1129
1130* 'definitional': The Group.characteristics specified are both necessary and sufficient to determine membership. All entities that meet the criteria are considered to be members of the group, whether referenced by the group or not. If members are present, they are individuals that happen to be known as meeting the Group.characteristics. The list cannot be presumed to be complete.
1131* 'enumerated': The Group.characteristics are necessary but not sufficient to determine membership. Membership is determined by being listed as one of the Group.member.
1132     */
1133    @Child(name = "membership", type = {CodeType.class}, order=3, min=1, max=1, modifier=false, summary=true)
1134    @Description(shortDefinition="definitional | enumerated", formalDefinition="Basis for membership in the Group:\n\n* 'definitional': The Group.characteristics specified are both necessary and sufficient to determine membership. All entities that meet the criteria are considered to be members of the group, whether referenced by the group or not. If members are present, they are individuals that happen to be known as meeting the Group.characteristics. The list cannot be presumed to be complete.\n* 'enumerated': The Group.characteristics are necessary but not sufficient to determine membership. Membership is determined by being listed as one of the Group.member." )
1135    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/group-membership-basis")
1136    protected Enumeration<GroupMembershipBasis> membership;
1137
1138    /**
1139     * Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.
1140     */
1141    @Child(name = "code", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=true)
1142    @Description(shortDefinition="Kind of Group members", formalDefinition="Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc." )
1143    protected CodeableConcept code;
1144
1145    /**
1146     * A label assigned to the group for human identification and communication.
1147     */
1148    @Child(name = "name", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
1149    @Description(shortDefinition="Label for Group", formalDefinition="A label assigned to the group for human identification and communication." )
1150    protected StringType name;
1151
1152    /**
1153     * Explanation of what the group represents and how it is intended to be used.
1154     */
1155    @Child(name = "description", type = {MarkdownType.class}, order=6, min=0, max=1, modifier=false, summary=false)
1156    @Description(shortDefinition="Natural language description of the group", formalDefinition="Explanation of what the group represents and how it is intended to be used." )
1157    protected MarkdownType description;
1158
1159    /**
1160     * A count of the number of resource instances that are part of the group.
1161     */
1162    @Child(name = "quantity", type = {UnsignedIntType.class}, order=7, min=0, max=1, modifier=false, summary=true)
1163    @Description(shortDefinition="Number of members", formalDefinition="A count of the number of resource instances that are part of the group." )
1164    protected UnsignedIntType quantity;
1165
1166    /**
1167     * Entity responsible for defining and maintaining Group characteristics and/or registered members.
1168     */
1169    @Child(name = "managingEntity", type = {Organization.class, RelatedPerson.class, Practitioner.class, PractitionerRole.class}, order=8, min=0, max=1, modifier=false, summary=true)
1170    @Description(shortDefinition="Entity that is the custodian of the Group's definition", formalDefinition="Entity responsible for defining and maintaining Group characteristics and/or registered members." )
1171    protected Reference managingEntity;
1172
1173    /**
1174     * Identifies traits whose presence r absence is shared by members of the group.
1175     */
1176    @Child(name = "characteristic", type = {}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1177    @Description(shortDefinition="Include / Exclude group members by Trait", formalDefinition="Identifies traits whose presence r absence is shared by members of the group." )
1178    protected List<GroupCharacteristicComponent> characteristic;
1179
1180    /**
1181     * Identifies the resource instances that are members of the group.
1182     */
1183    @Child(name = "member", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1184    @Description(shortDefinition="Who or what is in group", formalDefinition="Identifies the resource instances that are members of the group." )
1185    protected List<GroupMemberComponent> member;
1186
1187    private static final long serialVersionUID = -39542514L;
1188
1189  /**
1190   * Constructor
1191   */
1192    public Group() {
1193      super();
1194    }
1195
1196  /**
1197   * Constructor
1198   */
1199    public Group(GroupType type, GroupMembershipBasis membership) {
1200      super();
1201      this.setType(type);
1202      this.setMembership(membership);
1203    }
1204
1205    /**
1206     * @return {@link #identifier} (Business identifiers assigned to this participant by one of the applications involved.  These identifiers remain constant as the resource is updated and propagates from server to server.)
1207     */
1208    public List<Identifier> getIdentifier() { 
1209      if (this.identifier == null)
1210        this.identifier = new ArrayList<Identifier>();
1211      return this.identifier;
1212    }
1213
1214    /**
1215     * @return Returns a reference to <code>this</code> for easy method chaining
1216     */
1217    public Group setIdentifier(List<Identifier> theIdentifier) { 
1218      this.identifier = theIdentifier;
1219      return this;
1220    }
1221
1222    public boolean hasIdentifier() { 
1223      if (this.identifier == null)
1224        return false;
1225      for (Identifier item : this.identifier)
1226        if (!item.isEmpty())
1227          return true;
1228      return false;
1229    }
1230
1231    public Identifier addIdentifier() { //3
1232      Identifier t = new Identifier();
1233      if (this.identifier == null)
1234        this.identifier = new ArrayList<Identifier>();
1235      this.identifier.add(t);
1236      return t;
1237    }
1238
1239    public Group addIdentifier(Identifier t) { //3
1240      if (t == null)
1241        return this;
1242      if (this.identifier == null)
1243        this.identifier = new ArrayList<Identifier>();
1244      this.identifier.add(t);
1245      return this;
1246    }
1247
1248    /**
1249     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1250     */
1251    public Identifier getIdentifierFirstRep() { 
1252      if (getIdentifier().isEmpty()) {
1253        addIdentifier();
1254      }
1255      return getIdentifier().get(0);
1256    }
1257
1258    /**
1259     * @return {@link #active} (Indicates whether the record for the group is available for use or is merely being retained for historical purposes.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
1260     */
1261    public BooleanType getActiveElement() { 
1262      if (this.active == null)
1263        if (Configuration.errorOnAutoCreate())
1264          throw new Error("Attempt to auto-create Group.active");
1265        else if (Configuration.doAutoCreate())
1266          this.active = new BooleanType(); // bb
1267      return this.active;
1268    }
1269
1270    public boolean hasActiveElement() { 
1271      return this.active != null && !this.active.isEmpty();
1272    }
1273
1274    public boolean hasActive() { 
1275      return this.active != null && !this.active.isEmpty();
1276    }
1277
1278    /**
1279     * @param value {@link #active} (Indicates whether the record for the group is available for use or is merely being retained for historical purposes.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
1280     */
1281    public Group setActiveElement(BooleanType value) { 
1282      this.active = value;
1283      return this;
1284    }
1285
1286    /**
1287     * @return Indicates whether the record for the group is available for use or is merely being retained for historical purposes.
1288     */
1289    public boolean getActive() { 
1290      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
1291    }
1292
1293    /**
1294     * @param value Indicates whether the record for the group is available for use or is merely being retained for historical purposes.
1295     */
1296    public Group setActive(boolean value) { 
1297        if (this.active == null)
1298          this.active = new BooleanType();
1299        this.active.setValue(value);
1300      return this;
1301    }
1302
1303    /**
1304     * @return {@link #type} (Identifies the broad classification of the kind of resources the group includes.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1305     */
1306    public Enumeration<GroupType> getTypeElement() { 
1307      if (this.type == null)
1308        if (Configuration.errorOnAutoCreate())
1309          throw new Error("Attempt to auto-create Group.type");
1310        else if (Configuration.doAutoCreate())
1311          this.type = new Enumeration<GroupType>(new GroupTypeEnumFactory()); // bb
1312      return this.type;
1313    }
1314
1315    public boolean hasTypeElement() { 
1316      return this.type != null && !this.type.isEmpty();
1317    }
1318
1319    public boolean hasType() { 
1320      return this.type != null && !this.type.isEmpty();
1321    }
1322
1323    /**
1324     * @param value {@link #type} (Identifies the broad classification of the kind of resources the group includes.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1325     */
1326    public Group setTypeElement(Enumeration<GroupType> value) { 
1327      this.type = value;
1328      return this;
1329    }
1330
1331    /**
1332     * @return Identifies the broad classification of the kind of resources the group includes.
1333     */
1334    public GroupType getType() { 
1335      return this.type == null ? null : this.type.getValue();
1336    }
1337
1338    /**
1339     * @param value Identifies the broad classification of the kind of resources the group includes.
1340     */
1341    public Group setType(GroupType value) { 
1342        if (this.type == null)
1343          this.type = new Enumeration<GroupType>(new GroupTypeEnumFactory());
1344        this.type.setValue(value);
1345      return this;
1346    }
1347
1348    /**
1349     * @return {@link #membership} (Basis for membership in the Group:
1350
1351* 'definitional': The Group.characteristics specified are both necessary and sufficient to determine membership. All entities that meet the criteria are considered to be members of the group, whether referenced by the group or not. If members are present, they are individuals that happen to be known as meeting the Group.characteristics. The list cannot be presumed to be complete.
1352* 'enumerated': The Group.characteristics are necessary but not sufficient to determine membership. Membership is determined by being listed as one of the Group.member.). This is the underlying object with id, value and extensions. The accessor "getMembership" gives direct access to the value
1353     */
1354    public Enumeration<GroupMembershipBasis> getMembershipElement() { 
1355      if (this.membership == null)
1356        if (Configuration.errorOnAutoCreate())
1357          throw new Error("Attempt to auto-create Group.membership");
1358        else if (Configuration.doAutoCreate())
1359          this.membership = new Enumeration<GroupMembershipBasis>(new GroupMembershipBasisEnumFactory()); // bb
1360      return this.membership;
1361    }
1362
1363    public boolean hasMembershipElement() { 
1364      return this.membership != null && !this.membership.isEmpty();
1365    }
1366
1367    public boolean hasMembership() { 
1368      return this.membership != null && !this.membership.isEmpty();
1369    }
1370
1371    /**
1372     * @param value {@link #membership} (Basis for membership in the Group:
1373
1374* 'definitional': The Group.characteristics specified are both necessary and sufficient to determine membership. All entities that meet the criteria are considered to be members of the group, whether referenced by the group or not. If members are present, they are individuals that happen to be known as meeting the Group.characteristics. The list cannot be presumed to be complete.
1375* 'enumerated': The Group.characteristics are necessary but not sufficient to determine membership. Membership is determined by being listed as one of the Group.member.). This is the underlying object with id, value and extensions. The accessor "getMembership" gives direct access to the value
1376     */
1377    public Group setMembershipElement(Enumeration<GroupMembershipBasis> value) { 
1378      this.membership = value;
1379      return this;
1380    }
1381
1382    /**
1383     * @return Basis for membership in the Group:
1384
1385* 'definitional': The Group.characteristics specified are both necessary and sufficient to determine membership. All entities that meet the criteria are considered to be members of the group, whether referenced by the group or not. If members are present, they are individuals that happen to be known as meeting the Group.characteristics. The list cannot be presumed to be complete.
1386* 'enumerated': The Group.characteristics are necessary but not sufficient to determine membership. Membership is determined by being listed as one of the Group.member.
1387     */
1388    public GroupMembershipBasis getMembership() { 
1389      return this.membership == null ? null : this.membership.getValue();
1390    }
1391
1392    /**
1393     * @param value Basis for membership in the Group:
1394
1395* 'definitional': The Group.characteristics specified are both necessary and sufficient to determine membership. All entities that meet the criteria are considered to be members of the group, whether referenced by the group or not. If members are present, they are individuals that happen to be known as meeting the Group.characteristics. The list cannot be presumed to be complete.
1396* 'enumerated': The Group.characteristics are necessary but not sufficient to determine membership. Membership is determined by being listed as one of the Group.member.
1397     */
1398    public Group setMembership(GroupMembershipBasis value) { 
1399        if (this.membership == null)
1400          this.membership = new Enumeration<GroupMembershipBasis>(new GroupMembershipBasisEnumFactory());
1401        this.membership.setValue(value);
1402      return this;
1403    }
1404
1405    /**
1406     * @return {@link #code} (Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.)
1407     */
1408    public CodeableConcept getCode() { 
1409      if (this.code == null)
1410        if (Configuration.errorOnAutoCreate())
1411          throw new Error("Attempt to auto-create Group.code");
1412        else if (Configuration.doAutoCreate())
1413          this.code = new CodeableConcept(); // cc
1414      return this.code;
1415    }
1416
1417    public boolean hasCode() { 
1418      return this.code != null && !this.code.isEmpty();
1419    }
1420
1421    /**
1422     * @param value {@link #code} (Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.)
1423     */
1424    public Group setCode(CodeableConcept value) { 
1425      this.code = value;
1426      return this;
1427    }
1428
1429    /**
1430     * @return {@link #name} (A label assigned to the group for human identification and communication.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1431     */
1432    public StringType getNameElement() { 
1433      if (this.name == null)
1434        if (Configuration.errorOnAutoCreate())
1435          throw new Error("Attempt to auto-create Group.name");
1436        else if (Configuration.doAutoCreate())
1437          this.name = new StringType(); // bb
1438      return this.name;
1439    }
1440
1441    public boolean hasNameElement() { 
1442      return this.name != null && !this.name.isEmpty();
1443    }
1444
1445    public boolean hasName() { 
1446      return this.name != null && !this.name.isEmpty();
1447    }
1448
1449    /**
1450     * @param value {@link #name} (A label assigned to the group for human identification and communication.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1451     */
1452    public Group setNameElement(StringType value) { 
1453      this.name = value;
1454      return this;
1455    }
1456
1457    /**
1458     * @return A label assigned to the group for human identification and communication.
1459     */
1460    public String getName() { 
1461      return this.name == null ? null : this.name.getValue();
1462    }
1463
1464    /**
1465     * @param value A label assigned to the group for human identification and communication.
1466     */
1467    public Group setName(String value) { 
1468      if (Utilities.noString(value))
1469        this.name = null;
1470      else {
1471        if (this.name == null)
1472          this.name = new StringType();
1473        this.name.setValue(value);
1474      }
1475      return this;
1476    }
1477
1478    /**
1479     * @return {@link #description} (Explanation of what the group represents and how it is intended to be used.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1480     */
1481    public MarkdownType getDescriptionElement() { 
1482      if (this.description == null)
1483        if (Configuration.errorOnAutoCreate())
1484          throw new Error("Attempt to auto-create Group.description");
1485        else if (Configuration.doAutoCreate())
1486          this.description = new MarkdownType(); // bb
1487      return this.description;
1488    }
1489
1490    public boolean hasDescriptionElement() { 
1491      return this.description != null && !this.description.isEmpty();
1492    }
1493
1494    public boolean hasDescription() { 
1495      return this.description != null && !this.description.isEmpty();
1496    }
1497
1498    /**
1499     * @param value {@link #description} (Explanation of what the group represents and how it is intended to be used.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1500     */
1501    public Group setDescriptionElement(MarkdownType value) { 
1502      this.description = value;
1503      return this;
1504    }
1505
1506    /**
1507     * @return Explanation of what the group represents and how it is intended to be used.
1508     */
1509    public String getDescription() { 
1510      return this.description == null ? null : this.description.getValue();
1511    }
1512
1513    /**
1514     * @param value Explanation of what the group represents and how it is intended to be used.
1515     */
1516    public Group setDescription(String value) { 
1517      if (Utilities.noString(value))
1518        this.description = null;
1519      else {
1520        if (this.description == null)
1521          this.description = new MarkdownType();
1522        this.description.setValue(value);
1523      }
1524      return this;
1525    }
1526
1527    /**
1528     * @return {@link #quantity} (A count of the number of resource instances that are part of the group.). This is the underlying object with id, value and extensions. The accessor "getQuantity" gives direct access to the value
1529     */
1530    public UnsignedIntType getQuantityElement() { 
1531      if (this.quantity == null)
1532        if (Configuration.errorOnAutoCreate())
1533          throw new Error("Attempt to auto-create Group.quantity");
1534        else if (Configuration.doAutoCreate())
1535          this.quantity = new UnsignedIntType(); // bb
1536      return this.quantity;
1537    }
1538
1539    public boolean hasQuantityElement() { 
1540      return this.quantity != null && !this.quantity.isEmpty();
1541    }
1542
1543    public boolean hasQuantity() { 
1544      return this.quantity != null && !this.quantity.isEmpty();
1545    }
1546
1547    /**
1548     * @param value {@link #quantity} (A count of the number of resource instances that are part of the group.). This is the underlying object with id, value and extensions. The accessor "getQuantity" gives direct access to the value
1549     */
1550    public Group setQuantityElement(UnsignedIntType value) { 
1551      this.quantity = value;
1552      return this;
1553    }
1554
1555    /**
1556     * @return A count of the number of resource instances that are part of the group.
1557     */
1558    public int getQuantity() { 
1559      return this.quantity == null || this.quantity.isEmpty() ? 0 : this.quantity.getValue();
1560    }
1561
1562    /**
1563     * @param value A count of the number of resource instances that are part of the group.
1564     */
1565    public Group setQuantity(int value) { 
1566        if (this.quantity == null)
1567          this.quantity = new UnsignedIntType();
1568        this.quantity.setValue(value);
1569      return this;
1570    }
1571
1572    /**
1573     * @return {@link #managingEntity} (Entity responsible for defining and maintaining Group characteristics and/or registered members.)
1574     */
1575    public Reference getManagingEntity() { 
1576      if (this.managingEntity == null)
1577        if (Configuration.errorOnAutoCreate())
1578          throw new Error("Attempt to auto-create Group.managingEntity");
1579        else if (Configuration.doAutoCreate())
1580          this.managingEntity = new Reference(); // cc
1581      return this.managingEntity;
1582    }
1583
1584    public boolean hasManagingEntity() { 
1585      return this.managingEntity != null && !this.managingEntity.isEmpty();
1586    }
1587
1588    /**
1589     * @param value {@link #managingEntity} (Entity responsible for defining and maintaining Group characteristics and/or registered members.)
1590     */
1591    public Group setManagingEntity(Reference value) { 
1592      this.managingEntity = value;
1593      return this;
1594    }
1595
1596    /**
1597     * @return {@link #characteristic} (Identifies traits whose presence r absence is shared by members of the group.)
1598     */
1599    public List<GroupCharacteristicComponent> getCharacteristic() { 
1600      if (this.characteristic == null)
1601        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1602      return this.characteristic;
1603    }
1604
1605    /**
1606     * @return Returns a reference to <code>this</code> for easy method chaining
1607     */
1608    public Group setCharacteristic(List<GroupCharacteristicComponent> theCharacteristic) { 
1609      this.characteristic = theCharacteristic;
1610      return this;
1611    }
1612
1613    public boolean hasCharacteristic() { 
1614      if (this.characteristic == null)
1615        return false;
1616      for (GroupCharacteristicComponent item : this.characteristic)
1617        if (!item.isEmpty())
1618          return true;
1619      return false;
1620    }
1621
1622    public GroupCharacteristicComponent addCharacteristic() { //3
1623      GroupCharacteristicComponent t = new GroupCharacteristicComponent();
1624      if (this.characteristic == null)
1625        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1626      this.characteristic.add(t);
1627      return t;
1628    }
1629
1630    public Group addCharacteristic(GroupCharacteristicComponent t) { //3
1631      if (t == null)
1632        return this;
1633      if (this.characteristic == null)
1634        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1635      this.characteristic.add(t);
1636      return this;
1637    }
1638
1639    /**
1640     * @return The first repetition of repeating field {@link #characteristic}, creating it if it does not already exist {3}
1641     */
1642    public GroupCharacteristicComponent getCharacteristicFirstRep() { 
1643      if (getCharacteristic().isEmpty()) {
1644        addCharacteristic();
1645      }
1646      return getCharacteristic().get(0);
1647    }
1648
1649    /**
1650     * @return {@link #member} (Identifies the resource instances that are members of the group.)
1651     */
1652    public List<GroupMemberComponent> getMember() { 
1653      if (this.member == null)
1654        this.member = new ArrayList<GroupMemberComponent>();
1655      return this.member;
1656    }
1657
1658    /**
1659     * @return Returns a reference to <code>this</code> for easy method chaining
1660     */
1661    public Group setMember(List<GroupMemberComponent> theMember) { 
1662      this.member = theMember;
1663      return this;
1664    }
1665
1666    public boolean hasMember() { 
1667      if (this.member == null)
1668        return false;
1669      for (GroupMemberComponent item : this.member)
1670        if (!item.isEmpty())
1671          return true;
1672      return false;
1673    }
1674
1675    public GroupMemberComponent addMember() { //3
1676      GroupMemberComponent t = new GroupMemberComponent();
1677      if (this.member == null)
1678        this.member = new ArrayList<GroupMemberComponent>();
1679      this.member.add(t);
1680      return t;
1681    }
1682
1683    public Group addMember(GroupMemberComponent t) { //3
1684      if (t == null)
1685        return this;
1686      if (this.member == null)
1687        this.member = new ArrayList<GroupMemberComponent>();
1688      this.member.add(t);
1689      return this;
1690    }
1691
1692    /**
1693     * @return The first repetition of repeating field {@link #member}, creating it if it does not already exist {3}
1694     */
1695    public GroupMemberComponent getMemberFirstRep() { 
1696      if (getMember().isEmpty()) {
1697        addMember();
1698      }
1699      return getMember().get(0);
1700    }
1701
1702      protected void listChildren(List<Property> children) {
1703        super.listChildren(children);
1704        children.add(new Property("identifier", "Identifier", "Business identifiers assigned to this participant by one of the applications involved.  These identifiers remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier));
1705        children.add(new Property("active", "boolean", "Indicates whether the record for the group is available for use or is merely being retained for historical purposes.", 0, 1, active));
1706        children.add(new Property("type", "code", "Identifies the broad classification of the kind of resources the group includes.", 0, 1, type));
1707        children.add(new Property("membership", "code", "Basis for membership in the Group:\n\n* 'definitional': The Group.characteristics specified are both necessary and sufficient to determine membership. All entities that meet the criteria are considered to be members of the group, whether referenced by the group or not. If members are present, they are individuals that happen to be known as meeting the Group.characteristics. The list cannot be presumed to be complete.\n* 'enumerated': The Group.characteristics are necessary but not sufficient to determine membership. Membership is determined by being listed as one of the Group.member.", 0, 1, membership));
1708        children.add(new Property("code", "CodeableConcept", "Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc.", 0, 1, code));
1709        children.add(new Property("name", "string", "A label assigned to the group for human identification and communication.", 0, 1, name));
1710        children.add(new Property("description", "markdown", "Explanation of what the group represents and how it is intended to be used.", 0, 1, description));
1711        children.add(new Property("quantity", "unsignedInt", "A count of the number of resource instances that are part of the group.", 0, 1, quantity));
1712        children.add(new Property("managingEntity", "Reference(Organization|RelatedPerson|Practitioner|PractitionerRole)", "Entity responsible for defining and maintaining Group characteristics and/or registered members.", 0, 1, managingEntity));
1713        children.add(new Property("characteristic", "", "Identifies traits whose presence r absence is shared by members of the group.", 0, java.lang.Integer.MAX_VALUE, characteristic));
1714        children.add(new Property("member", "", "Identifies the resource instances that are members of the group.", 0, java.lang.Integer.MAX_VALUE, member));
1715      }
1716
1717      @Override
1718      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1719        switch (_hash) {
1720        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifiers assigned to this participant by one of the applications involved.  These identifiers remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier);
1721        case -1422950650: /*active*/  return new Property("active", "boolean", "Indicates whether the record for the group is available for use or is merely being retained for historical purposes.", 0, 1, active);
1722        case 3575610: /*type*/  return new Property("type", "code", "Identifies the broad classification of the kind of resources the group includes.", 0, 1, type);
1723        case -1340241962: /*membership*/  return new Property("membership", "code", "Basis for membership in the Group:\n\n* 'definitional': The Group.characteristics specified are both necessary and sufficient to determine membership. All entities that meet the criteria are considered to be members of the group, whether referenced by the group or not. If members are present, they are individuals that happen to be known as meeting the Group.characteristics. The list cannot be presumed to be complete.\n* 'enumerated': The Group.characteristics are necessary but not sufficient to determine membership. Membership is determined by being listed as one of the Group.member.", 0, 1, membership);
1724        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc.", 0, 1, code);
1725        case 3373707: /*name*/  return new Property("name", "string", "A label assigned to the group for human identification and communication.", 0, 1, name);
1726        case -1724546052: /*description*/  return new Property("description", "markdown", "Explanation of what the group represents and how it is intended to be used.", 0, 1, description);
1727        case -1285004149: /*quantity*/  return new Property("quantity", "unsignedInt", "A count of the number of resource instances that are part of the group.", 0, 1, quantity);
1728        case -988474523: /*managingEntity*/  return new Property("managingEntity", "Reference(Organization|RelatedPerson|Practitioner|PractitionerRole)", "Entity responsible for defining and maintaining Group characteristics and/or registered members.", 0, 1, managingEntity);
1729        case 366313883: /*characteristic*/  return new Property("characteristic", "", "Identifies traits whose presence r absence is shared by members of the group.", 0, java.lang.Integer.MAX_VALUE, characteristic);
1730        case -1077769574: /*member*/  return new Property("member", "", "Identifies the resource instances that are members of the group.", 0, java.lang.Integer.MAX_VALUE, member);
1731        default: return super.getNamedProperty(_hash, _name, _checkValid);
1732        }
1733
1734      }
1735
1736      @Override
1737      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1738        switch (hash) {
1739        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1740        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
1741        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<GroupType>
1742        case -1340241962: /*membership*/ return this.membership == null ? new Base[0] : new Base[] {this.membership}; // Enumeration<GroupMembershipBasis>
1743        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1744        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1745        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
1746        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // UnsignedIntType
1747        case -988474523: /*managingEntity*/ return this.managingEntity == null ? new Base[0] : new Base[] {this.managingEntity}; // Reference
1748        case 366313883: /*characteristic*/ return this.characteristic == null ? new Base[0] : this.characteristic.toArray(new Base[this.characteristic.size()]); // GroupCharacteristicComponent
1749        case -1077769574: /*member*/ return this.member == null ? new Base[0] : this.member.toArray(new Base[this.member.size()]); // GroupMemberComponent
1750        default: return super.getProperty(hash, name, checkValid);
1751        }
1752
1753      }
1754
1755      @Override
1756      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1757        switch (hash) {
1758        case -1618432855: // identifier
1759          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
1760          return value;
1761        case -1422950650: // active
1762          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1763          return value;
1764        case 3575610: // type
1765          value = new GroupTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1766          this.type = (Enumeration) value; // Enumeration<GroupType>
1767          return value;
1768        case -1340241962: // membership
1769          value = new GroupMembershipBasisEnumFactory().fromType(TypeConvertor.castToCode(value));
1770          this.membership = (Enumeration) value; // Enumeration<GroupMembershipBasis>
1771          return value;
1772        case 3059181: // code
1773          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1774          return value;
1775        case 3373707: // name
1776          this.name = TypeConvertor.castToString(value); // StringType
1777          return value;
1778        case -1724546052: // description
1779          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
1780          return value;
1781        case -1285004149: // quantity
1782          this.quantity = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
1783          return value;
1784        case -988474523: // managingEntity
1785          this.managingEntity = TypeConvertor.castToReference(value); // Reference
1786          return value;
1787        case 366313883: // characteristic
1788          this.getCharacteristic().add((GroupCharacteristicComponent) value); // GroupCharacteristicComponent
1789          return value;
1790        case -1077769574: // member
1791          this.getMember().add((GroupMemberComponent) value); // GroupMemberComponent
1792          return value;
1793        default: return super.setProperty(hash, name, value);
1794        }
1795
1796      }
1797
1798      @Override
1799      public Base setProperty(String name, Base value) throws FHIRException {
1800        if (name.equals("identifier")) {
1801          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
1802        } else if (name.equals("active")) {
1803          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1804        } else if (name.equals("type")) {
1805          value = new GroupTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1806          this.type = (Enumeration) value; // Enumeration<GroupType>
1807        } else if (name.equals("membership")) {
1808          value = new GroupMembershipBasisEnumFactory().fromType(TypeConvertor.castToCode(value));
1809          this.membership = (Enumeration) value; // Enumeration<GroupMembershipBasis>
1810        } else if (name.equals("code")) {
1811          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1812        } else if (name.equals("name")) {
1813          this.name = TypeConvertor.castToString(value); // StringType
1814        } else if (name.equals("description")) {
1815          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
1816        } else if (name.equals("quantity")) {
1817          this.quantity = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
1818        } else if (name.equals("managingEntity")) {
1819          this.managingEntity = TypeConvertor.castToReference(value); // Reference
1820        } else if (name.equals("characteristic")) {
1821          this.getCharacteristic().add((GroupCharacteristicComponent) value);
1822        } else if (name.equals("member")) {
1823          this.getMember().add((GroupMemberComponent) value);
1824        } else
1825          return super.setProperty(name, value);
1826        return value;
1827      }
1828
1829  @Override
1830  public void removeChild(String name, Base value) throws FHIRException {
1831        if (name.equals("identifier")) {
1832          this.getIdentifier().remove(value);
1833        } else if (name.equals("active")) {
1834          this.active = null;
1835        } else if (name.equals("type")) {
1836          value = new GroupTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1837          this.type = (Enumeration) value; // Enumeration<GroupType>
1838        } else if (name.equals("membership")) {
1839          value = new GroupMembershipBasisEnumFactory().fromType(TypeConvertor.castToCode(value));
1840          this.membership = (Enumeration) value; // Enumeration<GroupMembershipBasis>
1841        } else if (name.equals("code")) {
1842          this.code = null;
1843        } else if (name.equals("name")) {
1844          this.name = null;
1845        } else if (name.equals("description")) {
1846          this.description = null;
1847        } else if (name.equals("quantity")) {
1848          this.quantity = null;
1849        } else if (name.equals("managingEntity")) {
1850          this.managingEntity = null;
1851        } else if (name.equals("characteristic")) {
1852          this.getCharacteristic().remove((GroupCharacteristicComponent) value);
1853        } else if (name.equals("member")) {
1854          this.getMember().remove((GroupMemberComponent) value);
1855        } else
1856          super.removeChild(name, value);
1857        
1858      }
1859
1860      @Override
1861      public Base makeProperty(int hash, String name) throws FHIRException {
1862        switch (hash) {
1863        case -1618432855:  return addIdentifier(); 
1864        case -1422950650:  return getActiveElement();
1865        case 3575610:  return getTypeElement();
1866        case -1340241962:  return getMembershipElement();
1867        case 3059181:  return getCode();
1868        case 3373707:  return getNameElement();
1869        case -1724546052:  return getDescriptionElement();
1870        case -1285004149:  return getQuantityElement();
1871        case -988474523:  return getManagingEntity();
1872        case 366313883:  return addCharacteristic(); 
1873        case -1077769574:  return addMember(); 
1874        default: return super.makeProperty(hash, name);
1875        }
1876
1877      }
1878
1879      @Override
1880      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1881        switch (hash) {
1882        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1883        case -1422950650: /*active*/ return new String[] {"boolean"};
1884        case 3575610: /*type*/ return new String[] {"code"};
1885        case -1340241962: /*membership*/ return new String[] {"code"};
1886        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1887        case 3373707: /*name*/ return new String[] {"string"};
1888        case -1724546052: /*description*/ return new String[] {"markdown"};
1889        case -1285004149: /*quantity*/ return new String[] {"unsignedInt"};
1890        case -988474523: /*managingEntity*/ return new String[] {"Reference"};
1891        case 366313883: /*characteristic*/ return new String[] {};
1892        case -1077769574: /*member*/ return new String[] {};
1893        default: return super.getTypesForProperty(hash, name);
1894        }
1895
1896      }
1897
1898      @Override
1899      public Base addChild(String name) throws FHIRException {
1900        if (name.equals("identifier")) {
1901          return addIdentifier();
1902        }
1903        else if (name.equals("active")) {
1904          throw new FHIRException("Cannot call addChild on a singleton property Group.active");
1905        }
1906        else if (name.equals("type")) {
1907          throw new FHIRException("Cannot call addChild on a singleton property Group.type");
1908        }
1909        else if (name.equals("membership")) {
1910          throw new FHIRException("Cannot call addChild on a singleton property Group.membership");
1911        }
1912        else if (name.equals("code")) {
1913          this.code = new CodeableConcept();
1914          return this.code;
1915        }
1916        else if (name.equals("name")) {
1917          throw new FHIRException("Cannot call addChild on a singleton property Group.name");
1918        }
1919        else if (name.equals("description")) {
1920          throw new FHIRException("Cannot call addChild on a singleton property Group.description");
1921        }
1922        else if (name.equals("quantity")) {
1923          throw new FHIRException("Cannot call addChild on a singleton property Group.quantity");
1924        }
1925        else if (name.equals("managingEntity")) {
1926          this.managingEntity = new Reference();
1927          return this.managingEntity;
1928        }
1929        else if (name.equals("characteristic")) {
1930          return addCharacteristic();
1931        }
1932        else if (name.equals("member")) {
1933          return addMember();
1934        }
1935        else
1936          return super.addChild(name);
1937      }
1938
1939  public String fhirType() {
1940    return "Group";
1941
1942  }
1943
1944      public Group copy() {
1945        Group dst = new Group();
1946        copyValues(dst);
1947        return dst;
1948      }
1949
1950      public void copyValues(Group dst) {
1951        super.copyValues(dst);
1952        if (identifier != null) {
1953          dst.identifier = new ArrayList<Identifier>();
1954          for (Identifier i : identifier)
1955            dst.identifier.add(i.copy());
1956        };
1957        dst.active = active == null ? null : active.copy();
1958        dst.type = type == null ? null : type.copy();
1959        dst.membership = membership == null ? null : membership.copy();
1960        dst.code = code == null ? null : code.copy();
1961        dst.name = name == null ? null : name.copy();
1962        dst.description = description == null ? null : description.copy();
1963        dst.quantity = quantity == null ? null : quantity.copy();
1964        dst.managingEntity = managingEntity == null ? null : managingEntity.copy();
1965        if (characteristic != null) {
1966          dst.characteristic = new ArrayList<GroupCharacteristicComponent>();
1967          for (GroupCharacteristicComponent i : characteristic)
1968            dst.characteristic.add(i.copy());
1969        };
1970        if (member != null) {
1971          dst.member = new ArrayList<GroupMemberComponent>();
1972          for (GroupMemberComponent i : member)
1973            dst.member.add(i.copy());
1974        };
1975      }
1976
1977      protected Group typedCopy() {
1978        return copy();
1979      }
1980
1981      @Override
1982      public boolean equalsDeep(Base other_) {
1983        if (!super.equalsDeep(other_))
1984          return false;
1985        if (!(other_ instanceof Group))
1986          return false;
1987        Group o = (Group) other_;
1988        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(type, o.type, true)
1989           && compareDeep(membership, o.membership, true) && compareDeep(code, o.code, true) && compareDeep(name, o.name, true)
1990           && compareDeep(description, o.description, true) && compareDeep(quantity, o.quantity, true) && compareDeep(managingEntity, o.managingEntity, true)
1991           && compareDeep(characteristic, o.characteristic, true) && compareDeep(member, o.member, true);
1992      }
1993
1994      @Override
1995      public boolean equalsShallow(Base other_) {
1996        if (!super.equalsShallow(other_))
1997          return false;
1998        if (!(other_ instanceof Group))
1999          return false;
2000        Group o = (Group) other_;
2001        return compareValues(active, o.active, true) && compareValues(type, o.type, true) && compareValues(membership, o.membership, true)
2002           && compareValues(name, o.name, true) && compareValues(description, o.description, true) && compareValues(quantity, o.quantity, true)
2003          ;
2004      }
2005
2006      public boolean isEmpty() {
2007        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, type
2008          , membership, code, name, description, quantity, managingEntity, characteristic
2009          , member);
2010      }
2011
2012  @Override
2013  public ResourceType getResourceType() {
2014    return ResourceType.Group;
2015   }
2016
2017 /**
2018   * Search parameter: <b>characteristic-reference</b>
2019   * <p>
2020   * Description: <b>An entity referenced in a characteristic</b><br>
2021   * Type: <b>reference</b><br>
2022   * Path: <b>(Group.characteristic.value.ofType(Reference))</b><br>
2023   * </p>
2024   */
2025  @SearchParamDefinition(name="characteristic-reference", path="(Group.characteristic.value.ofType(Reference))", description="An entity referenced in a characteristic", 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 } )
2026  public static final String SP_CHARACTERISTIC_REFERENCE = "characteristic-reference";
2027 /**
2028   * <b>Fluent Client</b> search parameter constant for <b>characteristic-reference</b>
2029   * <p>
2030   * Description: <b>An entity referenced in a characteristic</b><br>
2031   * Type: <b>reference</b><br>
2032   * Path: <b>(Group.characteristic.value.ofType(Reference))</b><br>
2033   * </p>
2034   */
2035  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CHARACTERISTIC_REFERENCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CHARACTERISTIC_REFERENCE);
2036
2037/**
2038   * Constant for fluent queries to be used to add include statements. Specifies
2039   * the path value of "<b>Group:characteristic-reference</b>".
2040   */
2041  public static final ca.uhn.fhir.model.api.Include INCLUDE_CHARACTERISTIC_REFERENCE = new ca.uhn.fhir.model.api.Include("Group:characteristic-reference").toLocked();
2042
2043 /**
2044   * Search parameter: <b>characteristic-value</b>
2045   * <p>
2046   * Description: <b>A composite of both characteristic and value</b><br>
2047   * Type: <b>composite</b><br>
2048   * Path: <b>Group.characteristic</b><br>
2049   * </p>
2050   */
2051  @SearchParamDefinition(name="characteristic-value", path="Group.characteristic", description="A composite of both characteristic and value", type="composite", compositeOf={"characteristic", "value"} )
2052  public static final String SP_CHARACTERISTIC_VALUE = "characteristic-value";
2053 /**
2054   * <b>Fluent Client</b> search parameter constant for <b>characteristic-value</b>
2055   * <p>
2056   * Description: <b>A composite of both characteristic and value</b><br>
2057   * Type: <b>composite</b><br>
2058   * Path: <b>Group.characteristic</b><br>
2059   * </p>
2060   */
2061  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CHARACTERISTIC_VALUE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_CHARACTERISTIC_VALUE);
2062
2063 /**
2064   * Search parameter: <b>characteristic</b>
2065   * <p>
2066   * Description: <b>Kind of characteristic</b><br>
2067   * Type: <b>token</b><br>
2068   * Path: <b>Group.characteristic.code</b><br>
2069   * </p>
2070   */
2071  @SearchParamDefinition(name="characteristic", path="Group.characteristic.code", description="Kind of characteristic", type="token" )
2072  public static final String SP_CHARACTERISTIC = "characteristic";
2073 /**
2074   * <b>Fluent Client</b> search parameter constant for <b>characteristic</b>
2075   * <p>
2076   * Description: <b>Kind of characteristic</b><br>
2077   * Type: <b>token</b><br>
2078   * Path: <b>Group.characteristic.code</b><br>
2079   * </p>
2080   */
2081  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CHARACTERISTIC = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CHARACTERISTIC);
2082
2083 /**
2084   * Search parameter: <b>code</b>
2085   * <p>
2086   * Description: <b>The kind of resources contained</b><br>
2087   * Type: <b>token</b><br>
2088   * Path: <b>Group.code</b><br>
2089   * </p>
2090   */
2091  @SearchParamDefinition(name="code", path="Group.code", description="The kind of resources contained", type="token" )
2092  public static final String SP_CODE = "code";
2093 /**
2094   * <b>Fluent Client</b> search parameter constant for <b>code</b>
2095   * <p>
2096   * Description: <b>The kind of resources contained</b><br>
2097   * Type: <b>token</b><br>
2098   * Path: <b>Group.code</b><br>
2099   * </p>
2100   */
2101  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
2102
2103 /**
2104   * Search parameter: <b>exclude</b>
2105   * <p>
2106   * Description: <b>Group includes or excludes</b><br>
2107   * Type: <b>token</b><br>
2108   * Path: <b>Group.characteristic.exclude</b><br>
2109   * </p>
2110   */
2111  @SearchParamDefinition(name="exclude", path="Group.characteristic.exclude", description="Group includes or excludes", type="token" )
2112  public static final String SP_EXCLUDE = "exclude";
2113 /**
2114   * <b>Fluent Client</b> search parameter constant for <b>exclude</b>
2115   * <p>
2116   * Description: <b>Group includes or excludes</b><br>
2117   * Type: <b>token</b><br>
2118   * Path: <b>Group.characteristic.exclude</b><br>
2119   * </p>
2120   */
2121  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EXCLUDE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EXCLUDE);
2122
2123 /**
2124   * Search parameter: <b>identifier</b>
2125   * <p>
2126   * Description: <b>Unique id</b><br>
2127   * Type: <b>token</b><br>
2128   * Path: <b>Group.identifier</b><br>
2129   * </p>
2130   */
2131  @SearchParamDefinition(name="identifier", path="Group.identifier", description="Unique id", type="token" )
2132  public static final String SP_IDENTIFIER = "identifier";
2133 /**
2134   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2135   * <p>
2136   * Description: <b>Unique id</b><br>
2137   * Type: <b>token</b><br>
2138   * Path: <b>Group.identifier</b><br>
2139   * </p>
2140   */
2141  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2142
2143 /**
2144   * Search parameter: <b>managing-entity</b>
2145   * <p>
2146   * Description: <b>Entity that is the custodian of the Group's definition</b><br>
2147   * Type: <b>reference</b><br>
2148   * Path: <b>Group.managingEntity</b><br>
2149   * </p>
2150   */
2151  @SearchParamDefinition(name="managing-entity", path="Group.managingEntity", description="Entity that is the custodian of the Group's definition", type="reference", target={Organization.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2152  public static final String SP_MANAGING_ENTITY = "managing-entity";
2153 /**
2154   * <b>Fluent Client</b> search parameter constant for <b>managing-entity</b>
2155   * <p>
2156   * Description: <b>Entity that is the custodian of the Group's definition</b><br>
2157   * Type: <b>reference</b><br>
2158   * Path: <b>Group.managingEntity</b><br>
2159   * </p>
2160   */
2161  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam MANAGING_ENTITY = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_MANAGING_ENTITY);
2162
2163/**
2164   * Constant for fluent queries to be used to add include statements. Specifies
2165   * the path value of "<b>Group:managing-entity</b>".
2166   */
2167  public static final ca.uhn.fhir.model.api.Include INCLUDE_MANAGING_ENTITY = new ca.uhn.fhir.model.api.Include("Group:managing-entity").toLocked();
2168
2169 /**
2170   * Search parameter: <b>member</b>
2171   * <p>
2172   * Description: <b>Reference to the group member</b><br>
2173   * Type: <b>reference</b><br>
2174   * Path: <b>Group.member.entity</b><br>
2175   * </p>
2176   */
2177  @SearchParamDefinition(name="member", path="Group.member.entity", description="Reference to the group member", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner") }, target={CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class, Specimen.class } )
2178  public static final String SP_MEMBER = "member";
2179 /**
2180   * <b>Fluent Client</b> search parameter constant for <b>member</b>
2181   * <p>
2182   * Description: <b>Reference to the group member</b><br>
2183   * Type: <b>reference</b><br>
2184   * Path: <b>Group.member.entity</b><br>
2185   * </p>
2186   */
2187  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam MEMBER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_MEMBER);
2188
2189/**
2190   * Constant for fluent queries to be used to add include statements. Specifies
2191   * the path value of "<b>Group:member</b>".
2192   */
2193  public static final ca.uhn.fhir.model.api.Include INCLUDE_MEMBER = new ca.uhn.fhir.model.api.Include("Group:member").toLocked();
2194
2195 /**
2196   * Search parameter: <b>membership</b>
2197   * <p>
2198   * Description: <b>Definitional or enumerated group</b><br>
2199   * Type: <b>token</b><br>
2200   * Path: <b>Group.membership</b><br>
2201   * </p>
2202   */
2203  @SearchParamDefinition(name="membership", path="Group.membership", description="Definitional or enumerated group", type="token" )
2204  public static final String SP_MEMBERSHIP = "membership";
2205 /**
2206   * <b>Fluent Client</b> search parameter constant for <b>membership</b>
2207   * <p>
2208   * Description: <b>Definitional or enumerated group</b><br>
2209   * Type: <b>token</b><br>
2210   * Path: <b>Group.membership</b><br>
2211   * </p>
2212   */
2213  public static final ca.uhn.fhir.rest.gclient.TokenClientParam MEMBERSHIP = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_MEMBERSHIP);
2214
2215 /**
2216   * Search parameter: <b>name</b>
2217   * <p>
2218   * Description: <b>A portion of the Group's name</b><br>
2219   * Type: <b>string</b><br>
2220   * Path: <b>Group.name</b><br>
2221   * </p>
2222   */
2223  @SearchParamDefinition(name="name", path="Group.name", description="A portion of the Group's name", type="string" )
2224  public static final String SP_NAME = "name";
2225 /**
2226   * <b>Fluent Client</b> search parameter constant for <b>name</b>
2227   * <p>
2228   * Description: <b>A portion of the Group's name</b><br>
2229   * Type: <b>string</b><br>
2230   * Path: <b>Group.name</b><br>
2231   * </p>
2232   */
2233  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
2234
2235 /**
2236   * Search parameter: <b>type</b>
2237   * <p>
2238   * Description: <b>The type of resources the group contains</b><br>
2239   * Type: <b>token</b><br>
2240   * Path: <b>Group.type</b><br>
2241   * </p>
2242   */
2243  @SearchParamDefinition(name="type", path="Group.type", description="The type of resources the group contains", type="token" )
2244  public static final String SP_TYPE = "type";
2245 /**
2246   * <b>Fluent Client</b> search parameter constant for <b>type</b>
2247   * <p>
2248   * Description: <b>The type of resources the group contains</b><br>
2249   * Type: <b>token</b><br>
2250   * Path: <b>Group.type</b><br>
2251   * </p>
2252   */
2253  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
2254
2255 /**
2256   * Search parameter: <b>value</b>
2257   * <p>
2258   * Description: <b>Value held by characteristic</b><br>
2259   * Type: <b>token</b><br>
2260   * Path: <b>(Group.characteristic.value.ofType(CodeableConcept)) | (Group.characteristic.value.ofType(boolean))</b><br>
2261   * </p>
2262   */
2263  @SearchParamDefinition(name="value", path="(Group.characteristic.value.ofType(CodeableConcept)) | (Group.characteristic.value.ofType(boolean))", description="Value held by characteristic", type="token" )
2264  public static final String SP_VALUE = "value";
2265 /**
2266   * <b>Fluent Client</b> search parameter constant for <b>value</b>
2267   * <p>
2268   * Description: <b>Value held by characteristic</b><br>
2269   * Type: <b>token</b><br>
2270   * Path: <b>(Group.characteristic.value.ofType(CodeableConcept)) | (Group.characteristic.value.ofType(boolean))</b><br>
2271   * </p>
2272   */
2273  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VALUE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VALUE);
2274
2275
2276}
2277