001package org.hl7.fhir.dstu2016may.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Sun, May 8, 2016 03:05+1000 for FHIR v1.4.0
033import java.util.ArrayList;
034import java.util.Date;
035import java.util.List;
036
037import org.hl7.fhir.exceptions.FHIRException;
038import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
039import org.hl7.fhir.utilities.Utilities;
040
041import ca.uhn.fhir.model.api.annotation.Block;
042import ca.uhn.fhir.model.api.annotation.Child;
043import ca.uhn.fhir.model.api.annotation.Description;
044import ca.uhn.fhir.model.api.annotation.ResourceDef;
045import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
046/**
047 * A record of a clinical assessment performed to determine what problem(s) may affect the patient and before planning the treatments or management strategies that are best to manage a patient's condition. Assessments are often 1:1 with a clinical consultation / encounter,  but this varies greatly depending on the clinical workflow. This resource is called "ClinicalImpression" rather than "ClinicalAssessment" to avoid confusion with the recording of assessment tools such as Apgar score.
048 */
049@ResourceDef(name="ClinicalImpression", profile="http://hl7.org/fhir/Profile/ClinicalImpression")
050public class ClinicalImpression extends DomainResource {
051
052    public enum ClinicalImpressionStatus {
053        /**
054         * The assessment is still on-going and results are not yet final.
055         */
056        INPROGRESS, 
057        /**
058         * The assessment is done and the results are final.
059         */
060        COMPLETED, 
061        /**
062         * This assessment was never actually done and the record is erroneous (e.g. Wrong patient).
063         */
064        ENTEREDINERROR, 
065        /**
066         * added to help the parsers
067         */
068        NULL;
069        public static ClinicalImpressionStatus fromCode(String codeString) throws FHIRException {
070            if (codeString == null || "".equals(codeString))
071                return null;
072        if ("in-progress".equals(codeString))
073          return INPROGRESS;
074        if ("completed".equals(codeString))
075          return COMPLETED;
076        if ("entered-in-error".equals(codeString))
077          return ENTEREDINERROR;
078        throw new FHIRException("Unknown ClinicalImpressionStatus code '"+codeString+"'");
079        }
080        public String toCode() {
081          switch (this) {
082            case INPROGRESS: return "in-progress";
083            case COMPLETED: return "completed";
084            case ENTEREDINERROR: return "entered-in-error";
085            default: return "?";
086          }
087        }
088        public String getSystem() {
089          switch (this) {
090            case INPROGRESS: return "http://hl7.org/fhir/clinical-impression-status";
091            case COMPLETED: return "http://hl7.org/fhir/clinical-impression-status";
092            case ENTEREDINERROR: return "http://hl7.org/fhir/clinical-impression-status";
093            default: return "?";
094          }
095        }
096        public String getDefinition() {
097          switch (this) {
098            case INPROGRESS: return "The assessment is still on-going and results are not yet final.";
099            case COMPLETED: return "The assessment is done and the results are final.";
100            case ENTEREDINERROR: return "This assessment was never actually done and the record is erroneous (e.g. Wrong patient).";
101            default: return "?";
102          }
103        }
104        public String getDisplay() {
105          switch (this) {
106            case INPROGRESS: return "In progress";
107            case COMPLETED: return "Completed";
108            case ENTEREDINERROR: return "Entered in Error";
109            default: return "?";
110          }
111        }
112    }
113
114  public static class ClinicalImpressionStatusEnumFactory implements EnumFactory<ClinicalImpressionStatus> {
115    public ClinicalImpressionStatus fromCode(String codeString) throws IllegalArgumentException {
116      if (codeString == null || "".equals(codeString))
117            if (codeString == null || "".equals(codeString))
118                return null;
119        if ("in-progress".equals(codeString))
120          return ClinicalImpressionStatus.INPROGRESS;
121        if ("completed".equals(codeString))
122          return ClinicalImpressionStatus.COMPLETED;
123        if ("entered-in-error".equals(codeString))
124          return ClinicalImpressionStatus.ENTEREDINERROR;
125        throw new IllegalArgumentException("Unknown ClinicalImpressionStatus code '"+codeString+"'");
126        }
127        public Enumeration<ClinicalImpressionStatus> fromType(Base code) throws FHIRException {
128          if (code == null || code.isEmpty())
129            return null;
130          String codeString = ((PrimitiveType) code).asStringValue();
131          if (codeString == null || "".equals(codeString))
132            return null;
133        if ("in-progress".equals(codeString))
134          return new Enumeration<ClinicalImpressionStatus>(this, ClinicalImpressionStatus.INPROGRESS);
135        if ("completed".equals(codeString))
136          return new Enumeration<ClinicalImpressionStatus>(this, ClinicalImpressionStatus.COMPLETED);
137        if ("entered-in-error".equals(codeString))
138          return new Enumeration<ClinicalImpressionStatus>(this, ClinicalImpressionStatus.ENTEREDINERROR);
139        throw new FHIRException("Unknown ClinicalImpressionStatus code '"+codeString+"'");
140        }
141    public String toCode(ClinicalImpressionStatus code) {
142      if (code == ClinicalImpressionStatus.INPROGRESS)
143        return "in-progress";
144      if (code == ClinicalImpressionStatus.COMPLETED)
145        return "completed";
146      if (code == ClinicalImpressionStatus.ENTEREDINERROR)
147        return "entered-in-error";
148      return "?";
149      }
150    public String toSystem(ClinicalImpressionStatus code) {
151      return code.getSystem();
152      }
153    }
154
155    @Block()
156    public static class ClinicalImpressionInvestigationsComponent extends BackboneElement implements IBaseBackboneElement {
157        /**
158         * A name/code for the group ("set") of investigations. Typically, this will be something like "signs", "symptoms", "clinical", "diagnostic", but the list is not constrained, and others such groups such as (exposure|family|travel|nutitirional) history may be used.
159         */
160        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
161        @Description(shortDefinition="A name/code for the set", formalDefinition="A name/code for the group (\"set\") of investigations. Typically, this will be something like \"signs\", \"symptoms\", \"clinical\", \"diagnostic\", but the list is not constrained, and others such groups such as (exposure|family|travel|nutitirional) history may be used." )
162        protected CodeableConcept code;
163
164        /**
165         * A record of a specific investigation that was undertaken.
166         */
167        @Child(name = "item", type = {Observation.class, QuestionnaireResponse.class, FamilyMemberHistory.class, DiagnosticReport.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
168        @Description(shortDefinition="Record of a specific investigation", formalDefinition="A record of a specific investigation that was undertaken." )
169        protected List<Reference> item;
170        /**
171         * The actual objects that are the target of the reference (A record of a specific investigation that was undertaken.)
172         */
173        protected List<Resource> itemTarget;
174
175
176        private static final long serialVersionUID = -301363326L;
177
178    /**
179     * Constructor
180     */
181      public ClinicalImpressionInvestigationsComponent() {
182        super();
183      }
184
185    /**
186     * Constructor
187     */
188      public ClinicalImpressionInvestigationsComponent(CodeableConcept code) {
189        super();
190        this.code = code;
191      }
192
193        /**
194         * @return {@link #code} (A name/code for the group ("set") of investigations. Typically, this will be something like "signs", "symptoms", "clinical", "diagnostic", but the list is not constrained, and others such groups such as (exposure|family|travel|nutitirional) history may be used.)
195         */
196        public CodeableConcept getCode() { 
197          if (this.code == null)
198            if (Configuration.errorOnAutoCreate())
199              throw new Error("Attempt to auto-create ClinicalImpressionInvestigationsComponent.code");
200            else if (Configuration.doAutoCreate())
201              this.code = new CodeableConcept(); // cc
202          return this.code;
203        }
204
205        public boolean hasCode() { 
206          return this.code != null && !this.code.isEmpty();
207        }
208
209        /**
210         * @param value {@link #code} (A name/code for the group ("set") of investigations. Typically, this will be something like "signs", "symptoms", "clinical", "diagnostic", but the list is not constrained, and others such groups such as (exposure|family|travel|nutitirional) history may be used.)
211         */
212        public ClinicalImpressionInvestigationsComponent setCode(CodeableConcept value) { 
213          this.code = value;
214          return this;
215        }
216
217        /**
218         * @return {@link #item} (A record of a specific investigation that was undertaken.)
219         */
220        public List<Reference> getItem() { 
221          if (this.item == null)
222            this.item = new ArrayList<Reference>();
223          return this.item;
224        }
225
226        public boolean hasItem() { 
227          if (this.item == null)
228            return false;
229          for (Reference item : this.item)
230            if (!item.isEmpty())
231              return true;
232          return false;
233        }
234
235        /**
236         * @return {@link #item} (A record of a specific investigation that was undertaken.)
237         */
238    // syntactic sugar
239        public Reference addItem() { //3
240          Reference t = new Reference();
241          if (this.item == null)
242            this.item = new ArrayList<Reference>();
243          this.item.add(t);
244          return t;
245        }
246
247    // syntactic sugar
248        public ClinicalImpressionInvestigationsComponent addItem(Reference t) { //3
249          if (t == null)
250            return this;
251          if (this.item == null)
252            this.item = new ArrayList<Reference>();
253          this.item.add(t);
254          return this;
255        }
256
257        /**
258         * @return {@link #item} (The actual objects that are the target of the reference. The reference library doesn't populate this, but you can use this to hold the resources if you resolvethemt. A record of a specific investigation that was undertaken.)
259         */
260        public List<Resource> getItemTarget() { 
261          if (this.itemTarget == null)
262            this.itemTarget = new ArrayList<Resource>();
263          return this.itemTarget;
264        }
265
266        protected void listChildren(List<Property> childrenList) {
267          super.listChildren(childrenList);
268          childrenList.add(new Property("code", "CodeableConcept", "A name/code for the group (\"set\") of investigations. Typically, this will be something like \"signs\", \"symptoms\", \"clinical\", \"diagnostic\", but the list is not constrained, and others such groups such as (exposure|family|travel|nutitirional) history may be used.", 0, java.lang.Integer.MAX_VALUE, code));
269          childrenList.add(new Property("item", "Reference(Observation|QuestionnaireResponse|FamilyMemberHistory|DiagnosticReport)", "A record of a specific investigation that was undertaken.", 0, java.lang.Integer.MAX_VALUE, item));
270        }
271
272      @Override
273      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
274        switch (hash) {
275        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
276        case 3242771: /*item*/ return this.item == null ? new Base[0] : this.item.toArray(new Base[this.item.size()]); // Reference
277        default: return super.getProperty(hash, name, checkValid);
278        }
279
280      }
281
282      @Override
283      public void setProperty(int hash, String name, Base value) throws FHIRException {
284        switch (hash) {
285        case 3059181: // code
286          this.code = castToCodeableConcept(value); // CodeableConcept
287          break;
288        case 3242771: // item
289          this.getItem().add(castToReference(value)); // Reference
290          break;
291        default: super.setProperty(hash, name, value);
292        }
293
294      }
295
296      @Override
297      public void setProperty(String name, Base value) throws FHIRException {
298        if (name.equals("code"))
299          this.code = castToCodeableConcept(value); // CodeableConcept
300        else if (name.equals("item"))
301          this.getItem().add(castToReference(value));
302        else
303          super.setProperty(name, value);
304      }
305
306      @Override
307      public Base makeProperty(int hash, String name) throws FHIRException {
308        switch (hash) {
309        case 3059181:  return getCode(); // CodeableConcept
310        case 3242771:  return addItem(); // Reference
311        default: return super.makeProperty(hash, name);
312        }
313
314      }
315
316      @Override
317      public Base addChild(String name) throws FHIRException {
318        if (name.equals("code")) {
319          this.code = new CodeableConcept();
320          return this.code;
321        }
322        else if (name.equals("item")) {
323          return addItem();
324        }
325        else
326          return super.addChild(name);
327      }
328
329      public ClinicalImpressionInvestigationsComponent copy() {
330        ClinicalImpressionInvestigationsComponent dst = new ClinicalImpressionInvestigationsComponent();
331        copyValues(dst);
332        dst.code = code == null ? null : code.copy();
333        if (item != null) {
334          dst.item = new ArrayList<Reference>();
335          for (Reference i : item)
336            dst.item.add(i.copy());
337        };
338        return dst;
339      }
340
341      @Override
342      public boolean equalsDeep(Base other) {
343        if (!super.equalsDeep(other))
344          return false;
345        if (!(other instanceof ClinicalImpressionInvestigationsComponent))
346          return false;
347        ClinicalImpressionInvestigationsComponent o = (ClinicalImpressionInvestigationsComponent) other;
348        return compareDeep(code, o.code, true) && compareDeep(item, o.item, true);
349      }
350
351      @Override
352      public boolean equalsShallow(Base other) {
353        if (!super.equalsShallow(other))
354          return false;
355        if (!(other instanceof ClinicalImpressionInvestigationsComponent))
356          return false;
357        ClinicalImpressionInvestigationsComponent o = (ClinicalImpressionInvestigationsComponent) other;
358        return true;
359      }
360
361      public boolean isEmpty() {
362        return super.isEmpty() && (code == null || code.isEmpty()) && (item == null || item.isEmpty())
363          ;
364      }
365
366  public String fhirType() {
367    return "ClinicalImpression.investigations";
368
369  }
370
371  }
372
373    @Block()
374    public static class ClinicalImpressionFindingComponent extends BackboneElement implements IBaseBackboneElement {
375        /**
376         * Specific text of code for finding or diagnosis.
377         */
378        @Child(name = "item", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
379        @Description(shortDefinition="Specific text or code for finding", formalDefinition="Specific text of code for finding or diagnosis." )
380        protected CodeableConcept item;
381
382        /**
383         * Which investigations support finding or diagnosis.
384         */
385        @Child(name = "cause", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
386        @Description(shortDefinition="Which investigations support finding", formalDefinition="Which investigations support finding or diagnosis." )
387        protected StringType cause;
388
389        private static final long serialVersionUID = -888590978L;
390
391    /**
392     * Constructor
393     */
394      public ClinicalImpressionFindingComponent() {
395        super();
396      }
397
398    /**
399     * Constructor
400     */
401      public ClinicalImpressionFindingComponent(CodeableConcept item) {
402        super();
403        this.item = item;
404      }
405
406        /**
407         * @return {@link #item} (Specific text of code for finding or diagnosis.)
408         */
409        public CodeableConcept getItem() { 
410          if (this.item == null)
411            if (Configuration.errorOnAutoCreate())
412              throw new Error("Attempt to auto-create ClinicalImpressionFindingComponent.item");
413            else if (Configuration.doAutoCreate())
414              this.item = new CodeableConcept(); // cc
415          return this.item;
416        }
417
418        public boolean hasItem() { 
419          return this.item != null && !this.item.isEmpty();
420        }
421
422        /**
423         * @param value {@link #item} (Specific text of code for finding or diagnosis.)
424         */
425        public ClinicalImpressionFindingComponent setItem(CodeableConcept value) { 
426          this.item = value;
427          return this;
428        }
429
430        /**
431         * @return {@link #cause} (Which investigations support finding or diagnosis.). This is the underlying object with id, value and extensions. The accessor "getCause" gives direct access to the value
432         */
433        public StringType getCauseElement() { 
434          if (this.cause == null)
435            if (Configuration.errorOnAutoCreate())
436              throw new Error("Attempt to auto-create ClinicalImpressionFindingComponent.cause");
437            else if (Configuration.doAutoCreate())
438              this.cause = new StringType(); // bb
439          return this.cause;
440        }
441
442        public boolean hasCauseElement() { 
443          return this.cause != null && !this.cause.isEmpty();
444        }
445
446        public boolean hasCause() { 
447          return this.cause != null && !this.cause.isEmpty();
448        }
449
450        /**
451         * @param value {@link #cause} (Which investigations support finding or diagnosis.). This is the underlying object with id, value and extensions. The accessor "getCause" gives direct access to the value
452         */
453        public ClinicalImpressionFindingComponent setCauseElement(StringType value) { 
454          this.cause = value;
455          return this;
456        }
457
458        /**
459         * @return Which investigations support finding or diagnosis.
460         */
461        public String getCause() { 
462          return this.cause == null ? null : this.cause.getValue();
463        }
464
465        /**
466         * @param value Which investigations support finding or diagnosis.
467         */
468        public ClinicalImpressionFindingComponent setCause(String value) { 
469          if (Utilities.noString(value))
470            this.cause = null;
471          else {
472            if (this.cause == null)
473              this.cause = new StringType();
474            this.cause.setValue(value);
475          }
476          return this;
477        }
478
479        protected void listChildren(List<Property> childrenList) {
480          super.listChildren(childrenList);
481          childrenList.add(new Property("item", "CodeableConcept", "Specific text of code for finding or diagnosis.", 0, java.lang.Integer.MAX_VALUE, item));
482          childrenList.add(new Property("cause", "string", "Which investigations support finding or diagnosis.", 0, java.lang.Integer.MAX_VALUE, cause));
483        }
484
485      @Override
486      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
487        switch (hash) {
488        case 3242771: /*item*/ return this.item == null ? new Base[0] : new Base[] {this.item}; // CodeableConcept
489        case 94434409: /*cause*/ return this.cause == null ? new Base[0] : new Base[] {this.cause}; // StringType
490        default: return super.getProperty(hash, name, checkValid);
491        }
492
493      }
494
495      @Override
496      public void setProperty(int hash, String name, Base value) throws FHIRException {
497        switch (hash) {
498        case 3242771: // item
499          this.item = castToCodeableConcept(value); // CodeableConcept
500          break;
501        case 94434409: // cause
502          this.cause = castToString(value); // StringType
503          break;
504        default: super.setProperty(hash, name, value);
505        }
506
507      }
508
509      @Override
510      public void setProperty(String name, Base value) throws FHIRException {
511        if (name.equals("item"))
512          this.item = castToCodeableConcept(value); // CodeableConcept
513        else if (name.equals("cause"))
514          this.cause = castToString(value); // StringType
515        else
516          super.setProperty(name, value);
517      }
518
519      @Override
520      public Base makeProperty(int hash, String name) throws FHIRException {
521        switch (hash) {
522        case 3242771:  return getItem(); // CodeableConcept
523        case 94434409: throw new FHIRException("Cannot make property cause as it is not a complex type"); // StringType
524        default: return super.makeProperty(hash, name);
525        }
526
527      }
528
529      @Override
530      public Base addChild(String name) throws FHIRException {
531        if (name.equals("item")) {
532          this.item = new CodeableConcept();
533          return this.item;
534        }
535        else if (name.equals("cause")) {
536          throw new FHIRException("Cannot call addChild on a primitive type ClinicalImpression.cause");
537        }
538        else
539          return super.addChild(name);
540      }
541
542      public ClinicalImpressionFindingComponent copy() {
543        ClinicalImpressionFindingComponent dst = new ClinicalImpressionFindingComponent();
544        copyValues(dst);
545        dst.item = item == null ? null : item.copy();
546        dst.cause = cause == null ? null : cause.copy();
547        return dst;
548      }
549
550      @Override
551      public boolean equalsDeep(Base other) {
552        if (!super.equalsDeep(other))
553          return false;
554        if (!(other instanceof ClinicalImpressionFindingComponent))
555          return false;
556        ClinicalImpressionFindingComponent o = (ClinicalImpressionFindingComponent) other;
557        return compareDeep(item, o.item, true) && compareDeep(cause, o.cause, true);
558      }
559
560      @Override
561      public boolean equalsShallow(Base other) {
562        if (!super.equalsShallow(other))
563          return false;
564        if (!(other instanceof ClinicalImpressionFindingComponent))
565          return false;
566        ClinicalImpressionFindingComponent o = (ClinicalImpressionFindingComponent) other;
567        return compareValues(cause, o.cause, true);
568      }
569
570      public boolean isEmpty() {
571        return super.isEmpty() && (item == null || item.isEmpty()) && (cause == null || cause.isEmpty())
572          ;
573      }
574
575  public String fhirType() {
576    return "ClinicalImpression.finding";
577
578  }
579
580  }
581
582    @Block()
583    public static class ClinicalImpressionRuledOutComponent extends BackboneElement implements IBaseBackboneElement {
584        /**
585         * Specific text of code for diagnosis.
586         */
587        @Child(name = "item", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
588        @Description(shortDefinition="Specific text of code for diagnosis", formalDefinition="Specific text of code for diagnosis." )
589        protected CodeableConcept item;
590
591        /**
592         * Grounds for elimination.
593         */
594        @Child(name = "reason", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
595        @Description(shortDefinition="Grounds for elimination", formalDefinition="Grounds for elimination." )
596        protected StringType reason;
597
598        private static final long serialVersionUID = -1001661243L;
599
600    /**
601     * Constructor
602     */
603      public ClinicalImpressionRuledOutComponent() {
604        super();
605      }
606
607    /**
608     * Constructor
609     */
610      public ClinicalImpressionRuledOutComponent(CodeableConcept item) {
611        super();
612        this.item = item;
613      }
614
615        /**
616         * @return {@link #item} (Specific text of code for diagnosis.)
617         */
618        public CodeableConcept getItem() { 
619          if (this.item == null)
620            if (Configuration.errorOnAutoCreate())
621              throw new Error("Attempt to auto-create ClinicalImpressionRuledOutComponent.item");
622            else if (Configuration.doAutoCreate())
623              this.item = new CodeableConcept(); // cc
624          return this.item;
625        }
626
627        public boolean hasItem() { 
628          return this.item != null && !this.item.isEmpty();
629        }
630
631        /**
632         * @param value {@link #item} (Specific text of code for diagnosis.)
633         */
634        public ClinicalImpressionRuledOutComponent setItem(CodeableConcept value) { 
635          this.item = value;
636          return this;
637        }
638
639        /**
640         * @return {@link #reason} (Grounds for elimination.). This is the underlying object with id, value and extensions. The accessor "getReason" gives direct access to the value
641         */
642        public StringType getReasonElement() { 
643          if (this.reason == null)
644            if (Configuration.errorOnAutoCreate())
645              throw new Error("Attempt to auto-create ClinicalImpressionRuledOutComponent.reason");
646            else if (Configuration.doAutoCreate())
647              this.reason = new StringType(); // bb
648          return this.reason;
649        }
650
651        public boolean hasReasonElement() { 
652          return this.reason != null && !this.reason.isEmpty();
653        }
654
655        public boolean hasReason() { 
656          return this.reason != null && !this.reason.isEmpty();
657        }
658
659        /**
660         * @param value {@link #reason} (Grounds for elimination.). This is the underlying object with id, value and extensions. The accessor "getReason" gives direct access to the value
661         */
662        public ClinicalImpressionRuledOutComponent setReasonElement(StringType value) { 
663          this.reason = value;
664          return this;
665        }
666
667        /**
668         * @return Grounds for elimination.
669         */
670        public String getReason() { 
671          return this.reason == null ? null : this.reason.getValue();
672        }
673
674        /**
675         * @param value Grounds for elimination.
676         */
677        public ClinicalImpressionRuledOutComponent setReason(String value) { 
678          if (Utilities.noString(value))
679            this.reason = null;
680          else {
681            if (this.reason == null)
682              this.reason = new StringType();
683            this.reason.setValue(value);
684          }
685          return this;
686        }
687
688        protected void listChildren(List<Property> childrenList) {
689          super.listChildren(childrenList);
690          childrenList.add(new Property("item", "CodeableConcept", "Specific text of code for diagnosis.", 0, java.lang.Integer.MAX_VALUE, item));
691          childrenList.add(new Property("reason", "string", "Grounds for elimination.", 0, java.lang.Integer.MAX_VALUE, reason));
692        }
693
694      @Override
695      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
696        switch (hash) {
697        case 3242771: /*item*/ return this.item == null ? new Base[0] : new Base[] {this.item}; // CodeableConcept
698        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : new Base[] {this.reason}; // StringType
699        default: return super.getProperty(hash, name, checkValid);
700        }
701
702      }
703
704      @Override
705      public void setProperty(int hash, String name, Base value) throws FHIRException {
706        switch (hash) {
707        case 3242771: // item
708          this.item = castToCodeableConcept(value); // CodeableConcept
709          break;
710        case -934964668: // reason
711          this.reason = castToString(value); // StringType
712          break;
713        default: super.setProperty(hash, name, value);
714        }
715
716      }
717
718      @Override
719      public void setProperty(String name, Base value) throws FHIRException {
720        if (name.equals("item"))
721          this.item = castToCodeableConcept(value); // CodeableConcept
722        else if (name.equals("reason"))
723          this.reason = castToString(value); // StringType
724        else
725          super.setProperty(name, value);
726      }
727
728      @Override
729      public Base makeProperty(int hash, String name) throws FHIRException {
730        switch (hash) {
731        case 3242771:  return getItem(); // CodeableConcept
732        case -934964668: throw new FHIRException("Cannot make property reason as it is not a complex type"); // StringType
733        default: return super.makeProperty(hash, name);
734        }
735
736      }
737
738      @Override
739      public Base addChild(String name) throws FHIRException {
740        if (name.equals("item")) {
741          this.item = new CodeableConcept();
742          return this.item;
743        }
744        else if (name.equals("reason")) {
745          throw new FHIRException("Cannot call addChild on a primitive type ClinicalImpression.reason");
746        }
747        else
748          return super.addChild(name);
749      }
750
751      public ClinicalImpressionRuledOutComponent copy() {
752        ClinicalImpressionRuledOutComponent dst = new ClinicalImpressionRuledOutComponent();
753        copyValues(dst);
754        dst.item = item == null ? null : item.copy();
755        dst.reason = reason == null ? null : reason.copy();
756        return dst;
757      }
758
759      @Override
760      public boolean equalsDeep(Base other) {
761        if (!super.equalsDeep(other))
762          return false;
763        if (!(other instanceof ClinicalImpressionRuledOutComponent))
764          return false;
765        ClinicalImpressionRuledOutComponent o = (ClinicalImpressionRuledOutComponent) other;
766        return compareDeep(item, o.item, true) && compareDeep(reason, o.reason, true);
767      }
768
769      @Override
770      public boolean equalsShallow(Base other) {
771        if (!super.equalsShallow(other))
772          return false;
773        if (!(other instanceof ClinicalImpressionRuledOutComponent))
774          return false;
775        ClinicalImpressionRuledOutComponent o = (ClinicalImpressionRuledOutComponent) other;
776        return compareValues(reason, o.reason, true);
777      }
778
779      public boolean isEmpty() {
780        return super.isEmpty() && (item == null || item.isEmpty()) && (reason == null || reason.isEmpty())
781          ;
782      }
783
784  public String fhirType() {
785    return "ClinicalImpression.ruledOut";
786
787  }
788
789  }
790
791    /**
792     * The patient being assessed.
793     */
794    @Child(name = "patient", type = {Patient.class}, order=0, min=1, max=1, modifier=false, summary=true)
795    @Description(shortDefinition="The patient being assessed", formalDefinition="The patient being assessed." )
796    protected Reference patient;
797
798    /**
799     * The actual object that is the target of the reference (The patient being assessed.)
800     */
801    protected Patient patientTarget;
802
803    /**
804     * The clinician performing the assessment.
805     */
806    @Child(name = "assessor", type = {Practitioner.class}, order=1, min=0, max=1, modifier=false, summary=true)
807    @Description(shortDefinition="The clinician performing the assessment", formalDefinition="The clinician performing the assessment." )
808    protected Reference assessor;
809
810    /**
811     * The actual object that is the target of the reference (The clinician performing the assessment.)
812     */
813    protected Practitioner assessorTarget;
814
815    /**
816     * Identifies the workflow status of the assessment.
817     */
818    @Child(name = "status", type = {CodeType.class}, order=2, min=1, max=1, modifier=true, summary=true)
819    @Description(shortDefinition="in-progress | completed | entered-in-error", formalDefinition="Identifies the workflow status of the assessment." )
820    protected Enumeration<ClinicalImpressionStatus> status;
821
822    /**
823     * The point in time at which the assessment was concluded (not when it was recorded).
824     */
825    @Child(name = "date", type = {DateTimeType.class}, order=3, min=0, max=1, modifier=false, summary=true)
826    @Description(shortDefinition="When the assessment occurred", formalDefinition="The point in time at which the assessment was concluded (not when it was recorded)." )
827    protected DateTimeType date;
828
829    /**
830     * A summary of the context and/or cause of the assessment - why / where was it peformed, and what patient events/sstatus prompted it.
831     */
832    @Child(name = "description", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
833    @Description(shortDefinition="Why/how the assessment was performed", formalDefinition="A summary of the context and/or cause of the assessment - why / where was it peformed, and what patient events/sstatus prompted it." )
834    protected StringType description;
835
836    /**
837     * A reference to the last assesment that was conducted bon this patient. Assessments are often/usually ongoing in nature; a care provider (practitioner or team) will make new assessments on an ongoing basis as new data arises or the patient's conditions changes.
838     */
839    @Child(name = "previous", type = {ClinicalImpression.class}, order=5, min=0, max=1, modifier=false, summary=false)
840    @Description(shortDefinition="Reference to last assessment", formalDefinition="A reference to the last assesment that was conducted bon this patient. Assessments are often/usually ongoing in nature; a care provider (practitioner or team) will make new assessments on an ongoing basis as new data arises or the patient's conditions changes." )
841    protected Reference previous;
842
843    /**
844     * The actual object that is the target of the reference (A reference to the last assesment that was conducted bon this patient. Assessments are often/usually ongoing in nature; a care provider (practitioner or team) will make new assessments on an ongoing basis as new data arises or the patient's conditions changes.)
845     */
846    protected ClinicalImpression previousTarget;
847
848    /**
849     * This a list of the general problems/conditions for a patient.
850     */
851    @Child(name = "problem", type = {Condition.class, AllergyIntolerance.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
852    @Description(shortDefinition="General assessment of patient state", formalDefinition="This a list of the general problems/conditions for a patient." )
853    protected List<Reference> problem;
854    /**
855     * The actual objects that are the target of the reference (This a list of the general problems/conditions for a patient.)
856     */
857    protected List<Resource> problemTarget;
858
859
860    /**
861     * The request or event that necessitated this assessment. This may be a diagnosis, a Care Plan, a Request Referral, or some other resource.
862     */
863    @Child(name = "trigger", type = {CodeableConcept.class}, order=7, min=0, max=1, modifier=false, summary=false)
864    @Description(shortDefinition="Request or event that necessitated this assessment", formalDefinition="The request or event that necessitated this assessment. This may be a diagnosis, a Care Plan, a Request Referral, or some other resource." )
865    protected Type trigger;
866
867    /**
868     * One or more sets of investigations (signs, symptions, etc.). The actual grouping of investigations vary greatly depending on the type and context of the assessment. These investigations may include data generated during the assessment process, or data previously generated and recorded that is pertinent to the outcomes.
869     */
870    @Child(name = "investigations", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
871    @Description(shortDefinition="One or more sets of investigations (signs, symptions, etc.)", formalDefinition="One or more sets of investigations (signs, symptions, etc.). The actual grouping of investigations vary greatly depending on the type and context of the assessment. These investigations may include data generated during the assessment process, or data previously generated and recorded that is pertinent to the outcomes." )
872    protected List<ClinicalImpressionInvestigationsComponent> investigations;
873
874    /**
875     * Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.
876     */
877    @Child(name = "protocol", type = {UriType.class}, order=9, min=0, max=1, modifier=false, summary=false)
878    @Description(shortDefinition="Clinical Protocol followed", formalDefinition="Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis." )
879    protected UriType protocol;
880
881    /**
882     * A text summary of the investigations and the diagnosis.
883     */
884    @Child(name = "summary", type = {StringType.class}, order=10, min=0, max=1, modifier=false, summary=false)
885    @Description(shortDefinition="Summary of the assessment", formalDefinition="A text summary of the investigations and the diagnosis." )
886    protected StringType summary;
887
888    /**
889     * Specific findings or diagnoses that was considered likely or relevant to ongoing treatment.
890     */
891    @Child(name = "finding", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
892    @Description(shortDefinition="Possible or likely findings and diagnoses", formalDefinition="Specific findings or diagnoses that was considered likely or relevant to ongoing treatment." )
893    protected List<ClinicalImpressionFindingComponent> finding;
894
895    /**
896     * Diagnoses/conditions resolved since the last assessment.
897     */
898    @Child(name = "resolved", type = {CodeableConcept.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
899    @Description(shortDefinition="Diagnoses/conditions resolved since previous assessment", formalDefinition="Diagnoses/conditions resolved since the last assessment." )
900    protected List<CodeableConcept> resolved;
901
902    /**
903     * Diagnosis considered not possible.
904     */
905    @Child(name = "ruledOut", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
906    @Description(shortDefinition="Diagnosis considered not possible", formalDefinition="Diagnosis considered not possible." )
907    protected List<ClinicalImpressionRuledOutComponent> ruledOut;
908
909    /**
910     * Estimate of likely outcome.
911     */
912    @Child(name = "prognosis", type = {StringType.class}, order=14, min=0, max=1, modifier=false, summary=false)
913    @Description(shortDefinition="Estimate of likely outcome", formalDefinition="Estimate of likely outcome." )
914    protected StringType prognosis;
915
916    /**
917     * Plan of action after assessment.
918     */
919    @Child(name = "plan", type = {CarePlan.class, Appointment.class, CommunicationRequest.class, DeviceUseRequest.class, DiagnosticOrder.class, MedicationOrder.class, NutritionOrder.class, Order.class, ProcedureRequest.class, ProcessRequest.class, ReferralRequest.class, SupplyRequest.class, VisionPrescription.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
920    @Description(shortDefinition="Plan of action after assessment", formalDefinition="Plan of action after assessment." )
921    protected List<Reference> plan;
922    /**
923     * The actual objects that are the target of the reference (Plan of action after assessment.)
924     */
925    protected List<Resource> planTarget;
926
927
928    /**
929     * Actions taken during assessment.
930     */
931    @Child(name = "action", type = {ReferralRequest.class, ProcedureRequest.class, Procedure.class, MedicationOrder.class, DiagnosticOrder.class, NutritionOrder.class, SupplyRequest.class, Appointment.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
932    @Description(shortDefinition="Actions taken during assessment", formalDefinition="Actions taken during assessment." )
933    protected List<Reference> action;
934    /**
935     * The actual objects that are the target of the reference (Actions taken during assessment.)
936     */
937    protected List<Resource> actionTarget;
938
939
940    private static final long serialVersionUID = 1650458630L;
941
942  /**
943   * Constructor
944   */
945    public ClinicalImpression() {
946      super();
947    }
948
949  /**
950   * Constructor
951   */
952    public ClinicalImpression(Reference patient, Enumeration<ClinicalImpressionStatus> status) {
953      super();
954      this.patient = patient;
955      this.status = status;
956    }
957
958    /**
959     * @return {@link #patient} (The patient being assessed.)
960     */
961    public Reference getPatient() { 
962      if (this.patient == null)
963        if (Configuration.errorOnAutoCreate())
964          throw new Error("Attempt to auto-create ClinicalImpression.patient");
965        else if (Configuration.doAutoCreate())
966          this.patient = new Reference(); // cc
967      return this.patient;
968    }
969
970    public boolean hasPatient() { 
971      return this.patient != null && !this.patient.isEmpty();
972    }
973
974    /**
975     * @param value {@link #patient} (The patient being assessed.)
976     */
977    public ClinicalImpression setPatient(Reference value) { 
978      this.patient = value;
979      return this;
980    }
981
982    /**
983     * @return {@link #patient} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The patient being assessed.)
984     */
985    public Patient getPatientTarget() { 
986      if (this.patientTarget == null)
987        if (Configuration.errorOnAutoCreate())
988          throw new Error("Attempt to auto-create ClinicalImpression.patient");
989        else if (Configuration.doAutoCreate())
990          this.patientTarget = new Patient(); // aa
991      return this.patientTarget;
992    }
993
994    /**
995     * @param value {@link #patient} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The patient being assessed.)
996     */
997    public ClinicalImpression setPatientTarget(Patient value) { 
998      this.patientTarget = value;
999      return this;
1000    }
1001
1002    /**
1003     * @return {@link #assessor} (The clinician performing the assessment.)
1004     */
1005    public Reference getAssessor() { 
1006      if (this.assessor == null)
1007        if (Configuration.errorOnAutoCreate())
1008          throw new Error("Attempt to auto-create ClinicalImpression.assessor");
1009        else if (Configuration.doAutoCreate())
1010          this.assessor = new Reference(); // cc
1011      return this.assessor;
1012    }
1013
1014    public boolean hasAssessor() { 
1015      return this.assessor != null && !this.assessor.isEmpty();
1016    }
1017
1018    /**
1019     * @param value {@link #assessor} (The clinician performing the assessment.)
1020     */
1021    public ClinicalImpression setAssessor(Reference value) { 
1022      this.assessor = value;
1023      return this;
1024    }
1025
1026    /**
1027     * @return {@link #assessor} 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 clinician performing the assessment.)
1028     */
1029    public Practitioner getAssessorTarget() { 
1030      if (this.assessorTarget == null)
1031        if (Configuration.errorOnAutoCreate())
1032          throw new Error("Attempt to auto-create ClinicalImpression.assessor");
1033        else if (Configuration.doAutoCreate())
1034          this.assessorTarget = new Practitioner(); // aa
1035      return this.assessorTarget;
1036    }
1037
1038    /**
1039     * @param value {@link #assessor} 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 clinician performing the assessment.)
1040     */
1041    public ClinicalImpression setAssessorTarget(Practitioner value) { 
1042      this.assessorTarget = value;
1043      return this;
1044    }
1045
1046    /**
1047     * @return {@link #status} (Identifies the workflow status of the assessment.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1048     */
1049    public Enumeration<ClinicalImpressionStatus> getStatusElement() { 
1050      if (this.status == null)
1051        if (Configuration.errorOnAutoCreate())
1052          throw new Error("Attempt to auto-create ClinicalImpression.status");
1053        else if (Configuration.doAutoCreate())
1054          this.status = new Enumeration<ClinicalImpressionStatus>(new ClinicalImpressionStatusEnumFactory()); // bb
1055      return this.status;
1056    }
1057
1058    public boolean hasStatusElement() { 
1059      return this.status != null && !this.status.isEmpty();
1060    }
1061
1062    public boolean hasStatus() { 
1063      return this.status != null && !this.status.isEmpty();
1064    }
1065
1066    /**
1067     * @param value {@link #status} (Identifies the workflow status of the assessment.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1068     */
1069    public ClinicalImpression setStatusElement(Enumeration<ClinicalImpressionStatus> value) { 
1070      this.status = value;
1071      return this;
1072    }
1073
1074    /**
1075     * @return Identifies the workflow status of the assessment.
1076     */
1077    public ClinicalImpressionStatus getStatus() { 
1078      return this.status == null ? null : this.status.getValue();
1079    }
1080
1081    /**
1082     * @param value Identifies the workflow status of the assessment.
1083     */
1084    public ClinicalImpression setStatus(ClinicalImpressionStatus value) { 
1085        if (this.status == null)
1086          this.status = new Enumeration<ClinicalImpressionStatus>(new ClinicalImpressionStatusEnumFactory());
1087        this.status.setValue(value);
1088      return this;
1089    }
1090
1091    /**
1092     * @return {@link #date} (The point in time at which the assessment was concluded (not when it was recorded).). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1093     */
1094    public DateTimeType getDateElement() { 
1095      if (this.date == null)
1096        if (Configuration.errorOnAutoCreate())
1097          throw new Error("Attempt to auto-create ClinicalImpression.date");
1098        else if (Configuration.doAutoCreate())
1099          this.date = new DateTimeType(); // bb
1100      return this.date;
1101    }
1102
1103    public boolean hasDateElement() { 
1104      return this.date != null && !this.date.isEmpty();
1105    }
1106
1107    public boolean hasDate() { 
1108      return this.date != null && !this.date.isEmpty();
1109    }
1110
1111    /**
1112     * @param value {@link #date} (The point in time at which the assessment was concluded (not when it was recorded).). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1113     */
1114    public ClinicalImpression setDateElement(DateTimeType value) { 
1115      this.date = value;
1116      return this;
1117    }
1118
1119    /**
1120     * @return The point in time at which the assessment was concluded (not when it was recorded).
1121     */
1122    public Date getDate() { 
1123      return this.date == null ? null : this.date.getValue();
1124    }
1125
1126    /**
1127     * @param value The point in time at which the assessment was concluded (not when it was recorded).
1128     */
1129    public ClinicalImpression setDate(Date value) { 
1130      if (value == null)
1131        this.date = null;
1132      else {
1133        if (this.date == null)
1134          this.date = new DateTimeType();
1135        this.date.setValue(value);
1136      }
1137      return this;
1138    }
1139
1140    /**
1141     * @return {@link #description} (A summary of the context and/or cause of the assessment - why / where was it peformed, and what patient events/sstatus prompted it.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1142     */
1143    public StringType getDescriptionElement() { 
1144      if (this.description == null)
1145        if (Configuration.errorOnAutoCreate())
1146          throw new Error("Attempt to auto-create ClinicalImpression.description");
1147        else if (Configuration.doAutoCreate())
1148          this.description = new StringType(); // bb
1149      return this.description;
1150    }
1151
1152    public boolean hasDescriptionElement() { 
1153      return this.description != null && !this.description.isEmpty();
1154    }
1155
1156    public boolean hasDescription() { 
1157      return this.description != null && !this.description.isEmpty();
1158    }
1159
1160    /**
1161     * @param value {@link #description} (A summary of the context and/or cause of the assessment - why / where was it peformed, and what patient events/sstatus prompted it.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1162     */
1163    public ClinicalImpression setDescriptionElement(StringType value) { 
1164      this.description = value;
1165      return this;
1166    }
1167
1168    /**
1169     * @return A summary of the context and/or cause of the assessment - why / where was it peformed, and what patient events/sstatus prompted it.
1170     */
1171    public String getDescription() { 
1172      return this.description == null ? null : this.description.getValue();
1173    }
1174
1175    /**
1176     * @param value A summary of the context and/or cause of the assessment - why / where was it peformed, and what patient events/sstatus prompted it.
1177     */
1178    public ClinicalImpression setDescription(String value) { 
1179      if (Utilities.noString(value))
1180        this.description = null;
1181      else {
1182        if (this.description == null)
1183          this.description = new StringType();
1184        this.description.setValue(value);
1185      }
1186      return this;
1187    }
1188
1189    /**
1190     * @return {@link #previous} (A reference to the last assesment that was conducted bon this patient. Assessments are often/usually ongoing in nature; a care provider (practitioner or team) will make new assessments on an ongoing basis as new data arises or the patient's conditions changes.)
1191     */
1192    public Reference getPrevious() { 
1193      if (this.previous == null)
1194        if (Configuration.errorOnAutoCreate())
1195          throw new Error("Attempt to auto-create ClinicalImpression.previous");
1196        else if (Configuration.doAutoCreate())
1197          this.previous = new Reference(); // cc
1198      return this.previous;
1199    }
1200
1201    public boolean hasPrevious() { 
1202      return this.previous != null && !this.previous.isEmpty();
1203    }
1204
1205    /**
1206     * @param value {@link #previous} (A reference to the last assesment that was conducted bon this patient. Assessments are often/usually ongoing in nature; a care provider (practitioner or team) will make new assessments on an ongoing basis as new data arises or the patient's conditions changes.)
1207     */
1208    public ClinicalImpression setPrevious(Reference value) { 
1209      this.previous = value;
1210      return this;
1211    }
1212
1213    /**
1214     * @return {@link #previous} 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. (A reference to the last assesment that was conducted bon this patient. Assessments are often/usually ongoing in nature; a care provider (practitioner or team) will make new assessments on an ongoing basis as new data arises or the patient's conditions changes.)
1215     */
1216    public ClinicalImpression getPreviousTarget() { 
1217      if (this.previousTarget == null)
1218        if (Configuration.errorOnAutoCreate())
1219          throw new Error("Attempt to auto-create ClinicalImpression.previous");
1220        else if (Configuration.doAutoCreate())
1221          this.previousTarget = new ClinicalImpression(); // aa
1222      return this.previousTarget;
1223    }
1224
1225    /**
1226     * @param value {@link #previous} 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. (A reference to the last assesment that was conducted bon this patient. Assessments are often/usually ongoing in nature; a care provider (practitioner or team) will make new assessments on an ongoing basis as new data arises or the patient's conditions changes.)
1227     */
1228    public ClinicalImpression setPreviousTarget(ClinicalImpression value) { 
1229      this.previousTarget = value;
1230      return this;
1231    }
1232
1233    /**
1234     * @return {@link #problem} (This a list of the general problems/conditions for a patient.)
1235     */
1236    public List<Reference> getProblem() { 
1237      if (this.problem == null)
1238        this.problem = new ArrayList<Reference>();
1239      return this.problem;
1240    }
1241
1242    public boolean hasProblem() { 
1243      if (this.problem == null)
1244        return false;
1245      for (Reference item : this.problem)
1246        if (!item.isEmpty())
1247          return true;
1248      return false;
1249    }
1250
1251    /**
1252     * @return {@link #problem} (This a list of the general problems/conditions for a patient.)
1253     */
1254    // syntactic sugar
1255    public Reference addProblem() { //3
1256      Reference t = new Reference();
1257      if (this.problem == null)
1258        this.problem = new ArrayList<Reference>();
1259      this.problem.add(t);
1260      return t;
1261    }
1262
1263    // syntactic sugar
1264    public ClinicalImpression addProblem(Reference t) { //3
1265      if (t == null)
1266        return this;
1267      if (this.problem == null)
1268        this.problem = new ArrayList<Reference>();
1269      this.problem.add(t);
1270      return this;
1271    }
1272
1273    /**
1274     * @return {@link #problem} (The actual objects that are the target of the reference. The reference library doesn't populate this, but you can use this to hold the resources if you resolvethemt. This a list of the general problems/conditions for a patient.)
1275     */
1276    public List<Resource> getProblemTarget() { 
1277      if (this.problemTarget == null)
1278        this.problemTarget = new ArrayList<Resource>();
1279      return this.problemTarget;
1280    }
1281
1282    /**
1283     * @return {@link #trigger} (The request or event that necessitated this assessment. This may be a diagnosis, a Care Plan, a Request Referral, or some other resource.)
1284     */
1285    public Type getTrigger() { 
1286      return this.trigger;
1287    }
1288
1289    /**
1290     * @return {@link #trigger} (The request or event that necessitated this assessment. This may be a diagnosis, a Care Plan, a Request Referral, or some other resource.)
1291     */
1292    public CodeableConcept getTriggerCodeableConcept() throws FHIRException { 
1293      if (!(this.trigger instanceof CodeableConcept))
1294        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.trigger.getClass().getName()+" was encountered");
1295      return (CodeableConcept) this.trigger;
1296    }
1297
1298    public boolean hasTriggerCodeableConcept() { 
1299      return this.trigger instanceof CodeableConcept;
1300    }
1301
1302    /**
1303     * @return {@link #trigger} (The request or event that necessitated this assessment. This may be a diagnosis, a Care Plan, a Request Referral, or some other resource.)
1304     */
1305    public Reference getTriggerReference() throws FHIRException { 
1306      if (!(this.trigger instanceof Reference))
1307        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.trigger.getClass().getName()+" was encountered");
1308      return (Reference) this.trigger;
1309    }
1310
1311    public boolean hasTriggerReference() { 
1312      return this.trigger instanceof Reference;
1313    }
1314
1315    public boolean hasTrigger() { 
1316      return this.trigger != null && !this.trigger.isEmpty();
1317    }
1318
1319    /**
1320     * @param value {@link #trigger} (The request or event that necessitated this assessment. This may be a diagnosis, a Care Plan, a Request Referral, or some other resource.)
1321     */
1322    public ClinicalImpression setTrigger(Type value) { 
1323      this.trigger = value;
1324      return this;
1325    }
1326
1327    /**
1328     * @return {@link #investigations} (One or more sets of investigations (signs, symptions, etc.). The actual grouping of investigations vary greatly depending on the type and context of the assessment. These investigations may include data generated during the assessment process, or data previously generated and recorded that is pertinent to the outcomes.)
1329     */
1330    public List<ClinicalImpressionInvestigationsComponent> getInvestigations() { 
1331      if (this.investigations == null)
1332        this.investigations = new ArrayList<ClinicalImpressionInvestigationsComponent>();
1333      return this.investigations;
1334    }
1335
1336    public boolean hasInvestigations() { 
1337      if (this.investigations == null)
1338        return false;
1339      for (ClinicalImpressionInvestigationsComponent item : this.investigations)
1340        if (!item.isEmpty())
1341          return true;
1342      return false;
1343    }
1344
1345    /**
1346     * @return {@link #investigations} (One or more sets of investigations (signs, symptions, etc.). The actual grouping of investigations vary greatly depending on the type and context of the assessment. These investigations may include data generated during the assessment process, or data previously generated and recorded that is pertinent to the outcomes.)
1347     */
1348    // syntactic sugar
1349    public ClinicalImpressionInvestigationsComponent addInvestigations() { //3
1350      ClinicalImpressionInvestigationsComponent t = new ClinicalImpressionInvestigationsComponent();
1351      if (this.investigations == null)
1352        this.investigations = new ArrayList<ClinicalImpressionInvestigationsComponent>();
1353      this.investigations.add(t);
1354      return t;
1355    }
1356
1357    // syntactic sugar
1358    public ClinicalImpression addInvestigations(ClinicalImpressionInvestigationsComponent t) { //3
1359      if (t == null)
1360        return this;
1361      if (this.investigations == null)
1362        this.investigations = new ArrayList<ClinicalImpressionInvestigationsComponent>();
1363      this.investigations.add(t);
1364      return this;
1365    }
1366
1367    /**
1368     * @return {@link #protocol} (Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.). This is the underlying object with id, value and extensions. The accessor "getProtocol" gives direct access to the value
1369     */
1370    public UriType getProtocolElement() { 
1371      if (this.protocol == null)
1372        if (Configuration.errorOnAutoCreate())
1373          throw new Error("Attempt to auto-create ClinicalImpression.protocol");
1374        else if (Configuration.doAutoCreate())
1375          this.protocol = new UriType(); // bb
1376      return this.protocol;
1377    }
1378
1379    public boolean hasProtocolElement() { 
1380      return this.protocol != null && !this.protocol.isEmpty();
1381    }
1382
1383    public boolean hasProtocol() { 
1384      return this.protocol != null && !this.protocol.isEmpty();
1385    }
1386
1387    /**
1388     * @param value {@link #protocol} (Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.). This is the underlying object with id, value and extensions. The accessor "getProtocol" gives direct access to the value
1389     */
1390    public ClinicalImpression setProtocolElement(UriType value) { 
1391      this.protocol = value;
1392      return this;
1393    }
1394
1395    /**
1396     * @return Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.
1397     */
1398    public String getProtocol() { 
1399      return this.protocol == null ? null : this.protocol.getValue();
1400    }
1401
1402    /**
1403     * @param value Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.
1404     */
1405    public ClinicalImpression setProtocol(String value) { 
1406      if (Utilities.noString(value))
1407        this.protocol = null;
1408      else {
1409        if (this.protocol == null)
1410          this.protocol = new UriType();
1411        this.protocol.setValue(value);
1412      }
1413      return this;
1414    }
1415
1416    /**
1417     * @return {@link #summary} (A text summary of the investigations and the diagnosis.). This is the underlying object with id, value and extensions. The accessor "getSummary" gives direct access to the value
1418     */
1419    public StringType getSummaryElement() { 
1420      if (this.summary == null)
1421        if (Configuration.errorOnAutoCreate())
1422          throw new Error("Attempt to auto-create ClinicalImpression.summary");
1423        else if (Configuration.doAutoCreate())
1424          this.summary = new StringType(); // bb
1425      return this.summary;
1426    }
1427
1428    public boolean hasSummaryElement() { 
1429      return this.summary != null && !this.summary.isEmpty();
1430    }
1431
1432    public boolean hasSummary() { 
1433      return this.summary != null && !this.summary.isEmpty();
1434    }
1435
1436    /**
1437     * @param value {@link #summary} (A text summary of the investigations and the diagnosis.). This is the underlying object with id, value and extensions. The accessor "getSummary" gives direct access to the value
1438     */
1439    public ClinicalImpression setSummaryElement(StringType value) { 
1440      this.summary = value;
1441      return this;
1442    }
1443
1444    /**
1445     * @return A text summary of the investigations and the diagnosis.
1446     */
1447    public String getSummary() { 
1448      return this.summary == null ? null : this.summary.getValue();
1449    }
1450
1451    /**
1452     * @param value A text summary of the investigations and the diagnosis.
1453     */
1454    public ClinicalImpression setSummary(String value) { 
1455      if (Utilities.noString(value))
1456        this.summary = null;
1457      else {
1458        if (this.summary == null)
1459          this.summary = new StringType();
1460        this.summary.setValue(value);
1461      }
1462      return this;
1463    }
1464
1465    /**
1466     * @return {@link #finding} (Specific findings or diagnoses that was considered likely or relevant to ongoing treatment.)
1467     */
1468    public List<ClinicalImpressionFindingComponent> getFinding() { 
1469      if (this.finding == null)
1470        this.finding = new ArrayList<ClinicalImpressionFindingComponent>();
1471      return this.finding;
1472    }
1473
1474    public boolean hasFinding() { 
1475      if (this.finding == null)
1476        return false;
1477      for (ClinicalImpressionFindingComponent item : this.finding)
1478        if (!item.isEmpty())
1479          return true;
1480      return false;
1481    }
1482
1483    /**
1484     * @return {@link #finding} (Specific findings or diagnoses that was considered likely or relevant to ongoing treatment.)
1485     */
1486    // syntactic sugar
1487    public ClinicalImpressionFindingComponent addFinding() { //3
1488      ClinicalImpressionFindingComponent t = new ClinicalImpressionFindingComponent();
1489      if (this.finding == null)
1490        this.finding = new ArrayList<ClinicalImpressionFindingComponent>();
1491      this.finding.add(t);
1492      return t;
1493    }
1494
1495    // syntactic sugar
1496    public ClinicalImpression addFinding(ClinicalImpressionFindingComponent t) { //3
1497      if (t == null)
1498        return this;
1499      if (this.finding == null)
1500        this.finding = new ArrayList<ClinicalImpressionFindingComponent>();
1501      this.finding.add(t);
1502      return this;
1503    }
1504
1505    /**
1506     * @return {@link #resolved} (Diagnoses/conditions resolved since the last assessment.)
1507     */
1508    public List<CodeableConcept> getResolved() { 
1509      if (this.resolved == null)
1510        this.resolved = new ArrayList<CodeableConcept>();
1511      return this.resolved;
1512    }
1513
1514    public boolean hasResolved() { 
1515      if (this.resolved == null)
1516        return false;
1517      for (CodeableConcept item : this.resolved)
1518        if (!item.isEmpty())
1519          return true;
1520      return false;
1521    }
1522
1523    /**
1524     * @return {@link #resolved} (Diagnoses/conditions resolved since the last assessment.)
1525     */
1526    // syntactic sugar
1527    public CodeableConcept addResolved() { //3
1528      CodeableConcept t = new CodeableConcept();
1529      if (this.resolved == null)
1530        this.resolved = new ArrayList<CodeableConcept>();
1531      this.resolved.add(t);
1532      return t;
1533    }
1534
1535    // syntactic sugar
1536    public ClinicalImpression addResolved(CodeableConcept t) { //3
1537      if (t == null)
1538        return this;
1539      if (this.resolved == null)
1540        this.resolved = new ArrayList<CodeableConcept>();
1541      this.resolved.add(t);
1542      return this;
1543    }
1544
1545    /**
1546     * @return {@link #ruledOut} (Diagnosis considered not possible.)
1547     */
1548    public List<ClinicalImpressionRuledOutComponent> getRuledOut() { 
1549      if (this.ruledOut == null)
1550        this.ruledOut = new ArrayList<ClinicalImpressionRuledOutComponent>();
1551      return this.ruledOut;
1552    }
1553
1554    public boolean hasRuledOut() { 
1555      if (this.ruledOut == null)
1556        return false;
1557      for (ClinicalImpressionRuledOutComponent item : this.ruledOut)
1558        if (!item.isEmpty())
1559          return true;
1560      return false;
1561    }
1562
1563    /**
1564     * @return {@link #ruledOut} (Diagnosis considered not possible.)
1565     */
1566    // syntactic sugar
1567    public ClinicalImpressionRuledOutComponent addRuledOut() { //3
1568      ClinicalImpressionRuledOutComponent t = new ClinicalImpressionRuledOutComponent();
1569      if (this.ruledOut == null)
1570        this.ruledOut = new ArrayList<ClinicalImpressionRuledOutComponent>();
1571      this.ruledOut.add(t);
1572      return t;
1573    }
1574
1575    // syntactic sugar
1576    public ClinicalImpression addRuledOut(ClinicalImpressionRuledOutComponent t) { //3
1577      if (t == null)
1578        return this;
1579      if (this.ruledOut == null)
1580        this.ruledOut = new ArrayList<ClinicalImpressionRuledOutComponent>();
1581      this.ruledOut.add(t);
1582      return this;
1583    }
1584
1585    /**
1586     * @return {@link #prognosis} (Estimate of likely outcome.). This is the underlying object with id, value and extensions. The accessor "getPrognosis" gives direct access to the value
1587     */
1588    public StringType getPrognosisElement() { 
1589      if (this.prognosis == null)
1590        if (Configuration.errorOnAutoCreate())
1591          throw new Error("Attempt to auto-create ClinicalImpression.prognosis");
1592        else if (Configuration.doAutoCreate())
1593          this.prognosis = new StringType(); // bb
1594      return this.prognosis;
1595    }
1596
1597    public boolean hasPrognosisElement() { 
1598      return this.prognosis != null && !this.prognosis.isEmpty();
1599    }
1600
1601    public boolean hasPrognosis() { 
1602      return this.prognosis != null && !this.prognosis.isEmpty();
1603    }
1604
1605    /**
1606     * @param value {@link #prognosis} (Estimate of likely outcome.). This is the underlying object with id, value and extensions. The accessor "getPrognosis" gives direct access to the value
1607     */
1608    public ClinicalImpression setPrognosisElement(StringType value) { 
1609      this.prognosis = value;
1610      return this;
1611    }
1612
1613    /**
1614     * @return Estimate of likely outcome.
1615     */
1616    public String getPrognosis() { 
1617      return this.prognosis == null ? null : this.prognosis.getValue();
1618    }
1619
1620    /**
1621     * @param value Estimate of likely outcome.
1622     */
1623    public ClinicalImpression setPrognosis(String value) { 
1624      if (Utilities.noString(value))
1625        this.prognosis = null;
1626      else {
1627        if (this.prognosis == null)
1628          this.prognosis = new StringType();
1629        this.prognosis.setValue(value);
1630      }
1631      return this;
1632    }
1633
1634    /**
1635     * @return {@link #plan} (Plan of action after assessment.)
1636     */
1637    public List<Reference> getPlan() { 
1638      if (this.plan == null)
1639        this.plan = new ArrayList<Reference>();
1640      return this.plan;
1641    }
1642
1643    public boolean hasPlan() { 
1644      if (this.plan == null)
1645        return false;
1646      for (Reference item : this.plan)
1647        if (!item.isEmpty())
1648          return true;
1649      return false;
1650    }
1651
1652    /**
1653     * @return {@link #plan} (Plan of action after assessment.)
1654     */
1655    // syntactic sugar
1656    public Reference addPlan() { //3
1657      Reference t = new Reference();
1658      if (this.plan == null)
1659        this.plan = new ArrayList<Reference>();
1660      this.plan.add(t);
1661      return t;
1662    }
1663
1664    // syntactic sugar
1665    public ClinicalImpression addPlan(Reference t) { //3
1666      if (t == null)
1667        return this;
1668      if (this.plan == null)
1669        this.plan = new ArrayList<Reference>();
1670      this.plan.add(t);
1671      return this;
1672    }
1673
1674    /**
1675     * @return {@link #plan} (The actual objects that are the target of the reference. The reference library doesn't populate this, but you can use this to hold the resources if you resolvethemt. Plan of action after assessment.)
1676     */
1677    public List<Resource> getPlanTarget() { 
1678      if (this.planTarget == null)
1679        this.planTarget = new ArrayList<Resource>();
1680      return this.planTarget;
1681    }
1682
1683    /**
1684     * @return {@link #action} (Actions taken during assessment.)
1685     */
1686    public List<Reference> getAction() { 
1687      if (this.action == null)
1688        this.action = new ArrayList<Reference>();
1689      return this.action;
1690    }
1691
1692    public boolean hasAction() { 
1693      if (this.action == null)
1694        return false;
1695      for (Reference item : this.action)
1696        if (!item.isEmpty())
1697          return true;
1698      return false;
1699    }
1700
1701    /**
1702     * @return {@link #action} (Actions taken during assessment.)
1703     */
1704    // syntactic sugar
1705    public Reference addAction() { //3
1706      Reference t = new Reference();
1707      if (this.action == null)
1708        this.action = new ArrayList<Reference>();
1709      this.action.add(t);
1710      return t;
1711    }
1712
1713    // syntactic sugar
1714    public ClinicalImpression addAction(Reference t) { //3
1715      if (t == null)
1716        return this;
1717      if (this.action == null)
1718        this.action = new ArrayList<Reference>();
1719      this.action.add(t);
1720      return this;
1721    }
1722
1723    /**
1724     * @return {@link #action} (The actual objects that are the target of the reference. The reference library doesn't populate this, but you can use this to hold the resources if you resolvethemt. Actions taken during assessment.)
1725     */
1726    public List<Resource> getActionTarget() { 
1727      if (this.actionTarget == null)
1728        this.actionTarget = new ArrayList<Resource>();
1729      return this.actionTarget;
1730    }
1731
1732      protected void listChildren(List<Property> childrenList) {
1733        super.listChildren(childrenList);
1734        childrenList.add(new Property("patient", "Reference(Patient)", "The patient being assessed.", 0, java.lang.Integer.MAX_VALUE, patient));
1735        childrenList.add(new Property("assessor", "Reference(Practitioner)", "The clinician performing the assessment.", 0, java.lang.Integer.MAX_VALUE, assessor));
1736        childrenList.add(new Property("status", "code", "Identifies the workflow status of the assessment.", 0, java.lang.Integer.MAX_VALUE, status));
1737        childrenList.add(new Property("date", "dateTime", "The point in time at which the assessment was concluded (not when it was recorded).", 0, java.lang.Integer.MAX_VALUE, date));
1738        childrenList.add(new Property("description", "string", "A summary of the context and/or cause of the assessment - why / where was it peformed, and what patient events/sstatus prompted it.", 0, java.lang.Integer.MAX_VALUE, description));
1739        childrenList.add(new Property("previous", "Reference(ClinicalImpression)", "A reference to the last assesment that was conducted bon this patient. Assessments are often/usually ongoing in nature; a care provider (practitioner or team) will make new assessments on an ongoing basis as new data arises or the patient's conditions changes.", 0, java.lang.Integer.MAX_VALUE, previous));
1740        childrenList.add(new Property("problem", "Reference(Condition|AllergyIntolerance)", "This a list of the general problems/conditions for a patient.", 0, java.lang.Integer.MAX_VALUE, problem));
1741        childrenList.add(new Property("trigger[x]", "CodeableConcept|Reference(Any)", "The request or event that necessitated this assessment. This may be a diagnosis, a Care Plan, a Request Referral, or some other resource.", 0, java.lang.Integer.MAX_VALUE, trigger));
1742        childrenList.add(new Property("investigations", "", "One or more sets of investigations (signs, symptions, etc.). The actual grouping of investigations vary greatly depending on the type and context of the assessment. These investigations may include data generated during the assessment process, or data previously generated and recorded that is pertinent to the outcomes.", 0, java.lang.Integer.MAX_VALUE, investigations));
1743        childrenList.add(new Property("protocol", "uri", "Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.", 0, java.lang.Integer.MAX_VALUE, protocol));
1744        childrenList.add(new Property("summary", "string", "A text summary of the investigations and the diagnosis.", 0, java.lang.Integer.MAX_VALUE, summary));
1745        childrenList.add(new Property("finding", "", "Specific findings or diagnoses that was considered likely or relevant to ongoing treatment.", 0, java.lang.Integer.MAX_VALUE, finding));
1746        childrenList.add(new Property("resolved", "CodeableConcept", "Diagnoses/conditions resolved since the last assessment.", 0, java.lang.Integer.MAX_VALUE, resolved));
1747        childrenList.add(new Property("ruledOut", "", "Diagnosis considered not possible.", 0, java.lang.Integer.MAX_VALUE, ruledOut));
1748        childrenList.add(new Property("prognosis", "string", "Estimate of likely outcome.", 0, java.lang.Integer.MAX_VALUE, prognosis));
1749        childrenList.add(new Property("plan", "Reference(CarePlan|Appointment|CommunicationRequest|DeviceUseRequest|DiagnosticOrder|MedicationOrder|NutritionOrder|Order|ProcedureRequest|ProcessRequest|ReferralRequest|SupplyRequest|VisionPrescription)", "Plan of action after assessment.", 0, java.lang.Integer.MAX_VALUE, plan));
1750        childrenList.add(new Property("action", "Reference(ReferralRequest|ProcedureRequest|Procedure|MedicationOrder|DiagnosticOrder|NutritionOrder|SupplyRequest|Appointment)", "Actions taken during assessment.", 0, java.lang.Integer.MAX_VALUE, action));
1751      }
1752
1753      @Override
1754      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1755        switch (hash) {
1756        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
1757        case -373213113: /*assessor*/ return this.assessor == null ? new Base[0] : new Base[] {this.assessor}; // Reference
1758        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ClinicalImpressionStatus>
1759        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
1760        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
1761        case -1273775369: /*previous*/ return this.previous == null ? new Base[0] : new Base[] {this.previous}; // Reference
1762        case -309542241: /*problem*/ return this.problem == null ? new Base[0] : this.problem.toArray(new Base[this.problem.size()]); // Reference
1763        case -1059891784: /*trigger*/ return this.trigger == null ? new Base[0] : new Base[] {this.trigger}; // Type
1764        case -428294735: /*investigations*/ return this.investigations == null ? new Base[0] : this.investigations.toArray(new Base[this.investigations.size()]); // ClinicalImpressionInvestigationsComponent
1765        case -989163880: /*protocol*/ return this.protocol == null ? new Base[0] : new Base[] {this.protocol}; // UriType
1766        case -1857640538: /*summary*/ return this.summary == null ? new Base[0] : new Base[] {this.summary}; // StringType
1767        case -853173367: /*finding*/ return this.finding == null ? new Base[0] : this.finding.toArray(new Base[this.finding.size()]); // ClinicalImpressionFindingComponent
1768        case -341328904: /*resolved*/ return this.resolved == null ? new Base[0] : this.resolved.toArray(new Base[this.resolved.size()]); // CodeableConcept
1769        case 763913542: /*ruledOut*/ return this.ruledOut == null ? new Base[0] : this.ruledOut.toArray(new Base[this.ruledOut.size()]); // ClinicalImpressionRuledOutComponent
1770        case -972050334: /*prognosis*/ return this.prognosis == null ? new Base[0] : new Base[] {this.prognosis}; // StringType
1771        case 3443497: /*plan*/ return this.plan == null ? new Base[0] : this.plan.toArray(new Base[this.plan.size()]); // Reference
1772        case -1422950858: /*action*/ return this.action == null ? new Base[0] : this.action.toArray(new Base[this.action.size()]); // Reference
1773        default: return super.getProperty(hash, name, checkValid);
1774        }
1775
1776      }
1777
1778      @Override
1779      public void setProperty(int hash, String name, Base value) throws FHIRException {
1780        switch (hash) {
1781        case -791418107: // patient
1782          this.patient = castToReference(value); // Reference
1783          break;
1784        case -373213113: // assessor
1785          this.assessor = castToReference(value); // Reference
1786          break;
1787        case -892481550: // status
1788          this.status = new ClinicalImpressionStatusEnumFactory().fromType(value); // Enumeration<ClinicalImpressionStatus>
1789          break;
1790        case 3076014: // date
1791          this.date = castToDateTime(value); // DateTimeType
1792          break;
1793        case -1724546052: // description
1794          this.description = castToString(value); // StringType
1795          break;
1796        case -1273775369: // previous
1797          this.previous = castToReference(value); // Reference
1798          break;
1799        case -309542241: // problem
1800          this.getProblem().add(castToReference(value)); // Reference
1801          break;
1802        case -1059891784: // trigger
1803          this.trigger = (Type) value; // Type
1804          break;
1805        case -428294735: // investigations
1806          this.getInvestigations().add((ClinicalImpressionInvestigationsComponent) value); // ClinicalImpressionInvestigationsComponent
1807          break;
1808        case -989163880: // protocol
1809          this.protocol = castToUri(value); // UriType
1810          break;
1811        case -1857640538: // summary
1812          this.summary = castToString(value); // StringType
1813          break;
1814        case -853173367: // finding
1815          this.getFinding().add((ClinicalImpressionFindingComponent) value); // ClinicalImpressionFindingComponent
1816          break;
1817        case -341328904: // resolved
1818          this.getResolved().add(castToCodeableConcept(value)); // CodeableConcept
1819          break;
1820        case 763913542: // ruledOut
1821          this.getRuledOut().add((ClinicalImpressionRuledOutComponent) value); // ClinicalImpressionRuledOutComponent
1822          break;
1823        case -972050334: // prognosis
1824          this.prognosis = castToString(value); // StringType
1825          break;
1826        case 3443497: // plan
1827          this.getPlan().add(castToReference(value)); // Reference
1828          break;
1829        case -1422950858: // action
1830          this.getAction().add(castToReference(value)); // Reference
1831          break;
1832        default: super.setProperty(hash, name, value);
1833        }
1834
1835      }
1836
1837      @Override
1838      public void setProperty(String name, Base value) throws FHIRException {
1839        if (name.equals("patient"))
1840          this.patient = castToReference(value); // Reference
1841        else if (name.equals("assessor"))
1842          this.assessor = castToReference(value); // Reference
1843        else if (name.equals("status"))
1844          this.status = new ClinicalImpressionStatusEnumFactory().fromType(value); // Enumeration<ClinicalImpressionStatus>
1845        else if (name.equals("date"))
1846          this.date = castToDateTime(value); // DateTimeType
1847        else if (name.equals("description"))
1848          this.description = castToString(value); // StringType
1849        else if (name.equals("previous"))
1850          this.previous = castToReference(value); // Reference
1851        else if (name.equals("problem"))
1852          this.getProblem().add(castToReference(value));
1853        else if (name.equals("trigger[x]"))
1854          this.trigger = (Type) value; // Type
1855        else if (name.equals("investigations"))
1856          this.getInvestigations().add((ClinicalImpressionInvestigationsComponent) value);
1857        else if (name.equals("protocol"))
1858          this.protocol = castToUri(value); // UriType
1859        else if (name.equals("summary"))
1860          this.summary = castToString(value); // StringType
1861        else if (name.equals("finding"))
1862          this.getFinding().add((ClinicalImpressionFindingComponent) value);
1863        else if (name.equals("resolved"))
1864          this.getResolved().add(castToCodeableConcept(value));
1865        else if (name.equals("ruledOut"))
1866          this.getRuledOut().add((ClinicalImpressionRuledOutComponent) value);
1867        else if (name.equals("prognosis"))
1868          this.prognosis = castToString(value); // StringType
1869        else if (name.equals("plan"))
1870          this.getPlan().add(castToReference(value));
1871        else if (name.equals("action"))
1872          this.getAction().add(castToReference(value));
1873        else
1874          super.setProperty(name, value);
1875      }
1876
1877      @Override
1878      public Base makeProperty(int hash, String name) throws FHIRException {
1879        switch (hash) {
1880        case -791418107:  return getPatient(); // Reference
1881        case -373213113:  return getAssessor(); // Reference
1882        case -892481550: throw new FHIRException("Cannot make property status as it is not a complex type"); // Enumeration<ClinicalImpressionStatus>
1883        case 3076014: throw new FHIRException("Cannot make property date as it is not a complex type"); // DateTimeType
1884        case -1724546052: throw new FHIRException("Cannot make property description as it is not a complex type"); // StringType
1885        case -1273775369:  return getPrevious(); // Reference
1886        case -309542241:  return addProblem(); // Reference
1887        case 1363514312:  return getTrigger(); // Type
1888        case -428294735:  return addInvestigations(); // ClinicalImpressionInvestigationsComponent
1889        case -989163880: throw new FHIRException("Cannot make property protocol as it is not a complex type"); // UriType
1890        case -1857640538: throw new FHIRException("Cannot make property summary as it is not a complex type"); // StringType
1891        case -853173367:  return addFinding(); // ClinicalImpressionFindingComponent
1892        case -341328904:  return addResolved(); // CodeableConcept
1893        case 763913542:  return addRuledOut(); // ClinicalImpressionRuledOutComponent
1894        case -972050334: throw new FHIRException("Cannot make property prognosis as it is not a complex type"); // StringType
1895        case 3443497:  return addPlan(); // Reference
1896        case -1422950858:  return addAction(); // Reference
1897        default: return super.makeProperty(hash, name);
1898        }
1899
1900      }
1901
1902      @Override
1903      public Base addChild(String name) throws FHIRException {
1904        if (name.equals("patient")) {
1905          this.patient = new Reference();
1906          return this.patient;
1907        }
1908        else if (name.equals("assessor")) {
1909          this.assessor = new Reference();
1910          return this.assessor;
1911        }
1912        else if (name.equals("status")) {
1913          throw new FHIRException("Cannot call addChild on a primitive type ClinicalImpression.status");
1914        }
1915        else if (name.equals("date")) {
1916          throw new FHIRException("Cannot call addChild on a primitive type ClinicalImpression.date");
1917        }
1918        else if (name.equals("description")) {
1919          throw new FHIRException("Cannot call addChild on a primitive type ClinicalImpression.description");
1920        }
1921        else if (name.equals("previous")) {
1922          this.previous = new Reference();
1923          return this.previous;
1924        }
1925        else if (name.equals("problem")) {
1926          return addProblem();
1927        }
1928        else if (name.equals("triggerCodeableConcept")) {
1929          this.trigger = new CodeableConcept();
1930          return this.trigger;
1931        }
1932        else if (name.equals("triggerReference")) {
1933          this.trigger = new Reference();
1934          return this.trigger;
1935        }
1936        else if (name.equals("investigations")) {
1937          return addInvestigations();
1938        }
1939        else if (name.equals("protocol")) {
1940          throw new FHIRException("Cannot call addChild on a primitive type ClinicalImpression.protocol");
1941        }
1942        else if (name.equals("summary")) {
1943          throw new FHIRException("Cannot call addChild on a primitive type ClinicalImpression.summary");
1944        }
1945        else if (name.equals("finding")) {
1946          return addFinding();
1947        }
1948        else if (name.equals("resolved")) {
1949          return addResolved();
1950        }
1951        else if (name.equals("ruledOut")) {
1952          return addRuledOut();
1953        }
1954        else if (name.equals("prognosis")) {
1955          throw new FHIRException("Cannot call addChild on a primitive type ClinicalImpression.prognosis");
1956        }
1957        else if (name.equals("plan")) {
1958          return addPlan();
1959        }
1960        else if (name.equals("action")) {
1961          return addAction();
1962        }
1963        else
1964          return super.addChild(name);
1965      }
1966
1967  public String fhirType() {
1968    return "ClinicalImpression";
1969
1970  }
1971
1972      public ClinicalImpression copy() {
1973        ClinicalImpression dst = new ClinicalImpression();
1974        copyValues(dst);
1975        dst.patient = patient == null ? null : patient.copy();
1976        dst.assessor = assessor == null ? null : assessor.copy();
1977        dst.status = status == null ? null : status.copy();
1978        dst.date = date == null ? null : date.copy();
1979        dst.description = description == null ? null : description.copy();
1980        dst.previous = previous == null ? null : previous.copy();
1981        if (problem != null) {
1982          dst.problem = new ArrayList<Reference>();
1983          for (Reference i : problem)
1984            dst.problem.add(i.copy());
1985        };
1986        dst.trigger = trigger == null ? null : trigger.copy();
1987        if (investigations != null) {
1988          dst.investigations = new ArrayList<ClinicalImpressionInvestigationsComponent>();
1989          for (ClinicalImpressionInvestigationsComponent i : investigations)
1990            dst.investigations.add(i.copy());
1991        };
1992        dst.protocol = protocol == null ? null : protocol.copy();
1993        dst.summary = summary == null ? null : summary.copy();
1994        if (finding != null) {
1995          dst.finding = new ArrayList<ClinicalImpressionFindingComponent>();
1996          for (ClinicalImpressionFindingComponent i : finding)
1997            dst.finding.add(i.copy());
1998        };
1999        if (resolved != null) {
2000          dst.resolved = new ArrayList<CodeableConcept>();
2001          for (CodeableConcept i : resolved)
2002            dst.resolved.add(i.copy());
2003        };
2004        if (ruledOut != null) {
2005          dst.ruledOut = new ArrayList<ClinicalImpressionRuledOutComponent>();
2006          for (ClinicalImpressionRuledOutComponent i : ruledOut)
2007            dst.ruledOut.add(i.copy());
2008        };
2009        dst.prognosis = prognosis == null ? null : prognosis.copy();
2010        if (plan != null) {
2011          dst.plan = new ArrayList<Reference>();
2012          for (Reference i : plan)
2013            dst.plan.add(i.copy());
2014        };
2015        if (action != null) {
2016          dst.action = new ArrayList<Reference>();
2017          for (Reference i : action)
2018            dst.action.add(i.copy());
2019        };
2020        return dst;
2021      }
2022
2023      protected ClinicalImpression typedCopy() {
2024        return copy();
2025      }
2026
2027      @Override
2028      public boolean equalsDeep(Base other) {
2029        if (!super.equalsDeep(other))
2030          return false;
2031        if (!(other instanceof ClinicalImpression))
2032          return false;
2033        ClinicalImpression o = (ClinicalImpression) other;
2034        return compareDeep(patient, o.patient, true) && compareDeep(assessor, o.assessor, true) && compareDeep(status, o.status, true)
2035           && compareDeep(date, o.date, true) && compareDeep(description, o.description, true) && compareDeep(previous, o.previous, true)
2036           && compareDeep(problem, o.problem, true) && compareDeep(trigger, o.trigger, true) && compareDeep(investigations, o.investigations, true)
2037           && compareDeep(protocol, o.protocol, true) && compareDeep(summary, o.summary, true) && compareDeep(finding, o.finding, true)
2038           && compareDeep(resolved, o.resolved, true) && compareDeep(ruledOut, o.ruledOut, true) && compareDeep(prognosis, o.prognosis, true)
2039           && compareDeep(plan, o.plan, true) && compareDeep(action, o.action, true);
2040      }
2041
2042      @Override
2043      public boolean equalsShallow(Base other) {
2044        if (!super.equalsShallow(other))
2045          return false;
2046        if (!(other instanceof ClinicalImpression))
2047          return false;
2048        ClinicalImpression o = (ClinicalImpression) other;
2049        return compareValues(status, o.status, true) && compareValues(date, o.date, true) && compareValues(description, o.description, true)
2050           && compareValues(protocol, o.protocol, true) && compareValues(summary, o.summary, true) && compareValues(prognosis, o.prognosis, true)
2051          ;
2052      }
2053
2054      public boolean isEmpty() {
2055        return super.isEmpty() && (patient == null || patient.isEmpty()) && (assessor == null || assessor.isEmpty())
2056           && (status == null || status.isEmpty()) && (date == null || date.isEmpty()) && (description == null || description.isEmpty())
2057           && (previous == null || previous.isEmpty()) && (problem == null || problem.isEmpty()) && (trigger == null || trigger.isEmpty())
2058           && (investigations == null || investigations.isEmpty()) && (protocol == null || protocol.isEmpty())
2059           && (summary == null || summary.isEmpty()) && (finding == null || finding.isEmpty()) && (resolved == null || resolved.isEmpty())
2060           && (ruledOut == null || ruledOut.isEmpty()) && (prognosis == null || prognosis.isEmpty())
2061           && (plan == null || plan.isEmpty()) && (action == null || action.isEmpty());
2062      }
2063
2064  @Override
2065  public ResourceType getResourceType() {
2066    return ResourceType.ClinicalImpression;
2067   }
2068
2069 /**
2070   * Search parameter: <b>assessor</b>
2071   * <p>
2072   * Description: <b>The clinician performing the assessment</b><br>
2073   * Type: <b>reference</b><br>
2074   * Path: <b>ClinicalImpression.assessor</b><br>
2075   * </p>
2076   */
2077  @SearchParamDefinition(name="assessor", path="ClinicalImpression.assessor", description="The clinician performing the assessment", type="reference" )
2078  public static final String SP_ASSESSOR = "assessor";
2079 /**
2080   * <b>Fluent Client</b> search parameter constant for <b>assessor</b>
2081   * <p>
2082   * Description: <b>The clinician performing the assessment</b><br>
2083   * Type: <b>reference</b><br>
2084   * Path: <b>ClinicalImpression.assessor</b><br>
2085   * </p>
2086   */
2087  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ASSESSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ASSESSOR);
2088
2089/**
2090   * Constant for fluent queries to be used to add include statements. Specifies
2091   * the path value of "<b>ClinicalImpression:assessor</b>".
2092   */
2093  public static final ca.uhn.fhir.model.api.Include INCLUDE_ASSESSOR = new ca.uhn.fhir.model.api.Include("ClinicalImpression:assessor").toLocked();
2094
2095 /**
2096   * Search parameter: <b>trigger</b>
2097   * <p>
2098   * Description: <b>Request or event that necessitated this assessment</b><br>
2099   * Type: <b>reference</b><br>
2100   * Path: <b>ClinicalImpression.triggerReference</b><br>
2101   * </p>
2102   */
2103  @SearchParamDefinition(name="trigger", path="ClinicalImpression.trigger.as(Reference)", description="Request or event that necessitated this assessment", type="reference" )
2104  public static final String SP_TRIGGER = "trigger";
2105 /**
2106   * <b>Fluent Client</b> search parameter constant for <b>trigger</b>
2107   * <p>
2108   * Description: <b>Request or event that necessitated this assessment</b><br>
2109   * Type: <b>reference</b><br>
2110   * Path: <b>ClinicalImpression.triggerReference</b><br>
2111   * </p>
2112   */
2113  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam TRIGGER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_TRIGGER);
2114
2115/**
2116   * Constant for fluent queries to be used to add include statements. Specifies
2117   * the path value of "<b>ClinicalImpression:trigger</b>".
2118   */
2119  public static final ca.uhn.fhir.model.api.Include INCLUDE_TRIGGER = new ca.uhn.fhir.model.api.Include("ClinicalImpression:trigger").toLocked();
2120
2121 /**
2122   * Search parameter: <b>patient</b>
2123   * <p>
2124   * Description: <b>The patient being assessed</b><br>
2125   * Type: <b>reference</b><br>
2126   * Path: <b>ClinicalImpression.patient</b><br>
2127   * </p>
2128   */
2129  @SearchParamDefinition(name="patient", path="ClinicalImpression.patient", description="The patient being assessed", type="reference" )
2130  public static final String SP_PATIENT = "patient";
2131 /**
2132   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2133   * <p>
2134   * Description: <b>The patient being assessed</b><br>
2135   * Type: <b>reference</b><br>
2136   * Path: <b>ClinicalImpression.patient</b><br>
2137   * </p>
2138   */
2139  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2140
2141/**
2142   * Constant for fluent queries to be used to add include statements. Specifies
2143   * the path value of "<b>ClinicalImpression:patient</b>".
2144   */
2145  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("ClinicalImpression:patient").toLocked();
2146
2147 /**
2148   * Search parameter: <b>plan</b>
2149   * <p>
2150   * Description: <b>Plan of action after assessment</b><br>
2151   * Type: <b>reference</b><br>
2152   * Path: <b>ClinicalImpression.plan</b><br>
2153   * </p>
2154   */
2155  @SearchParamDefinition(name="plan", path="ClinicalImpression.plan", description="Plan of action after assessment", type="reference" )
2156  public static final String SP_PLAN = "plan";
2157 /**
2158   * <b>Fluent Client</b> search parameter constant for <b>plan</b>
2159   * <p>
2160   * Description: <b>Plan of action after assessment</b><br>
2161   * Type: <b>reference</b><br>
2162   * Path: <b>ClinicalImpression.plan</b><br>
2163   * </p>
2164   */
2165  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PLAN = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PLAN);
2166
2167/**
2168   * Constant for fluent queries to be used to add include statements. Specifies
2169   * the path value of "<b>ClinicalImpression:plan</b>".
2170   */
2171  public static final ca.uhn.fhir.model.api.Include INCLUDE_PLAN = new ca.uhn.fhir.model.api.Include("ClinicalImpression:plan").toLocked();
2172
2173 /**
2174   * Search parameter: <b>resolved</b>
2175   * <p>
2176   * Description: <b>Diagnoses/conditions resolved since previous assessment</b><br>
2177   * Type: <b>token</b><br>
2178   * Path: <b>ClinicalImpression.resolved</b><br>
2179   * </p>
2180   */
2181  @SearchParamDefinition(name="resolved", path="ClinicalImpression.resolved", description="Diagnoses/conditions resolved since previous assessment", type="token" )
2182  public static final String SP_RESOLVED = "resolved";
2183 /**
2184   * <b>Fluent Client</b> search parameter constant for <b>resolved</b>
2185   * <p>
2186   * Description: <b>Diagnoses/conditions resolved since previous assessment</b><br>
2187   * Type: <b>token</b><br>
2188   * Path: <b>ClinicalImpression.resolved</b><br>
2189   * </p>
2190   */
2191  public static final ca.uhn.fhir.rest.gclient.TokenClientParam RESOLVED = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_RESOLVED);
2192
2193 /**
2194   * Search parameter: <b>trigger-code</b>
2195   * <p>
2196   * Description: <b>Request or event that necessitated this assessment</b><br>
2197   * Type: <b>token</b><br>
2198   * Path: <b>ClinicalImpression.triggerCodeableConcept</b><br>
2199   * </p>
2200   */
2201  @SearchParamDefinition(name="trigger-code", path="ClinicalImpression.trigger.as(CodeableConcept)", description="Request or event that necessitated this assessment", type="token" )
2202  public static final String SP_TRIGGER_CODE = "trigger-code";
2203 /**
2204   * <b>Fluent Client</b> search parameter constant for <b>trigger-code</b>
2205   * <p>
2206   * Description: <b>Request or event that necessitated this assessment</b><br>
2207   * Type: <b>token</b><br>
2208   * Path: <b>ClinicalImpression.triggerCodeableConcept</b><br>
2209   * </p>
2210   */
2211  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TRIGGER_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TRIGGER_CODE);
2212
2213 /**
2214   * Search parameter: <b>previous</b>
2215   * <p>
2216   * Description: <b>Reference to last assessment</b><br>
2217   * Type: <b>reference</b><br>
2218   * Path: <b>ClinicalImpression.previous</b><br>
2219   * </p>
2220   */
2221  @SearchParamDefinition(name="previous", path="ClinicalImpression.previous", description="Reference to last assessment", type="reference" )
2222  public static final String SP_PREVIOUS = "previous";
2223 /**
2224   * <b>Fluent Client</b> search parameter constant for <b>previous</b>
2225   * <p>
2226   * Description: <b>Reference to last assessment</b><br>
2227   * Type: <b>reference</b><br>
2228   * Path: <b>ClinicalImpression.previous</b><br>
2229   * </p>
2230   */
2231  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PREVIOUS = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PREVIOUS);
2232
2233/**
2234   * Constant for fluent queries to be used to add include statements. Specifies
2235   * the path value of "<b>ClinicalImpression:previous</b>".
2236   */
2237  public static final ca.uhn.fhir.model.api.Include INCLUDE_PREVIOUS = new ca.uhn.fhir.model.api.Include("ClinicalImpression:previous").toLocked();
2238
2239 /**
2240   * Search parameter: <b>status</b>
2241   * <p>
2242   * Description: <b>in-progress | completed | entered-in-error</b><br>
2243   * Type: <b>token</b><br>
2244   * Path: <b>ClinicalImpression.status</b><br>
2245   * </p>
2246   */
2247  @SearchParamDefinition(name="status", path="ClinicalImpression.status", description="in-progress | completed | entered-in-error", type="token" )
2248  public static final String SP_STATUS = "status";
2249 /**
2250   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2251   * <p>
2252   * Description: <b>in-progress | completed | entered-in-error</b><br>
2253   * Type: <b>token</b><br>
2254   * Path: <b>ClinicalImpression.status</b><br>
2255   * </p>
2256   */
2257  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2258
2259 /**
2260   * Search parameter: <b>action</b>
2261   * <p>
2262   * Description: <b>Actions taken during assessment</b><br>
2263   * Type: <b>reference</b><br>
2264   * Path: <b>ClinicalImpression.action</b><br>
2265   * </p>
2266   */
2267  @SearchParamDefinition(name="action", path="ClinicalImpression.action", description="Actions taken during assessment", type="reference" )
2268  public static final String SP_ACTION = "action";
2269 /**
2270   * <b>Fluent Client</b> search parameter constant for <b>action</b>
2271   * <p>
2272   * Description: <b>Actions taken during assessment</b><br>
2273   * Type: <b>reference</b><br>
2274   * Path: <b>ClinicalImpression.action</b><br>
2275   * </p>
2276   */
2277  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ACTION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ACTION);
2278
2279/**
2280   * Constant for fluent queries to be used to add include statements. Specifies
2281   * the path value of "<b>ClinicalImpression:action</b>".
2282   */
2283  public static final ca.uhn.fhir.model.api.Include INCLUDE_ACTION = new ca.uhn.fhir.model.api.Include("ClinicalImpression:action").toLocked();
2284
2285 /**
2286   * Search parameter: <b>finding</b>
2287   * <p>
2288   * Description: <b>Specific text or code for finding</b><br>
2289   * Type: <b>token</b><br>
2290   * Path: <b>ClinicalImpression.finding.item</b><br>
2291   * </p>
2292   */
2293  @SearchParamDefinition(name="finding", path="ClinicalImpression.finding.item", description="Specific text or code for finding", type="token" )
2294  public static final String SP_FINDING = "finding";
2295 /**
2296   * <b>Fluent Client</b> search parameter constant for <b>finding</b>
2297   * <p>
2298   * Description: <b>Specific text or code for finding</b><br>
2299   * Type: <b>token</b><br>
2300   * Path: <b>ClinicalImpression.finding.item</b><br>
2301   * </p>
2302   */
2303  public static final ca.uhn.fhir.rest.gclient.TokenClientParam FINDING = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_FINDING);
2304
2305 /**
2306   * Search parameter: <b>investigation</b>
2307   * <p>
2308   * Description: <b>Record of a specific investigation</b><br>
2309   * Type: <b>reference</b><br>
2310   * Path: <b>ClinicalImpression.investigations.item</b><br>
2311   * </p>
2312   */
2313  @SearchParamDefinition(name="investigation", path="ClinicalImpression.investigations.item", description="Record of a specific investigation", type="reference" )
2314  public static final String SP_INVESTIGATION = "investigation";
2315 /**
2316   * <b>Fluent Client</b> search parameter constant for <b>investigation</b>
2317   * <p>
2318   * Description: <b>Record of a specific investigation</b><br>
2319   * Type: <b>reference</b><br>
2320   * Path: <b>ClinicalImpression.investigations.item</b><br>
2321   * </p>
2322   */
2323  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INVESTIGATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INVESTIGATION);
2324
2325/**
2326   * Constant for fluent queries to be used to add include statements. Specifies
2327   * the path value of "<b>ClinicalImpression:investigation</b>".
2328   */
2329  public static final ca.uhn.fhir.model.api.Include INCLUDE_INVESTIGATION = new ca.uhn.fhir.model.api.Include("ClinicalImpression:investigation").toLocked();
2330
2331 /**
2332   * Search parameter: <b>problem</b>
2333   * <p>
2334   * Description: <b>General assessment of patient state</b><br>
2335   * Type: <b>reference</b><br>
2336   * Path: <b>ClinicalImpression.problem</b><br>
2337   * </p>
2338   */
2339  @SearchParamDefinition(name="problem", path="ClinicalImpression.problem", description="General assessment of patient state", type="reference" )
2340  public static final String SP_PROBLEM = "problem";
2341 /**
2342   * <b>Fluent Client</b> search parameter constant for <b>problem</b>
2343   * <p>
2344   * Description: <b>General assessment of patient state</b><br>
2345   * Type: <b>reference</b><br>
2346   * Path: <b>ClinicalImpression.problem</b><br>
2347   * </p>
2348   */
2349  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PROBLEM = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PROBLEM);
2350
2351/**
2352   * Constant for fluent queries to be used to add include statements. Specifies
2353   * the path value of "<b>ClinicalImpression:problem</b>".
2354   */
2355  public static final ca.uhn.fhir.model.api.Include INCLUDE_PROBLEM = new ca.uhn.fhir.model.api.Include("ClinicalImpression:problem").toLocked();
2356
2357 /**
2358   * Search parameter: <b>date</b>
2359   * <p>
2360   * Description: <b>When the assessment occurred</b><br>
2361   * Type: <b>date</b><br>
2362   * Path: <b>ClinicalImpression.date</b><br>
2363   * </p>
2364   */
2365  @SearchParamDefinition(name="date", path="ClinicalImpression.date", description="When the assessment occurred", type="date" )
2366  public static final String SP_DATE = "date";
2367 /**
2368   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2369   * <p>
2370   * Description: <b>When the assessment occurred</b><br>
2371   * Type: <b>date</b><br>
2372   * Path: <b>ClinicalImpression.date</b><br>
2373   * </p>
2374   */
2375  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2376
2377 /**
2378   * Search parameter: <b>ruledout</b>
2379   * <p>
2380   * Description: <b>Specific text of code for diagnosis</b><br>
2381   * Type: <b>token</b><br>
2382   * Path: <b>ClinicalImpression.ruledOut.item</b><br>
2383   * </p>
2384   */
2385  @SearchParamDefinition(name="ruledout", path="ClinicalImpression.ruledOut.item", description="Specific text of code for diagnosis", type="token" )
2386  public static final String SP_RULEDOUT = "ruledout";
2387 /**
2388   * <b>Fluent Client</b> search parameter constant for <b>ruledout</b>
2389   * <p>
2390   * Description: <b>Specific text of code for diagnosis</b><br>
2391   * Type: <b>token</b><br>
2392   * Path: <b>ClinicalImpression.ruledOut.item</b><br>
2393   * </p>
2394   */
2395  public static final ca.uhn.fhir.rest.gclient.TokenClientParam RULEDOUT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_RULEDOUT);
2396
2397
2398}
2399