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