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