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