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