001package org.hl7.fhir.r4.model;
002
003
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034
035// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
036
037import java.util.*;
038
039import org.hl7.fhir.utilities.Utilities;
040import ca.uhn.fhir.model.api.annotation.ResourceDef;
041import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
042import ca.uhn.fhir.model.api.annotation.Child;
043import ca.uhn.fhir.model.api.annotation.ChildOrder;
044import ca.uhn.fhir.model.api.annotation.Description;
045import ca.uhn.fhir.model.api.annotation.Block;
046import org.hl7.fhir.instance.model.api.*;
047import org.hl7.fhir.exceptions.FHIRException;
048/**
049 * Describes the intended objective(s) for a patient, group or organization care, for example, weight loss, restoring an activity of daily living, obtaining herd immunity via immunization, meeting a process improvement objective, etc.
050 */
051@ResourceDef(name="Goal", profile="http://hl7.org/fhir/StructureDefinition/Goal")
052public class Goal extends DomainResource {
053
054    public enum GoalLifecycleStatus {
055        /**
056         * A goal is proposed for this patient.
057         */
058        PROPOSED, 
059        /**
060         * A goal is planned for this patient.
061         */
062        PLANNED, 
063        /**
064         * A proposed goal was accepted or acknowledged.
065         */
066        ACCEPTED, 
067        /**
068         * The goal is being sought actively.
069         */
070        ACTIVE, 
071        /**
072         * The goal remains a long term objective but is no longer being actively pursued for a temporary period of time.
073         */
074        ONHOLD, 
075        /**
076         * The goal is no longer being sought.
077         */
078        COMPLETED, 
079        /**
080         * The goal has been abandoned.
081         */
082        CANCELLED, 
083        /**
084         * The goal was entered in error and voided.
085         */
086        ENTEREDINERROR, 
087        /**
088         * A proposed goal was rejected.
089         */
090        REJECTED, 
091        /**
092         * added to help the parsers with the generic types
093         */
094        NULL;
095        public static GoalLifecycleStatus fromCode(String codeString) throws FHIRException {
096            if (codeString == null || "".equals(codeString))
097                return null;
098        if ("proposed".equals(codeString))
099          return PROPOSED;
100        if ("planned".equals(codeString))
101          return PLANNED;
102        if ("accepted".equals(codeString))
103          return ACCEPTED;
104        if ("active".equals(codeString))
105          return ACTIVE;
106        if ("on-hold".equals(codeString))
107          return ONHOLD;
108        if ("completed".equals(codeString))
109          return COMPLETED;
110        if ("cancelled".equals(codeString))
111          return CANCELLED;
112        if ("entered-in-error".equals(codeString))
113          return ENTEREDINERROR;
114        if ("rejected".equals(codeString))
115          return REJECTED;
116        if (Configuration.isAcceptInvalidEnums())
117          return null;
118        else
119          throw new FHIRException("Unknown GoalLifecycleStatus code '"+codeString+"'");
120        }
121        public String toCode() {
122          switch (this) {
123            case PROPOSED: return "proposed";
124            case PLANNED: return "planned";
125            case ACCEPTED: return "accepted";
126            case ACTIVE: return "active";
127            case ONHOLD: return "on-hold";
128            case COMPLETED: return "completed";
129            case CANCELLED: return "cancelled";
130            case ENTEREDINERROR: return "entered-in-error";
131            case REJECTED: return "rejected";
132            default: return "?";
133          }
134        }
135        public String getSystem() {
136          switch (this) {
137            case PROPOSED: return "http://hl7.org/fhir/goal-status";
138            case PLANNED: return "http://hl7.org/fhir/goal-status";
139            case ACCEPTED: return "http://hl7.org/fhir/goal-status";
140            case ACTIVE: return "http://hl7.org/fhir/goal-status";
141            case ONHOLD: return "http://hl7.org/fhir/goal-status";
142            case COMPLETED: return "http://hl7.org/fhir/goal-status";
143            case CANCELLED: return "http://hl7.org/fhir/goal-status";
144            case ENTEREDINERROR: return "http://hl7.org/fhir/goal-status";
145            case REJECTED: return "http://hl7.org/fhir/goal-status";
146            default: return "?";
147          }
148        }
149        public String getDefinition() {
150          switch (this) {
151            case PROPOSED: return "A goal is proposed for this patient.";
152            case PLANNED: return "A goal is planned for this patient.";
153            case ACCEPTED: return "A proposed goal was accepted or acknowledged.";
154            case ACTIVE: return "The goal is being sought actively.";
155            case ONHOLD: return "The goal remains a long term objective but is no longer being actively pursued for a temporary period of time.";
156            case COMPLETED: return "The goal is no longer being sought.";
157            case CANCELLED: return "The goal has been abandoned.";
158            case ENTEREDINERROR: return "The goal was entered in error and voided.";
159            case REJECTED: return "A proposed goal was rejected.";
160            default: return "?";
161          }
162        }
163        public String getDisplay() {
164          switch (this) {
165            case PROPOSED: return "Proposed";
166            case PLANNED: return "Planned";
167            case ACCEPTED: return "Accepted";
168            case ACTIVE: return "Active";
169            case ONHOLD: return "On Hold";
170            case COMPLETED: return "Completed";
171            case CANCELLED: return "Cancelled";
172            case ENTEREDINERROR: return "Entered in Error";
173            case REJECTED: return "Rejected";
174            default: return "?";
175          }
176        }
177    }
178
179  public static class GoalLifecycleStatusEnumFactory implements EnumFactory<GoalLifecycleStatus> {
180    public GoalLifecycleStatus fromCode(String codeString) throws IllegalArgumentException {
181      if (codeString == null || "".equals(codeString))
182            if (codeString == null || "".equals(codeString))
183                return null;
184        if ("proposed".equals(codeString))
185          return GoalLifecycleStatus.PROPOSED;
186        if ("planned".equals(codeString))
187          return GoalLifecycleStatus.PLANNED;
188        if ("accepted".equals(codeString))
189          return GoalLifecycleStatus.ACCEPTED;
190        if ("active".equals(codeString))
191          return GoalLifecycleStatus.ACTIVE;
192        if ("on-hold".equals(codeString))
193          return GoalLifecycleStatus.ONHOLD;
194        if ("completed".equals(codeString))
195          return GoalLifecycleStatus.COMPLETED;
196        if ("cancelled".equals(codeString))
197          return GoalLifecycleStatus.CANCELLED;
198        if ("entered-in-error".equals(codeString))
199          return GoalLifecycleStatus.ENTEREDINERROR;
200        if ("rejected".equals(codeString))
201          return GoalLifecycleStatus.REJECTED;
202        throw new IllegalArgumentException("Unknown GoalLifecycleStatus code '"+codeString+"'");
203        }
204        public Enumeration<GoalLifecycleStatus> fromType(Base code) throws FHIRException {
205          if (code == null)
206            return null;
207          if (code.isEmpty())
208            return new Enumeration<GoalLifecycleStatus>(this);
209          String codeString = ((PrimitiveType) code).asStringValue();
210          if (codeString == null || "".equals(codeString))
211            return null;
212        if ("proposed".equals(codeString))
213          return new Enumeration<GoalLifecycleStatus>(this, GoalLifecycleStatus.PROPOSED);
214        if ("planned".equals(codeString))
215          return new Enumeration<GoalLifecycleStatus>(this, GoalLifecycleStatus.PLANNED);
216        if ("accepted".equals(codeString))
217          return new Enumeration<GoalLifecycleStatus>(this, GoalLifecycleStatus.ACCEPTED);
218        if ("active".equals(codeString))
219          return new Enumeration<GoalLifecycleStatus>(this, GoalLifecycleStatus.ACTIVE);
220        if ("on-hold".equals(codeString))
221          return new Enumeration<GoalLifecycleStatus>(this, GoalLifecycleStatus.ONHOLD);
222        if ("completed".equals(codeString))
223          return new Enumeration<GoalLifecycleStatus>(this, GoalLifecycleStatus.COMPLETED);
224        if ("cancelled".equals(codeString))
225          return new Enumeration<GoalLifecycleStatus>(this, GoalLifecycleStatus.CANCELLED);
226        if ("entered-in-error".equals(codeString))
227          return new Enumeration<GoalLifecycleStatus>(this, GoalLifecycleStatus.ENTEREDINERROR);
228        if ("rejected".equals(codeString))
229          return new Enumeration<GoalLifecycleStatus>(this, GoalLifecycleStatus.REJECTED);
230        throw new FHIRException("Unknown GoalLifecycleStatus code '"+codeString+"'");
231        }
232    public String toCode(GoalLifecycleStatus code) {
233      if (code == GoalLifecycleStatus.PROPOSED)
234        return "proposed";
235      if (code == GoalLifecycleStatus.PLANNED)
236        return "planned";
237      if (code == GoalLifecycleStatus.ACCEPTED)
238        return "accepted";
239      if (code == GoalLifecycleStatus.ACTIVE)
240        return "active";
241      if (code == GoalLifecycleStatus.ONHOLD)
242        return "on-hold";
243      if (code == GoalLifecycleStatus.COMPLETED)
244        return "completed";
245      if (code == GoalLifecycleStatus.CANCELLED)
246        return "cancelled";
247      if (code == GoalLifecycleStatus.ENTEREDINERROR)
248        return "entered-in-error";
249      if (code == GoalLifecycleStatus.REJECTED)
250        return "rejected";
251      return "?";
252      }
253    public String toSystem(GoalLifecycleStatus code) {
254      return code.getSystem();
255      }
256    }
257
258    @Block()
259    public static class GoalTargetComponent extends BackboneElement implements IBaseBackboneElement {
260        /**
261         * The parameter whose value is being tracked, e.g. body weight, blood pressure, or hemoglobin A1c level.
262         */
263        @Child(name = "measure", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
264        @Description(shortDefinition="The parameter whose value is being tracked", formalDefinition="The parameter whose value is being tracked, e.g. body weight, blood pressure, or hemoglobin A1c level." )
265        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-codes")
266        protected CodeableConcept measure;
267
268        /**
269         * The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.
270         */
271        @Child(name = "detail", type = {Quantity.class, Range.class, CodeableConcept.class, StringType.class, BooleanType.class, IntegerType.class, Ratio.class}, order=2, min=0, max=1, modifier=false, summary=true)
272        @Description(shortDefinition="The target value to be achieved", formalDefinition="The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value." )
273        protected Type detail;
274
275        /**
276         * Indicates either the date or the duration after start by which the goal should be met.
277         */
278        @Child(name = "due", type = {DateType.class, Duration.class}, order=3, min=0, max=1, modifier=false, summary=true)
279        @Description(shortDefinition="Reach goal on or before", formalDefinition="Indicates either the date or the duration after start by which the goal should be met." )
280        protected Type due;
281
282        private static final long serialVersionUID = -585108934L;
283
284    /**
285     * Constructor
286     */
287      public GoalTargetComponent() {
288        super();
289      }
290
291        /**
292         * @return {@link #measure} (The parameter whose value is being tracked, e.g. body weight, blood pressure, or hemoglobin A1c level.)
293         */
294        public CodeableConcept getMeasure() { 
295          if (this.measure == null)
296            if (Configuration.errorOnAutoCreate())
297              throw new Error("Attempt to auto-create GoalTargetComponent.measure");
298            else if (Configuration.doAutoCreate())
299              this.measure = new CodeableConcept(); // cc
300          return this.measure;
301        }
302
303        public boolean hasMeasure() { 
304          return this.measure != null && !this.measure.isEmpty();
305        }
306
307        /**
308         * @param value {@link #measure} (The parameter whose value is being tracked, e.g. body weight, blood pressure, or hemoglobin A1c level.)
309         */
310        public GoalTargetComponent setMeasure(CodeableConcept value) { 
311          this.measure = value;
312          return this;
313        }
314
315        /**
316         * @return {@link #detail} (The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.)
317         */
318        public Type getDetail() { 
319          return this.detail;
320        }
321
322        /**
323         * @return {@link #detail} (The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.)
324         */
325        public Quantity getDetailQuantity() throws FHIRException { 
326          if (this.detail == null)
327            this.detail = new Quantity();
328          if (!(this.detail instanceof Quantity))
329            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.detail.getClass().getName()+" was encountered");
330          return (Quantity) this.detail;
331        }
332
333        public boolean hasDetailQuantity() { 
334          return this != null && this.detail instanceof Quantity;
335        }
336
337        /**
338         * @return {@link #detail} (The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.)
339         */
340        public Range getDetailRange() throws FHIRException { 
341          if (this.detail == null)
342            this.detail = new Range();
343          if (!(this.detail instanceof Range))
344            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.detail.getClass().getName()+" was encountered");
345          return (Range) this.detail;
346        }
347
348        public boolean hasDetailRange() { 
349          return this != null && this.detail instanceof Range;
350        }
351
352        /**
353         * @return {@link #detail} (The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.)
354         */
355        public CodeableConcept getDetailCodeableConcept() throws FHIRException { 
356          if (this.detail == null)
357            this.detail = new CodeableConcept();
358          if (!(this.detail instanceof CodeableConcept))
359            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.detail.getClass().getName()+" was encountered");
360          return (CodeableConcept) this.detail;
361        }
362
363        public boolean hasDetailCodeableConcept() { 
364          return this != null && this.detail instanceof CodeableConcept;
365        }
366
367        /**
368         * @return {@link #detail} (The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.)
369         */
370        public StringType getDetailStringType() throws FHIRException { 
371          if (this.detail == null)
372            this.detail = new StringType();
373          if (!(this.detail instanceof StringType))
374            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.detail.getClass().getName()+" was encountered");
375          return (StringType) this.detail;
376        }
377
378        public boolean hasDetailStringType() { 
379          return this != null && this.detail instanceof StringType;
380        }
381
382        /**
383         * @return {@link #detail} (The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.)
384         */
385        public BooleanType getDetailBooleanType() throws FHIRException { 
386          if (this.detail == null)
387            this.detail = new BooleanType();
388          if (!(this.detail instanceof BooleanType))
389            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.detail.getClass().getName()+" was encountered");
390          return (BooleanType) this.detail;
391        }
392
393        public boolean hasDetailBooleanType() { 
394          return this != null && this.detail instanceof BooleanType;
395        }
396
397        /**
398         * @return {@link #detail} (The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.)
399         */
400        public IntegerType getDetailIntegerType() throws FHIRException { 
401          if (this.detail == null)
402            this.detail = new IntegerType();
403          if (!(this.detail instanceof IntegerType))
404            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.detail.getClass().getName()+" was encountered");
405          return (IntegerType) this.detail;
406        }
407
408        public boolean hasDetailIntegerType() { 
409          return this != null && this.detail instanceof IntegerType;
410        }
411
412        /**
413         * @return {@link #detail} (The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.)
414         */
415        public Ratio getDetailRatio() throws FHIRException { 
416          if (this.detail == null)
417            this.detail = new Ratio();
418          if (!(this.detail instanceof Ratio))
419            throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.detail.getClass().getName()+" was encountered");
420          return (Ratio) this.detail;
421        }
422
423        public boolean hasDetailRatio() { 
424          return this != null && this.detail instanceof Ratio;
425        }
426
427        public boolean hasDetail() { 
428          return this.detail != null && !this.detail.isEmpty();
429        }
430
431        /**
432         * @param value {@link #detail} (The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.)
433         */
434        public GoalTargetComponent setDetail(Type value) { 
435          if (value != null && !(value instanceof Quantity || value instanceof Range || value instanceof CodeableConcept || value instanceof StringType || value instanceof BooleanType || value instanceof IntegerType || value instanceof Ratio))
436            throw new Error("Not the right type for Goal.target.detail[x]: "+value.fhirType());
437          this.detail = value;
438          return this;
439        }
440
441        /**
442         * @return {@link #due} (Indicates either the date or the duration after start by which the goal should be met.)
443         */
444        public Type getDue() { 
445          return this.due;
446        }
447
448        /**
449         * @return {@link #due} (Indicates either the date or the duration after start by which the goal should be met.)
450         */
451        public DateType getDueDateType() throws FHIRException { 
452          if (this.due == null)
453            this.due = new DateType();
454          if (!(this.due instanceof DateType))
455            throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.due.getClass().getName()+" was encountered");
456          return (DateType) this.due;
457        }
458
459        public boolean hasDueDateType() { 
460          return this != null && this.due instanceof DateType;
461        }
462
463        /**
464         * @return {@link #due} (Indicates either the date or the duration after start by which the goal should be met.)
465         */
466        public Duration getDueDuration() throws FHIRException { 
467          if (this.due == null)
468            this.due = new Duration();
469          if (!(this.due instanceof Duration))
470            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.due.getClass().getName()+" was encountered");
471          return (Duration) this.due;
472        }
473
474        public boolean hasDueDuration() { 
475          return this != null && this.due instanceof Duration;
476        }
477
478        public boolean hasDue() { 
479          return this.due != null && !this.due.isEmpty();
480        }
481
482        /**
483         * @param value {@link #due} (Indicates either the date or the duration after start by which the goal should be met.)
484         */
485        public GoalTargetComponent setDue(Type value) { 
486          if (value != null && !(value instanceof DateType || value instanceof Duration))
487            throw new Error("Not the right type for Goal.target.due[x]: "+value.fhirType());
488          this.due = value;
489          return this;
490        }
491
492        protected void listChildren(List<Property> children) {
493          super.listChildren(children);
494          children.add(new Property("measure", "CodeableConcept", "The parameter whose value is being tracked, e.g. body weight, blood pressure, or hemoglobin A1c level.", 0, 1, measure));
495          children.add(new Property("detail[x]", "Quantity|Range|CodeableConcept|string|boolean|integer|Ratio", "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", 0, 1, detail));
496          children.add(new Property("due[x]", "date|Duration", "Indicates either the date or the duration after start by which the goal should be met.", 0, 1, due));
497        }
498
499        @Override
500        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
501          switch (_hash) {
502          case 938321246: /*measure*/  return new Property("measure", "CodeableConcept", "The parameter whose value is being tracked, e.g. body weight, blood pressure, or hemoglobin A1c level.", 0, 1, measure);
503          case -1973084529: /*detail[x]*/  return new Property("detail[x]", "Quantity|Range|CodeableConcept|string|boolean|integer|Ratio", "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", 0, 1, detail);
504          case -1335224239: /*detail*/  return new Property("detail[x]", "Quantity|Range|CodeableConcept|string|boolean|integer|Ratio", "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", 0, 1, detail);
505          case -1313079300: /*detailQuantity*/  return new Property("detail[x]", "Quantity|Range|CodeableConcept|string|boolean|integer|Ratio", "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", 0, 1, detail);
506          case -2062632084: /*detailRange*/  return new Property("detail[x]", "Quantity|Range|CodeableConcept|string|boolean|integer|Ratio", "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", 0, 1, detail);
507          case -175586544: /*detailCodeableConcept*/  return new Property("detail[x]", "Quantity|Range|CodeableConcept|string|boolean|integer|Ratio", "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", 0, 1, detail);
508          case 529212354: /*detailString*/  return new Property("detail[x]", "Quantity|Range|CodeableConcept|string|boolean|integer|Ratio", "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", 0, 1, detail);
509          case 1172184727: /*detailBoolean*/  return new Property("detail[x]", "Quantity|Range|CodeableConcept|string|boolean|integer|Ratio", "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", 0, 1, detail);
510          case -1229442131: /*detailInteger*/  return new Property("detail[x]", "Quantity|Range|CodeableConcept|string|boolean|integer|Ratio", "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", 0, 1, detail);
511          case -2062626246: /*detailRatio*/  return new Property("detail[x]", "Quantity|Range|CodeableConcept|string|boolean|integer|Ratio", "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", 0, 1, detail);
512          case -1320900084: /*due[x]*/  return new Property("due[x]", "date|Duration", "Indicates either the date or the duration after start by which the goal should be met.", 0, 1, due);
513          case 99828: /*due*/  return new Property("due[x]", "date|Duration", "Indicates either the date or the duration after start by which the goal should be met.", 0, 1, due);
514          case 2001063874: /*dueDate*/  return new Property("due[x]", "date|Duration", "Indicates either the date or the duration after start by which the goal should be met.", 0, 1, due);
515          case -620428376: /*dueDuration*/  return new Property("due[x]", "date|Duration", "Indicates either the date or the duration after start by which the goal should be met.", 0, 1, due);
516          default: return super.getNamedProperty(_hash, _name, _checkValid);
517          }
518
519        }
520
521      @Override
522      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
523        switch (hash) {
524        case 938321246: /*measure*/ return this.measure == null ? new Base[0] : new Base[] {this.measure}; // CodeableConcept
525        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : new Base[] {this.detail}; // Type
526        case 99828: /*due*/ return this.due == null ? new Base[0] : new Base[] {this.due}; // Type
527        default: return super.getProperty(hash, name, checkValid);
528        }
529
530      }
531
532      @Override
533      public Base setProperty(int hash, String name, Base value) throws FHIRException {
534        switch (hash) {
535        case 938321246: // measure
536          this.measure = castToCodeableConcept(value); // CodeableConcept
537          return value;
538        case -1335224239: // detail
539          this.detail = castToType(value); // Type
540          return value;
541        case 99828: // due
542          this.due = castToType(value); // Type
543          return value;
544        default: return super.setProperty(hash, name, value);
545        }
546
547      }
548
549      @Override
550      public Base setProperty(String name, Base value) throws FHIRException {
551        if (name.equals("measure")) {
552          this.measure = castToCodeableConcept(value); // CodeableConcept
553        } else if (name.equals("detail[x]")) {
554          this.detail = castToType(value); // Type
555        } else if (name.equals("due[x]")) {
556          this.due = castToType(value); // Type
557        } else
558          return super.setProperty(name, value);
559        return value;
560      }
561
562      @Override
563      public Base makeProperty(int hash, String name) throws FHIRException {
564        switch (hash) {
565        case 938321246:  return getMeasure(); 
566        case -1973084529:  return getDetail(); 
567        case -1335224239:  return getDetail(); 
568        case -1320900084:  return getDue(); 
569        case 99828:  return getDue(); 
570        default: return super.makeProperty(hash, name);
571        }
572
573      }
574
575      @Override
576      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
577        switch (hash) {
578        case 938321246: /*measure*/ return new String[] {"CodeableConcept"};
579        case -1335224239: /*detail*/ return new String[] {"Quantity", "Range", "CodeableConcept", "string", "boolean", "integer", "Ratio"};
580        case 99828: /*due*/ return new String[] {"date", "Duration"};
581        default: return super.getTypesForProperty(hash, name);
582        }
583
584      }
585
586      @Override
587      public Base addChild(String name) throws FHIRException {
588        if (name.equals("measure")) {
589          this.measure = new CodeableConcept();
590          return this.measure;
591        }
592        else if (name.equals("detailQuantity")) {
593          this.detail = new Quantity();
594          return this.detail;
595        }
596        else if (name.equals("detailRange")) {
597          this.detail = new Range();
598          return this.detail;
599        }
600        else if (name.equals("detailCodeableConcept")) {
601          this.detail = new CodeableConcept();
602          return this.detail;
603        }
604        else if (name.equals("detailString")) {
605          this.detail = new StringType();
606          return this.detail;
607        }
608        else if (name.equals("detailBoolean")) {
609          this.detail = new BooleanType();
610          return this.detail;
611        }
612        else if (name.equals("detailInteger")) {
613          this.detail = new IntegerType();
614          return this.detail;
615        }
616        else if (name.equals("detailRatio")) {
617          this.detail = new Ratio();
618          return this.detail;
619        }
620        else if (name.equals("dueDate")) {
621          this.due = new DateType();
622          return this.due;
623        }
624        else if (name.equals("dueDuration")) {
625          this.due = new Duration();
626          return this.due;
627        }
628        else
629          return super.addChild(name);
630      }
631
632      public GoalTargetComponent copy() {
633        GoalTargetComponent dst = new GoalTargetComponent();
634        copyValues(dst);
635        return dst;
636      }
637
638      public void copyValues(GoalTargetComponent dst) {
639        super.copyValues(dst);
640        dst.measure = measure == null ? null : measure.copy();
641        dst.detail = detail == null ? null : detail.copy();
642        dst.due = due == null ? null : due.copy();
643      }
644
645      @Override
646      public boolean equalsDeep(Base other_) {
647        if (!super.equalsDeep(other_))
648          return false;
649        if (!(other_ instanceof GoalTargetComponent))
650          return false;
651        GoalTargetComponent o = (GoalTargetComponent) other_;
652        return compareDeep(measure, o.measure, true) && compareDeep(detail, o.detail, true) && compareDeep(due, o.due, true)
653          ;
654      }
655
656      @Override
657      public boolean equalsShallow(Base other_) {
658        if (!super.equalsShallow(other_))
659          return false;
660        if (!(other_ instanceof GoalTargetComponent))
661          return false;
662        GoalTargetComponent o = (GoalTargetComponent) other_;
663        return true;
664      }
665
666      public boolean isEmpty() {
667        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(measure, detail, due);
668      }
669
670  public String fhirType() {
671    return "Goal.target";
672
673  }
674
675  }
676
677    /**
678     * Business identifiers assigned to this goal by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
679     */
680    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
681    @Description(shortDefinition="External Ids for this goal", formalDefinition="Business identifiers assigned to this goal by the performer or other systems which remain constant as the resource is updated and propagates from server to server." )
682    protected List<Identifier> identifier;
683
684    /**
685     * The state of the goal throughout its lifecycle.
686     */
687    @Child(name = "lifecycleStatus", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
688    @Description(shortDefinition="proposed | planned | accepted | active | on-hold | completed | cancelled | entered-in-error | rejected", formalDefinition="The state of the goal throughout its lifecycle." )
689    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/goal-status")
690    protected Enumeration<GoalLifecycleStatus> lifecycleStatus;
691
692    /**
693     * Describes the progression, or lack thereof, towards the goal against the target.
694     */
695    @Child(name = "achievementStatus", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
696    @Description(shortDefinition="in-progress | improving | worsening | no-change | achieved | sustaining | not-achieved | no-progress | not-attainable", formalDefinition="Describes the progression, or lack thereof, towards the goal against the target." )
697    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/goal-achievement")
698    protected CodeableConcept achievementStatus;
699
700    /**
701     * Indicates a category the goal falls within.
702     */
703    @Child(name = "category", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
704    @Description(shortDefinition="E.g. Treatment, dietary, behavioral, etc.", formalDefinition="Indicates a category the goal falls within." )
705    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/goal-category")
706    protected List<CodeableConcept> category;
707
708    /**
709     * Identifies the mutually agreed level of importance associated with reaching/sustaining the goal.
710     */
711    @Child(name = "priority", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=true)
712    @Description(shortDefinition="high-priority | medium-priority | low-priority", formalDefinition="Identifies the mutually agreed level of importance associated with reaching/sustaining the goal." )
713    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/goal-priority")
714    protected CodeableConcept priority;
715
716    /**
717     * Human-readable and/or coded description of a specific desired objective of care, such as "control blood pressure" or "negotiate an obstacle course" or "dance with child at wedding".
718     */
719    @Child(name = "description", type = {CodeableConcept.class}, order=5, min=1, max=1, modifier=false, summary=true)
720    @Description(shortDefinition="Code or text describing goal", formalDefinition="Human-readable and/or coded description of a specific desired objective of care, such as \"control blood pressure\" or \"negotiate an obstacle course\" or \"dance with child at wedding\"." )
721    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/clinical-findings")
722    protected CodeableConcept description;
723
724    /**
725     * Identifies the patient, group or organization for whom the goal is being established.
726     */
727    @Child(name = "subject", type = {Patient.class, Group.class, Organization.class}, order=6, min=1, max=1, modifier=false, summary=true)
728    @Description(shortDefinition="Who this goal is intended for", formalDefinition="Identifies the patient, group or organization for whom the goal is being established." )
729    protected Reference subject;
730
731    /**
732     * The actual object that is the target of the reference (Identifies the patient, group or organization for whom the goal is being established.)
733     */
734    protected Resource subjectTarget;
735
736    /**
737     * The date or event after which the goal should begin being pursued.
738     */
739    @Child(name = "start", type = {DateType.class, CodeableConcept.class}, order=7, min=0, max=1, modifier=false, summary=true)
740    @Description(shortDefinition="When goal pursuit begins", formalDefinition="The date or event after which the goal should begin being pursued." )
741    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/goal-start-event")
742    protected Type start;
743
744    /**
745     * Indicates what should be done by when.
746     */
747    @Child(name = "target", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
748    @Description(shortDefinition="Target outcome for the goal", formalDefinition="Indicates what should be done by when." )
749    protected List<GoalTargetComponent> target;
750
751    /**
752     * Identifies when the current status.  I.e. When initially created, when achieved, when cancelled, etc.
753     */
754    @Child(name = "statusDate", type = {DateType.class}, order=9, min=0, max=1, modifier=false, summary=true)
755    @Description(shortDefinition="When goal status took effect", formalDefinition="Identifies when the current status.  I.e. When initially created, when achieved, when cancelled, etc." )
756    protected DateType statusDate;
757
758    /**
759     * Captures the reason for the current status.
760     */
761    @Child(name = "statusReason", type = {StringType.class}, order=10, min=0, max=1, modifier=false, summary=false)
762    @Description(shortDefinition="Reason for current status", formalDefinition="Captures the reason for the current status." )
763    protected StringType statusReason;
764
765    /**
766     * Indicates whose goal this is - patient goal, practitioner goal, etc.
767     */
768    @Child(name = "expressedBy", type = {Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class}, order=11, min=0, max=1, modifier=false, summary=true)
769    @Description(shortDefinition="Who's responsible for creating Goal?", formalDefinition="Indicates whose goal this is - patient goal, practitioner goal, etc." )
770    protected Reference expressedBy;
771
772    /**
773     * The actual object that is the target of the reference (Indicates whose goal this is - patient goal, practitioner goal, etc.)
774     */
775    protected Resource expressedByTarget;
776
777    /**
778     * The identified conditions and other health record elements that are intended to be addressed by the goal.
779     */
780    @Child(name = "addresses", type = {Condition.class, Observation.class, MedicationStatement.class, NutritionOrder.class, ServiceRequest.class, RiskAssessment.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
781    @Description(shortDefinition="Issues addressed by this goal", formalDefinition="The identified conditions and other health record elements that are intended to be addressed by the goal." )
782    protected List<Reference> addresses;
783    /**
784     * The actual objects that are the target of the reference (The identified conditions and other health record elements that are intended to be addressed by the goal.)
785     */
786    protected List<Resource> addressesTarget;
787
788
789    /**
790     * Any comments related to the goal.
791     */
792    @Child(name = "note", type = {Annotation.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
793    @Description(shortDefinition="Comments about the goal", formalDefinition="Any comments related to the goal." )
794    protected List<Annotation> note;
795
796    /**
797     * Identifies the change (or lack of change) at the point when the status of the goal is assessed.
798     */
799    @Child(name = "outcomeCode", type = {CodeableConcept.class}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
800    @Description(shortDefinition="What result was achieved regarding the goal?", formalDefinition="Identifies the change (or lack of change) at the point when the status of the goal is assessed." )
801    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/clinical-findings")
802    protected List<CodeableConcept> outcomeCode;
803
804    /**
805     * Details of what's changed (or not changed).
806     */
807    @Child(name = "outcomeReference", type = {Observation.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
808    @Description(shortDefinition="Observation that resulted from goal", formalDefinition="Details of what's changed (or not changed)." )
809    protected List<Reference> outcomeReference;
810    /**
811     * The actual objects that are the target of the reference (Details of what's changed (or not changed).)
812     */
813    protected List<Observation> outcomeReferenceTarget;
814
815
816    private static final long serialVersionUID = -1366854797L;
817
818  /**
819   * Constructor
820   */
821    public Goal() {
822      super();
823    }
824
825  /**
826   * Constructor
827   */
828    public Goal(Enumeration<GoalLifecycleStatus> lifecycleStatus, CodeableConcept description, Reference subject) {
829      super();
830      this.lifecycleStatus = lifecycleStatus;
831      this.description = description;
832      this.subject = subject;
833    }
834
835    /**
836     * @return {@link #identifier} (Business identifiers assigned to this goal by the performer or other systems which remain constant as the resource is updated and propagates from server to server.)
837     */
838    public List<Identifier> getIdentifier() { 
839      if (this.identifier == null)
840        this.identifier = new ArrayList<Identifier>();
841      return this.identifier;
842    }
843
844    /**
845     * @return Returns a reference to <code>this</code> for easy method chaining
846     */
847    public Goal setIdentifier(List<Identifier> theIdentifier) { 
848      this.identifier = theIdentifier;
849      return this;
850    }
851
852    public boolean hasIdentifier() { 
853      if (this.identifier == null)
854        return false;
855      for (Identifier item : this.identifier)
856        if (!item.isEmpty())
857          return true;
858      return false;
859    }
860
861    public Identifier addIdentifier() { //3
862      Identifier t = new Identifier();
863      if (this.identifier == null)
864        this.identifier = new ArrayList<Identifier>();
865      this.identifier.add(t);
866      return t;
867    }
868
869    public Goal addIdentifier(Identifier t) { //3
870      if (t == null)
871        return this;
872      if (this.identifier == null)
873        this.identifier = new ArrayList<Identifier>();
874      this.identifier.add(t);
875      return this;
876    }
877
878    /**
879     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
880     */
881    public Identifier getIdentifierFirstRep() { 
882      if (getIdentifier().isEmpty()) {
883        addIdentifier();
884      }
885      return getIdentifier().get(0);
886    }
887
888    /**
889     * @return {@link #lifecycleStatus} (The state of the goal throughout its lifecycle.). This is the underlying object with id, value and extensions. The accessor "getLifecycleStatus" gives direct access to the value
890     */
891    public Enumeration<GoalLifecycleStatus> getLifecycleStatusElement() { 
892      if (this.lifecycleStatus == null)
893        if (Configuration.errorOnAutoCreate())
894          throw new Error("Attempt to auto-create Goal.lifecycleStatus");
895        else if (Configuration.doAutoCreate())
896          this.lifecycleStatus = new Enumeration<GoalLifecycleStatus>(new GoalLifecycleStatusEnumFactory()); // bb
897      return this.lifecycleStatus;
898    }
899
900    public boolean hasLifecycleStatusElement() { 
901      return this.lifecycleStatus != null && !this.lifecycleStatus.isEmpty();
902    }
903
904    public boolean hasLifecycleStatus() { 
905      return this.lifecycleStatus != null && !this.lifecycleStatus.isEmpty();
906    }
907
908    /**
909     * @param value {@link #lifecycleStatus} (The state of the goal throughout its lifecycle.). This is the underlying object with id, value and extensions. The accessor "getLifecycleStatus" gives direct access to the value
910     */
911    public Goal setLifecycleStatusElement(Enumeration<GoalLifecycleStatus> value) { 
912      this.lifecycleStatus = value;
913      return this;
914    }
915
916    /**
917     * @return The state of the goal throughout its lifecycle.
918     */
919    public GoalLifecycleStatus getLifecycleStatus() { 
920      return this.lifecycleStatus == null ? null : this.lifecycleStatus.getValue();
921    }
922
923    /**
924     * @param value The state of the goal throughout its lifecycle.
925     */
926    public Goal setLifecycleStatus(GoalLifecycleStatus value) { 
927        if (this.lifecycleStatus == null)
928          this.lifecycleStatus = new Enumeration<GoalLifecycleStatus>(new GoalLifecycleStatusEnumFactory());
929        this.lifecycleStatus.setValue(value);
930      return this;
931    }
932
933    /**
934     * @return {@link #achievementStatus} (Describes the progression, or lack thereof, towards the goal against the target.)
935     */
936    public CodeableConcept getAchievementStatus() { 
937      if (this.achievementStatus == null)
938        if (Configuration.errorOnAutoCreate())
939          throw new Error("Attempt to auto-create Goal.achievementStatus");
940        else if (Configuration.doAutoCreate())
941          this.achievementStatus = new CodeableConcept(); // cc
942      return this.achievementStatus;
943    }
944
945    public boolean hasAchievementStatus() { 
946      return this.achievementStatus != null && !this.achievementStatus.isEmpty();
947    }
948
949    /**
950     * @param value {@link #achievementStatus} (Describes the progression, or lack thereof, towards the goal against the target.)
951     */
952    public Goal setAchievementStatus(CodeableConcept value) { 
953      this.achievementStatus = value;
954      return this;
955    }
956
957    /**
958     * @return {@link #category} (Indicates a category the goal falls within.)
959     */
960    public List<CodeableConcept> getCategory() { 
961      if (this.category == null)
962        this.category = new ArrayList<CodeableConcept>();
963      return this.category;
964    }
965
966    /**
967     * @return Returns a reference to <code>this</code> for easy method chaining
968     */
969    public Goal setCategory(List<CodeableConcept> theCategory) { 
970      this.category = theCategory;
971      return this;
972    }
973
974    public boolean hasCategory() { 
975      if (this.category == null)
976        return false;
977      for (CodeableConcept item : this.category)
978        if (!item.isEmpty())
979          return true;
980      return false;
981    }
982
983    public CodeableConcept addCategory() { //3
984      CodeableConcept t = new CodeableConcept();
985      if (this.category == null)
986        this.category = new ArrayList<CodeableConcept>();
987      this.category.add(t);
988      return t;
989    }
990
991    public Goal addCategory(CodeableConcept t) { //3
992      if (t == null)
993        return this;
994      if (this.category == null)
995        this.category = new ArrayList<CodeableConcept>();
996      this.category.add(t);
997      return this;
998    }
999
1000    /**
1001     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist
1002     */
1003    public CodeableConcept getCategoryFirstRep() { 
1004      if (getCategory().isEmpty()) {
1005        addCategory();
1006      }
1007      return getCategory().get(0);
1008    }
1009
1010    /**
1011     * @return {@link #priority} (Identifies the mutually agreed level of importance associated with reaching/sustaining the goal.)
1012     */
1013    public CodeableConcept getPriority() { 
1014      if (this.priority == null)
1015        if (Configuration.errorOnAutoCreate())
1016          throw new Error("Attempt to auto-create Goal.priority");
1017        else if (Configuration.doAutoCreate())
1018          this.priority = new CodeableConcept(); // cc
1019      return this.priority;
1020    }
1021
1022    public boolean hasPriority() { 
1023      return this.priority != null && !this.priority.isEmpty();
1024    }
1025
1026    /**
1027     * @param value {@link #priority} (Identifies the mutually agreed level of importance associated with reaching/sustaining the goal.)
1028     */
1029    public Goal setPriority(CodeableConcept value) { 
1030      this.priority = value;
1031      return this;
1032    }
1033
1034    /**
1035     * @return {@link #description} (Human-readable and/or coded description of a specific desired objective of care, such as "control blood pressure" or "negotiate an obstacle course" or "dance with child at wedding".)
1036     */
1037    public CodeableConcept getDescription() { 
1038      if (this.description == null)
1039        if (Configuration.errorOnAutoCreate())
1040          throw new Error("Attempt to auto-create Goal.description");
1041        else if (Configuration.doAutoCreate())
1042          this.description = new CodeableConcept(); // cc
1043      return this.description;
1044    }
1045
1046    public boolean hasDescription() { 
1047      return this.description != null && !this.description.isEmpty();
1048    }
1049
1050    /**
1051     * @param value {@link #description} (Human-readable and/or coded description of a specific desired objective of care, such as "control blood pressure" or "negotiate an obstacle course" or "dance with child at wedding".)
1052     */
1053    public Goal setDescription(CodeableConcept value) { 
1054      this.description = value;
1055      return this;
1056    }
1057
1058    /**
1059     * @return {@link #subject} (Identifies the patient, group or organization for whom the goal is being established.)
1060     */
1061    public Reference getSubject() { 
1062      if (this.subject == null)
1063        if (Configuration.errorOnAutoCreate())
1064          throw new Error("Attempt to auto-create Goal.subject");
1065        else if (Configuration.doAutoCreate())
1066          this.subject = new Reference(); // cc
1067      return this.subject;
1068    }
1069
1070    public boolean hasSubject() { 
1071      return this.subject != null && !this.subject.isEmpty();
1072    }
1073
1074    /**
1075     * @param value {@link #subject} (Identifies the patient, group or organization for whom the goal is being established.)
1076     */
1077    public Goal setSubject(Reference value) { 
1078      this.subject = value;
1079      return this;
1080    }
1081
1082    /**
1083     * @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. (Identifies the patient, group or organization for whom the goal is being established.)
1084     */
1085    public Resource getSubjectTarget() { 
1086      return this.subjectTarget;
1087    }
1088
1089    /**
1090     * @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. (Identifies the patient, group or organization for whom the goal is being established.)
1091     */
1092    public Goal setSubjectTarget(Resource value) { 
1093      this.subjectTarget = value;
1094      return this;
1095    }
1096
1097    /**
1098     * @return {@link #start} (The date or event after which the goal should begin being pursued.)
1099     */
1100    public Type getStart() { 
1101      return this.start;
1102    }
1103
1104    /**
1105     * @return {@link #start} (The date or event after which the goal should begin being pursued.)
1106     */
1107    public DateType getStartDateType() throws FHIRException { 
1108      if (this.start == null)
1109        this.start = new DateType();
1110      if (!(this.start instanceof DateType))
1111        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.start.getClass().getName()+" was encountered");
1112      return (DateType) this.start;
1113    }
1114
1115    public boolean hasStartDateType() { 
1116      return this != null && this.start instanceof DateType;
1117    }
1118
1119    /**
1120     * @return {@link #start} (The date or event after which the goal should begin being pursued.)
1121     */
1122    public CodeableConcept getStartCodeableConcept() throws FHIRException { 
1123      if (this.start == null)
1124        this.start = new CodeableConcept();
1125      if (!(this.start instanceof CodeableConcept))
1126        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.start.getClass().getName()+" was encountered");
1127      return (CodeableConcept) this.start;
1128    }
1129
1130    public boolean hasStartCodeableConcept() { 
1131      return this != null && this.start instanceof CodeableConcept;
1132    }
1133
1134    public boolean hasStart() { 
1135      return this.start != null && !this.start.isEmpty();
1136    }
1137
1138    /**
1139     * @param value {@link #start} (The date or event after which the goal should begin being pursued.)
1140     */
1141    public Goal setStart(Type value) { 
1142      if (value != null && !(value instanceof DateType || value instanceof CodeableConcept))
1143        throw new Error("Not the right type for Goal.start[x]: "+value.fhirType());
1144      this.start = value;
1145      return this;
1146    }
1147
1148    /**
1149     * @return {@link #target} (Indicates what should be done by when.)
1150     */
1151    public List<GoalTargetComponent> getTarget() { 
1152      if (this.target == null)
1153        this.target = new ArrayList<GoalTargetComponent>();
1154      return this.target;
1155    }
1156
1157    /**
1158     * @return Returns a reference to <code>this</code> for easy method chaining
1159     */
1160    public Goal setTarget(List<GoalTargetComponent> theTarget) { 
1161      this.target = theTarget;
1162      return this;
1163    }
1164
1165    public boolean hasTarget() { 
1166      if (this.target == null)
1167        return false;
1168      for (GoalTargetComponent item : this.target)
1169        if (!item.isEmpty())
1170          return true;
1171      return false;
1172    }
1173
1174    public GoalTargetComponent addTarget() { //3
1175      GoalTargetComponent t = new GoalTargetComponent();
1176      if (this.target == null)
1177        this.target = new ArrayList<GoalTargetComponent>();
1178      this.target.add(t);
1179      return t;
1180    }
1181
1182    public Goal addTarget(GoalTargetComponent t) { //3
1183      if (t == null)
1184        return this;
1185      if (this.target == null)
1186        this.target = new ArrayList<GoalTargetComponent>();
1187      this.target.add(t);
1188      return this;
1189    }
1190
1191    /**
1192     * @return The first repetition of repeating field {@link #target}, creating it if it does not already exist
1193     */
1194    public GoalTargetComponent getTargetFirstRep() { 
1195      if (getTarget().isEmpty()) {
1196        addTarget();
1197      }
1198      return getTarget().get(0);
1199    }
1200
1201    /**
1202     * @return {@link #statusDate} (Identifies when the current status.  I.e. When initially created, when achieved, when cancelled, etc.). This is the underlying object with id, value and extensions. The accessor "getStatusDate" gives direct access to the value
1203     */
1204    public DateType getStatusDateElement() { 
1205      if (this.statusDate == null)
1206        if (Configuration.errorOnAutoCreate())
1207          throw new Error("Attempt to auto-create Goal.statusDate");
1208        else if (Configuration.doAutoCreate())
1209          this.statusDate = new DateType(); // bb
1210      return this.statusDate;
1211    }
1212
1213    public boolean hasStatusDateElement() { 
1214      return this.statusDate != null && !this.statusDate.isEmpty();
1215    }
1216
1217    public boolean hasStatusDate() { 
1218      return this.statusDate != null && !this.statusDate.isEmpty();
1219    }
1220
1221    /**
1222     * @param value {@link #statusDate} (Identifies when the current status.  I.e. When initially created, when achieved, when cancelled, etc.). This is the underlying object with id, value and extensions. The accessor "getStatusDate" gives direct access to the value
1223     */
1224    public Goal setStatusDateElement(DateType value) { 
1225      this.statusDate = value;
1226      return this;
1227    }
1228
1229    /**
1230     * @return Identifies when the current status.  I.e. When initially created, when achieved, when cancelled, etc.
1231     */
1232    public Date getStatusDate() { 
1233      return this.statusDate == null ? null : this.statusDate.getValue();
1234    }
1235
1236    /**
1237     * @param value Identifies when the current status.  I.e. When initially created, when achieved, when cancelled, etc.
1238     */
1239    public Goal setStatusDate(Date value) { 
1240      if (value == null)
1241        this.statusDate = null;
1242      else {
1243        if (this.statusDate == null)
1244          this.statusDate = new DateType();
1245        this.statusDate.setValue(value);
1246      }
1247      return this;
1248    }
1249
1250    /**
1251     * @return {@link #statusReason} (Captures the reason for the current status.). This is the underlying object with id, value and extensions. The accessor "getStatusReason" gives direct access to the value
1252     */
1253    public StringType getStatusReasonElement() { 
1254      if (this.statusReason == null)
1255        if (Configuration.errorOnAutoCreate())
1256          throw new Error("Attempt to auto-create Goal.statusReason");
1257        else if (Configuration.doAutoCreate())
1258          this.statusReason = new StringType(); // bb
1259      return this.statusReason;
1260    }
1261
1262    public boolean hasStatusReasonElement() { 
1263      return this.statusReason != null && !this.statusReason.isEmpty();
1264    }
1265
1266    public boolean hasStatusReason() { 
1267      return this.statusReason != null && !this.statusReason.isEmpty();
1268    }
1269
1270    /**
1271     * @param value {@link #statusReason} (Captures the reason for the current status.). This is the underlying object with id, value and extensions. The accessor "getStatusReason" gives direct access to the value
1272     */
1273    public Goal setStatusReasonElement(StringType value) { 
1274      this.statusReason = value;
1275      return this;
1276    }
1277
1278    /**
1279     * @return Captures the reason for the current status.
1280     */
1281    public String getStatusReason() { 
1282      return this.statusReason == null ? null : this.statusReason.getValue();
1283    }
1284
1285    /**
1286     * @param value Captures the reason for the current status.
1287     */
1288    public Goal setStatusReason(String value) { 
1289      if (Utilities.noString(value))
1290        this.statusReason = null;
1291      else {
1292        if (this.statusReason == null)
1293          this.statusReason = new StringType();
1294        this.statusReason.setValue(value);
1295      }
1296      return this;
1297    }
1298
1299    /**
1300     * @return {@link #expressedBy} (Indicates whose goal this is - patient goal, practitioner goal, etc.)
1301     */
1302    public Reference getExpressedBy() { 
1303      if (this.expressedBy == null)
1304        if (Configuration.errorOnAutoCreate())
1305          throw new Error("Attempt to auto-create Goal.expressedBy");
1306        else if (Configuration.doAutoCreate())
1307          this.expressedBy = new Reference(); // cc
1308      return this.expressedBy;
1309    }
1310
1311    public boolean hasExpressedBy() { 
1312      return this.expressedBy != null && !this.expressedBy.isEmpty();
1313    }
1314
1315    /**
1316     * @param value {@link #expressedBy} (Indicates whose goal this is - patient goal, practitioner goal, etc.)
1317     */
1318    public Goal setExpressedBy(Reference value) { 
1319      this.expressedBy = value;
1320      return this;
1321    }
1322
1323    /**
1324     * @return {@link #expressedBy} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Indicates whose goal this is - patient goal, practitioner goal, etc.)
1325     */
1326    public Resource getExpressedByTarget() { 
1327      return this.expressedByTarget;
1328    }
1329
1330    /**
1331     * @param value {@link #expressedBy} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Indicates whose goal this is - patient goal, practitioner goal, etc.)
1332     */
1333    public Goal setExpressedByTarget(Resource value) { 
1334      this.expressedByTarget = value;
1335      return this;
1336    }
1337
1338    /**
1339     * @return {@link #addresses} (The identified conditions and other health record elements that are intended to be addressed by the goal.)
1340     */
1341    public List<Reference> getAddresses() { 
1342      if (this.addresses == null)
1343        this.addresses = new ArrayList<Reference>();
1344      return this.addresses;
1345    }
1346
1347    /**
1348     * @return Returns a reference to <code>this</code> for easy method chaining
1349     */
1350    public Goal setAddresses(List<Reference> theAddresses) { 
1351      this.addresses = theAddresses;
1352      return this;
1353    }
1354
1355    public boolean hasAddresses() { 
1356      if (this.addresses == null)
1357        return false;
1358      for (Reference item : this.addresses)
1359        if (!item.isEmpty())
1360          return true;
1361      return false;
1362    }
1363
1364    public Reference addAddresses() { //3
1365      Reference t = new Reference();
1366      if (this.addresses == null)
1367        this.addresses = new ArrayList<Reference>();
1368      this.addresses.add(t);
1369      return t;
1370    }
1371
1372    public Goal addAddresses(Reference t) { //3
1373      if (t == null)
1374        return this;
1375      if (this.addresses == null)
1376        this.addresses = new ArrayList<Reference>();
1377      this.addresses.add(t);
1378      return this;
1379    }
1380
1381    /**
1382     * @return The first repetition of repeating field {@link #addresses}, creating it if it does not already exist
1383     */
1384    public Reference getAddressesFirstRep() { 
1385      if (getAddresses().isEmpty()) {
1386        addAddresses();
1387      }
1388      return getAddresses().get(0);
1389    }
1390
1391    /**
1392     * @deprecated Use Reference#setResource(IBaseResource) instead
1393     */
1394    @Deprecated
1395    public List<Resource> getAddressesTarget() { 
1396      if (this.addressesTarget == null)
1397        this.addressesTarget = new ArrayList<Resource>();
1398      return this.addressesTarget;
1399    }
1400
1401    /**
1402     * @return {@link #note} (Any comments related to the goal.)
1403     */
1404    public List<Annotation> getNote() { 
1405      if (this.note == null)
1406        this.note = new ArrayList<Annotation>();
1407      return this.note;
1408    }
1409
1410    /**
1411     * @return Returns a reference to <code>this</code> for easy method chaining
1412     */
1413    public Goal setNote(List<Annotation> theNote) { 
1414      this.note = theNote;
1415      return this;
1416    }
1417
1418    public boolean hasNote() { 
1419      if (this.note == null)
1420        return false;
1421      for (Annotation item : this.note)
1422        if (!item.isEmpty())
1423          return true;
1424      return false;
1425    }
1426
1427    public Annotation addNote() { //3
1428      Annotation t = new Annotation();
1429      if (this.note == null)
1430        this.note = new ArrayList<Annotation>();
1431      this.note.add(t);
1432      return t;
1433    }
1434
1435    public Goal addNote(Annotation t) { //3
1436      if (t == null)
1437        return this;
1438      if (this.note == null)
1439        this.note = new ArrayList<Annotation>();
1440      this.note.add(t);
1441      return this;
1442    }
1443
1444    /**
1445     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
1446     */
1447    public Annotation getNoteFirstRep() { 
1448      if (getNote().isEmpty()) {
1449        addNote();
1450      }
1451      return getNote().get(0);
1452    }
1453
1454    /**
1455     * @return {@link #outcomeCode} (Identifies the change (or lack of change) at the point when the status of the goal is assessed.)
1456     */
1457    public List<CodeableConcept> getOutcomeCode() { 
1458      if (this.outcomeCode == null)
1459        this.outcomeCode = new ArrayList<CodeableConcept>();
1460      return this.outcomeCode;
1461    }
1462
1463    /**
1464     * @return Returns a reference to <code>this</code> for easy method chaining
1465     */
1466    public Goal setOutcomeCode(List<CodeableConcept> theOutcomeCode) { 
1467      this.outcomeCode = theOutcomeCode;
1468      return this;
1469    }
1470
1471    public boolean hasOutcomeCode() { 
1472      if (this.outcomeCode == null)
1473        return false;
1474      for (CodeableConcept item : this.outcomeCode)
1475        if (!item.isEmpty())
1476          return true;
1477      return false;
1478    }
1479
1480    public CodeableConcept addOutcomeCode() { //3
1481      CodeableConcept t = new CodeableConcept();
1482      if (this.outcomeCode == null)
1483        this.outcomeCode = new ArrayList<CodeableConcept>();
1484      this.outcomeCode.add(t);
1485      return t;
1486    }
1487
1488    public Goal addOutcomeCode(CodeableConcept t) { //3
1489      if (t == null)
1490        return this;
1491      if (this.outcomeCode == null)
1492        this.outcomeCode = new ArrayList<CodeableConcept>();
1493      this.outcomeCode.add(t);
1494      return this;
1495    }
1496
1497    /**
1498     * @return The first repetition of repeating field {@link #outcomeCode}, creating it if it does not already exist
1499     */
1500    public CodeableConcept getOutcomeCodeFirstRep() { 
1501      if (getOutcomeCode().isEmpty()) {
1502        addOutcomeCode();
1503      }
1504      return getOutcomeCode().get(0);
1505    }
1506
1507    /**
1508     * @return {@link #outcomeReference} (Details of what's changed (or not changed).)
1509     */
1510    public List<Reference> getOutcomeReference() { 
1511      if (this.outcomeReference == null)
1512        this.outcomeReference = new ArrayList<Reference>();
1513      return this.outcomeReference;
1514    }
1515
1516    /**
1517     * @return Returns a reference to <code>this</code> for easy method chaining
1518     */
1519    public Goal setOutcomeReference(List<Reference> theOutcomeReference) { 
1520      this.outcomeReference = theOutcomeReference;
1521      return this;
1522    }
1523
1524    public boolean hasOutcomeReference() { 
1525      if (this.outcomeReference == null)
1526        return false;
1527      for (Reference item : this.outcomeReference)
1528        if (!item.isEmpty())
1529          return true;
1530      return false;
1531    }
1532
1533    public Reference addOutcomeReference() { //3
1534      Reference t = new Reference();
1535      if (this.outcomeReference == null)
1536        this.outcomeReference = new ArrayList<Reference>();
1537      this.outcomeReference.add(t);
1538      return t;
1539    }
1540
1541    public Goal addOutcomeReference(Reference t) { //3
1542      if (t == null)
1543        return this;
1544      if (this.outcomeReference == null)
1545        this.outcomeReference = new ArrayList<Reference>();
1546      this.outcomeReference.add(t);
1547      return this;
1548    }
1549
1550    /**
1551     * @return The first repetition of repeating field {@link #outcomeReference}, creating it if it does not already exist
1552     */
1553    public Reference getOutcomeReferenceFirstRep() { 
1554      if (getOutcomeReference().isEmpty()) {
1555        addOutcomeReference();
1556      }
1557      return getOutcomeReference().get(0);
1558    }
1559
1560    /**
1561     * @deprecated Use Reference#setResource(IBaseResource) instead
1562     */
1563    @Deprecated
1564    public List<Observation> getOutcomeReferenceTarget() { 
1565      if (this.outcomeReferenceTarget == null)
1566        this.outcomeReferenceTarget = new ArrayList<Observation>();
1567      return this.outcomeReferenceTarget;
1568    }
1569
1570    /**
1571     * @deprecated Use Reference#setResource(IBaseResource) instead
1572     */
1573    @Deprecated
1574    public Observation addOutcomeReferenceTarget() { 
1575      Observation r = new Observation();
1576      if (this.outcomeReferenceTarget == null)
1577        this.outcomeReferenceTarget = new ArrayList<Observation>();
1578      this.outcomeReferenceTarget.add(r);
1579      return r;
1580    }
1581
1582      protected void listChildren(List<Property> children) {
1583        super.listChildren(children);
1584        children.add(new Property("identifier", "Identifier", "Business identifiers assigned to this goal by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier));
1585        children.add(new Property("lifecycleStatus", "code", "The state of the goal throughout its lifecycle.", 0, 1, lifecycleStatus));
1586        children.add(new Property("achievementStatus", "CodeableConcept", "Describes the progression, or lack thereof, towards the goal against the target.", 0, 1, achievementStatus));
1587        children.add(new Property("category", "CodeableConcept", "Indicates a category the goal falls within.", 0, java.lang.Integer.MAX_VALUE, category));
1588        children.add(new Property("priority", "CodeableConcept", "Identifies the mutually agreed level of importance associated with reaching/sustaining the goal.", 0, 1, priority));
1589        children.add(new Property("description", "CodeableConcept", "Human-readable and/or coded description of a specific desired objective of care, such as \"control blood pressure\" or \"negotiate an obstacle course\" or \"dance with child at wedding\".", 0, 1, description));
1590        children.add(new Property("subject", "Reference(Patient|Group|Organization)", "Identifies the patient, group or organization for whom the goal is being established.", 0, 1, subject));
1591        children.add(new Property("start[x]", "date|CodeableConcept", "The date or event after which the goal should begin being pursued.", 0, 1, start));
1592        children.add(new Property("target", "", "Indicates what should be done by when.", 0, java.lang.Integer.MAX_VALUE, target));
1593        children.add(new Property("statusDate", "date", "Identifies when the current status.  I.e. When initially created, when achieved, when cancelled, etc.", 0, 1, statusDate));
1594        children.add(new Property("statusReason", "string", "Captures the reason for the current status.", 0, 1, statusReason));
1595        children.add(new Property("expressedBy", "Reference(Patient|Practitioner|PractitionerRole|RelatedPerson)", "Indicates whose goal this is - patient goal, practitioner goal, etc.", 0, 1, expressedBy));
1596        children.add(new Property("addresses", "Reference(Condition|Observation|MedicationStatement|NutritionOrder|ServiceRequest|RiskAssessment)", "The identified conditions and other health record elements that are intended to be addressed by the goal.", 0, java.lang.Integer.MAX_VALUE, addresses));
1597        children.add(new Property("note", "Annotation", "Any comments related to the goal.", 0, java.lang.Integer.MAX_VALUE, note));
1598        children.add(new Property("outcomeCode", "CodeableConcept", "Identifies the change (or lack of change) at the point when the status of the goal is assessed.", 0, java.lang.Integer.MAX_VALUE, outcomeCode));
1599        children.add(new Property("outcomeReference", "Reference(Observation)", "Details of what's changed (or not changed).", 0, java.lang.Integer.MAX_VALUE, outcomeReference));
1600      }
1601
1602      @Override
1603      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1604        switch (_hash) {
1605        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifiers assigned to this goal by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier);
1606        case 1165552636: /*lifecycleStatus*/  return new Property("lifecycleStatus", "code", "The state of the goal throughout its lifecycle.", 0, 1, lifecycleStatus);
1607        case 104524801: /*achievementStatus*/  return new Property("achievementStatus", "CodeableConcept", "Describes the progression, or lack thereof, towards the goal against the target.", 0, 1, achievementStatus);
1608        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "Indicates a category the goal falls within.", 0, java.lang.Integer.MAX_VALUE, category);
1609        case -1165461084: /*priority*/  return new Property("priority", "CodeableConcept", "Identifies the mutually agreed level of importance associated with reaching/sustaining the goal.", 0, 1, priority);
1610        case -1724546052: /*description*/  return new Property("description", "CodeableConcept", "Human-readable and/or coded description of a specific desired objective of care, such as \"control blood pressure\" or \"negotiate an obstacle course\" or \"dance with child at wedding\".", 0, 1, description);
1611        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group|Organization)", "Identifies the patient, group or organization for whom the goal is being established.", 0, 1, subject);
1612        case 1316793566: /*start[x]*/  return new Property("start[x]", "date|CodeableConcept", "The date or event after which the goal should begin being pursued.", 0, 1, start);
1613        case 109757538: /*start*/  return new Property("start[x]", "date|CodeableConcept", "The date or event after which the goal should begin being pursued.", 0, 1, start);
1614        case -2129778896: /*startDate*/  return new Property("start[x]", "date|CodeableConcept", "The date or event after which the goal should begin being pursued.", 0, 1, start);
1615        case -1758833953: /*startCodeableConcept*/  return new Property("start[x]", "date|CodeableConcept", "The date or event after which the goal should begin being pursued.", 0, 1, start);
1616        case -880905839: /*target*/  return new Property("target", "", "Indicates what should be done by when.", 0, java.lang.Integer.MAX_VALUE, target);
1617        case 247524032: /*statusDate*/  return new Property("statusDate", "date", "Identifies when the current status.  I.e. When initially created, when achieved, when cancelled, etc.", 0, 1, statusDate);
1618        case 2051346646: /*statusReason*/  return new Property("statusReason", "string", "Captures the reason for the current status.", 0, 1, statusReason);
1619        case 175423686: /*expressedBy*/  return new Property("expressedBy", "Reference(Patient|Practitioner|PractitionerRole|RelatedPerson)", "Indicates whose goal this is - patient goal, practitioner goal, etc.", 0, 1, expressedBy);
1620        case 874544034: /*addresses*/  return new Property("addresses", "Reference(Condition|Observation|MedicationStatement|NutritionOrder|ServiceRequest|RiskAssessment)", "The identified conditions and other health record elements that are intended to be addressed by the goal.", 0, java.lang.Integer.MAX_VALUE, addresses);
1621        case 3387378: /*note*/  return new Property("note", "Annotation", "Any comments related to the goal.", 0, java.lang.Integer.MAX_VALUE, note);
1622        case 1062482015: /*outcomeCode*/  return new Property("outcomeCode", "CodeableConcept", "Identifies the change (or lack of change) at the point when the status of the goal is assessed.", 0, java.lang.Integer.MAX_VALUE, outcomeCode);
1623        case -782273511: /*outcomeReference*/  return new Property("outcomeReference", "Reference(Observation)", "Details of what's changed (or not changed).", 0, java.lang.Integer.MAX_VALUE, outcomeReference);
1624        default: return super.getNamedProperty(_hash, _name, _checkValid);
1625        }
1626
1627      }
1628
1629      @Override
1630      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1631        switch (hash) {
1632        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1633        case 1165552636: /*lifecycleStatus*/ return this.lifecycleStatus == null ? new Base[0] : new Base[] {this.lifecycleStatus}; // Enumeration<GoalLifecycleStatus>
1634        case 104524801: /*achievementStatus*/ return this.achievementStatus == null ? new Base[0] : new Base[] {this.achievementStatus}; // CodeableConcept
1635        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
1636        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // CodeableConcept
1637        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // CodeableConcept
1638        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
1639        case 109757538: /*start*/ return this.start == null ? new Base[0] : new Base[] {this.start}; // Type
1640        case -880905839: /*target*/ return this.target == null ? new Base[0] : this.target.toArray(new Base[this.target.size()]); // GoalTargetComponent
1641        case 247524032: /*statusDate*/ return this.statusDate == null ? new Base[0] : new Base[] {this.statusDate}; // DateType
1642        case 2051346646: /*statusReason*/ return this.statusReason == null ? new Base[0] : new Base[] {this.statusReason}; // StringType
1643        case 175423686: /*expressedBy*/ return this.expressedBy == null ? new Base[0] : new Base[] {this.expressedBy}; // Reference
1644        case 874544034: /*addresses*/ return this.addresses == null ? new Base[0] : this.addresses.toArray(new Base[this.addresses.size()]); // Reference
1645        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
1646        case 1062482015: /*outcomeCode*/ return this.outcomeCode == null ? new Base[0] : this.outcomeCode.toArray(new Base[this.outcomeCode.size()]); // CodeableConcept
1647        case -782273511: /*outcomeReference*/ return this.outcomeReference == null ? new Base[0] : this.outcomeReference.toArray(new Base[this.outcomeReference.size()]); // Reference
1648        default: return super.getProperty(hash, name, checkValid);
1649        }
1650
1651      }
1652
1653      @Override
1654      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1655        switch (hash) {
1656        case -1618432855: // identifier
1657          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1658          return value;
1659        case 1165552636: // lifecycleStatus
1660          value = new GoalLifecycleStatusEnumFactory().fromType(castToCode(value));
1661          this.lifecycleStatus = (Enumeration) value; // Enumeration<GoalLifecycleStatus>
1662          return value;
1663        case 104524801: // achievementStatus
1664          this.achievementStatus = castToCodeableConcept(value); // CodeableConcept
1665          return value;
1666        case 50511102: // category
1667          this.getCategory().add(castToCodeableConcept(value)); // CodeableConcept
1668          return value;
1669        case -1165461084: // priority
1670          this.priority = castToCodeableConcept(value); // CodeableConcept
1671          return value;
1672        case -1724546052: // description
1673          this.description = castToCodeableConcept(value); // CodeableConcept
1674          return value;
1675        case -1867885268: // subject
1676          this.subject = castToReference(value); // Reference
1677          return value;
1678        case 109757538: // start
1679          this.start = castToType(value); // Type
1680          return value;
1681        case -880905839: // target
1682          this.getTarget().add((GoalTargetComponent) value); // GoalTargetComponent
1683          return value;
1684        case 247524032: // statusDate
1685          this.statusDate = castToDate(value); // DateType
1686          return value;
1687        case 2051346646: // statusReason
1688          this.statusReason = castToString(value); // StringType
1689          return value;
1690        case 175423686: // expressedBy
1691          this.expressedBy = castToReference(value); // Reference
1692          return value;
1693        case 874544034: // addresses
1694          this.getAddresses().add(castToReference(value)); // Reference
1695          return value;
1696        case 3387378: // note
1697          this.getNote().add(castToAnnotation(value)); // Annotation
1698          return value;
1699        case 1062482015: // outcomeCode
1700          this.getOutcomeCode().add(castToCodeableConcept(value)); // CodeableConcept
1701          return value;
1702        case -782273511: // outcomeReference
1703          this.getOutcomeReference().add(castToReference(value)); // Reference
1704          return value;
1705        default: return super.setProperty(hash, name, value);
1706        }
1707
1708      }
1709
1710      @Override
1711      public Base setProperty(String name, Base value) throws FHIRException {
1712        if (name.equals("identifier")) {
1713          this.getIdentifier().add(castToIdentifier(value));
1714        } else if (name.equals("lifecycleStatus")) {
1715          value = new GoalLifecycleStatusEnumFactory().fromType(castToCode(value));
1716          this.lifecycleStatus = (Enumeration) value; // Enumeration<GoalLifecycleStatus>
1717        } else if (name.equals("achievementStatus")) {
1718          this.achievementStatus = castToCodeableConcept(value); // CodeableConcept
1719        } else if (name.equals("category")) {
1720          this.getCategory().add(castToCodeableConcept(value));
1721        } else if (name.equals("priority")) {
1722          this.priority = castToCodeableConcept(value); // CodeableConcept
1723        } else if (name.equals("description")) {
1724          this.description = castToCodeableConcept(value); // CodeableConcept
1725        } else if (name.equals("subject")) {
1726          this.subject = castToReference(value); // Reference
1727        } else if (name.equals("start[x]")) {
1728          this.start = castToType(value); // Type
1729        } else if (name.equals("target")) {
1730          this.getTarget().add((GoalTargetComponent) value);
1731        } else if (name.equals("statusDate")) {
1732          this.statusDate = castToDate(value); // DateType
1733        } else if (name.equals("statusReason")) {
1734          this.statusReason = castToString(value); // StringType
1735        } else if (name.equals("expressedBy")) {
1736          this.expressedBy = castToReference(value); // Reference
1737        } else if (name.equals("addresses")) {
1738          this.getAddresses().add(castToReference(value));
1739        } else if (name.equals("note")) {
1740          this.getNote().add(castToAnnotation(value));
1741        } else if (name.equals("outcomeCode")) {
1742          this.getOutcomeCode().add(castToCodeableConcept(value));
1743        } else if (name.equals("outcomeReference")) {
1744          this.getOutcomeReference().add(castToReference(value));
1745        } else
1746          return super.setProperty(name, value);
1747        return value;
1748      }
1749
1750      @Override
1751      public Base makeProperty(int hash, String name) throws FHIRException {
1752        switch (hash) {
1753        case -1618432855:  return addIdentifier(); 
1754        case 1165552636:  return getLifecycleStatusElement();
1755        case 104524801:  return getAchievementStatus(); 
1756        case 50511102:  return addCategory(); 
1757        case -1165461084:  return getPriority(); 
1758        case -1724546052:  return getDescription(); 
1759        case -1867885268:  return getSubject(); 
1760        case 1316793566:  return getStart(); 
1761        case 109757538:  return getStart(); 
1762        case -880905839:  return addTarget(); 
1763        case 247524032:  return getStatusDateElement();
1764        case 2051346646:  return getStatusReasonElement();
1765        case 175423686:  return getExpressedBy(); 
1766        case 874544034:  return addAddresses(); 
1767        case 3387378:  return addNote(); 
1768        case 1062482015:  return addOutcomeCode(); 
1769        case -782273511:  return addOutcomeReference(); 
1770        default: return super.makeProperty(hash, name);
1771        }
1772
1773      }
1774
1775      @Override
1776      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1777        switch (hash) {
1778        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1779        case 1165552636: /*lifecycleStatus*/ return new String[] {"code"};
1780        case 104524801: /*achievementStatus*/ return new String[] {"CodeableConcept"};
1781        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
1782        case -1165461084: /*priority*/ return new String[] {"CodeableConcept"};
1783        case -1724546052: /*description*/ return new String[] {"CodeableConcept"};
1784        case -1867885268: /*subject*/ return new String[] {"Reference"};
1785        case 109757538: /*start*/ return new String[] {"date", "CodeableConcept"};
1786        case -880905839: /*target*/ return new String[] {};
1787        case 247524032: /*statusDate*/ return new String[] {"date"};
1788        case 2051346646: /*statusReason*/ return new String[] {"string"};
1789        case 175423686: /*expressedBy*/ return new String[] {"Reference"};
1790        case 874544034: /*addresses*/ return new String[] {"Reference"};
1791        case 3387378: /*note*/ return new String[] {"Annotation"};
1792        case 1062482015: /*outcomeCode*/ return new String[] {"CodeableConcept"};
1793        case -782273511: /*outcomeReference*/ return new String[] {"Reference"};
1794        default: return super.getTypesForProperty(hash, name);
1795        }
1796
1797      }
1798
1799      @Override
1800      public Base addChild(String name) throws FHIRException {
1801        if (name.equals("identifier")) {
1802          return addIdentifier();
1803        }
1804        else if (name.equals("lifecycleStatus")) {
1805          throw new FHIRException("Cannot call addChild on a primitive type Goal.lifecycleStatus");
1806        }
1807        else if (name.equals("achievementStatus")) {
1808          this.achievementStatus = new CodeableConcept();
1809          return this.achievementStatus;
1810        }
1811        else if (name.equals("category")) {
1812          return addCategory();
1813        }
1814        else if (name.equals("priority")) {
1815          this.priority = new CodeableConcept();
1816          return this.priority;
1817        }
1818        else if (name.equals("description")) {
1819          this.description = new CodeableConcept();
1820          return this.description;
1821        }
1822        else if (name.equals("subject")) {
1823          this.subject = new Reference();
1824          return this.subject;
1825        }
1826        else if (name.equals("startDate")) {
1827          this.start = new DateType();
1828          return this.start;
1829        }
1830        else if (name.equals("startCodeableConcept")) {
1831          this.start = new CodeableConcept();
1832          return this.start;
1833        }
1834        else if (name.equals("target")) {
1835          return addTarget();
1836        }
1837        else if (name.equals("statusDate")) {
1838          throw new FHIRException("Cannot call addChild on a primitive type Goal.statusDate");
1839        }
1840        else if (name.equals("statusReason")) {
1841          throw new FHIRException("Cannot call addChild on a primitive type Goal.statusReason");
1842        }
1843        else if (name.equals("expressedBy")) {
1844          this.expressedBy = new Reference();
1845          return this.expressedBy;
1846        }
1847        else if (name.equals("addresses")) {
1848          return addAddresses();
1849        }
1850        else if (name.equals("note")) {
1851          return addNote();
1852        }
1853        else if (name.equals("outcomeCode")) {
1854          return addOutcomeCode();
1855        }
1856        else if (name.equals("outcomeReference")) {
1857          return addOutcomeReference();
1858        }
1859        else
1860          return super.addChild(name);
1861      }
1862
1863  public String fhirType() {
1864    return "Goal";
1865
1866  }
1867
1868      public Goal copy() {
1869        Goal dst = new Goal();
1870        copyValues(dst);
1871        return dst;
1872      }
1873
1874      public void copyValues(Goal dst) {
1875        super.copyValues(dst);
1876        if (identifier != null) {
1877          dst.identifier = new ArrayList<Identifier>();
1878          for (Identifier i : identifier)
1879            dst.identifier.add(i.copy());
1880        };
1881        dst.lifecycleStatus = lifecycleStatus == null ? null : lifecycleStatus.copy();
1882        dst.achievementStatus = achievementStatus == null ? null : achievementStatus.copy();
1883        if (category != null) {
1884          dst.category = new ArrayList<CodeableConcept>();
1885          for (CodeableConcept i : category)
1886            dst.category.add(i.copy());
1887        };
1888        dst.priority = priority == null ? null : priority.copy();
1889        dst.description = description == null ? null : description.copy();
1890        dst.subject = subject == null ? null : subject.copy();
1891        dst.start = start == null ? null : start.copy();
1892        if (target != null) {
1893          dst.target = new ArrayList<GoalTargetComponent>();
1894          for (GoalTargetComponent i : target)
1895            dst.target.add(i.copy());
1896        };
1897        dst.statusDate = statusDate == null ? null : statusDate.copy();
1898        dst.statusReason = statusReason == null ? null : statusReason.copy();
1899        dst.expressedBy = expressedBy == null ? null : expressedBy.copy();
1900        if (addresses != null) {
1901          dst.addresses = new ArrayList<Reference>();
1902          for (Reference i : addresses)
1903            dst.addresses.add(i.copy());
1904        };
1905        if (note != null) {
1906          dst.note = new ArrayList<Annotation>();
1907          for (Annotation i : note)
1908            dst.note.add(i.copy());
1909        };
1910        if (outcomeCode != null) {
1911          dst.outcomeCode = new ArrayList<CodeableConcept>();
1912          for (CodeableConcept i : outcomeCode)
1913            dst.outcomeCode.add(i.copy());
1914        };
1915        if (outcomeReference != null) {
1916          dst.outcomeReference = new ArrayList<Reference>();
1917          for (Reference i : outcomeReference)
1918            dst.outcomeReference.add(i.copy());
1919        };
1920      }
1921
1922      protected Goal typedCopy() {
1923        return copy();
1924      }
1925
1926      @Override
1927      public boolean equalsDeep(Base other_) {
1928        if (!super.equalsDeep(other_))
1929          return false;
1930        if (!(other_ instanceof Goal))
1931          return false;
1932        Goal o = (Goal) other_;
1933        return compareDeep(identifier, o.identifier, true) && compareDeep(lifecycleStatus, o.lifecycleStatus, true)
1934           && compareDeep(achievementStatus, o.achievementStatus, true) && compareDeep(category, o.category, true)
1935           && compareDeep(priority, o.priority, true) && compareDeep(description, o.description, true) && compareDeep(subject, o.subject, true)
1936           && compareDeep(start, o.start, true) && compareDeep(target, o.target, true) && compareDeep(statusDate, o.statusDate, true)
1937           && compareDeep(statusReason, o.statusReason, true) && compareDeep(expressedBy, o.expressedBy, true)
1938           && compareDeep(addresses, o.addresses, true) && compareDeep(note, o.note, true) && compareDeep(outcomeCode, o.outcomeCode, true)
1939           && compareDeep(outcomeReference, o.outcomeReference, true);
1940      }
1941
1942      @Override
1943      public boolean equalsShallow(Base other_) {
1944        if (!super.equalsShallow(other_))
1945          return false;
1946        if (!(other_ instanceof Goal))
1947          return false;
1948        Goal o = (Goal) other_;
1949        return compareValues(lifecycleStatus, o.lifecycleStatus, true) && compareValues(statusDate, o.statusDate, true)
1950           && compareValues(statusReason, o.statusReason, true);
1951      }
1952
1953      public boolean isEmpty() {
1954        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, lifecycleStatus
1955          , achievementStatus, category, priority, description, subject, start, target, statusDate
1956          , statusReason, expressedBy, addresses, note, outcomeCode, outcomeReference);
1957      }
1958
1959  @Override
1960  public ResourceType getResourceType() {
1961    return ResourceType.Goal;
1962   }
1963
1964 /**
1965   * Search parameter: <b>identifier</b>
1966   * <p>
1967   * Description: <b>External Ids for this goal</b><br>
1968   * Type: <b>token</b><br>
1969   * Path: <b>Goal.identifier</b><br>
1970   * </p>
1971   */
1972  @SearchParamDefinition(name="identifier", path="Goal.identifier", description="External Ids for this goal", type="token" )
1973  public static final String SP_IDENTIFIER = "identifier";
1974 /**
1975   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1976   * <p>
1977   * Description: <b>External Ids for this goal</b><br>
1978   * Type: <b>token</b><br>
1979   * Path: <b>Goal.identifier</b><br>
1980   * </p>
1981   */
1982  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1983
1984 /**
1985   * Search parameter: <b>lifecycle-status</b>
1986   * <p>
1987   * Description: <b>proposed | planned | accepted | active | on-hold | completed | cancelled | entered-in-error | rejected</b><br>
1988   * Type: <b>token</b><br>
1989   * Path: <b>Goal.lifecycleStatus</b><br>
1990   * </p>
1991   */
1992  @SearchParamDefinition(name="lifecycle-status", path="Goal.lifecycleStatus", description="proposed | planned | accepted | active | on-hold | completed | cancelled | entered-in-error | rejected", type="token" )
1993  public static final String SP_LIFECYCLE_STATUS = "lifecycle-status";
1994 /**
1995   * <b>Fluent Client</b> search parameter constant for <b>lifecycle-status</b>
1996   * <p>
1997   * Description: <b>proposed | planned | accepted | active | on-hold | completed | cancelled | entered-in-error | rejected</b><br>
1998   * Type: <b>token</b><br>
1999   * Path: <b>Goal.lifecycleStatus</b><br>
2000   * </p>
2001   */
2002  public static final ca.uhn.fhir.rest.gclient.TokenClientParam LIFECYCLE_STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_LIFECYCLE_STATUS);
2003
2004 /**
2005   * Search parameter: <b>achievement-status</b>
2006   * <p>
2007   * Description: <b>in-progress | improving | worsening | no-change | achieved | sustaining | not-achieved | no-progress | not-attainable</b><br>
2008   * Type: <b>token</b><br>
2009   * Path: <b>Goal.achievementStatus</b><br>
2010   * </p>
2011   */
2012  @SearchParamDefinition(name="achievement-status", path="Goal.achievementStatus", description="in-progress | improving | worsening | no-change | achieved | sustaining | not-achieved | no-progress | not-attainable", type="token" )
2013  public static final String SP_ACHIEVEMENT_STATUS = "achievement-status";
2014 /**
2015   * <b>Fluent Client</b> search parameter constant for <b>achievement-status</b>
2016   * <p>
2017   * Description: <b>in-progress | improving | worsening | no-change | achieved | sustaining | not-achieved | no-progress | not-attainable</b><br>
2018   * Type: <b>token</b><br>
2019   * Path: <b>Goal.achievementStatus</b><br>
2020   * </p>
2021   */
2022  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACHIEVEMENT_STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACHIEVEMENT_STATUS);
2023
2024 /**
2025   * Search parameter: <b>patient</b>
2026   * <p>
2027   * Description: <b>Who this goal is intended for</b><br>
2028   * Type: <b>reference</b><br>
2029   * Path: <b>Goal.subject</b><br>
2030   * </p>
2031   */
2032  @SearchParamDefinition(name="patient", path="Goal.subject.where(resolve() is Patient)", description="Who this goal is intended for", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Patient.class } )
2033  public static final String SP_PATIENT = "patient";
2034 /**
2035   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2036   * <p>
2037   * Description: <b>Who this goal is intended for</b><br>
2038   * Type: <b>reference</b><br>
2039   * Path: <b>Goal.subject</b><br>
2040   * </p>
2041   */
2042  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2043
2044/**
2045   * Constant for fluent queries to be used to add include statements. Specifies
2046   * the path value of "<b>Goal:patient</b>".
2047   */
2048  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Goal:patient").toLocked();
2049
2050 /**
2051   * Search parameter: <b>subject</b>
2052   * <p>
2053   * Description: <b>Who this goal is intended for</b><br>
2054   * Type: <b>reference</b><br>
2055   * Path: <b>Goal.subject</b><br>
2056   * </p>
2057   */
2058  @SearchParamDefinition(name="subject", path="Goal.subject", description="Who this goal is intended for", type="reference", target={Group.class, Organization.class, Patient.class } )
2059  public static final String SP_SUBJECT = "subject";
2060 /**
2061   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
2062   * <p>
2063   * Description: <b>Who this goal is intended for</b><br>
2064   * Type: <b>reference</b><br>
2065   * Path: <b>Goal.subject</b><br>
2066   * </p>
2067   */
2068  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
2069
2070/**
2071   * Constant for fluent queries to be used to add include statements. Specifies
2072   * the path value of "<b>Goal:subject</b>".
2073   */
2074  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Goal:subject").toLocked();
2075
2076 /**
2077   * Search parameter: <b>start-date</b>
2078   * <p>
2079   * Description: <b>When goal pursuit begins</b><br>
2080   * Type: <b>date</b><br>
2081   * Path: <b>Goal.startDate</b><br>
2082   * </p>
2083   */
2084  @SearchParamDefinition(name="start-date", path="(Goal.start as date)", description="When goal pursuit begins", type="date" )
2085  public static final String SP_START_DATE = "start-date";
2086 /**
2087   * <b>Fluent Client</b> search parameter constant for <b>start-date</b>
2088   * <p>
2089   * Description: <b>When goal pursuit begins</b><br>
2090   * Type: <b>date</b><br>
2091   * Path: <b>Goal.startDate</b><br>
2092   * </p>
2093   */
2094  public static final ca.uhn.fhir.rest.gclient.DateClientParam START_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_START_DATE);
2095
2096 /**
2097   * Search parameter: <b>category</b>
2098   * <p>
2099   * Description: <b>E.g. Treatment, dietary, behavioral, etc.</b><br>
2100   * Type: <b>token</b><br>
2101   * Path: <b>Goal.category</b><br>
2102   * </p>
2103   */
2104  @SearchParamDefinition(name="category", path="Goal.category", description="E.g. Treatment, dietary, behavioral, etc.", type="token" )
2105  public static final String SP_CATEGORY = "category";
2106 /**
2107   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2108   * <p>
2109   * Description: <b>E.g. Treatment, dietary, behavioral, etc.</b><br>
2110   * Type: <b>token</b><br>
2111   * Path: <b>Goal.category</b><br>
2112   * </p>
2113   */
2114  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2115
2116 /**
2117   * Search parameter: <b>target-date</b>
2118   * <p>
2119   * Description: <b>Reach goal on or before</b><br>
2120   * Type: <b>date</b><br>
2121   * Path: <b>Goal.target.dueDate</b><br>
2122   * </p>
2123   */
2124  @SearchParamDefinition(name="target-date", path="(Goal.target.due as date)", description="Reach goal on or before", type="date" )
2125  public static final String SP_TARGET_DATE = "target-date";
2126 /**
2127   * <b>Fluent Client</b> search parameter constant for <b>target-date</b>
2128   * <p>
2129   * Description: <b>Reach goal on or before</b><br>
2130   * Type: <b>date</b><br>
2131   * Path: <b>Goal.target.dueDate</b><br>
2132   * </p>
2133   */
2134  public static final ca.uhn.fhir.rest.gclient.DateClientParam TARGET_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_TARGET_DATE);
2135
2136
2137}