001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Sun, May 6, 2018 17:51-0400 for FHIR v3.4.0
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import ca.uhn.fhir.model.api.annotation.ResourceDef;
038import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
039import ca.uhn.fhir.model.api.annotation.Child;
040import ca.uhn.fhir.model.api.annotation.ChildOrder;
041import ca.uhn.fhir.model.api.annotation.Description;
042import ca.uhn.fhir.model.api.annotation.Block;
043import org.hl7.fhir.instance.model.api.*;
044import org.hl7.fhir.exceptions.FHIRException;
045/**
046 * A clinical condition, problem, diagnosis, or other event, situation, issue, or clinical concept that has risen to a level of concern.
047 */
048@ResourceDef(name="Condition", profile="http://hl7.org/fhir/Profile/Condition")
049public class Condition extends DomainResource {
050
051    public enum ConditionClinicalStatus {
052        /**
053         * The subject is currently experiencing the symptoms of the condition or there is evidence of the condition.
054         */
055        ACTIVE, 
056        /**
057         * The subject is experiencing a re-occurence or repeating of a previously resolved condition, e.g. urinary tract infection, pancreatitis, cholangitis, conjunctivitis.
058         */
059        RECURRENCE, 
060        /**
061         * The subject is experiencing a return of a condition, or signs and symptoms after a period of improvement or remission, e.g. relapse of cancer, multiple sclerosis, rheumatoid arthritis, systemic lupus erythematosus, bipolar disorder, [psychotic relapse of] schizophrenia, etc.
062         */
063        RELAPSE, 
064        /**
065         * The subject's condition is adequately or well managed such that the recommended evidence-based clinical outcome targets are met.
066         */
067        WELLCONTROLLED, 
068        /**
069         * The subject's condition is inadequately/poorly managed such that the recommended evidence-based clinical outcome targets are not met.
070         */
071        POORLYCONTROLLED, 
072        /**
073         * The subject is no longer experiencing the symptoms of the condition or there is no longer evidence of the condition.
074         */
075        INACTIVE, 
076        /**
077         * The subject is no longer experiencing the symptoms of the condition, but there is a risk of the symptoms returning.
078         */
079        REMISSION, 
080        /**
081         * The subject is no longer experiencing the symptoms of the condition and there is a negligible perceived risk of the symptoms returning.
082         */
083        RESOLVED, 
084        /**
085         * added to help the parsers with the generic types
086         */
087        NULL;
088        public static ConditionClinicalStatus fromCode(String codeString) throws FHIRException {
089            if (codeString == null || "".equals(codeString))
090                return null;
091        if ("active".equals(codeString))
092          return ACTIVE;
093        if ("recurrence".equals(codeString))
094          return RECURRENCE;
095        if ("relapse".equals(codeString))
096          return RELAPSE;
097        if ("well-controlled".equals(codeString))
098          return WELLCONTROLLED;
099        if ("poorly-controlled".equals(codeString))
100          return POORLYCONTROLLED;
101        if ("inactive".equals(codeString))
102          return INACTIVE;
103        if ("remission".equals(codeString))
104          return REMISSION;
105        if ("resolved".equals(codeString))
106          return RESOLVED;
107        if (Configuration.isAcceptInvalidEnums())
108          return null;
109        else
110          throw new FHIRException("Unknown ConditionClinicalStatus code '"+codeString+"'");
111        }
112        public String toCode() {
113          switch (this) {
114            case ACTIVE: return "active";
115            case RECURRENCE: return "recurrence";
116            case RELAPSE: return "relapse";
117            case WELLCONTROLLED: return "well-controlled";
118            case POORLYCONTROLLED: return "poorly-controlled";
119            case INACTIVE: return "inactive";
120            case REMISSION: return "remission";
121            case RESOLVED: return "resolved";
122            default: return "?";
123          }
124        }
125        public String getSystem() {
126          switch (this) {
127            case ACTIVE: return "http://hl7.org/fhir/condition-clinical";
128            case RECURRENCE: return "http://hl7.org/fhir/condition-clinical";
129            case RELAPSE: return "http://hl7.org/fhir/condition-clinical";
130            case WELLCONTROLLED: return "http://hl7.org/fhir/condition-clinical";
131            case POORLYCONTROLLED: return "http://hl7.org/fhir/condition-clinical";
132            case INACTIVE: return "http://hl7.org/fhir/condition-clinical";
133            case REMISSION: return "http://hl7.org/fhir/condition-clinical";
134            case RESOLVED: return "http://hl7.org/fhir/condition-clinical";
135            default: return "?";
136          }
137        }
138        public String getDefinition() {
139          switch (this) {
140            case ACTIVE: return "The subject is currently experiencing the symptoms of the condition or there is evidence of the condition.";
141            case RECURRENCE: return "The subject is experiencing a re-occurence or repeating of a previously resolved condition, e.g. urinary tract infection, pancreatitis, cholangitis, conjunctivitis.";
142            case RELAPSE: return "The subject is experiencing a return of a condition, or signs and symptoms after a period of improvement or remission, e.g. relapse of cancer, multiple sclerosis, rheumatoid arthritis, systemic lupus erythematosus, bipolar disorder, [psychotic relapse of] schizophrenia, etc.";
143            case WELLCONTROLLED: return "The subject's condition is adequately or well managed such that the recommended evidence-based clinical outcome targets are met.";
144            case POORLYCONTROLLED: return "The subject's condition is inadequately/poorly managed such that the recommended evidence-based clinical outcome targets are not met.";
145            case INACTIVE: return "The subject is no longer experiencing the symptoms of the condition or there is no longer evidence of the condition.";
146            case REMISSION: return "The subject is no longer experiencing the symptoms of the condition, but there is a risk of the symptoms returning.";
147            case RESOLVED: return "The subject is no longer experiencing the symptoms of the condition and there is a negligible perceived risk of the symptoms returning.";
148            default: return "?";
149          }
150        }
151        public String getDisplay() {
152          switch (this) {
153            case ACTIVE: return "Active";
154            case RECURRENCE: return "Recurrence";
155            case RELAPSE: return "Relapse";
156            case WELLCONTROLLED: return "Well-Controlled";
157            case POORLYCONTROLLED: return "Poorly-Controlled";
158            case INACTIVE: return "Inactive";
159            case REMISSION: return "Remission";
160            case RESOLVED: return "Resolved";
161            default: return "?";
162          }
163        }
164    }
165
166  public static class ConditionClinicalStatusEnumFactory implements EnumFactory<ConditionClinicalStatus> {
167    public ConditionClinicalStatus fromCode(String codeString) throws IllegalArgumentException {
168      if (codeString == null || "".equals(codeString))
169            if (codeString == null || "".equals(codeString))
170                return null;
171        if ("active".equals(codeString))
172          return ConditionClinicalStatus.ACTIVE;
173        if ("recurrence".equals(codeString))
174          return ConditionClinicalStatus.RECURRENCE;
175        if ("relapse".equals(codeString))
176          return ConditionClinicalStatus.RELAPSE;
177        if ("well-controlled".equals(codeString))
178          return ConditionClinicalStatus.WELLCONTROLLED;
179        if ("poorly-controlled".equals(codeString))
180          return ConditionClinicalStatus.POORLYCONTROLLED;
181        if ("inactive".equals(codeString))
182          return ConditionClinicalStatus.INACTIVE;
183        if ("remission".equals(codeString))
184          return ConditionClinicalStatus.REMISSION;
185        if ("resolved".equals(codeString))
186          return ConditionClinicalStatus.RESOLVED;
187        throw new IllegalArgumentException("Unknown ConditionClinicalStatus code '"+codeString+"'");
188        }
189        public Enumeration<ConditionClinicalStatus> fromType(Base code) throws FHIRException {
190          if (code == null)
191            return null;
192          if (code.isEmpty())
193            return new Enumeration<ConditionClinicalStatus>(this);
194          String codeString = ((PrimitiveType) code).asStringValue();
195          if (codeString == null || "".equals(codeString))
196            return null;
197        if ("active".equals(codeString))
198          return new Enumeration<ConditionClinicalStatus>(this, ConditionClinicalStatus.ACTIVE);
199        if ("recurrence".equals(codeString))
200          return new Enumeration<ConditionClinicalStatus>(this, ConditionClinicalStatus.RECURRENCE);
201        if ("relapse".equals(codeString))
202          return new Enumeration<ConditionClinicalStatus>(this, ConditionClinicalStatus.RELAPSE);
203        if ("well-controlled".equals(codeString))
204          return new Enumeration<ConditionClinicalStatus>(this, ConditionClinicalStatus.WELLCONTROLLED);
205        if ("poorly-controlled".equals(codeString))
206          return new Enumeration<ConditionClinicalStatus>(this, ConditionClinicalStatus.POORLYCONTROLLED);
207        if ("inactive".equals(codeString))
208          return new Enumeration<ConditionClinicalStatus>(this, ConditionClinicalStatus.INACTIVE);
209        if ("remission".equals(codeString))
210          return new Enumeration<ConditionClinicalStatus>(this, ConditionClinicalStatus.REMISSION);
211        if ("resolved".equals(codeString))
212          return new Enumeration<ConditionClinicalStatus>(this, ConditionClinicalStatus.RESOLVED);
213        throw new FHIRException("Unknown ConditionClinicalStatus code '"+codeString+"'");
214        }
215    public String toCode(ConditionClinicalStatus code) {
216      if (code == ConditionClinicalStatus.ACTIVE)
217        return "active";
218      if (code == ConditionClinicalStatus.RECURRENCE)
219        return "recurrence";
220      if (code == ConditionClinicalStatus.RELAPSE)
221        return "relapse";
222      if (code == ConditionClinicalStatus.WELLCONTROLLED)
223        return "well-controlled";
224      if (code == ConditionClinicalStatus.POORLYCONTROLLED)
225        return "poorly-controlled";
226      if (code == ConditionClinicalStatus.INACTIVE)
227        return "inactive";
228      if (code == ConditionClinicalStatus.REMISSION)
229        return "remission";
230      if (code == ConditionClinicalStatus.RESOLVED)
231        return "resolved";
232      return "?";
233      }
234    public String toSystem(ConditionClinicalStatus code) {
235      return code.getSystem();
236      }
237    }
238
239    public enum ConditionVerificationStatus {
240        /**
241         * There is not sufficient diagnostic and/or clinical evidence to treat this as a confirmed condition.
242         */
243        UNCONFIRMED, 
244        /**
245         * This is a tentative diagnosis - still a candidate that is under consideration.
246         */
247        PROVISIONAL, 
248        /**
249         * One of a set of potential (and typically mutually exclusive) diagnoses asserted to further guide the diagnostic process and preliminary treatment.
250         */
251        DIFFERENTIAL, 
252        /**
253         * There is sufficient diagnostic and/or clinical evidence to treat this as a confirmed condition.
254         */
255        CONFIRMED, 
256        /**
257         * This condition has been ruled out by diagnostic and clinical evidence.
258         */
259        REFUTED, 
260        /**
261         * The statement was entered in error and is not valid.
262         */
263        ENTEREDINERROR, 
264        /**
265         * added to help the parsers with the generic types
266         */
267        NULL;
268        public static ConditionVerificationStatus fromCode(String codeString) throws FHIRException {
269            if (codeString == null || "".equals(codeString))
270                return null;
271        if ("unconfirmed".equals(codeString))
272          return UNCONFIRMED;
273        if ("provisional".equals(codeString))
274          return PROVISIONAL;
275        if ("differential".equals(codeString))
276          return DIFFERENTIAL;
277        if ("confirmed".equals(codeString))
278          return CONFIRMED;
279        if ("refuted".equals(codeString))
280          return REFUTED;
281        if ("entered-in-error".equals(codeString))
282          return ENTEREDINERROR;
283        if (Configuration.isAcceptInvalidEnums())
284          return null;
285        else
286          throw new FHIRException("Unknown ConditionVerificationStatus code '"+codeString+"'");
287        }
288        public String toCode() {
289          switch (this) {
290            case UNCONFIRMED: return "unconfirmed";
291            case PROVISIONAL: return "provisional";
292            case DIFFERENTIAL: return "differential";
293            case CONFIRMED: return "confirmed";
294            case REFUTED: return "refuted";
295            case ENTEREDINERROR: return "entered-in-error";
296            default: return "?";
297          }
298        }
299        public String getSystem() {
300          switch (this) {
301            case UNCONFIRMED: return "http://hl7.org/fhir/condition-ver-status";
302            case PROVISIONAL: return "http://hl7.org/fhir/condition-ver-status";
303            case DIFFERENTIAL: return "http://hl7.org/fhir/condition-ver-status";
304            case CONFIRMED: return "http://hl7.org/fhir/condition-ver-status";
305            case REFUTED: return "http://hl7.org/fhir/condition-ver-status";
306            case ENTEREDINERROR: return "http://hl7.org/fhir/condition-ver-status";
307            default: return "?";
308          }
309        }
310        public String getDefinition() {
311          switch (this) {
312            case UNCONFIRMED: return "There is not sufficient diagnostic and/or clinical evidence to treat this as a confirmed condition.";
313            case PROVISIONAL: return "This is a tentative diagnosis - still a candidate that is under consideration.";
314            case DIFFERENTIAL: return "One of a set of potential (and typically mutually exclusive) diagnoses asserted to further guide the diagnostic process and preliminary treatment.";
315            case CONFIRMED: return "There is sufficient diagnostic and/or clinical evidence to treat this as a confirmed condition.";
316            case REFUTED: return "This condition has been ruled out by diagnostic and clinical evidence.";
317            case ENTEREDINERROR: return "The statement was entered in error and is not valid.";
318            default: return "?";
319          }
320        }
321        public String getDisplay() {
322          switch (this) {
323            case UNCONFIRMED: return "Unconfirmed";
324            case PROVISIONAL: return "Provisional";
325            case DIFFERENTIAL: return "Differential";
326            case CONFIRMED: return "Confirmed";
327            case REFUTED: return "Refuted";
328            case ENTEREDINERROR: return "Entered In Error";
329            default: return "?";
330          }
331        }
332    }
333
334  public static class ConditionVerificationStatusEnumFactory implements EnumFactory<ConditionVerificationStatus> {
335    public ConditionVerificationStatus fromCode(String codeString) throws IllegalArgumentException {
336      if (codeString == null || "".equals(codeString))
337            if (codeString == null || "".equals(codeString))
338                return null;
339        if ("unconfirmed".equals(codeString))
340          return ConditionVerificationStatus.UNCONFIRMED;
341        if ("provisional".equals(codeString))
342          return ConditionVerificationStatus.PROVISIONAL;
343        if ("differential".equals(codeString))
344          return ConditionVerificationStatus.DIFFERENTIAL;
345        if ("confirmed".equals(codeString))
346          return ConditionVerificationStatus.CONFIRMED;
347        if ("refuted".equals(codeString))
348          return ConditionVerificationStatus.REFUTED;
349        if ("entered-in-error".equals(codeString))
350          return ConditionVerificationStatus.ENTEREDINERROR;
351        throw new IllegalArgumentException("Unknown ConditionVerificationStatus code '"+codeString+"'");
352        }
353        public Enumeration<ConditionVerificationStatus> fromType(Base code) throws FHIRException {
354          if (code == null)
355            return null;
356          if (code.isEmpty())
357            return new Enumeration<ConditionVerificationStatus>(this);
358          String codeString = ((PrimitiveType) code).asStringValue();
359          if (codeString == null || "".equals(codeString))
360            return null;
361        if ("unconfirmed".equals(codeString))
362          return new Enumeration<ConditionVerificationStatus>(this, ConditionVerificationStatus.UNCONFIRMED);
363        if ("provisional".equals(codeString))
364          return new Enumeration<ConditionVerificationStatus>(this, ConditionVerificationStatus.PROVISIONAL);
365        if ("differential".equals(codeString))
366          return new Enumeration<ConditionVerificationStatus>(this, ConditionVerificationStatus.DIFFERENTIAL);
367        if ("confirmed".equals(codeString))
368          return new Enumeration<ConditionVerificationStatus>(this, ConditionVerificationStatus.CONFIRMED);
369        if ("refuted".equals(codeString))
370          return new Enumeration<ConditionVerificationStatus>(this, ConditionVerificationStatus.REFUTED);
371        if ("entered-in-error".equals(codeString))
372          return new Enumeration<ConditionVerificationStatus>(this, ConditionVerificationStatus.ENTEREDINERROR);
373        throw new FHIRException("Unknown ConditionVerificationStatus code '"+codeString+"'");
374        }
375    public String toCode(ConditionVerificationStatus code) {
376      if (code == ConditionVerificationStatus.UNCONFIRMED)
377        return "unconfirmed";
378      if (code == ConditionVerificationStatus.PROVISIONAL)
379        return "provisional";
380      if (code == ConditionVerificationStatus.DIFFERENTIAL)
381        return "differential";
382      if (code == ConditionVerificationStatus.CONFIRMED)
383        return "confirmed";
384      if (code == ConditionVerificationStatus.REFUTED)
385        return "refuted";
386      if (code == ConditionVerificationStatus.ENTEREDINERROR)
387        return "entered-in-error";
388      return "?";
389      }
390    public String toSystem(ConditionVerificationStatus code) {
391      return code.getSystem();
392      }
393    }
394
395    @Block()
396    public static class ConditionStageComponent extends BackboneElement implements IBaseBackboneElement {
397        /**
398         * A simple summary of the stage such as "Stage 3". The determination of the stage is disease-specific.
399         */
400        @Child(name = "summary", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
401        @Description(shortDefinition="Simple summary (disease specific)", formalDefinition="A simple summary of the stage such as \"Stage 3\". The determination of the stage is disease-specific." )
402        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-stage")
403        protected CodeableConcept summary;
404
405        /**
406         * Reference to a formal record of the evidence on which the staging assessment is based.
407         */
408        @Child(name = "assessment", type = {ClinicalImpression.class, DiagnosticReport.class, Observation.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
409        @Description(shortDefinition="Formal record of assessment", formalDefinition="Reference to a formal record of the evidence on which the staging assessment is based." )
410        protected List<Reference> assessment;
411        /**
412         * The actual objects that are the target of the reference (Reference to a formal record of the evidence on which the staging assessment is based.)
413         */
414        protected List<Resource> assessmentTarget;
415
416
417        /**
418         * The kind of staging, such as pathological or clinical staging.
419         */
420        @Child(name = "type", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
421        @Description(shortDefinition="Kind of staging", formalDefinition="The kind of staging, such as pathological or clinical staging." )
422        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-stage-type")
423        protected CodeableConcept type;
424
425        private static final long serialVersionUID = 668627986L;
426
427    /**
428     * Constructor
429     */
430      public ConditionStageComponent() {
431        super();
432      }
433
434        /**
435         * @return {@link #summary} (A simple summary of the stage such as "Stage 3". The determination of the stage is disease-specific.)
436         */
437        public CodeableConcept getSummary() { 
438          if (this.summary == null)
439            if (Configuration.errorOnAutoCreate())
440              throw new Error("Attempt to auto-create ConditionStageComponent.summary");
441            else if (Configuration.doAutoCreate())
442              this.summary = new CodeableConcept(); // cc
443          return this.summary;
444        }
445
446        public boolean hasSummary() { 
447          return this.summary != null && !this.summary.isEmpty();
448        }
449
450        /**
451         * @param value {@link #summary} (A simple summary of the stage such as "Stage 3". The determination of the stage is disease-specific.)
452         */
453        public ConditionStageComponent setSummary(CodeableConcept value) { 
454          this.summary = value;
455          return this;
456        }
457
458        /**
459         * @return {@link #assessment} (Reference to a formal record of the evidence on which the staging assessment is based.)
460         */
461        public List<Reference> getAssessment() { 
462          if (this.assessment == null)
463            this.assessment = new ArrayList<Reference>();
464          return this.assessment;
465        }
466
467        /**
468         * @return Returns a reference to <code>this</code> for easy method chaining
469         */
470        public ConditionStageComponent setAssessment(List<Reference> theAssessment) { 
471          this.assessment = theAssessment;
472          return this;
473        }
474
475        public boolean hasAssessment() { 
476          if (this.assessment == null)
477            return false;
478          for (Reference item : this.assessment)
479            if (!item.isEmpty())
480              return true;
481          return false;
482        }
483
484        public Reference addAssessment() { //3
485          Reference t = new Reference();
486          if (this.assessment == null)
487            this.assessment = new ArrayList<Reference>();
488          this.assessment.add(t);
489          return t;
490        }
491
492        public ConditionStageComponent addAssessment(Reference t) { //3
493          if (t == null)
494            return this;
495          if (this.assessment == null)
496            this.assessment = new ArrayList<Reference>();
497          this.assessment.add(t);
498          return this;
499        }
500
501        /**
502         * @return The first repetition of repeating field {@link #assessment}, creating it if it does not already exist
503         */
504        public Reference getAssessmentFirstRep() { 
505          if (getAssessment().isEmpty()) {
506            addAssessment();
507          }
508          return getAssessment().get(0);
509        }
510
511        /**
512         * @deprecated Use Reference#setResource(IBaseResource) instead
513         */
514        @Deprecated
515        public List<Resource> getAssessmentTarget() { 
516          if (this.assessmentTarget == null)
517            this.assessmentTarget = new ArrayList<Resource>();
518          return this.assessmentTarget;
519        }
520
521        /**
522         * @return {@link #type} (The kind of staging, such as pathological or clinical staging.)
523         */
524        public CodeableConcept getType() { 
525          if (this.type == null)
526            if (Configuration.errorOnAutoCreate())
527              throw new Error("Attempt to auto-create ConditionStageComponent.type");
528            else if (Configuration.doAutoCreate())
529              this.type = new CodeableConcept(); // cc
530          return this.type;
531        }
532
533        public boolean hasType() { 
534          return this.type != null && !this.type.isEmpty();
535        }
536
537        /**
538         * @param value {@link #type} (The kind of staging, such as pathological or clinical staging.)
539         */
540        public ConditionStageComponent setType(CodeableConcept value) { 
541          this.type = value;
542          return this;
543        }
544
545        protected void listChildren(List<Property> children) {
546          super.listChildren(children);
547          children.add(new Property("summary", "CodeableConcept", "A simple summary of the stage such as \"Stage 3\". The determination of the stage is disease-specific.", 0, 1, summary));
548          children.add(new Property("assessment", "Reference(ClinicalImpression|DiagnosticReport|Observation)", "Reference to a formal record of the evidence on which the staging assessment is based.", 0, java.lang.Integer.MAX_VALUE, assessment));
549          children.add(new Property("type", "CodeableConcept", "The kind of staging, such as pathological or clinical staging.", 0, 1, type));
550        }
551
552        @Override
553        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
554          switch (_hash) {
555          case -1857640538: /*summary*/  return new Property("summary", "CodeableConcept", "A simple summary of the stage such as \"Stage 3\". The determination of the stage is disease-specific.", 0, 1, summary);
556          case 2119382722: /*assessment*/  return new Property("assessment", "Reference(ClinicalImpression|DiagnosticReport|Observation)", "Reference to a formal record of the evidence on which the staging assessment is based.", 0, java.lang.Integer.MAX_VALUE, assessment);
557          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The kind of staging, such as pathological or clinical staging.", 0, 1, type);
558          default: return super.getNamedProperty(_hash, _name, _checkValid);
559          }
560
561        }
562
563      @Override
564      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
565        switch (hash) {
566        case -1857640538: /*summary*/ return this.summary == null ? new Base[0] : new Base[] {this.summary}; // CodeableConcept
567        case 2119382722: /*assessment*/ return this.assessment == null ? new Base[0] : this.assessment.toArray(new Base[this.assessment.size()]); // Reference
568        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
569        default: return super.getProperty(hash, name, checkValid);
570        }
571
572      }
573
574      @Override
575      public Base setProperty(int hash, String name, Base value) throws FHIRException {
576        switch (hash) {
577        case -1857640538: // summary
578          this.summary = castToCodeableConcept(value); // CodeableConcept
579          return value;
580        case 2119382722: // assessment
581          this.getAssessment().add(castToReference(value)); // Reference
582          return value;
583        case 3575610: // type
584          this.type = castToCodeableConcept(value); // CodeableConcept
585          return value;
586        default: return super.setProperty(hash, name, value);
587        }
588
589      }
590
591      @Override
592      public Base setProperty(String name, Base value) throws FHIRException {
593        if (name.equals("summary")) {
594          this.summary = castToCodeableConcept(value); // CodeableConcept
595        } else if (name.equals("assessment")) {
596          this.getAssessment().add(castToReference(value));
597        } else if (name.equals("type")) {
598          this.type = castToCodeableConcept(value); // CodeableConcept
599        } else
600          return super.setProperty(name, value);
601        return value;
602      }
603
604      @Override
605      public Base makeProperty(int hash, String name) throws FHIRException {
606        switch (hash) {
607        case -1857640538:  return getSummary(); 
608        case 2119382722:  return addAssessment(); 
609        case 3575610:  return getType(); 
610        default: return super.makeProperty(hash, name);
611        }
612
613      }
614
615      @Override
616      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
617        switch (hash) {
618        case -1857640538: /*summary*/ return new String[] {"CodeableConcept"};
619        case 2119382722: /*assessment*/ return new String[] {"Reference"};
620        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
621        default: return super.getTypesForProperty(hash, name);
622        }
623
624      }
625
626      @Override
627      public Base addChild(String name) throws FHIRException {
628        if (name.equals("summary")) {
629          this.summary = new CodeableConcept();
630          return this.summary;
631        }
632        else if (name.equals("assessment")) {
633          return addAssessment();
634        }
635        else if (name.equals("type")) {
636          this.type = new CodeableConcept();
637          return this.type;
638        }
639        else
640          return super.addChild(name);
641      }
642
643      public ConditionStageComponent copy() {
644        ConditionStageComponent dst = new ConditionStageComponent();
645        copyValues(dst);
646        dst.summary = summary == null ? null : summary.copy();
647        if (assessment != null) {
648          dst.assessment = new ArrayList<Reference>();
649          for (Reference i : assessment)
650            dst.assessment.add(i.copy());
651        };
652        dst.type = type == null ? null : type.copy();
653        return dst;
654      }
655
656      @Override
657      public boolean equalsDeep(Base other_) {
658        if (!super.equalsDeep(other_))
659          return false;
660        if (!(other_ instanceof ConditionStageComponent))
661          return false;
662        ConditionStageComponent o = (ConditionStageComponent) other_;
663        return compareDeep(summary, o.summary, true) && compareDeep(assessment, o.assessment, true) && compareDeep(type, o.type, true)
664          ;
665      }
666
667      @Override
668      public boolean equalsShallow(Base other_) {
669        if (!super.equalsShallow(other_))
670          return false;
671        if (!(other_ instanceof ConditionStageComponent))
672          return false;
673        ConditionStageComponent o = (ConditionStageComponent) other_;
674        return true;
675      }
676
677      public boolean isEmpty() {
678        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(summary, assessment, type
679          );
680      }
681
682  public String fhirType() {
683    return "Condition.stage";
684
685  }
686
687  }
688
689    @Block()
690    public static class ConditionEvidenceComponent extends BackboneElement implements IBaseBackboneElement {
691        /**
692         * A manifestation or symptom that led to the recording of this condition.
693         */
694        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
695        @Description(shortDefinition="Manifestation/symptom", formalDefinition="A manifestation or symptom that led to the recording of this condition." )
696        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/manifestation-or-symptom")
697        protected List<CodeableConcept> code;
698
699        /**
700         * Links to other relevant information, including pathology reports.
701         */
702        @Child(name = "detail", type = {Reference.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
703        @Description(shortDefinition="Supporting information found elsewhere", formalDefinition="Links to other relevant information, including pathology reports." )
704        protected List<Reference> detail;
705        /**
706         * The actual objects that are the target of the reference (Links to other relevant information, including pathology reports.)
707         */
708        protected List<Resource> detailTarget;
709
710
711        private static final long serialVersionUID = 1135831276L;
712
713    /**
714     * Constructor
715     */
716      public ConditionEvidenceComponent() {
717        super();
718      }
719
720        /**
721         * @return {@link #code} (A manifestation or symptom that led to the recording of this condition.)
722         */
723        public List<CodeableConcept> getCode() { 
724          if (this.code == null)
725            this.code = new ArrayList<CodeableConcept>();
726          return this.code;
727        }
728
729        /**
730         * @return Returns a reference to <code>this</code> for easy method chaining
731         */
732        public ConditionEvidenceComponent setCode(List<CodeableConcept> theCode) { 
733          this.code = theCode;
734          return this;
735        }
736
737        public boolean hasCode() { 
738          if (this.code == null)
739            return false;
740          for (CodeableConcept item : this.code)
741            if (!item.isEmpty())
742              return true;
743          return false;
744        }
745
746        public CodeableConcept addCode() { //3
747          CodeableConcept t = new CodeableConcept();
748          if (this.code == null)
749            this.code = new ArrayList<CodeableConcept>();
750          this.code.add(t);
751          return t;
752        }
753
754        public ConditionEvidenceComponent addCode(CodeableConcept t) { //3
755          if (t == null)
756            return this;
757          if (this.code == null)
758            this.code = new ArrayList<CodeableConcept>();
759          this.code.add(t);
760          return this;
761        }
762
763        /**
764         * @return The first repetition of repeating field {@link #code}, creating it if it does not already exist
765         */
766        public CodeableConcept getCodeFirstRep() { 
767          if (getCode().isEmpty()) {
768            addCode();
769          }
770          return getCode().get(0);
771        }
772
773        /**
774         * @return {@link #detail} (Links to other relevant information, including pathology reports.)
775         */
776        public List<Reference> getDetail() { 
777          if (this.detail == null)
778            this.detail = new ArrayList<Reference>();
779          return this.detail;
780        }
781
782        /**
783         * @return Returns a reference to <code>this</code> for easy method chaining
784         */
785        public ConditionEvidenceComponent setDetail(List<Reference> theDetail) { 
786          this.detail = theDetail;
787          return this;
788        }
789
790        public boolean hasDetail() { 
791          if (this.detail == null)
792            return false;
793          for (Reference item : this.detail)
794            if (!item.isEmpty())
795              return true;
796          return false;
797        }
798
799        public Reference addDetail() { //3
800          Reference t = new Reference();
801          if (this.detail == null)
802            this.detail = new ArrayList<Reference>();
803          this.detail.add(t);
804          return t;
805        }
806
807        public ConditionEvidenceComponent addDetail(Reference t) { //3
808          if (t == null)
809            return this;
810          if (this.detail == null)
811            this.detail = new ArrayList<Reference>();
812          this.detail.add(t);
813          return this;
814        }
815
816        /**
817         * @return The first repetition of repeating field {@link #detail}, creating it if it does not already exist
818         */
819        public Reference getDetailFirstRep() { 
820          if (getDetail().isEmpty()) {
821            addDetail();
822          }
823          return getDetail().get(0);
824        }
825
826        /**
827         * @deprecated Use Reference#setResource(IBaseResource) instead
828         */
829        @Deprecated
830        public List<Resource> getDetailTarget() { 
831          if (this.detailTarget == null)
832            this.detailTarget = new ArrayList<Resource>();
833          return this.detailTarget;
834        }
835
836        protected void listChildren(List<Property> children) {
837          super.listChildren(children);
838          children.add(new Property("code", "CodeableConcept", "A manifestation or symptom that led to the recording of this condition.", 0, java.lang.Integer.MAX_VALUE, code));
839          children.add(new Property("detail", "Reference(Any)", "Links to other relevant information, including pathology reports.", 0, java.lang.Integer.MAX_VALUE, detail));
840        }
841
842        @Override
843        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
844          switch (_hash) {
845          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A manifestation or symptom that led to the recording of this condition.", 0, java.lang.Integer.MAX_VALUE, code);
846          case -1335224239: /*detail*/  return new Property("detail", "Reference(Any)", "Links to other relevant information, including pathology reports.", 0, java.lang.Integer.MAX_VALUE, detail);
847          default: return super.getNamedProperty(_hash, _name, _checkValid);
848          }
849
850        }
851
852      @Override
853      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
854        switch (hash) {
855        case 3059181: /*code*/ return this.code == null ? new Base[0] : this.code.toArray(new Base[this.code.size()]); // CodeableConcept
856        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : this.detail.toArray(new Base[this.detail.size()]); // Reference
857        default: return super.getProperty(hash, name, checkValid);
858        }
859
860      }
861
862      @Override
863      public Base setProperty(int hash, String name, Base value) throws FHIRException {
864        switch (hash) {
865        case 3059181: // code
866          this.getCode().add(castToCodeableConcept(value)); // CodeableConcept
867          return value;
868        case -1335224239: // detail
869          this.getDetail().add(castToReference(value)); // Reference
870          return value;
871        default: return super.setProperty(hash, name, value);
872        }
873
874      }
875
876      @Override
877      public Base setProperty(String name, Base value) throws FHIRException {
878        if (name.equals("code")) {
879          this.getCode().add(castToCodeableConcept(value));
880        } else if (name.equals("detail")) {
881          this.getDetail().add(castToReference(value));
882        } else
883          return super.setProperty(name, value);
884        return value;
885      }
886
887      @Override
888      public Base makeProperty(int hash, String name) throws FHIRException {
889        switch (hash) {
890        case 3059181:  return addCode(); 
891        case -1335224239:  return addDetail(); 
892        default: return super.makeProperty(hash, name);
893        }
894
895      }
896
897      @Override
898      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
899        switch (hash) {
900        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
901        case -1335224239: /*detail*/ return new String[] {"Reference"};
902        default: return super.getTypesForProperty(hash, name);
903        }
904
905      }
906
907      @Override
908      public Base addChild(String name) throws FHIRException {
909        if (name.equals("code")) {
910          return addCode();
911        }
912        else if (name.equals("detail")) {
913          return addDetail();
914        }
915        else
916          return super.addChild(name);
917      }
918
919      public ConditionEvidenceComponent copy() {
920        ConditionEvidenceComponent dst = new ConditionEvidenceComponent();
921        copyValues(dst);
922        if (code != null) {
923          dst.code = new ArrayList<CodeableConcept>();
924          for (CodeableConcept i : code)
925            dst.code.add(i.copy());
926        };
927        if (detail != null) {
928          dst.detail = new ArrayList<Reference>();
929          for (Reference i : detail)
930            dst.detail.add(i.copy());
931        };
932        return dst;
933      }
934
935      @Override
936      public boolean equalsDeep(Base other_) {
937        if (!super.equalsDeep(other_))
938          return false;
939        if (!(other_ instanceof ConditionEvidenceComponent))
940          return false;
941        ConditionEvidenceComponent o = (ConditionEvidenceComponent) other_;
942        return compareDeep(code, o.code, true) && compareDeep(detail, o.detail, true);
943      }
944
945      @Override
946      public boolean equalsShallow(Base other_) {
947        if (!super.equalsShallow(other_))
948          return false;
949        if (!(other_ instanceof ConditionEvidenceComponent))
950          return false;
951        ConditionEvidenceComponent o = (ConditionEvidenceComponent) other_;
952        return true;
953      }
954
955      public boolean isEmpty() {
956        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, detail);
957      }
958
959  public String fhirType() {
960    return "Condition.evidence";
961
962  }
963
964  }
965
966    /**
967     * Business identifiers assigned to this condition by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
968     */
969    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
970    @Description(shortDefinition="External Ids for this condition", formalDefinition="Business identifiers assigned to this condition by the performer or other systems which remain constant as the resource is updated and propagates from server to server." )
971    protected List<Identifier> identifier;
972
973    /**
974     * The clinical status of the condition.
975     */
976    @Child(name = "clinicalStatus", type = {CodeType.class}, order=1, min=0, max=1, modifier=true, summary=true)
977    @Description(shortDefinition="active | recurrence | relapse | well-controlled | poorly-controlled | inactive | remission | resolved", formalDefinition="The clinical status of the condition." )
978    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-clinical")
979    protected Enumeration<ConditionClinicalStatus> clinicalStatus;
980
981    /**
982     * The verification status to support the clinical status of the condition.
983     */
984    @Child(name = "verificationStatus", type = {CodeType.class}, order=2, min=0, max=1, modifier=true, summary=true)
985    @Description(shortDefinition="unconfirmed | provisional | differential | confirmed | refuted | entered-in-error", formalDefinition="The verification status to support the clinical status of the condition." )
986    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-ver-status")
987    protected Enumeration<ConditionVerificationStatus> verificationStatus;
988
989    /**
990     * A category assigned to the condition.
991     */
992    @Child(name = "category", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
993    @Description(shortDefinition="problem-list-item | encounter-diagnosis", formalDefinition="A category assigned to the condition." )
994    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-category")
995    protected List<CodeableConcept> category;
996
997    /**
998     * A subjective assessment of the severity of the condition as evaluated by the clinician.
999     */
1000    @Child(name = "severity", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=false)
1001    @Description(shortDefinition="Subjective severity of condition", formalDefinition="A subjective assessment of the severity of the condition as evaluated by the clinician." )
1002    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-severity")
1003    protected CodeableConcept severity;
1004
1005    /**
1006     * Identification of the condition, problem or diagnosis.
1007     */
1008    @Child(name = "code", type = {CodeableConcept.class}, order=5, min=0, max=1, modifier=false, summary=true)
1009    @Description(shortDefinition="Identification of the condition, problem or diagnosis", formalDefinition="Identification of the condition, problem or diagnosis." )
1010    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-code")
1011    protected CodeableConcept code;
1012
1013    /**
1014     * The anatomical location where this condition manifests itself.
1015     */
1016    @Child(name = "bodySite", type = {CodeableConcept.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1017    @Description(shortDefinition="Anatomical location, if relevant", formalDefinition="The anatomical location where this condition manifests itself." )
1018    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/body-site")
1019    protected List<CodeableConcept> bodySite;
1020
1021    /**
1022     * Indicates the patient or group who the condition record is associated with.
1023     */
1024    @Child(name = "subject", type = {Patient.class, Group.class}, order=7, min=1, max=1, modifier=false, summary=true)
1025    @Description(shortDefinition="Who has the condition?", formalDefinition="Indicates the patient or group who the condition record is associated with." )
1026    protected Reference subject;
1027
1028    /**
1029     * The actual object that is the target of the reference (Indicates the patient or group who the condition record is associated with.)
1030     */
1031    protected Resource subjectTarget;
1032
1033    /**
1034     * Encounter during which the condition was first asserted.
1035     */
1036    @Child(name = "context", type = {Encounter.class, EpisodeOfCare.class}, order=8, min=0, max=1, modifier=false, summary=true)
1037    @Description(shortDefinition="Encounter or episode when condition first asserted", formalDefinition="Encounter during which the condition was first asserted." )
1038    protected Reference context;
1039
1040    /**
1041     * The actual object that is the target of the reference (Encounter during which the condition was first asserted.)
1042     */
1043    protected Resource contextTarget;
1044
1045    /**
1046     * Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
1047     */
1048    @Child(name = "onset", type = {DateTimeType.class, Age.class, Period.class, Range.class, StringType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1049    @Description(shortDefinition="Estimated or actual date,  date-time, or age", formalDefinition="Estimated or actual date or date-time  the condition began, in the opinion of the clinician." )
1050    protected Type onset;
1051
1052    /**
1053     * The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.
1054     */
1055    @Child(name = "abatement", type = {DateTimeType.class, Age.class, Period.class, Range.class, StringType.class}, order=10, min=0, max=1, modifier=false, summary=false)
1056    @Description(shortDefinition="When in resolution/remission", formalDefinition="The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate." )
1057    protected Type abatement;
1058
1059    /**
1060     * The date on which the existence of the Condition was first asserted or acknowledged.
1061     */
1062    @Child(name = "assertedDate", type = {DateTimeType.class}, order=11, min=0, max=1, modifier=false, summary=true)
1063    @Description(shortDefinition="Date record was believed accurate", formalDefinition="The date on which the existence of the Condition was first asserted or acknowledged." )
1064    protected DateTimeType assertedDate;
1065
1066    /**
1067     * Individual who recorded the record and takes responsibility for its content.
1068     */
1069    @Child(name = "recorder", type = {Practitioner.class, Patient.class, RelatedPerson.class}, order=12, min=0, max=1, modifier=false, summary=true)
1070    @Description(shortDefinition="Who recorded the condition", formalDefinition="Individual who recorded the record and takes responsibility for its content." )
1071    protected Reference recorder;
1072
1073    /**
1074     * The actual object that is the target of the reference (Individual who recorded the record and takes responsibility for its content.)
1075     */
1076    protected Resource recorderTarget;
1077
1078    /**
1079     * Individual who is making the condition statement.
1080     */
1081    @Child(name = "asserter", type = {Practitioner.class, PractitionerRole.class, Patient.class, RelatedPerson.class}, order=13, min=0, max=1, modifier=false, summary=true)
1082    @Description(shortDefinition="Person who asserts this condition", formalDefinition="Individual who is making the condition statement." )
1083    protected Reference asserter;
1084
1085    /**
1086     * The actual object that is the target of the reference (Individual who is making the condition statement.)
1087     */
1088    protected Resource asserterTarget;
1089
1090    /**
1091     * Clinical stage or grade of a condition. May include formal severity assessments.
1092     */
1093    @Child(name = "stage", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1094    @Description(shortDefinition="Stage/grade, usually assessed formally", formalDefinition="Clinical stage or grade of a condition. May include formal severity assessments." )
1095    protected List<ConditionStageComponent> stage;
1096
1097    /**
1098     * Supporting evidence / manifestations that are the basis of the Condition's verification status, such as evidence that confirmed or refuted the condition.
1099     */
1100    @Child(name = "evidence", type = {}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1101    @Description(shortDefinition="Supporting evidence", formalDefinition="Supporting evidence / manifestations that are the basis of the Condition's verification status, such as evidence that confirmed or refuted the condition." )
1102    protected List<ConditionEvidenceComponent> evidence;
1103
1104    /**
1105     * Additional information about the Condition. This is a general notes/comments entry  for description of the Condition, its diagnosis and prognosis.
1106     */
1107    @Child(name = "note", type = {Annotation.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1108    @Description(shortDefinition="Additional information about the Condition", formalDefinition="Additional information about the Condition. This is a general notes/comments entry  for description of the Condition, its diagnosis and prognosis." )
1109    protected List<Annotation> note;
1110
1111    private static final long serialVersionUID = 874829326L;
1112
1113  /**
1114   * Constructor
1115   */
1116    public Condition() {
1117      super();
1118    }
1119
1120  /**
1121   * Constructor
1122   */
1123    public Condition(Reference subject) {
1124      super();
1125      this.subject = subject;
1126    }
1127
1128    /**
1129     * @return {@link #identifier} (Business identifiers assigned to this condition by the performer or other systems which remain constant as the resource is updated and propagates from server to server.)
1130     */
1131    public List<Identifier> getIdentifier() { 
1132      if (this.identifier == null)
1133        this.identifier = new ArrayList<Identifier>();
1134      return this.identifier;
1135    }
1136
1137    /**
1138     * @return Returns a reference to <code>this</code> for easy method chaining
1139     */
1140    public Condition setIdentifier(List<Identifier> theIdentifier) { 
1141      this.identifier = theIdentifier;
1142      return this;
1143    }
1144
1145    public boolean hasIdentifier() { 
1146      if (this.identifier == null)
1147        return false;
1148      for (Identifier item : this.identifier)
1149        if (!item.isEmpty())
1150          return true;
1151      return false;
1152    }
1153
1154    public Identifier addIdentifier() { //3
1155      Identifier t = new Identifier();
1156      if (this.identifier == null)
1157        this.identifier = new ArrayList<Identifier>();
1158      this.identifier.add(t);
1159      return t;
1160    }
1161
1162    public Condition addIdentifier(Identifier t) { //3
1163      if (t == null)
1164        return this;
1165      if (this.identifier == null)
1166        this.identifier = new ArrayList<Identifier>();
1167      this.identifier.add(t);
1168      return this;
1169    }
1170
1171    /**
1172     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1173     */
1174    public Identifier getIdentifierFirstRep() { 
1175      if (getIdentifier().isEmpty()) {
1176        addIdentifier();
1177      }
1178      return getIdentifier().get(0);
1179    }
1180
1181    /**
1182     * @return {@link #clinicalStatus} (The clinical status of the condition.). This is the underlying object with id, value and extensions. The accessor "getClinicalStatus" gives direct access to the value
1183     */
1184    public Enumeration<ConditionClinicalStatus> getClinicalStatusElement() { 
1185      if (this.clinicalStatus == null)
1186        if (Configuration.errorOnAutoCreate())
1187          throw new Error("Attempt to auto-create Condition.clinicalStatus");
1188        else if (Configuration.doAutoCreate())
1189          this.clinicalStatus = new Enumeration<ConditionClinicalStatus>(new ConditionClinicalStatusEnumFactory()); // bb
1190      return this.clinicalStatus;
1191    }
1192
1193    public boolean hasClinicalStatusElement() { 
1194      return this.clinicalStatus != null && !this.clinicalStatus.isEmpty();
1195    }
1196
1197    public boolean hasClinicalStatus() { 
1198      return this.clinicalStatus != null && !this.clinicalStatus.isEmpty();
1199    }
1200
1201    /**
1202     * @param value {@link #clinicalStatus} (The clinical status of the condition.). This is the underlying object with id, value and extensions. The accessor "getClinicalStatus" gives direct access to the value
1203     */
1204    public Condition setClinicalStatusElement(Enumeration<ConditionClinicalStatus> value) { 
1205      this.clinicalStatus = value;
1206      return this;
1207    }
1208
1209    /**
1210     * @return The clinical status of the condition.
1211     */
1212    public ConditionClinicalStatus getClinicalStatus() { 
1213      return this.clinicalStatus == null ? null : this.clinicalStatus.getValue();
1214    }
1215
1216    /**
1217     * @param value The clinical status of the condition.
1218     */
1219    public Condition setClinicalStatus(ConditionClinicalStatus value) { 
1220      if (value == null)
1221        this.clinicalStatus = null;
1222      else {
1223        if (this.clinicalStatus == null)
1224          this.clinicalStatus = new Enumeration<ConditionClinicalStatus>(new ConditionClinicalStatusEnumFactory());
1225        this.clinicalStatus.setValue(value);
1226      }
1227      return this;
1228    }
1229
1230    /**
1231     * @return {@link #verificationStatus} (The verification status to support the clinical status of the condition.). This is the underlying object with id, value and extensions. The accessor "getVerificationStatus" gives direct access to the value
1232     */
1233    public Enumeration<ConditionVerificationStatus> getVerificationStatusElement() { 
1234      if (this.verificationStatus == null)
1235        if (Configuration.errorOnAutoCreate())
1236          throw new Error("Attempt to auto-create Condition.verificationStatus");
1237        else if (Configuration.doAutoCreate())
1238          this.verificationStatus = new Enumeration<ConditionVerificationStatus>(new ConditionVerificationStatusEnumFactory()); // bb
1239      return this.verificationStatus;
1240    }
1241
1242    public boolean hasVerificationStatusElement() { 
1243      return this.verificationStatus != null && !this.verificationStatus.isEmpty();
1244    }
1245
1246    public boolean hasVerificationStatus() { 
1247      return this.verificationStatus != null && !this.verificationStatus.isEmpty();
1248    }
1249
1250    /**
1251     * @param value {@link #verificationStatus} (The verification status to support the clinical status of the condition.). This is the underlying object with id, value and extensions. The accessor "getVerificationStatus" gives direct access to the value
1252     */
1253    public Condition setVerificationStatusElement(Enumeration<ConditionVerificationStatus> value) { 
1254      this.verificationStatus = value;
1255      return this;
1256    }
1257
1258    /**
1259     * @return The verification status to support the clinical status of the condition.
1260     */
1261    public ConditionVerificationStatus getVerificationStatus() { 
1262      return this.verificationStatus == null ? null : this.verificationStatus.getValue();
1263    }
1264
1265    /**
1266     * @param value The verification status to support the clinical status of the condition.
1267     */
1268    public Condition setVerificationStatus(ConditionVerificationStatus value) { 
1269      if (value == null)
1270        this.verificationStatus = null;
1271      else {
1272        if (this.verificationStatus == null)
1273          this.verificationStatus = new Enumeration<ConditionVerificationStatus>(new ConditionVerificationStatusEnumFactory());
1274        this.verificationStatus.setValue(value);
1275      }
1276      return this;
1277    }
1278
1279    /**
1280     * @return {@link #category} (A category assigned to the condition.)
1281     */
1282    public List<CodeableConcept> getCategory() { 
1283      if (this.category == null)
1284        this.category = new ArrayList<CodeableConcept>();
1285      return this.category;
1286    }
1287
1288    /**
1289     * @return Returns a reference to <code>this</code> for easy method chaining
1290     */
1291    public Condition setCategory(List<CodeableConcept> theCategory) { 
1292      this.category = theCategory;
1293      return this;
1294    }
1295
1296    public boolean hasCategory() { 
1297      if (this.category == null)
1298        return false;
1299      for (CodeableConcept item : this.category)
1300        if (!item.isEmpty())
1301          return true;
1302      return false;
1303    }
1304
1305    public CodeableConcept addCategory() { //3
1306      CodeableConcept t = new CodeableConcept();
1307      if (this.category == null)
1308        this.category = new ArrayList<CodeableConcept>();
1309      this.category.add(t);
1310      return t;
1311    }
1312
1313    public Condition addCategory(CodeableConcept t) { //3
1314      if (t == null)
1315        return this;
1316      if (this.category == null)
1317        this.category = new ArrayList<CodeableConcept>();
1318      this.category.add(t);
1319      return this;
1320    }
1321
1322    /**
1323     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist
1324     */
1325    public CodeableConcept getCategoryFirstRep() { 
1326      if (getCategory().isEmpty()) {
1327        addCategory();
1328      }
1329      return getCategory().get(0);
1330    }
1331
1332    /**
1333     * @return {@link #severity} (A subjective assessment of the severity of the condition as evaluated by the clinician.)
1334     */
1335    public CodeableConcept getSeverity() { 
1336      if (this.severity == null)
1337        if (Configuration.errorOnAutoCreate())
1338          throw new Error("Attempt to auto-create Condition.severity");
1339        else if (Configuration.doAutoCreate())
1340          this.severity = new CodeableConcept(); // cc
1341      return this.severity;
1342    }
1343
1344    public boolean hasSeverity() { 
1345      return this.severity != null && !this.severity.isEmpty();
1346    }
1347
1348    /**
1349     * @param value {@link #severity} (A subjective assessment of the severity of the condition as evaluated by the clinician.)
1350     */
1351    public Condition setSeverity(CodeableConcept value) { 
1352      this.severity = value;
1353      return this;
1354    }
1355
1356    /**
1357     * @return {@link #code} (Identification of the condition, problem or diagnosis.)
1358     */
1359    public CodeableConcept getCode() { 
1360      if (this.code == null)
1361        if (Configuration.errorOnAutoCreate())
1362          throw new Error("Attempt to auto-create Condition.code");
1363        else if (Configuration.doAutoCreate())
1364          this.code = new CodeableConcept(); // cc
1365      return this.code;
1366    }
1367
1368    public boolean hasCode() { 
1369      return this.code != null && !this.code.isEmpty();
1370    }
1371
1372    /**
1373     * @param value {@link #code} (Identification of the condition, problem or diagnosis.)
1374     */
1375    public Condition setCode(CodeableConcept value) { 
1376      this.code = value;
1377      return this;
1378    }
1379
1380    /**
1381     * @return {@link #bodySite} (The anatomical location where this condition manifests itself.)
1382     */
1383    public List<CodeableConcept> getBodySite() { 
1384      if (this.bodySite == null)
1385        this.bodySite = new ArrayList<CodeableConcept>();
1386      return this.bodySite;
1387    }
1388
1389    /**
1390     * @return Returns a reference to <code>this</code> for easy method chaining
1391     */
1392    public Condition setBodySite(List<CodeableConcept> theBodySite) { 
1393      this.bodySite = theBodySite;
1394      return this;
1395    }
1396
1397    public boolean hasBodySite() { 
1398      if (this.bodySite == null)
1399        return false;
1400      for (CodeableConcept item : this.bodySite)
1401        if (!item.isEmpty())
1402          return true;
1403      return false;
1404    }
1405
1406    public CodeableConcept addBodySite() { //3
1407      CodeableConcept t = new CodeableConcept();
1408      if (this.bodySite == null)
1409        this.bodySite = new ArrayList<CodeableConcept>();
1410      this.bodySite.add(t);
1411      return t;
1412    }
1413
1414    public Condition addBodySite(CodeableConcept t) { //3
1415      if (t == null)
1416        return this;
1417      if (this.bodySite == null)
1418        this.bodySite = new ArrayList<CodeableConcept>();
1419      this.bodySite.add(t);
1420      return this;
1421    }
1422
1423    /**
1424     * @return The first repetition of repeating field {@link #bodySite}, creating it if it does not already exist
1425     */
1426    public CodeableConcept getBodySiteFirstRep() { 
1427      if (getBodySite().isEmpty()) {
1428        addBodySite();
1429      }
1430      return getBodySite().get(0);
1431    }
1432
1433    /**
1434     * @return {@link #subject} (Indicates the patient or group who the condition record is associated with.)
1435     */
1436    public Reference getSubject() { 
1437      if (this.subject == null)
1438        if (Configuration.errorOnAutoCreate())
1439          throw new Error("Attempt to auto-create Condition.subject");
1440        else if (Configuration.doAutoCreate())
1441          this.subject = new Reference(); // cc
1442      return this.subject;
1443    }
1444
1445    public boolean hasSubject() { 
1446      return this.subject != null && !this.subject.isEmpty();
1447    }
1448
1449    /**
1450     * @param value {@link #subject} (Indicates the patient or group who the condition record is associated with.)
1451     */
1452    public Condition setSubject(Reference value) { 
1453      this.subject = value;
1454      return this;
1455    }
1456
1457    /**
1458     * @return {@link #subject} 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. (Indicates the patient or group who the condition record is associated with.)
1459     */
1460    public Resource getSubjectTarget() { 
1461      return this.subjectTarget;
1462    }
1463
1464    /**
1465     * @param value {@link #subject} 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. (Indicates the patient or group who the condition record is associated with.)
1466     */
1467    public Condition setSubjectTarget(Resource value) { 
1468      this.subjectTarget = value;
1469      return this;
1470    }
1471
1472    /**
1473     * @return {@link #context} (Encounter during which the condition was first asserted.)
1474     */
1475    public Reference getContext() { 
1476      if (this.context == null)
1477        if (Configuration.errorOnAutoCreate())
1478          throw new Error("Attempt to auto-create Condition.context");
1479        else if (Configuration.doAutoCreate())
1480          this.context = new Reference(); // cc
1481      return this.context;
1482    }
1483
1484    public boolean hasContext() { 
1485      return this.context != null && !this.context.isEmpty();
1486    }
1487
1488    /**
1489     * @param value {@link #context} (Encounter during which the condition was first asserted.)
1490     */
1491    public Condition setContext(Reference value) { 
1492      this.context = value;
1493      return this;
1494    }
1495
1496    /**
1497     * @return {@link #context} 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. (Encounter during which the condition was first asserted.)
1498     */
1499    public Resource getContextTarget() { 
1500      return this.contextTarget;
1501    }
1502
1503    /**
1504     * @param value {@link #context} 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. (Encounter during which the condition was first asserted.)
1505     */
1506    public Condition setContextTarget(Resource value) { 
1507      this.contextTarget = value;
1508      return this;
1509    }
1510
1511    /**
1512     * @return {@link #onset} (Estimated or actual date or date-time  the condition began, in the opinion of the clinician.)
1513     */
1514    public Type getOnset() { 
1515      return this.onset;
1516    }
1517
1518    /**
1519     * @return {@link #onset} (Estimated or actual date or date-time  the condition began, in the opinion of the clinician.)
1520     */
1521    public DateTimeType getOnsetDateTimeType() throws FHIRException { 
1522      if (this.onset == null)
1523        return null;
1524      if (!(this.onset instanceof DateTimeType))
1525        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.onset.getClass().getName()+" was encountered");
1526      return (DateTimeType) this.onset;
1527    }
1528
1529    public boolean hasOnsetDateTimeType() { 
1530      return this != null && this.onset instanceof DateTimeType;
1531    }
1532
1533    /**
1534     * @return {@link #onset} (Estimated or actual date or date-time  the condition began, in the opinion of the clinician.)
1535     */
1536    public Age getOnsetAge() throws FHIRException { 
1537      if (this.onset == null)
1538        return null;
1539      if (!(this.onset instanceof Age))
1540        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.onset.getClass().getName()+" was encountered");
1541      return (Age) this.onset;
1542    }
1543
1544    public boolean hasOnsetAge() { 
1545      return this != null && this.onset instanceof Age;
1546    }
1547
1548    /**
1549     * @return {@link #onset} (Estimated or actual date or date-time  the condition began, in the opinion of the clinician.)
1550     */
1551    public Period getOnsetPeriod() throws FHIRException { 
1552      if (this.onset == null)
1553        return null;
1554      if (!(this.onset instanceof Period))
1555        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.onset.getClass().getName()+" was encountered");
1556      return (Period) this.onset;
1557    }
1558
1559    public boolean hasOnsetPeriod() { 
1560      return this != null && this.onset instanceof Period;
1561    }
1562
1563    /**
1564     * @return {@link #onset} (Estimated or actual date or date-time  the condition began, in the opinion of the clinician.)
1565     */
1566    public Range getOnsetRange() throws FHIRException { 
1567      if (this.onset == null)
1568        return null;
1569      if (!(this.onset instanceof Range))
1570        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.onset.getClass().getName()+" was encountered");
1571      return (Range) this.onset;
1572    }
1573
1574    public boolean hasOnsetRange() { 
1575      return this != null && this.onset instanceof Range;
1576    }
1577
1578    /**
1579     * @return {@link #onset} (Estimated or actual date or date-time  the condition began, in the opinion of the clinician.)
1580     */
1581    public StringType getOnsetStringType() throws FHIRException { 
1582      if (this.onset == null)
1583        return null;
1584      if (!(this.onset instanceof StringType))
1585        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.onset.getClass().getName()+" was encountered");
1586      return (StringType) this.onset;
1587    }
1588
1589    public boolean hasOnsetStringType() { 
1590      return this != null && this.onset instanceof StringType;
1591    }
1592
1593    public boolean hasOnset() { 
1594      return this.onset != null && !this.onset.isEmpty();
1595    }
1596
1597    /**
1598     * @param value {@link #onset} (Estimated or actual date or date-time  the condition began, in the opinion of the clinician.)
1599     */
1600    public Condition setOnset(Type value) { 
1601      if (value != null && !(value instanceof DateTimeType || value instanceof Age || value instanceof Period || value instanceof Range || value instanceof StringType))
1602        throw new Error("Not the right type for Condition.onset[x]: "+value.fhirType());
1603      this.onset = value;
1604      return this;
1605    }
1606
1607    /**
1608     * @return {@link #abatement} (The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.)
1609     */
1610    public Type getAbatement() { 
1611      return this.abatement;
1612    }
1613
1614    /**
1615     * @return {@link #abatement} (The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.)
1616     */
1617    public DateTimeType getAbatementDateTimeType() throws FHIRException { 
1618      if (this.abatement == null)
1619        return null;
1620      if (!(this.abatement instanceof DateTimeType))
1621        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.abatement.getClass().getName()+" was encountered");
1622      return (DateTimeType) this.abatement;
1623    }
1624
1625    public boolean hasAbatementDateTimeType() { 
1626      return this != null && this.abatement instanceof DateTimeType;
1627    }
1628
1629    /**
1630     * @return {@link #abatement} (The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.)
1631     */
1632    public Age getAbatementAge() throws FHIRException { 
1633      if (this.abatement == null)
1634        return null;
1635      if (!(this.abatement instanceof Age))
1636        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.abatement.getClass().getName()+" was encountered");
1637      return (Age) this.abatement;
1638    }
1639
1640    public boolean hasAbatementAge() { 
1641      return this != null && this.abatement instanceof Age;
1642    }
1643
1644    /**
1645     * @return {@link #abatement} (The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.)
1646     */
1647    public Period getAbatementPeriod() throws FHIRException { 
1648      if (this.abatement == null)
1649        return null;
1650      if (!(this.abatement instanceof Period))
1651        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.abatement.getClass().getName()+" was encountered");
1652      return (Period) this.abatement;
1653    }
1654
1655    public boolean hasAbatementPeriod() { 
1656      return this != null && this.abatement instanceof Period;
1657    }
1658
1659    /**
1660     * @return {@link #abatement} (The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.)
1661     */
1662    public Range getAbatementRange() throws FHIRException { 
1663      if (this.abatement == null)
1664        return null;
1665      if (!(this.abatement instanceof Range))
1666        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.abatement.getClass().getName()+" was encountered");
1667      return (Range) this.abatement;
1668    }
1669
1670    public boolean hasAbatementRange() { 
1671      return this != null && this.abatement instanceof Range;
1672    }
1673
1674    /**
1675     * @return {@link #abatement} (The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.)
1676     */
1677    public StringType getAbatementStringType() throws FHIRException { 
1678      if (this.abatement == null)
1679        return null;
1680      if (!(this.abatement instanceof StringType))
1681        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.abatement.getClass().getName()+" was encountered");
1682      return (StringType) this.abatement;
1683    }
1684
1685    public boolean hasAbatementStringType() { 
1686      return this != null && this.abatement instanceof StringType;
1687    }
1688
1689    public boolean hasAbatement() { 
1690      return this.abatement != null && !this.abatement.isEmpty();
1691    }
1692
1693    /**
1694     * @param value {@link #abatement} (The date or estimated date that the condition resolved or went into remission. This is called "abatement" because of the many overloaded connotations associated with "remission" or "resolution" - Conditions are never really resolved, but they can abate.)
1695     */
1696    public Condition setAbatement(Type value) { 
1697      if (value != null && !(value instanceof DateTimeType || value instanceof Age || value instanceof Period || value instanceof Range || value instanceof StringType))
1698        throw new Error("Not the right type for Condition.abatement[x]: "+value.fhirType());
1699      this.abatement = value;
1700      return this;
1701    }
1702
1703    /**
1704     * @return {@link #assertedDate} (The date on which the existence of the Condition was first asserted or acknowledged.). This is the underlying object with id, value and extensions. The accessor "getAssertedDate" gives direct access to the value
1705     */
1706    public DateTimeType getAssertedDateElement() { 
1707      if (this.assertedDate == null)
1708        if (Configuration.errorOnAutoCreate())
1709          throw new Error("Attempt to auto-create Condition.assertedDate");
1710        else if (Configuration.doAutoCreate())
1711          this.assertedDate = new DateTimeType(); // bb
1712      return this.assertedDate;
1713    }
1714
1715    public boolean hasAssertedDateElement() { 
1716      return this.assertedDate != null && !this.assertedDate.isEmpty();
1717    }
1718
1719    public boolean hasAssertedDate() { 
1720      return this.assertedDate != null && !this.assertedDate.isEmpty();
1721    }
1722
1723    /**
1724     * @param value {@link #assertedDate} (The date on which the existence of the Condition was first asserted or acknowledged.). This is the underlying object with id, value and extensions. The accessor "getAssertedDate" gives direct access to the value
1725     */
1726    public Condition setAssertedDateElement(DateTimeType value) { 
1727      this.assertedDate = value;
1728      return this;
1729    }
1730
1731    /**
1732     * @return The date on which the existence of the Condition was first asserted or acknowledged.
1733     */
1734    public Date getAssertedDate() { 
1735      return this.assertedDate == null ? null : this.assertedDate.getValue();
1736    }
1737
1738    /**
1739     * @param value The date on which the existence of the Condition was first asserted or acknowledged.
1740     */
1741    public Condition setAssertedDate(Date value) { 
1742      if (value == null)
1743        this.assertedDate = null;
1744      else {
1745        if (this.assertedDate == null)
1746          this.assertedDate = new DateTimeType();
1747        this.assertedDate.setValue(value);
1748      }
1749      return this;
1750    }
1751
1752    /**
1753     * @return {@link #recorder} (Individual who recorded the record and takes responsibility for its content.)
1754     */
1755    public Reference getRecorder() { 
1756      if (this.recorder == null)
1757        if (Configuration.errorOnAutoCreate())
1758          throw new Error("Attempt to auto-create Condition.recorder");
1759        else if (Configuration.doAutoCreate())
1760          this.recorder = new Reference(); // cc
1761      return this.recorder;
1762    }
1763
1764    public boolean hasRecorder() { 
1765      return this.recorder != null && !this.recorder.isEmpty();
1766    }
1767
1768    /**
1769     * @param value {@link #recorder} (Individual who recorded the record and takes responsibility for its content.)
1770     */
1771    public Condition setRecorder(Reference value) { 
1772      this.recorder = value;
1773      return this;
1774    }
1775
1776    /**
1777     * @return {@link #recorder} 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. (Individual who recorded the record and takes responsibility for its content.)
1778     */
1779    public Resource getRecorderTarget() { 
1780      return this.recorderTarget;
1781    }
1782
1783    /**
1784     * @param value {@link #recorder} 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. (Individual who recorded the record and takes responsibility for its content.)
1785     */
1786    public Condition setRecorderTarget(Resource value) { 
1787      this.recorderTarget = value;
1788      return this;
1789    }
1790
1791    /**
1792     * @return {@link #asserter} (Individual who is making the condition statement.)
1793     */
1794    public Reference getAsserter() { 
1795      if (this.asserter == null)
1796        if (Configuration.errorOnAutoCreate())
1797          throw new Error("Attempt to auto-create Condition.asserter");
1798        else if (Configuration.doAutoCreate())
1799          this.asserter = new Reference(); // cc
1800      return this.asserter;
1801    }
1802
1803    public boolean hasAsserter() { 
1804      return this.asserter != null && !this.asserter.isEmpty();
1805    }
1806
1807    /**
1808     * @param value {@link #asserter} (Individual who is making the condition statement.)
1809     */
1810    public Condition setAsserter(Reference value) { 
1811      this.asserter = value;
1812      return this;
1813    }
1814
1815    /**
1816     * @return {@link #asserter} 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. (Individual who is making the condition statement.)
1817     */
1818    public Resource getAsserterTarget() { 
1819      return this.asserterTarget;
1820    }
1821
1822    /**
1823     * @param value {@link #asserter} 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. (Individual who is making the condition statement.)
1824     */
1825    public Condition setAsserterTarget(Resource value) { 
1826      this.asserterTarget = value;
1827      return this;
1828    }
1829
1830    /**
1831     * @return {@link #stage} (Clinical stage or grade of a condition. May include formal severity assessments.)
1832     */
1833    public List<ConditionStageComponent> getStage() { 
1834      if (this.stage == null)
1835        this.stage = new ArrayList<ConditionStageComponent>();
1836      return this.stage;
1837    }
1838
1839    /**
1840     * @return Returns a reference to <code>this</code> for easy method chaining
1841     */
1842    public Condition setStage(List<ConditionStageComponent> theStage) { 
1843      this.stage = theStage;
1844      return this;
1845    }
1846
1847    public boolean hasStage() { 
1848      if (this.stage == null)
1849        return false;
1850      for (ConditionStageComponent item : this.stage)
1851        if (!item.isEmpty())
1852          return true;
1853      return false;
1854    }
1855
1856    public ConditionStageComponent addStage() { //3
1857      ConditionStageComponent t = new ConditionStageComponent();
1858      if (this.stage == null)
1859        this.stage = new ArrayList<ConditionStageComponent>();
1860      this.stage.add(t);
1861      return t;
1862    }
1863
1864    public Condition addStage(ConditionStageComponent t) { //3
1865      if (t == null)
1866        return this;
1867      if (this.stage == null)
1868        this.stage = new ArrayList<ConditionStageComponent>();
1869      this.stage.add(t);
1870      return this;
1871    }
1872
1873    /**
1874     * @return The first repetition of repeating field {@link #stage}, creating it if it does not already exist
1875     */
1876    public ConditionStageComponent getStageFirstRep() { 
1877      if (getStage().isEmpty()) {
1878        addStage();
1879      }
1880      return getStage().get(0);
1881    }
1882
1883    /**
1884     * @return {@link #evidence} (Supporting evidence / manifestations that are the basis of the Condition's verification status, such as evidence that confirmed or refuted the condition.)
1885     */
1886    public List<ConditionEvidenceComponent> getEvidence() { 
1887      if (this.evidence == null)
1888        this.evidence = new ArrayList<ConditionEvidenceComponent>();
1889      return this.evidence;
1890    }
1891
1892    /**
1893     * @return Returns a reference to <code>this</code> for easy method chaining
1894     */
1895    public Condition setEvidence(List<ConditionEvidenceComponent> theEvidence) { 
1896      this.evidence = theEvidence;
1897      return this;
1898    }
1899
1900    public boolean hasEvidence() { 
1901      if (this.evidence == null)
1902        return false;
1903      for (ConditionEvidenceComponent item : this.evidence)
1904        if (!item.isEmpty())
1905          return true;
1906      return false;
1907    }
1908
1909    public ConditionEvidenceComponent addEvidence() { //3
1910      ConditionEvidenceComponent t = new ConditionEvidenceComponent();
1911      if (this.evidence == null)
1912        this.evidence = new ArrayList<ConditionEvidenceComponent>();
1913      this.evidence.add(t);
1914      return t;
1915    }
1916
1917    public Condition addEvidence(ConditionEvidenceComponent t) { //3
1918      if (t == null)
1919        return this;
1920      if (this.evidence == null)
1921        this.evidence = new ArrayList<ConditionEvidenceComponent>();
1922      this.evidence.add(t);
1923      return this;
1924    }
1925
1926    /**
1927     * @return The first repetition of repeating field {@link #evidence}, creating it if it does not already exist
1928     */
1929    public ConditionEvidenceComponent getEvidenceFirstRep() { 
1930      if (getEvidence().isEmpty()) {
1931        addEvidence();
1932      }
1933      return getEvidence().get(0);
1934    }
1935
1936    /**
1937     * @return {@link #note} (Additional information about the Condition. This is a general notes/comments entry  for description of the Condition, its diagnosis and prognosis.)
1938     */
1939    public List<Annotation> getNote() { 
1940      if (this.note == null)
1941        this.note = new ArrayList<Annotation>();
1942      return this.note;
1943    }
1944
1945    /**
1946     * @return Returns a reference to <code>this</code> for easy method chaining
1947     */
1948    public Condition setNote(List<Annotation> theNote) { 
1949      this.note = theNote;
1950      return this;
1951    }
1952
1953    public boolean hasNote() { 
1954      if (this.note == null)
1955        return false;
1956      for (Annotation item : this.note)
1957        if (!item.isEmpty())
1958          return true;
1959      return false;
1960    }
1961
1962    public Annotation addNote() { //3
1963      Annotation t = new Annotation();
1964      if (this.note == null)
1965        this.note = new ArrayList<Annotation>();
1966      this.note.add(t);
1967      return t;
1968    }
1969
1970    public Condition addNote(Annotation t) { //3
1971      if (t == null)
1972        return this;
1973      if (this.note == null)
1974        this.note = new ArrayList<Annotation>();
1975      this.note.add(t);
1976      return this;
1977    }
1978
1979    /**
1980     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
1981     */
1982    public Annotation getNoteFirstRep() { 
1983      if (getNote().isEmpty()) {
1984        addNote();
1985      }
1986      return getNote().get(0);
1987    }
1988
1989      protected void listChildren(List<Property> children) {
1990        super.listChildren(children);
1991        children.add(new Property("identifier", "Identifier", "Business identifiers assigned to this condition by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier));
1992        children.add(new Property("clinicalStatus", "code", "The clinical status of the condition.", 0, 1, clinicalStatus));
1993        children.add(new Property("verificationStatus", "code", "The verification status to support the clinical status of the condition.", 0, 1, verificationStatus));
1994        children.add(new Property("category", "CodeableConcept", "A category assigned to the condition.", 0, java.lang.Integer.MAX_VALUE, category));
1995        children.add(new Property("severity", "CodeableConcept", "A subjective assessment of the severity of the condition as evaluated by the clinician.", 0, 1, severity));
1996        children.add(new Property("code", "CodeableConcept", "Identification of the condition, problem or diagnosis.", 0, 1, code));
1997        children.add(new Property("bodySite", "CodeableConcept", "The anatomical location where this condition manifests itself.", 0, java.lang.Integer.MAX_VALUE, bodySite));
1998        children.add(new Property("subject", "Reference(Patient|Group)", "Indicates the patient or group who the condition record is associated with.", 0, 1, subject));
1999        children.add(new Property("context", "Reference(Encounter|EpisodeOfCare)", "Encounter during which the condition was first asserted.", 0, 1, context));
2000        children.add(new Property("onset[x]", "dateTime|Age|Period|Range|string", "Estimated or actual date or date-time  the condition began, in the opinion of the clinician.", 0, 1, onset));
2001        children.add(new Property("abatement[x]", "dateTime|Age|Period|Range|string", "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", 0, 1, abatement));
2002        children.add(new Property("assertedDate", "dateTime", "The date on which the existence of the Condition was first asserted or acknowledged.", 0, 1, assertedDate));
2003        children.add(new Property("recorder", "Reference(Practitioner|Patient|RelatedPerson)", "Individual who recorded the record and takes responsibility for its content.", 0, 1, recorder));
2004        children.add(new Property("asserter", "Reference(Practitioner|PractitionerRole|Patient|RelatedPerson)", "Individual who is making the condition statement.", 0, 1, asserter));
2005        children.add(new Property("stage", "", "Clinical stage or grade of a condition. May include formal severity assessments.", 0, java.lang.Integer.MAX_VALUE, stage));
2006        children.add(new Property("evidence", "", "Supporting evidence / manifestations that are the basis of the Condition's verification status, such as evidence that confirmed or refuted the condition.", 0, java.lang.Integer.MAX_VALUE, evidence));
2007        children.add(new Property("note", "Annotation", "Additional information about the Condition. This is a general notes/comments entry  for description of the Condition, its diagnosis and prognosis.", 0, java.lang.Integer.MAX_VALUE, note));
2008      }
2009
2010      @Override
2011      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2012        switch (_hash) {
2013        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifiers assigned to this condition by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier);
2014        case -462853915: /*clinicalStatus*/  return new Property("clinicalStatus", "code", "The clinical status of the condition.", 0, 1, clinicalStatus);
2015        case -842509843: /*verificationStatus*/  return new Property("verificationStatus", "code", "The verification status to support the clinical status of the condition.", 0, 1, verificationStatus);
2016        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "A category assigned to the condition.", 0, java.lang.Integer.MAX_VALUE, category);
2017        case 1478300413: /*severity*/  return new Property("severity", "CodeableConcept", "A subjective assessment of the severity of the condition as evaluated by the clinician.", 0, 1, severity);
2018        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Identification of the condition, problem or diagnosis.", 0, 1, code);
2019        case 1702620169: /*bodySite*/  return new Property("bodySite", "CodeableConcept", "The anatomical location where this condition manifests itself.", 0, java.lang.Integer.MAX_VALUE, bodySite);
2020        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group)", "Indicates the patient or group who the condition record is associated with.", 0, 1, subject);
2021        case 951530927: /*context*/  return new Property("context", "Reference(Encounter|EpisodeOfCare)", "Encounter during which the condition was first asserted.", 0, 1, context);
2022        case -1886216323: /*onset[x]*/  return new Property("onset[x]", "dateTime|Age|Period|Range|string", "Estimated or actual date or date-time  the condition began, in the opinion of the clinician.", 0, 1, onset);
2023        case 105901603: /*onset*/  return new Property("onset[x]", "dateTime|Age|Period|Range|string", "Estimated or actual date or date-time  the condition began, in the opinion of the clinician.", 0, 1, onset);
2024        case -1701663010: /*onsetDateTime*/  return new Property("onset[x]", "dateTime|Age|Period|Range|string", "Estimated or actual date or date-time  the condition began, in the opinion of the clinician.", 0, 1, onset);
2025        case -1886241828: /*onsetAge*/  return new Property("onset[x]", "dateTime|Age|Period|Range|string", "Estimated or actual date or date-time  the condition began, in the opinion of the clinician.", 0, 1, onset);
2026        case -1545082428: /*onsetPeriod*/  return new Property("onset[x]", "dateTime|Age|Period|Range|string", "Estimated or actual date or date-time  the condition began, in the opinion of the clinician.", 0, 1, onset);
2027        case -186664742: /*onsetRange*/  return new Property("onset[x]", "dateTime|Age|Period|Range|string", "Estimated or actual date or date-time  the condition began, in the opinion of the clinician.", 0, 1, onset);
2028        case -1445342188: /*onsetString*/  return new Property("onset[x]", "dateTime|Age|Period|Range|string", "Estimated or actual date or date-time  the condition began, in the opinion of the clinician.", 0, 1, onset);
2029        case -584196495: /*abatement[x]*/  return new Property("abatement[x]", "dateTime|Age|Period|Range|string", "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", 0, 1, abatement);
2030        case -921554001: /*abatement*/  return new Property("abatement[x]", "dateTime|Age|Period|Range|string", "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", 0, 1, abatement);
2031        case 44869738: /*abatementDateTime*/  return new Property("abatement[x]", "dateTime|Age|Period|Range|string", "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", 0, 1, abatement);
2032        case -584222000: /*abatementAge*/  return new Property("abatement[x]", "dateTime|Age|Period|Range|string", "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", 0, 1, abatement);
2033        case -922036656: /*abatementPeriod*/  return new Property("abatement[x]", "dateTime|Age|Period|Range|string", "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", 0, 1, abatement);
2034        case 1218906830: /*abatementRange*/  return new Property("abatement[x]", "dateTime|Age|Period|Range|string", "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", 0, 1, abatement);
2035        case -822296416: /*abatementString*/  return new Property("abatement[x]", "dateTime|Age|Period|Range|string", "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", 0, 1, abatement);
2036        case -174231629: /*assertedDate*/  return new Property("assertedDate", "dateTime", "The date on which the existence of the Condition was first asserted or acknowledged.", 0, 1, assertedDate);
2037        case -799233858: /*recorder*/  return new Property("recorder", "Reference(Practitioner|Patient|RelatedPerson)", "Individual who recorded the record and takes responsibility for its content.", 0, 1, recorder);
2038        case -373242253: /*asserter*/  return new Property("asserter", "Reference(Practitioner|PractitionerRole|Patient|RelatedPerson)", "Individual who is making the condition statement.", 0, 1, asserter);
2039        case 109757182: /*stage*/  return new Property("stage", "", "Clinical stage or grade of a condition. May include formal severity assessments.", 0, java.lang.Integer.MAX_VALUE, stage);
2040        case 382967383: /*evidence*/  return new Property("evidence", "", "Supporting evidence / manifestations that are the basis of the Condition's verification status, such as evidence that confirmed or refuted the condition.", 0, java.lang.Integer.MAX_VALUE, evidence);
2041        case 3387378: /*note*/  return new Property("note", "Annotation", "Additional information about the Condition. This is a general notes/comments entry  for description of the Condition, its diagnosis and prognosis.", 0, java.lang.Integer.MAX_VALUE, note);
2042        default: return super.getNamedProperty(_hash, _name, _checkValid);
2043        }
2044
2045      }
2046
2047      @Override
2048      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2049        switch (hash) {
2050        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2051        case -462853915: /*clinicalStatus*/ return this.clinicalStatus == null ? new Base[0] : new Base[] {this.clinicalStatus}; // Enumeration<ConditionClinicalStatus>
2052        case -842509843: /*verificationStatus*/ return this.verificationStatus == null ? new Base[0] : new Base[] {this.verificationStatus}; // Enumeration<ConditionVerificationStatus>
2053        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
2054        case 1478300413: /*severity*/ return this.severity == null ? new Base[0] : new Base[] {this.severity}; // CodeableConcept
2055        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
2056        case 1702620169: /*bodySite*/ return this.bodySite == null ? new Base[0] : this.bodySite.toArray(new Base[this.bodySite.size()]); // CodeableConcept
2057        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
2058        case 951530927: /*context*/ return this.context == null ? new Base[0] : new Base[] {this.context}; // Reference
2059        case 105901603: /*onset*/ return this.onset == null ? new Base[0] : new Base[] {this.onset}; // Type
2060        case -921554001: /*abatement*/ return this.abatement == null ? new Base[0] : new Base[] {this.abatement}; // Type
2061        case -174231629: /*assertedDate*/ return this.assertedDate == null ? new Base[0] : new Base[] {this.assertedDate}; // DateTimeType
2062        case -799233858: /*recorder*/ return this.recorder == null ? new Base[0] : new Base[] {this.recorder}; // Reference
2063        case -373242253: /*asserter*/ return this.asserter == null ? new Base[0] : new Base[] {this.asserter}; // Reference
2064        case 109757182: /*stage*/ return this.stage == null ? new Base[0] : this.stage.toArray(new Base[this.stage.size()]); // ConditionStageComponent
2065        case 382967383: /*evidence*/ return this.evidence == null ? new Base[0] : this.evidence.toArray(new Base[this.evidence.size()]); // ConditionEvidenceComponent
2066        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
2067        default: return super.getProperty(hash, name, checkValid);
2068        }
2069
2070      }
2071
2072      @Override
2073      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2074        switch (hash) {
2075        case -1618432855: // identifier
2076          this.getIdentifier().add(castToIdentifier(value)); // Identifier
2077          return value;
2078        case -462853915: // clinicalStatus
2079          value = new ConditionClinicalStatusEnumFactory().fromType(castToCode(value));
2080          this.clinicalStatus = (Enumeration) value; // Enumeration<ConditionClinicalStatus>
2081          return value;
2082        case -842509843: // verificationStatus
2083          value = new ConditionVerificationStatusEnumFactory().fromType(castToCode(value));
2084          this.verificationStatus = (Enumeration) value; // Enumeration<ConditionVerificationStatus>
2085          return value;
2086        case 50511102: // category
2087          this.getCategory().add(castToCodeableConcept(value)); // CodeableConcept
2088          return value;
2089        case 1478300413: // severity
2090          this.severity = castToCodeableConcept(value); // CodeableConcept
2091          return value;
2092        case 3059181: // code
2093          this.code = castToCodeableConcept(value); // CodeableConcept
2094          return value;
2095        case 1702620169: // bodySite
2096          this.getBodySite().add(castToCodeableConcept(value)); // CodeableConcept
2097          return value;
2098        case -1867885268: // subject
2099          this.subject = castToReference(value); // Reference
2100          return value;
2101        case 951530927: // context
2102          this.context = castToReference(value); // Reference
2103          return value;
2104        case 105901603: // onset
2105          this.onset = castToType(value); // Type
2106          return value;
2107        case -921554001: // abatement
2108          this.abatement = castToType(value); // Type
2109          return value;
2110        case -174231629: // assertedDate
2111          this.assertedDate = castToDateTime(value); // DateTimeType
2112          return value;
2113        case -799233858: // recorder
2114          this.recorder = castToReference(value); // Reference
2115          return value;
2116        case -373242253: // asserter
2117          this.asserter = castToReference(value); // Reference
2118          return value;
2119        case 109757182: // stage
2120          this.getStage().add((ConditionStageComponent) value); // ConditionStageComponent
2121          return value;
2122        case 382967383: // evidence
2123          this.getEvidence().add((ConditionEvidenceComponent) value); // ConditionEvidenceComponent
2124          return value;
2125        case 3387378: // note
2126          this.getNote().add(castToAnnotation(value)); // Annotation
2127          return value;
2128        default: return super.setProperty(hash, name, value);
2129        }
2130
2131      }
2132
2133      @Override
2134      public Base setProperty(String name, Base value) throws FHIRException {
2135        if (name.equals("identifier")) {
2136          this.getIdentifier().add(castToIdentifier(value));
2137        } else if (name.equals("clinicalStatus")) {
2138          value = new ConditionClinicalStatusEnumFactory().fromType(castToCode(value));
2139          this.clinicalStatus = (Enumeration) value; // Enumeration<ConditionClinicalStatus>
2140        } else if (name.equals("verificationStatus")) {
2141          value = new ConditionVerificationStatusEnumFactory().fromType(castToCode(value));
2142          this.verificationStatus = (Enumeration) value; // Enumeration<ConditionVerificationStatus>
2143        } else if (name.equals("category")) {
2144          this.getCategory().add(castToCodeableConcept(value));
2145        } else if (name.equals("severity")) {
2146          this.severity = castToCodeableConcept(value); // CodeableConcept
2147        } else if (name.equals("code")) {
2148          this.code = castToCodeableConcept(value); // CodeableConcept
2149        } else if (name.equals("bodySite")) {
2150          this.getBodySite().add(castToCodeableConcept(value));
2151        } else if (name.equals("subject")) {
2152          this.subject = castToReference(value); // Reference
2153        } else if (name.equals("context")) {
2154          this.context = castToReference(value); // Reference
2155        } else if (name.equals("onset[x]")) {
2156          this.onset = castToType(value); // Type
2157        } else if (name.equals("abatement[x]")) {
2158          this.abatement = castToType(value); // Type
2159        } else if (name.equals("assertedDate")) {
2160          this.assertedDate = castToDateTime(value); // DateTimeType
2161        } else if (name.equals("recorder")) {
2162          this.recorder = castToReference(value); // Reference
2163        } else if (name.equals("asserter")) {
2164          this.asserter = castToReference(value); // Reference
2165        } else if (name.equals("stage")) {
2166          this.getStage().add((ConditionStageComponent) value);
2167        } else if (name.equals("evidence")) {
2168          this.getEvidence().add((ConditionEvidenceComponent) value);
2169        } else if (name.equals("note")) {
2170          this.getNote().add(castToAnnotation(value));
2171        } else
2172          return super.setProperty(name, value);
2173        return value;
2174      }
2175
2176      @Override
2177      public Base makeProperty(int hash, String name) throws FHIRException {
2178        switch (hash) {
2179        case -1618432855:  return addIdentifier(); 
2180        case -462853915:  return getClinicalStatusElement();
2181        case -842509843:  return getVerificationStatusElement();
2182        case 50511102:  return addCategory(); 
2183        case 1478300413:  return getSeverity(); 
2184        case 3059181:  return getCode(); 
2185        case 1702620169:  return addBodySite(); 
2186        case -1867885268:  return getSubject(); 
2187        case 951530927:  return getContext(); 
2188        case -1886216323:  return getOnset(); 
2189        case 105901603:  return getOnset(); 
2190        case -584196495:  return getAbatement(); 
2191        case -921554001:  return getAbatement(); 
2192        case -174231629:  return getAssertedDateElement();
2193        case -799233858:  return getRecorder(); 
2194        case -373242253:  return getAsserter(); 
2195        case 109757182:  return addStage(); 
2196        case 382967383:  return addEvidence(); 
2197        case 3387378:  return addNote(); 
2198        default: return super.makeProperty(hash, name);
2199        }
2200
2201      }
2202
2203      @Override
2204      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2205        switch (hash) {
2206        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2207        case -462853915: /*clinicalStatus*/ return new String[] {"code"};
2208        case -842509843: /*verificationStatus*/ return new String[] {"code"};
2209        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
2210        case 1478300413: /*severity*/ return new String[] {"CodeableConcept"};
2211        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2212        case 1702620169: /*bodySite*/ return new String[] {"CodeableConcept"};
2213        case -1867885268: /*subject*/ return new String[] {"Reference"};
2214        case 951530927: /*context*/ return new String[] {"Reference"};
2215        case 105901603: /*onset*/ return new String[] {"dateTime", "Age", "Period", "Range", "string"};
2216        case -921554001: /*abatement*/ return new String[] {"dateTime", "Age", "Period", "Range", "string"};
2217        case -174231629: /*assertedDate*/ return new String[] {"dateTime"};
2218        case -799233858: /*recorder*/ return new String[] {"Reference"};
2219        case -373242253: /*asserter*/ return new String[] {"Reference"};
2220        case 109757182: /*stage*/ return new String[] {};
2221        case 382967383: /*evidence*/ return new String[] {};
2222        case 3387378: /*note*/ return new String[] {"Annotation"};
2223        default: return super.getTypesForProperty(hash, name);
2224        }
2225
2226      }
2227
2228      @Override
2229      public Base addChild(String name) throws FHIRException {
2230        if (name.equals("identifier")) {
2231          return addIdentifier();
2232        }
2233        else if (name.equals("clinicalStatus")) {
2234          throw new FHIRException("Cannot call addChild on a primitive type Condition.clinicalStatus");
2235        }
2236        else if (name.equals("verificationStatus")) {
2237          throw new FHIRException("Cannot call addChild on a primitive type Condition.verificationStatus");
2238        }
2239        else if (name.equals("category")) {
2240          return addCategory();
2241        }
2242        else if (name.equals("severity")) {
2243          this.severity = new CodeableConcept();
2244          return this.severity;
2245        }
2246        else if (name.equals("code")) {
2247          this.code = new CodeableConcept();
2248          return this.code;
2249        }
2250        else if (name.equals("bodySite")) {
2251          return addBodySite();
2252        }
2253        else if (name.equals("subject")) {
2254          this.subject = new Reference();
2255          return this.subject;
2256        }
2257        else if (name.equals("context")) {
2258          this.context = new Reference();
2259          return this.context;
2260        }
2261        else if (name.equals("onsetDateTime")) {
2262          this.onset = new DateTimeType();
2263          return this.onset;
2264        }
2265        else if (name.equals("onsetAge")) {
2266          this.onset = new Age();
2267          return this.onset;
2268        }
2269        else if (name.equals("onsetPeriod")) {
2270          this.onset = new Period();
2271          return this.onset;
2272        }
2273        else if (name.equals("onsetRange")) {
2274          this.onset = new Range();
2275          return this.onset;
2276        }
2277        else if (name.equals("onsetString")) {
2278          this.onset = new StringType();
2279          return this.onset;
2280        }
2281        else if (name.equals("abatementDateTime")) {
2282          this.abatement = new DateTimeType();
2283          return this.abatement;
2284        }
2285        else if (name.equals("abatementAge")) {
2286          this.abatement = new Age();
2287          return this.abatement;
2288        }
2289        else if (name.equals("abatementPeriod")) {
2290          this.abatement = new Period();
2291          return this.abatement;
2292        }
2293        else if (name.equals("abatementRange")) {
2294          this.abatement = new Range();
2295          return this.abatement;
2296        }
2297        else if (name.equals("abatementString")) {
2298          this.abatement = new StringType();
2299          return this.abatement;
2300        }
2301        else if (name.equals("assertedDate")) {
2302          throw new FHIRException("Cannot call addChild on a primitive type Condition.assertedDate");
2303        }
2304        else if (name.equals("recorder")) {
2305          this.recorder = new Reference();
2306          return this.recorder;
2307        }
2308        else if (name.equals("asserter")) {
2309          this.asserter = new Reference();
2310          return this.asserter;
2311        }
2312        else if (name.equals("stage")) {
2313          return addStage();
2314        }
2315        else if (name.equals("evidence")) {
2316          return addEvidence();
2317        }
2318        else if (name.equals("note")) {
2319          return addNote();
2320        }
2321        else
2322          return super.addChild(name);
2323      }
2324
2325  public String fhirType() {
2326    return "Condition";
2327
2328  }
2329
2330      public Condition copy() {
2331        Condition dst = new Condition();
2332        copyValues(dst);
2333        if (identifier != null) {
2334          dst.identifier = new ArrayList<Identifier>();
2335          for (Identifier i : identifier)
2336            dst.identifier.add(i.copy());
2337        };
2338        dst.clinicalStatus = clinicalStatus == null ? null : clinicalStatus.copy();
2339        dst.verificationStatus = verificationStatus == null ? null : verificationStatus.copy();
2340        if (category != null) {
2341          dst.category = new ArrayList<CodeableConcept>();
2342          for (CodeableConcept i : category)
2343            dst.category.add(i.copy());
2344        };
2345        dst.severity = severity == null ? null : severity.copy();
2346        dst.code = code == null ? null : code.copy();
2347        if (bodySite != null) {
2348          dst.bodySite = new ArrayList<CodeableConcept>();
2349          for (CodeableConcept i : bodySite)
2350            dst.bodySite.add(i.copy());
2351        };
2352        dst.subject = subject == null ? null : subject.copy();
2353        dst.context = context == null ? null : context.copy();
2354        dst.onset = onset == null ? null : onset.copy();
2355        dst.abatement = abatement == null ? null : abatement.copy();
2356        dst.assertedDate = assertedDate == null ? null : assertedDate.copy();
2357        dst.recorder = recorder == null ? null : recorder.copy();
2358        dst.asserter = asserter == null ? null : asserter.copy();
2359        if (stage != null) {
2360          dst.stage = new ArrayList<ConditionStageComponent>();
2361          for (ConditionStageComponent i : stage)
2362            dst.stage.add(i.copy());
2363        };
2364        if (evidence != null) {
2365          dst.evidence = new ArrayList<ConditionEvidenceComponent>();
2366          for (ConditionEvidenceComponent i : evidence)
2367            dst.evidence.add(i.copy());
2368        };
2369        if (note != null) {
2370          dst.note = new ArrayList<Annotation>();
2371          for (Annotation i : note)
2372            dst.note.add(i.copy());
2373        };
2374        return dst;
2375      }
2376
2377      protected Condition typedCopy() {
2378        return copy();
2379      }
2380
2381      @Override
2382      public boolean equalsDeep(Base other_) {
2383        if (!super.equalsDeep(other_))
2384          return false;
2385        if (!(other_ instanceof Condition))
2386          return false;
2387        Condition o = (Condition) other_;
2388        return compareDeep(identifier, o.identifier, true) && compareDeep(clinicalStatus, o.clinicalStatus, true)
2389           && compareDeep(verificationStatus, o.verificationStatus, true) && compareDeep(category, o.category, true)
2390           && compareDeep(severity, o.severity, true) && compareDeep(code, o.code, true) && compareDeep(bodySite, o.bodySite, true)
2391           && compareDeep(subject, o.subject, true) && compareDeep(context, o.context, true) && compareDeep(onset, o.onset, true)
2392           && compareDeep(abatement, o.abatement, true) && compareDeep(assertedDate, o.assertedDate, true)
2393           && compareDeep(recorder, o.recorder, true) && compareDeep(asserter, o.asserter, true) && compareDeep(stage, o.stage, true)
2394           && compareDeep(evidence, o.evidence, true) && compareDeep(note, o.note, true);
2395      }
2396
2397      @Override
2398      public boolean equalsShallow(Base other_) {
2399        if (!super.equalsShallow(other_))
2400          return false;
2401        if (!(other_ instanceof Condition))
2402          return false;
2403        Condition o = (Condition) other_;
2404        return compareValues(clinicalStatus, o.clinicalStatus, true) && compareValues(verificationStatus, o.verificationStatus, true)
2405           && compareValues(assertedDate, o.assertedDate, true);
2406      }
2407
2408      public boolean isEmpty() {
2409        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, clinicalStatus
2410          , verificationStatus, category, severity, code, bodySite, subject, context, onset
2411          , abatement, assertedDate, recorder, asserter, stage, evidence, note);
2412      }
2413
2414  @Override
2415  public ResourceType getResourceType() {
2416    return ResourceType.Condition;
2417   }
2418
2419 /**
2420   * Search parameter: <b>severity</b>
2421   * <p>
2422   * Description: <b>The severity of the condition</b><br>
2423   * Type: <b>token</b><br>
2424   * Path: <b>Condition.severity</b><br>
2425   * </p>
2426   */
2427  @SearchParamDefinition(name="severity", path="Condition.severity", description="The severity of the condition", type="token" )
2428  public static final String SP_SEVERITY = "severity";
2429 /**
2430   * <b>Fluent Client</b> search parameter constant for <b>severity</b>
2431   * <p>
2432   * Description: <b>The severity of the condition</b><br>
2433   * Type: <b>token</b><br>
2434   * Path: <b>Condition.severity</b><br>
2435   * </p>
2436   */
2437  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SEVERITY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SEVERITY);
2438
2439 /**
2440   * Search parameter: <b>evidence-detail</b>
2441   * <p>
2442   * Description: <b>Supporting information found elsewhere</b><br>
2443   * Type: <b>reference</b><br>
2444   * Path: <b>Condition.evidence.detail</b><br>
2445   * </p>
2446   */
2447  @SearchParamDefinition(name="evidence-detail", path="Condition.evidence.detail", description="Supporting information found elsewhere", type="reference" )
2448  public static final String SP_EVIDENCE_DETAIL = "evidence-detail";
2449 /**
2450   * <b>Fluent Client</b> search parameter constant for <b>evidence-detail</b>
2451   * <p>
2452   * Description: <b>Supporting information found elsewhere</b><br>
2453   * Type: <b>reference</b><br>
2454   * Path: <b>Condition.evidence.detail</b><br>
2455   * </p>
2456   */
2457  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam EVIDENCE_DETAIL = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_EVIDENCE_DETAIL);
2458
2459/**
2460   * Constant for fluent queries to be used to add include statements. Specifies
2461   * the path value of "<b>Condition:evidence-detail</b>".
2462   */
2463  public static final ca.uhn.fhir.model.api.Include INCLUDE_EVIDENCE_DETAIL = new ca.uhn.fhir.model.api.Include("Condition:evidence-detail").toLocked();
2464
2465 /**
2466   * Search parameter: <b>identifier</b>
2467   * <p>
2468   * Description: <b>A unique identifier of the condition record</b><br>
2469   * Type: <b>token</b><br>
2470   * Path: <b>Condition.identifier</b><br>
2471   * </p>
2472   */
2473  @SearchParamDefinition(name="identifier", path="Condition.identifier", description="A unique identifier of the condition record", type="token" )
2474  public static final String SP_IDENTIFIER = "identifier";
2475 /**
2476   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2477   * <p>
2478   * Description: <b>A unique identifier of the condition record</b><br>
2479   * Type: <b>token</b><br>
2480   * Path: <b>Condition.identifier</b><br>
2481   * </p>
2482   */
2483  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2484
2485 /**
2486   * Search parameter: <b>onset-info</b>
2487   * <p>
2488   * Description: <b>Onsets as a string</b><br>
2489   * Type: <b>string</b><br>
2490   * Path: <b>Condition.onset[x]</b><br>
2491   * </p>
2492   */
2493  @SearchParamDefinition(name="onset-info", path="Condition.onset.as(string)", description="Onsets as a string", type="string" )
2494  public static final String SP_ONSET_INFO = "onset-info";
2495 /**
2496   * <b>Fluent Client</b> search parameter constant for <b>onset-info</b>
2497   * <p>
2498   * Description: <b>Onsets as a string</b><br>
2499   * Type: <b>string</b><br>
2500   * Path: <b>Condition.onset[x]</b><br>
2501   * </p>
2502   */
2503  public static final ca.uhn.fhir.rest.gclient.StringClientParam ONSET_INFO = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ONSET_INFO);
2504
2505 /**
2506   * Search parameter: <b>code</b>
2507   * <p>
2508   * Description: <b>Code for the condition</b><br>
2509   * Type: <b>token</b><br>
2510   * Path: <b>Condition.code</b><br>
2511   * </p>
2512   */
2513  @SearchParamDefinition(name="code", path="Condition.code", description="Code for the condition", type="token" )
2514  public static final String SP_CODE = "code";
2515 /**
2516   * <b>Fluent Client</b> search parameter constant for <b>code</b>
2517   * <p>
2518   * Description: <b>Code for the condition</b><br>
2519   * Type: <b>token</b><br>
2520   * Path: <b>Condition.code</b><br>
2521   * </p>
2522   */
2523  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
2524
2525 /**
2526   * Search parameter: <b>evidence</b>
2527   * <p>
2528   * Description: <b>Manifestation/symptom</b><br>
2529   * Type: <b>token</b><br>
2530   * Path: <b>Condition.evidence.code</b><br>
2531   * </p>
2532   */
2533  @SearchParamDefinition(name="evidence", path="Condition.evidence.code", description="Manifestation/symptom", type="token" )
2534  public static final String SP_EVIDENCE = "evidence";
2535 /**
2536   * <b>Fluent Client</b> search parameter constant for <b>evidence</b>
2537   * <p>
2538   * Description: <b>Manifestation/symptom</b><br>
2539   * Type: <b>token</b><br>
2540   * Path: <b>Condition.evidence.code</b><br>
2541   * </p>
2542   */
2543  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EVIDENCE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EVIDENCE);
2544
2545 /**
2546   * Search parameter: <b>subject</b>
2547   * <p>
2548   * Description: <b>Who has the condition?</b><br>
2549   * Type: <b>reference</b><br>
2550   * Path: <b>Condition.subject</b><br>
2551   * </p>
2552   */
2553  @SearchParamDefinition(name="subject", path="Condition.subject", description="Who has the condition?", type="reference", target={Group.class, Patient.class } )
2554  public static final String SP_SUBJECT = "subject";
2555 /**
2556   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
2557   * <p>
2558   * Description: <b>Who has the condition?</b><br>
2559   * Type: <b>reference</b><br>
2560   * Path: <b>Condition.subject</b><br>
2561   * </p>
2562   */
2563  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
2564
2565/**
2566   * Constant for fluent queries to be used to add include statements. Specifies
2567   * the path value of "<b>Condition:subject</b>".
2568   */
2569  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Condition:subject").toLocked();
2570
2571 /**
2572   * Search parameter: <b>verification-status</b>
2573   * <p>
2574   * Description: <b>unconfirmed | provisional | differential | confirmed | refuted | entered-in-error</b><br>
2575   * Type: <b>token</b><br>
2576   * Path: <b>Condition.verificationStatus</b><br>
2577   * </p>
2578   */
2579  @SearchParamDefinition(name="verification-status", path="Condition.verificationStatus", description="unconfirmed | provisional | differential | confirmed | refuted | entered-in-error", type="token" )
2580  public static final String SP_VERIFICATION_STATUS = "verification-status";
2581 /**
2582   * <b>Fluent Client</b> search parameter constant for <b>verification-status</b>
2583   * <p>
2584   * Description: <b>unconfirmed | provisional | differential | confirmed | refuted | entered-in-error</b><br>
2585   * Type: <b>token</b><br>
2586   * Path: <b>Condition.verificationStatus</b><br>
2587   * </p>
2588   */
2589  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERIFICATION_STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERIFICATION_STATUS);
2590
2591 /**
2592   * Search parameter: <b>clinical-status</b>
2593   * <p>
2594   * Description: <b>The clinical status of the condition</b><br>
2595   * Type: <b>token</b><br>
2596   * Path: <b>Condition.clinicalStatus</b><br>
2597   * </p>
2598   */
2599  @SearchParamDefinition(name="clinical-status", path="Condition.clinicalStatus", description="The clinical status of the condition", type="token" )
2600  public static final String SP_CLINICAL_STATUS = "clinical-status";
2601 /**
2602   * <b>Fluent Client</b> search parameter constant for <b>clinical-status</b>
2603   * <p>
2604   * Description: <b>The clinical status of the condition</b><br>
2605   * Type: <b>token</b><br>
2606   * Path: <b>Condition.clinicalStatus</b><br>
2607   * </p>
2608   */
2609  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CLINICAL_STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CLINICAL_STATUS);
2610
2611 /**
2612   * Search parameter: <b>encounter</b>
2613   * <p>
2614   * Description: <b>Encounter when condition first asserted</b><br>
2615   * Type: <b>reference</b><br>
2616   * Path: <b>Condition.context</b><br>
2617   * </p>
2618   */
2619  @SearchParamDefinition(name="encounter", path="Condition.context", description="Encounter when condition first asserted", type="reference", target={Encounter.class } )
2620  public static final String SP_ENCOUNTER = "encounter";
2621 /**
2622   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
2623   * <p>
2624   * Description: <b>Encounter when condition first asserted</b><br>
2625   * Type: <b>reference</b><br>
2626   * Path: <b>Condition.context</b><br>
2627   * </p>
2628   */
2629  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
2630
2631/**
2632   * Constant for fluent queries to be used to add include statements. Specifies
2633   * the path value of "<b>Condition:encounter</b>".
2634   */
2635  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("Condition:encounter").toLocked();
2636
2637 /**
2638   * Search parameter: <b>onset-date</b>
2639   * <p>
2640   * Description: <b>Date related onsets (dateTime and Period)</b><br>
2641   * Type: <b>date</b><br>
2642   * Path: <b>Condition.onset[x]</b><br>
2643   * </p>
2644   */
2645  @SearchParamDefinition(name="onset-date", path="Condition.onset.as(dateTime) | Condition.onset.as(Period)", description="Date related onsets (dateTime and Period)", type="date" )
2646  public static final String SP_ONSET_DATE = "onset-date";
2647 /**
2648   * <b>Fluent Client</b> search parameter constant for <b>onset-date</b>
2649   * <p>
2650   * Description: <b>Date related onsets (dateTime and Period)</b><br>
2651   * Type: <b>date</b><br>
2652   * Path: <b>Condition.onset[x]</b><br>
2653   * </p>
2654   */
2655  public static final ca.uhn.fhir.rest.gclient.DateClientParam ONSET_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_ONSET_DATE);
2656
2657 /**
2658   * Search parameter: <b>abatement-date</b>
2659   * <p>
2660   * Description: <b>Date-related abatements (dateTime and period)</b><br>
2661   * Type: <b>date</b><br>
2662   * Path: <b>Condition.abatement[x]</b><br>
2663   * </p>
2664   */
2665  @SearchParamDefinition(name="abatement-date", path="Condition.abatement.as(dateTime) | Condition.abatement.as(Period)", description="Date-related abatements (dateTime and period)", type="date" )
2666  public static final String SP_ABATEMENT_DATE = "abatement-date";
2667 /**
2668   * <b>Fluent Client</b> search parameter constant for <b>abatement-date</b>
2669   * <p>
2670   * Description: <b>Date-related abatements (dateTime and period)</b><br>
2671   * Type: <b>date</b><br>
2672   * Path: <b>Condition.abatement[x]</b><br>
2673   * </p>
2674   */
2675  public static final ca.uhn.fhir.rest.gclient.DateClientParam ABATEMENT_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_ABATEMENT_DATE);
2676
2677 /**
2678   * Search parameter: <b>asserter</b>
2679   * <p>
2680   * Description: <b>Person who asserts this condition</b><br>
2681   * Type: <b>reference</b><br>
2682   * Path: <b>Condition.asserter</b><br>
2683   * </p>
2684   */
2685  @SearchParamDefinition(name="asserter", path="Condition.asserter", description="Person who asserts this condition", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2686  public static final String SP_ASSERTER = "asserter";
2687 /**
2688   * <b>Fluent Client</b> search parameter constant for <b>asserter</b>
2689   * <p>
2690   * Description: <b>Person who asserts this condition</b><br>
2691   * Type: <b>reference</b><br>
2692   * Path: <b>Condition.asserter</b><br>
2693   * </p>
2694   */
2695  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ASSERTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ASSERTER);
2696
2697/**
2698   * Constant for fluent queries to be used to add include statements. Specifies
2699   * the path value of "<b>Condition:asserter</b>".
2700   */
2701  public static final ca.uhn.fhir.model.api.Include INCLUDE_ASSERTER = new ca.uhn.fhir.model.api.Include("Condition:asserter").toLocked();
2702
2703 /**
2704   * Search parameter: <b>stage</b>
2705   * <p>
2706   * Description: <b>Simple summary (disease specific)</b><br>
2707   * Type: <b>token</b><br>
2708   * Path: <b>Condition.stage.summary</b><br>
2709   * </p>
2710   */
2711  @SearchParamDefinition(name="stage", path="Condition.stage.summary", description="Simple summary (disease specific)", type="token" )
2712  public static final String SP_STAGE = "stage";
2713 /**
2714   * <b>Fluent Client</b> search parameter constant for <b>stage</b>
2715   * <p>
2716   * Description: <b>Simple summary (disease specific)</b><br>
2717   * Type: <b>token</b><br>
2718   * Path: <b>Condition.stage.summary</b><br>
2719   * </p>
2720   */
2721  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STAGE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STAGE);
2722
2723 /**
2724   * Search parameter: <b>abatement-string</b>
2725   * <p>
2726   * Description: <b>Abatement as a string</b><br>
2727   * Type: <b>string</b><br>
2728   * Path: <b>Condition.abatement[x]</b><br>
2729   * </p>
2730   */
2731  @SearchParamDefinition(name="abatement-string", path="Condition.abatement.as(string)", description="Abatement as a string", type="string" )
2732  public static final String SP_ABATEMENT_STRING = "abatement-string";
2733 /**
2734   * <b>Fluent Client</b> search parameter constant for <b>abatement-string</b>
2735   * <p>
2736   * Description: <b>Abatement as a string</b><br>
2737   * Type: <b>string</b><br>
2738   * Path: <b>Condition.abatement[x]</b><br>
2739   * </p>
2740   */
2741  public static final ca.uhn.fhir.rest.gclient.StringClientParam ABATEMENT_STRING = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ABATEMENT_STRING);
2742
2743 /**
2744   * Search parameter: <b>patient</b>
2745   * <p>
2746   * Description: <b>Who has the condition?</b><br>
2747   * Type: <b>reference</b><br>
2748   * Path: <b>Condition.subject</b><br>
2749   * </p>
2750   */
2751  @SearchParamDefinition(name="patient", path="Condition.subject", description="Who has the condition?", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Patient.class } )
2752  public static final String SP_PATIENT = "patient";
2753 /**
2754   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2755   * <p>
2756   * Description: <b>Who has the condition?</b><br>
2757   * Type: <b>reference</b><br>
2758   * Path: <b>Condition.subject</b><br>
2759   * </p>
2760   */
2761  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2762
2763/**
2764   * Constant for fluent queries to be used to add include statements. Specifies
2765   * the path value of "<b>Condition:patient</b>".
2766   */
2767  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Condition:patient").toLocked();
2768
2769 /**
2770   * Search parameter: <b>context</b>
2771   * <p>
2772   * Description: <b>Encounter or episode when condition first asserted</b><br>
2773   * Type: <b>reference</b><br>
2774   * Path: <b>Condition.context</b><br>
2775   * </p>
2776   */
2777  @SearchParamDefinition(name="context", path="Condition.context", description="Encounter or episode when condition first asserted", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Encounter") }, target={Encounter.class, EpisodeOfCare.class } )
2778  public static final String SP_CONTEXT = "context";
2779 /**
2780   * <b>Fluent Client</b> search parameter constant for <b>context</b>
2781   * <p>
2782   * Description: <b>Encounter or episode when condition first asserted</b><br>
2783   * Type: <b>reference</b><br>
2784   * Path: <b>Condition.context</b><br>
2785   * </p>
2786   */
2787  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CONTEXT);
2788
2789/**
2790   * Constant for fluent queries to be used to add include statements. Specifies
2791   * the path value of "<b>Condition:context</b>".
2792   */
2793  public static final ca.uhn.fhir.model.api.Include INCLUDE_CONTEXT = new ca.uhn.fhir.model.api.Include("Condition:context").toLocked();
2794
2795 /**
2796   * Search parameter: <b>onset-age</b>
2797   * <p>
2798   * Description: <b>Onsets as age or age range</b><br>
2799   * Type: <b>quantity</b><br>
2800   * Path: <b>Condition.onset[x]</b><br>
2801   * </p>
2802   */
2803  @SearchParamDefinition(name="onset-age", path="Condition.onset.as(Age) | Condition.onset.as(Range)", description="Onsets as age or age range", type="quantity" )
2804  public static final String SP_ONSET_AGE = "onset-age";
2805 /**
2806   * <b>Fluent Client</b> search parameter constant for <b>onset-age</b>
2807   * <p>
2808   * Description: <b>Onsets as age or age range</b><br>
2809   * Type: <b>quantity</b><br>
2810   * Path: <b>Condition.onset[x]</b><br>
2811   * </p>
2812   */
2813  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam ONSET_AGE = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_ONSET_AGE);
2814
2815 /**
2816   * Search parameter: <b>abatement-age</b>
2817   * <p>
2818   * Description: <b>Abatement as age or age range</b><br>
2819   * Type: <b>quantity</b><br>
2820   * Path: <b>Condition.abatement[x]</b><br>
2821   * </p>
2822   */
2823  @SearchParamDefinition(name="abatement-age", path="Condition.abatement.as(Age) | Condition.abatement.as(Range) | Condition.abatement.as(Age)", description="Abatement as age or age range", type="quantity" )
2824  public static final String SP_ABATEMENT_AGE = "abatement-age";
2825 /**
2826   * <b>Fluent Client</b> search parameter constant for <b>abatement-age</b>
2827   * <p>
2828   * Description: <b>Abatement as age or age range</b><br>
2829   * Type: <b>quantity</b><br>
2830   * Path: <b>Condition.abatement[x]</b><br>
2831   * </p>
2832   */
2833  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam ABATEMENT_AGE = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_ABATEMENT_AGE);
2834
2835 /**
2836   * Search parameter: <b>asserted-date</b>
2837   * <p>
2838   * Description: <b>Date record was believed accurate</b><br>
2839   * Type: <b>date</b><br>
2840   * Path: <b>Condition.assertedDate</b><br>
2841   * </p>
2842   */
2843  @SearchParamDefinition(name="asserted-date", path="Condition.assertedDate", description="Date record was believed accurate", type="date" )
2844  public static final String SP_ASSERTED_DATE = "asserted-date";
2845 /**
2846   * <b>Fluent Client</b> search parameter constant for <b>asserted-date</b>
2847   * <p>
2848   * Description: <b>Date record was believed accurate</b><br>
2849   * Type: <b>date</b><br>
2850   * Path: <b>Condition.assertedDate</b><br>
2851   * </p>
2852   */
2853  public static final ca.uhn.fhir.rest.gclient.DateClientParam ASSERTED_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_ASSERTED_DATE);
2854
2855 /**
2856   * Search parameter: <b>category</b>
2857   * <p>
2858   * Description: <b>The category of the condition</b><br>
2859   * Type: <b>token</b><br>
2860   * Path: <b>Condition.category</b><br>
2861   * </p>
2862   */
2863  @SearchParamDefinition(name="category", path="Condition.category", description="The category of the condition", type="token" )
2864  public static final String SP_CATEGORY = "category";
2865 /**
2866   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2867   * <p>
2868   * Description: <b>The category of the condition</b><br>
2869   * Type: <b>token</b><br>
2870   * Path: <b>Condition.category</b><br>
2871   * </p>
2872   */
2873  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2874
2875 /**
2876   * Search parameter: <b>body-site</b>
2877   * <p>
2878   * Description: <b>Anatomical location, if relevant</b><br>
2879   * Type: <b>token</b><br>
2880   * Path: <b>Condition.bodySite</b><br>
2881   * </p>
2882   */
2883  @SearchParamDefinition(name="body-site", path="Condition.bodySite", description="Anatomical location, if relevant", type="token" )
2884  public static final String SP_BODY_SITE = "body-site";
2885 /**
2886   * <b>Fluent Client</b> search parameter constant for <b>body-site</b>
2887   * <p>
2888   * Description: <b>Anatomical location, if relevant</b><br>
2889   * Type: <b>token</b><br>
2890   * Path: <b>Condition.bodySite</b><br>
2891   * </p>
2892   */
2893  public static final ca.uhn.fhir.rest.gclient.TokenClientParam BODY_SITE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_BODY_SITE);
2894
2895
2896}
2897