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