001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Thu, Sep 13, 2018 09:04-0400 for FHIR v3.5.0
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import ca.uhn.fhir.model.api.annotation.ResourceDef;
038import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
039import ca.uhn.fhir.model.api.annotation.Child;
040import ca.uhn.fhir.model.api.annotation.ChildOrder;
041import ca.uhn.fhir.model.api.annotation.Description;
042import ca.uhn.fhir.model.api.annotation.Block;
043import org.hl7.fhir.instance.model.api.*;
044import org.hl7.fhir.exceptions.FHIRException;
045/**
046 * Significant health conditions for a person related to the patient relevant in the context of care for the patient.
047 */
048@ResourceDef(name="FamilyMemberHistory", profile="http://hl7.org/fhir/StructureDefinition/FamilyMemberHistory")
049public class FamilyMemberHistory extends DomainResource {
050
051    public enum FamilyHistoryStatus {
052        /**
053         * Some health information is known and captured, but not complete - see notes for details.
054         */
055        PARTIAL, 
056        /**
057         * All available related health information is captured as of the date (and possibly time) when the family member history was taken.
058         */
059        COMPLETED, 
060        /**
061         * This instance should not have been part of this patient's medical record.
062         */
063        ENTEREDINERROR, 
064        /**
065         * Health information for this individual is unavailable/unknown.
066         */
067        HEALTHUNKNOWN, 
068        /**
069         * added to help the parsers with the generic types
070         */
071        NULL;
072        public static FamilyHistoryStatus fromCode(String codeString) throws FHIRException {
073            if (codeString == null || "".equals(codeString))
074                return null;
075        if ("partial".equals(codeString))
076          return PARTIAL;
077        if ("completed".equals(codeString))
078          return COMPLETED;
079        if ("entered-in-error".equals(codeString))
080          return ENTEREDINERROR;
081        if ("health-unknown".equals(codeString))
082          return HEALTHUNKNOWN;
083        if (Configuration.isAcceptInvalidEnums())
084          return null;
085        else
086          throw new FHIRException("Unknown FamilyHistoryStatus code '"+codeString+"'");
087        }
088        public String toCode() {
089          switch (this) {
090            case PARTIAL: return "partial";
091            case COMPLETED: return "completed";
092            case ENTEREDINERROR: return "entered-in-error";
093            case HEALTHUNKNOWN: return "health-unknown";
094            default: return "?";
095          }
096        }
097        public String getSystem() {
098          switch (this) {
099            case PARTIAL: return "http://hl7.org/fhir/history-status";
100            case COMPLETED: return "http://hl7.org/fhir/history-status";
101            case ENTEREDINERROR: return "http://hl7.org/fhir/history-status";
102            case HEALTHUNKNOWN: return "http://hl7.org/fhir/history-status";
103            default: return "?";
104          }
105        }
106        public String getDefinition() {
107          switch (this) {
108            case PARTIAL: return "Some health information is known and captured, but not complete - see notes for details.";
109            case COMPLETED: return "All available related health information is captured as of the date (and possibly time) when the family member history was taken.";
110            case ENTEREDINERROR: return "This instance should not have been part of this patient's medical record.";
111            case HEALTHUNKNOWN: return "Health information for this individual is unavailable/unknown.";
112            default: return "?";
113          }
114        }
115        public String getDisplay() {
116          switch (this) {
117            case PARTIAL: return "Partial";
118            case COMPLETED: return "Completed";
119            case ENTEREDINERROR: return "Entered in error";
120            case HEALTHUNKNOWN: return "Health unknown";
121            default: return "?";
122          }
123        }
124    }
125
126  public static class FamilyHistoryStatusEnumFactory implements EnumFactory<FamilyHistoryStatus> {
127    public FamilyHistoryStatus fromCode(String codeString) throws IllegalArgumentException {
128      if (codeString == null || "".equals(codeString))
129            if (codeString == null || "".equals(codeString))
130                return null;
131        if ("partial".equals(codeString))
132          return FamilyHistoryStatus.PARTIAL;
133        if ("completed".equals(codeString))
134          return FamilyHistoryStatus.COMPLETED;
135        if ("entered-in-error".equals(codeString))
136          return FamilyHistoryStatus.ENTEREDINERROR;
137        if ("health-unknown".equals(codeString))
138          return FamilyHistoryStatus.HEALTHUNKNOWN;
139        throw new IllegalArgumentException("Unknown FamilyHistoryStatus code '"+codeString+"'");
140        }
141        public Enumeration<FamilyHistoryStatus> fromType(Base code) throws FHIRException {
142          if (code == null)
143            return null;
144          if (code.isEmpty())
145            return new Enumeration<FamilyHistoryStatus>(this);
146          String codeString = ((PrimitiveType) code).asStringValue();
147          if (codeString == null || "".equals(codeString))
148            return null;
149        if ("partial".equals(codeString))
150          return new Enumeration<FamilyHistoryStatus>(this, FamilyHistoryStatus.PARTIAL);
151        if ("completed".equals(codeString))
152          return new Enumeration<FamilyHistoryStatus>(this, FamilyHistoryStatus.COMPLETED);
153        if ("entered-in-error".equals(codeString))
154          return new Enumeration<FamilyHistoryStatus>(this, FamilyHistoryStatus.ENTEREDINERROR);
155        if ("health-unknown".equals(codeString))
156          return new Enumeration<FamilyHistoryStatus>(this, FamilyHistoryStatus.HEALTHUNKNOWN);
157        throw new FHIRException("Unknown FamilyHistoryStatus code '"+codeString+"'");
158        }
159    public String toCode(FamilyHistoryStatus code) {
160      if (code == FamilyHistoryStatus.PARTIAL)
161        return "partial";
162      if (code == FamilyHistoryStatus.COMPLETED)
163        return "completed";
164      if (code == FamilyHistoryStatus.ENTEREDINERROR)
165        return "entered-in-error";
166      if (code == FamilyHistoryStatus.HEALTHUNKNOWN)
167        return "health-unknown";
168      return "?";
169      }
170    public String toSystem(FamilyHistoryStatus code) {
171      return code.getSystem();
172      }
173    }
174
175    @Block()
176    public static class FamilyMemberHistoryConditionComponent extends BackboneElement implements IBaseBackboneElement {
177        /**
178         * The actual condition specified. Could be a coded condition (like MI or Diabetes) or a less specific string like 'cancer' depending on how much is known about the condition and the capabilities of the creating system.
179         */
180        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
181        @Description(shortDefinition="Condition suffered by relation", formalDefinition="The actual condition specified. Could be a coded condition (like MI or Diabetes) or a less specific string like 'cancer' depending on how much is known about the condition and the capabilities of the creating system." )
182        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-code")
183        protected CodeableConcept code;
184
185        /**
186         * Indicates what happened as a result of this condition.  If the condition resulted in death, deceased date is captured on the relation.
187         */
188        @Child(name = "outcome", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
189        @Description(shortDefinition="deceased | permanent disability | etc.", formalDefinition="Indicates what happened as a result of this condition.  If the condition resulted in death, deceased date is captured on the relation." )
190        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-outcome")
191        protected CodeableConcept outcome;
192
193        /**
194         * Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.
195         */
196        @Child(name = "onset", type = {Age.class, Range.class, Period.class, StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
197        @Description(shortDefinition="When condition first manifested", formalDefinition="Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence." )
198        protected Type onset;
199
200        /**
201         * An area where general notes can be placed about this specific condition.
202         */
203        @Child(name = "note", type = {Annotation.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
204        @Description(shortDefinition="Extra information about condition", formalDefinition="An area where general notes can be placed about this specific condition." )
205        protected List<Annotation> note;
206
207        private static final long serialVersionUID = 598309281L;
208
209    /**
210     * Constructor
211     */
212      public FamilyMemberHistoryConditionComponent() {
213        super();
214      }
215
216    /**
217     * Constructor
218     */
219      public FamilyMemberHistoryConditionComponent(CodeableConcept code) {
220        super();
221        this.code = code;
222      }
223
224        /**
225         * @return {@link #code} (The actual condition specified. Could be a coded condition (like MI or Diabetes) or a less specific string like 'cancer' depending on how much is known about the condition and the capabilities of the creating system.)
226         */
227        public CodeableConcept getCode() { 
228          if (this.code == null)
229            if (Configuration.errorOnAutoCreate())
230              throw new Error("Attempt to auto-create FamilyMemberHistoryConditionComponent.code");
231            else if (Configuration.doAutoCreate())
232              this.code = new CodeableConcept(); // cc
233          return this.code;
234        }
235
236        public boolean hasCode() { 
237          return this.code != null && !this.code.isEmpty();
238        }
239
240        /**
241         * @param value {@link #code} (The actual condition specified. Could be a coded condition (like MI or Diabetes) or a less specific string like 'cancer' depending on how much is known about the condition and the capabilities of the creating system.)
242         */
243        public FamilyMemberHistoryConditionComponent setCode(CodeableConcept value) { 
244          this.code = value;
245          return this;
246        }
247
248        /**
249         * @return {@link #outcome} (Indicates what happened as a result of this condition.  If the condition resulted in death, deceased date is captured on the relation.)
250         */
251        public CodeableConcept getOutcome() { 
252          if (this.outcome == null)
253            if (Configuration.errorOnAutoCreate())
254              throw new Error("Attempt to auto-create FamilyMemberHistoryConditionComponent.outcome");
255            else if (Configuration.doAutoCreate())
256              this.outcome = new CodeableConcept(); // cc
257          return this.outcome;
258        }
259
260        public boolean hasOutcome() { 
261          return this.outcome != null && !this.outcome.isEmpty();
262        }
263
264        /**
265         * @param value {@link #outcome} (Indicates what happened as a result of this condition.  If the condition resulted in death, deceased date is captured on the relation.)
266         */
267        public FamilyMemberHistoryConditionComponent setOutcome(CodeableConcept value) { 
268          this.outcome = value;
269          return this;
270        }
271
272        /**
273         * @return {@link #onset} (Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.)
274         */
275        public Type getOnset() { 
276          return this.onset;
277        }
278
279        /**
280         * @return {@link #onset} (Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.)
281         */
282        public Age getOnsetAge() throws FHIRException { 
283          if (this.onset == null)
284            return null;
285          if (!(this.onset instanceof Age))
286            throw new FHIRException("Type mismatch: the type Age was expected, but "+this.onset.getClass().getName()+" was encountered");
287          return (Age) this.onset;
288        }
289
290        public boolean hasOnsetAge() { 
291          return this != null && this.onset instanceof Age;
292        }
293
294        /**
295         * @return {@link #onset} (Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.)
296         */
297        public Range getOnsetRange() throws FHIRException { 
298          if (this.onset == null)
299            return null;
300          if (!(this.onset instanceof Range))
301            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.onset.getClass().getName()+" was encountered");
302          return (Range) this.onset;
303        }
304
305        public boolean hasOnsetRange() { 
306          return this != null && this.onset instanceof Range;
307        }
308
309        /**
310         * @return {@link #onset} (Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.)
311         */
312        public Period getOnsetPeriod() throws FHIRException { 
313          if (this.onset == null)
314            return null;
315          if (!(this.onset instanceof Period))
316            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.onset.getClass().getName()+" was encountered");
317          return (Period) this.onset;
318        }
319
320        public boolean hasOnsetPeriod() { 
321          return this != null && this.onset instanceof Period;
322        }
323
324        /**
325         * @return {@link #onset} (Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.)
326         */
327        public StringType getOnsetStringType() throws FHIRException { 
328          if (this.onset == null)
329            return null;
330          if (!(this.onset instanceof StringType))
331            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.onset.getClass().getName()+" was encountered");
332          return (StringType) this.onset;
333        }
334
335        public boolean hasOnsetStringType() { 
336          return this != null && this.onset instanceof StringType;
337        }
338
339        public boolean hasOnset() { 
340          return this.onset != null && !this.onset.isEmpty();
341        }
342
343        /**
344         * @param value {@link #onset} (Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.)
345         */
346        public FamilyMemberHistoryConditionComponent setOnset(Type value) { 
347          if (value != null && !(value instanceof Age || value instanceof Range || value instanceof Period || value instanceof StringType))
348            throw new Error("Not the right type for FamilyMemberHistory.condition.onset[x]: "+value.fhirType());
349          this.onset = value;
350          return this;
351        }
352
353        /**
354         * @return {@link #note} (An area where general notes can be placed about this specific condition.)
355         */
356        public List<Annotation> getNote() { 
357          if (this.note == null)
358            this.note = new ArrayList<Annotation>();
359          return this.note;
360        }
361
362        /**
363         * @return Returns a reference to <code>this</code> for easy method chaining
364         */
365        public FamilyMemberHistoryConditionComponent setNote(List<Annotation> theNote) { 
366          this.note = theNote;
367          return this;
368        }
369
370        public boolean hasNote() { 
371          if (this.note == null)
372            return false;
373          for (Annotation item : this.note)
374            if (!item.isEmpty())
375              return true;
376          return false;
377        }
378
379        public Annotation addNote() { //3
380          Annotation t = new Annotation();
381          if (this.note == null)
382            this.note = new ArrayList<Annotation>();
383          this.note.add(t);
384          return t;
385        }
386
387        public FamilyMemberHistoryConditionComponent addNote(Annotation t) { //3
388          if (t == null)
389            return this;
390          if (this.note == null)
391            this.note = new ArrayList<Annotation>();
392          this.note.add(t);
393          return this;
394        }
395
396        /**
397         * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
398         */
399        public Annotation getNoteFirstRep() { 
400          if (getNote().isEmpty()) {
401            addNote();
402          }
403          return getNote().get(0);
404        }
405
406        protected void listChildren(List<Property> children) {
407          super.listChildren(children);
408          children.add(new Property("code", "CodeableConcept", "The actual condition specified. Could be a coded condition (like MI or Diabetes) or a less specific string like 'cancer' depending on how much is known about the condition and the capabilities of the creating system.", 0, 1, code));
409          children.add(new Property("outcome", "CodeableConcept", "Indicates what happened as a result of this condition.  If the condition resulted in death, deceased date is captured on the relation.", 0, 1, outcome));
410          children.add(new Property("onset[x]", "Age|Range|Period|string", "Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.", 0, 1, onset));
411          children.add(new Property("note", "Annotation", "An area where general notes can be placed about this specific condition.", 0, java.lang.Integer.MAX_VALUE, note));
412        }
413
414        @Override
415        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
416          switch (_hash) {
417          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The actual condition specified. Could be a coded condition (like MI or Diabetes) or a less specific string like 'cancer' depending on how much is known about the condition and the capabilities of the creating system.", 0, 1, code);
418          case -1106507950: /*outcome*/  return new Property("outcome", "CodeableConcept", "Indicates what happened as a result of this condition.  If the condition resulted in death, deceased date is captured on the relation.", 0, 1, outcome);
419          case -1886216323: /*onset[x]*/  return new Property("onset[x]", "Age|Range|Period|string", "Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.", 0, 1, onset);
420          case 105901603: /*onset*/  return new Property("onset[x]", "Age|Range|Period|string", "Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.", 0, 1, onset);
421          case -1886241828: /*onsetAge*/  return new Property("onset[x]", "Age|Range|Period|string", "Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.", 0, 1, onset);
422          case -186664742: /*onsetRange*/  return new Property("onset[x]", "Age|Range|Period|string", "Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.", 0, 1, onset);
423          case -1545082428: /*onsetPeriod*/  return new Property("onset[x]", "Age|Range|Period|string", "Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.", 0, 1, onset);
424          case -1445342188: /*onsetString*/  return new Property("onset[x]", "Age|Range|Period|string", "Either the age of onset, range of approximate age or descriptive string can be recorded.  For conditions with multiple occurrences, this describes the first known occurrence.", 0, 1, onset);
425          case 3387378: /*note*/  return new Property("note", "Annotation", "An area where general notes can be placed about this specific condition.", 0, java.lang.Integer.MAX_VALUE, note);
426          default: return super.getNamedProperty(_hash, _name, _checkValid);
427          }
428
429        }
430
431      @Override
432      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
433        switch (hash) {
434        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
435        case -1106507950: /*outcome*/ return this.outcome == null ? new Base[0] : new Base[] {this.outcome}; // CodeableConcept
436        case 105901603: /*onset*/ return this.onset == null ? new Base[0] : new Base[] {this.onset}; // Type
437        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
438        default: return super.getProperty(hash, name, checkValid);
439        }
440
441      }
442
443      @Override
444      public Base setProperty(int hash, String name, Base value) throws FHIRException {
445        switch (hash) {
446        case 3059181: // code
447          this.code = castToCodeableConcept(value); // CodeableConcept
448          return value;
449        case -1106507950: // outcome
450          this.outcome = castToCodeableConcept(value); // CodeableConcept
451          return value;
452        case 105901603: // onset
453          this.onset = castToType(value); // Type
454          return value;
455        case 3387378: // note
456          this.getNote().add(castToAnnotation(value)); // Annotation
457          return value;
458        default: return super.setProperty(hash, name, value);
459        }
460
461      }
462
463      @Override
464      public Base setProperty(String name, Base value) throws FHIRException {
465        if (name.equals("code")) {
466          this.code = castToCodeableConcept(value); // CodeableConcept
467        } else if (name.equals("outcome")) {
468          this.outcome = castToCodeableConcept(value); // CodeableConcept
469        } else if (name.equals("onset[x]")) {
470          this.onset = castToType(value); // Type
471        } else if (name.equals("note")) {
472          this.getNote().add(castToAnnotation(value));
473        } else
474          return super.setProperty(name, value);
475        return value;
476      }
477
478      @Override
479      public Base makeProperty(int hash, String name) throws FHIRException {
480        switch (hash) {
481        case 3059181:  return getCode(); 
482        case -1106507950:  return getOutcome(); 
483        case -1886216323:  return getOnset(); 
484        case 105901603:  return getOnset(); 
485        case 3387378:  return addNote(); 
486        default: return super.makeProperty(hash, name);
487        }
488
489      }
490
491      @Override
492      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
493        switch (hash) {
494        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
495        case -1106507950: /*outcome*/ return new String[] {"CodeableConcept"};
496        case 105901603: /*onset*/ return new String[] {"Age", "Range", "Period", "string"};
497        case 3387378: /*note*/ return new String[] {"Annotation"};
498        default: return super.getTypesForProperty(hash, name);
499        }
500
501      }
502
503      @Override
504      public Base addChild(String name) throws FHIRException {
505        if (name.equals("code")) {
506          this.code = new CodeableConcept();
507          return this.code;
508        }
509        else if (name.equals("outcome")) {
510          this.outcome = new CodeableConcept();
511          return this.outcome;
512        }
513        else if (name.equals("onsetAge")) {
514          this.onset = new Age();
515          return this.onset;
516        }
517        else if (name.equals("onsetRange")) {
518          this.onset = new Range();
519          return this.onset;
520        }
521        else if (name.equals("onsetPeriod")) {
522          this.onset = new Period();
523          return this.onset;
524        }
525        else if (name.equals("onsetString")) {
526          this.onset = new StringType();
527          return this.onset;
528        }
529        else if (name.equals("note")) {
530          return addNote();
531        }
532        else
533          return super.addChild(name);
534      }
535
536      public FamilyMemberHistoryConditionComponent copy() {
537        FamilyMemberHistoryConditionComponent dst = new FamilyMemberHistoryConditionComponent();
538        copyValues(dst);
539        dst.code = code == null ? null : code.copy();
540        dst.outcome = outcome == null ? null : outcome.copy();
541        dst.onset = onset == null ? null : onset.copy();
542        if (note != null) {
543          dst.note = new ArrayList<Annotation>();
544          for (Annotation i : note)
545            dst.note.add(i.copy());
546        };
547        return dst;
548      }
549
550      @Override
551      public boolean equalsDeep(Base other_) {
552        if (!super.equalsDeep(other_))
553          return false;
554        if (!(other_ instanceof FamilyMemberHistoryConditionComponent))
555          return false;
556        FamilyMemberHistoryConditionComponent o = (FamilyMemberHistoryConditionComponent) other_;
557        return compareDeep(code, o.code, true) && compareDeep(outcome, o.outcome, true) && compareDeep(onset, o.onset, true)
558           && compareDeep(note, o.note, true);
559      }
560
561      @Override
562      public boolean equalsShallow(Base other_) {
563        if (!super.equalsShallow(other_))
564          return false;
565        if (!(other_ instanceof FamilyMemberHistoryConditionComponent))
566          return false;
567        FamilyMemberHistoryConditionComponent o = (FamilyMemberHistoryConditionComponent) other_;
568        return true;
569      }
570
571      public boolean isEmpty() {
572        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, outcome, onset, note
573          );
574      }
575
576  public String fhirType() {
577    return "FamilyMemberHistory.condition";
578
579  }
580
581  }
582
583    /**
584     * Business identifiers assigned to this family member history by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
585     */
586    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
587    @Description(shortDefinition="External Id(s) for this record", formalDefinition="Business identifiers assigned to this family member history by the performer or other systems which remain constant as the resource is updated and propagates from server to server." )
588    protected List<Identifier> identifier;
589
590    /**
591     * The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.
592     */
593    @Child(name = "instantiatesCanonical", type = {CanonicalType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
594    @Description(shortDefinition="Instantiates FHIR protocol or definition", formalDefinition="The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory." )
595    protected List<CanonicalType> instantiatesCanonical;
596
597    /**
598     * The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.
599     */
600    @Child(name = "instantiatesUri", type = {UriType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
601    @Description(shortDefinition="Instantiates external protocol or definition", formalDefinition="The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory." )
602    protected List<UriType> instantiatesUri;
603
604    /**
605     * A code specifying the status of the record of the family history of a specific family member.
606     */
607    @Child(name = "status", type = {CodeType.class}, order=3, min=1, max=1, modifier=true, summary=true)
608    @Description(shortDefinition="partial | completed | entered-in-error | health-unknown", formalDefinition="A code specifying the status of the record of the family history of a specific family member." )
609    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/history-status")
610    protected Enumeration<FamilyHistoryStatus> status;
611
612    /**
613     * Describes why the family member's history is not available.
614     */
615    @Child(name = "dataAbsentReason", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=true)
616    @Description(shortDefinition="subject-unknown | withheld | unable-to-obtain | deferred", formalDefinition="Describes why the family member's history is not available." )
617    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/history-absent-reason")
618    protected CodeableConcept dataAbsentReason;
619
620    /**
621     * The person who this history concerns.
622     */
623    @Child(name = "patient", type = {Patient.class}, order=5, min=1, max=1, modifier=false, summary=true)
624    @Description(shortDefinition="Patient history is about", formalDefinition="The person who this history concerns." )
625    protected Reference patient;
626
627    /**
628     * The actual object that is the target of the reference (The person who this history concerns.)
629     */
630    protected Patient patientTarget;
631
632    /**
633     * The date (and possibly time) when the family member history was recorded or last updated.
634     */
635    @Child(name = "date", type = {DateTimeType.class}, order=6, min=0, max=1, modifier=false, summary=true)
636    @Description(shortDefinition="When history was recorded or last updated", formalDefinition="The date (and possibly time) when the family member history was recorded or last updated." )
637    protected DateTimeType date;
638
639    /**
640     * This will either be a name or a description; e.g. "Aunt Susan", "my cousin with the red hair".
641     */
642    @Child(name = "name", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=true)
643    @Description(shortDefinition="The family member described", formalDefinition="This will either be a name or a description; e.g. \"Aunt Susan\", \"my cousin with the red hair\"." )
644    protected StringType name;
645
646    /**
647     * The type of relationship this person has to the patient (father, mother, brother etc.).
648     */
649    @Child(name = "relationship", type = {CodeableConcept.class}, order=8, min=1, max=1, modifier=false, summary=true)
650    @Description(shortDefinition="Relationship to the subject", formalDefinition="The type of relationship this person has to the patient (father, mother, brother etc.)." )
651    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v3-FamilyMember")
652    protected CodeableConcept relationship;
653
654    /**
655     * The birth sex of the family member.
656     */
657    @Child(name = "gender", type = {CodeableConcept.class}, order=9, min=0, max=1, modifier=false, summary=true)
658    @Description(shortDefinition="male | female | unknown", formalDefinition="The birth sex of the family member." )
659    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/birth-sex")
660    protected CodeableConcept gender;
661
662    /**
663     * The actual or approximate date of birth of the relative.
664     */
665    @Child(name = "born", type = {Period.class, DateType.class, StringType.class}, order=10, min=0, max=1, modifier=false, summary=false)
666    @Description(shortDefinition="(approximate) date of birth", formalDefinition="The actual or approximate date of birth of the relative." )
667    protected Type born;
668
669    /**
670     * The age of the relative at the time the family member history is recorded.
671     */
672    @Child(name = "age", type = {Age.class, Range.class, StringType.class}, order=11, min=0, max=1, modifier=false, summary=true)
673    @Description(shortDefinition="(approximate) age", formalDefinition="The age of the relative at the time the family member history is recorded." )
674    protected Type age;
675
676    /**
677     * If true, indicates that the age value specified is an estimated value.
678     */
679    @Child(name = "estimatedAge", type = {BooleanType.class}, order=12, min=0, max=1, modifier=false, summary=true)
680    @Description(shortDefinition="Age is estimated?", formalDefinition="If true, indicates that the age value specified is an estimated value." )
681    protected BooleanType estimatedAge;
682
683    /**
684     * Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
685     */
686    @Child(name = "deceased", type = {BooleanType.class, Age.class, Range.class, DateType.class, StringType.class}, order=13, min=0, max=1, modifier=false, summary=true)
687    @Description(shortDefinition="Dead? How old/when?", formalDefinition="Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record." )
688    protected Type deceased;
689
690    /**
691     * Describes why the family member history occurred in coded or textual form.
692     */
693    @Child(name = "reasonCode", type = {CodeableConcept.class}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
694    @Description(shortDefinition="Why was family member history performed?", formalDefinition="Describes why the family member history occurred in coded or textual form." )
695    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/clinical-findings")
696    protected List<CodeableConcept> reasonCode;
697
698    /**
699     * Indicates a Condition, Observation, AllergyIntolerance, or QuestionnaireResponse that justifies this family member history event.
700     */
701    @Child(name = "reasonReference", type = {Condition.class, Observation.class, AllergyIntolerance.class, QuestionnaireResponse.class, DiagnosticReport.class, DocumentReference.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
702    @Description(shortDefinition="Why was family member history performed?", formalDefinition="Indicates a Condition, Observation, AllergyIntolerance, or QuestionnaireResponse that justifies this family member history event." )
703    protected List<Reference> reasonReference;
704    /**
705     * The actual objects that are the target of the reference (Indicates a Condition, Observation, AllergyIntolerance, or QuestionnaireResponse that justifies this family member history event.)
706     */
707    protected List<Resource> reasonReferenceTarget;
708
709
710    /**
711     * This property allows a non condition-specific note to the made about the related person. Ideally, the note would be in the condition property, but this is not always possible.
712     */
713    @Child(name = "note", type = {Annotation.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
714    @Description(shortDefinition="General note about related person", formalDefinition="This property allows a non condition-specific note to the made about the related person. Ideally, the note would be in the condition property, but this is not always possible." )
715    protected List<Annotation> note;
716
717    /**
718     * The significant Conditions (or condition) that the family member had. This is a repeating section to allow a system to represent more than one condition per resource, though there is nothing stopping multiple resources - one per condition.
719     */
720    @Child(name = "condition", type = {}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
721    @Description(shortDefinition="Condition that the related person had", formalDefinition="The significant Conditions (or condition) that the family member had. This is a repeating section to allow a system to represent more than one condition per resource, though there is nothing stopping multiple resources - one per condition." )
722    protected List<FamilyMemberHistoryConditionComponent> condition;
723
724    private static final long serialVersionUID = -1337103863L;
725
726  /**
727   * Constructor
728   */
729    public FamilyMemberHistory() {
730      super();
731    }
732
733  /**
734   * Constructor
735   */
736    public FamilyMemberHistory(Enumeration<FamilyHistoryStatus> status, Reference patient, CodeableConcept relationship) {
737      super();
738      this.status = status;
739      this.patient = patient;
740      this.relationship = relationship;
741    }
742
743    /**
744     * @return {@link #identifier} (Business identifiers assigned to this family member history by the performer or other systems which remain constant as the resource is updated and propagates from server to server.)
745     */
746    public List<Identifier> getIdentifier() { 
747      if (this.identifier == null)
748        this.identifier = new ArrayList<Identifier>();
749      return this.identifier;
750    }
751
752    /**
753     * @return Returns a reference to <code>this</code> for easy method chaining
754     */
755    public FamilyMemberHistory setIdentifier(List<Identifier> theIdentifier) { 
756      this.identifier = theIdentifier;
757      return this;
758    }
759
760    public boolean hasIdentifier() { 
761      if (this.identifier == null)
762        return false;
763      for (Identifier item : this.identifier)
764        if (!item.isEmpty())
765          return true;
766      return false;
767    }
768
769    public Identifier addIdentifier() { //3
770      Identifier t = new Identifier();
771      if (this.identifier == null)
772        this.identifier = new ArrayList<Identifier>();
773      this.identifier.add(t);
774      return t;
775    }
776
777    public FamilyMemberHistory addIdentifier(Identifier t) { //3
778      if (t == null)
779        return this;
780      if (this.identifier == null)
781        this.identifier = new ArrayList<Identifier>();
782      this.identifier.add(t);
783      return this;
784    }
785
786    /**
787     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
788     */
789    public Identifier getIdentifierFirstRep() { 
790      if (getIdentifier().isEmpty()) {
791        addIdentifier();
792      }
793      return getIdentifier().get(0);
794    }
795
796    /**
797     * @return {@link #instantiatesCanonical} (The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.)
798     */
799    public List<CanonicalType> getInstantiatesCanonical() { 
800      if (this.instantiatesCanonical == null)
801        this.instantiatesCanonical = new ArrayList<CanonicalType>();
802      return this.instantiatesCanonical;
803    }
804
805    /**
806     * @return Returns a reference to <code>this</code> for easy method chaining
807     */
808    public FamilyMemberHistory setInstantiatesCanonical(List<CanonicalType> theInstantiatesCanonical) { 
809      this.instantiatesCanonical = theInstantiatesCanonical;
810      return this;
811    }
812
813    public boolean hasInstantiatesCanonical() { 
814      if (this.instantiatesCanonical == null)
815        return false;
816      for (CanonicalType item : this.instantiatesCanonical)
817        if (!item.isEmpty())
818          return true;
819      return false;
820    }
821
822    /**
823     * @return {@link #instantiatesCanonical} (The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.)
824     */
825    public CanonicalType addInstantiatesCanonicalElement() {//2 
826      CanonicalType t = new CanonicalType();
827      if (this.instantiatesCanonical == null)
828        this.instantiatesCanonical = new ArrayList<CanonicalType>();
829      this.instantiatesCanonical.add(t);
830      return t;
831    }
832
833    /**
834     * @param value {@link #instantiatesCanonical} (The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.)
835     */
836    public FamilyMemberHistory addInstantiatesCanonical(String value) { //1
837      CanonicalType t = new CanonicalType();
838      t.setValue(value);
839      if (this.instantiatesCanonical == null)
840        this.instantiatesCanonical = new ArrayList<CanonicalType>();
841      this.instantiatesCanonical.add(t);
842      return this;
843    }
844
845    /**
846     * @param value {@link #instantiatesCanonical} (The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.)
847     */
848    public boolean hasInstantiatesCanonical(String value) { 
849      if (this.instantiatesCanonical == null)
850        return false;
851      for (CanonicalType v : this.instantiatesCanonical)
852        if (v.getValue().equals(value)) // canonical(PlanDefinition|Questionnaire|ActivityDefinition|Measure|OperationDefinition)
853          return true;
854      return false;
855    }
856
857    /**
858     * @return {@link #instantiatesUri} (The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.)
859     */
860    public List<UriType> getInstantiatesUri() { 
861      if (this.instantiatesUri == null)
862        this.instantiatesUri = new ArrayList<UriType>();
863      return this.instantiatesUri;
864    }
865
866    /**
867     * @return Returns a reference to <code>this</code> for easy method chaining
868     */
869    public FamilyMemberHistory setInstantiatesUri(List<UriType> theInstantiatesUri) { 
870      this.instantiatesUri = theInstantiatesUri;
871      return this;
872    }
873
874    public boolean hasInstantiatesUri() { 
875      if (this.instantiatesUri == null)
876        return false;
877      for (UriType item : this.instantiatesUri)
878        if (!item.isEmpty())
879          return true;
880      return false;
881    }
882
883    /**
884     * @return {@link #instantiatesUri} (The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.)
885     */
886    public UriType addInstantiatesUriElement() {//2 
887      UriType t = new UriType();
888      if (this.instantiatesUri == null)
889        this.instantiatesUri = new ArrayList<UriType>();
890      this.instantiatesUri.add(t);
891      return t;
892    }
893
894    /**
895     * @param value {@link #instantiatesUri} (The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.)
896     */
897    public FamilyMemberHistory addInstantiatesUri(String value) { //1
898      UriType t = new UriType();
899      t.setValue(value);
900      if (this.instantiatesUri == null)
901        this.instantiatesUri = new ArrayList<UriType>();
902      this.instantiatesUri.add(t);
903      return this;
904    }
905
906    /**
907     * @param value {@link #instantiatesUri} (The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.)
908     */
909    public boolean hasInstantiatesUri(String value) { 
910      if (this.instantiatesUri == null)
911        return false;
912      for (UriType v : this.instantiatesUri)
913        if (v.getValue().equals(value)) // uri
914          return true;
915      return false;
916    }
917
918    /**
919     * @return {@link #status} (A code specifying the status of the record of the family history of a specific family member.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
920     */
921    public Enumeration<FamilyHistoryStatus> getStatusElement() { 
922      if (this.status == null)
923        if (Configuration.errorOnAutoCreate())
924          throw new Error("Attempt to auto-create FamilyMemberHistory.status");
925        else if (Configuration.doAutoCreate())
926          this.status = new Enumeration<FamilyHistoryStatus>(new FamilyHistoryStatusEnumFactory()); // bb
927      return this.status;
928    }
929
930    public boolean hasStatusElement() { 
931      return this.status != null && !this.status.isEmpty();
932    }
933
934    public boolean hasStatus() { 
935      return this.status != null && !this.status.isEmpty();
936    }
937
938    /**
939     * @param value {@link #status} (A code specifying the status of the record of the family history of a specific family member.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
940     */
941    public FamilyMemberHistory setStatusElement(Enumeration<FamilyHistoryStatus> value) { 
942      this.status = value;
943      return this;
944    }
945
946    /**
947     * @return A code specifying the status of the record of the family history of a specific family member.
948     */
949    public FamilyHistoryStatus getStatus() { 
950      return this.status == null ? null : this.status.getValue();
951    }
952
953    /**
954     * @param value A code specifying the status of the record of the family history of a specific family member.
955     */
956    public FamilyMemberHistory setStatus(FamilyHistoryStatus value) { 
957        if (this.status == null)
958          this.status = new Enumeration<FamilyHistoryStatus>(new FamilyHistoryStatusEnumFactory());
959        this.status.setValue(value);
960      return this;
961    }
962
963    /**
964     * @return {@link #dataAbsentReason} (Describes why the family member's history is not available.)
965     */
966    public CodeableConcept getDataAbsentReason() { 
967      if (this.dataAbsentReason == null)
968        if (Configuration.errorOnAutoCreate())
969          throw new Error("Attempt to auto-create FamilyMemberHistory.dataAbsentReason");
970        else if (Configuration.doAutoCreate())
971          this.dataAbsentReason = new CodeableConcept(); // cc
972      return this.dataAbsentReason;
973    }
974
975    public boolean hasDataAbsentReason() { 
976      return this.dataAbsentReason != null && !this.dataAbsentReason.isEmpty();
977    }
978
979    /**
980     * @param value {@link #dataAbsentReason} (Describes why the family member's history is not available.)
981     */
982    public FamilyMemberHistory setDataAbsentReason(CodeableConcept value) { 
983      this.dataAbsentReason = value;
984      return this;
985    }
986
987    /**
988     * @return {@link #patient} (The person who this history concerns.)
989     */
990    public Reference getPatient() { 
991      if (this.patient == null)
992        if (Configuration.errorOnAutoCreate())
993          throw new Error("Attempt to auto-create FamilyMemberHistory.patient");
994        else if (Configuration.doAutoCreate())
995          this.patient = new Reference(); // cc
996      return this.patient;
997    }
998
999    public boolean hasPatient() { 
1000      return this.patient != null && !this.patient.isEmpty();
1001    }
1002
1003    /**
1004     * @param value {@link #patient} (The person who this history concerns.)
1005     */
1006    public FamilyMemberHistory setPatient(Reference value) { 
1007      this.patient = value;
1008      return this;
1009    }
1010
1011    /**
1012     * @return {@link #patient} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The person who this history concerns.)
1013     */
1014    public Patient getPatientTarget() { 
1015      if (this.patientTarget == null)
1016        if (Configuration.errorOnAutoCreate())
1017          throw new Error("Attempt to auto-create FamilyMemberHistory.patient");
1018        else if (Configuration.doAutoCreate())
1019          this.patientTarget = new Patient(); // aa
1020      return this.patientTarget;
1021    }
1022
1023    /**
1024     * @param value {@link #patient} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The person who this history concerns.)
1025     */
1026    public FamilyMemberHistory setPatientTarget(Patient value) { 
1027      this.patientTarget = value;
1028      return this;
1029    }
1030
1031    /**
1032     * @return {@link #date} (The date (and possibly time) when the family member history was recorded or last updated.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1033     */
1034    public DateTimeType getDateElement() { 
1035      if (this.date == null)
1036        if (Configuration.errorOnAutoCreate())
1037          throw new Error("Attempt to auto-create FamilyMemberHistory.date");
1038        else if (Configuration.doAutoCreate())
1039          this.date = new DateTimeType(); // bb
1040      return this.date;
1041    }
1042
1043    public boolean hasDateElement() { 
1044      return this.date != null && !this.date.isEmpty();
1045    }
1046
1047    public boolean hasDate() { 
1048      return this.date != null && !this.date.isEmpty();
1049    }
1050
1051    /**
1052     * @param value {@link #date} (The date (and possibly time) when the family member history was recorded or last updated.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1053     */
1054    public FamilyMemberHistory setDateElement(DateTimeType value) { 
1055      this.date = value;
1056      return this;
1057    }
1058
1059    /**
1060     * @return The date (and possibly time) when the family member history was recorded or last updated.
1061     */
1062    public Date getDate() { 
1063      return this.date == null ? null : this.date.getValue();
1064    }
1065
1066    /**
1067     * @param value The date (and possibly time) when the family member history was recorded or last updated.
1068     */
1069    public FamilyMemberHistory setDate(Date value) { 
1070      if (value == null)
1071        this.date = null;
1072      else {
1073        if (this.date == null)
1074          this.date = new DateTimeType();
1075        this.date.setValue(value);
1076      }
1077      return this;
1078    }
1079
1080    /**
1081     * @return {@link #name} (This will either be a name or a description; e.g. "Aunt Susan", "my cousin with the red hair".). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1082     */
1083    public StringType getNameElement() { 
1084      if (this.name == null)
1085        if (Configuration.errorOnAutoCreate())
1086          throw new Error("Attempt to auto-create FamilyMemberHistory.name");
1087        else if (Configuration.doAutoCreate())
1088          this.name = new StringType(); // bb
1089      return this.name;
1090    }
1091
1092    public boolean hasNameElement() { 
1093      return this.name != null && !this.name.isEmpty();
1094    }
1095
1096    public boolean hasName() { 
1097      return this.name != null && !this.name.isEmpty();
1098    }
1099
1100    /**
1101     * @param value {@link #name} (This will either be a name or a description; e.g. "Aunt Susan", "my cousin with the red hair".). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1102     */
1103    public FamilyMemberHistory setNameElement(StringType value) { 
1104      this.name = value;
1105      return this;
1106    }
1107
1108    /**
1109     * @return This will either be a name or a description; e.g. "Aunt Susan", "my cousin with the red hair".
1110     */
1111    public String getName() { 
1112      return this.name == null ? null : this.name.getValue();
1113    }
1114
1115    /**
1116     * @param value This will either be a name or a description; e.g. "Aunt Susan", "my cousin with the red hair".
1117     */
1118    public FamilyMemberHistory setName(String value) { 
1119      if (Utilities.noString(value))
1120        this.name = null;
1121      else {
1122        if (this.name == null)
1123          this.name = new StringType();
1124        this.name.setValue(value);
1125      }
1126      return this;
1127    }
1128
1129    /**
1130     * @return {@link #relationship} (The type of relationship this person has to the patient (father, mother, brother etc.).)
1131     */
1132    public CodeableConcept getRelationship() { 
1133      if (this.relationship == null)
1134        if (Configuration.errorOnAutoCreate())
1135          throw new Error("Attempt to auto-create FamilyMemberHistory.relationship");
1136        else if (Configuration.doAutoCreate())
1137          this.relationship = new CodeableConcept(); // cc
1138      return this.relationship;
1139    }
1140
1141    public boolean hasRelationship() { 
1142      return this.relationship != null && !this.relationship.isEmpty();
1143    }
1144
1145    /**
1146     * @param value {@link #relationship} (The type of relationship this person has to the patient (father, mother, brother etc.).)
1147     */
1148    public FamilyMemberHistory setRelationship(CodeableConcept value) { 
1149      this.relationship = value;
1150      return this;
1151    }
1152
1153    /**
1154     * @return {@link #gender} (The birth sex of the family member.)
1155     */
1156    public CodeableConcept getGender() { 
1157      if (this.gender == null)
1158        if (Configuration.errorOnAutoCreate())
1159          throw new Error("Attempt to auto-create FamilyMemberHistory.gender");
1160        else if (Configuration.doAutoCreate())
1161          this.gender = new CodeableConcept(); // cc
1162      return this.gender;
1163    }
1164
1165    public boolean hasGender() { 
1166      return this.gender != null && !this.gender.isEmpty();
1167    }
1168
1169    /**
1170     * @param value {@link #gender} (The birth sex of the family member.)
1171     */
1172    public FamilyMemberHistory setGender(CodeableConcept value) { 
1173      this.gender = value;
1174      return this;
1175    }
1176
1177    /**
1178     * @return {@link #born} (The actual or approximate date of birth of the relative.)
1179     */
1180    public Type getBorn() { 
1181      return this.born;
1182    }
1183
1184    /**
1185     * @return {@link #born} (The actual or approximate date of birth of the relative.)
1186     */
1187    public Period getBornPeriod() throws FHIRException { 
1188      if (this.born == null)
1189        return null;
1190      if (!(this.born instanceof Period))
1191        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.born.getClass().getName()+" was encountered");
1192      return (Period) this.born;
1193    }
1194
1195    public boolean hasBornPeriod() { 
1196      return this != null && this.born instanceof Period;
1197    }
1198
1199    /**
1200     * @return {@link #born} (The actual or approximate date of birth of the relative.)
1201     */
1202    public DateType getBornDateType() throws FHIRException { 
1203      if (this.born == null)
1204        return null;
1205      if (!(this.born instanceof DateType))
1206        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.born.getClass().getName()+" was encountered");
1207      return (DateType) this.born;
1208    }
1209
1210    public boolean hasBornDateType() { 
1211      return this != null && this.born instanceof DateType;
1212    }
1213
1214    /**
1215     * @return {@link #born} (The actual or approximate date of birth of the relative.)
1216     */
1217    public StringType getBornStringType() throws FHIRException { 
1218      if (this.born == null)
1219        return null;
1220      if (!(this.born instanceof StringType))
1221        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.born.getClass().getName()+" was encountered");
1222      return (StringType) this.born;
1223    }
1224
1225    public boolean hasBornStringType() { 
1226      return this != null && this.born instanceof StringType;
1227    }
1228
1229    public boolean hasBorn() { 
1230      return this.born != null && !this.born.isEmpty();
1231    }
1232
1233    /**
1234     * @param value {@link #born} (The actual or approximate date of birth of the relative.)
1235     */
1236    public FamilyMemberHistory setBorn(Type value) { 
1237      if (value != null && !(value instanceof Period || value instanceof DateType || value instanceof StringType))
1238        throw new Error("Not the right type for FamilyMemberHistory.born[x]: "+value.fhirType());
1239      this.born = value;
1240      return this;
1241    }
1242
1243    /**
1244     * @return {@link #age} (The age of the relative at the time the family member history is recorded.)
1245     */
1246    public Type getAge() { 
1247      return this.age;
1248    }
1249
1250    /**
1251     * @return {@link #age} (The age of the relative at the time the family member history is recorded.)
1252     */
1253    public Age getAgeAge() throws FHIRException { 
1254      if (this.age == null)
1255        return null;
1256      if (!(this.age instanceof Age))
1257        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.age.getClass().getName()+" was encountered");
1258      return (Age) this.age;
1259    }
1260
1261    public boolean hasAgeAge() { 
1262      return this != null && this.age instanceof Age;
1263    }
1264
1265    /**
1266     * @return {@link #age} (The age of the relative at the time the family member history is recorded.)
1267     */
1268    public Range getAgeRange() throws FHIRException { 
1269      if (this.age == null)
1270        return null;
1271      if (!(this.age instanceof Range))
1272        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.age.getClass().getName()+" was encountered");
1273      return (Range) this.age;
1274    }
1275
1276    public boolean hasAgeRange() { 
1277      return this != null && this.age instanceof Range;
1278    }
1279
1280    /**
1281     * @return {@link #age} (The age of the relative at the time the family member history is recorded.)
1282     */
1283    public StringType getAgeStringType() throws FHIRException { 
1284      if (this.age == null)
1285        return null;
1286      if (!(this.age instanceof StringType))
1287        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.age.getClass().getName()+" was encountered");
1288      return (StringType) this.age;
1289    }
1290
1291    public boolean hasAgeStringType() { 
1292      return this != null && this.age instanceof StringType;
1293    }
1294
1295    public boolean hasAge() { 
1296      return this.age != null && !this.age.isEmpty();
1297    }
1298
1299    /**
1300     * @param value {@link #age} (The age of the relative at the time the family member history is recorded.)
1301     */
1302    public FamilyMemberHistory setAge(Type value) { 
1303      if (value != null && !(value instanceof Age || value instanceof Range || value instanceof StringType))
1304        throw new Error("Not the right type for FamilyMemberHistory.age[x]: "+value.fhirType());
1305      this.age = value;
1306      return this;
1307    }
1308
1309    /**
1310     * @return {@link #estimatedAge} (If true, indicates that the age value specified is an estimated value.). This is the underlying object with id, value and extensions. The accessor "getEstimatedAge" gives direct access to the value
1311     */
1312    public BooleanType getEstimatedAgeElement() { 
1313      if (this.estimatedAge == null)
1314        if (Configuration.errorOnAutoCreate())
1315          throw new Error("Attempt to auto-create FamilyMemberHistory.estimatedAge");
1316        else if (Configuration.doAutoCreate())
1317          this.estimatedAge = new BooleanType(); // bb
1318      return this.estimatedAge;
1319    }
1320
1321    public boolean hasEstimatedAgeElement() { 
1322      return this.estimatedAge != null && !this.estimatedAge.isEmpty();
1323    }
1324
1325    public boolean hasEstimatedAge() { 
1326      return this.estimatedAge != null && !this.estimatedAge.isEmpty();
1327    }
1328
1329    /**
1330     * @param value {@link #estimatedAge} (If true, indicates that the age value specified is an estimated value.). This is the underlying object with id, value and extensions. The accessor "getEstimatedAge" gives direct access to the value
1331     */
1332    public FamilyMemberHistory setEstimatedAgeElement(BooleanType value) { 
1333      this.estimatedAge = value;
1334      return this;
1335    }
1336
1337    /**
1338     * @return If true, indicates that the age value specified is an estimated value.
1339     */
1340    public boolean getEstimatedAge() { 
1341      return this.estimatedAge == null || this.estimatedAge.isEmpty() ? false : this.estimatedAge.getValue();
1342    }
1343
1344    /**
1345     * @param value If true, indicates that the age value specified is an estimated value.
1346     */
1347    public FamilyMemberHistory setEstimatedAge(boolean value) { 
1348        if (this.estimatedAge == null)
1349          this.estimatedAge = new BooleanType();
1350        this.estimatedAge.setValue(value);
1351      return this;
1352    }
1353
1354    /**
1355     * @return {@link #deceased} (Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.)
1356     */
1357    public Type getDeceased() { 
1358      return this.deceased;
1359    }
1360
1361    /**
1362     * @return {@link #deceased} (Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.)
1363     */
1364    public BooleanType getDeceasedBooleanType() throws FHIRException { 
1365      if (this.deceased == null)
1366        return null;
1367      if (!(this.deceased instanceof BooleanType))
1368        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.deceased.getClass().getName()+" was encountered");
1369      return (BooleanType) this.deceased;
1370    }
1371
1372    public boolean hasDeceasedBooleanType() { 
1373      return this != null && this.deceased instanceof BooleanType;
1374    }
1375
1376    /**
1377     * @return {@link #deceased} (Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.)
1378     */
1379    public Age getDeceasedAge() throws FHIRException { 
1380      if (this.deceased == null)
1381        return null;
1382      if (!(this.deceased instanceof Age))
1383        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.deceased.getClass().getName()+" was encountered");
1384      return (Age) this.deceased;
1385    }
1386
1387    public boolean hasDeceasedAge() { 
1388      return this != null && this.deceased instanceof Age;
1389    }
1390
1391    /**
1392     * @return {@link #deceased} (Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.)
1393     */
1394    public Range getDeceasedRange() throws FHIRException { 
1395      if (this.deceased == null)
1396        return null;
1397      if (!(this.deceased instanceof Range))
1398        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.deceased.getClass().getName()+" was encountered");
1399      return (Range) this.deceased;
1400    }
1401
1402    public boolean hasDeceasedRange() { 
1403      return this != null && this.deceased instanceof Range;
1404    }
1405
1406    /**
1407     * @return {@link #deceased} (Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.)
1408     */
1409    public DateType getDeceasedDateType() throws FHIRException { 
1410      if (this.deceased == null)
1411        return null;
1412      if (!(this.deceased instanceof DateType))
1413        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.deceased.getClass().getName()+" was encountered");
1414      return (DateType) this.deceased;
1415    }
1416
1417    public boolean hasDeceasedDateType() { 
1418      return this != null && this.deceased instanceof DateType;
1419    }
1420
1421    /**
1422     * @return {@link #deceased} (Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.)
1423     */
1424    public StringType getDeceasedStringType() throws FHIRException { 
1425      if (this.deceased == null)
1426        return null;
1427      if (!(this.deceased instanceof StringType))
1428        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.deceased.getClass().getName()+" was encountered");
1429      return (StringType) this.deceased;
1430    }
1431
1432    public boolean hasDeceasedStringType() { 
1433      return this != null && this.deceased instanceof StringType;
1434    }
1435
1436    public boolean hasDeceased() { 
1437      return this.deceased != null && !this.deceased.isEmpty();
1438    }
1439
1440    /**
1441     * @param value {@link #deceased} (Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.)
1442     */
1443    public FamilyMemberHistory setDeceased(Type value) { 
1444      if (value != null && !(value instanceof BooleanType || value instanceof Age || value instanceof Range || value instanceof DateType || value instanceof StringType))
1445        throw new Error("Not the right type for FamilyMemberHistory.deceased[x]: "+value.fhirType());
1446      this.deceased = value;
1447      return this;
1448    }
1449
1450    /**
1451     * @return {@link #reasonCode} (Describes why the family member history occurred in coded or textual form.)
1452     */
1453    public List<CodeableConcept> getReasonCode() { 
1454      if (this.reasonCode == null)
1455        this.reasonCode = new ArrayList<CodeableConcept>();
1456      return this.reasonCode;
1457    }
1458
1459    /**
1460     * @return Returns a reference to <code>this</code> for easy method chaining
1461     */
1462    public FamilyMemberHistory setReasonCode(List<CodeableConcept> theReasonCode) { 
1463      this.reasonCode = theReasonCode;
1464      return this;
1465    }
1466
1467    public boolean hasReasonCode() { 
1468      if (this.reasonCode == null)
1469        return false;
1470      for (CodeableConcept item : this.reasonCode)
1471        if (!item.isEmpty())
1472          return true;
1473      return false;
1474    }
1475
1476    public CodeableConcept addReasonCode() { //3
1477      CodeableConcept t = new CodeableConcept();
1478      if (this.reasonCode == null)
1479        this.reasonCode = new ArrayList<CodeableConcept>();
1480      this.reasonCode.add(t);
1481      return t;
1482    }
1483
1484    public FamilyMemberHistory addReasonCode(CodeableConcept t) { //3
1485      if (t == null)
1486        return this;
1487      if (this.reasonCode == null)
1488        this.reasonCode = new ArrayList<CodeableConcept>();
1489      this.reasonCode.add(t);
1490      return this;
1491    }
1492
1493    /**
1494     * @return The first repetition of repeating field {@link #reasonCode}, creating it if it does not already exist
1495     */
1496    public CodeableConcept getReasonCodeFirstRep() { 
1497      if (getReasonCode().isEmpty()) {
1498        addReasonCode();
1499      }
1500      return getReasonCode().get(0);
1501    }
1502
1503    /**
1504     * @return {@link #reasonReference} (Indicates a Condition, Observation, AllergyIntolerance, or QuestionnaireResponse that justifies this family member history event.)
1505     */
1506    public List<Reference> getReasonReference() { 
1507      if (this.reasonReference == null)
1508        this.reasonReference = new ArrayList<Reference>();
1509      return this.reasonReference;
1510    }
1511
1512    /**
1513     * @return Returns a reference to <code>this</code> for easy method chaining
1514     */
1515    public FamilyMemberHistory setReasonReference(List<Reference> theReasonReference) { 
1516      this.reasonReference = theReasonReference;
1517      return this;
1518    }
1519
1520    public boolean hasReasonReference() { 
1521      if (this.reasonReference == null)
1522        return false;
1523      for (Reference item : this.reasonReference)
1524        if (!item.isEmpty())
1525          return true;
1526      return false;
1527    }
1528
1529    public Reference addReasonReference() { //3
1530      Reference t = new Reference();
1531      if (this.reasonReference == null)
1532        this.reasonReference = new ArrayList<Reference>();
1533      this.reasonReference.add(t);
1534      return t;
1535    }
1536
1537    public FamilyMemberHistory addReasonReference(Reference t) { //3
1538      if (t == null)
1539        return this;
1540      if (this.reasonReference == null)
1541        this.reasonReference = new ArrayList<Reference>();
1542      this.reasonReference.add(t);
1543      return this;
1544    }
1545
1546    /**
1547     * @return The first repetition of repeating field {@link #reasonReference}, creating it if it does not already exist
1548     */
1549    public Reference getReasonReferenceFirstRep() { 
1550      if (getReasonReference().isEmpty()) {
1551        addReasonReference();
1552      }
1553      return getReasonReference().get(0);
1554    }
1555
1556    /**
1557     * @deprecated Use Reference#setResource(IBaseResource) instead
1558     */
1559    @Deprecated
1560    public List<Resource> getReasonReferenceTarget() { 
1561      if (this.reasonReferenceTarget == null)
1562        this.reasonReferenceTarget = new ArrayList<Resource>();
1563      return this.reasonReferenceTarget;
1564    }
1565
1566    /**
1567     * @return {@link #note} (This property allows a non condition-specific note to the made about the related person. Ideally, the note would be in the condition property, but this is not always possible.)
1568     */
1569    public List<Annotation> getNote() { 
1570      if (this.note == null)
1571        this.note = new ArrayList<Annotation>();
1572      return this.note;
1573    }
1574
1575    /**
1576     * @return Returns a reference to <code>this</code> for easy method chaining
1577     */
1578    public FamilyMemberHistory setNote(List<Annotation> theNote) { 
1579      this.note = theNote;
1580      return this;
1581    }
1582
1583    public boolean hasNote() { 
1584      if (this.note == null)
1585        return false;
1586      for (Annotation item : this.note)
1587        if (!item.isEmpty())
1588          return true;
1589      return false;
1590    }
1591
1592    public Annotation addNote() { //3
1593      Annotation t = new Annotation();
1594      if (this.note == null)
1595        this.note = new ArrayList<Annotation>();
1596      this.note.add(t);
1597      return t;
1598    }
1599
1600    public FamilyMemberHistory addNote(Annotation t) { //3
1601      if (t == null)
1602        return this;
1603      if (this.note == null)
1604        this.note = new ArrayList<Annotation>();
1605      this.note.add(t);
1606      return this;
1607    }
1608
1609    /**
1610     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
1611     */
1612    public Annotation getNoteFirstRep() { 
1613      if (getNote().isEmpty()) {
1614        addNote();
1615      }
1616      return getNote().get(0);
1617    }
1618
1619    /**
1620     * @return {@link #condition} (The significant Conditions (or condition) that the family member had. This is a repeating section to allow a system to represent more than one condition per resource, though there is nothing stopping multiple resources - one per condition.)
1621     */
1622    public List<FamilyMemberHistoryConditionComponent> getCondition() { 
1623      if (this.condition == null)
1624        this.condition = new ArrayList<FamilyMemberHistoryConditionComponent>();
1625      return this.condition;
1626    }
1627
1628    /**
1629     * @return Returns a reference to <code>this</code> for easy method chaining
1630     */
1631    public FamilyMemberHistory setCondition(List<FamilyMemberHistoryConditionComponent> theCondition) { 
1632      this.condition = theCondition;
1633      return this;
1634    }
1635
1636    public boolean hasCondition() { 
1637      if (this.condition == null)
1638        return false;
1639      for (FamilyMemberHistoryConditionComponent item : this.condition)
1640        if (!item.isEmpty())
1641          return true;
1642      return false;
1643    }
1644
1645    public FamilyMemberHistoryConditionComponent addCondition() { //3
1646      FamilyMemberHistoryConditionComponent t = new FamilyMemberHistoryConditionComponent();
1647      if (this.condition == null)
1648        this.condition = new ArrayList<FamilyMemberHistoryConditionComponent>();
1649      this.condition.add(t);
1650      return t;
1651    }
1652
1653    public FamilyMemberHistory addCondition(FamilyMemberHistoryConditionComponent t) { //3
1654      if (t == null)
1655        return this;
1656      if (this.condition == null)
1657        this.condition = new ArrayList<FamilyMemberHistoryConditionComponent>();
1658      this.condition.add(t);
1659      return this;
1660    }
1661
1662    /**
1663     * @return The first repetition of repeating field {@link #condition}, creating it if it does not already exist
1664     */
1665    public FamilyMemberHistoryConditionComponent getConditionFirstRep() { 
1666      if (getCondition().isEmpty()) {
1667        addCondition();
1668      }
1669      return getCondition().get(0);
1670    }
1671
1672      protected void listChildren(List<Property> children) {
1673        super.listChildren(children);
1674        children.add(new Property("identifier", "Identifier", "Business identifiers assigned to this family member history by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier));
1675        children.add(new Property("instantiatesCanonical", "canonical(PlanDefinition|Questionnaire|ActivityDefinition|Measure|OperationDefinition)", "The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.", 0, java.lang.Integer.MAX_VALUE, instantiatesCanonical));
1676        children.add(new Property("instantiatesUri", "uri", "The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.", 0, java.lang.Integer.MAX_VALUE, instantiatesUri));
1677        children.add(new Property("status", "code", "A code specifying the status of the record of the family history of a specific family member.", 0, 1, status));
1678        children.add(new Property("dataAbsentReason", "CodeableConcept", "Describes why the family member's history is not available.", 0, 1, dataAbsentReason));
1679        children.add(new Property("patient", "Reference(Patient)", "The person who this history concerns.", 0, 1, patient));
1680        children.add(new Property("date", "dateTime", "The date (and possibly time) when the family member history was recorded or last updated.", 0, 1, date));
1681        children.add(new Property("name", "string", "This will either be a name or a description; e.g. \"Aunt Susan\", \"my cousin with the red hair\".", 0, 1, name));
1682        children.add(new Property("relationship", "CodeableConcept", "The type of relationship this person has to the patient (father, mother, brother etc.).", 0, 1, relationship));
1683        children.add(new Property("gender", "CodeableConcept", "The birth sex of the family member.", 0, 1, gender));
1684        children.add(new Property("born[x]", "Period|date|string", "The actual or approximate date of birth of the relative.", 0, 1, born));
1685        children.add(new Property("age[x]", "Age|Range|string", "The age of the relative at the time the family member history is recorded.", 0, 1, age));
1686        children.add(new Property("estimatedAge", "boolean", "If true, indicates that the age value specified is an estimated value.", 0, 1, estimatedAge));
1687        children.add(new Property("deceased[x]", "boolean|Age|Range|date|string", "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", 0, 1, deceased));
1688        children.add(new Property("reasonCode", "CodeableConcept", "Describes why the family member history occurred in coded or textual form.", 0, java.lang.Integer.MAX_VALUE, reasonCode));
1689        children.add(new Property("reasonReference", "Reference(Condition|Observation|AllergyIntolerance|QuestionnaireResponse|DiagnosticReport|DocumentReference)", "Indicates a Condition, Observation, AllergyIntolerance, or QuestionnaireResponse that justifies this family member history event.", 0, java.lang.Integer.MAX_VALUE, reasonReference));
1690        children.add(new Property("note", "Annotation", "This property allows a non condition-specific note to the made about the related person. Ideally, the note would be in the condition property, but this is not always possible.", 0, java.lang.Integer.MAX_VALUE, note));
1691        children.add(new Property("condition", "", "The significant Conditions (or condition) that the family member had. This is a repeating section to allow a system to represent more than one condition per resource, though there is nothing stopping multiple resources - one per condition.", 0, java.lang.Integer.MAX_VALUE, condition));
1692      }
1693
1694      @Override
1695      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1696        switch (_hash) {
1697        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifiers assigned to this family member history by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier);
1698        case 8911915: /*instantiatesCanonical*/  return new Property("instantiatesCanonical", "canonical(PlanDefinition|Questionnaire|ActivityDefinition|Measure|OperationDefinition)", "The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.", 0, java.lang.Integer.MAX_VALUE, instantiatesCanonical);
1699        case -1926393373: /*instantiatesUri*/  return new Property("instantiatesUri", "uri", "The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.", 0, java.lang.Integer.MAX_VALUE, instantiatesUri);
1700        case -892481550: /*status*/  return new Property("status", "code", "A code specifying the status of the record of the family history of a specific family member.", 0, 1, status);
1701        case 1034315687: /*dataAbsentReason*/  return new Property("dataAbsentReason", "CodeableConcept", "Describes why the family member's history is not available.", 0, 1, dataAbsentReason);
1702        case -791418107: /*patient*/  return new Property("patient", "Reference(Patient)", "The person who this history concerns.", 0, 1, patient);
1703        case 3076014: /*date*/  return new Property("date", "dateTime", "The date (and possibly time) when the family member history was recorded or last updated.", 0, 1, date);
1704        case 3373707: /*name*/  return new Property("name", "string", "This will either be a name or a description; e.g. \"Aunt Susan\", \"my cousin with the red hair\".", 0, 1, name);
1705        case -261851592: /*relationship*/  return new Property("relationship", "CodeableConcept", "The type of relationship this person has to the patient (father, mother, brother etc.).", 0, 1, relationship);
1706        case -1249512767: /*gender*/  return new Property("gender", "CodeableConcept", "The birth sex of the family member.", 0, 1, gender);
1707        case 67532951: /*born[x]*/  return new Property("born[x]", "Period|date|string", "The actual or approximate date of birth of the relative.", 0, 1, born);
1708        case 3029833: /*born*/  return new Property("born[x]", "Period|date|string", "The actual or approximate date of birth of the relative.", 0, 1, born);
1709        case 1497711210: /*bornPeriod*/  return new Property("born[x]", "Period|date|string", "The actual or approximate date of birth of the relative.", 0, 1, born);
1710        case 2092814999: /*bornDate*/  return new Property("born[x]", "Period|date|string", "The actual or approximate date of birth of the relative.", 0, 1, born);
1711        case 1597451450: /*bornString*/  return new Property("born[x]", "Period|date|string", "The actual or approximate date of birth of the relative.", 0, 1, born);
1712        case -1419716831: /*age[x]*/  return new Property("age[x]", "Age|Range|string", "The age of the relative at the time the family member history is recorded.", 0, 1, age);
1713        case 96511: /*age*/  return new Property("age[x]", "Age|Range|string", "The age of the relative at the time the family member history is recorded.", 0, 1, age);
1714        case -1419742336: /*ageAge*/  return new Property("age[x]", "Age|Range|string", "The age of the relative at the time the family member history is recorded.", 0, 1, age);
1715        case 1442748286: /*ageRange*/  return new Property("age[x]", "Age|Range|string", "The age of the relative at the time the family member history is recorded.", 0, 1, age);
1716        case 1821821424: /*ageString*/  return new Property("age[x]", "Age|Range|string", "The age of the relative at the time the family member history is recorded.", 0, 1, age);
1717        case 2130167587: /*estimatedAge*/  return new Property("estimatedAge", "boolean", "If true, indicates that the age value specified is an estimated value.", 0, 1, estimatedAge);
1718        case -1311442804: /*deceased[x]*/  return new Property("deceased[x]", "boolean|Age|Range|date|string", "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", 0, 1, deceased);
1719        case 561497972: /*deceased*/  return new Property("deceased[x]", "boolean|Age|Range|date|string", "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", 0, 1, deceased);
1720        case 497463828: /*deceasedBoolean*/  return new Property("deceased[x]", "boolean|Age|Range|date|string", "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", 0, 1, deceased);
1721        case -1311468309: /*deceasedAge*/  return new Property("deceased[x]", "boolean|Age|Range|date|string", "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", 0, 1, deceased);
1722        case -1880094167: /*deceasedRange*/  return new Property("deceased[x]", "boolean|Age|Range|date|string", "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", 0, 1, deceased);
1723        case -2000727742: /*deceasedDate*/  return new Property("deceased[x]", "boolean|Age|Range|date|string", "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", 0, 1, deceased);
1724        case 1892920485: /*deceasedString*/  return new Property("deceased[x]", "boolean|Age|Range|date|string", "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", 0, 1, deceased);
1725        case 722137681: /*reasonCode*/  return new Property("reasonCode", "CodeableConcept", "Describes why the family member history occurred in coded or textual form.", 0, java.lang.Integer.MAX_VALUE, reasonCode);
1726        case -1146218137: /*reasonReference*/  return new Property("reasonReference", "Reference(Condition|Observation|AllergyIntolerance|QuestionnaireResponse|DiagnosticReport|DocumentReference)", "Indicates a Condition, Observation, AllergyIntolerance, or QuestionnaireResponse that justifies this family member history event.", 0, java.lang.Integer.MAX_VALUE, reasonReference);
1727        case 3387378: /*note*/  return new Property("note", "Annotation", "This property allows a non condition-specific note to the made about the related person. Ideally, the note would be in the condition property, but this is not always possible.", 0, java.lang.Integer.MAX_VALUE, note);
1728        case -861311717: /*condition*/  return new Property("condition", "", "The significant Conditions (or condition) that the family member had. This is a repeating section to allow a system to represent more than one condition per resource, though there is nothing stopping multiple resources - one per condition.", 0, java.lang.Integer.MAX_VALUE, condition);
1729        default: return super.getNamedProperty(_hash, _name, _checkValid);
1730        }
1731
1732      }
1733
1734      @Override
1735      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1736        switch (hash) {
1737        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1738        case 8911915: /*instantiatesCanonical*/ return this.instantiatesCanonical == null ? new Base[0] : this.instantiatesCanonical.toArray(new Base[this.instantiatesCanonical.size()]); // CanonicalType
1739        case -1926393373: /*instantiatesUri*/ return this.instantiatesUri == null ? new Base[0] : this.instantiatesUri.toArray(new Base[this.instantiatesUri.size()]); // UriType
1740        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<FamilyHistoryStatus>
1741        case 1034315687: /*dataAbsentReason*/ return this.dataAbsentReason == null ? new Base[0] : new Base[] {this.dataAbsentReason}; // CodeableConcept
1742        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
1743        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
1744        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1745        case -261851592: /*relationship*/ return this.relationship == null ? new Base[0] : new Base[] {this.relationship}; // CodeableConcept
1746        case -1249512767: /*gender*/ return this.gender == null ? new Base[0] : new Base[] {this.gender}; // CodeableConcept
1747        case 3029833: /*born*/ return this.born == null ? new Base[0] : new Base[] {this.born}; // Type
1748        case 96511: /*age*/ return this.age == null ? new Base[0] : new Base[] {this.age}; // Type
1749        case 2130167587: /*estimatedAge*/ return this.estimatedAge == null ? new Base[0] : new Base[] {this.estimatedAge}; // BooleanType
1750        case 561497972: /*deceased*/ return this.deceased == null ? new Base[0] : new Base[] {this.deceased}; // Type
1751        case 722137681: /*reasonCode*/ return this.reasonCode == null ? new Base[0] : this.reasonCode.toArray(new Base[this.reasonCode.size()]); // CodeableConcept
1752        case -1146218137: /*reasonReference*/ return this.reasonReference == null ? new Base[0] : this.reasonReference.toArray(new Base[this.reasonReference.size()]); // Reference
1753        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
1754        case -861311717: /*condition*/ return this.condition == null ? new Base[0] : this.condition.toArray(new Base[this.condition.size()]); // FamilyMemberHistoryConditionComponent
1755        default: return super.getProperty(hash, name, checkValid);
1756        }
1757
1758      }
1759
1760      @Override
1761      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1762        switch (hash) {
1763        case -1618432855: // identifier
1764          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1765          return value;
1766        case 8911915: // instantiatesCanonical
1767          this.getInstantiatesCanonical().add(castToCanonical(value)); // CanonicalType
1768          return value;
1769        case -1926393373: // instantiatesUri
1770          this.getInstantiatesUri().add(castToUri(value)); // UriType
1771          return value;
1772        case -892481550: // status
1773          value = new FamilyHistoryStatusEnumFactory().fromType(castToCode(value));
1774          this.status = (Enumeration) value; // Enumeration<FamilyHistoryStatus>
1775          return value;
1776        case 1034315687: // dataAbsentReason
1777          this.dataAbsentReason = castToCodeableConcept(value); // CodeableConcept
1778          return value;
1779        case -791418107: // patient
1780          this.patient = castToReference(value); // Reference
1781          return value;
1782        case 3076014: // date
1783          this.date = castToDateTime(value); // DateTimeType
1784          return value;
1785        case 3373707: // name
1786          this.name = castToString(value); // StringType
1787          return value;
1788        case -261851592: // relationship
1789          this.relationship = castToCodeableConcept(value); // CodeableConcept
1790          return value;
1791        case -1249512767: // gender
1792          this.gender = castToCodeableConcept(value); // CodeableConcept
1793          return value;
1794        case 3029833: // born
1795          this.born = castToType(value); // Type
1796          return value;
1797        case 96511: // age
1798          this.age = castToType(value); // Type
1799          return value;
1800        case 2130167587: // estimatedAge
1801          this.estimatedAge = castToBoolean(value); // BooleanType
1802          return value;
1803        case 561497972: // deceased
1804          this.deceased = castToType(value); // Type
1805          return value;
1806        case 722137681: // reasonCode
1807          this.getReasonCode().add(castToCodeableConcept(value)); // CodeableConcept
1808          return value;
1809        case -1146218137: // reasonReference
1810          this.getReasonReference().add(castToReference(value)); // Reference
1811          return value;
1812        case 3387378: // note
1813          this.getNote().add(castToAnnotation(value)); // Annotation
1814          return value;
1815        case -861311717: // condition
1816          this.getCondition().add((FamilyMemberHistoryConditionComponent) value); // FamilyMemberHistoryConditionComponent
1817          return value;
1818        default: return super.setProperty(hash, name, value);
1819        }
1820
1821      }
1822
1823      @Override
1824      public Base setProperty(String name, Base value) throws FHIRException {
1825        if (name.equals("identifier")) {
1826          this.getIdentifier().add(castToIdentifier(value));
1827        } else if (name.equals("instantiatesCanonical")) {
1828          this.getInstantiatesCanonical().add(castToCanonical(value));
1829        } else if (name.equals("instantiatesUri")) {
1830          this.getInstantiatesUri().add(castToUri(value));
1831        } else if (name.equals("status")) {
1832          value = new FamilyHistoryStatusEnumFactory().fromType(castToCode(value));
1833          this.status = (Enumeration) value; // Enumeration<FamilyHistoryStatus>
1834        } else if (name.equals("dataAbsentReason")) {
1835          this.dataAbsentReason = castToCodeableConcept(value); // CodeableConcept
1836        } else if (name.equals("patient")) {
1837          this.patient = castToReference(value); // Reference
1838        } else if (name.equals("date")) {
1839          this.date = castToDateTime(value); // DateTimeType
1840        } else if (name.equals("name")) {
1841          this.name = castToString(value); // StringType
1842        } else if (name.equals("relationship")) {
1843          this.relationship = castToCodeableConcept(value); // CodeableConcept
1844        } else if (name.equals("gender")) {
1845          this.gender = castToCodeableConcept(value); // CodeableConcept
1846        } else if (name.equals("born[x]")) {
1847          this.born = castToType(value); // Type
1848        } else if (name.equals("age[x]")) {
1849          this.age = castToType(value); // Type
1850        } else if (name.equals("estimatedAge")) {
1851          this.estimatedAge = castToBoolean(value); // BooleanType
1852        } else if (name.equals("deceased[x]")) {
1853          this.deceased = castToType(value); // Type
1854        } else if (name.equals("reasonCode")) {
1855          this.getReasonCode().add(castToCodeableConcept(value));
1856        } else if (name.equals("reasonReference")) {
1857          this.getReasonReference().add(castToReference(value));
1858        } else if (name.equals("note")) {
1859          this.getNote().add(castToAnnotation(value));
1860        } else if (name.equals("condition")) {
1861          this.getCondition().add((FamilyMemberHistoryConditionComponent) value);
1862        } else
1863          return super.setProperty(name, value);
1864        return value;
1865      }
1866
1867      @Override
1868      public Base makeProperty(int hash, String name) throws FHIRException {
1869        switch (hash) {
1870        case -1618432855:  return addIdentifier(); 
1871        case 8911915:  return addInstantiatesCanonicalElement();
1872        case -1926393373:  return addInstantiatesUriElement();
1873        case -892481550:  return getStatusElement();
1874        case 1034315687:  return getDataAbsentReason(); 
1875        case -791418107:  return getPatient(); 
1876        case 3076014:  return getDateElement();
1877        case 3373707:  return getNameElement();
1878        case -261851592:  return getRelationship(); 
1879        case -1249512767:  return getGender(); 
1880        case 67532951:  return getBorn(); 
1881        case 3029833:  return getBorn(); 
1882        case -1419716831:  return getAge(); 
1883        case 96511:  return getAge(); 
1884        case 2130167587:  return getEstimatedAgeElement();
1885        case -1311442804:  return getDeceased(); 
1886        case 561497972:  return getDeceased(); 
1887        case 722137681:  return addReasonCode(); 
1888        case -1146218137:  return addReasonReference(); 
1889        case 3387378:  return addNote(); 
1890        case -861311717:  return addCondition(); 
1891        default: return super.makeProperty(hash, name);
1892        }
1893
1894      }
1895
1896      @Override
1897      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1898        switch (hash) {
1899        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1900        case 8911915: /*instantiatesCanonical*/ return new String[] {"canonical"};
1901        case -1926393373: /*instantiatesUri*/ return new String[] {"uri"};
1902        case -892481550: /*status*/ return new String[] {"code"};
1903        case 1034315687: /*dataAbsentReason*/ return new String[] {"CodeableConcept"};
1904        case -791418107: /*patient*/ return new String[] {"Reference"};
1905        case 3076014: /*date*/ return new String[] {"dateTime"};
1906        case 3373707: /*name*/ return new String[] {"string"};
1907        case -261851592: /*relationship*/ return new String[] {"CodeableConcept"};
1908        case -1249512767: /*gender*/ return new String[] {"CodeableConcept"};
1909        case 3029833: /*born*/ return new String[] {"Period", "date", "string"};
1910        case 96511: /*age*/ return new String[] {"Age", "Range", "string"};
1911        case 2130167587: /*estimatedAge*/ return new String[] {"boolean"};
1912        case 561497972: /*deceased*/ return new String[] {"boolean", "Age", "Range", "date", "string"};
1913        case 722137681: /*reasonCode*/ return new String[] {"CodeableConcept"};
1914        case -1146218137: /*reasonReference*/ return new String[] {"Reference"};
1915        case 3387378: /*note*/ return new String[] {"Annotation"};
1916        case -861311717: /*condition*/ return new String[] {};
1917        default: return super.getTypesForProperty(hash, name);
1918        }
1919
1920      }
1921
1922      @Override
1923      public Base addChild(String name) throws FHIRException {
1924        if (name.equals("identifier")) {
1925          return addIdentifier();
1926        }
1927        else if (name.equals("instantiatesCanonical")) {
1928          throw new FHIRException("Cannot call addChild on a primitive type FamilyMemberHistory.instantiatesCanonical");
1929        }
1930        else if (name.equals("instantiatesUri")) {
1931          throw new FHIRException("Cannot call addChild on a primitive type FamilyMemberHistory.instantiatesUri");
1932        }
1933        else if (name.equals("status")) {
1934          throw new FHIRException("Cannot call addChild on a primitive type FamilyMemberHistory.status");
1935        }
1936        else if (name.equals("dataAbsentReason")) {
1937          this.dataAbsentReason = new CodeableConcept();
1938          return this.dataAbsentReason;
1939        }
1940        else if (name.equals("patient")) {
1941          this.patient = new Reference();
1942          return this.patient;
1943        }
1944        else if (name.equals("date")) {
1945          throw new FHIRException("Cannot call addChild on a primitive type FamilyMemberHistory.date");
1946        }
1947        else if (name.equals("name")) {
1948          throw new FHIRException("Cannot call addChild on a primitive type FamilyMemberHistory.name");
1949        }
1950        else if (name.equals("relationship")) {
1951          this.relationship = new CodeableConcept();
1952          return this.relationship;
1953        }
1954        else if (name.equals("gender")) {
1955          this.gender = new CodeableConcept();
1956          return this.gender;
1957        }
1958        else if (name.equals("bornPeriod")) {
1959          this.born = new Period();
1960          return this.born;
1961        }
1962        else if (name.equals("bornDate")) {
1963          this.born = new DateType();
1964          return this.born;
1965        }
1966        else if (name.equals("bornString")) {
1967          this.born = new StringType();
1968          return this.born;
1969        }
1970        else if (name.equals("ageAge")) {
1971          this.age = new Age();
1972          return this.age;
1973        }
1974        else if (name.equals("ageRange")) {
1975          this.age = new Range();
1976          return this.age;
1977        }
1978        else if (name.equals("ageString")) {
1979          this.age = new StringType();
1980          return this.age;
1981        }
1982        else if (name.equals("estimatedAge")) {
1983          throw new FHIRException("Cannot call addChild on a primitive type FamilyMemberHistory.estimatedAge");
1984        }
1985        else if (name.equals("deceasedBoolean")) {
1986          this.deceased = new BooleanType();
1987          return this.deceased;
1988        }
1989        else if (name.equals("deceasedAge")) {
1990          this.deceased = new Age();
1991          return this.deceased;
1992        }
1993        else if (name.equals("deceasedRange")) {
1994          this.deceased = new Range();
1995          return this.deceased;
1996        }
1997        else if (name.equals("deceasedDate")) {
1998          this.deceased = new DateType();
1999          return this.deceased;
2000        }
2001        else if (name.equals("deceasedString")) {
2002          this.deceased = new StringType();
2003          return this.deceased;
2004        }
2005        else if (name.equals("reasonCode")) {
2006          return addReasonCode();
2007        }
2008        else if (name.equals("reasonReference")) {
2009          return addReasonReference();
2010        }
2011        else if (name.equals("note")) {
2012          return addNote();
2013        }
2014        else if (name.equals("condition")) {
2015          return addCondition();
2016        }
2017        else
2018          return super.addChild(name);
2019      }
2020
2021  public String fhirType() {
2022    return "FamilyMemberHistory";
2023
2024  }
2025
2026      public FamilyMemberHistory copy() {
2027        FamilyMemberHistory dst = new FamilyMemberHistory();
2028        copyValues(dst);
2029        if (identifier != null) {
2030          dst.identifier = new ArrayList<Identifier>();
2031          for (Identifier i : identifier)
2032            dst.identifier.add(i.copy());
2033        };
2034        if (instantiatesCanonical != null) {
2035          dst.instantiatesCanonical = new ArrayList<CanonicalType>();
2036          for (CanonicalType i : instantiatesCanonical)
2037            dst.instantiatesCanonical.add(i.copy());
2038        };
2039        if (instantiatesUri != null) {
2040          dst.instantiatesUri = new ArrayList<UriType>();
2041          for (UriType i : instantiatesUri)
2042            dst.instantiatesUri.add(i.copy());
2043        };
2044        dst.status = status == null ? null : status.copy();
2045        dst.dataAbsentReason = dataAbsentReason == null ? null : dataAbsentReason.copy();
2046        dst.patient = patient == null ? null : patient.copy();
2047        dst.date = date == null ? null : date.copy();
2048        dst.name = name == null ? null : name.copy();
2049        dst.relationship = relationship == null ? null : relationship.copy();
2050        dst.gender = gender == null ? null : gender.copy();
2051        dst.born = born == null ? null : born.copy();
2052        dst.age = age == null ? null : age.copy();
2053        dst.estimatedAge = estimatedAge == null ? null : estimatedAge.copy();
2054        dst.deceased = deceased == null ? null : deceased.copy();
2055        if (reasonCode != null) {
2056          dst.reasonCode = new ArrayList<CodeableConcept>();
2057          for (CodeableConcept i : reasonCode)
2058            dst.reasonCode.add(i.copy());
2059        };
2060        if (reasonReference != null) {
2061          dst.reasonReference = new ArrayList<Reference>();
2062          for (Reference i : reasonReference)
2063            dst.reasonReference.add(i.copy());
2064        };
2065        if (note != null) {
2066          dst.note = new ArrayList<Annotation>();
2067          for (Annotation i : note)
2068            dst.note.add(i.copy());
2069        };
2070        if (condition != null) {
2071          dst.condition = new ArrayList<FamilyMemberHistoryConditionComponent>();
2072          for (FamilyMemberHistoryConditionComponent i : condition)
2073            dst.condition.add(i.copy());
2074        };
2075        return dst;
2076      }
2077
2078      protected FamilyMemberHistory typedCopy() {
2079        return copy();
2080      }
2081
2082      @Override
2083      public boolean equalsDeep(Base other_) {
2084        if (!super.equalsDeep(other_))
2085          return false;
2086        if (!(other_ instanceof FamilyMemberHistory))
2087          return false;
2088        FamilyMemberHistory o = (FamilyMemberHistory) other_;
2089        return compareDeep(identifier, o.identifier, true) && compareDeep(instantiatesCanonical, o.instantiatesCanonical, true)
2090           && compareDeep(instantiatesUri, o.instantiatesUri, true) && compareDeep(status, o.status, true)
2091           && compareDeep(dataAbsentReason, o.dataAbsentReason, true) && compareDeep(patient, o.patient, true)
2092           && compareDeep(date, o.date, true) && compareDeep(name, o.name, true) && compareDeep(relationship, o.relationship, true)
2093           && compareDeep(gender, o.gender, true) && compareDeep(born, o.born, true) && compareDeep(age, o.age, true)
2094           && compareDeep(estimatedAge, o.estimatedAge, true) && compareDeep(deceased, o.deceased, true) && compareDeep(reasonCode, o.reasonCode, true)
2095           && compareDeep(reasonReference, o.reasonReference, true) && compareDeep(note, o.note, true) && compareDeep(condition, o.condition, true)
2096          ;
2097      }
2098
2099      @Override
2100      public boolean equalsShallow(Base other_) {
2101        if (!super.equalsShallow(other_))
2102          return false;
2103        if (!(other_ instanceof FamilyMemberHistory))
2104          return false;
2105        FamilyMemberHistory o = (FamilyMemberHistory) other_;
2106        return compareValues(instantiatesUri, o.instantiatesUri, true) && compareValues(status, o.status, true)
2107           && compareValues(date, o.date, true) && compareValues(name, o.name, true) && compareValues(estimatedAge, o.estimatedAge, true)
2108          ;
2109      }
2110
2111      public boolean isEmpty() {
2112        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, instantiatesCanonical
2113          , instantiatesUri, status, dataAbsentReason, patient, date, name, relationship
2114          , gender, born, age, estimatedAge, deceased, reasonCode, reasonReference, note
2115          , condition);
2116      }
2117
2118  @Override
2119  public ResourceType getResourceType() {
2120    return ResourceType.FamilyMemberHistory;
2121   }
2122
2123 /**
2124   * Search parameter: <b>date</b>
2125   * <p>
2126   * Description: <b>When history was recorded or last updated</b><br>
2127   * Type: <b>date</b><br>
2128   * Path: <b>FamilyMemberHistory.date</b><br>
2129   * </p>
2130   */
2131  @SearchParamDefinition(name="date", path="FamilyMemberHistory.date", description="When history was recorded or last updated", type="date" )
2132  public static final String SP_DATE = "date";
2133 /**
2134   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2135   * <p>
2136   * Description: <b>When history was recorded or last updated</b><br>
2137   * Type: <b>date</b><br>
2138   * Path: <b>FamilyMemberHistory.date</b><br>
2139   * </p>
2140   */
2141  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2142
2143 /**
2144   * Search parameter: <b>identifier</b>
2145   * <p>
2146   * Description: <b>A search by a record identifier</b><br>
2147   * Type: <b>token</b><br>
2148   * Path: <b>FamilyMemberHistory.identifier</b><br>
2149   * </p>
2150   */
2151  @SearchParamDefinition(name="identifier", path="FamilyMemberHistory.identifier", description="A search by a record identifier", type="token" )
2152  public static final String SP_IDENTIFIER = "identifier";
2153 /**
2154   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2155   * <p>
2156   * Description: <b>A search by a record identifier</b><br>
2157   * Type: <b>token</b><br>
2158   * Path: <b>FamilyMemberHistory.identifier</b><br>
2159   * </p>
2160   */
2161  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2162
2163 /**
2164   * Search parameter: <b>code</b>
2165   * <p>
2166   * Description: <b>A search by a condition code</b><br>
2167   * Type: <b>token</b><br>
2168   * Path: <b>FamilyMemberHistory.condition.code</b><br>
2169   * </p>
2170   */
2171  @SearchParamDefinition(name="code", path="FamilyMemberHistory.condition.code", description="A search by a condition code", type="token" )
2172  public static final String SP_CODE = "code";
2173 /**
2174   * <b>Fluent Client</b> search parameter constant for <b>code</b>
2175   * <p>
2176   * Description: <b>A search by a condition code</b><br>
2177   * Type: <b>token</b><br>
2178   * Path: <b>FamilyMemberHistory.condition.code</b><br>
2179   * </p>
2180   */
2181  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
2182
2183 /**
2184   * Search parameter: <b>gender</b>
2185   * <p>
2186   * Description: <b>A search by a gender code of a family member</b><br>
2187   * Type: <b>token</b><br>
2188   * Path: <b>FamilyMemberHistory.gender</b><br>
2189   * </p>
2190   */
2191  @SearchParamDefinition(name="gender", path="FamilyMemberHistory.gender", description="A search by a gender code of a family member", type="token" )
2192  public static final String SP_GENDER = "gender";
2193 /**
2194   * <b>Fluent Client</b> search parameter constant for <b>gender</b>
2195   * <p>
2196   * Description: <b>A search by a gender code of a family member</b><br>
2197   * Type: <b>token</b><br>
2198   * Path: <b>FamilyMemberHistory.gender</b><br>
2199   * </p>
2200   */
2201  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GENDER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GENDER);
2202
2203 /**
2204   * Search parameter: <b>patient</b>
2205   * <p>
2206   * Description: <b>The identity of a subject to list family member history items for</b><br>
2207   * Type: <b>reference</b><br>
2208   * Path: <b>FamilyMemberHistory.patient</b><br>
2209   * </p>
2210   */
2211  @SearchParamDefinition(name="patient", path="FamilyMemberHistory.patient.where(resolve() is Patient)", description="The identity of a subject to list family member history items for", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Patient.class } )
2212  public static final String SP_PATIENT = "patient";
2213 /**
2214   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2215   * <p>
2216   * Description: <b>The identity of a subject to list family member history items for</b><br>
2217   * Type: <b>reference</b><br>
2218   * Path: <b>FamilyMemberHistory.patient</b><br>
2219   * </p>
2220   */
2221  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2222
2223/**
2224   * Constant for fluent queries to be used to add include statements. Specifies
2225   * the path value of "<b>FamilyMemberHistory:patient</b>".
2226   */
2227  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("FamilyMemberHistory:patient").toLocked();
2228
2229 /**
2230   * Search parameter: <b>instantiates-canonical</b>
2231   * <p>
2232   * Description: <b>Instantiates FHIR protocol or definition</b><br>
2233   * Type: <b>reference</b><br>
2234   * Path: <b>FamilyMemberHistory.instantiatesCanonical</b><br>
2235   * </p>
2236   */
2237  @SearchParamDefinition(name="instantiates-canonical", path="FamilyMemberHistory.instantiatesCanonical", description="Instantiates FHIR protocol or definition", type="reference", target={ActivityDefinition.class, Measure.class, OperationDefinition.class, PlanDefinition.class, Questionnaire.class } )
2238  public static final String SP_INSTANTIATES_CANONICAL = "instantiates-canonical";
2239 /**
2240   * <b>Fluent Client</b> search parameter constant for <b>instantiates-canonical</b>
2241   * <p>
2242   * Description: <b>Instantiates FHIR protocol or definition</b><br>
2243   * Type: <b>reference</b><br>
2244   * Path: <b>FamilyMemberHistory.instantiatesCanonical</b><br>
2245   * </p>
2246   */
2247  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INSTANTIATES_CANONICAL = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INSTANTIATES_CANONICAL);
2248
2249/**
2250   * Constant for fluent queries to be used to add include statements. Specifies
2251   * the path value of "<b>FamilyMemberHistory:instantiates-canonical</b>".
2252   */
2253  public static final ca.uhn.fhir.model.api.Include INCLUDE_INSTANTIATES_CANONICAL = new ca.uhn.fhir.model.api.Include("FamilyMemberHistory:instantiates-canonical").toLocked();
2254
2255 /**
2256   * Search parameter: <b>instantiates-uri</b>
2257   * <p>
2258   * Description: <b>Instantiates external protocol or definition</b><br>
2259   * Type: <b>uri</b><br>
2260   * Path: <b>FamilyMemberHistory.instantiatesUri</b><br>
2261   * </p>
2262   */
2263  @SearchParamDefinition(name="instantiates-uri", path="FamilyMemberHistory.instantiatesUri", description="Instantiates external protocol or definition", type="uri" )
2264  public static final String SP_INSTANTIATES_URI = "instantiates-uri";
2265 /**
2266   * <b>Fluent Client</b> search parameter constant for <b>instantiates-uri</b>
2267   * <p>
2268   * Description: <b>Instantiates external protocol or definition</b><br>
2269   * Type: <b>uri</b><br>
2270   * Path: <b>FamilyMemberHistory.instantiatesUri</b><br>
2271   * </p>
2272   */
2273  public static final ca.uhn.fhir.rest.gclient.UriClientParam INSTANTIATES_URI = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_INSTANTIATES_URI);
2274
2275 /**
2276   * Search parameter: <b>relationship</b>
2277   * <p>
2278   * Description: <b>A search by a relationship type</b><br>
2279   * Type: <b>token</b><br>
2280   * Path: <b>FamilyMemberHistory.relationship</b><br>
2281   * </p>
2282   */
2283  @SearchParamDefinition(name="relationship", path="FamilyMemberHistory.relationship", description="A search by a relationship type", type="token" )
2284  public static final String SP_RELATIONSHIP = "relationship";
2285 /**
2286   * <b>Fluent Client</b> search parameter constant for <b>relationship</b>
2287   * <p>
2288   * Description: <b>A search by a relationship type</b><br>
2289   * Type: <b>token</b><br>
2290   * Path: <b>FamilyMemberHistory.relationship</b><br>
2291   * </p>
2292   */
2293  public static final ca.uhn.fhir.rest.gclient.TokenClientParam RELATIONSHIP = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_RELATIONSHIP);
2294
2295 /**
2296   * Search parameter: <b>status</b>
2297   * <p>
2298   * Description: <b>partial | completed | entered-in-error | health-unknown</b><br>
2299   * Type: <b>token</b><br>
2300   * Path: <b>FamilyMemberHistory.status</b><br>
2301   * </p>
2302   */
2303  @SearchParamDefinition(name="status", path="FamilyMemberHistory.status", description="partial | completed | entered-in-error | health-unknown", type="token" )
2304  public static final String SP_STATUS = "status";
2305 /**
2306   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2307   * <p>
2308   * Description: <b>partial | completed | entered-in-error | health-unknown</b><br>
2309   * Type: <b>token</b><br>
2310   * Path: <b>FamilyMemberHistory.status</b><br>
2311   * </p>
2312   */
2313  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2314
2315
2316}
2317