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