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