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