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