001package org.hl7.fhir.dstu2.model;
002
003
004
005
006/*
007  Copyright (c) 2011+, HL7, Inc.
008  All rights reserved.
009  
010  Redistribution and use in source and binary forms, with or without modification, 
011  are permitted provided that the following conditions are met:
012  
013   * Redistributions of source code must retain the above copyright notice, this 
014     list of conditions and the following disclaimer.
015   * Redistributions in binary form must reproduce the above copyright notice, 
016     this list of conditions and the following disclaimer in the documentation 
017     and/or other materials provided with the distribution.
018   * Neither the name of HL7 nor the names of its contributors may be used to 
019     endorse or promote products derived from this software without specific 
020     prior written permission.
021  
022  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
023  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
024  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
025  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
026  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
027  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
028  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
029  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
030  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
031  POSSIBILITY OF SUCH DAMAGE.
032  
033*/
034
035// Generated on Wed, Jul 13, 2016 05:32+1000 for FHIR v1.0.2
036import java.util.ArrayList;
037import java.util.List;
038
039import ca.uhn.fhir.model.api.annotation.Block;
040import ca.uhn.fhir.model.api.annotation.Child;
041import ca.uhn.fhir.model.api.annotation.Description;
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 org.hl7.fhir.exceptions.FHIRException;
046import org.hl7.fhir.utilities.Utilities;
047/**
048 * 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.
049 */
050@ResourceDef(name="Group", profile="http://hl7.org/fhir/Profile/Group")
051public class Group extends DomainResource {
052
053    public enum GroupType {
054        /**
055         * Group contains "person" Patient resources
056         */
057        PERSON, 
058        /**
059         * Group contains "animal" Patient resources
060         */
061        ANIMAL, 
062        /**
063         * Group contains healthcare practitioner resources
064         */
065        PRACTITIONER, 
066        /**
067         * Group contains Device resources
068         */
069        DEVICE, 
070        /**
071         * Group contains Medication resources
072         */
073        MEDICATION, 
074        /**
075         * Group contains Substance resources
076         */
077        SUBSTANCE, 
078        /**
079         * added to help the parsers
080         */
081        NULL;
082        public static GroupType fromCode(String codeString) throws FHIRException {
083            if (codeString == null || "".equals(codeString))
084                return null;
085        if ("person".equals(codeString))
086          return PERSON;
087        if ("animal".equals(codeString))
088          return ANIMAL;
089        if ("practitioner".equals(codeString))
090          return PRACTITIONER;
091        if ("device".equals(codeString))
092          return DEVICE;
093        if ("medication".equals(codeString))
094          return MEDICATION;
095        if ("substance".equals(codeString))
096          return SUBSTANCE;
097        throw new FHIRException("Unknown GroupType code '"+codeString+"'");
098        }
099        public String toCode() {
100          switch (this) {
101            case PERSON: return "person";
102            case ANIMAL: return "animal";
103            case PRACTITIONER: return "practitioner";
104            case DEVICE: return "device";
105            case MEDICATION: return "medication";
106            case SUBSTANCE: return "substance";
107            default: return "?";
108          }
109        }
110        public String getSystem() {
111          switch (this) {
112            case PERSON: return "http://hl7.org/fhir/group-type";
113            case ANIMAL: return "http://hl7.org/fhir/group-type";
114            case PRACTITIONER: return "http://hl7.org/fhir/group-type";
115            case DEVICE: return "http://hl7.org/fhir/group-type";
116            case MEDICATION: return "http://hl7.org/fhir/group-type";
117            case SUBSTANCE: return "http://hl7.org/fhir/group-type";
118            default: return "?";
119          }
120        }
121        public String getDefinition() {
122          switch (this) {
123            case PERSON: return "Group contains \"person\" Patient resources";
124            case ANIMAL: return "Group contains \"animal\" Patient resources";
125            case PRACTITIONER: return "Group contains healthcare practitioner resources";
126            case DEVICE: return "Group contains Device resources";
127            case MEDICATION: return "Group contains Medication resources";
128            case SUBSTANCE: return "Group contains Substance resources";
129            default: return "?";
130          }
131        }
132        public String getDisplay() {
133          switch (this) {
134            case PERSON: return "Person";
135            case ANIMAL: return "Animal";
136            case PRACTITIONER: return "Practitioner";
137            case DEVICE: return "Device";
138            case MEDICATION: return "Medication";
139            case SUBSTANCE: return "Substance";
140            default: return "?";
141          }
142        }
143    }
144
145  public static class GroupTypeEnumFactory implements EnumFactory<GroupType> {
146    public GroupType fromCode(String codeString) throws IllegalArgumentException {
147      if (codeString == null || "".equals(codeString))
148            if (codeString == null || "".equals(codeString))
149                return null;
150        if ("person".equals(codeString))
151          return GroupType.PERSON;
152        if ("animal".equals(codeString))
153          return GroupType.ANIMAL;
154        if ("practitioner".equals(codeString))
155          return GroupType.PRACTITIONER;
156        if ("device".equals(codeString))
157          return GroupType.DEVICE;
158        if ("medication".equals(codeString))
159          return GroupType.MEDICATION;
160        if ("substance".equals(codeString))
161          return GroupType.SUBSTANCE;
162        throw new IllegalArgumentException("Unknown GroupType code '"+codeString+"'");
163        }
164        public Enumeration<GroupType> fromType(Base code) throws FHIRException {
165          if (code == null || code.isEmpty())
166            return null;
167          String codeString = ((PrimitiveType) code).asStringValue();
168          if (codeString == null || "".equals(codeString))
169            return null;
170        if ("person".equals(codeString))
171          return new Enumeration<GroupType>(this, GroupType.PERSON);
172        if ("animal".equals(codeString))
173          return new Enumeration<GroupType>(this, GroupType.ANIMAL);
174        if ("practitioner".equals(codeString))
175          return new Enumeration<GroupType>(this, GroupType.PRACTITIONER);
176        if ("device".equals(codeString))
177          return new Enumeration<GroupType>(this, GroupType.DEVICE);
178        if ("medication".equals(codeString))
179          return new Enumeration<GroupType>(this, GroupType.MEDICATION);
180        if ("substance".equals(codeString))
181          return new Enumeration<GroupType>(this, GroupType.SUBSTANCE);
182        throw new FHIRException("Unknown GroupType code '"+codeString+"'");
183        }
184    public String toCode(GroupType code) {
185      if (code == GroupType.PERSON)
186        return "person";
187      if (code == GroupType.ANIMAL)
188        return "animal";
189      if (code == GroupType.PRACTITIONER)
190        return "practitioner";
191      if (code == GroupType.DEVICE)
192        return "device";
193      if (code == GroupType.MEDICATION)
194        return "medication";
195      if (code == GroupType.SUBSTANCE)
196        return "substance";
197      return "?";
198      }
199    }
200
201    @Block()
202    public static class GroupCharacteristicComponent extends BackboneElement implements IBaseBackboneElement {
203        /**
204         * A code that identifies the kind of trait being asserted.
205         */
206        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
207        @Description(shortDefinition="Kind of characteristic", formalDefinition="A code that identifies the kind of trait being asserted." )
208        protected CodeableConcept code;
209
210        /**
211         * The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
212         */
213        @Child(name = "value", type = {CodeableConcept.class, BooleanType.class, Quantity.class, Range.class}, order=2, min=1, max=1, modifier=false, summary=false)
214        @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." )
215        protected Type value;
216
217        /**
218         * If true, indicates the characteristic is one that is NOT held by members of the group.
219         */
220        @Child(name = "exclude", type = {BooleanType.class}, order=3, min=1, max=1, modifier=true, summary=false)
221        @Description(shortDefinition="Group includes or excludes", formalDefinition="If true, indicates the characteristic is one that is NOT held by members of the group." )
222        protected BooleanType exclude;
223
224        /**
225         * The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.
226         */
227        @Child(name = "period", type = {Period.class}, order=4, min=0, max=1, modifier=false, summary=false)
228        @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." )
229        protected Period period;
230
231        private static final long serialVersionUID = -1000688967L;
232
233    /*
234     * Constructor
235     */
236      public GroupCharacteristicComponent() {
237        super();
238      }
239
240    /*
241     * Constructor
242     */
243      public GroupCharacteristicComponent(CodeableConcept code, Type value, BooleanType exclude) {
244        super();
245        this.code = code;
246        this.value = value;
247        this.exclude = exclude;
248      }
249
250        /**
251         * @return {@link #code} (A code that identifies the kind of trait being asserted.)
252         */
253        public CodeableConcept getCode() { 
254          if (this.code == null)
255            if (Configuration.errorOnAutoCreate())
256              throw new Error("Attempt to auto-create GroupCharacteristicComponent.code");
257            else if (Configuration.doAutoCreate())
258              this.code = new CodeableConcept(); // cc
259          return this.code;
260        }
261
262        public boolean hasCode() { 
263          return this.code != null && !this.code.isEmpty();
264        }
265
266        /**
267         * @param value {@link #code} (A code that identifies the kind of trait being asserted.)
268         */
269        public GroupCharacteristicComponent setCode(CodeableConcept value) { 
270          this.code = value;
271          return this;
272        }
273
274        /**
275         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
276         */
277        public Type getValue() { 
278          return this.value;
279        }
280
281        /**
282         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
283         */
284        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
285          if (!(this.value instanceof CodeableConcept))
286            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
287          return (CodeableConcept) this.value;
288        }
289
290        public boolean hasValueCodeableConcept() { 
291          return this.value instanceof CodeableConcept;
292        }
293
294        /**
295         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
296         */
297        public BooleanType getValueBooleanType() throws FHIRException { 
298          if (!(this.value instanceof BooleanType))
299            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
300          return (BooleanType) this.value;
301        }
302
303        public boolean hasValueBooleanType() { 
304          return this.value instanceof BooleanType;
305        }
306
307        /**
308         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
309         */
310        public Quantity getValueQuantity() throws FHIRException { 
311          if (!(this.value instanceof Quantity))
312            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
313          return (Quantity) this.value;
314        }
315
316        public boolean hasValueQuantity() { 
317          return this.value instanceof Quantity;
318        }
319
320        /**
321         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
322         */
323        public Range getValueRange() throws FHIRException { 
324          if (!(this.value instanceof Range))
325            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
326          return (Range) this.value;
327        }
328
329        public boolean hasValueRange() { 
330          return this.value instanceof Range;
331        }
332
333        public boolean hasValue() { 
334          return this.value != null && !this.value.isEmpty();
335        }
336
337        /**
338         * @param value {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
339         */
340        public GroupCharacteristicComponent setValue(Type value) { 
341          this.value = value;
342          return this;
343        }
344
345        /**
346         * @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
347         */
348        public BooleanType getExcludeElement() { 
349          if (this.exclude == null)
350            if (Configuration.errorOnAutoCreate())
351              throw new Error("Attempt to auto-create GroupCharacteristicComponent.exclude");
352            else if (Configuration.doAutoCreate())
353              this.exclude = new BooleanType(); // bb
354          return this.exclude;
355        }
356
357        public boolean hasExcludeElement() { 
358          return this.exclude != null && !this.exclude.isEmpty();
359        }
360
361        public boolean hasExclude() { 
362          return this.exclude != null && !this.exclude.isEmpty();
363        }
364
365        /**
366         * @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
367         */
368        public GroupCharacteristicComponent setExcludeElement(BooleanType value) { 
369          this.exclude = value;
370          return this;
371        }
372
373        /**
374         * @return If true, indicates the characteristic is one that is NOT held by members of the group.
375         */
376        public boolean getExclude() { 
377          return this.exclude == null || this.exclude.isEmpty() ? false : this.exclude.getValue();
378        }
379
380        /**
381         * @param value If true, indicates the characteristic is one that is NOT held by members of the group.
382         */
383        public GroupCharacteristicComponent setExclude(boolean value) { 
384            if (this.exclude == null)
385              this.exclude = new BooleanType();
386            this.exclude.setValue(value);
387          return this;
388        }
389
390        /**
391         * @return {@link #period} (The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.)
392         */
393        public Period getPeriod() { 
394          if (this.period == null)
395            if (Configuration.errorOnAutoCreate())
396              throw new Error("Attempt to auto-create GroupCharacteristicComponent.period");
397            else if (Configuration.doAutoCreate())
398              this.period = new Period(); // cc
399          return this.period;
400        }
401
402        public boolean hasPeriod() { 
403          return this.period != null && !this.period.isEmpty();
404        }
405
406        /**
407         * @param value {@link #period} (The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.)
408         */
409        public GroupCharacteristicComponent setPeriod(Period value) { 
410          this.period = value;
411          return this;
412        }
413
414        protected void listChildren(List<Property> childrenList) {
415          super.listChildren(childrenList);
416          childrenList.add(new Property("code", "CodeableConcept", "A code that identifies the kind of trait being asserted.", 0, java.lang.Integer.MAX_VALUE, code));
417          childrenList.add(new Property("value[x]", "CodeableConcept|boolean|Quantity|Range", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, java.lang.Integer.MAX_VALUE, value));
418          childrenList.add(new Property("exclude", "boolean", "If true, indicates the characteristic is one that is NOT held by members of the group.", 0, java.lang.Integer.MAX_VALUE, exclude));
419          childrenList.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, java.lang.Integer.MAX_VALUE, period));
420        }
421
422      @Override
423      public void setProperty(String name, Base value) throws FHIRException {
424        if (name.equals("code"))
425          this.code = castToCodeableConcept(value); // CodeableConcept
426        else if (name.equals("value[x]"))
427          this.value = (Type) value; // Type
428        else if (name.equals("exclude"))
429          this.exclude = castToBoolean(value); // BooleanType
430        else if (name.equals("period"))
431          this.period = castToPeriod(value); // Period
432        else
433          super.setProperty(name, value);
434      }
435
436      @Override
437      public Base addChild(String name) throws FHIRException {
438        if (name.equals("code")) {
439          this.code = new CodeableConcept();
440          return this.code;
441        }
442        else if (name.equals("valueCodeableConcept")) {
443          this.value = new CodeableConcept();
444          return this.value;
445        }
446        else if (name.equals("valueBoolean")) {
447          this.value = new BooleanType();
448          return this.value;
449        }
450        else if (name.equals("valueQuantity")) {
451          this.value = new Quantity();
452          return this.value;
453        }
454        else if (name.equals("valueRange")) {
455          this.value = new Range();
456          return this.value;
457        }
458        else if (name.equals("exclude")) {
459          throw new FHIRException("Cannot call addChild on a primitive type Group.exclude");
460        }
461        else if (name.equals("period")) {
462          this.period = new Period();
463          return this.period;
464        }
465        else
466          return super.addChild(name);
467      }
468
469      public GroupCharacteristicComponent copy() {
470        GroupCharacteristicComponent dst = new GroupCharacteristicComponent();
471        copyValues(dst);
472        dst.code = code == null ? null : code.copy();
473        dst.value = value == null ? null : value.copy();
474        dst.exclude = exclude == null ? null : exclude.copy();
475        dst.period = period == null ? null : period.copy();
476        return dst;
477      }
478
479      @Override
480      public boolean equalsDeep(Base other) {
481        if (!super.equalsDeep(other))
482          return false;
483        if (!(other instanceof GroupCharacteristicComponent))
484          return false;
485        GroupCharacteristicComponent o = (GroupCharacteristicComponent) other;
486        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true) && compareDeep(exclude, o.exclude, true)
487           && compareDeep(period, o.period, true);
488      }
489
490      @Override
491      public boolean equalsShallow(Base other) {
492        if (!super.equalsShallow(other))
493          return false;
494        if (!(other instanceof GroupCharacteristicComponent))
495          return false;
496        GroupCharacteristicComponent o = (GroupCharacteristicComponent) other;
497        return compareValues(exclude, o.exclude, true);
498      }
499
500      public boolean isEmpty() {
501        return super.isEmpty() && (code == null || code.isEmpty()) && (value == null || value.isEmpty())
502           && (exclude == null || exclude.isEmpty()) && (period == null || period.isEmpty());
503      }
504
505  public String fhirType() {
506    return "Group.characteristic";
507
508  }
509
510  }
511
512    @Block()
513    public static class GroupMemberComponent extends BackboneElement implements IBaseBackboneElement {
514        /**
515         * A reference to the entity that is a member of the group. Must be consistent with Group.type.
516         */
517        @Child(name = "entity", type = {Patient.class, Practitioner.class, Device.class, Medication.class, Substance.class}, order=1, min=1, max=1, modifier=false, summary=false)
518        @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." )
519        protected Reference entity;
520
521        /**
522         * The actual object that is the target of the reference (A reference to the entity that is a member of the group. Must be consistent with Group.type.)
523         */
524        protected Resource entityTarget;
525
526        /**
527         * The period that the member was in the group, if known.
528         */
529        @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
530        @Description(shortDefinition="Period member belonged to the group", formalDefinition="The period that the member was in the group, if known." )
531        protected Period period;
532
533        /**
534         * A flag to indicate that the member is no longer in the group, but previously may have been a member.
535         */
536        @Child(name = "inactive", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
537        @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." )
538        protected BooleanType inactive;
539
540        private static final long serialVersionUID = -333869055L;
541
542    /*
543     * Constructor
544     */
545      public GroupMemberComponent() {
546        super();
547      }
548
549    /*
550     * Constructor
551     */
552      public GroupMemberComponent(Reference entity) {
553        super();
554        this.entity = entity;
555      }
556
557        /**
558         * @return {@link #entity} (A reference to the entity that is a member of the group. Must be consistent with Group.type.)
559         */
560        public Reference getEntity() { 
561          if (this.entity == null)
562            if (Configuration.errorOnAutoCreate())
563              throw new Error("Attempt to auto-create GroupMemberComponent.entity");
564            else if (Configuration.doAutoCreate())
565              this.entity = new Reference(); // cc
566          return this.entity;
567        }
568
569        public boolean hasEntity() { 
570          return this.entity != null && !this.entity.isEmpty();
571        }
572
573        /**
574         * @param value {@link #entity} (A reference to the entity that is a member of the group. Must be consistent with Group.type.)
575         */
576        public GroupMemberComponent setEntity(Reference value) { 
577          this.entity = value;
578          return this;
579        }
580
581        /**
582         * @return {@link #entity} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (A reference to the entity that is a member of the group. Must be consistent with Group.type.)
583         */
584        public Resource getEntityTarget() { 
585          return this.entityTarget;
586        }
587
588        /**
589         * @param value {@link #entity} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (A reference to the entity that is a member of the group. Must be consistent with Group.type.)
590         */
591        public GroupMemberComponent setEntityTarget(Resource value) { 
592          this.entityTarget = value;
593          return this;
594        }
595
596        /**
597         * @return {@link #period} (The period that the member was in the group, if known.)
598         */
599        public Period getPeriod() { 
600          if (this.period == null)
601            if (Configuration.errorOnAutoCreate())
602              throw new Error("Attempt to auto-create GroupMemberComponent.period");
603            else if (Configuration.doAutoCreate())
604              this.period = new Period(); // cc
605          return this.period;
606        }
607
608        public boolean hasPeriod() { 
609          return this.period != null && !this.period.isEmpty();
610        }
611
612        /**
613         * @param value {@link #period} (The period that the member was in the group, if known.)
614         */
615        public GroupMemberComponent setPeriod(Period value) { 
616          this.period = value;
617          return this;
618        }
619
620        /**
621         * @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
622         */
623        public BooleanType getInactiveElement() { 
624          if (this.inactive == null)
625            if (Configuration.errorOnAutoCreate())
626              throw new Error("Attempt to auto-create GroupMemberComponent.inactive");
627            else if (Configuration.doAutoCreate())
628              this.inactive = new BooleanType(); // bb
629          return this.inactive;
630        }
631
632        public boolean hasInactiveElement() { 
633          return this.inactive != null && !this.inactive.isEmpty();
634        }
635
636        public boolean hasInactive() { 
637          return this.inactive != null && !this.inactive.isEmpty();
638        }
639
640        /**
641         * @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
642         */
643        public GroupMemberComponent setInactiveElement(BooleanType value) { 
644          this.inactive = value;
645          return this;
646        }
647
648        /**
649         * @return A flag to indicate that the member is no longer in the group, but previously may have been a member.
650         */
651        public boolean getInactive() { 
652          return this.inactive == null || this.inactive.isEmpty() ? false : this.inactive.getValue();
653        }
654
655        /**
656         * @param value A flag to indicate that the member is no longer in the group, but previously may have been a member.
657         */
658        public GroupMemberComponent setInactive(boolean value) { 
659            if (this.inactive == null)
660              this.inactive = new BooleanType();
661            this.inactive.setValue(value);
662          return this;
663        }
664
665        protected void listChildren(List<Property> childrenList) {
666          super.listChildren(childrenList);
667          childrenList.add(new Property("entity", "Reference(Patient|Practitioner|Device|Medication|Substance)", "A reference to the entity that is a member of the group. Must be consistent with Group.type.", 0, java.lang.Integer.MAX_VALUE, entity));
668          childrenList.add(new Property("period", "Period", "The period that the member was in the group, if known.", 0, java.lang.Integer.MAX_VALUE, period));
669          childrenList.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, java.lang.Integer.MAX_VALUE, inactive));
670        }
671
672      @Override
673      public void setProperty(String name, Base value) throws FHIRException {
674        if (name.equals("entity"))
675          this.entity = castToReference(value); // Reference
676        else if (name.equals("period"))
677          this.period = castToPeriod(value); // Period
678        else if (name.equals("inactive"))
679          this.inactive = castToBoolean(value); // BooleanType
680        else
681          super.setProperty(name, value);
682      }
683
684      @Override
685      public Base addChild(String name) throws FHIRException {
686        if (name.equals("entity")) {
687          this.entity = new Reference();
688          return this.entity;
689        }
690        else if (name.equals("period")) {
691          this.period = new Period();
692          return this.period;
693        }
694        else if (name.equals("inactive")) {
695          throw new FHIRException("Cannot call addChild on a primitive type Group.inactive");
696        }
697        else
698          return super.addChild(name);
699      }
700
701      public GroupMemberComponent copy() {
702        GroupMemberComponent dst = new GroupMemberComponent();
703        copyValues(dst);
704        dst.entity = entity == null ? null : entity.copy();
705        dst.period = period == null ? null : period.copy();
706        dst.inactive = inactive == null ? null : inactive.copy();
707        return dst;
708      }
709
710      @Override
711      public boolean equalsDeep(Base other) {
712        if (!super.equalsDeep(other))
713          return false;
714        if (!(other instanceof GroupMemberComponent))
715          return false;
716        GroupMemberComponent o = (GroupMemberComponent) other;
717        return compareDeep(entity, o.entity, true) && compareDeep(period, o.period, true) && compareDeep(inactive, o.inactive, true)
718          ;
719      }
720
721      @Override
722      public boolean equalsShallow(Base other) {
723        if (!super.equalsShallow(other))
724          return false;
725        if (!(other instanceof GroupMemberComponent))
726          return false;
727        GroupMemberComponent o = (GroupMemberComponent) other;
728        return compareValues(inactive, o.inactive, true);
729      }
730
731      public boolean isEmpty() {
732        return super.isEmpty() && (entity == null || entity.isEmpty()) && (period == null || period.isEmpty())
733           && (inactive == null || inactive.isEmpty());
734      }
735
736  public String fhirType() {
737    return "Group.member";
738
739  }
740
741  }
742
743    /**
744     * A unique business identifier for this group.
745     */
746    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
747    @Description(shortDefinition="Unique id", formalDefinition="A unique business identifier for this group." )
748    protected List<Identifier> identifier;
749
750    /**
751     * Identifies the broad classification of the kind of resources the group includes.
752     */
753    @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
754    @Description(shortDefinition="person | animal | practitioner | device | medication | substance", formalDefinition="Identifies the broad classification of the kind of resources the group includes." )
755    protected Enumeration<GroupType> type;
756
757    /**
758     * If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.
759     */
760    @Child(name = "actual", type = {BooleanType.class}, order=2, min=1, max=1, modifier=false, summary=true)
761    @Description(shortDefinition="Descriptive or actual", formalDefinition="If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals." )
762    protected BooleanType actual;
763
764    /**
765     * Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.
766     */
767    @Child(name = "code", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=true)
768    @Description(shortDefinition="Kind of Group members", formalDefinition="Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc." )
769    protected CodeableConcept code;
770
771    /**
772     * A label assigned to the group for human identification and communication.
773     */
774    @Child(name = "name", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
775    @Description(shortDefinition="Label for Group", formalDefinition="A label assigned to the group for human identification and communication." )
776    protected StringType name;
777
778    /**
779     * A count of the number of resource instances that are part of the group.
780     */
781    @Child(name = "quantity", type = {UnsignedIntType.class}, order=5, min=0, max=1, modifier=false, summary=true)
782    @Description(shortDefinition="Number of members", formalDefinition="A count of the number of resource instances that are part of the group." )
783    protected UnsignedIntType quantity;
784
785    /**
786     * Identifies the traits shared by members of the group.
787     */
788    @Child(name = "characteristic", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
789    @Description(shortDefinition="Trait of group members", formalDefinition="Identifies the traits shared by members of the group." )
790    protected List<GroupCharacteristicComponent> characteristic;
791
792    /**
793     * Identifies the resource instances that are members of the group.
794     */
795    @Child(name = "member", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
796    @Description(shortDefinition="Who or what is in group", formalDefinition="Identifies the resource instances that are members of the group." )
797    protected List<GroupMemberComponent> member;
798
799    private static final long serialVersionUID = 1401345819L;
800
801  /*
802   * Constructor
803   */
804    public Group() {
805      super();
806    }
807
808  /*
809   * Constructor
810   */
811    public Group(Enumeration<GroupType> type, BooleanType actual) {
812      super();
813      this.type = type;
814      this.actual = actual;
815    }
816
817    /**
818     * @return {@link #identifier} (A unique business identifier for this group.)
819     */
820    public List<Identifier> getIdentifier() { 
821      if (this.identifier == null)
822        this.identifier = new ArrayList<Identifier>();
823      return this.identifier;
824    }
825
826    public boolean hasIdentifier() { 
827      if (this.identifier == null)
828        return false;
829      for (Identifier item : this.identifier)
830        if (!item.isEmpty())
831          return true;
832      return false;
833    }
834
835    /**
836     * @return {@link #identifier} (A unique business identifier for this group.)
837     */
838    // syntactic sugar
839    public Identifier addIdentifier() { //3
840      Identifier t = new Identifier();
841      if (this.identifier == null)
842        this.identifier = new ArrayList<Identifier>();
843      this.identifier.add(t);
844      return t;
845    }
846
847    // syntactic sugar
848    public Group addIdentifier(Identifier t) { //3
849      if (t == null)
850        return this;
851      if (this.identifier == null)
852        this.identifier = new ArrayList<Identifier>();
853      this.identifier.add(t);
854      return this;
855    }
856
857    /**
858     * @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
859     */
860    public Enumeration<GroupType> getTypeElement() { 
861      if (this.type == null)
862        if (Configuration.errorOnAutoCreate())
863          throw new Error("Attempt to auto-create Group.type");
864        else if (Configuration.doAutoCreate())
865          this.type = new Enumeration<GroupType>(new GroupTypeEnumFactory()); // bb
866      return this.type;
867    }
868
869    public boolean hasTypeElement() { 
870      return this.type != null && !this.type.isEmpty();
871    }
872
873    public boolean hasType() { 
874      return this.type != null && !this.type.isEmpty();
875    }
876
877    /**
878     * @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
879     */
880    public Group setTypeElement(Enumeration<GroupType> value) { 
881      this.type = value;
882      return this;
883    }
884
885    /**
886     * @return Identifies the broad classification of the kind of resources the group includes.
887     */
888    public GroupType getType() { 
889      return this.type == null ? null : this.type.getValue();
890    }
891
892    /**
893     * @param value Identifies the broad classification of the kind of resources the group includes.
894     */
895    public Group setType(GroupType value) { 
896        if (this.type == null)
897          this.type = new Enumeration<GroupType>(new GroupTypeEnumFactory());
898        this.type.setValue(value);
899      return this;
900    }
901
902    /**
903     * @return {@link #actual} (If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.). This is the underlying object with id, value and extensions. The accessor "getActual" gives direct access to the value
904     */
905    public BooleanType getActualElement() { 
906      if (this.actual == null)
907        if (Configuration.errorOnAutoCreate())
908          throw new Error("Attempt to auto-create Group.actual");
909        else if (Configuration.doAutoCreate())
910          this.actual = new BooleanType(); // bb
911      return this.actual;
912    }
913
914    public boolean hasActualElement() { 
915      return this.actual != null && !this.actual.isEmpty();
916    }
917
918    public boolean hasActual() { 
919      return this.actual != null && !this.actual.isEmpty();
920    }
921
922    /**
923     * @param value {@link #actual} (If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.). This is the underlying object with id, value and extensions. The accessor "getActual" gives direct access to the value
924     */
925    public Group setActualElement(BooleanType value) { 
926      this.actual = value;
927      return this;
928    }
929
930    /**
931     * @return If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.
932     */
933    public boolean getActual() { 
934      return this.actual == null || this.actual.isEmpty() ? false : this.actual.getValue();
935    }
936
937    /**
938     * @param value If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.
939     */
940    public Group setActual(boolean value) { 
941        if (this.actual == null)
942          this.actual = new BooleanType();
943        this.actual.setValue(value);
944      return this;
945    }
946
947    /**
948     * @return {@link #code} (Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.)
949     */
950    public CodeableConcept getCode() { 
951      if (this.code == null)
952        if (Configuration.errorOnAutoCreate())
953          throw new Error("Attempt to auto-create Group.code");
954        else if (Configuration.doAutoCreate())
955          this.code = new CodeableConcept(); // cc
956      return this.code;
957    }
958
959    public boolean hasCode() { 
960      return this.code != null && !this.code.isEmpty();
961    }
962
963    /**
964     * @param value {@link #code} (Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.)
965     */
966    public Group setCode(CodeableConcept value) { 
967      this.code = value;
968      return this;
969    }
970
971    /**
972     * @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
973     */
974    public StringType getNameElement() { 
975      if (this.name == null)
976        if (Configuration.errorOnAutoCreate())
977          throw new Error("Attempt to auto-create Group.name");
978        else if (Configuration.doAutoCreate())
979          this.name = new StringType(); // bb
980      return this.name;
981    }
982
983    public boolean hasNameElement() { 
984      return this.name != null && !this.name.isEmpty();
985    }
986
987    public boolean hasName() { 
988      return this.name != null && !this.name.isEmpty();
989    }
990
991    /**
992     * @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
993     */
994    public Group setNameElement(StringType value) { 
995      this.name = value;
996      return this;
997    }
998
999    /**
1000     * @return A label assigned to the group for human identification and communication.
1001     */
1002    public String getName() { 
1003      return this.name == null ? null : this.name.getValue();
1004    }
1005
1006    /**
1007     * @param value A label assigned to the group for human identification and communication.
1008     */
1009    public Group setName(String value) { 
1010      if (Utilities.noString(value))
1011        this.name = null;
1012      else {
1013        if (this.name == null)
1014          this.name = new StringType();
1015        this.name.setValue(value);
1016      }
1017      return this;
1018    }
1019
1020    /**
1021     * @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
1022     */
1023    public UnsignedIntType getQuantityElement() { 
1024      if (this.quantity == null)
1025        if (Configuration.errorOnAutoCreate())
1026          throw new Error("Attempt to auto-create Group.quantity");
1027        else if (Configuration.doAutoCreate())
1028          this.quantity = new UnsignedIntType(); // bb
1029      return this.quantity;
1030    }
1031
1032    public boolean hasQuantityElement() { 
1033      return this.quantity != null && !this.quantity.isEmpty();
1034    }
1035
1036    public boolean hasQuantity() { 
1037      return this.quantity != null && !this.quantity.isEmpty();
1038    }
1039
1040    /**
1041     * @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
1042     */
1043    public Group setQuantityElement(UnsignedIntType value) { 
1044      this.quantity = value;
1045      return this;
1046    }
1047
1048    /**
1049     * @return A count of the number of resource instances that are part of the group.
1050     */
1051    public int getQuantity() { 
1052      return this.quantity == null || this.quantity.isEmpty() ? 0 : this.quantity.getValue();
1053    }
1054
1055    /**
1056     * @param value A count of the number of resource instances that are part of the group.
1057     */
1058    public Group setQuantity(int value) { 
1059        if (this.quantity == null)
1060          this.quantity = new UnsignedIntType();
1061        this.quantity.setValue(value);
1062      return this;
1063    }
1064
1065    /**
1066     * @return {@link #characteristic} (Identifies the traits shared by members of the group.)
1067     */
1068    public List<GroupCharacteristicComponent> getCharacteristic() { 
1069      if (this.characteristic == null)
1070        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1071      return this.characteristic;
1072    }
1073
1074    public boolean hasCharacteristic() { 
1075      if (this.characteristic == null)
1076        return false;
1077      for (GroupCharacteristicComponent item : this.characteristic)
1078        if (!item.isEmpty())
1079          return true;
1080      return false;
1081    }
1082
1083    /**
1084     * @return {@link #characteristic} (Identifies the traits shared by members of the group.)
1085     */
1086    // syntactic sugar
1087    public GroupCharacteristicComponent addCharacteristic() { //3
1088      GroupCharacteristicComponent t = new GroupCharacteristicComponent();
1089      if (this.characteristic == null)
1090        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1091      this.characteristic.add(t);
1092      return t;
1093    }
1094
1095    // syntactic sugar
1096    public Group addCharacteristic(GroupCharacteristicComponent t) { //3
1097      if (t == null)
1098        return this;
1099      if (this.characteristic == null)
1100        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1101      this.characteristic.add(t);
1102      return this;
1103    }
1104
1105    /**
1106     * @return {@link #member} (Identifies the resource instances that are members of the group.)
1107     */
1108    public List<GroupMemberComponent> getMember() { 
1109      if (this.member == null)
1110        this.member = new ArrayList<GroupMemberComponent>();
1111      return this.member;
1112    }
1113
1114    public boolean hasMember() { 
1115      if (this.member == null)
1116        return false;
1117      for (GroupMemberComponent item : this.member)
1118        if (!item.isEmpty())
1119          return true;
1120      return false;
1121    }
1122
1123    /**
1124     * @return {@link #member} (Identifies the resource instances that are members of the group.)
1125     */
1126    // syntactic sugar
1127    public GroupMemberComponent addMember() { //3
1128      GroupMemberComponent t = new GroupMemberComponent();
1129      if (this.member == null)
1130        this.member = new ArrayList<GroupMemberComponent>();
1131      this.member.add(t);
1132      return t;
1133    }
1134
1135    // syntactic sugar
1136    public Group addMember(GroupMemberComponent t) { //3
1137      if (t == null)
1138        return this;
1139      if (this.member == null)
1140        this.member = new ArrayList<GroupMemberComponent>();
1141      this.member.add(t);
1142      return this;
1143    }
1144
1145      protected void listChildren(List<Property> childrenList) {
1146        super.listChildren(childrenList);
1147        childrenList.add(new Property("identifier", "Identifier", "A unique business identifier for this group.", 0, java.lang.Integer.MAX_VALUE, identifier));
1148        childrenList.add(new Property("type", "code", "Identifies the broad classification of the kind of resources the group includes.", 0, java.lang.Integer.MAX_VALUE, type));
1149        childrenList.add(new Property("actual", "boolean", "If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.", 0, java.lang.Integer.MAX_VALUE, actual));
1150        childrenList.add(new Property("code", "CodeableConcept", "Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc.", 0, java.lang.Integer.MAX_VALUE, code));
1151        childrenList.add(new Property("name", "string", "A label assigned to the group for human identification and communication.", 0, java.lang.Integer.MAX_VALUE, name));
1152        childrenList.add(new Property("quantity", "unsignedInt", "A count of the number of resource instances that are part of the group.", 0, java.lang.Integer.MAX_VALUE, quantity));
1153        childrenList.add(new Property("characteristic", "", "Identifies the traits shared by members of the group.", 0, java.lang.Integer.MAX_VALUE, characteristic));
1154        childrenList.add(new Property("member", "", "Identifies the resource instances that are members of the group.", 0, java.lang.Integer.MAX_VALUE, member));
1155      }
1156
1157      @Override
1158      public void setProperty(String name, Base value) throws FHIRException {
1159        if (name.equals("identifier"))
1160          this.getIdentifier().add(castToIdentifier(value));
1161        else if (name.equals("type"))
1162          this.type = new GroupTypeEnumFactory().fromType(value); // Enumeration<GroupType>
1163        else if (name.equals("actual"))
1164          this.actual = castToBoolean(value); // BooleanType
1165        else if (name.equals("code"))
1166          this.code = castToCodeableConcept(value); // CodeableConcept
1167        else if (name.equals("name"))
1168          this.name = castToString(value); // StringType
1169        else if (name.equals("quantity"))
1170          this.quantity = castToUnsignedInt(value); // UnsignedIntType
1171        else if (name.equals("characteristic"))
1172          this.getCharacteristic().add((GroupCharacteristicComponent) value);
1173        else if (name.equals("member"))
1174          this.getMember().add((GroupMemberComponent) value);
1175        else
1176          super.setProperty(name, value);
1177      }
1178
1179      @Override
1180      public Base addChild(String name) throws FHIRException {
1181        if (name.equals("identifier")) {
1182          return addIdentifier();
1183        }
1184        else if (name.equals("type")) {
1185          throw new FHIRException("Cannot call addChild on a primitive type Group.type");
1186        }
1187        else if (name.equals("actual")) {
1188          throw new FHIRException("Cannot call addChild on a primitive type Group.actual");
1189        }
1190        else if (name.equals("code")) {
1191          this.code = new CodeableConcept();
1192          return this.code;
1193        }
1194        else if (name.equals("name")) {
1195          throw new FHIRException("Cannot call addChild on a primitive type Group.name");
1196        }
1197        else if (name.equals("quantity")) {
1198          throw new FHIRException("Cannot call addChild on a primitive type Group.quantity");
1199        }
1200        else if (name.equals("characteristic")) {
1201          return addCharacteristic();
1202        }
1203        else if (name.equals("member")) {
1204          return addMember();
1205        }
1206        else
1207          return super.addChild(name);
1208      }
1209
1210  public String fhirType() {
1211    return "Group";
1212
1213  }
1214
1215      public Group copy() {
1216        Group dst = new Group();
1217        copyValues(dst);
1218        if (identifier != null) {
1219          dst.identifier = new ArrayList<Identifier>();
1220          for (Identifier i : identifier)
1221            dst.identifier.add(i.copy());
1222        };
1223        dst.type = type == null ? null : type.copy();
1224        dst.actual = actual == null ? null : actual.copy();
1225        dst.code = code == null ? null : code.copy();
1226        dst.name = name == null ? null : name.copy();
1227        dst.quantity = quantity == null ? null : quantity.copy();
1228        if (characteristic != null) {
1229          dst.characteristic = new ArrayList<GroupCharacteristicComponent>();
1230          for (GroupCharacteristicComponent i : characteristic)
1231            dst.characteristic.add(i.copy());
1232        };
1233        if (member != null) {
1234          dst.member = new ArrayList<GroupMemberComponent>();
1235          for (GroupMemberComponent i : member)
1236            dst.member.add(i.copy());
1237        };
1238        return dst;
1239      }
1240
1241      protected Group typedCopy() {
1242        return copy();
1243      }
1244
1245      @Override
1246      public boolean equalsDeep(Base other) {
1247        if (!super.equalsDeep(other))
1248          return false;
1249        if (!(other instanceof Group))
1250          return false;
1251        Group o = (Group) other;
1252        return compareDeep(identifier, o.identifier, true) && compareDeep(type, o.type, true) && compareDeep(actual, o.actual, true)
1253           && compareDeep(code, o.code, true) && compareDeep(name, o.name, true) && compareDeep(quantity, o.quantity, true)
1254           && compareDeep(characteristic, o.characteristic, true) && compareDeep(member, o.member, true);
1255      }
1256
1257      @Override
1258      public boolean equalsShallow(Base other) {
1259        if (!super.equalsShallow(other))
1260          return false;
1261        if (!(other instanceof Group))
1262          return false;
1263        Group o = (Group) other;
1264        return compareValues(type, o.type, true) && compareValues(actual, o.actual, true) && compareValues(name, o.name, true)
1265           && compareValues(quantity, o.quantity, true);
1266      }
1267
1268      public boolean isEmpty() {
1269        return super.isEmpty() && (identifier == null || identifier.isEmpty()) && (type == null || type.isEmpty())
1270           && (actual == null || actual.isEmpty()) && (code == null || code.isEmpty()) && (name == null || name.isEmpty())
1271           && (quantity == null || quantity.isEmpty()) && (characteristic == null || characteristic.isEmpty())
1272           && (member == null || member.isEmpty());
1273      }
1274
1275  @Override
1276  public ResourceType getResourceType() {
1277    return ResourceType.Group;
1278   }
1279
1280  @SearchParamDefinition(name="actual", path="Group.actual", description="Descriptive or actual", type="token" )
1281  public static final String SP_ACTUAL = "actual";
1282  @SearchParamDefinition(name="identifier", path="Group.identifier", description="Unique id", type="token" )
1283  public static final String SP_IDENTIFIER = "identifier";
1284  @SearchParamDefinition(name="characteristic-value", path="null", description="A composite of both characteristic and value", type="composite" )
1285  public static final String SP_CHARACTERISTICVALUE = "characteristic-value";
1286  @SearchParamDefinition(name="code", path="Group.code", description="The kind of resources contained", type="token" )
1287  public static final String SP_CODE = "code";
1288  @SearchParamDefinition(name="member", path="Group.member.entity", description="Reference to the group member", type="reference" )
1289  public static final String SP_MEMBER = "member";
1290  @SearchParamDefinition(name="exclude", path="Group.characteristic.exclude", description="Group includes or excludes", type="token" )
1291  public static final String SP_EXCLUDE = "exclude";
1292  @SearchParamDefinition(name="type", path="Group.type", description="The type of resources the group contains", type="token" )
1293  public static final String SP_TYPE = "type";
1294  @SearchParamDefinition(name="value", path="Group.characteristic.value[x]", description="Value held by characteristic", type="token" )
1295  public static final String SP_VALUE = "value";
1296  @SearchParamDefinition(name="characteristic", path="Group.characteristic.code", description="Kind of characteristic", type="token" )
1297  public static final String SP_CHARACTERISTIC = "characteristic";
1298
1299}