001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
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/**
048 * A record of a clinical assessment performed to determine what problem(s) may
049 * affect the patient and before planning the treatments or management
050 * strategies that are best to manage a patient's condition. Assessments are
051 * often 1:1 with a clinical consultation / encounter, but this varies greatly
052 * depending on the clinical workflow. This resource is called
053 * "ClinicalImpression" rather than "ClinicalAssessment" to avoid confusion with
054 * the recording of assessment tools such as Apgar score.
055 */
056@ResourceDef(name = "ClinicalImpression", profile = "http://hl7.org/fhir/StructureDefinition/ClinicalImpression")
057public class ClinicalImpression extends DomainResource {
058
059  public enum ClinicalImpressionStatus {
060    /**
061     * null
062     */
063    INPROGRESS,
064    /**
065     * null
066     */
067    COMPLETED,
068    /**
069     * null
070     */
071    ENTEREDINERROR,
072    /**
073     * added to help the parsers with the generic types
074     */
075    NULL;
076
077    public static ClinicalImpressionStatus fromCode(String codeString) throws FHIRException {
078      if (codeString == null || "".equals(codeString))
079        return null;
080      if ("in-progress".equals(codeString))
081        return INPROGRESS;
082      if ("completed".equals(codeString))
083        return COMPLETED;
084      if ("entered-in-error".equals(codeString))
085        return ENTEREDINERROR;
086      if (Configuration.isAcceptInvalidEnums())
087        return null;
088      else
089        throw new FHIRException("Unknown ClinicalImpressionStatus code '" + codeString + "'");
090    }
091
092    public String toCode() {
093      switch (this) {
094      case INPROGRESS:
095        return "in-progress";
096      case COMPLETED:
097        return "completed";
098      case ENTEREDINERROR:
099        return "entered-in-error";
100      case NULL:
101        return null;
102      default:
103        return "?";
104      }
105    }
106
107    public String getSystem() {
108      switch (this) {
109      case INPROGRESS:
110        return "http://hl7.org/fhir/event-status";
111      case COMPLETED:
112        return "http://hl7.org/fhir/event-status";
113      case ENTEREDINERROR:
114        return "http://hl7.org/fhir/event-status";
115      case NULL:
116        return null;
117      default:
118        return "?";
119      }
120    }
121
122    public String getDefinition() {
123      switch (this) {
124      case INPROGRESS:
125        return "";
126      case COMPLETED:
127        return "";
128      case ENTEREDINERROR:
129        return "";
130      case NULL:
131        return null;
132      default:
133        return "?";
134      }
135    }
136
137    public String getDisplay() {
138      switch (this) {
139      case INPROGRESS:
140        return "in-progress";
141      case COMPLETED:
142        return "completed";
143      case ENTEREDINERROR:
144        return "entered-in-error";
145      case NULL:
146        return null;
147      default:
148        return "?";
149      }
150    }
151  }
152
153  public static class ClinicalImpressionStatusEnumFactory implements EnumFactory<ClinicalImpressionStatus> {
154    public ClinicalImpressionStatus fromCode(String codeString) throws IllegalArgumentException {
155      if (codeString == null || "".equals(codeString))
156        if (codeString == null || "".equals(codeString))
157          return null;
158      if ("in-progress".equals(codeString))
159        return ClinicalImpressionStatus.INPROGRESS;
160      if ("completed".equals(codeString))
161        return ClinicalImpressionStatus.COMPLETED;
162      if ("entered-in-error".equals(codeString))
163        return ClinicalImpressionStatus.ENTEREDINERROR;
164      throw new IllegalArgumentException("Unknown ClinicalImpressionStatus code '" + codeString + "'");
165    }
166
167    public Enumeration<ClinicalImpressionStatus> fromType(PrimitiveType<?> code) throws FHIRException {
168      if (code == null)
169        return null;
170      if (code.isEmpty())
171        return new Enumeration<ClinicalImpressionStatus>(this, ClinicalImpressionStatus.NULL, code);
172      String codeString = code.asStringValue();
173      if (codeString == null || "".equals(codeString))
174        return new Enumeration<ClinicalImpressionStatus>(this, ClinicalImpressionStatus.NULL, code);
175      if ("in-progress".equals(codeString))
176        return new Enumeration<ClinicalImpressionStatus>(this, ClinicalImpressionStatus.INPROGRESS, code);
177      if ("completed".equals(codeString))
178        return new Enumeration<ClinicalImpressionStatus>(this, ClinicalImpressionStatus.COMPLETED, code);
179      if ("entered-in-error".equals(codeString))
180        return new Enumeration<ClinicalImpressionStatus>(this, ClinicalImpressionStatus.ENTEREDINERROR, code);
181      throw new FHIRException("Unknown ClinicalImpressionStatus code '" + codeString + "'");
182    }
183
184    public String toCode(ClinicalImpressionStatus code) {
185      if (code == ClinicalImpressionStatus.INPROGRESS)
186        return "in-progress";
187      if (code == ClinicalImpressionStatus.COMPLETED)
188        return "completed";
189      if (code == ClinicalImpressionStatus.ENTEREDINERROR)
190        return "entered-in-error";
191      return "?";
192    }
193
194    public String toSystem(ClinicalImpressionStatus code) {
195      return code.getSystem();
196    }
197  }
198
199  @Block()
200  public static class ClinicalImpressionInvestigationComponent extends BackboneElement implements IBaseBackboneElement {
201    /**
202     * A name/code for the group ("set") of investigations. Typically, this will be
203     * something like "signs", "symptoms", "clinical", "diagnostic", but the list is
204     * not constrained, and others such groups such as
205     * (exposure|family|travel|nutritional) history may be used.
206     */
207    @Child(name = "code", type = {
208        CodeableConcept.class }, order = 1, min = 1, max = 1, modifier = false, summary = false)
209    @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|nutritional) history may be used.")
210    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/investigation-sets")
211    protected CodeableConcept code;
212
213    /**
214     * A record of a specific investigation that was undertaken.
215     */
216    @Child(name = "item", type = { Observation.class, QuestionnaireResponse.class, FamilyMemberHistory.class,
217        DiagnosticReport.class, RiskAssessment.class, ImagingStudy.class,
218        Media.class }, order = 2, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
219    @Description(shortDefinition = "Record of a specific investigation", formalDefinition = "A record of a specific investigation that was undertaken.")
220    protected List<Reference> item;
221    /**
222     * The actual objects that are the target of the reference (A record of a
223     * specific investigation that was undertaken.)
224     */
225    protected List<Resource> itemTarget;
226
227    private static final long serialVersionUID = -301363326L;
228
229    /**
230     * Constructor
231     */
232    public ClinicalImpressionInvestigationComponent() {
233      super();
234    }
235
236    /**
237     * Constructor
238     */
239    public ClinicalImpressionInvestigationComponent(CodeableConcept code) {
240      super();
241      this.code = code;
242    }
243
244    /**
245     * @return {@link #code} (A name/code for the group ("set") of investigations.
246     *         Typically, this will be something like "signs", "symptoms",
247     *         "clinical", "diagnostic", but the list is not constrained, and others
248     *         such groups such as (exposure|family|travel|nutritional) history may
249     *         be used.)
250     */
251    public CodeableConcept getCode() {
252      if (this.code == null)
253        if (Configuration.errorOnAutoCreate())
254          throw new Error("Attempt to auto-create ClinicalImpressionInvestigationComponent.code");
255        else if (Configuration.doAutoCreate())
256          this.code = new CodeableConcept(); // cc
257      return this.code;
258    }
259
260    public boolean hasCode() {
261      return this.code != null && !this.code.isEmpty();
262    }
263
264    /**
265     * @param value {@link #code} (A name/code for the group ("set") of
266     *              investigations. Typically, this will be something like "signs",
267     *              "symptoms", "clinical", "diagnostic", but the list is not
268     *              constrained, and others such groups such as
269     *              (exposure|family|travel|nutritional) history may be used.)
270     */
271    public ClinicalImpressionInvestigationComponent setCode(CodeableConcept value) {
272      this.code = value;
273      return this;
274    }
275
276    /**
277     * @return {@link #item} (A record of a specific investigation that was
278     *         undertaken.)
279     */
280    public List<Reference> getItem() {
281      if (this.item == null)
282        this.item = new ArrayList<Reference>();
283      return this.item;
284    }
285
286    /**
287     * @return Returns a reference to <code>this</code> for easy method chaining
288     */
289    public ClinicalImpressionInvestigationComponent setItem(List<Reference> theItem) {
290      this.item = theItem;
291      return this;
292    }
293
294    public boolean hasItem() {
295      if (this.item == null)
296        return false;
297      for (Reference item : this.item)
298        if (!item.isEmpty())
299          return true;
300      return false;
301    }
302
303    public Reference addItem() { // 3
304      Reference t = new Reference();
305      if (this.item == null)
306        this.item = new ArrayList<Reference>();
307      this.item.add(t);
308      return t;
309    }
310
311    public ClinicalImpressionInvestigationComponent addItem(Reference t) { // 3
312      if (t == null)
313        return this;
314      if (this.item == null)
315        this.item = new ArrayList<Reference>();
316      this.item.add(t);
317      return this;
318    }
319
320    /**
321     * @return The first repetition of repeating field {@link #item}, creating it if
322     *         it does not already exist
323     */
324    public Reference getItemFirstRep() {
325      if (getItem().isEmpty()) {
326        addItem();
327      }
328      return getItem().get(0);
329    }
330
331    /**
332     * @deprecated Use Reference#setResource(IBaseResource) instead
333     */
334    @Deprecated
335    public List<Resource> getItemTarget() {
336      if (this.itemTarget == null)
337        this.itemTarget = new ArrayList<Resource>();
338      return this.itemTarget;
339    }
340
341    protected void listChildren(List<Property> children) {
342      super.listChildren(children);
343      children.add(new Property("code", "CodeableConcept",
344          "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|nutritional) history may be used.",
345          0, 1, code));
346      children.add(new Property("item",
347          "Reference(Observation|QuestionnaireResponse|FamilyMemberHistory|DiagnosticReport|RiskAssessment|ImagingStudy|Media)",
348          "A record of a specific investigation that was undertaken.", 0, java.lang.Integer.MAX_VALUE, item));
349    }
350
351    @Override
352    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
353      switch (_hash) {
354      case 3059181:
355        /* code */ return new Property("code", "CodeableConcept",
356            "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|nutritional) history may be used.",
357            0, 1, code);
358      case 3242771:
359        /* item */ return new Property("item",
360            "Reference(Observation|QuestionnaireResponse|FamilyMemberHistory|DiagnosticReport|RiskAssessment|ImagingStudy|Media)",
361            "A record of a specific investigation that was undertaken.", 0, java.lang.Integer.MAX_VALUE, item);
362      default:
363        return super.getNamedProperty(_hash, _name, _checkValid);
364      }
365
366    }
367
368    @Override
369    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
370      switch (hash) {
371      case 3059181:
372        /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeableConcept
373      case 3242771:
374        /* item */ return this.item == null ? new Base[0] : this.item.toArray(new Base[this.item.size()]); // Reference
375      default:
376        return super.getProperty(hash, name, checkValid);
377      }
378
379    }
380
381    @Override
382    public Base setProperty(int hash, String name, Base value) throws FHIRException {
383      switch (hash) {
384      case 3059181: // code
385        this.code = castToCodeableConcept(value); // CodeableConcept
386        return value;
387      case 3242771: // item
388        this.getItem().add(castToReference(value)); // Reference
389        return value;
390      default:
391        return super.setProperty(hash, name, value);
392      }
393
394    }
395
396    @Override
397    public Base setProperty(String name, Base value) throws FHIRException {
398      if (name.equals("code")) {
399        this.code = castToCodeableConcept(value); // CodeableConcept
400      } else if (name.equals("item")) {
401        this.getItem().add(castToReference(value));
402      } else
403        return super.setProperty(name, value);
404      return value;
405    }
406
407  @Override
408  public void removeChild(String name, Base value) throws FHIRException {
409      if (name.equals("code")) {
410        this.code = null;
411      } else if (name.equals("item")) {
412        this.getItem().remove(castToReference(value));
413      } else
414        super.removeChild(name, value);
415      
416    }
417
418    @Override
419    public Base makeProperty(int hash, String name) throws FHIRException {
420      switch (hash) {
421      case 3059181:
422        return getCode();
423      case 3242771:
424        return addItem();
425      default:
426        return super.makeProperty(hash, name);
427      }
428
429    }
430
431    @Override
432    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
433      switch (hash) {
434      case 3059181:
435        /* code */ return new String[] { "CodeableConcept" };
436      case 3242771:
437        /* item */ return new String[] { "Reference" };
438      default:
439        return super.getTypesForProperty(hash, name);
440      }
441
442    }
443
444    @Override
445    public Base addChild(String name) throws FHIRException {
446      if (name.equals("code")) {
447        this.code = new CodeableConcept();
448        return this.code;
449      } else if (name.equals("item")) {
450        return addItem();
451      } else
452        return super.addChild(name);
453    }
454
455    public ClinicalImpressionInvestigationComponent copy() {
456      ClinicalImpressionInvestigationComponent dst = new ClinicalImpressionInvestigationComponent();
457      copyValues(dst);
458      return dst;
459    }
460
461    public void copyValues(ClinicalImpressionInvestigationComponent dst) {
462      super.copyValues(dst);
463      dst.code = code == null ? null : code.copy();
464      if (item != null) {
465        dst.item = new ArrayList<Reference>();
466        for (Reference i : item)
467          dst.item.add(i.copy());
468      }
469      ;
470    }
471
472    @Override
473    public boolean equalsDeep(Base other_) {
474      if (!super.equalsDeep(other_))
475        return false;
476      if (!(other_ instanceof ClinicalImpressionInvestigationComponent))
477        return false;
478      ClinicalImpressionInvestigationComponent o = (ClinicalImpressionInvestigationComponent) other_;
479      return compareDeep(code, o.code, true) && compareDeep(item, o.item, true);
480    }
481
482    @Override
483    public boolean equalsShallow(Base other_) {
484      if (!super.equalsShallow(other_))
485        return false;
486      if (!(other_ instanceof ClinicalImpressionInvestigationComponent))
487        return false;
488      ClinicalImpressionInvestigationComponent o = (ClinicalImpressionInvestigationComponent) other_;
489      return true;
490    }
491
492    public boolean isEmpty() {
493      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, item);
494    }
495
496    public String fhirType() {
497      return "ClinicalImpression.investigation";
498
499    }
500
501  }
502
503  @Block()
504  public static class ClinicalImpressionFindingComponent extends BackboneElement implements IBaseBackboneElement {
505    /**
506     * Specific text or code for finding or diagnosis, which may include ruled-out
507     * or resolved conditions.
508     */
509    @Child(name = "itemCodeableConcept", type = {
510        CodeableConcept.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
511    @Description(shortDefinition = "What was found", formalDefinition = "Specific text or code for finding or diagnosis, which may include ruled-out or resolved conditions.")
512    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/condition-code")
513    protected CodeableConcept itemCodeableConcept;
514
515    /**
516     * Specific reference for finding or diagnosis, which may include ruled-out or
517     * resolved conditions.
518     */
519    @Child(name = "itemReference", type = { Condition.class, Observation.class,
520        Media.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
521    @Description(shortDefinition = "What was found", formalDefinition = "Specific reference for finding or diagnosis, which may include ruled-out or resolved conditions.")
522    protected Reference itemReference;
523
524    /**
525     * The actual object that is the target of the reference (Specific reference for
526     * finding or diagnosis, which may include ruled-out or resolved conditions.)
527     */
528    protected Resource itemReferenceTarget;
529
530    /**
531     * Which investigations support finding or diagnosis.
532     */
533    @Child(name = "basis", type = { StringType.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
534    @Description(shortDefinition = "Which investigations support finding", formalDefinition = "Which investigations support finding or diagnosis.")
535    protected StringType basis;
536
537    private static final long serialVersionUID = -1578446448L;
538
539    /**
540     * Constructor
541     */
542    public ClinicalImpressionFindingComponent() {
543      super();
544    }
545
546    /**
547     * @return {@link #itemCodeableConcept} (Specific text or code for finding or
548     *         diagnosis, which may include ruled-out or resolved conditions.)
549     */
550    public CodeableConcept getItemCodeableConcept() {
551      if (this.itemCodeableConcept == null)
552        if (Configuration.errorOnAutoCreate())
553          throw new Error("Attempt to auto-create ClinicalImpressionFindingComponent.itemCodeableConcept");
554        else if (Configuration.doAutoCreate())
555          this.itemCodeableConcept = new CodeableConcept(); // cc
556      return this.itemCodeableConcept;
557    }
558
559    public boolean hasItemCodeableConcept() {
560      return this.itemCodeableConcept != null && !this.itemCodeableConcept.isEmpty();
561    }
562
563    /**
564     * @param value {@link #itemCodeableConcept} (Specific text or code for finding
565     *              or diagnosis, which may include ruled-out or resolved
566     *              conditions.)
567     */
568    public ClinicalImpressionFindingComponent setItemCodeableConcept(CodeableConcept value) {
569      this.itemCodeableConcept = value;
570      return this;
571    }
572
573    /**
574     * @return {@link #itemReference} (Specific reference for finding or diagnosis,
575     *         which may include ruled-out or resolved conditions.)
576     */
577    public Reference getItemReference() {
578      if (this.itemReference == null)
579        if (Configuration.errorOnAutoCreate())
580          throw new Error("Attempt to auto-create ClinicalImpressionFindingComponent.itemReference");
581        else if (Configuration.doAutoCreate())
582          this.itemReference = new Reference(); // cc
583      return this.itemReference;
584    }
585
586    public boolean hasItemReference() {
587      return this.itemReference != null && !this.itemReference.isEmpty();
588    }
589
590    /**
591     * @param value {@link #itemReference} (Specific reference for finding or
592     *              diagnosis, which may include ruled-out or resolved conditions.)
593     */
594    public ClinicalImpressionFindingComponent setItemReference(Reference value) {
595      this.itemReference = value;
596      return this;
597    }
598
599    /**
600     * @return {@link #itemReference} The actual object that is the target of the
601     *         reference. The reference library doesn't populate this, but you can
602     *         use it to hold the resource if you resolve it. (Specific reference
603     *         for finding or diagnosis, which may include ruled-out or resolved
604     *         conditions.)
605     */
606    public Resource getItemReferenceTarget() {
607      return this.itemReferenceTarget;
608    }
609
610    /**
611     * @param value {@link #itemReference} The actual object that is the target of
612     *              the reference. The reference library doesn't use these, but you
613     *              can use it to hold the resource if you resolve it. (Specific
614     *              reference for finding or diagnosis, which may include ruled-out
615     *              or resolved conditions.)
616     */
617    public ClinicalImpressionFindingComponent setItemReferenceTarget(Resource value) {
618      this.itemReferenceTarget = value;
619      return this;
620    }
621
622    /**
623     * @return {@link #basis} (Which investigations support finding or diagnosis.).
624     *         This is the underlying object with id, value and extensions. The
625     *         accessor "getBasis" gives direct access to the value
626     */
627    public StringType getBasisElement() {
628      if (this.basis == null)
629        if (Configuration.errorOnAutoCreate())
630          throw new Error("Attempt to auto-create ClinicalImpressionFindingComponent.basis");
631        else if (Configuration.doAutoCreate())
632          this.basis = new StringType(); // bb
633      return this.basis;
634    }
635
636    public boolean hasBasisElement() {
637      return this.basis != null && !this.basis.isEmpty();
638    }
639
640    public boolean hasBasis() {
641      return this.basis != null && !this.basis.isEmpty();
642    }
643
644    /**
645     * @param value {@link #basis} (Which investigations support finding or
646     *              diagnosis.). This is the underlying object with id, value and
647     *              extensions. The accessor "getBasis" gives direct access to the
648     *              value
649     */
650    public ClinicalImpressionFindingComponent setBasisElement(StringType value) {
651      this.basis = value;
652      return this;
653    }
654
655    /**
656     * @return Which investigations support finding or diagnosis.
657     */
658    public String getBasis() {
659      return this.basis == null ? null : this.basis.getValue();
660    }
661
662    /**
663     * @param value Which investigations support finding or diagnosis.
664     */
665    public ClinicalImpressionFindingComponent setBasis(String value) {
666      if (Utilities.noString(value))
667        this.basis = null;
668      else {
669        if (this.basis == null)
670          this.basis = new StringType();
671        this.basis.setValue(value);
672      }
673      return this;
674    }
675
676    protected void listChildren(List<Property> children) {
677      super.listChildren(children);
678      children.add(new Property("itemCodeableConcept", "CodeableConcept",
679          "Specific text or code for finding or diagnosis, which may include ruled-out or resolved conditions.", 0, 1,
680          itemCodeableConcept));
681      children.add(new Property("itemReference", "Reference(Condition|Observation|Media)",
682          "Specific reference for finding or diagnosis, which may include ruled-out or resolved conditions.", 0, 1,
683          itemReference));
684      children.add(new Property("basis", "string", "Which investigations support finding or diagnosis.", 0, 1, basis));
685    }
686
687    @Override
688    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
689      switch (_hash) {
690      case 106644494:
691        /* itemCodeableConcept */ return new Property("itemCodeableConcept", "CodeableConcept",
692            "Specific text or code for finding or diagnosis, which may include ruled-out or resolved conditions.", 0, 1,
693            itemCodeableConcept);
694      case 1376364920:
695        /* itemReference */ return new Property("itemReference", "Reference(Condition|Observation|Media)",
696            "Specific reference for finding or diagnosis, which may include ruled-out or resolved conditions.", 0, 1,
697            itemReference);
698      case 93508670:
699        /* basis */ return new Property("basis", "string", "Which investigations support finding or diagnosis.", 0, 1,
700            basis);
701      default:
702        return super.getNamedProperty(_hash, _name, _checkValid);
703      }
704
705    }
706
707    @Override
708    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
709      switch (hash) {
710      case 106644494:
711        /* itemCodeableConcept */ return this.itemCodeableConcept == null ? new Base[0]
712            : new Base[] { this.itemCodeableConcept }; // CodeableConcept
713      case 1376364920:
714        /* itemReference */ return this.itemReference == null ? new Base[0] : new Base[] { this.itemReference }; // Reference
715      case 93508670:
716        /* basis */ return this.basis == null ? new Base[0] : new Base[] { this.basis }; // StringType
717      default:
718        return super.getProperty(hash, name, checkValid);
719      }
720
721    }
722
723    @Override
724    public Base setProperty(int hash, String name, Base value) throws FHIRException {
725      switch (hash) {
726      case 106644494: // itemCodeableConcept
727        this.itemCodeableConcept = castToCodeableConcept(value); // CodeableConcept
728        return value;
729      case 1376364920: // itemReference
730        this.itemReference = castToReference(value); // Reference
731        return value;
732      case 93508670: // basis
733        this.basis = castToString(value); // StringType
734        return value;
735      default:
736        return super.setProperty(hash, name, value);
737      }
738
739    }
740
741    @Override
742    public Base setProperty(String name, Base value) throws FHIRException {
743      if (name.equals("itemCodeableConcept")) {
744        this.itemCodeableConcept = castToCodeableConcept(value); // CodeableConcept
745      } else if (name.equals("itemReference")) {
746        this.itemReference = castToReference(value); // Reference
747      } else if (name.equals("basis")) {
748        this.basis = castToString(value); // StringType
749      } else
750        return super.setProperty(name, value);
751      return value;
752    }
753
754  @Override
755  public void removeChild(String name, Base value) throws FHIRException {
756      if (name.equals("itemCodeableConcept")) {
757        this.itemCodeableConcept = null;
758      } else if (name.equals("itemReference")) {
759        this.itemReference = null;
760      } else if (name.equals("basis")) {
761        this.basis = null;
762      } else
763        super.removeChild(name, value);
764      
765    }
766
767    @Override
768    public Base makeProperty(int hash, String name) throws FHIRException {
769      switch (hash) {
770      case 106644494:
771        return getItemCodeableConcept();
772      case 1376364920:
773        return getItemReference();
774      case 93508670:
775        return getBasisElement();
776      default:
777        return super.makeProperty(hash, name);
778      }
779
780    }
781
782    @Override
783    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
784      switch (hash) {
785      case 106644494:
786        /* itemCodeableConcept */ return new String[] { "CodeableConcept" };
787      case 1376364920:
788        /* itemReference */ return new String[] { "Reference" };
789      case 93508670:
790        /* basis */ return new String[] { "string" };
791      default:
792        return super.getTypesForProperty(hash, name);
793      }
794
795    }
796
797    @Override
798    public Base addChild(String name) throws FHIRException {
799      if (name.equals("itemCodeableConcept")) {
800        this.itemCodeableConcept = new CodeableConcept();
801        return this.itemCodeableConcept;
802      } else if (name.equals("itemReference")) {
803        this.itemReference = new Reference();
804        return this.itemReference;
805      } else if (name.equals("basis")) {
806        throw new FHIRException("Cannot call addChild on a singleton property ClinicalImpression.basis");
807      } else
808        return super.addChild(name);
809    }
810
811    public ClinicalImpressionFindingComponent copy() {
812      ClinicalImpressionFindingComponent dst = new ClinicalImpressionFindingComponent();
813      copyValues(dst);
814      return dst;
815    }
816
817    public void copyValues(ClinicalImpressionFindingComponent dst) {
818      super.copyValues(dst);
819      dst.itemCodeableConcept = itemCodeableConcept == null ? null : itemCodeableConcept.copy();
820      dst.itemReference = itemReference == null ? null : itemReference.copy();
821      dst.basis = basis == null ? null : basis.copy();
822    }
823
824    @Override
825    public boolean equalsDeep(Base other_) {
826      if (!super.equalsDeep(other_))
827        return false;
828      if (!(other_ instanceof ClinicalImpressionFindingComponent))
829        return false;
830      ClinicalImpressionFindingComponent o = (ClinicalImpressionFindingComponent) other_;
831      return compareDeep(itemCodeableConcept, o.itemCodeableConcept, true)
832          && compareDeep(itemReference, o.itemReference, true) && compareDeep(basis, o.basis, true);
833    }
834
835    @Override
836    public boolean equalsShallow(Base other_) {
837      if (!super.equalsShallow(other_))
838        return false;
839      if (!(other_ instanceof ClinicalImpressionFindingComponent))
840        return false;
841      ClinicalImpressionFindingComponent o = (ClinicalImpressionFindingComponent) other_;
842      return compareValues(basis, o.basis, true);
843    }
844
845    public boolean isEmpty() {
846      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(itemCodeableConcept, itemReference, basis);
847    }
848
849    public String fhirType() {
850      return "ClinicalImpression.finding";
851
852    }
853
854  }
855
856  /**
857   * Business identifiers assigned to this clinical impression by the performer or
858   * other systems which remain constant as the resource is updated and propagates
859   * from server to server.
860   */
861  @Child(name = "identifier", type = {
862      Identifier.class }, order = 0, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
863  @Description(shortDefinition = "Business identifier", formalDefinition = "Business identifiers assigned to this clinical impression by the performer or other systems which remain constant as the resource is updated and propagates from server to server.")
864  protected List<Identifier> identifier;
865
866  /**
867   * Identifies the workflow status of the assessment.
868   */
869  @Child(name = "status", type = { CodeType.class }, order = 1, min = 1, max = 1, modifier = true, summary = true)
870  @Description(shortDefinition = "in-progress | completed | entered-in-error", formalDefinition = "Identifies the workflow status of the assessment.")
871  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/clinicalimpression-status")
872  protected Enumeration<ClinicalImpressionStatus> status;
873
874  /**
875   * Captures the reason for the current state of the ClinicalImpression.
876   */
877  @Child(name = "statusReason", type = {
878      CodeableConcept.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
879  @Description(shortDefinition = "Reason for current status", formalDefinition = "Captures the reason for the current state of the ClinicalImpression.")
880  protected CodeableConcept statusReason;
881
882  /**
883   * Categorizes the type of clinical assessment performed.
884   */
885  @Child(name = "code", type = { CodeableConcept.class }, order = 3, min = 0, max = 1, modifier = false, summary = true)
886  @Description(shortDefinition = "Kind of assessment performed", formalDefinition = "Categorizes the type of clinical assessment performed.")
887  protected CodeableConcept code;
888
889  /**
890   * A summary of the context and/or cause of the assessment - why / where it was
891   * performed, and what patient events/status prompted it.
892   */
893  @Child(name = "description", type = {
894      StringType.class }, order = 4, min = 0, max = 1, modifier = false, summary = true)
895  @Description(shortDefinition = "Why/how the assessment was performed", formalDefinition = "A summary of the context and/or cause of the assessment - why / where it was performed, and what patient events/status prompted it.")
896  protected StringType description;
897
898  /**
899   * The patient or group of individuals assessed as part of this record.
900   */
901  @Child(name = "subject", type = { Patient.class,
902      Group.class }, order = 5, min = 1, max = 1, modifier = false, summary = true)
903  @Description(shortDefinition = "Patient or group assessed", formalDefinition = "The patient or group of individuals assessed as part of this record.")
904  protected Reference subject;
905
906  /**
907   * The actual object that is the target of the reference (The patient or group
908   * of individuals assessed as part of this record.)
909   */
910  protected Resource subjectTarget;
911
912  /**
913   * The Encounter during which this ClinicalImpression was created or to which
914   * the creation of this record is tightly associated.
915   */
916  @Child(name = "encounter", type = { Encounter.class }, order = 6, min = 0, max = 1, modifier = false, summary = true)
917  @Description(shortDefinition = "Encounter created as part of", formalDefinition = "The Encounter during which this ClinicalImpression was created or to which the creation of this record is tightly associated.")
918  protected Reference encounter;
919
920  /**
921   * The actual object that is the target of the reference (The Encounter during
922   * which this ClinicalImpression was created or to which the creation of this
923   * record is tightly associated.)
924   */
925  protected Encounter encounterTarget;
926
927  /**
928   * The point in time or period over which the subject was assessed.
929   */
930  @Child(name = "effective", type = { DateTimeType.class,
931      Period.class }, order = 7, min = 0, max = 1, modifier = false, summary = true)
932  @Description(shortDefinition = "Time of assessment", formalDefinition = "The point in time or period over which the subject was assessed.")
933  protected Type effective;
934
935  /**
936   * Indicates when the documentation of the assessment was complete.
937   */
938  @Child(name = "date", type = { DateTimeType.class }, order = 8, min = 0, max = 1, modifier = false, summary = true)
939  @Description(shortDefinition = "When the assessment was documented", formalDefinition = "Indicates when the documentation of the assessment was complete.")
940  protected DateTimeType date;
941
942  /**
943   * The clinician performing the assessment.
944   */
945  @Child(name = "assessor", type = { Practitioner.class,
946      PractitionerRole.class }, order = 9, min = 0, max = 1, modifier = false, summary = true)
947  @Description(shortDefinition = "The clinician performing the assessment", formalDefinition = "The clinician performing the assessment.")
948  protected Reference assessor;
949
950  /**
951   * The actual object that is the target of the reference (The clinician
952   * performing the assessment.)
953   */
954  protected Resource assessorTarget;
955
956  /**
957   * A reference to the last assessment that was conducted on this patient.
958   * Assessments are often/usually ongoing in nature; a care provider
959   * (practitioner or team) will make new assessments on an ongoing basis as new
960   * data arises or the patient's conditions changes.
961   */
962  @Child(name = "previous", type = {
963      ClinicalImpression.class }, order = 10, min = 0, max = 1, modifier = false, summary = false)
964  @Description(shortDefinition = "Reference to last assessment", formalDefinition = "A reference to the last assessment that was conducted on 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.")
965  protected Reference previous;
966
967  /**
968   * The actual object that is the target of the reference (A reference to the
969   * last assessment that was conducted on this patient. Assessments are
970   * often/usually ongoing in nature; a care provider (practitioner or team) will
971   * make new assessments on an ongoing basis as new data arises or the patient's
972   * conditions changes.)
973   */
974  protected ClinicalImpression previousTarget;
975
976  /**
977   * A list of the relevant problems/conditions for a patient.
978   */
979  @Child(name = "problem", type = { Condition.class,
980      AllergyIntolerance.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
981  @Description(shortDefinition = "Relevant impressions of patient state", formalDefinition = "A list of the relevant problems/conditions for a patient.")
982  protected List<Reference> problem;
983  /**
984   * The actual objects that are the target of the reference (A list of the
985   * relevant problems/conditions for a patient.)
986   */
987  protected List<Resource> problemTarget;
988
989  /**
990   * One or more sets of investigations (signs, symptoms, etc.). The actual
991   * grouping of investigations varies greatly depending on the type and context
992   * of the assessment. These investigations may include data generated during the
993   * assessment process, or data previously generated and recorded that is
994   * pertinent to the outcomes.
995   */
996  @Child(name = "investigation", type = {}, order = 12, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
997  @Description(shortDefinition = "One or more sets of investigations (signs, symptoms, etc.)", formalDefinition = "One or more sets of investigations (signs, symptoms, etc.). The actual grouping of investigations varies 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.")
998  protected List<ClinicalImpressionInvestigationComponent> investigation;
999
1000  /**
1001   * Reference to a specific published clinical protocol that was followed during
1002   * this assessment, and/or that provides evidence in support of the diagnosis.
1003   */
1004  @Child(name = "protocol", type = {
1005      UriType.class }, order = 13, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1006  @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.")
1007  protected List<UriType> protocol;
1008
1009  /**
1010   * A text summary of the investigations and the diagnosis.
1011   */
1012  @Child(name = "summary", type = { StringType.class }, order = 14, min = 0, max = 1, modifier = false, summary = false)
1013  @Description(shortDefinition = "Summary of the assessment", formalDefinition = "A text summary of the investigations and the diagnosis.")
1014  protected StringType summary;
1015
1016  /**
1017   * Specific findings or diagnoses that were considered likely or relevant to
1018   * ongoing treatment.
1019   */
1020  @Child(name = "finding", type = {}, order = 15, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1021  @Description(shortDefinition = "Possible or likely findings and diagnoses", formalDefinition = "Specific findings or diagnoses that were considered likely or relevant to ongoing treatment.")
1022  protected List<ClinicalImpressionFindingComponent> finding;
1023
1024  /**
1025   * Estimate of likely outcome.
1026   */
1027  @Child(name = "prognosisCodeableConcept", type = {
1028      CodeableConcept.class }, order = 16, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1029  @Description(shortDefinition = "Estimate of likely outcome", formalDefinition = "Estimate of likely outcome.")
1030  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/clinicalimpression-prognosis")
1031  protected List<CodeableConcept> prognosisCodeableConcept;
1032
1033  /**
1034   * RiskAssessment expressing likely outcome.
1035   */
1036  @Child(name = "prognosisReference", type = {
1037      RiskAssessment.class }, order = 17, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1038  @Description(shortDefinition = "RiskAssessment expressing likely outcome", formalDefinition = "RiskAssessment expressing likely outcome.")
1039  protected List<Reference> prognosisReference;
1040  /**
1041   * The actual objects that are the target of the reference (RiskAssessment
1042   * expressing likely outcome.)
1043   */
1044  protected List<RiskAssessment> prognosisReferenceTarget;
1045
1046  /**
1047   * Information supporting the clinical impression.
1048   */
1049  @Child(name = "supportingInfo", type = {
1050      Reference.class }, order = 18, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1051  @Description(shortDefinition = "Information supporting the clinical impression", formalDefinition = "Information supporting the clinical impression.")
1052  protected List<Reference> supportingInfo;
1053  /**
1054   * The actual objects that are the target of the reference (Information
1055   * supporting the clinical impression.)
1056   */
1057  protected List<Resource> supportingInfoTarget;
1058
1059  /**
1060   * Commentary about the impression, typically recorded after the impression
1061   * itself was made, though supplemental notes by the original author could also
1062   * appear.
1063   */
1064  @Child(name = "note", type = {
1065      Annotation.class }, order = 19, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1066  @Description(shortDefinition = "Comments made about the ClinicalImpression", formalDefinition = "Commentary about the impression, typically recorded after the impression itself was made, though supplemental notes by the original author could also appear.")
1067  protected List<Annotation> note;
1068
1069  private static final long serialVersionUID = 1158874575L;
1070
1071  /**
1072   * Constructor
1073   */
1074  public ClinicalImpression() {
1075    super();
1076  }
1077
1078  /**
1079   * Constructor
1080   */
1081  public ClinicalImpression(Enumeration<ClinicalImpressionStatus> status, Reference subject) {
1082    super();
1083    this.status = status;
1084    this.subject = subject;
1085  }
1086
1087  /**
1088   * @return {@link #identifier} (Business identifiers assigned to this clinical
1089   *         impression by the performer or other systems which remain constant as
1090   *         the resource is updated and propagates from server to server.)
1091   */
1092  public List<Identifier> getIdentifier() {
1093    if (this.identifier == null)
1094      this.identifier = new ArrayList<Identifier>();
1095    return this.identifier;
1096  }
1097
1098  /**
1099   * @return Returns a reference to <code>this</code> for easy method chaining
1100   */
1101  public ClinicalImpression setIdentifier(List<Identifier> theIdentifier) {
1102    this.identifier = theIdentifier;
1103    return this;
1104  }
1105
1106  public boolean hasIdentifier() {
1107    if (this.identifier == null)
1108      return false;
1109    for (Identifier item : this.identifier)
1110      if (!item.isEmpty())
1111        return true;
1112    return false;
1113  }
1114
1115  public Identifier addIdentifier() { // 3
1116    Identifier t = new Identifier();
1117    if (this.identifier == null)
1118      this.identifier = new ArrayList<Identifier>();
1119    this.identifier.add(t);
1120    return t;
1121  }
1122
1123  public ClinicalImpression addIdentifier(Identifier t) { // 3
1124    if (t == null)
1125      return this;
1126    if (this.identifier == null)
1127      this.identifier = new ArrayList<Identifier>();
1128    this.identifier.add(t);
1129    return this;
1130  }
1131
1132  /**
1133   * @return The first repetition of repeating field {@link #identifier}, creating
1134   *         it if it does not already exist
1135   */
1136  public Identifier getIdentifierFirstRep() {
1137    if (getIdentifier().isEmpty()) {
1138      addIdentifier();
1139    }
1140    return getIdentifier().get(0);
1141  }
1142
1143  /**
1144   * @return {@link #status} (Identifies the workflow status of the assessment.).
1145   *         This is the underlying object with id, value and extensions. The
1146   *         accessor "getStatus" gives direct access to the value
1147   */
1148  public Enumeration<ClinicalImpressionStatus> getStatusElement() {
1149    if (this.status == null)
1150      if (Configuration.errorOnAutoCreate())
1151        throw new Error("Attempt to auto-create ClinicalImpression.status");
1152      else if (Configuration.doAutoCreate())
1153        this.status = new Enumeration<ClinicalImpressionStatus>(new ClinicalImpressionStatusEnumFactory()); // bb
1154    return this.status;
1155  }
1156
1157  public boolean hasStatusElement() {
1158    return this.status != null && !this.status.isEmpty();
1159  }
1160
1161  public boolean hasStatus() {
1162    return this.status != null && !this.status.isEmpty();
1163  }
1164
1165  /**
1166   * @param value {@link #status} (Identifies the workflow status of the
1167   *              assessment.). This is the underlying object with id, value and
1168   *              extensions. The accessor "getStatus" gives direct access to the
1169   *              value
1170   */
1171  public ClinicalImpression setStatusElement(Enumeration<ClinicalImpressionStatus> value) {
1172    this.status = value;
1173    return this;
1174  }
1175
1176  /**
1177   * @return Identifies the workflow status of the assessment.
1178   */
1179  public ClinicalImpressionStatus getStatus() {
1180    return this.status == null ? null : this.status.getValue();
1181  }
1182
1183  /**
1184   * @param value Identifies the workflow status of the assessment.
1185   */
1186  public ClinicalImpression setStatus(ClinicalImpressionStatus value) {
1187    if (this.status == null)
1188      this.status = new Enumeration<ClinicalImpressionStatus>(new ClinicalImpressionStatusEnumFactory());
1189    this.status.setValue(value);
1190    return this;
1191  }
1192
1193  /**
1194   * @return {@link #statusReason} (Captures the reason for the current state of
1195   *         the ClinicalImpression.)
1196   */
1197  public CodeableConcept getStatusReason() {
1198    if (this.statusReason == null)
1199      if (Configuration.errorOnAutoCreate())
1200        throw new Error("Attempt to auto-create ClinicalImpression.statusReason");
1201      else if (Configuration.doAutoCreate())
1202        this.statusReason = new CodeableConcept(); // cc
1203    return this.statusReason;
1204  }
1205
1206  public boolean hasStatusReason() {
1207    return this.statusReason != null && !this.statusReason.isEmpty();
1208  }
1209
1210  /**
1211   * @param value {@link #statusReason} (Captures the reason for the current state
1212   *              of the ClinicalImpression.)
1213   */
1214  public ClinicalImpression setStatusReason(CodeableConcept value) {
1215    this.statusReason = value;
1216    return this;
1217  }
1218
1219  /**
1220   * @return {@link #code} (Categorizes the type of clinical assessment
1221   *         performed.)
1222   */
1223  public CodeableConcept getCode() {
1224    if (this.code == null)
1225      if (Configuration.errorOnAutoCreate())
1226        throw new Error("Attempt to auto-create ClinicalImpression.code");
1227      else if (Configuration.doAutoCreate())
1228        this.code = new CodeableConcept(); // cc
1229    return this.code;
1230  }
1231
1232  public boolean hasCode() {
1233    return this.code != null && !this.code.isEmpty();
1234  }
1235
1236  /**
1237   * @param value {@link #code} (Categorizes the type of clinical assessment
1238   *              performed.)
1239   */
1240  public ClinicalImpression setCode(CodeableConcept value) {
1241    this.code = value;
1242    return this;
1243  }
1244
1245  /**
1246   * @return {@link #description} (A summary of the context and/or cause of the
1247   *         assessment - why / where it was performed, and what patient
1248   *         events/status prompted it.). This is the underlying object with id,
1249   *         value and extensions. The accessor "getDescription" gives direct
1250   *         access to the value
1251   */
1252  public StringType getDescriptionElement() {
1253    if (this.description == null)
1254      if (Configuration.errorOnAutoCreate())
1255        throw new Error("Attempt to auto-create ClinicalImpression.description");
1256      else if (Configuration.doAutoCreate())
1257        this.description = new StringType(); // bb
1258    return this.description;
1259  }
1260
1261  public boolean hasDescriptionElement() {
1262    return this.description != null && !this.description.isEmpty();
1263  }
1264
1265  public boolean hasDescription() {
1266    return this.description != null && !this.description.isEmpty();
1267  }
1268
1269  /**
1270   * @param value {@link #description} (A summary of the context and/or cause of
1271   *              the assessment - why / where it was performed, and what patient
1272   *              events/status prompted it.). This is the underlying object with
1273   *              id, value and extensions. The accessor "getDescription" gives
1274   *              direct access to the value
1275   */
1276  public ClinicalImpression setDescriptionElement(StringType value) {
1277    this.description = value;
1278    return this;
1279  }
1280
1281  /**
1282   * @return A summary of the context and/or cause of the assessment - why / where
1283   *         it was performed, and what patient events/status prompted it.
1284   */
1285  public String getDescription() {
1286    return this.description == null ? null : this.description.getValue();
1287  }
1288
1289  /**
1290   * @param value A summary of the context and/or cause of the assessment - why /
1291   *              where it was performed, and what patient events/status prompted
1292   *              it.
1293   */
1294  public ClinicalImpression setDescription(String value) {
1295    if (Utilities.noString(value))
1296      this.description = null;
1297    else {
1298      if (this.description == null)
1299        this.description = new StringType();
1300      this.description.setValue(value);
1301    }
1302    return this;
1303  }
1304
1305  /**
1306   * @return {@link #subject} (The patient or group of individuals assessed as
1307   *         part of this record.)
1308   */
1309  public Reference getSubject() {
1310    if (this.subject == null)
1311      if (Configuration.errorOnAutoCreate())
1312        throw new Error("Attempt to auto-create ClinicalImpression.subject");
1313      else if (Configuration.doAutoCreate())
1314        this.subject = new Reference(); // cc
1315    return this.subject;
1316  }
1317
1318  public boolean hasSubject() {
1319    return this.subject != null && !this.subject.isEmpty();
1320  }
1321
1322  /**
1323   * @param value {@link #subject} (The patient or group of individuals assessed
1324   *              as part of this record.)
1325   */
1326  public ClinicalImpression setSubject(Reference value) {
1327    this.subject = value;
1328    return this;
1329  }
1330
1331  /**
1332   * @return {@link #subject} The actual object that is the target of the
1333   *         reference. The reference library doesn't populate this, but you can
1334   *         use it to hold the resource if you resolve it. (The patient or group
1335   *         of individuals assessed as part of this record.)
1336   */
1337  public Resource getSubjectTarget() {
1338    return this.subjectTarget;
1339  }
1340
1341  /**
1342   * @param value {@link #subject} The actual object that is the target of the
1343   *              reference. The reference library doesn't use these, but you can
1344   *              use it to hold the resource if you resolve it. (The patient or
1345   *              group of individuals assessed as part of this record.)
1346   */
1347  public ClinicalImpression setSubjectTarget(Resource value) {
1348    this.subjectTarget = value;
1349    return this;
1350  }
1351
1352  /**
1353   * @return {@link #encounter} (The Encounter during which this
1354   *         ClinicalImpression was created or to which the creation of this
1355   *         record is tightly associated.)
1356   */
1357  public Reference getEncounter() {
1358    if (this.encounter == null)
1359      if (Configuration.errorOnAutoCreate())
1360        throw new Error("Attempt to auto-create ClinicalImpression.encounter");
1361      else if (Configuration.doAutoCreate())
1362        this.encounter = new Reference(); // cc
1363    return this.encounter;
1364  }
1365
1366  public boolean hasEncounter() {
1367    return this.encounter != null && !this.encounter.isEmpty();
1368  }
1369
1370  /**
1371   * @param value {@link #encounter} (The Encounter during which this
1372   *              ClinicalImpression was created or to which the creation of this
1373   *              record is tightly associated.)
1374   */
1375  public ClinicalImpression setEncounter(Reference value) {
1376    this.encounter = value;
1377    return this;
1378  }
1379
1380  /**
1381   * @return {@link #encounter} The actual object that is the target of the
1382   *         reference. The reference library doesn't populate this, but you can
1383   *         use it to hold the resource if you resolve it. (The Encounter during
1384   *         which this ClinicalImpression was created or to which the creation of
1385   *         this record is tightly associated.)
1386   */
1387  public Encounter getEncounterTarget() {
1388    if (this.encounterTarget == null)
1389      if (Configuration.errorOnAutoCreate())
1390        throw new Error("Attempt to auto-create ClinicalImpression.encounter");
1391      else if (Configuration.doAutoCreate())
1392        this.encounterTarget = new Encounter(); // aa
1393    return this.encounterTarget;
1394  }
1395
1396  /**
1397   * @param value {@link #encounter} The actual object that is the target of the
1398   *              reference. The reference library doesn't use these, but you can
1399   *              use it to hold the resource if you resolve it. (The Encounter
1400   *              during which this ClinicalImpression was created or to which the
1401   *              creation of this record is tightly associated.)
1402   */
1403  public ClinicalImpression setEncounterTarget(Encounter value) {
1404    this.encounterTarget = value;
1405    return this;
1406  }
1407
1408  /**
1409   * @return {@link #effective} (The point in time or period over which the
1410   *         subject was assessed.)
1411   */
1412  public Type getEffective() {
1413    return this.effective;
1414  }
1415
1416  /**
1417   * @return {@link #effective} (The point in time or period over which the
1418   *         subject was assessed.)
1419   */
1420  public DateTimeType getEffectiveDateTimeType() throws FHIRException {
1421    if (this.effective == null)
1422      this.effective = new DateTimeType();
1423    if (!(this.effective instanceof DateTimeType))
1424      throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "
1425          + this.effective.getClass().getName() + " was encountered");
1426    return (DateTimeType) this.effective;
1427  }
1428
1429  public boolean hasEffectiveDateTimeType() {
1430    return this != null && this.effective instanceof DateTimeType;
1431  }
1432
1433  /**
1434   * @return {@link #effective} (The point in time or period over which the
1435   *         subject was assessed.)
1436   */
1437  public Period getEffectivePeriod() throws FHIRException {
1438    if (this.effective == null)
1439      this.effective = new Period();
1440    if (!(this.effective instanceof Period))
1441      throw new FHIRException("Type mismatch: the type Period was expected, but " + this.effective.getClass().getName()
1442          + " was encountered");
1443    return (Period) this.effective;
1444  }
1445
1446  public boolean hasEffectivePeriod() {
1447    return this != null && this.effective instanceof Period;
1448  }
1449
1450  public boolean hasEffective() {
1451    return this.effective != null && !this.effective.isEmpty();
1452  }
1453
1454  /**
1455   * @param value {@link #effective} (The point in time or period over which the
1456   *              subject was assessed.)
1457   */
1458  public ClinicalImpression setEffective(Type value) {
1459    if (value != null && !(value instanceof DateTimeType || value instanceof Period))
1460      throw new Error("Not the right type for ClinicalImpression.effective[x]: " + value.fhirType());
1461    this.effective = value;
1462    return this;
1463  }
1464
1465  /**
1466   * @return {@link #date} (Indicates when the documentation of the assessment was
1467   *         complete.). This is the underlying object with id, value and
1468   *         extensions. The accessor "getDate" gives direct access to the value
1469   */
1470  public DateTimeType getDateElement() {
1471    if (this.date == null)
1472      if (Configuration.errorOnAutoCreate())
1473        throw new Error("Attempt to auto-create ClinicalImpression.date");
1474      else if (Configuration.doAutoCreate())
1475        this.date = new DateTimeType(); // bb
1476    return this.date;
1477  }
1478
1479  public boolean hasDateElement() {
1480    return this.date != null && !this.date.isEmpty();
1481  }
1482
1483  public boolean hasDate() {
1484    return this.date != null && !this.date.isEmpty();
1485  }
1486
1487  /**
1488   * @param value {@link #date} (Indicates when the documentation of the
1489   *              assessment was complete.). This is the underlying object with
1490   *              id, value and extensions. The accessor "getDate" gives direct
1491   *              access to the value
1492   */
1493  public ClinicalImpression setDateElement(DateTimeType value) {
1494    this.date = value;
1495    return this;
1496  }
1497
1498  /**
1499   * @return Indicates when the documentation of the assessment was complete.
1500   */
1501  public Date getDate() {
1502    return this.date == null ? null : this.date.getValue();
1503  }
1504
1505  /**
1506   * @param value Indicates when the documentation of the assessment was complete.
1507   */
1508  public ClinicalImpression setDate(Date value) {
1509    if (value == null)
1510      this.date = null;
1511    else {
1512      if (this.date == null)
1513        this.date = new DateTimeType();
1514      this.date.setValue(value);
1515    }
1516    return this;
1517  }
1518
1519  /**
1520   * @return {@link #assessor} (The clinician performing the assessment.)
1521   */
1522  public Reference getAssessor() {
1523    if (this.assessor == null)
1524      if (Configuration.errorOnAutoCreate())
1525        throw new Error("Attempt to auto-create ClinicalImpression.assessor");
1526      else if (Configuration.doAutoCreate())
1527        this.assessor = new Reference(); // cc
1528    return this.assessor;
1529  }
1530
1531  public boolean hasAssessor() {
1532    return this.assessor != null && !this.assessor.isEmpty();
1533  }
1534
1535  /**
1536   * @param value {@link #assessor} (The clinician performing the assessment.)
1537   */
1538  public ClinicalImpression setAssessor(Reference value) {
1539    this.assessor = value;
1540    return this;
1541  }
1542
1543  /**
1544   * @return {@link #assessor} The actual object that is the target of the
1545   *         reference. The reference library doesn't populate this, but you can
1546   *         use it to hold the resource if you resolve it. (The clinician
1547   *         performing the assessment.)
1548   */
1549  public Resource getAssessorTarget() {
1550    return this.assessorTarget;
1551  }
1552
1553  /**
1554   * @param value {@link #assessor} The actual object that is the target of the
1555   *              reference. The reference library doesn't use these, but you can
1556   *              use it to hold the resource if you resolve it. (The clinician
1557   *              performing the assessment.)
1558   */
1559  public ClinicalImpression setAssessorTarget(Resource value) {
1560    this.assessorTarget = value;
1561    return this;
1562  }
1563
1564  /**
1565   * @return {@link #previous} (A reference to the last assessment that was
1566   *         conducted on this patient. Assessments are often/usually ongoing in
1567   *         nature; a care provider (practitioner or team) will make new
1568   *         assessments on an ongoing basis as new data arises or the patient's
1569   *         conditions changes.)
1570   */
1571  public Reference getPrevious() {
1572    if (this.previous == null)
1573      if (Configuration.errorOnAutoCreate())
1574        throw new Error("Attempt to auto-create ClinicalImpression.previous");
1575      else if (Configuration.doAutoCreate())
1576        this.previous = new Reference(); // cc
1577    return this.previous;
1578  }
1579
1580  public boolean hasPrevious() {
1581    return this.previous != null && !this.previous.isEmpty();
1582  }
1583
1584  /**
1585   * @param value {@link #previous} (A reference to the last assessment that was
1586   *              conducted on this patient. Assessments are often/usually ongoing
1587   *              in nature; a care provider (practitioner or team) will make new
1588   *              assessments on an ongoing basis as new data arises or the
1589   *              patient's conditions changes.)
1590   */
1591  public ClinicalImpression setPrevious(Reference value) {
1592    this.previous = value;
1593    return this;
1594  }
1595
1596  /**
1597   * @return {@link #previous} The actual object that is the target of the
1598   *         reference. The reference library doesn't populate this, but you can
1599   *         use it to hold the resource if you resolve it. (A reference to the
1600   *         last assessment that was conducted on this patient. Assessments are
1601   *         often/usually ongoing in nature; a care provider (practitioner or
1602   *         team) will make new assessments on an ongoing basis as new data
1603   *         arises or the patient's conditions changes.)
1604   */
1605  public ClinicalImpression getPreviousTarget() {
1606    if (this.previousTarget == null)
1607      if (Configuration.errorOnAutoCreate())
1608        throw new Error("Attempt to auto-create ClinicalImpression.previous");
1609      else if (Configuration.doAutoCreate())
1610        this.previousTarget = new ClinicalImpression(); // aa
1611    return this.previousTarget;
1612  }
1613
1614  /**
1615   * @param value {@link #previous} The actual object that is the target of the
1616   *              reference. The reference library doesn't use these, but you can
1617   *              use it to hold the resource if you resolve it. (A reference to
1618   *              the last assessment that was conducted on this patient.
1619   *              Assessments are often/usually ongoing in nature; a care provider
1620   *              (practitioner or team) will make new assessments on an ongoing
1621   *              basis as new data arises or the patient's conditions changes.)
1622   */
1623  public ClinicalImpression setPreviousTarget(ClinicalImpression value) {
1624    this.previousTarget = value;
1625    return this;
1626  }
1627
1628  /**
1629   * @return {@link #problem} (A list of the relevant problems/conditions for a
1630   *         patient.)
1631   */
1632  public List<Reference> getProblem() {
1633    if (this.problem == null)
1634      this.problem = new ArrayList<Reference>();
1635    return this.problem;
1636  }
1637
1638  /**
1639   * @return Returns a reference to <code>this</code> for easy method chaining
1640   */
1641  public ClinicalImpression setProblem(List<Reference> theProblem) {
1642    this.problem = theProblem;
1643    return this;
1644  }
1645
1646  public boolean hasProblem() {
1647    if (this.problem == null)
1648      return false;
1649    for (Reference item : this.problem)
1650      if (!item.isEmpty())
1651        return true;
1652    return false;
1653  }
1654
1655  public Reference addProblem() { // 3
1656    Reference t = new Reference();
1657    if (this.problem == null)
1658      this.problem = new ArrayList<Reference>();
1659    this.problem.add(t);
1660    return t;
1661  }
1662
1663  public ClinicalImpression addProblem(Reference t) { // 3
1664    if (t == null)
1665      return this;
1666    if (this.problem == null)
1667      this.problem = new ArrayList<Reference>();
1668    this.problem.add(t);
1669    return this;
1670  }
1671
1672  /**
1673   * @return The first repetition of repeating field {@link #problem}, creating it
1674   *         if it does not already exist
1675   */
1676  public Reference getProblemFirstRep() {
1677    if (getProblem().isEmpty()) {
1678      addProblem();
1679    }
1680    return getProblem().get(0);
1681  }
1682
1683  /**
1684   * @deprecated Use Reference#setResource(IBaseResource) instead
1685   */
1686  @Deprecated
1687  public List<Resource> getProblemTarget() {
1688    if (this.problemTarget == null)
1689      this.problemTarget = new ArrayList<Resource>();
1690    return this.problemTarget;
1691  }
1692
1693  /**
1694   * @return {@link #investigation} (One or more sets of investigations (signs,
1695   *         symptoms, etc.). The actual grouping of investigations varies greatly
1696   *         depending on the type and context of the assessment. These
1697   *         investigations may include data generated during the assessment
1698   *         process, or data previously generated and recorded that is pertinent
1699   *         to the outcomes.)
1700   */
1701  public List<ClinicalImpressionInvestigationComponent> getInvestigation() {
1702    if (this.investigation == null)
1703      this.investigation = new ArrayList<ClinicalImpressionInvestigationComponent>();
1704    return this.investigation;
1705  }
1706
1707  /**
1708   * @return Returns a reference to <code>this</code> for easy method chaining
1709   */
1710  public ClinicalImpression setInvestigation(List<ClinicalImpressionInvestigationComponent> theInvestigation) {
1711    this.investigation = theInvestigation;
1712    return this;
1713  }
1714
1715  public boolean hasInvestigation() {
1716    if (this.investigation == null)
1717      return false;
1718    for (ClinicalImpressionInvestigationComponent item : this.investigation)
1719      if (!item.isEmpty())
1720        return true;
1721    return false;
1722  }
1723
1724  public ClinicalImpressionInvestigationComponent addInvestigation() { // 3
1725    ClinicalImpressionInvestigationComponent t = new ClinicalImpressionInvestigationComponent();
1726    if (this.investigation == null)
1727      this.investigation = new ArrayList<ClinicalImpressionInvestigationComponent>();
1728    this.investigation.add(t);
1729    return t;
1730  }
1731
1732  public ClinicalImpression addInvestigation(ClinicalImpressionInvestigationComponent t) { // 3
1733    if (t == null)
1734      return this;
1735    if (this.investigation == null)
1736      this.investigation = new ArrayList<ClinicalImpressionInvestigationComponent>();
1737    this.investigation.add(t);
1738    return this;
1739  }
1740
1741  /**
1742   * @return The first repetition of repeating field {@link #investigation},
1743   *         creating it if it does not already exist
1744   */
1745  public ClinicalImpressionInvestigationComponent getInvestigationFirstRep() {
1746    if (getInvestigation().isEmpty()) {
1747      addInvestigation();
1748    }
1749    return getInvestigation().get(0);
1750  }
1751
1752  /**
1753   * @return {@link #protocol} (Reference to a specific published clinical
1754   *         protocol that was followed during this assessment, and/or that
1755   *         provides evidence in support of the diagnosis.)
1756   */
1757  public List<UriType> getProtocol() {
1758    if (this.protocol == null)
1759      this.protocol = new ArrayList<UriType>();
1760    return this.protocol;
1761  }
1762
1763  /**
1764   * @return Returns a reference to <code>this</code> for easy method chaining
1765   */
1766  public ClinicalImpression setProtocol(List<UriType> theProtocol) {
1767    this.protocol = theProtocol;
1768    return this;
1769  }
1770
1771  public boolean hasProtocol() {
1772    if (this.protocol == null)
1773      return false;
1774    for (UriType item : this.protocol)
1775      if (!item.isEmpty())
1776        return true;
1777    return false;
1778  }
1779
1780  /**
1781   * @return {@link #protocol} (Reference to a specific published clinical
1782   *         protocol that was followed during this assessment, and/or that
1783   *         provides evidence in support of the diagnosis.)
1784   */
1785  public UriType addProtocolElement() {// 2
1786    UriType t = new UriType();
1787    if (this.protocol == null)
1788      this.protocol = new ArrayList<UriType>();
1789    this.protocol.add(t);
1790    return t;
1791  }
1792
1793  /**
1794   * @param value {@link #protocol} (Reference to a specific published clinical
1795   *              protocol that was followed during this assessment, and/or that
1796   *              provides evidence in support of the diagnosis.)
1797   */
1798  public ClinicalImpression addProtocol(String value) { // 1
1799    UriType t = new UriType();
1800    t.setValue(value);
1801    if (this.protocol == null)
1802      this.protocol = new ArrayList<UriType>();
1803    this.protocol.add(t);
1804    return this;
1805  }
1806
1807  /**
1808   * @param value {@link #protocol} (Reference to a specific published clinical
1809   *              protocol that was followed during this assessment, and/or that
1810   *              provides evidence in support of the diagnosis.)
1811   */
1812  public boolean hasProtocol(String value) {
1813    if (this.protocol == null)
1814      return false;
1815    for (UriType v : this.protocol)
1816      if (v.getValue().equals(value)) // uri
1817        return true;
1818    return false;
1819  }
1820
1821  /**
1822   * @return {@link #summary} (A text summary of the investigations and the
1823   *         diagnosis.). This is the underlying object with id, value and
1824   *         extensions. The accessor "getSummary" gives direct access to the
1825   *         value
1826   */
1827  public StringType getSummaryElement() {
1828    if (this.summary == null)
1829      if (Configuration.errorOnAutoCreate())
1830        throw new Error("Attempt to auto-create ClinicalImpression.summary");
1831      else if (Configuration.doAutoCreate())
1832        this.summary = new StringType(); // bb
1833    return this.summary;
1834  }
1835
1836  public boolean hasSummaryElement() {
1837    return this.summary != null && !this.summary.isEmpty();
1838  }
1839
1840  public boolean hasSummary() {
1841    return this.summary != null && !this.summary.isEmpty();
1842  }
1843
1844  /**
1845   * @param value {@link #summary} (A text summary of the investigations and the
1846   *              diagnosis.). This is the underlying object with id, value and
1847   *              extensions. The accessor "getSummary" gives direct access to the
1848   *              value
1849   */
1850  public ClinicalImpression setSummaryElement(StringType value) {
1851    this.summary = value;
1852    return this;
1853  }
1854
1855  /**
1856   * @return A text summary of the investigations and the diagnosis.
1857   */
1858  public String getSummary() {
1859    return this.summary == null ? null : this.summary.getValue();
1860  }
1861
1862  /**
1863   * @param value A text summary of the investigations and the diagnosis.
1864   */
1865  public ClinicalImpression setSummary(String value) {
1866    if (Utilities.noString(value))
1867      this.summary = null;
1868    else {
1869      if (this.summary == null)
1870        this.summary = new StringType();
1871      this.summary.setValue(value);
1872    }
1873    return this;
1874  }
1875
1876  /**
1877   * @return {@link #finding} (Specific findings or diagnoses that were considered
1878   *         likely or relevant to ongoing treatment.)
1879   */
1880  public List<ClinicalImpressionFindingComponent> getFinding() {
1881    if (this.finding == null)
1882      this.finding = new ArrayList<ClinicalImpressionFindingComponent>();
1883    return this.finding;
1884  }
1885
1886  /**
1887   * @return Returns a reference to <code>this</code> for easy method chaining
1888   */
1889  public ClinicalImpression setFinding(List<ClinicalImpressionFindingComponent> theFinding) {
1890    this.finding = theFinding;
1891    return this;
1892  }
1893
1894  public boolean hasFinding() {
1895    if (this.finding == null)
1896      return false;
1897    for (ClinicalImpressionFindingComponent item : this.finding)
1898      if (!item.isEmpty())
1899        return true;
1900    return false;
1901  }
1902
1903  public ClinicalImpressionFindingComponent addFinding() { // 3
1904    ClinicalImpressionFindingComponent t = new ClinicalImpressionFindingComponent();
1905    if (this.finding == null)
1906      this.finding = new ArrayList<ClinicalImpressionFindingComponent>();
1907    this.finding.add(t);
1908    return t;
1909  }
1910
1911  public ClinicalImpression addFinding(ClinicalImpressionFindingComponent t) { // 3
1912    if (t == null)
1913      return this;
1914    if (this.finding == null)
1915      this.finding = new ArrayList<ClinicalImpressionFindingComponent>();
1916    this.finding.add(t);
1917    return this;
1918  }
1919
1920  /**
1921   * @return The first repetition of repeating field {@link #finding}, creating it
1922   *         if it does not already exist
1923   */
1924  public ClinicalImpressionFindingComponent getFindingFirstRep() {
1925    if (getFinding().isEmpty()) {
1926      addFinding();
1927    }
1928    return getFinding().get(0);
1929  }
1930
1931  /**
1932   * @return {@link #prognosisCodeableConcept} (Estimate of likely outcome.)
1933   */
1934  public List<CodeableConcept> getPrognosisCodeableConcept() {
1935    if (this.prognosisCodeableConcept == null)
1936      this.prognosisCodeableConcept = new ArrayList<CodeableConcept>();
1937    return this.prognosisCodeableConcept;
1938  }
1939
1940  /**
1941   * @return Returns a reference to <code>this</code> for easy method chaining
1942   */
1943  public ClinicalImpression setPrognosisCodeableConcept(List<CodeableConcept> thePrognosisCodeableConcept) {
1944    this.prognosisCodeableConcept = thePrognosisCodeableConcept;
1945    return this;
1946  }
1947
1948  public boolean hasPrognosisCodeableConcept() {
1949    if (this.prognosisCodeableConcept == null)
1950      return false;
1951    for (CodeableConcept item : this.prognosisCodeableConcept)
1952      if (!item.isEmpty())
1953        return true;
1954    return false;
1955  }
1956
1957  public CodeableConcept addPrognosisCodeableConcept() { // 3
1958    CodeableConcept t = new CodeableConcept();
1959    if (this.prognosisCodeableConcept == null)
1960      this.prognosisCodeableConcept = new ArrayList<CodeableConcept>();
1961    this.prognosisCodeableConcept.add(t);
1962    return t;
1963  }
1964
1965  public ClinicalImpression addPrognosisCodeableConcept(CodeableConcept t) { // 3
1966    if (t == null)
1967      return this;
1968    if (this.prognosisCodeableConcept == null)
1969      this.prognosisCodeableConcept = new ArrayList<CodeableConcept>();
1970    this.prognosisCodeableConcept.add(t);
1971    return this;
1972  }
1973
1974  /**
1975   * @return The first repetition of repeating field
1976   *         {@link #prognosisCodeableConcept}, creating it if it does not already
1977   *         exist
1978   */
1979  public CodeableConcept getPrognosisCodeableConceptFirstRep() {
1980    if (getPrognosisCodeableConcept().isEmpty()) {
1981      addPrognosisCodeableConcept();
1982    }
1983    return getPrognosisCodeableConcept().get(0);
1984  }
1985
1986  /**
1987   * @return {@link #prognosisReference} (RiskAssessment expressing likely
1988   *         outcome.)
1989   */
1990  public List<Reference> getPrognosisReference() {
1991    if (this.prognosisReference == null)
1992      this.prognosisReference = new ArrayList<Reference>();
1993    return this.prognosisReference;
1994  }
1995
1996  /**
1997   * @return Returns a reference to <code>this</code> for easy method chaining
1998   */
1999  public ClinicalImpression setPrognosisReference(List<Reference> thePrognosisReference) {
2000    this.prognosisReference = thePrognosisReference;
2001    return this;
2002  }
2003
2004  public boolean hasPrognosisReference() {
2005    if (this.prognosisReference == null)
2006      return false;
2007    for (Reference item : this.prognosisReference)
2008      if (!item.isEmpty())
2009        return true;
2010    return false;
2011  }
2012
2013  public Reference addPrognosisReference() { // 3
2014    Reference t = new Reference();
2015    if (this.prognosisReference == null)
2016      this.prognosisReference = new ArrayList<Reference>();
2017    this.prognosisReference.add(t);
2018    return t;
2019  }
2020
2021  public ClinicalImpression addPrognosisReference(Reference t) { // 3
2022    if (t == null)
2023      return this;
2024    if (this.prognosisReference == null)
2025      this.prognosisReference = new ArrayList<Reference>();
2026    this.prognosisReference.add(t);
2027    return this;
2028  }
2029
2030  /**
2031   * @return The first repetition of repeating field {@link #prognosisReference},
2032   *         creating it if it does not already exist
2033   */
2034  public Reference getPrognosisReferenceFirstRep() {
2035    if (getPrognosisReference().isEmpty()) {
2036      addPrognosisReference();
2037    }
2038    return getPrognosisReference().get(0);
2039  }
2040
2041  /**
2042   * @deprecated Use Reference#setResource(IBaseResource) instead
2043   */
2044  @Deprecated
2045  public List<RiskAssessment> getPrognosisReferenceTarget() {
2046    if (this.prognosisReferenceTarget == null)
2047      this.prognosisReferenceTarget = new ArrayList<RiskAssessment>();
2048    return this.prognosisReferenceTarget;
2049  }
2050
2051  /**
2052   * @deprecated Use Reference#setResource(IBaseResource) instead
2053   */
2054  @Deprecated
2055  public RiskAssessment addPrognosisReferenceTarget() {
2056    RiskAssessment r = new RiskAssessment();
2057    if (this.prognosisReferenceTarget == null)
2058      this.prognosisReferenceTarget = new ArrayList<RiskAssessment>();
2059    this.prognosisReferenceTarget.add(r);
2060    return r;
2061  }
2062
2063  /**
2064   * @return {@link #supportingInfo} (Information supporting the clinical
2065   *         impression.)
2066   */
2067  public List<Reference> getSupportingInfo() {
2068    if (this.supportingInfo == null)
2069      this.supportingInfo = new ArrayList<Reference>();
2070    return this.supportingInfo;
2071  }
2072
2073  /**
2074   * @return Returns a reference to <code>this</code> for easy method chaining
2075   */
2076  public ClinicalImpression setSupportingInfo(List<Reference> theSupportingInfo) {
2077    this.supportingInfo = theSupportingInfo;
2078    return this;
2079  }
2080
2081  public boolean hasSupportingInfo() {
2082    if (this.supportingInfo == null)
2083      return false;
2084    for (Reference item : this.supportingInfo)
2085      if (!item.isEmpty())
2086        return true;
2087    return false;
2088  }
2089
2090  public Reference addSupportingInfo() { // 3
2091    Reference t = new Reference();
2092    if (this.supportingInfo == null)
2093      this.supportingInfo = new ArrayList<Reference>();
2094    this.supportingInfo.add(t);
2095    return t;
2096  }
2097
2098  public ClinicalImpression addSupportingInfo(Reference t) { // 3
2099    if (t == null)
2100      return this;
2101    if (this.supportingInfo == null)
2102      this.supportingInfo = new ArrayList<Reference>();
2103    this.supportingInfo.add(t);
2104    return this;
2105  }
2106
2107  /**
2108   * @return The first repetition of repeating field {@link #supportingInfo},
2109   *         creating it if it does not already exist
2110   */
2111  public Reference getSupportingInfoFirstRep() {
2112    if (getSupportingInfo().isEmpty()) {
2113      addSupportingInfo();
2114    }
2115    return getSupportingInfo().get(0);
2116  }
2117
2118  /**
2119   * @deprecated Use Reference#setResource(IBaseResource) instead
2120   */
2121  @Deprecated
2122  public List<Resource> getSupportingInfoTarget() {
2123    if (this.supportingInfoTarget == null)
2124      this.supportingInfoTarget = new ArrayList<Resource>();
2125    return this.supportingInfoTarget;
2126  }
2127
2128  /**
2129   * @return {@link #note} (Commentary about the impression, typically recorded
2130   *         after the impression itself was made, though supplemental notes by
2131   *         the original author could also appear.)
2132   */
2133  public List<Annotation> getNote() {
2134    if (this.note == null)
2135      this.note = new ArrayList<Annotation>();
2136    return this.note;
2137  }
2138
2139  /**
2140   * @return Returns a reference to <code>this</code> for easy method chaining
2141   */
2142  public ClinicalImpression setNote(List<Annotation> theNote) {
2143    this.note = theNote;
2144    return this;
2145  }
2146
2147  public boolean hasNote() {
2148    if (this.note == null)
2149      return false;
2150    for (Annotation item : this.note)
2151      if (!item.isEmpty())
2152        return true;
2153    return false;
2154  }
2155
2156  public Annotation addNote() { // 3
2157    Annotation t = new Annotation();
2158    if (this.note == null)
2159      this.note = new ArrayList<Annotation>();
2160    this.note.add(t);
2161    return t;
2162  }
2163
2164  public ClinicalImpression addNote(Annotation t) { // 3
2165    if (t == null)
2166      return this;
2167    if (this.note == null)
2168      this.note = new ArrayList<Annotation>();
2169    this.note.add(t);
2170    return this;
2171  }
2172
2173  /**
2174   * @return The first repetition of repeating field {@link #note}, creating it if
2175   *         it does not already exist
2176   */
2177  public Annotation getNoteFirstRep() {
2178    if (getNote().isEmpty()) {
2179      addNote();
2180    }
2181    return getNote().get(0);
2182  }
2183
2184  protected void listChildren(List<Property> children) {
2185    super.listChildren(children);
2186    children.add(new Property("identifier", "Identifier",
2187        "Business identifiers assigned to this clinical impression by the performer or other systems which remain constant as the resource is updated and propagates from server to server.",
2188        0, java.lang.Integer.MAX_VALUE, identifier));
2189    children.add(new Property("status", "code", "Identifies the workflow status of the assessment.", 0, 1, status));
2190    children.add(new Property("statusReason", "CodeableConcept",
2191        "Captures the reason for the current state of the ClinicalImpression.", 0, 1, statusReason));
2192    children.add(
2193        new Property("code", "CodeableConcept", "Categorizes the type of clinical assessment performed.", 0, 1, code));
2194    children.add(new Property("description", "string",
2195        "A summary of the context and/or cause of the assessment - why / where it was performed, and what patient events/status prompted it.",
2196        0, 1, description));
2197    children.add(new Property("subject", "Reference(Patient|Group)",
2198        "The patient or group of individuals assessed as part of this record.", 0, 1, subject));
2199    children.add(new Property("encounter", "Reference(Encounter)",
2200        "The Encounter during which this ClinicalImpression was created or to which the creation of this record is tightly associated.",
2201        0, 1, encounter));
2202    children.add(new Property("effective[x]", "dateTime|Period",
2203        "The point in time or period over which the subject was assessed.", 0, 1, effective));
2204    children.add(new Property("date", "dateTime", "Indicates when the documentation of the assessment was complete.", 0,
2205        1, date));
2206    children.add(new Property("assessor", "Reference(Practitioner|PractitionerRole)",
2207        "The clinician performing the assessment.", 0, 1, assessor));
2208    children.add(new Property("previous", "Reference(ClinicalImpression)",
2209        "A reference to the last assessment that was conducted on 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.",
2210        0, 1, previous));
2211    children.add(new Property("problem", "Reference(Condition|AllergyIntolerance)",
2212        "A list of the relevant problems/conditions for a patient.", 0, java.lang.Integer.MAX_VALUE, problem));
2213    children.add(new Property("investigation", "",
2214        "One or more sets of investigations (signs, symptoms, etc.). The actual grouping of investigations varies 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.",
2215        0, java.lang.Integer.MAX_VALUE, investigation));
2216    children.add(new Property("protocol", "uri",
2217        "Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.",
2218        0, java.lang.Integer.MAX_VALUE, protocol));
2219    children.add(
2220        new Property("summary", "string", "A text summary of the investigations and the diagnosis.", 0, 1, summary));
2221    children.add(new Property("finding", "",
2222        "Specific findings or diagnoses that were considered likely or relevant to ongoing treatment.", 0,
2223        java.lang.Integer.MAX_VALUE, finding));
2224    children.add(new Property("prognosisCodeableConcept", "CodeableConcept", "Estimate of likely outcome.", 0,
2225        java.lang.Integer.MAX_VALUE, prognosisCodeableConcept));
2226    children.add(new Property("prognosisReference", "Reference(RiskAssessment)",
2227        "RiskAssessment expressing likely outcome.", 0, java.lang.Integer.MAX_VALUE, prognosisReference));
2228    children.add(new Property("supportingInfo", "Reference(Any)", "Information supporting the clinical impression.", 0,
2229        java.lang.Integer.MAX_VALUE, supportingInfo));
2230    children.add(new Property("note", "Annotation",
2231        "Commentary about the impression, typically recorded after the impression itself was made, though supplemental notes by the original author could also appear.",
2232        0, java.lang.Integer.MAX_VALUE, note));
2233  }
2234
2235  @Override
2236  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2237    switch (_hash) {
2238    case -1618432855:
2239      /* identifier */ return new Property("identifier", "Identifier",
2240          "Business identifiers assigned to this clinical impression by the performer or other systems which remain constant as the resource is updated and propagates from server to server.",
2241          0, java.lang.Integer.MAX_VALUE, identifier);
2242    case -892481550:
2243      /* status */ return new Property("status", "code", "Identifies the workflow status of the assessment.", 0, 1,
2244          status);
2245    case 2051346646:
2246      /* statusReason */ return new Property("statusReason", "CodeableConcept",
2247          "Captures the reason for the current state of the ClinicalImpression.", 0, 1, statusReason);
2248    case 3059181:
2249      /* code */ return new Property("code", "CodeableConcept",
2250          "Categorizes the type of clinical assessment performed.", 0, 1, code);
2251    case -1724546052:
2252      /* description */ return new Property("description", "string",
2253          "A summary of the context and/or cause of the assessment - why / where it was performed, and what patient events/status prompted it.",
2254          0, 1, description);
2255    case -1867885268:
2256      /* subject */ return new Property("subject", "Reference(Patient|Group)",
2257          "The patient or group of individuals assessed as part of this record.", 0, 1, subject);
2258    case 1524132147:
2259      /* encounter */ return new Property("encounter", "Reference(Encounter)",
2260          "The Encounter during which this ClinicalImpression was created or to which the creation of this record is tightly associated.",
2261          0, 1, encounter);
2262    case 247104889:
2263      /* effective[x] */ return new Property("effective[x]", "dateTime|Period",
2264          "The point in time or period over which the subject was assessed.", 0, 1, effective);
2265    case -1468651097:
2266      /* effective */ return new Property("effective[x]", "dateTime|Period",
2267          "The point in time or period over which the subject was assessed.", 0, 1, effective);
2268    case -275306910:
2269      /* effectiveDateTime */ return new Property("effective[x]", "dateTime|Period",
2270          "The point in time or period over which the subject was assessed.", 0, 1, effective);
2271    case -403934648:
2272      /* effectivePeriod */ return new Property("effective[x]", "dateTime|Period",
2273          "The point in time or period over which the subject was assessed.", 0, 1, effective);
2274    case 3076014:
2275      /* date */ return new Property("date", "dateTime",
2276          "Indicates when the documentation of the assessment was complete.", 0, 1, date);
2277    case -373213113:
2278      /* assessor */ return new Property("assessor", "Reference(Practitioner|PractitionerRole)",
2279          "The clinician performing the assessment.", 0, 1, assessor);
2280    case -1273775369:
2281      /* previous */ return new Property("previous", "Reference(ClinicalImpression)",
2282          "A reference to the last assessment that was conducted on 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.",
2283          0, 1, previous);
2284    case -309542241:
2285      /* problem */ return new Property("problem", "Reference(Condition|AllergyIntolerance)",
2286          "A list of the relevant problems/conditions for a patient.", 0, java.lang.Integer.MAX_VALUE, problem);
2287    case 956015362:
2288      /* investigation */ return new Property("investigation", "",
2289          "One or more sets of investigations (signs, symptoms, etc.). The actual grouping of investigations varies 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.",
2290          0, java.lang.Integer.MAX_VALUE, investigation);
2291    case -989163880:
2292      /* protocol */ return new Property("protocol", "uri",
2293          "Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.",
2294          0, java.lang.Integer.MAX_VALUE, protocol);
2295    case -1857640538:
2296      /* summary */ return new Property("summary", "string", "A text summary of the investigations and the diagnosis.",
2297          0, 1, summary);
2298    case -853173367:
2299      /* finding */ return new Property("finding", "",
2300          "Specific findings or diagnoses that were considered likely or relevant to ongoing treatment.", 0,
2301          java.lang.Integer.MAX_VALUE, finding);
2302    case -676337953:
2303      /* prognosisCodeableConcept */ return new Property("prognosisCodeableConcept", "CodeableConcept",
2304          "Estimate of likely outcome.", 0, java.lang.Integer.MAX_VALUE, prognosisCodeableConcept);
2305    case -587137783:
2306      /* prognosisReference */ return new Property("prognosisReference", "Reference(RiskAssessment)",
2307          "RiskAssessment expressing likely outcome.", 0, java.lang.Integer.MAX_VALUE, prognosisReference);
2308    case 1922406657:
2309      /* supportingInfo */ return new Property("supportingInfo", "Reference(Any)",
2310          "Information supporting the clinical impression.", 0, java.lang.Integer.MAX_VALUE, supportingInfo);
2311    case 3387378:
2312      /* note */ return new Property("note", "Annotation",
2313          "Commentary about the impression, typically recorded after the impression itself was made, though supplemental notes by the original author could also appear.",
2314          0, java.lang.Integer.MAX_VALUE, note);
2315    default:
2316      return super.getNamedProperty(_hash, _name, _checkValid);
2317    }
2318
2319  }
2320
2321  @Override
2322  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2323    switch (hash) {
2324    case -1618432855:
2325      /* identifier */ return this.identifier == null ? new Base[0]
2326          : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2327    case -892481550:
2328      /* status */ return this.status == null ? new Base[0] : new Base[] { this.status }; // Enumeration<ClinicalImpressionStatus>
2329    case 2051346646:
2330      /* statusReason */ return this.statusReason == null ? new Base[0] : new Base[] { this.statusReason }; // CodeableConcept
2331    case 3059181:
2332      /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeableConcept
2333    case -1724546052:
2334      /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // StringType
2335    case -1867885268:
2336      /* subject */ return this.subject == null ? new Base[0] : new Base[] { this.subject }; // Reference
2337    case 1524132147:
2338      /* encounter */ return this.encounter == null ? new Base[0] : new Base[] { this.encounter }; // Reference
2339    case -1468651097:
2340      /* effective */ return this.effective == null ? new Base[0] : new Base[] { this.effective }; // Type
2341    case 3076014:
2342      /* date */ return this.date == null ? new Base[0] : new Base[] { this.date }; // DateTimeType
2343    case -373213113:
2344      /* assessor */ return this.assessor == null ? new Base[0] : new Base[] { this.assessor }; // Reference
2345    case -1273775369:
2346      /* previous */ return this.previous == null ? new Base[0] : new Base[] { this.previous }; // Reference
2347    case -309542241:
2348      /* problem */ return this.problem == null ? new Base[0] : this.problem.toArray(new Base[this.problem.size()]); // Reference
2349    case 956015362:
2350      /* investigation */ return this.investigation == null ? new Base[0]
2351          : this.investigation.toArray(new Base[this.investigation.size()]); // ClinicalImpressionInvestigationComponent
2352    case -989163880:
2353      /* protocol */ return this.protocol == null ? new Base[0] : this.protocol.toArray(new Base[this.protocol.size()]); // UriType
2354    case -1857640538:
2355      /* summary */ return this.summary == null ? new Base[0] : new Base[] { this.summary }; // StringType
2356    case -853173367:
2357      /* finding */ return this.finding == null ? new Base[0] : this.finding.toArray(new Base[this.finding.size()]); // ClinicalImpressionFindingComponent
2358    case -676337953:
2359      /* prognosisCodeableConcept */ return this.prognosisCodeableConcept == null ? new Base[0]
2360          : this.prognosisCodeableConcept.toArray(new Base[this.prognosisCodeableConcept.size()]); // CodeableConcept
2361    case -587137783:
2362      /* prognosisReference */ return this.prognosisReference == null ? new Base[0]
2363          : this.prognosisReference.toArray(new Base[this.prognosisReference.size()]); // Reference
2364    case 1922406657:
2365      /* supportingInfo */ return this.supportingInfo == null ? new Base[0]
2366          : this.supportingInfo.toArray(new Base[this.supportingInfo.size()]); // Reference
2367    case 3387378:
2368      /* note */ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
2369    default:
2370      return super.getProperty(hash, name, checkValid);
2371    }
2372
2373  }
2374
2375  @Override
2376  public Base setProperty(int hash, String name, Base value) throws FHIRException {
2377    switch (hash) {
2378    case -1618432855: // identifier
2379      this.getIdentifier().add(castToIdentifier(value)); // Identifier
2380      return value;
2381    case -892481550: // status
2382      value = new ClinicalImpressionStatusEnumFactory().fromType(castToCode(value));
2383      this.status = (Enumeration) value; // Enumeration<ClinicalImpressionStatus>
2384      return value;
2385    case 2051346646: // statusReason
2386      this.statusReason = castToCodeableConcept(value); // CodeableConcept
2387      return value;
2388    case 3059181: // code
2389      this.code = castToCodeableConcept(value); // CodeableConcept
2390      return value;
2391    case -1724546052: // description
2392      this.description = castToString(value); // StringType
2393      return value;
2394    case -1867885268: // subject
2395      this.subject = castToReference(value); // Reference
2396      return value;
2397    case 1524132147: // encounter
2398      this.encounter = castToReference(value); // Reference
2399      return value;
2400    case -1468651097: // effective
2401      this.effective = castToType(value); // Type
2402      return value;
2403    case 3076014: // date
2404      this.date = castToDateTime(value); // DateTimeType
2405      return value;
2406    case -373213113: // assessor
2407      this.assessor = castToReference(value); // Reference
2408      return value;
2409    case -1273775369: // previous
2410      this.previous = castToReference(value); // Reference
2411      return value;
2412    case -309542241: // problem
2413      this.getProblem().add(castToReference(value)); // Reference
2414      return value;
2415    case 956015362: // investigation
2416      this.getInvestigation().add((ClinicalImpressionInvestigationComponent) value); // ClinicalImpressionInvestigationComponent
2417      return value;
2418    case -989163880: // protocol
2419      this.getProtocol().add(castToUri(value)); // UriType
2420      return value;
2421    case -1857640538: // summary
2422      this.summary = castToString(value); // StringType
2423      return value;
2424    case -853173367: // finding
2425      this.getFinding().add((ClinicalImpressionFindingComponent) value); // ClinicalImpressionFindingComponent
2426      return value;
2427    case -676337953: // prognosisCodeableConcept
2428      this.getPrognosisCodeableConcept().add(castToCodeableConcept(value)); // CodeableConcept
2429      return value;
2430    case -587137783: // prognosisReference
2431      this.getPrognosisReference().add(castToReference(value)); // Reference
2432      return value;
2433    case 1922406657: // supportingInfo
2434      this.getSupportingInfo().add(castToReference(value)); // Reference
2435      return value;
2436    case 3387378: // note
2437      this.getNote().add(castToAnnotation(value)); // Annotation
2438      return value;
2439    default:
2440      return super.setProperty(hash, name, value);
2441    }
2442
2443  }
2444
2445  @Override
2446  public Base setProperty(String name, Base value) throws FHIRException {
2447    if (name.equals("identifier")) {
2448      this.getIdentifier().add(castToIdentifier(value));
2449    } else if (name.equals("status")) {
2450      value = new ClinicalImpressionStatusEnumFactory().fromType(castToCode(value));
2451      this.status = (Enumeration) value; // Enumeration<ClinicalImpressionStatus>
2452    } else if (name.equals("statusReason")) {
2453      this.statusReason = castToCodeableConcept(value); // CodeableConcept
2454    } else if (name.equals("code")) {
2455      this.code = castToCodeableConcept(value); // CodeableConcept
2456    } else if (name.equals("description")) {
2457      this.description = castToString(value); // StringType
2458    } else if (name.equals("subject")) {
2459      this.subject = castToReference(value); // Reference
2460    } else if (name.equals("encounter")) {
2461      this.encounter = castToReference(value); // Reference
2462    } else if (name.equals("effective[x]")) {
2463      this.effective = castToType(value); // Type
2464    } else if (name.equals("date")) {
2465      this.date = castToDateTime(value); // DateTimeType
2466    } else if (name.equals("assessor")) {
2467      this.assessor = castToReference(value); // Reference
2468    } else if (name.equals("previous")) {
2469      this.previous = castToReference(value); // Reference
2470    } else if (name.equals("problem")) {
2471      this.getProblem().add(castToReference(value));
2472    } else if (name.equals("investigation")) {
2473      this.getInvestigation().add((ClinicalImpressionInvestigationComponent) value);
2474    } else if (name.equals("protocol")) {
2475      this.getProtocol().add(castToUri(value));
2476    } else if (name.equals("summary")) {
2477      this.summary = castToString(value); // StringType
2478    } else if (name.equals("finding")) {
2479      this.getFinding().add((ClinicalImpressionFindingComponent) value);
2480    } else if (name.equals("prognosisCodeableConcept")) {
2481      this.getPrognosisCodeableConcept().add(castToCodeableConcept(value));
2482    } else if (name.equals("prognosisReference")) {
2483      this.getPrognosisReference().add(castToReference(value));
2484    } else if (name.equals("supportingInfo")) {
2485      this.getSupportingInfo().add(castToReference(value));
2486    } else if (name.equals("note")) {
2487      this.getNote().add(castToAnnotation(value));
2488    } else
2489      return super.setProperty(name, value);
2490    return value;
2491  }
2492
2493  @Override
2494  public void removeChild(String name, Base value) throws FHIRException {
2495    if (name.equals("identifier")) {
2496      this.getIdentifier().remove(castToIdentifier(value));
2497    } else if (name.equals("status")) {
2498      this.status = null;
2499    } else if (name.equals("statusReason")) {
2500      this.statusReason = null;
2501    } else if (name.equals("code")) {
2502      this.code = null;
2503    } else if (name.equals("description")) {
2504      this.description = null;
2505    } else if (name.equals("subject")) {
2506      this.subject = null;
2507    } else if (name.equals("encounter")) {
2508      this.encounter = null;
2509    } else if (name.equals("effective[x]")) {
2510      this.effective = null;
2511    } else if (name.equals("date")) {
2512      this.date = null;
2513    } else if (name.equals("assessor")) {
2514      this.assessor = null;
2515    } else if (name.equals("previous")) {
2516      this.previous = null;
2517    } else if (name.equals("problem")) {
2518      this.getProblem().remove(castToReference(value));
2519    } else if (name.equals("investigation")) {
2520      this.getInvestigation().remove((ClinicalImpressionInvestigationComponent) value);
2521    } else if (name.equals("protocol")) {
2522      this.getProtocol().remove(castToUri(value));
2523    } else if (name.equals("summary")) {
2524      this.summary = null;
2525    } else if (name.equals("finding")) {
2526      this.getFinding().remove((ClinicalImpressionFindingComponent) value);
2527    } else if (name.equals("prognosisCodeableConcept")) {
2528      this.getPrognosisCodeableConcept().remove(castToCodeableConcept(value));
2529    } else if (name.equals("prognosisReference")) {
2530      this.getPrognosisReference().remove(castToReference(value));
2531    } else if (name.equals("supportingInfo")) {
2532      this.getSupportingInfo().remove(castToReference(value));
2533    } else if (name.equals("note")) {
2534      this.getNote().remove(castToAnnotation(value));
2535    } else
2536      super.removeChild(name, value);
2537    
2538  }
2539
2540  @Override
2541  public Base makeProperty(int hash, String name) throws FHIRException {
2542    switch (hash) {
2543    case -1618432855:
2544      return addIdentifier();
2545    case -892481550:
2546      return getStatusElement();
2547    case 2051346646:
2548      return getStatusReason();
2549    case 3059181:
2550      return getCode();
2551    case -1724546052:
2552      return getDescriptionElement();
2553    case -1867885268:
2554      return getSubject();
2555    case 1524132147:
2556      return getEncounter();
2557    case 247104889:
2558      return getEffective();
2559    case -1468651097:
2560      return getEffective();
2561    case 3076014:
2562      return getDateElement();
2563    case -373213113:
2564      return getAssessor();
2565    case -1273775369:
2566      return getPrevious();
2567    case -309542241:
2568      return addProblem();
2569    case 956015362:
2570      return addInvestigation();
2571    case -989163880:
2572      return addProtocolElement();
2573    case -1857640538:
2574      return getSummaryElement();
2575    case -853173367:
2576      return addFinding();
2577    case -676337953:
2578      return addPrognosisCodeableConcept();
2579    case -587137783:
2580      return addPrognosisReference();
2581    case 1922406657:
2582      return addSupportingInfo();
2583    case 3387378:
2584      return addNote();
2585    default:
2586      return super.makeProperty(hash, name);
2587    }
2588
2589  }
2590
2591  @Override
2592  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2593    switch (hash) {
2594    case -1618432855:
2595      /* identifier */ return new String[] { "Identifier" };
2596    case -892481550:
2597      /* status */ return new String[] { "code" };
2598    case 2051346646:
2599      /* statusReason */ return new String[] { "CodeableConcept" };
2600    case 3059181:
2601      /* code */ return new String[] { "CodeableConcept" };
2602    case -1724546052:
2603      /* description */ return new String[] { "string" };
2604    case -1867885268:
2605      /* subject */ return new String[] { "Reference" };
2606    case 1524132147:
2607      /* encounter */ return new String[] { "Reference" };
2608    case -1468651097:
2609      /* effective */ return new String[] { "dateTime", "Period" };
2610    case 3076014:
2611      /* date */ return new String[] { "dateTime" };
2612    case -373213113:
2613      /* assessor */ return new String[] { "Reference" };
2614    case -1273775369:
2615      /* previous */ return new String[] { "Reference" };
2616    case -309542241:
2617      /* problem */ return new String[] { "Reference" };
2618    case 956015362:
2619      /* investigation */ return new String[] {};
2620    case -989163880:
2621      /* protocol */ return new String[] { "uri" };
2622    case -1857640538:
2623      /* summary */ return new String[] { "string" };
2624    case -853173367:
2625      /* finding */ return new String[] {};
2626    case -676337953:
2627      /* prognosisCodeableConcept */ return new String[] { "CodeableConcept" };
2628    case -587137783:
2629      /* prognosisReference */ return new String[] { "Reference" };
2630    case 1922406657:
2631      /* supportingInfo */ return new String[] { "Reference" };
2632    case 3387378:
2633      /* note */ return new String[] { "Annotation" };
2634    default:
2635      return super.getTypesForProperty(hash, name);
2636    }
2637
2638  }
2639
2640  @Override
2641  public Base addChild(String name) throws FHIRException {
2642    if (name.equals("identifier")) {
2643      return addIdentifier();
2644    } else if (name.equals("status")) {
2645      throw new FHIRException("Cannot call addChild on a singleton property ClinicalImpression.status");
2646    } else if (name.equals("statusReason")) {
2647      this.statusReason = new CodeableConcept();
2648      return this.statusReason;
2649    } else if (name.equals("code")) {
2650      this.code = new CodeableConcept();
2651      return this.code;
2652    } else if (name.equals("description")) {
2653      throw new FHIRException("Cannot call addChild on a singleton property ClinicalImpression.description");
2654    } else if (name.equals("subject")) {
2655      this.subject = new Reference();
2656      return this.subject;
2657    } else if (name.equals("encounter")) {
2658      this.encounter = new Reference();
2659      return this.encounter;
2660    } else if (name.equals("effectiveDateTime")) {
2661      this.effective = new DateTimeType();
2662      return this.effective;
2663    } else if (name.equals("effectivePeriod")) {
2664      this.effective = new Period();
2665      return this.effective;
2666    } else if (name.equals("date")) {
2667      throw new FHIRException("Cannot call addChild on a singleton property ClinicalImpression.date");
2668    } else if (name.equals("assessor")) {
2669      this.assessor = new Reference();
2670      return this.assessor;
2671    } else if (name.equals("previous")) {
2672      this.previous = new Reference();
2673      return this.previous;
2674    } else if (name.equals("problem")) {
2675      return addProblem();
2676    } else if (name.equals("investigation")) {
2677      return addInvestigation();
2678    } else if (name.equals("protocol")) {
2679      throw new FHIRException("Cannot call addChild on a singleton property ClinicalImpression.protocol");
2680    } else if (name.equals("summary")) {
2681      throw new FHIRException("Cannot call addChild on a singleton property ClinicalImpression.summary");
2682    } else if (name.equals("finding")) {
2683      return addFinding();
2684    } else if (name.equals("prognosisCodeableConcept")) {
2685      return addPrognosisCodeableConcept();
2686    } else if (name.equals("prognosisReference")) {
2687      return addPrognosisReference();
2688    } else if (name.equals("supportingInfo")) {
2689      return addSupportingInfo();
2690    } else if (name.equals("note")) {
2691      return addNote();
2692    } else
2693      return super.addChild(name);
2694  }
2695
2696  public String fhirType() {
2697    return "ClinicalImpression";
2698
2699  }
2700
2701  public ClinicalImpression copy() {
2702    ClinicalImpression dst = new ClinicalImpression();
2703    copyValues(dst);
2704    return dst;
2705  }
2706
2707  public void copyValues(ClinicalImpression dst) {
2708    super.copyValues(dst);
2709    if (identifier != null) {
2710      dst.identifier = new ArrayList<Identifier>();
2711      for (Identifier i : identifier)
2712        dst.identifier.add(i.copy());
2713    }
2714    ;
2715    dst.status = status == null ? null : status.copy();
2716    dst.statusReason = statusReason == null ? null : statusReason.copy();
2717    dst.code = code == null ? null : code.copy();
2718    dst.description = description == null ? null : description.copy();
2719    dst.subject = subject == null ? null : subject.copy();
2720    dst.encounter = encounter == null ? null : encounter.copy();
2721    dst.effective = effective == null ? null : effective.copy();
2722    dst.date = date == null ? null : date.copy();
2723    dst.assessor = assessor == null ? null : assessor.copy();
2724    dst.previous = previous == null ? null : previous.copy();
2725    if (problem != null) {
2726      dst.problem = new ArrayList<Reference>();
2727      for (Reference i : problem)
2728        dst.problem.add(i.copy());
2729    }
2730    ;
2731    if (investigation != null) {
2732      dst.investigation = new ArrayList<ClinicalImpressionInvestigationComponent>();
2733      for (ClinicalImpressionInvestigationComponent i : investigation)
2734        dst.investigation.add(i.copy());
2735    }
2736    ;
2737    if (protocol != null) {
2738      dst.protocol = new ArrayList<UriType>();
2739      for (UriType i : protocol)
2740        dst.protocol.add(i.copy());
2741    }
2742    ;
2743    dst.summary = summary == null ? null : summary.copy();
2744    if (finding != null) {
2745      dst.finding = new ArrayList<ClinicalImpressionFindingComponent>();
2746      for (ClinicalImpressionFindingComponent i : finding)
2747        dst.finding.add(i.copy());
2748    }
2749    ;
2750    if (prognosisCodeableConcept != null) {
2751      dst.prognosisCodeableConcept = new ArrayList<CodeableConcept>();
2752      for (CodeableConcept i : prognosisCodeableConcept)
2753        dst.prognosisCodeableConcept.add(i.copy());
2754    }
2755    ;
2756    if (prognosisReference != null) {
2757      dst.prognosisReference = new ArrayList<Reference>();
2758      for (Reference i : prognosisReference)
2759        dst.prognosisReference.add(i.copy());
2760    }
2761    ;
2762    if (supportingInfo != null) {
2763      dst.supportingInfo = new ArrayList<Reference>();
2764      for (Reference i : supportingInfo)
2765        dst.supportingInfo.add(i.copy());
2766    }
2767    ;
2768    if (note != null) {
2769      dst.note = new ArrayList<Annotation>();
2770      for (Annotation i : note)
2771        dst.note.add(i.copy());
2772    }
2773    ;
2774  }
2775
2776  protected ClinicalImpression typedCopy() {
2777    return copy();
2778  }
2779
2780  @Override
2781  public boolean equalsDeep(Base other_) {
2782    if (!super.equalsDeep(other_))
2783      return false;
2784    if (!(other_ instanceof ClinicalImpression))
2785      return false;
2786    ClinicalImpression o = (ClinicalImpression) other_;
2787    return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true)
2788        && compareDeep(statusReason, o.statusReason, true) && compareDeep(code, o.code, true)
2789        && compareDeep(description, o.description, true) && compareDeep(subject, o.subject, true)
2790        && compareDeep(encounter, o.encounter, true) && compareDeep(effective, o.effective, true)
2791        && compareDeep(date, o.date, true) && compareDeep(assessor, o.assessor, true)
2792        && compareDeep(previous, o.previous, true) && compareDeep(problem, o.problem, true)
2793        && compareDeep(investigation, o.investigation, true) && compareDeep(protocol, o.protocol, true)
2794        && compareDeep(summary, o.summary, true) && compareDeep(finding, o.finding, true)
2795        && compareDeep(prognosisCodeableConcept, o.prognosisCodeableConcept, true)
2796        && compareDeep(prognosisReference, o.prognosisReference, true)
2797        && compareDeep(supportingInfo, o.supportingInfo, true) && compareDeep(note, o.note, true);
2798  }
2799
2800  @Override
2801  public boolean equalsShallow(Base other_) {
2802    if (!super.equalsShallow(other_))
2803      return false;
2804    if (!(other_ instanceof ClinicalImpression))
2805      return false;
2806    ClinicalImpression o = (ClinicalImpression) other_;
2807    return compareValues(status, o.status, true) && compareValues(description, o.description, true)
2808        && compareValues(date, o.date, true) && compareValues(protocol, o.protocol, true)
2809        && compareValues(summary, o.summary, true);
2810  }
2811
2812  public boolean isEmpty() {
2813    return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, statusReason, code, description,
2814        subject, encounter, effective, date, assessor, previous, problem, investigation, protocol, summary, finding,
2815        prognosisCodeableConcept, prognosisReference, supportingInfo, note);
2816  }
2817
2818  @Override
2819  public ResourceType getResourceType() {
2820    return ResourceType.ClinicalImpression;
2821  }
2822
2823  /**
2824   * Search parameter: <b>date</b>
2825   * <p>
2826   * Description: <b>When the assessment was documented</b><br>
2827   * Type: <b>date</b><br>
2828   * Path: <b>ClinicalImpression.date</b><br>
2829   * </p>
2830   */
2831  @SearchParamDefinition(name = "date", path = "ClinicalImpression.date", description = "When the assessment was documented", type = "date")
2832  public static final String SP_DATE = "date";
2833  /**
2834   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2835   * <p>
2836   * Description: <b>When the assessment was documented</b><br>
2837   * Type: <b>date</b><br>
2838   * Path: <b>ClinicalImpression.date</b><br>
2839   * </p>
2840   */
2841  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(
2842      SP_DATE);
2843
2844  /**
2845   * Search parameter: <b>identifier</b>
2846   * <p>
2847   * Description: <b>Business identifier</b><br>
2848   * Type: <b>token</b><br>
2849   * Path: <b>ClinicalImpression.identifier</b><br>
2850   * </p>
2851   */
2852  @SearchParamDefinition(name = "identifier", path = "ClinicalImpression.identifier", description = "Business identifier", type = "token")
2853  public static final String SP_IDENTIFIER = "identifier";
2854  /**
2855   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2856   * <p>
2857   * Description: <b>Business identifier</b><br>
2858   * Type: <b>token</b><br>
2859   * Path: <b>ClinicalImpression.identifier</b><br>
2860   * </p>
2861   */
2862  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(
2863      SP_IDENTIFIER);
2864
2865  /**
2866   * Search parameter: <b>previous</b>
2867   * <p>
2868   * Description: <b>Reference to last assessment</b><br>
2869   * Type: <b>reference</b><br>
2870   * Path: <b>ClinicalImpression.previous</b><br>
2871   * </p>
2872   */
2873  @SearchParamDefinition(name = "previous", path = "ClinicalImpression.previous", description = "Reference to last assessment", type = "reference", target = {
2874      ClinicalImpression.class })
2875  public static final String SP_PREVIOUS = "previous";
2876  /**
2877   * <b>Fluent Client</b> search parameter constant for <b>previous</b>
2878   * <p>
2879   * Description: <b>Reference to last assessment</b><br>
2880   * Type: <b>reference</b><br>
2881   * Path: <b>ClinicalImpression.previous</b><br>
2882   * </p>
2883   */
2884  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PREVIOUS = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
2885      SP_PREVIOUS);
2886
2887  /**
2888   * Constant for fluent queries to be used to add include statements. Specifies
2889   * the path value of "<b>ClinicalImpression:previous</b>".
2890   */
2891  public static final ca.uhn.fhir.model.api.Include INCLUDE_PREVIOUS = new ca.uhn.fhir.model.api.Include(
2892      "ClinicalImpression:previous").toLocked();
2893
2894  /**
2895   * Search parameter: <b>finding-code</b>
2896   * <p>
2897   * Description: <b>What was found</b><br>
2898   * Type: <b>token</b><br>
2899   * Path: <b>ClinicalImpression.finding.itemCodeableConcept</b><br>
2900   * </p>
2901   */
2902  @SearchParamDefinition(name = "finding-code", path = "ClinicalImpression.finding.itemCodeableConcept", description = "What was found", type = "token")
2903  public static final String SP_FINDING_CODE = "finding-code";
2904  /**
2905   * <b>Fluent Client</b> search parameter constant for <b>finding-code</b>
2906   * <p>
2907   * Description: <b>What was found</b><br>
2908   * Type: <b>token</b><br>
2909   * Path: <b>ClinicalImpression.finding.itemCodeableConcept</b><br>
2910   * </p>
2911   */
2912  public static final ca.uhn.fhir.rest.gclient.TokenClientParam FINDING_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(
2913      SP_FINDING_CODE);
2914
2915  /**
2916   * Search parameter: <b>assessor</b>
2917   * <p>
2918   * Description: <b>The clinician performing the assessment</b><br>
2919   * Type: <b>reference</b><br>
2920   * Path: <b>ClinicalImpression.assessor</b><br>
2921   * </p>
2922   */
2923  @SearchParamDefinition(name = "assessor", path = "ClinicalImpression.assessor", description = "The clinician performing the assessment", type = "reference", providesMembershipIn = {
2924      @ca.uhn.fhir.model.api.annotation.Compartment(name = "Practitioner") }, target = { Practitioner.class,
2925          PractitionerRole.class })
2926  public static final String SP_ASSESSOR = "assessor";
2927  /**
2928   * <b>Fluent Client</b> search parameter constant for <b>assessor</b>
2929   * <p>
2930   * Description: <b>The clinician performing the assessment</b><br>
2931   * Type: <b>reference</b><br>
2932   * Path: <b>ClinicalImpression.assessor</b><br>
2933   * </p>
2934   */
2935  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ASSESSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
2936      SP_ASSESSOR);
2937
2938  /**
2939   * Constant for fluent queries to be used to add include statements. Specifies
2940   * the path value of "<b>ClinicalImpression:assessor</b>".
2941   */
2942  public static final ca.uhn.fhir.model.api.Include INCLUDE_ASSESSOR = new ca.uhn.fhir.model.api.Include(
2943      "ClinicalImpression:assessor").toLocked();
2944
2945  /**
2946   * Search parameter: <b>subject</b>
2947   * <p>
2948   * Description: <b>Patient or group assessed</b><br>
2949   * Type: <b>reference</b><br>
2950   * Path: <b>ClinicalImpression.subject</b><br>
2951   * </p>
2952   */
2953  @SearchParamDefinition(name = "subject", path = "ClinicalImpression.subject", description = "Patient or group assessed", type = "reference", providesMembershipIn = {
2954      @ca.uhn.fhir.model.api.annotation.Compartment(name = "Patient") }, target = { Group.class, Patient.class })
2955  public static final String SP_SUBJECT = "subject";
2956  /**
2957   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
2958   * <p>
2959   * Description: <b>Patient or group assessed</b><br>
2960   * Type: <b>reference</b><br>
2961   * Path: <b>ClinicalImpression.subject</b><br>
2962   * </p>
2963   */
2964  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
2965      SP_SUBJECT);
2966
2967  /**
2968   * Constant for fluent queries to be used to add include statements. Specifies
2969   * the path value of "<b>ClinicalImpression:subject</b>".
2970   */
2971  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include(
2972      "ClinicalImpression:subject").toLocked();
2973
2974  /**
2975   * Search parameter: <b>encounter</b>
2976   * <p>
2977   * Description: <b>Encounter created as part of</b><br>
2978   * Type: <b>reference</b><br>
2979   * Path: <b>ClinicalImpression.encounter</b><br>
2980   * </p>
2981   */
2982  @SearchParamDefinition(name = "encounter", path = "ClinicalImpression.encounter", description = "Encounter created as part of", type = "reference", providesMembershipIn = {
2983      @ca.uhn.fhir.model.api.annotation.Compartment(name = "Encounter") }, target = { Encounter.class })
2984  public static final String SP_ENCOUNTER = "encounter";
2985  /**
2986   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
2987   * <p>
2988   * Description: <b>Encounter created as part of</b><br>
2989   * Type: <b>reference</b><br>
2990   * Path: <b>ClinicalImpression.encounter</b><br>
2991   * </p>
2992   */
2993  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
2994      SP_ENCOUNTER);
2995
2996  /**
2997   * Constant for fluent queries to be used to add include statements. Specifies
2998   * the path value of "<b>ClinicalImpression:encounter</b>".
2999   */
3000  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include(
3001      "ClinicalImpression:encounter").toLocked();
3002
3003  /**
3004   * Search parameter: <b>finding-ref</b>
3005   * <p>
3006   * Description: <b>What was found</b><br>
3007   * Type: <b>reference</b><br>
3008   * Path: <b>ClinicalImpression.finding.itemReference</b><br>
3009   * </p>
3010   */
3011  @SearchParamDefinition(name = "finding-ref", path = "ClinicalImpression.finding.itemReference", description = "What was found", type = "reference", target = {
3012      Condition.class, Media.class, Observation.class })
3013  public static final String SP_FINDING_REF = "finding-ref";
3014  /**
3015   * <b>Fluent Client</b> search parameter constant for <b>finding-ref</b>
3016   * <p>
3017   * Description: <b>What was found</b><br>
3018   * Type: <b>reference</b><br>
3019   * Path: <b>ClinicalImpression.finding.itemReference</b><br>
3020   * </p>
3021   */
3022  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam FINDING_REF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
3023      SP_FINDING_REF);
3024
3025  /**
3026   * Constant for fluent queries to be used to add include statements. Specifies
3027   * the path value of "<b>ClinicalImpression:finding-ref</b>".
3028   */
3029  public static final ca.uhn.fhir.model.api.Include INCLUDE_FINDING_REF = new ca.uhn.fhir.model.api.Include(
3030      "ClinicalImpression:finding-ref").toLocked();
3031
3032  /**
3033   * Search parameter: <b>problem</b>
3034   * <p>
3035   * Description: <b>Relevant impressions of patient state</b><br>
3036   * Type: <b>reference</b><br>
3037   * Path: <b>ClinicalImpression.problem</b><br>
3038   * </p>
3039   */
3040  @SearchParamDefinition(name = "problem", path = "ClinicalImpression.problem", description = "Relevant impressions of patient state", type = "reference", target = {
3041      AllergyIntolerance.class, Condition.class })
3042  public static final String SP_PROBLEM = "problem";
3043  /**
3044   * <b>Fluent Client</b> search parameter constant for <b>problem</b>
3045   * <p>
3046   * Description: <b>Relevant impressions of patient state</b><br>
3047   * Type: <b>reference</b><br>
3048   * Path: <b>ClinicalImpression.problem</b><br>
3049   * </p>
3050   */
3051  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PROBLEM = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
3052      SP_PROBLEM);
3053
3054  /**
3055   * Constant for fluent queries to be used to add include statements. Specifies
3056   * the path value of "<b>ClinicalImpression:problem</b>".
3057   */
3058  public static final ca.uhn.fhir.model.api.Include INCLUDE_PROBLEM = new ca.uhn.fhir.model.api.Include(
3059      "ClinicalImpression:problem").toLocked();
3060
3061  /**
3062   * Search parameter: <b>patient</b>
3063   * <p>
3064   * Description: <b>Patient or group assessed</b><br>
3065   * Type: <b>reference</b><br>
3066   * Path: <b>ClinicalImpression.subject</b><br>
3067   * </p>
3068   */
3069  @SearchParamDefinition(name = "patient", path = "ClinicalImpression.subject.where(resolve() is Patient)", description = "Patient or group assessed", type = "reference", target = {
3070      Patient.class })
3071  public static final String SP_PATIENT = "patient";
3072  /**
3073   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3074   * <p>
3075   * Description: <b>Patient or group assessed</b><br>
3076   * Type: <b>reference</b><br>
3077   * Path: <b>ClinicalImpression.subject</b><br>
3078   * </p>
3079   */
3080  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
3081      SP_PATIENT);
3082
3083  /**
3084   * Constant for fluent queries to be used to add include statements. Specifies
3085   * the path value of "<b>ClinicalImpression:patient</b>".
3086   */
3087  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include(
3088      "ClinicalImpression:patient").toLocked();
3089
3090  /**
3091   * Search parameter: <b>supporting-info</b>
3092   * <p>
3093   * Description: <b>Information supporting the clinical impression</b><br>
3094   * Type: <b>reference</b><br>
3095   * Path: <b>ClinicalImpression.supportingInfo</b><br>
3096   * </p>
3097   */
3098  @SearchParamDefinition(name = "supporting-info", path = "ClinicalImpression.supportingInfo", description = "Information supporting the clinical impression", type = "reference")
3099  public static final String SP_SUPPORTING_INFO = "supporting-info";
3100  /**
3101   * <b>Fluent Client</b> search parameter constant for <b>supporting-info</b>
3102   * <p>
3103   * Description: <b>Information supporting the clinical impression</b><br>
3104   * Type: <b>reference</b><br>
3105   * Path: <b>ClinicalImpression.supportingInfo</b><br>
3106   * </p>
3107   */
3108  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUPPORTING_INFO = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
3109      SP_SUPPORTING_INFO);
3110
3111  /**
3112   * Constant for fluent queries to be used to add include statements. Specifies
3113   * the path value of "<b>ClinicalImpression:supporting-info</b>".
3114   */
3115  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUPPORTING_INFO = new ca.uhn.fhir.model.api.Include(
3116      "ClinicalImpression:supporting-info").toLocked();
3117
3118  /**
3119   * Search parameter: <b>investigation</b>
3120   * <p>
3121   * Description: <b>Record of a specific investigation</b><br>
3122   * Type: <b>reference</b><br>
3123   * Path: <b>ClinicalImpression.investigation.item</b><br>
3124   * </p>
3125   */
3126  @SearchParamDefinition(name = "investigation", path = "ClinicalImpression.investigation.item", description = "Record of a specific investigation", type = "reference", target = {
3127      DiagnosticReport.class, FamilyMemberHistory.class, ImagingStudy.class, Media.class, Observation.class,
3128      QuestionnaireResponse.class, RiskAssessment.class })
3129  public static final String SP_INVESTIGATION = "investigation";
3130  /**
3131   * <b>Fluent Client</b> search parameter constant for <b>investigation</b>
3132   * <p>
3133   * Description: <b>Record of a specific investigation</b><br>
3134   * Type: <b>reference</b><br>
3135   * Path: <b>ClinicalImpression.investigation.item</b><br>
3136   * </p>
3137   */
3138  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INVESTIGATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
3139      SP_INVESTIGATION);
3140
3141  /**
3142   * Constant for fluent queries to be used to add include statements. Specifies
3143   * the path value of "<b>ClinicalImpression:investigation</b>".
3144   */
3145  public static final ca.uhn.fhir.model.api.Include INCLUDE_INVESTIGATION = new ca.uhn.fhir.model.api.Include(
3146      "ClinicalImpression:investigation").toLocked();
3147
3148  /**
3149   * Search parameter: <b>status</b>
3150   * <p>
3151   * Description: <b>in-progress | completed | entered-in-error</b><br>
3152   * Type: <b>token</b><br>
3153   * Path: <b>ClinicalImpression.status</b><br>
3154   * </p>
3155   */
3156  @SearchParamDefinition(name = "status", path = "ClinicalImpression.status", description = "in-progress | completed | entered-in-error", type = "token")
3157  public static final String SP_STATUS = "status";
3158  /**
3159   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3160   * <p>
3161   * Description: <b>in-progress | completed | entered-in-error</b><br>
3162   * Type: <b>token</b><br>
3163   * Path: <b>ClinicalImpression.status</b><br>
3164   * </p>
3165   */
3166  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3167      SP_STATUS);
3168
3169}