001package org.hl7.fhir.dstu3.model;
002
003
004
005
006/*
007  Copyright (c) 2011+, HL7, Inc.
008  All rights reserved.
009  
010  Redistribution and use in source and binary forms, with or without modification, 
011  are permitted provided that the following conditions are met:
012  
013   * Redistributions of source code must retain the above copyright notice, this 
014     list of conditions and the following disclaimer.
015   * Redistributions in binary form must reproduce the above copyright notice, 
016     this list of conditions and the following disclaimer in the documentation 
017     and/or other materials provided with the distribution.
018   * Neither the name of HL7 nor the names of its contributors may be used to 
019     endorse or promote products derived from this software without specific 
020     prior written permission.
021  
022  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
023  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
024  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
025  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
026  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
027  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
028  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
029  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
030  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
031  POSSIBILITY OF SUCH DAMAGE.
032  
033*/
034
035// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
036import java.util.ArrayList;
037import java.util.Date;
038import java.util.List;
039
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.exceptions.FHIRFormatError;
042import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
043import org.hl7.fhir.utilities.Utilities;
044
045import ca.uhn.fhir.model.api.annotation.Block;
046import ca.uhn.fhir.model.api.annotation.Child;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.ResourceDef;
049import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
050/**
051 * Measurements and simple assertions made about a patient, device or other subject.
052 */
053@ResourceDef(name="Observation", profile="http://hl7.org/fhir/Profile/Observation")
054public class Observation extends DomainResource {
055
056    public enum ObservationStatus {
057        /**
058         * The existence of the observation is registered, but there is no result yet available.
059         */
060        REGISTERED, 
061        /**
062         * This is an initial or interim observation: data may be incomplete or unverified.
063         */
064        PRELIMINARY, 
065        /**
066         * The observation is complete.
067         */
068        FINAL, 
069        /**
070         * Subsequent to being Final, the observation has been modified subsequent.  This includes updates/new information and corrections.
071         */
072        AMENDED, 
073        /**
074         * Subsequent to being Final, the observation has been modified to correct an error in the test result.
075         */
076        CORRECTED, 
077        /**
078         * The observation is unavailable because the measurement was not started or not completed (also sometimes called "aborted").
079         */
080        CANCELLED, 
081        /**
082         * The observation has been withdrawn following previous final release.  This electronic record should never have existed, though it is possible that real-world decisions were based on it. (If real-world activity has occurred, the status should be "cancelled" rather than "entered-in-error".)
083         */
084        ENTEREDINERROR, 
085        /**
086         * The authoring system does not know which of the status values currently applies for this request. Note: This concept is not to be used for "other" - one of the listed statuses is presumed to apply, but the authoring system does not know which.
087         */
088        UNKNOWN, 
089        /**
090         * added to help the parsers with the generic types
091         */
092        NULL;
093        public static ObservationStatus fromCode(String codeString) throws FHIRException {
094            if (codeString == null || "".equals(codeString))
095                return null;
096        if ("registered".equals(codeString))
097          return REGISTERED;
098        if ("preliminary".equals(codeString))
099          return PRELIMINARY;
100        if ("final".equals(codeString))
101          return FINAL;
102        if ("amended".equals(codeString))
103          return AMENDED;
104        if ("corrected".equals(codeString))
105          return CORRECTED;
106        if ("cancelled".equals(codeString))
107          return CANCELLED;
108        if ("entered-in-error".equals(codeString))
109          return ENTEREDINERROR;
110        if ("unknown".equals(codeString))
111          return UNKNOWN;
112        if (Configuration.isAcceptInvalidEnums())
113          return null;
114        else
115          throw new FHIRException("Unknown ObservationStatus code '"+codeString+"'");
116        }
117        public String toCode() {
118          switch (this) {
119            case REGISTERED: return "registered";
120            case PRELIMINARY: return "preliminary";
121            case FINAL: return "final";
122            case AMENDED: return "amended";
123            case CORRECTED: return "corrected";
124            case CANCELLED: return "cancelled";
125            case ENTEREDINERROR: return "entered-in-error";
126            case UNKNOWN: return "unknown";
127            case NULL: return null;
128            default: return "?";
129          }
130        }
131        public String getSystem() {
132          switch (this) {
133            case REGISTERED: return "http://hl7.org/fhir/observation-status";
134            case PRELIMINARY: return "http://hl7.org/fhir/observation-status";
135            case FINAL: return "http://hl7.org/fhir/observation-status";
136            case AMENDED: return "http://hl7.org/fhir/observation-status";
137            case CORRECTED: return "http://hl7.org/fhir/observation-status";
138            case CANCELLED: return "http://hl7.org/fhir/observation-status";
139            case ENTEREDINERROR: return "http://hl7.org/fhir/observation-status";
140            case UNKNOWN: return "http://hl7.org/fhir/observation-status";
141            case NULL: return null;
142            default: return "?";
143          }
144        }
145        public String getDefinition() {
146          switch (this) {
147            case REGISTERED: return "The existence of the observation is registered, but there is no result yet available.";
148            case PRELIMINARY: return "This is an initial or interim observation: data may be incomplete or unverified.";
149            case FINAL: return "The observation is complete.";
150            case AMENDED: return "Subsequent to being Final, the observation has been modified subsequent.  This includes updates/new information and corrections.";
151            case CORRECTED: return "Subsequent to being Final, the observation has been modified to correct an error in the test result.";
152            case CANCELLED: return "The observation is unavailable because the measurement was not started or not completed (also sometimes called \"aborted\").";
153            case ENTEREDINERROR: return "The observation has been withdrawn following previous final release.  This electronic record should never have existed, though it is possible that real-world decisions were based on it. (If real-world activity has occurred, the status should be \"cancelled\" rather than \"entered-in-error\".)";
154            case UNKNOWN: return "The authoring system does not know which of the status values currently applies for this request. Note: This concept is not to be used for \"other\" - one of the listed statuses is presumed to apply, but the authoring system does not know which.";
155            case NULL: return null;
156            default: return "?";
157          }
158        }
159        public String getDisplay() {
160          switch (this) {
161            case REGISTERED: return "Registered";
162            case PRELIMINARY: return "Preliminary";
163            case FINAL: return "Final";
164            case AMENDED: return "Amended";
165            case CORRECTED: return "Corrected";
166            case CANCELLED: return "Cancelled";
167            case ENTEREDINERROR: return "Entered in Error";
168            case UNKNOWN: return "Unknown";
169            case NULL: return null;
170            default: return "?";
171          }
172        }
173    }
174
175  public static class ObservationStatusEnumFactory implements EnumFactory<ObservationStatus> {
176    public ObservationStatus fromCode(String codeString) throws IllegalArgumentException {
177      if (codeString == null || "".equals(codeString))
178            if (codeString == null || "".equals(codeString))
179                return null;
180        if ("registered".equals(codeString))
181          return ObservationStatus.REGISTERED;
182        if ("preliminary".equals(codeString))
183          return ObservationStatus.PRELIMINARY;
184        if ("final".equals(codeString))
185          return ObservationStatus.FINAL;
186        if ("amended".equals(codeString))
187          return ObservationStatus.AMENDED;
188        if ("corrected".equals(codeString))
189          return ObservationStatus.CORRECTED;
190        if ("cancelled".equals(codeString))
191          return ObservationStatus.CANCELLED;
192        if ("entered-in-error".equals(codeString))
193          return ObservationStatus.ENTEREDINERROR;
194        if ("unknown".equals(codeString))
195          return ObservationStatus.UNKNOWN;
196        throw new IllegalArgumentException("Unknown ObservationStatus code '"+codeString+"'");
197        }
198        public Enumeration<ObservationStatus> fromType(PrimitiveType<?> code) throws FHIRException {
199          if (code == null)
200            return null;
201          if (code.isEmpty())
202            return new Enumeration<ObservationStatus>(this);
203          String codeString = code.asStringValue();
204          if (codeString == null || "".equals(codeString))
205            return null;
206        if ("registered".equals(codeString))
207          return new Enumeration<ObservationStatus>(this, ObservationStatus.REGISTERED);
208        if ("preliminary".equals(codeString))
209          return new Enumeration<ObservationStatus>(this, ObservationStatus.PRELIMINARY);
210        if ("final".equals(codeString))
211          return new Enumeration<ObservationStatus>(this, ObservationStatus.FINAL);
212        if ("amended".equals(codeString))
213          return new Enumeration<ObservationStatus>(this, ObservationStatus.AMENDED);
214        if ("corrected".equals(codeString))
215          return new Enumeration<ObservationStatus>(this, ObservationStatus.CORRECTED);
216        if ("cancelled".equals(codeString))
217          return new Enumeration<ObservationStatus>(this, ObservationStatus.CANCELLED);
218        if ("entered-in-error".equals(codeString))
219          return new Enumeration<ObservationStatus>(this, ObservationStatus.ENTEREDINERROR);
220        if ("unknown".equals(codeString))
221          return new Enumeration<ObservationStatus>(this, ObservationStatus.UNKNOWN);
222        throw new FHIRException("Unknown ObservationStatus code '"+codeString+"'");
223        }
224    public String toCode(ObservationStatus code) {
225      if (code == ObservationStatus.REGISTERED)
226        return "registered";
227      if (code == ObservationStatus.PRELIMINARY)
228        return "preliminary";
229      if (code == ObservationStatus.FINAL)
230        return "final";
231      if (code == ObservationStatus.AMENDED)
232        return "amended";
233      if (code == ObservationStatus.CORRECTED)
234        return "corrected";
235      if (code == ObservationStatus.CANCELLED)
236        return "cancelled";
237      if (code == ObservationStatus.ENTEREDINERROR)
238        return "entered-in-error";
239      if (code == ObservationStatus.UNKNOWN)
240        return "unknown";
241      return "?";
242      }
243    public String toSystem(ObservationStatus code) {
244      return code.getSystem();
245      }
246    }
247
248    public enum ObservationRelationshipType {
249        /**
250         * This observation is a group observation (e.g. a battery, a panel of tests, a set of vital sign measurements) that includes the target as a member of the group.
251         */
252        HASMEMBER, 
253        /**
254         * The target resource (Observation or QuestionnaireResponse) is part of the information from which this observation value is derived. (e.g. calculated anion gap, Apgar score)  NOTE:  "derived-from" is the only logical choice when referencing QuestionnaireResponse.
255         */
256        DERIVEDFROM, 
257        /**
258         * This observation follows the target observation (e.g. timed tests such as Glucose Tolerance Test).
259         */
260        SEQUELTO, 
261        /**
262         * This observation replaces a previous observation (i.e. a revised value). The target observation is now obsolete.
263         */
264        REPLACES, 
265        /**
266         * The value of the target observation qualifies (refines) the semantics of the source observation (e.g. a lipemia measure target from a plasma measure).
267         */
268        QUALIFIEDBY, 
269        /**
270         * The value of the target observation interferes (degrades quality, or prevents valid observation) with the semantics of the source observation (e.g. a hemolysis measure target from a plasma potassium measure, which has no value).
271         */
272        INTERFEREDBY, 
273        /**
274         * added to help the parsers with the generic types
275         */
276        NULL;
277        public static ObservationRelationshipType fromCode(String codeString) throws FHIRException {
278            if (codeString == null || "".equals(codeString))
279                return null;
280        if ("has-member".equals(codeString))
281          return HASMEMBER;
282        if ("derived-from".equals(codeString))
283          return DERIVEDFROM;
284        if ("sequel-to".equals(codeString))
285          return SEQUELTO;
286        if ("replaces".equals(codeString))
287          return REPLACES;
288        if ("qualified-by".equals(codeString))
289          return QUALIFIEDBY;
290        if ("interfered-by".equals(codeString))
291          return INTERFEREDBY;
292        if (Configuration.isAcceptInvalidEnums())
293          return null;
294        else
295          throw new FHIRException("Unknown ObservationRelationshipType code '"+codeString+"'");
296        }
297        public String toCode() {
298          switch (this) {
299            case HASMEMBER: return "has-member";
300            case DERIVEDFROM: return "derived-from";
301            case SEQUELTO: return "sequel-to";
302            case REPLACES: return "replaces";
303            case QUALIFIEDBY: return "qualified-by";
304            case INTERFEREDBY: return "interfered-by";
305            case NULL: return null;
306            default: return "?";
307          }
308        }
309        public String getSystem() {
310          switch (this) {
311            case HASMEMBER: return "http://hl7.org/fhir/observation-relationshiptypes";
312            case DERIVEDFROM: return "http://hl7.org/fhir/observation-relationshiptypes";
313            case SEQUELTO: return "http://hl7.org/fhir/observation-relationshiptypes";
314            case REPLACES: return "http://hl7.org/fhir/observation-relationshiptypes";
315            case QUALIFIEDBY: return "http://hl7.org/fhir/observation-relationshiptypes";
316            case INTERFEREDBY: return "http://hl7.org/fhir/observation-relationshiptypes";
317            case NULL: return null;
318            default: return "?";
319          }
320        }
321        public String getDefinition() {
322          switch (this) {
323            case HASMEMBER: return "This observation is a group observation (e.g. a battery, a panel of tests, a set of vital sign measurements) that includes the target as a member of the group.";
324            case DERIVEDFROM: return "The target resource (Observation or QuestionnaireResponse) is part of the information from which this observation value is derived. (e.g. calculated anion gap, Apgar score)  NOTE:  \"derived-from\" is the only logical choice when referencing QuestionnaireResponse.";
325            case SEQUELTO: return "This observation follows the target observation (e.g. timed tests such as Glucose Tolerance Test).";
326            case REPLACES: return "This observation replaces a previous observation (i.e. a revised value). The target observation is now obsolete.";
327            case QUALIFIEDBY: return "The value of the target observation qualifies (refines) the semantics of the source observation (e.g. a lipemia measure target from a plasma measure).";
328            case INTERFEREDBY: return "The value of the target observation interferes (degrades quality, or prevents valid observation) with the semantics of the source observation (e.g. a hemolysis measure target from a plasma potassium measure, which has no value).";
329            case NULL: return null;
330            default: return "?";
331          }
332        }
333        public String getDisplay() {
334          switch (this) {
335            case HASMEMBER: return "Has Member";
336            case DERIVEDFROM: return "Derived From";
337            case SEQUELTO: return "Sequel To";
338            case REPLACES: return "Replaces";
339            case QUALIFIEDBY: return "Qualified By";
340            case INTERFEREDBY: return "Interfered By";
341            case NULL: return null;
342            default: return "?";
343          }
344        }
345    }
346
347  public static class ObservationRelationshipTypeEnumFactory implements EnumFactory<ObservationRelationshipType> {
348    public ObservationRelationshipType fromCode(String codeString) throws IllegalArgumentException {
349      if (codeString == null || "".equals(codeString))
350            if (codeString == null || "".equals(codeString))
351                return null;
352        if ("has-member".equals(codeString))
353          return ObservationRelationshipType.HASMEMBER;
354        if ("derived-from".equals(codeString))
355          return ObservationRelationshipType.DERIVEDFROM;
356        if ("sequel-to".equals(codeString))
357          return ObservationRelationshipType.SEQUELTO;
358        if ("replaces".equals(codeString))
359          return ObservationRelationshipType.REPLACES;
360        if ("qualified-by".equals(codeString))
361          return ObservationRelationshipType.QUALIFIEDBY;
362        if ("interfered-by".equals(codeString))
363          return ObservationRelationshipType.INTERFEREDBY;
364        throw new IllegalArgumentException("Unknown ObservationRelationshipType code '"+codeString+"'");
365        }
366        public Enumeration<ObservationRelationshipType> fromType(PrimitiveType<?> code) throws FHIRException {
367          if (code == null)
368            return null;
369          if (code.isEmpty())
370            return new Enumeration<ObservationRelationshipType>(this);
371          String codeString = code.asStringValue();
372          if (codeString == null || "".equals(codeString))
373            return null;
374        if ("has-member".equals(codeString))
375          return new Enumeration<ObservationRelationshipType>(this, ObservationRelationshipType.HASMEMBER);
376        if ("derived-from".equals(codeString))
377          return new Enumeration<ObservationRelationshipType>(this, ObservationRelationshipType.DERIVEDFROM);
378        if ("sequel-to".equals(codeString))
379          return new Enumeration<ObservationRelationshipType>(this, ObservationRelationshipType.SEQUELTO);
380        if ("replaces".equals(codeString))
381          return new Enumeration<ObservationRelationshipType>(this, ObservationRelationshipType.REPLACES);
382        if ("qualified-by".equals(codeString))
383          return new Enumeration<ObservationRelationshipType>(this, ObservationRelationshipType.QUALIFIEDBY);
384        if ("interfered-by".equals(codeString))
385          return new Enumeration<ObservationRelationshipType>(this, ObservationRelationshipType.INTERFEREDBY);
386        throw new FHIRException("Unknown ObservationRelationshipType code '"+codeString+"'");
387        }
388    public String toCode(ObservationRelationshipType code) {
389      if (code == ObservationRelationshipType.HASMEMBER)
390        return "has-member";
391      if (code == ObservationRelationshipType.DERIVEDFROM)
392        return "derived-from";
393      if (code == ObservationRelationshipType.SEQUELTO)
394        return "sequel-to";
395      if (code == ObservationRelationshipType.REPLACES)
396        return "replaces";
397      if (code == ObservationRelationshipType.QUALIFIEDBY)
398        return "qualified-by";
399      if (code == ObservationRelationshipType.INTERFEREDBY)
400        return "interfered-by";
401      return "?";
402      }
403    public String toSystem(ObservationRelationshipType code) {
404      return code.getSystem();
405      }
406    }
407
408    @Block()
409    public static class ObservationReferenceRangeComponent extends BackboneElement implements IBaseBackboneElement {
410        /**
411         * The value of the low bound of the reference range.  The low bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the low bound is omitted,  it is assumed to be meaningless (e.g. reference range is <=2.3).
412         */
413        @Child(name = "low", type = {SimpleQuantity.class}, order=1, min=0, max=1, modifier=false, summary=false)
414        @Description(shortDefinition="Low Range, if relevant", formalDefinition="The value of the low bound of the reference range.  The low bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the low bound is omitted,  it is assumed to be meaningless (e.g. reference range is <=2.3)." )
415        protected SimpleQuantity low;
416
417        /**
418         * The value of the high bound of the reference range.  The high bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the high bound is omitted,  it is assumed to be meaningless (e.g. reference range is >= 2.3).
419         */
420        @Child(name = "high", type = {SimpleQuantity.class}, order=2, min=0, max=1, modifier=false, summary=false)
421        @Description(shortDefinition="High Range, if relevant", formalDefinition="The value of the high bound of the reference range.  The high bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the high bound is omitted,  it is assumed to be meaningless (e.g. reference range is >= 2.3)." )
422        protected SimpleQuantity high;
423
424        /**
425         * Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range.
426         */
427        @Child(name = "type", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
428        @Description(shortDefinition="Reference range qualifier", formalDefinition="Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range." )
429        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/referencerange-meaning")
430        protected CodeableConcept type;
431
432        /**
433         * Codes to indicate the target population this reference range applies to.  For example, a reference range may be based on the normal population or a particular sex or race.
434         */
435        @Child(name = "appliesTo", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
436        @Description(shortDefinition="Reference range population", formalDefinition="Codes to indicate the target population this reference range applies to.  For example, a reference range may be based on the normal population or a particular sex or race." )
437        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/referencerange-appliesto")
438        protected List<CodeableConcept> appliesTo;
439
440        /**
441         * The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says so.
442         */
443        @Child(name = "age", type = {Range.class}, order=5, min=0, max=1, modifier=false, summary=false)
444        @Description(shortDefinition="Applicable age range, if relevant", formalDefinition="The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says so." )
445        protected Range age;
446
447        /**
448         * Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation.  An example would be a reference value of "Negative" or a list or table of 'normals'.
449         */
450        @Child(name = "text", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
451        @Description(shortDefinition="Text based reference range in an observation", formalDefinition="Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation.  An example would be a reference value of \"Negative\" or a list or table of 'normals'." )
452        protected StringType text;
453
454        private static final long serialVersionUID = -955638831L;
455
456    /**
457     * Constructor
458     */
459      public ObservationReferenceRangeComponent() {
460        super();
461      }
462
463        /**
464         * @return {@link #low} (The value of the low bound of the reference range.  The low bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the low bound is omitted,  it is assumed to be meaningless (e.g. reference range is <=2.3).)
465         */
466        public SimpleQuantity getLow() { 
467          if (this.low == null)
468            if (Configuration.errorOnAutoCreate())
469              throw new Error("Attempt to auto-create ObservationReferenceRangeComponent.low");
470            else if (Configuration.doAutoCreate())
471              this.low = new SimpleQuantity(); // cc
472          return this.low;
473        }
474
475        public boolean hasLow() { 
476          return this.low != null && !this.low.isEmpty();
477        }
478
479        /**
480         * @param value {@link #low} (The value of the low bound of the reference range.  The low bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the low bound is omitted,  it is assumed to be meaningless (e.g. reference range is <=2.3).)
481         */
482        public ObservationReferenceRangeComponent setLow(SimpleQuantity value)  { 
483          this.low = value;
484          return this;
485        }
486
487        /**
488         * @return {@link #high} (The value of the high bound of the reference range.  The high bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the high bound is omitted,  it is assumed to be meaningless (e.g. reference range is >= 2.3).)
489         */
490        public SimpleQuantity getHigh() { 
491          if (this.high == null)
492            if (Configuration.errorOnAutoCreate())
493              throw new Error("Attempt to auto-create ObservationReferenceRangeComponent.high");
494            else if (Configuration.doAutoCreate())
495              this.high = new SimpleQuantity(); // cc
496          return this.high;
497        }
498
499        public boolean hasHigh() { 
500          return this.high != null && !this.high.isEmpty();
501        }
502
503        /**
504         * @param value {@link #high} (The value of the high bound of the reference range.  The high bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the high bound is omitted,  it is assumed to be meaningless (e.g. reference range is >= 2.3).)
505         */
506        public ObservationReferenceRangeComponent setHigh(SimpleQuantity value)  { 
507          this.high = value;
508          return this;
509        }
510
511        /**
512         * @return {@link #type} (Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range.)
513         */
514        public CodeableConcept getType() { 
515          if (this.type == null)
516            if (Configuration.errorOnAutoCreate())
517              throw new Error("Attempt to auto-create ObservationReferenceRangeComponent.type");
518            else if (Configuration.doAutoCreate())
519              this.type = new CodeableConcept(); // cc
520          return this.type;
521        }
522
523        public boolean hasType() { 
524          return this.type != null && !this.type.isEmpty();
525        }
526
527        /**
528         * @param value {@link #type} (Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range.)
529         */
530        public ObservationReferenceRangeComponent setType(CodeableConcept value)  { 
531          this.type = value;
532          return this;
533        }
534
535        /**
536         * @return {@link #appliesTo} (Codes to indicate the target population this reference range applies to.  For example, a reference range may be based on the normal population or a particular sex or race.)
537         */
538        public List<CodeableConcept> getAppliesTo() { 
539          if (this.appliesTo == null)
540            this.appliesTo = new ArrayList<CodeableConcept>();
541          return this.appliesTo;
542        }
543
544        /**
545         * @return Returns a reference to <code>this</code> for easy method chaining
546         */
547        public ObservationReferenceRangeComponent setAppliesTo(List<CodeableConcept> theAppliesTo) { 
548          this.appliesTo = theAppliesTo;
549          return this;
550        }
551
552        public boolean hasAppliesTo() { 
553          if (this.appliesTo == null)
554            return false;
555          for (CodeableConcept item : this.appliesTo)
556            if (!item.isEmpty())
557              return true;
558          return false;
559        }
560
561        public CodeableConcept addAppliesTo() { //3
562          CodeableConcept t = new CodeableConcept();
563          if (this.appliesTo == null)
564            this.appliesTo = new ArrayList<CodeableConcept>();
565          this.appliesTo.add(t);
566          return t;
567        }
568
569        public ObservationReferenceRangeComponent addAppliesTo(CodeableConcept t) { //3
570          if (t == null)
571            return this;
572          if (this.appliesTo == null)
573            this.appliesTo = new ArrayList<CodeableConcept>();
574          this.appliesTo.add(t);
575          return this;
576        }
577
578        /**
579         * @return The first repetition of repeating field {@link #appliesTo}, creating it if it does not already exist
580         */
581        public CodeableConcept getAppliesToFirstRep() { 
582          if (getAppliesTo().isEmpty()) {
583            addAppliesTo();
584          }
585          return getAppliesTo().get(0);
586        }
587
588        /**
589         * @return {@link #age} (The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says so.)
590         */
591        public Range getAge() { 
592          if (this.age == null)
593            if (Configuration.errorOnAutoCreate())
594              throw new Error("Attempt to auto-create ObservationReferenceRangeComponent.age");
595            else if (Configuration.doAutoCreate())
596              this.age = new Range(); // cc
597          return this.age;
598        }
599
600        public boolean hasAge() { 
601          return this.age != null && !this.age.isEmpty();
602        }
603
604        /**
605         * @param value {@link #age} (The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says so.)
606         */
607        public ObservationReferenceRangeComponent setAge(Range value)  { 
608          this.age = value;
609          return this;
610        }
611
612        /**
613         * @return {@link #text} (Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation.  An example would be a reference value of "Negative" or a list or table of 'normals'.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
614         */
615        public StringType getTextElement() { 
616          if (this.text == null)
617            if (Configuration.errorOnAutoCreate())
618              throw new Error("Attempt to auto-create ObservationReferenceRangeComponent.text");
619            else if (Configuration.doAutoCreate())
620              this.text = new StringType(); // bb
621          return this.text;
622        }
623
624        public boolean hasTextElement() { 
625          return this.text != null && !this.text.isEmpty();
626        }
627
628        public boolean hasText() { 
629          return this.text != null && !this.text.isEmpty();
630        }
631
632        /**
633         * @param value {@link #text} (Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation.  An example would be a reference value of "Negative" or a list or table of 'normals'.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
634         */
635        public ObservationReferenceRangeComponent setTextElement(StringType value) { 
636          this.text = value;
637          return this;
638        }
639
640        /**
641         * @return Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation.  An example would be a reference value of "Negative" or a list or table of 'normals'.
642         */
643        public String getText() { 
644          return this.text == null ? null : this.text.getValue();
645        }
646
647        /**
648         * @param value Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation.  An example would be a reference value of "Negative" or a list or table of 'normals'.
649         */
650        public ObservationReferenceRangeComponent setText(String value) { 
651          if (Utilities.noString(value))
652            this.text = null;
653          else {
654            if (this.text == null)
655              this.text = new StringType();
656            this.text.setValue(value);
657          }
658          return this;
659        }
660
661        protected void listChildren(List<Property> children) {
662          super.listChildren(children);
663          children.add(new Property("low", "SimpleQuantity", "The value of the low bound of the reference range.  The low bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the low bound is omitted,  it is assumed to be meaningless (e.g. reference range is <=2.3).", 0, 1, low));
664          children.add(new Property("high", "SimpleQuantity", "The value of the high bound of the reference range.  The high bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the high bound is omitted,  it is assumed to be meaningless (e.g. reference range is >= 2.3).", 0, 1, high));
665          children.add(new Property("type", "CodeableConcept", "Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range.", 0, 1, type));
666          children.add(new Property("appliesTo", "CodeableConcept", "Codes to indicate the target population this reference range applies to.  For example, a reference range may be based on the normal population or a particular sex or race.", 0, java.lang.Integer.MAX_VALUE, appliesTo));
667          children.add(new Property("age", "Range", "The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says so.", 0, 1, age));
668          children.add(new Property("text", "string", "Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation.  An example would be a reference value of \"Negative\" or a list or table of 'normals'.", 0, 1, text));
669        }
670
671        @Override
672        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
673          switch (_hash) {
674          case 107348: /*low*/  return new Property("low", "SimpleQuantity", "The value of the low bound of the reference range.  The low bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the low bound is omitted,  it is assumed to be meaningless (e.g. reference range is <=2.3).", 0, 1, low);
675          case 3202466: /*high*/  return new Property("high", "SimpleQuantity", "The value of the high bound of the reference range.  The high bound of the reference range endpoint is inclusive of the value (e.g.  reference range is >=5 - <=9).   If the high bound is omitted,  it is assumed to be meaningless (e.g. reference range is >= 2.3).", 0, 1, high);
676          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range.", 0, 1, type);
677          case -2089924569: /*appliesTo*/  return new Property("appliesTo", "CodeableConcept", "Codes to indicate the target population this reference range applies to.  For example, a reference range may be based on the normal population or a particular sex or race.", 0, java.lang.Integer.MAX_VALUE, appliesTo);
678          case 96511: /*age*/  return new Property("age", "Range", "The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says so.", 0, 1, age);
679          case 3556653: /*text*/  return new Property("text", "string", "Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation.  An example would be a reference value of \"Negative\" or a list or table of 'normals'.", 0, 1, text);
680          default: return super.getNamedProperty(_hash, _name, _checkValid);
681          }
682
683        }
684
685      @Override
686      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
687        switch (hash) {
688        case 107348: /*low*/ return this.low == null ? new Base[0] : new Base[] {this.low}; // SimpleQuantity
689        case 3202466: /*high*/ return this.high == null ? new Base[0] : new Base[] {this.high}; // SimpleQuantity
690        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
691        case -2089924569: /*appliesTo*/ return this.appliesTo == null ? new Base[0] : this.appliesTo.toArray(new Base[this.appliesTo.size()]); // CodeableConcept
692        case 96511: /*age*/ return this.age == null ? new Base[0] : new Base[] {this.age}; // Range
693        case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // StringType
694        default: return super.getProperty(hash, name, checkValid);
695        }
696
697      }
698
699      @Override
700      public Base setProperty(int hash, String name, Base value) throws FHIRException {
701        switch (hash) {
702        case 107348: // low
703          this.low = castToSimpleQuantity(value); // SimpleQuantity
704          return value;
705        case 3202466: // high
706          this.high = castToSimpleQuantity(value); // SimpleQuantity
707          return value;
708        case 3575610: // type
709          this.type = castToCodeableConcept(value); // CodeableConcept
710          return value;
711        case -2089924569: // appliesTo
712          this.getAppliesTo().add(castToCodeableConcept(value)); // CodeableConcept
713          return value;
714        case 96511: // age
715          this.age = castToRange(value); // Range
716          return value;
717        case 3556653: // text
718          this.text = castToString(value); // StringType
719          return value;
720        default: return super.setProperty(hash, name, value);
721        }
722
723      }
724
725      @Override
726      public Base setProperty(String name, Base value) throws FHIRException {
727        if (name.equals("low")) {
728          this.low = castToSimpleQuantity(value); // SimpleQuantity
729        } else if (name.equals("high")) {
730          this.high = castToSimpleQuantity(value); // SimpleQuantity
731        } else if (name.equals("type")) {
732          this.type = castToCodeableConcept(value); // CodeableConcept
733        } else if (name.equals("appliesTo")) {
734          this.getAppliesTo().add(castToCodeableConcept(value));
735        } else if (name.equals("age")) {
736          this.age = castToRange(value); // Range
737        } else if (name.equals("text")) {
738          this.text = castToString(value); // StringType
739        } else
740          return super.setProperty(name, value);
741        return value;
742      }
743
744      @Override
745      public Base makeProperty(int hash, String name) throws FHIRException {
746        switch (hash) {
747        case 107348:  return getLow(); 
748        case 3202466:  return getHigh(); 
749        case 3575610:  return getType(); 
750        case -2089924569:  return addAppliesTo(); 
751        case 96511:  return getAge(); 
752        case 3556653:  return getTextElement();
753        default: return super.makeProperty(hash, name);
754        }
755
756      }
757
758      @Override
759      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
760        switch (hash) {
761        case 107348: /*low*/ return new String[] {"SimpleQuantity"};
762        case 3202466: /*high*/ return new String[] {"SimpleQuantity"};
763        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
764        case -2089924569: /*appliesTo*/ return new String[] {"CodeableConcept"};
765        case 96511: /*age*/ return new String[] {"Range"};
766        case 3556653: /*text*/ return new String[] {"string"};
767        default: return super.getTypesForProperty(hash, name);
768        }
769
770      }
771
772      @Override
773      public Base addChild(String name) throws FHIRException {
774        if (name.equals("low")) {
775          this.low = new SimpleQuantity();
776          return this.low;
777        }
778        else if (name.equals("high")) {
779          this.high = new SimpleQuantity();
780          return this.high;
781        }
782        else if (name.equals("type")) {
783          this.type = new CodeableConcept();
784          return this.type;
785        }
786        else if (name.equals("appliesTo")) {
787          return addAppliesTo();
788        }
789        else if (name.equals("age")) {
790          this.age = new Range();
791          return this.age;
792        }
793        else if (name.equals("text")) {
794          throw new FHIRException("Cannot call addChild on a singleton property Observation.text");
795        }
796        else
797          return super.addChild(name);
798      }
799
800      public ObservationReferenceRangeComponent copy() {
801        ObservationReferenceRangeComponent dst = new ObservationReferenceRangeComponent();
802        copyValues(dst);
803        dst.low = low == null ? null : low.copy();
804        dst.high = high == null ? null : high.copy();
805        dst.type = type == null ? null : type.copy();
806        if (appliesTo != null) {
807          dst.appliesTo = new ArrayList<CodeableConcept>();
808          for (CodeableConcept i : appliesTo)
809            dst.appliesTo.add(i.copy());
810        };
811        dst.age = age == null ? null : age.copy();
812        dst.text = text == null ? null : text.copy();
813        return dst;
814      }
815
816      @Override
817      public boolean equalsDeep(Base other_) {
818        if (!super.equalsDeep(other_))
819          return false;
820        if (!(other_ instanceof ObservationReferenceRangeComponent))
821          return false;
822        ObservationReferenceRangeComponent o = (ObservationReferenceRangeComponent) other_;
823        return compareDeep(low, o.low, true) && compareDeep(high, o.high, true) && compareDeep(type, o.type, true)
824           && compareDeep(appliesTo, o.appliesTo, true) && compareDeep(age, o.age, true) && compareDeep(text, o.text, true)
825          ;
826      }
827
828      @Override
829      public boolean equalsShallow(Base other_) {
830        if (!super.equalsShallow(other_))
831          return false;
832        if (!(other_ instanceof ObservationReferenceRangeComponent))
833          return false;
834        ObservationReferenceRangeComponent o = (ObservationReferenceRangeComponent) other_;
835        return compareValues(text, o.text, true);
836      }
837
838      public boolean isEmpty() {
839        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(low, high, type, appliesTo
840          , age, text);
841      }
842
843  public String fhirType() {
844    return "Observation.referenceRange";
845
846  }
847
848  }
849
850    @Block()
851    public static class ObservationRelatedComponent extends BackboneElement implements IBaseBackboneElement {
852        /**
853         * A code specifying the kind of relationship that exists with the target resource.
854         */
855        @Child(name = "type", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=false)
856        @Description(shortDefinition="has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by", formalDefinition="A code specifying the kind of relationship that exists with the target resource." )
857        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-relationshiptypes")
858        protected Enumeration<ObservationRelationshipType> type;
859
860        /**
861         * A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observation.
862         */
863        @Child(name = "target", type = {Observation.class, QuestionnaireResponse.class, Sequence.class}, order=2, min=1, max=1, modifier=false, summary=false)
864        @Description(shortDefinition="Resource that is related to this one", formalDefinition="A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observation." )
865        protected Reference target;
866
867        /**
868         * The actual object that is the target of the reference (A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observation.)
869         */
870        protected Resource targetTarget;
871
872        private static final long serialVersionUID = 1541802577L;
873
874    /**
875     * Constructor
876     */
877      public ObservationRelatedComponent() {
878        super();
879      }
880
881    /**
882     * Constructor
883     */
884      public ObservationRelatedComponent(Reference target) {
885        super();
886        this.target = target;
887      }
888
889        /**
890         * @return {@link #type} (A code specifying the kind of relationship that exists with the target resource.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
891         */
892        public Enumeration<ObservationRelationshipType> getTypeElement() { 
893          if (this.type == null)
894            if (Configuration.errorOnAutoCreate())
895              throw new Error("Attempt to auto-create ObservationRelatedComponent.type");
896            else if (Configuration.doAutoCreate())
897              this.type = new Enumeration<ObservationRelationshipType>(new ObservationRelationshipTypeEnumFactory()); // bb
898          return this.type;
899        }
900
901        public boolean hasTypeElement() { 
902          return this.type != null && !this.type.isEmpty();
903        }
904
905        public boolean hasType() { 
906          return this.type != null && !this.type.isEmpty();
907        }
908
909        /**
910         * @param value {@link #type} (A code specifying the kind of relationship that exists with the target resource.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
911         */
912        public ObservationRelatedComponent setTypeElement(Enumeration<ObservationRelationshipType> value) { 
913          this.type = value;
914          return this;
915        }
916
917        /**
918         * @return A code specifying the kind of relationship that exists with the target resource.
919         */
920        public ObservationRelationshipType getType() { 
921          return this.type == null ? null : this.type.getValue();
922        }
923
924        /**
925         * @param value A code specifying the kind of relationship that exists with the target resource.
926         */
927        public ObservationRelatedComponent setType(ObservationRelationshipType value) { 
928          if (value == null)
929            this.type = null;
930          else {
931            if (this.type == null)
932              this.type = new Enumeration<ObservationRelationshipType>(new ObservationRelationshipTypeEnumFactory());
933            this.type.setValue(value);
934          }
935          return this;
936        }
937
938        /**
939         * @return {@link #target} (A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observation.)
940         */
941        public Reference getTarget() { 
942          if (this.target == null)
943            if (Configuration.errorOnAutoCreate())
944              throw new Error("Attempt to auto-create ObservationRelatedComponent.target");
945            else if (Configuration.doAutoCreate())
946              this.target = new Reference(); // cc
947          return this.target;
948        }
949
950        public boolean hasTarget() { 
951          return this.target != null && !this.target.isEmpty();
952        }
953
954        /**
955         * @param value {@link #target} (A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observation.)
956         */
957        public ObservationRelatedComponent setTarget(Reference value)  { 
958          this.target = value;
959          return this;
960        }
961
962        /**
963         * @return {@link #target} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observation.)
964         */
965        public Resource getTargetTarget() { 
966          return this.targetTarget;
967        }
968
969        /**
970         * @param value {@link #target} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observation.)
971         */
972        public ObservationRelatedComponent setTargetTarget(Resource value) { 
973          this.targetTarget = value;
974          return this;
975        }
976
977        protected void listChildren(List<Property> children) {
978          super.listChildren(children);
979          children.add(new Property("type", "code", "A code specifying the kind of relationship that exists with the target resource.", 0, 1, type));
980          children.add(new Property("target", "Reference(Observation|QuestionnaireResponse|Sequence)", "A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observation.", 0, 1, target));
981        }
982
983        @Override
984        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
985          switch (_hash) {
986          case 3575610: /*type*/  return new Property("type", "code", "A code specifying the kind of relationship that exists with the target resource.", 0, 1, type);
987          case -880905839: /*target*/  return new Property("target", "Reference(Observation|QuestionnaireResponse|Sequence)", "A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observation.", 0, 1, target);
988          default: return super.getNamedProperty(_hash, _name, _checkValid);
989          }
990
991        }
992
993      @Override
994      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
995        switch (hash) {
996        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<ObservationRelationshipType>
997        case -880905839: /*target*/ return this.target == null ? new Base[0] : new Base[] {this.target}; // Reference
998        default: return super.getProperty(hash, name, checkValid);
999        }
1000
1001      }
1002
1003      @Override
1004      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1005        switch (hash) {
1006        case 3575610: // type
1007          value = new ObservationRelationshipTypeEnumFactory().fromType(castToCode(value));
1008          this.type = (Enumeration) value; // Enumeration<ObservationRelationshipType>
1009          return value;
1010        case -880905839: // target
1011          this.target = castToReference(value); // Reference
1012          return value;
1013        default: return super.setProperty(hash, name, value);
1014        }
1015
1016      }
1017
1018      @Override
1019      public Base setProperty(String name, Base value) throws FHIRException {
1020        if (name.equals("type")) {
1021          value = new ObservationRelationshipTypeEnumFactory().fromType(castToCode(value));
1022          this.type = (Enumeration) value; // Enumeration<ObservationRelationshipType>
1023        } else if (name.equals("target")) {
1024          this.target = castToReference(value); // Reference
1025        } else
1026          return super.setProperty(name, value);
1027        return value;
1028      }
1029
1030      @Override
1031      public Base makeProperty(int hash, String name) throws FHIRException {
1032        switch (hash) {
1033        case 3575610:  return getTypeElement();
1034        case -880905839:  return getTarget(); 
1035        default: return super.makeProperty(hash, name);
1036        }
1037
1038      }
1039
1040      @Override
1041      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1042        switch (hash) {
1043        case 3575610: /*type*/ return new String[] {"code"};
1044        case -880905839: /*target*/ return new String[] {"Reference"};
1045        default: return super.getTypesForProperty(hash, name);
1046        }
1047
1048      }
1049
1050      @Override
1051      public Base addChild(String name) throws FHIRException {
1052        if (name.equals("type")) {
1053          throw new FHIRException("Cannot call addChild on a singleton property Observation.type");
1054        }
1055        else if (name.equals("target")) {
1056          this.target = new Reference();
1057          return this.target;
1058        }
1059        else
1060          return super.addChild(name);
1061      }
1062
1063      public ObservationRelatedComponent copy() {
1064        ObservationRelatedComponent dst = new ObservationRelatedComponent();
1065        copyValues(dst);
1066        dst.type = type == null ? null : type.copy();
1067        dst.target = target == null ? null : target.copy();
1068        return dst;
1069      }
1070
1071      @Override
1072      public boolean equalsDeep(Base other_) {
1073        if (!super.equalsDeep(other_))
1074          return false;
1075        if (!(other_ instanceof ObservationRelatedComponent))
1076          return false;
1077        ObservationRelatedComponent o = (ObservationRelatedComponent) other_;
1078        return compareDeep(type, o.type, true) && compareDeep(target, o.target, true);
1079      }
1080
1081      @Override
1082      public boolean equalsShallow(Base other_) {
1083        if (!super.equalsShallow(other_))
1084          return false;
1085        if (!(other_ instanceof ObservationRelatedComponent))
1086          return false;
1087        ObservationRelatedComponent o = (ObservationRelatedComponent) other_;
1088        return compareValues(type, o.type, true);
1089      }
1090
1091      public boolean isEmpty() {
1092        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, target);
1093      }
1094
1095  public String fhirType() {
1096    return "Observation.related";
1097
1098  }
1099
1100  }
1101
1102    @Block()
1103    public static class ObservationComponentComponent extends BackboneElement implements IBaseBackboneElement {
1104        /**
1105         * Describes what was observed. Sometimes this is called the observation "code".
1106         */
1107        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=true)
1108        @Description(shortDefinition="Type of component observation (code / type)", formalDefinition="Describes what was observed. Sometimes this is called the observation \"code\"." )
1109        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-codes")
1110        protected CodeableConcept code;
1111
1112        /**
1113         * The information determined as a result of making the observation, if the information has a simple value.
1114         */
1115        @Child(name = "value", type = {Quantity.class, CodeableConcept.class, StringType.class, Range.class, Ratio.class, SampledData.class, Attachment.class, TimeType.class, DateTimeType.class, Period.class}, order=2, min=0, max=1, modifier=false, summary=true)
1116        @Description(shortDefinition="Actual component result", formalDefinition="The information determined as a result of making the observation, if the information has a simple value." )
1117        protected Type value;
1118
1119        /**
1120         * Provides a reason why the expected value in the element Observation.value[x] is missing.
1121         */
1122        @Child(name = "dataAbsentReason", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
1123        @Description(shortDefinition="Why the component result is missing", formalDefinition="Provides a reason why the expected value in the element Observation.value[x] is missing." )
1124        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-valueabsentreason")
1125        protected CodeableConcept dataAbsentReason;
1126
1127        /**
1128         * The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.
1129         */
1130        @Child(name = "interpretation", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=false)
1131        @Description(shortDefinition="High, low, normal, etc.", formalDefinition="The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag." )
1132        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-interpretation")
1133        protected CodeableConcept interpretation;
1134
1135        /**
1136         * Guidance on how to interpret the value by comparison to a normal or recommended range.
1137         */
1138        @Child(name = "referenceRange", type = {ObservationReferenceRangeComponent.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1139        @Description(shortDefinition="Provides guide for interpretation of component result", formalDefinition="Guidance on how to interpret the value by comparison to a normal or recommended range." )
1140        protected List<ObservationReferenceRangeComponent> referenceRange;
1141
1142        private static final long serialVersionUID = -846379911L;
1143
1144    /**
1145     * Constructor
1146     */
1147      public ObservationComponentComponent() {
1148        super();
1149      }
1150
1151    /**
1152     * Constructor
1153     */
1154      public ObservationComponentComponent(CodeableConcept code) {
1155        super();
1156        this.code = code;
1157      }
1158
1159        /**
1160         * @return {@link #code} (Describes what was observed. Sometimes this is called the observation "code".)
1161         */
1162        public CodeableConcept getCode() { 
1163          if (this.code == null)
1164            if (Configuration.errorOnAutoCreate())
1165              throw new Error("Attempt to auto-create ObservationComponentComponent.code");
1166            else if (Configuration.doAutoCreate())
1167              this.code = new CodeableConcept(); // cc
1168          return this.code;
1169        }
1170
1171        public boolean hasCode() { 
1172          return this.code != null && !this.code.isEmpty();
1173        }
1174
1175        /**
1176         * @param value {@link #code} (Describes what was observed. Sometimes this is called the observation "code".)
1177         */
1178        public ObservationComponentComponent setCode(CodeableConcept value)  { 
1179          this.code = value;
1180          return this;
1181        }
1182
1183        /**
1184         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1185         */
1186        public Type getValue() { 
1187          return this.value;
1188        }
1189
1190        /**
1191         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1192         */
1193        public Quantity getValueQuantity() throws FHIRException { 
1194          if (this.value == null)
1195            return null;
1196          if (!(this.value instanceof Quantity))
1197            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
1198          return (Quantity) this.value;
1199        }
1200
1201        public boolean hasValueQuantity() { 
1202          return this != null && this.value instanceof Quantity;
1203        }
1204
1205        /**
1206         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1207         */
1208        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
1209          if (this.value == null)
1210            return null;
1211          if (!(this.value instanceof CodeableConcept))
1212            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
1213          return (CodeableConcept) this.value;
1214        }
1215
1216        public boolean hasValueCodeableConcept() { 
1217          return this != null && this.value instanceof CodeableConcept;
1218        }
1219
1220        /**
1221         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1222         */
1223        public StringType getValueStringType() throws FHIRException { 
1224          if (this.value == null)
1225            return null;
1226          if (!(this.value instanceof StringType))
1227            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
1228          return (StringType) this.value;
1229        }
1230
1231        public boolean hasValueStringType() { 
1232          return this != null && this.value instanceof StringType;
1233        }
1234
1235        /**
1236         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1237         */
1238        public Range getValueRange() throws FHIRException { 
1239          if (this.value == null)
1240            return null;
1241          if (!(this.value instanceof Range))
1242            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
1243          return (Range) this.value;
1244        }
1245
1246        public boolean hasValueRange() { 
1247          return this != null && this.value instanceof Range;
1248        }
1249
1250        /**
1251         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1252         */
1253        public Ratio getValueRatio() throws FHIRException { 
1254          if (this.value == null)
1255            return null;
1256          if (!(this.value instanceof Ratio))
1257            throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.value.getClass().getName()+" was encountered");
1258          return (Ratio) this.value;
1259        }
1260
1261        public boolean hasValueRatio() { 
1262          return this != null && this.value instanceof Ratio;
1263        }
1264
1265        /**
1266         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1267         */
1268        public SampledData getValueSampledData() throws FHIRException { 
1269          if (this.value == null)
1270            return null;
1271          if (!(this.value instanceof SampledData))
1272            throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.value.getClass().getName()+" was encountered");
1273          return (SampledData) this.value;
1274        }
1275
1276        public boolean hasValueSampledData() { 
1277          return this != null && this.value instanceof SampledData;
1278        }
1279
1280        /**
1281         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1282         */
1283        public Attachment getValueAttachment() throws FHIRException { 
1284          if (this.value == null)
1285            return null;
1286          if (!(this.value instanceof Attachment))
1287            throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.value.getClass().getName()+" was encountered");
1288          return (Attachment) this.value;
1289        }
1290
1291        public boolean hasValueAttachment() { 
1292          return this != null && this.value instanceof Attachment;
1293        }
1294
1295        /**
1296         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1297         */
1298        public TimeType getValueTimeType() throws FHIRException { 
1299          if (this.value == null)
1300            return null;
1301          if (!(this.value instanceof TimeType))
1302            throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.value.getClass().getName()+" was encountered");
1303          return (TimeType) this.value;
1304        }
1305
1306        public boolean hasValueTimeType() { 
1307          return this != null && this.value instanceof TimeType;
1308        }
1309
1310        /**
1311         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1312         */
1313        public DateTimeType getValueDateTimeType() throws FHIRException { 
1314          if (this.value == null)
1315            return null;
1316          if (!(this.value instanceof DateTimeType))
1317            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
1318          return (DateTimeType) this.value;
1319        }
1320
1321        public boolean hasValueDateTimeType() { 
1322          return this != null && this.value instanceof DateTimeType;
1323        }
1324
1325        /**
1326         * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1327         */
1328        public Period getValuePeriod() throws FHIRException { 
1329          if (this.value == null)
1330            return null;
1331          if (!(this.value instanceof Period))
1332            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.value.getClass().getName()+" was encountered");
1333          return (Period) this.value;
1334        }
1335
1336        public boolean hasValuePeriod() { 
1337          return this != null && this.value instanceof Period;
1338        }
1339
1340        public boolean hasValue() { 
1341          return this.value != null && !this.value.isEmpty();
1342        }
1343
1344        /**
1345         * @param value {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
1346         */
1347        public ObservationComponentComponent setValue(Type value) throws FHIRFormatError { 
1348          if (value != null && !(value instanceof Quantity || value instanceof CodeableConcept || value instanceof StringType || value instanceof Range || value instanceof Ratio || value instanceof SampledData || value instanceof Attachment || value instanceof TimeType || value instanceof DateTimeType || value instanceof Period))
1349            throw new FHIRFormatError("Not the right type for Observation.component.value[x]: "+value.fhirType());
1350          this.value = value;
1351          return this;
1352        }
1353
1354        /**
1355         * @return {@link #dataAbsentReason} (Provides a reason why the expected value in the element Observation.value[x] is missing.)
1356         */
1357        public CodeableConcept getDataAbsentReason() { 
1358          if (this.dataAbsentReason == null)
1359            if (Configuration.errorOnAutoCreate())
1360              throw new Error("Attempt to auto-create ObservationComponentComponent.dataAbsentReason");
1361            else if (Configuration.doAutoCreate())
1362              this.dataAbsentReason = new CodeableConcept(); // cc
1363          return this.dataAbsentReason;
1364        }
1365
1366        public boolean hasDataAbsentReason() { 
1367          return this.dataAbsentReason != null && !this.dataAbsentReason.isEmpty();
1368        }
1369
1370        /**
1371         * @param value {@link #dataAbsentReason} (Provides a reason why the expected value in the element Observation.value[x] is missing.)
1372         */
1373        public ObservationComponentComponent setDataAbsentReason(CodeableConcept value)  { 
1374          this.dataAbsentReason = value;
1375          return this;
1376        }
1377
1378        /**
1379         * @return {@link #interpretation} (The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.)
1380         */
1381        public CodeableConcept getInterpretation() { 
1382          if (this.interpretation == null)
1383            if (Configuration.errorOnAutoCreate())
1384              throw new Error("Attempt to auto-create ObservationComponentComponent.interpretation");
1385            else if (Configuration.doAutoCreate())
1386              this.interpretation = new CodeableConcept(); // cc
1387          return this.interpretation;
1388        }
1389
1390        public boolean hasInterpretation() { 
1391          return this.interpretation != null && !this.interpretation.isEmpty();
1392        }
1393
1394        /**
1395         * @param value {@link #interpretation} (The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.)
1396         */
1397        public ObservationComponentComponent setInterpretation(CodeableConcept value)  { 
1398          this.interpretation = value;
1399          return this;
1400        }
1401
1402        /**
1403         * @return {@link #referenceRange} (Guidance on how to interpret the value by comparison to a normal or recommended range.)
1404         */
1405        public List<ObservationReferenceRangeComponent> getReferenceRange() { 
1406          if (this.referenceRange == null)
1407            this.referenceRange = new ArrayList<ObservationReferenceRangeComponent>();
1408          return this.referenceRange;
1409        }
1410
1411        /**
1412         * @return Returns a reference to <code>this</code> for easy method chaining
1413         */
1414        public ObservationComponentComponent setReferenceRange(List<ObservationReferenceRangeComponent> theReferenceRange) { 
1415          this.referenceRange = theReferenceRange;
1416          return this;
1417        }
1418
1419        public boolean hasReferenceRange() { 
1420          if (this.referenceRange == null)
1421            return false;
1422          for (ObservationReferenceRangeComponent item : this.referenceRange)
1423            if (!item.isEmpty())
1424              return true;
1425          return false;
1426        }
1427
1428        public ObservationReferenceRangeComponent addReferenceRange() { //3
1429          ObservationReferenceRangeComponent t = new ObservationReferenceRangeComponent();
1430          if (this.referenceRange == null)
1431            this.referenceRange = new ArrayList<ObservationReferenceRangeComponent>();
1432          this.referenceRange.add(t);
1433          return t;
1434        }
1435
1436        public ObservationComponentComponent addReferenceRange(ObservationReferenceRangeComponent t) { //3
1437          if (t == null)
1438            return this;
1439          if (this.referenceRange == null)
1440            this.referenceRange = new ArrayList<ObservationReferenceRangeComponent>();
1441          this.referenceRange.add(t);
1442          return this;
1443        }
1444
1445        /**
1446         * @return The first repetition of repeating field {@link #referenceRange}, creating it if it does not already exist
1447         */
1448        public ObservationReferenceRangeComponent getReferenceRangeFirstRep() { 
1449          if (getReferenceRange().isEmpty()) {
1450            addReferenceRange();
1451          }
1452          return getReferenceRange().get(0);
1453        }
1454
1455        protected void listChildren(List<Property> children) {
1456          super.listChildren(children);
1457          children.add(new Property("code", "CodeableConcept", "Describes what was observed. Sometimes this is called the observation \"code\".", 0, 1, code));
1458          children.add(new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value));
1459          children.add(new Property("dataAbsentReason", "CodeableConcept", "Provides a reason why the expected value in the element Observation.value[x] is missing.", 0, 1, dataAbsentReason));
1460          children.add(new Property("interpretation", "CodeableConcept", "The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.", 0, 1, interpretation));
1461          children.add(new Property("referenceRange", "@Observation.referenceRange", "Guidance on how to interpret the value by comparison to a normal or recommended range.", 0, java.lang.Integer.MAX_VALUE, referenceRange));
1462        }
1463
1464        @Override
1465        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1466          switch (_hash) {
1467          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Describes what was observed. Sometimes this is called the observation \"code\".", 0, 1, code);
1468          case -1410166417: /*value[x]*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1469          case 111972721: /*value*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1470          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1471          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1472          case -1424603934: /*valueString*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1473          case 2030761548: /*valueRange*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1474          case 2030767386: /*valueRatio*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1475          case -962229101: /*valueSampledData*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1476          case -475566732: /*valueAttachment*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1477          case -765708322: /*valueTime*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1478          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1479          case -1524344174: /*valuePeriod*/  return new Property("value[x]", "Quantity|CodeableConcept|string|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
1480          case 1034315687: /*dataAbsentReason*/  return new Property("dataAbsentReason", "CodeableConcept", "Provides a reason why the expected value in the element Observation.value[x] is missing.", 0, 1, dataAbsentReason);
1481          case -297950712: /*interpretation*/  return new Property("interpretation", "CodeableConcept", "The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.", 0, 1, interpretation);
1482          case -1912545102: /*referenceRange*/  return new Property("referenceRange", "@Observation.referenceRange", "Guidance on how to interpret the value by comparison to a normal or recommended range.", 0, java.lang.Integer.MAX_VALUE, referenceRange);
1483          default: return super.getNamedProperty(_hash, _name, _checkValid);
1484          }
1485
1486        }
1487
1488      @Override
1489      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1490        switch (hash) {
1491        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1492        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // Type
1493        case 1034315687: /*dataAbsentReason*/ return this.dataAbsentReason == null ? new Base[0] : new Base[] {this.dataAbsentReason}; // CodeableConcept
1494        case -297950712: /*interpretation*/ return this.interpretation == null ? new Base[0] : new Base[] {this.interpretation}; // CodeableConcept
1495        case -1912545102: /*referenceRange*/ return this.referenceRange == null ? new Base[0] : this.referenceRange.toArray(new Base[this.referenceRange.size()]); // ObservationReferenceRangeComponent
1496        default: return super.getProperty(hash, name, checkValid);
1497        }
1498
1499      }
1500
1501      @Override
1502      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1503        switch (hash) {
1504        case 3059181: // code
1505          this.code = castToCodeableConcept(value); // CodeableConcept
1506          return value;
1507        case 111972721: // value
1508          this.value = castToType(value); // Type
1509          return value;
1510        case 1034315687: // dataAbsentReason
1511          this.dataAbsentReason = castToCodeableConcept(value); // CodeableConcept
1512          return value;
1513        case -297950712: // interpretation
1514          this.interpretation = castToCodeableConcept(value); // CodeableConcept
1515          return value;
1516        case -1912545102: // referenceRange
1517          this.getReferenceRange().add((ObservationReferenceRangeComponent) value); // ObservationReferenceRangeComponent
1518          return value;
1519        default: return super.setProperty(hash, name, value);
1520        }
1521
1522      }
1523
1524      @Override
1525      public Base setProperty(String name, Base value) throws FHIRException {
1526        if (name.equals("code")) {
1527          this.code = castToCodeableConcept(value); // CodeableConcept
1528        } else if (name.equals("value[x]")) {
1529          this.value = castToType(value); // Type
1530        } else if (name.equals("dataAbsentReason")) {
1531          this.dataAbsentReason = castToCodeableConcept(value); // CodeableConcept
1532        } else if (name.equals("interpretation")) {
1533          this.interpretation = castToCodeableConcept(value); // CodeableConcept
1534        } else if (name.equals("referenceRange")) {
1535          this.getReferenceRange().add((ObservationReferenceRangeComponent) value);
1536        } else
1537          return super.setProperty(name, value);
1538        return value;
1539      }
1540
1541      @Override
1542      public Base makeProperty(int hash, String name) throws FHIRException {
1543        switch (hash) {
1544        case 3059181:  return getCode(); 
1545        case -1410166417:  return getValue(); 
1546        case 111972721:  return getValue(); 
1547        case 1034315687:  return getDataAbsentReason(); 
1548        case -297950712:  return getInterpretation(); 
1549        case -1912545102:  return addReferenceRange(); 
1550        default: return super.makeProperty(hash, name);
1551        }
1552
1553      }
1554
1555      @Override
1556      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1557        switch (hash) {
1558        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1559        case 111972721: /*value*/ return new String[] {"Quantity", "CodeableConcept", "string", "Range", "Ratio", "SampledData", "Attachment", "time", "dateTime", "Period"};
1560        case 1034315687: /*dataAbsentReason*/ return new String[] {"CodeableConcept"};
1561        case -297950712: /*interpretation*/ return new String[] {"CodeableConcept"};
1562        case -1912545102: /*referenceRange*/ return new String[] {"@Observation.referenceRange"};
1563        default: return super.getTypesForProperty(hash, name);
1564        }
1565
1566      }
1567
1568      @Override
1569      public Base addChild(String name) throws FHIRException {
1570        if (name.equals("code")) {
1571          this.code = new CodeableConcept();
1572          return this.code;
1573        }
1574        else if (name.equals("valueQuantity")) {
1575          this.value = new Quantity();
1576          return this.value;
1577        }
1578        else if (name.equals("valueCodeableConcept")) {
1579          this.value = new CodeableConcept();
1580          return this.value;
1581        }
1582        else if (name.equals("valueString")) {
1583          this.value = new StringType();
1584          return this.value;
1585        }
1586        else if (name.equals("valueRange")) {
1587          this.value = new Range();
1588          return this.value;
1589        }
1590        else if (name.equals("valueRatio")) {
1591          this.value = new Ratio();
1592          return this.value;
1593        }
1594        else if (name.equals("valueSampledData")) {
1595          this.value = new SampledData();
1596          return this.value;
1597        }
1598        else if (name.equals("valueAttachment")) {
1599          this.value = new Attachment();
1600          return this.value;
1601        }
1602        else if (name.equals("valueTime")) {
1603          this.value = new TimeType();
1604          return this.value;
1605        }
1606        else if (name.equals("valueDateTime")) {
1607          this.value = new DateTimeType();
1608          return this.value;
1609        }
1610        else if (name.equals("valuePeriod")) {
1611          this.value = new Period();
1612          return this.value;
1613        }
1614        else if (name.equals("dataAbsentReason")) {
1615          this.dataAbsentReason = new CodeableConcept();
1616          return this.dataAbsentReason;
1617        }
1618        else if (name.equals("interpretation")) {
1619          this.interpretation = new CodeableConcept();
1620          return this.interpretation;
1621        }
1622        else if (name.equals("referenceRange")) {
1623          return addReferenceRange();
1624        }
1625        else
1626          return super.addChild(name);
1627      }
1628
1629      public ObservationComponentComponent copy() {
1630        ObservationComponentComponent dst = new ObservationComponentComponent();
1631        copyValues(dst);
1632        dst.code = code == null ? null : code.copy();
1633        dst.value = value == null ? null : value.copy();
1634        dst.dataAbsentReason = dataAbsentReason == null ? null : dataAbsentReason.copy();
1635        dst.interpretation = interpretation == null ? null : interpretation.copy();
1636        if (referenceRange != null) {
1637          dst.referenceRange = new ArrayList<ObservationReferenceRangeComponent>();
1638          for (ObservationReferenceRangeComponent i : referenceRange)
1639            dst.referenceRange.add(i.copy());
1640        };
1641        return dst;
1642      }
1643
1644      @Override
1645      public boolean equalsDeep(Base other_) {
1646        if (!super.equalsDeep(other_))
1647          return false;
1648        if (!(other_ instanceof ObservationComponentComponent))
1649          return false;
1650        ObservationComponentComponent o = (ObservationComponentComponent) other_;
1651        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true) && compareDeep(dataAbsentReason, o.dataAbsentReason, true)
1652           && compareDeep(interpretation, o.interpretation, true) && compareDeep(referenceRange, o.referenceRange, true)
1653          ;
1654      }
1655
1656      @Override
1657      public boolean equalsShallow(Base other_) {
1658        if (!super.equalsShallow(other_))
1659          return false;
1660        if (!(other_ instanceof ObservationComponentComponent))
1661          return false;
1662        ObservationComponentComponent o = (ObservationComponentComponent) other_;
1663        return true;
1664      }
1665
1666      public boolean isEmpty() {
1667        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value, dataAbsentReason
1668          , interpretation, referenceRange);
1669      }
1670
1671  public String fhirType() {
1672    return "Observation.component";
1673
1674  }
1675
1676  }
1677
1678    /**
1679     * A unique identifier assigned to this observation.
1680     */
1681    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1682    @Description(shortDefinition="Business Identifier for observation", formalDefinition="A unique identifier assigned to this observation." )
1683    protected List<Identifier> identifier;
1684
1685    /**
1686     * A plan, proposal or order that is fulfilled in whole or in part by this event.
1687     */
1688    @Child(name = "basedOn", type = {CarePlan.class, DeviceRequest.class, ImmunizationRecommendation.class, MedicationRequest.class, NutritionOrder.class, ProcedureRequest.class, ReferralRequest.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1689    @Description(shortDefinition="Fulfills plan, proposal or order", formalDefinition="A plan, proposal or order that is fulfilled in whole or in part by this event." )
1690    protected List<Reference> basedOn;
1691    /**
1692     * The actual objects that are the target of the reference (A plan, proposal or order that is fulfilled in whole or in part by this event.)
1693     */
1694    protected List<Resource> basedOnTarget;
1695
1696
1697    /**
1698     * The status of the result value.
1699     */
1700    @Child(name = "status", type = {CodeType.class}, order=2, min=1, max=1, modifier=true, summary=true)
1701    @Description(shortDefinition="registered | preliminary | final | amended +", formalDefinition="The status of the result value." )
1702    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-status")
1703    protected Enumeration<ObservationStatus> status;
1704
1705    /**
1706     * A code that classifies the general type of observation being made.
1707     */
1708    @Child(name = "category", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1709    @Description(shortDefinition="Classification of  type of observation", formalDefinition="A code that classifies the general type of observation being made." )
1710    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-category")
1711    protected List<CodeableConcept> category;
1712
1713    /**
1714     * Describes what was observed. Sometimes this is called the observation "name".
1715     */
1716    @Child(name = "code", type = {CodeableConcept.class}, order=4, min=1, max=1, modifier=false, summary=true)
1717    @Description(shortDefinition="Type of observation (code / type)", formalDefinition="Describes what was observed. Sometimes this is called the observation \"name\"." )
1718    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-codes")
1719    protected CodeableConcept code;
1720
1721    /**
1722     * The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed.  Comments: Indirect characteristics may be those of a specimen, fetus, donor,  other observer (for example a relative or EMT), or any observation made about the subject.
1723     */
1724    @Child(name = "subject", type = {Patient.class, Group.class, Device.class, Location.class}, order=5, min=0, max=1, modifier=false, summary=true)
1725    @Description(shortDefinition="Who and/or what this is about", formalDefinition="The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed.  Comments: Indirect characteristics may be those of a specimen, fetus, donor,  other observer (for example a relative or EMT), or any observation made about the subject." )
1726    protected Reference subject;
1727
1728    /**
1729     * The actual object that is the target of the reference (The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed.  Comments: Indirect characteristics may be those of a specimen, fetus, donor,  other observer (for example a relative or EMT), or any observation made about the subject.)
1730     */
1731    protected Resource subjectTarget;
1732
1733    /**
1734     * The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made.
1735     */
1736    @Child(name = "context", type = {Encounter.class, EpisodeOfCare.class}, order=6, min=0, max=1, modifier=false, summary=false)
1737    @Description(shortDefinition="Healthcare event during which this observation is made", formalDefinition="The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made." )
1738    protected Reference context;
1739
1740    /**
1741     * The actual object that is the target of the reference (The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made.)
1742     */
1743    protected Resource contextTarget;
1744
1745    /**
1746     * The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.
1747     */
1748    @Child(name = "effective", type = {DateTimeType.class, Period.class}, order=7, min=0, max=1, modifier=false, summary=true)
1749    @Description(shortDefinition="Clinically relevant time/time-period for observation", formalDefinition="The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the \"physiologically relevant time\". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself." )
1750    protected Type effective;
1751
1752    /**
1753     * The date and time this observation was made available to providers, typically after the results have been reviewed and verified.
1754     */
1755    @Child(name = "issued", type = {InstantType.class}, order=8, min=0, max=1, modifier=false, summary=true)
1756    @Description(shortDefinition="Date/Time this was made available", formalDefinition="The date and time this observation was made available to providers, typically after the results have been reviewed and verified." )
1757    protected InstantType issued;
1758
1759    /**
1760     * Who was responsible for asserting the observed value as "true".
1761     */
1762    @Child(name = "performer", type = {Practitioner.class, Organization.class, Patient.class, RelatedPerson.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1763    @Description(shortDefinition="Who is responsible for the observation", formalDefinition="Who was responsible for asserting the observed value as \"true\"." )
1764    protected List<Reference> performer;
1765    /**
1766     * The actual objects that are the target of the reference (Who was responsible for asserting the observed value as "true".)
1767     */
1768    protected List<Resource> performerTarget;
1769
1770
1771    /**
1772     * The information determined as a result of making the observation, if the information has a simple value.
1773     */
1774    @Child(name = "value", type = {Quantity.class, CodeableConcept.class, StringType.class, BooleanType.class, Range.class, Ratio.class, SampledData.class, Attachment.class, TimeType.class, DateTimeType.class, Period.class}, order=10, min=0, max=1, modifier=false, summary=true)
1775    @Description(shortDefinition="Actual result", formalDefinition="The information determined as a result of making the observation, if the information has a simple value." )
1776    protected Type value;
1777
1778    /**
1779     * Provides a reason why the expected value in the element Observation.value[x] is missing.
1780     */
1781    @Child(name = "dataAbsentReason", type = {CodeableConcept.class}, order=11, min=0, max=1, modifier=false, summary=false)
1782    @Description(shortDefinition="Why the result is missing", formalDefinition="Provides a reason why the expected value in the element Observation.value[x] is missing." )
1783    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-valueabsentreason")
1784    protected CodeableConcept dataAbsentReason;
1785
1786    /**
1787     * The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.
1788     */
1789    @Child(name = "interpretation", type = {CodeableConcept.class}, order=12, min=0, max=1, modifier=false, summary=false)
1790    @Description(shortDefinition="High, low, normal, etc.", formalDefinition="The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag." )
1791    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-interpretation")
1792    protected CodeableConcept interpretation;
1793
1794    /**
1795     * May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the result.
1796     */
1797    @Child(name = "comment", type = {StringType.class}, order=13, min=0, max=1, modifier=false, summary=false)
1798    @Description(shortDefinition="Comments about result", formalDefinition="May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the result." )
1799    protected StringType comment;
1800
1801    /**
1802     * Indicates the site on the subject's body where the observation was made (i.e. the target site).
1803     */
1804    @Child(name = "bodySite", type = {CodeableConcept.class}, order=14, min=0, max=1, modifier=false, summary=false)
1805    @Description(shortDefinition="Observed body part", formalDefinition="Indicates the site on the subject's body where the observation was made (i.e. the target site)." )
1806    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/body-site")
1807    protected CodeableConcept bodySite;
1808
1809    /**
1810     * Indicates the mechanism used to perform the observation.
1811     */
1812    @Child(name = "method", type = {CodeableConcept.class}, order=15, min=0, max=1, modifier=false, summary=false)
1813    @Description(shortDefinition="How it was done", formalDefinition="Indicates the mechanism used to perform the observation." )
1814    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-methods")
1815    protected CodeableConcept method;
1816
1817    /**
1818     * The specimen that was used when this observation was made.
1819     */
1820    @Child(name = "specimen", type = {Specimen.class}, order=16, min=0, max=1, modifier=false, summary=false)
1821    @Description(shortDefinition="Specimen used for this observation", formalDefinition="The specimen that was used when this observation was made." )
1822    protected Reference specimen;
1823
1824    /**
1825     * The actual object that is the target of the reference (The specimen that was used when this observation was made.)
1826     */
1827    protected Specimen specimenTarget;
1828
1829    /**
1830     * The device used to generate the observation data.
1831     */
1832    @Child(name = "device", type = {Device.class, DeviceMetric.class}, order=17, min=0, max=1, modifier=false, summary=false)
1833    @Description(shortDefinition="(Measurement) Device", formalDefinition="The device used to generate the observation data." )
1834    protected Reference device;
1835
1836    /**
1837     * The actual object that is the target of the reference (The device used to generate the observation data.)
1838     */
1839    protected Resource deviceTarget;
1840
1841    /**
1842     * Guidance on how to interpret the value by comparison to a normal or recommended range.
1843     */
1844    @Child(name = "referenceRange", type = {}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1845    @Description(shortDefinition="Provides guide for interpretation", formalDefinition="Guidance on how to interpret the value by comparison to a normal or recommended range." )
1846    protected List<ObservationReferenceRangeComponent> referenceRange;
1847
1848    /**
1849     * A  reference to another resource (usually another Observation) whose relationship is defined by the relationship type code.
1850     */
1851    @Child(name = "related", type = {}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1852    @Description(shortDefinition="Resource related to this observation", formalDefinition="A  reference to another resource (usually another Observation) whose relationship is defined by the relationship type code." )
1853    protected List<ObservationRelatedComponent> related;
1854
1855    /**
1856     * Some observations have multiple component observations.  These component observations are expressed as separate code value pairs that share the same attributes.  Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations.
1857     */
1858    @Child(name = "component", type = {}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1859    @Description(shortDefinition="Component results", formalDefinition="Some observations have multiple component observations.  These component observations are expressed as separate code value pairs that share the same attributes.  Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations." )
1860    protected List<ObservationComponentComponent> component;
1861
1862    private static final long serialVersionUID = -1771290322L;
1863
1864  /**
1865   * Constructor
1866   */
1867    public Observation() {
1868      super();
1869    }
1870
1871  /**
1872   * Constructor
1873   */
1874    public Observation(Enumeration<ObservationStatus> status, CodeableConcept code) {
1875      super();
1876      this.status = status;
1877      this.code = code;
1878    }
1879
1880    /**
1881     * @return {@link #identifier} (A unique identifier assigned to this observation.)
1882     */
1883    public List<Identifier> getIdentifier() { 
1884      if (this.identifier == null)
1885        this.identifier = new ArrayList<Identifier>();
1886      return this.identifier;
1887    }
1888
1889    /**
1890     * @return Returns a reference to <code>this</code> for easy method chaining
1891     */
1892    public Observation setIdentifier(List<Identifier> theIdentifier) { 
1893      this.identifier = theIdentifier;
1894      return this;
1895    }
1896
1897    public boolean hasIdentifier() { 
1898      if (this.identifier == null)
1899        return false;
1900      for (Identifier item : this.identifier)
1901        if (!item.isEmpty())
1902          return true;
1903      return false;
1904    }
1905
1906    public Identifier addIdentifier() { //3
1907      Identifier t = new Identifier();
1908      if (this.identifier == null)
1909        this.identifier = new ArrayList<Identifier>();
1910      this.identifier.add(t);
1911      return t;
1912    }
1913
1914    public Observation addIdentifier(Identifier t) { //3
1915      if (t == null)
1916        return this;
1917      if (this.identifier == null)
1918        this.identifier = new ArrayList<Identifier>();
1919      this.identifier.add(t);
1920      return this;
1921    }
1922
1923    /**
1924     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1925     */
1926    public Identifier getIdentifierFirstRep() { 
1927      if (getIdentifier().isEmpty()) {
1928        addIdentifier();
1929      }
1930      return getIdentifier().get(0);
1931    }
1932
1933    /**
1934     * @return {@link #basedOn} (A plan, proposal or order that is fulfilled in whole or in part by this event.)
1935     */
1936    public List<Reference> getBasedOn() { 
1937      if (this.basedOn == null)
1938        this.basedOn = new ArrayList<Reference>();
1939      return this.basedOn;
1940    }
1941
1942    /**
1943     * @return Returns a reference to <code>this</code> for easy method chaining
1944     */
1945    public Observation setBasedOn(List<Reference> theBasedOn) { 
1946      this.basedOn = theBasedOn;
1947      return this;
1948    }
1949
1950    public boolean hasBasedOn() { 
1951      if (this.basedOn == null)
1952        return false;
1953      for (Reference item : this.basedOn)
1954        if (!item.isEmpty())
1955          return true;
1956      return false;
1957    }
1958
1959    public Reference addBasedOn() { //3
1960      Reference t = new Reference();
1961      if (this.basedOn == null)
1962        this.basedOn = new ArrayList<Reference>();
1963      this.basedOn.add(t);
1964      return t;
1965    }
1966
1967    public Observation addBasedOn(Reference t) { //3
1968      if (t == null)
1969        return this;
1970      if (this.basedOn == null)
1971        this.basedOn = new ArrayList<Reference>();
1972      this.basedOn.add(t);
1973      return this;
1974    }
1975
1976    /**
1977     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist
1978     */
1979    public Reference getBasedOnFirstRep() { 
1980      if (getBasedOn().isEmpty()) {
1981        addBasedOn();
1982      }
1983      return getBasedOn().get(0);
1984    }
1985
1986    /**
1987     * @deprecated Use Reference#setResource(IBaseResource) instead
1988     */
1989    @Deprecated
1990    public List<Resource> getBasedOnTarget() { 
1991      if (this.basedOnTarget == null)
1992        this.basedOnTarget = new ArrayList<Resource>();
1993      return this.basedOnTarget;
1994    }
1995
1996    /**
1997     * @return {@link #status} (The status of the result value.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1998     */
1999    public Enumeration<ObservationStatus> getStatusElement() { 
2000      if (this.status == null)
2001        if (Configuration.errorOnAutoCreate())
2002          throw new Error("Attempt to auto-create Observation.status");
2003        else if (Configuration.doAutoCreate())
2004          this.status = new Enumeration<ObservationStatus>(new ObservationStatusEnumFactory()); // bb
2005      return this.status;
2006    }
2007
2008    public boolean hasStatusElement() { 
2009      return this.status != null && !this.status.isEmpty();
2010    }
2011
2012    public boolean hasStatus() { 
2013      return this.status != null && !this.status.isEmpty();
2014    }
2015
2016    /**
2017     * @param value {@link #status} (The status of the result value.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2018     */
2019    public Observation setStatusElement(Enumeration<ObservationStatus> value) { 
2020      this.status = value;
2021      return this;
2022    }
2023
2024    /**
2025     * @return The status of the result value.
2026     */
2027    public ObservationStatus getStatus() { 
2028      return this.status == null ? null : this.status.getValue();
2029    }
2030
2031    /**
2032     * @param value The status of the result value.
2033     */
2034    public Observation setStatus(ObservationStatus value) { 
2035        if (this.status == null)
2036          this.status = new Enumeration<ObservationStatus>(new ObservationStatusEnumFactory());
2037        this.status.setValue(value);
2038      return this;
2039    }
2040
2041    /**
2042     * @return {@link #category} (A code that classifies the general type of observation being made.)
2043     */
2044    public List<CodeableConcept> getCategory() { 
2045      if (this.category == null)
2046        this.category = new ArrayList<CodeableConcept>();
2047      return this.category;
2048    }
2049
2050    /**
2051     * @return Returns a reference to <code>this</code> for easy method chaining
2052     */
2053    public Observation setCategory(List<CodeableConcept> theCategory) { 
2054      this.category = theCategory;
2055      return this;
2056    }
2057
2058    public boolean hasCategory() { 
2059      if (this.category == null)
2060        return false;
2061      for (CodeableConcept item : this.category)
2062        if (!item.isEmpty())
2063          return true;
2064      return false;
2065    }
2066
2067    public CodeableConcept addCategory() { //3
2068      CodeableConcept t = new CodeableConcept();
2069      if (this.category == null)
2070        this.category = new ArrayList<CodeableConcept>();
2071      this.category.add(t);
2072      return t;
2073    }
2074
2075    public Observation addCategory(CodeableConcept t) { //3
2076      if (t == null)
2077        return this;
2078      if (this.category == null)
2079        this.category = new ArrayList<CodeableConcept>();
2080      this.category.add(t);
2081      return this;
2082    }
2083
2084    /**
2085     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist
2086     */
2087    public CodeableConcept getCategoryFirstRep() { 
2088      if (getCategory().isEmpty()) {
2089        addCategory();
2090      }
2091      return getCategory().get(0);
2092    }
2093
2094    /**
2095     * @return {@link #code} (Describes what was observed. Sometimes this is called the observation "name".)
2096     */
2097    public CodeableConcept getCode() { 
2098      if (this.code == null)
2099        if (Configuration.errorOnAutoCreate())
2100          throw new Error("Attempt to auto-create Observation.code");
2101        else if (Configuration.doAutoCreate())
2102          this.code = new CodeableConcept(); // cc
2103      return this.code;
2104    }
2105
2106    public boolean hasCode() { 
2107      return this.code != null && !this.code.isEmpty();
2108    }
2109
2110    /**
2111     * @param value {@link #code} (Describes what was observed. Sometimes this is called the observation "name".)
2112     */
2113    public Observation setCode(CodeableConcept value)  { 
2114      this.code = value;
2115      return this;
2116    }
2117
2118    /**
2119     * @return {@link #subject} (The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed.  Comments: Indirect characteristics may be those of a specimen, fetus, donor,  other observer (for example a relative or EMT), or any observation made about the subject.)
2120     */
2121    public Reference getSubject() { 
2122      if (this.subject == null)
2123        if (Configuration.errorOnAutoCreate())
2124          throw new Error("Attempt to auto-create Observation.subject");
2125        else if (Configuration.doAutoCreate())
2126          this.subject = new Reference(); // cc
2127      return this.subject;
2128    }
2129
2130    public boolean hasSubject() { 
2131      return this.subject != null && !this.subject.isEmpty();
2132    }
2133
2134    /**
2135     * @param value {@link #subject} (The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed.  Comments: Indirect characteristics may be those of a specimen, fetus, donor,  other observer (for example a relative or EMT), or any observation made about the subject.)
2136     */
2137    public Observation setSubject(Reference value)  { 
2138      this.subject = value;
2139      return this;
2140    }
2141
2142    /**
2143     * @return {@link #subject} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed.  Comments: Indirect characteristics may be those of a specimen, fetus, donor,  other observer (for example a relative or EMT), or any observation made about the subject.)
2144     */
2145    public Resource getSubjectTarget() { 
2146      return this.subjectTarget;
2147    }
2148
2149    /**
2150     * @param value {@link #subject} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed.  Comments: Indirect characteristics may be those of a specimen, fetus, donor,  other observer (for example a relative or EMT), or any observation made about the subject.)
2151     */
2152    public Observation setSubjectTarget(Resource value) { 
2153      this.subjectTarget = value;
2154      return this;
2155    }
2156
2157    /**
2158     * @return {@link #context} (The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made.)
2159     */
2160    public Reference getContext() { 
2161      if (this.context == null)
2162        if (Configuration.errorOnAutoCreate())
2163          throw new Error("Attempt to auto-create Observation.context");
2164        else if (Configuration.doAutoCreate())
2165          this.context = new Reference(); // cc
2166      return this.context;
2167    }
2168
2169    public boolean hasContext() { 
2170      return this.context != null && !this.context.isEmpty();
2171    }
2172
2173    /**
2174     * @param value {@link #context} (The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made.)
2175     */
2176    public Observation setContext(Reference value)  { 
2177      this.context = value;
2178      return this;
2179    }
2180
2181    /**
2182     * @return {@link #context} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made.)
2183     */
2184    public Resource getContextTarget() { 
2185      return this.contextTarget;
2186    }
2187
2188    /**
2189     * @param value {@link #context} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made.)
2190     */
2191    public Observation setContextTarget(Resource value) { 
2192      this.contextTarget = value;
2193      return this;
2194    }
2195
2196    /**
2197     * @return {@link #effective} (The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.)
2198     */
2199    public Type getEffective() { 
2200      return this.effective;
2201    }
2202
2203    /**
2204     * @return {@link #effective} (The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.)
2205     */
2206    public DateTimeType getEffectiveDateTimeType() throws FHIRException { 
2207      if (this.effective == null)
2208        return null;
2209      if (!(this.effective instanceof DateTimeType))
2210        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.effective.getClass().getName()+" was encountered");
2211      return (DateTimeType) this.effective;
2212    }
2213
2214    public boolean hasEffectiveDateTimeType() { 
2215      return this != null && this.effective instanceof DateTimeType;
2216    }
2217
2218    /**
2219     * @return {@link #effective} (The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.)
2220     */
2221    public Period getEffectivePeriod() throws FHIRException { 
2222      if (this.effective == null)
2223        return null;
2224      if (!(this.effective instanceof Period))
2225        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.effective.getClass().getName()+" was encountered");
2226      return (Period) this.effective;
2227    }
2228
2229    public boolean hasEffectivePeriod() { 
2230      return this != null && this.effective instanceof Period;
2231    }
2232
2233    public boolean hasEffective() { 
2234      return this.effective != null && !this.effective.isEmpty();
2235    }
2236
2237    /**
2238     * @param value {@link #effective} (The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.)
2239     */
2240    public Observation setEffective(Type value) throws FHIRFormatError { 
2241      if (value != null && !(value instanceof DateTimeType || value instanceof Period))
2242        throw new FHIRFormatError("Not the right type for Observation.effective[x]: "+value.fhirType());
2243      this.effective = value;
2244      return this;
2245    }
2246
2247    /**
2248     * @return {@link #issued} (The date and time this observation was made available to providers, typically after the results have been reviewed and verified.). This is the underlying object with id, value and extensions. The accessor "getIssued" gives direct access to the value
2249     */
2250    public InstantType getIssuedElement() { 
2251      if (this.issued == null)
2252        if (Configuration.errorOnAutoCreate())
2253          throw new Error("Attempt to auto-create Observation.issued");
2254        else if (Configuration.doAutoCreate())
2255          this.issued = new InstantType(); // bb
2256      return this.issued;
2257    }
2258
2259    public boolean hasIssuedElement() { 
2260      return this.issued != null && !this.issued.isEmpty();
2261    }
2262
2263    public boolean hasIssued() { 
2264      return this.issued != null && !this.issued.isEmpty();
2265    }
2266
2267    /**
2268     * @param value {@link #issued} (The date and time this observation was made available to providers, typically after the results have been reviewed and verified.). This is the underlying object with id, value and extensions. The accessor "getIssued" gives direct access to the value
2269     */
2270    public Observation setIssuedElement(InstantType value) { 
2271      this.issued = value;
2272      return this;
2273    }
2274
2275    /**
2276     * @return The date and time this observation was made available to providers, typically after the results have been reviewed and verified.
2277     */
2278    public Date getIssued() { 
2279      return this.issued == null ? null : this.issued.getValue();
2280    }
2281
2282    /**
2283     * @param value The date and time this observation was made available to providers, typically after the results have been reviewed and verified.
2284     */
2285    public Observation setIssued(Date value) { 
2286      if (value == null)
2287        this.issued = null;
2288      else {
2289        if (this.issued == null)
2290          this.issued = new InstantType();
2291        this.issued.setValue(value);
2292      }
2293      return this;
2294    }
2295
2296    /**
2297     * @return {@link #performer} (Who was responsible for asserting the observed value as "true".)
2298     */
2299    public List<Reference> getPerformer() { 
2300      if (this.performer == null)
2301        this.performer = new ArrayList<Reference>();
2302      return this.performer;
2303    }
2304
2305    /**
2306     * @return Returns a reference to <code>this</code> for easy method chaining
2307     */
2308    public Observation setPerformer(List<Reference> thePerformer) { 
2309      this.performer = thePerformer;
2310      return this;
2311    }
2312
2313    public boolean hasPerformer() { 
2314      if (this.performer == null)
2315        return false;
2316      for (Reference item : this.performer)
2317        if (!item.isEmpty())
2318          return true;
2319      return false;
2320    }
2321
2322    public Reference addPerformer() { //3
2323      Reference t = new Reference();
2324      if (this.performer == null)
2325        this.performer = new ArrayList<Reference>();
2326      this.performer.add(t);
2327      return t;
2328    }
2329
2330    public Observation addPerformer(Reference t) { //3
2331      if (t == null)
2332        return this;
2333      if (this.performer == null)
2334        this.performer = new ArrayList<Reference>();
2335      this.performer.add(t);
2336      return this;
2337    }
2338
2339    /**
2340     * @return The first repetition of repeating field {@link #performer}, creating it if it does not already exist
2341     */
2342    public Reference getPerformerFirstRep() { 
2343      if (getPerformer().isEmpty()) {
2344        addPerformer();
2345      }
2346      return getPerformer().get(0);
2347    }
2348
2349    /**
2350     * @deprecated Use Reference#setResource(IBaseResource) instead
2351     */
2352    @Deprecated
2353    public List<Resource> getPerformerTarget() { 
2354      if (this.performerTarget == null)
2355        this.performerTarget = new ArrayList<Resource>();
2356      return this.performerTarget;
2357    }
2358
2359    /**
2360     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2361     */
2362    public Type getValue() { 
2363      return this.value;
2364    }
2365
2366    /**
2367     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2368     */
2369    public Quantity getValueQuantity() throws FHIRException { 
2370      if (this.value == null)
2371        return null;
2372      if (!(this.value instanceof Quantity))
2373        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
2374      return (Quantity) this.value;
2375    }
2376
2377    public boolean hasValueQuantity() { 
2378      return this != null && this.value instanceof Quantity;
2379    }
2380
2381    /**
2382     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2383     */
2384    public CodeableConcept getValueCodeableConcept() throws FHIRException { 
2385      if (this.value == null)
2386        return null;
2387      if (!(this.value instanceof CodeableConcept))
2388        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
2389      return (CodeableConcept) this.value;
2390    }
2391
2392    public boolean hasValueCodeableConcept() { 
2393      return this != null && this.value instanceof CodeableConcept;
2394    }
2395
2396    /**
2397     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2398     */
2399    public StringType getValueStringType() throws FHIRException { 
2400      if (this.value == null)
2401        return null;
2402      if (!(this.value instanceof StringType))
2403        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
2404      return (StringType) this.value;
2405    }
2406
2407    public boolean hasValueStringType() { 
2408      return this != null && this.value instanceof StringType;
2409    }
2410
2411    /**
2412     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2413     */
2414    public BooleanType getValueBooleanType() throws FHIRException { 
2415      if (this.value == null)
2416        return null;
2417      if (!(this.value instanceof BooleanType))
2418        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
2419      return (BooleanType) this.value;
2420    }
2421
2422    public boolean hasValueBooleanType() { 
2423      return this != null && this.value instanceof BooleanType;
2424    }
2425
2426    /**
2427     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2428     */
2429    public Range getValueRange() throws FHIRException { 
2430      if (this.value == null)
2431        return null;
2432      if (!(this.value instanceof Range))
2433        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
2434      return (Range) this.value;
2435    }
2436
2437    public boolean hasValueRange() { 
2438      return this != null && this.value instanceof Range;
2439    }
2440
2441    /**
2442     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2443     */
2444    public Ratio getValueRatio() throws FHIRException { 
2445      if (this.value == null)
2446        return null;
2447      if (!(this.value instanceof Ratio))
2448        throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.value.getClass().getName()+" was encountered");
2449      return (Ratio) this.value;
2450    }
2451
2452    public boolean hasValueRatio() { 
2453      return this != null && this.value instanceof Ratio;
2454    }
2455
2456    /**
2457     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2458     */
2459    public SampledData getValueSampledData() throws FHIRException { 
2460      if (this.value == null)
2461        return null;
2462      if (!(this.value instanceof SampledData))
2463        throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.value.getClass().getName()+" was encountered");
2464      return (SampledData) this.value;
2465    }
2466
2467    public boolean hasValueSampledData() { 
2468      return this != null && this.value instanceof SampledData;
2469    }
2470
2471    /**
2472     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2473     */
2474    public Attachment getValueAttachment() throws FHIRException { 
2475      if (this.value == null)
2476        return null;
2477      if (!(this.value instanceof Attachment))
2478        throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.value.getClass().getName()+" was encountered");
2479      return (Attachment) this.value;
2480    }
2481
2482    public boolean hasValueAttachment() { 
2483      return this != null && this.value instanceof Attachment;
2484    }
2485
2486    /**
2487     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2488     */
2489    public TimeType getValueTimeType() throws FHIRException { 
2490      if (this.value == null)
2491        return null;
2492      if (!(this.value instanceof TimeType))
2493        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.value.getClass().getName()+" was encountered");
2494      return (TimeType) this.value;
2495    }
2496
2497    public boolean hasValueTimeType() { 
2498      return this != null && this.value instanceof TimeType;
2499    }
2500
2501    /**
2502     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2503     */
2504    public DateTimeType getValueDateTimeType() throws FHIRException { 
2505      if (this.value == null)
2506        return null;
2507      if (!(this.value instanceof DateTimeType))
2508        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
2509      return (DateTimeType) this.value;
2510    }
2511
2512    public boolean hasValueDateTimeType() { 
2513      return this != null && this.value instanceof DateTimeType;
2514    }
2515
2516    /**
2517     * @return {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2518     */
2519    public Period getValuePeriod() throws FHIRException { 
2520      if (this.value == null)
2521        return null;
2522      if (!(this.value instanceof Period))
2523        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.value.getClass().getName()+" was encountered");
2524      return (Period) this.value;
2525    }
2526
2527    public boolean hasValuePeriod() { 
2528      return this != null && this.value instanceof Period;
2529    }
2530
2531    public boolean hasValue() { 
2532      return this.value != null && !this.value.isEmpty();
2533    }
2534
2535    /**
2536     * @param value {@link #value} (The information determined as a result of making the observation, if the information has a simple value.)
2537     */
2538    public Observation setValue(Type value) throws FHIRFormatError { 
2539      if (value != null && !(value instanceof Quantity || value instanceof CodeableConcept || value instanceof StringType || value instanceof BooleanType || value instanceof Range || value instanceof Ratio || value instanceof SampledData || value instanceof Attachment || value instanceof TimeType || value instanceof DateTimeType || value instanceof Period))
2540        throw new FHIRFormatError("Not the right type for Observation.value[x]: "+value.fhirType());
2541      this.value = value;
2542      return this;
2543    }
2544
2545    /**
2546     * @return {@link #dataAbsentReason} (Provides a reason why the expected value in the element Observation.value[x] is missing.)
2547     */
2548    public CodeableConcept getDataAbsentReason() { 
2549      if (this.dataAbsentReason == null)
2550        if (Configuration.errorOnAutoCreate())
2551          throw new Error("Attempt to auto-create Observation.dataAbsentReason");
2552        else if (Configuration.doAutoCreate())
2553          this.dataAbsentReason = new CodeableConcept(); // cc
2554      return this.dataAbsentReason;
2555    }
2556
2557    public boolean hasDataAbsentReason() { 
2558      return this.dataAbsentReason != null && !this.dataAbsentReason.isEmpty();
2559    }
2560
2561    /**
2562     * @param value {@link #dataAbsentReason} (Provides a reason why the expected value in the element Observation.value[x] is missing.)
2563     */
2564    public Observation setDataAbsentReason(CodeableConcept value)  { 
2565      this.dataAbsentReason = value;
2566      return this;
2567    }
2568
2569    /**
2570     * @return {@link #interpretation} (The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.)
2571     */
2572    public CodeableConcept getInterpretation() { 
2573      if (this.interpretation == null)
2574        if (Configuration.errorOnAutoCreate())
2575          throw new Error("Attempt to auto-create Observation.interpretation");
2576        else if (Configuration.doAutoCreate())
2577          this.interpretation = new CodeableConcept(); // cc
2578      return this.interpretation;
2579    }
2580
2581    public boolean hasInterpretation() { 
2582      return this.interpretation != null && !this.interpretation.isEmpty();
2583    }
2584
2585    /**
2586     * @param value {@link #interpretation} (The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.)
2587     */
2588    public Observation setInterpretation(CodeableConcept value)  { 
2589      this.interpretation = value;
2590      return this;
2591    }
2592
2593    /**
2594     * @return {@link #comment} (May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the result.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
2595     */
2596    public StringType getCommentElement() { 
2597      if (this.comment == null)
2598        if (Configuration.errorOnAutoCreate())
2599          throw new Error("Attempt to auto-create Observation.comment");
2600        else if (Configuration.doAutoCreate())
2601          this.comment = new StringType(); // bb
2602      return this.comment;
2603    }
2604
2605    public boolean hasCommentElement() { 
2606      return this.comment != null && !this.comment.isEmpty();
2607    }
2608
2609    public boolean hasComment() { 
2610      return this.comment != null && !this.comment.isEmpty();
2611    }
2612
2613    /**
2614     * @param value {@link #comment} (May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the result.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
2615     */
2616    public Observation setCommentElement(StringType value) { 
2617      this.comment = value;
2618      return this;
2619    }
2620
2621    /**
2622     * @return May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the result.
2623     */
2624    public String getComment() { 
2625      return this.comment == null ? null : this.comment.getValue();
2626    }
2627
2628    /**
2629     * @param value May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the result.
2630     */
2631    public Observation setComment(String value) { 
2632      if (Utilities.noString(value))
2633        this.comment = null;
2634      else {
2635        if (this.comment == null)
2636          this.comment = new StringType();
2637        this.comment.setValue(value);
2638      }
2639      return this;
2640    }
2641
2642    /**
2643     * @return {@link #bodySite} (Indicates the site on the subject's body where the observation was made (i.e. the target site).)
2644     */
2645    public CodeableConcept getBodySite() { 
2646      if (this.bodySite == null)
2647        if (Configuration.errorOnAutoCreate())
2648          throw new Error("Attempt to auto-create Observation.bodySite");
2649        else if (Configuration.doAutoCreate())
2650          this.bodySite = new CodeableConcept(); // cc
2651      return this.bodySite;
2652    }
2653
2654    public boolean hasBodySite() { 
2655      return this.bodySite != null && !this.bodySite.isEmpty();
2656    }
2657
2658    /**
2659     * @param value {@link #bodySite} (Indicates the site on the subject's body where the observation was made (i.e. the target site).)
2660     */
2661    public Observation setBodySite(CodeableConcept value)  { 
2662      this.bodySite = value;
2663      return this;
2664    }
2665
2666    /**
2667     * @return {@link #method} (Indicates the mechanism used to perform the observation.)
2668     */
2669    public CodeableConcept getMethod() { 
2670      if (this.method == null)
2671        if (Configuration.errorOnAutoCreate())
2672          throw new Error("Attempt to auto-create Observation.method");
2673        else if (Configuration.doAutoCreate())
2674          this.method = new CodeableConcept(); // cc
2675      return this.method;
2676    }
2677
2678    public boolean hasMethod() { 
2679      return this.method != null && !this.method.isEmpty();
2680    }
2681
2682    /**
2683     * @param value {@link #method} (Indicates the mechanism used to perform the observation.)
2684     */
2685    public Observation setMethod(CodeableConcept value)  { 
2686      this.method = value;
2687      return this;
2688    }
2689
2690    /**
2691     * @return {@link #specimen} (The specimen that was used when this observation was made.)
2692     */
2693    public Reference getSpecimen() { 
2694      if (this.specimen == null)
2695        if (Configuration.errorOnAutoCreate())
2696          throw new Error("Attempt to auto-create Observation.specimen");
2697        else if (Configuration.doAutoCreate())
2698          this.specimen = new Reference(); // cc
2699      return this.specimen;
2700    }
2701
2702    public boolean hasSpecimen() { 
2703      return this.specimen != null && !this.specimen.isEmpty();
2704    }
2705
2706    /**
2707     * @param value {@link #specimen} (The specimen that was used when this observation was made.)
2708     */
2709    public Observation setSpecimen(Reference value)  { 
2710      this.specimen = value;
2711      return this;
2712    }
2713
2714    /**
2715     * @return {@link #specimen} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The specimen that was used when this observation was made.)
2716     */
2717    public Specimen getSpecimenTarget() { 
2718      if (this.specimenTarget == null)
2719        if (Configuration.errorOnAutoCreate())
2720          throw new Error("Attempt to auto-create Observation.specimen");
2721        else if (Configuration.doAutoCreate())
2722          this.specimenTarget = new Specimen(); // aa
2723      return this.specimenTarget;
2724    }
2725
2726    /**
2727     * @param value {@link #specimen} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The specimen that was used when this observation was made.)
2728     */
2729    public Observation setSpecimenTarget(Specimen value) { 
2730      this.specimenTarget = value;
2731      return this;
2732    }
2733
2734    /**
2735     * @return {@link #device} (The device used to generate the observation data.)
2736     */
2737    public Reference getDevice() { 
2738      if (this.device == null)
2739        if (Configuration.errorOnAutoCreate())
2740          throw new Error("Attempt to auto-create Observation.device");
2741        else if (Configuration.doAutoCreate())
2742          this.device = new Reference(); // cc
2743      return this.device;
2744    }
2745
2746    public boolean hasDevice() { 
2747      return this.device != null && !this.device.isEmpty();
2748    }
2749
2750    /**
2751     * @param value {@link #device} (The device used to generate the observation data.)
2752     */
2753    public Observation setDevice(Reference value)  { 
2754      this.device = value;
2755      return this;
2756    }
2757
2758    /**
2759     * @return {@link #device} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The device used to generate the observation data.)
2760     */
2761    public Resource getDeviceTarget() { 
2762      return this.deviceTarget;
2763    }
2764
2765    /**
2766     * @param value {@link #device} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The device used to generate the observation data.)
2767     */
2768    public Observation setDeviceTarget(Resource value) { 
2769      this.deviceTarget = value;
2770      return this;
2771    }
2772
2773    /**
2774     * @return {@link #referenceRange} (Guidance on how to interpret the value by comparison to a normal or recommended range.)
2775     */
2776    public List<ObservationReferenceRangeComponent> getReferenceRange() { 
2777      if (this.referenceRange == null)
2778        this.referenceRange = new ArrayList<ObservationReferenceRangeComponent>();
2779      return this.referenceRange;
2780    }
2781
2782    /**
2783     * @return Returns a reference to <code>this</code> for easy method chaining
2784     */
2785    public Observation setReferenceRange(List<ObservationReferenceRangeComponent> theReferenceRange) { 
2786      this.referenceRange = theReferenceRange;
2787      return this;
2788    }
2789
2790    public boolean hasReferenceRange() { 
2791      if (this.referenceRange == null)
2792        return false;
2793      for (ObservationReferenceRangeComponent item : this.referenceRange)
2794        if (!item.isEmpty())
2795          return true;
2796      return false;
2797    }
2798
2799    public ObservationReferenceRangeComponent addReferenceRange() { //3
2800      ObservationReferenceRangeComponent t = new ObservationReferenceRangeComponent();
2801      if (this.referenceRange == null)
2802        this.referenceRange = new ArrayList<ObservationReferenceRangeComponent>();
2803      this.referenceRange.add(t);
2804      return t;
2805    }
2806
2807    public Observation addReferenceRange(ObservationReferenceRangeComponent t) { //3
2808      if (t == null)
2809        return this;
2810      if (this.referenceRange == null)
2811        this.referenceRange = new ArrayList<ObservationReferenceRangeComponent>();
2812      this.referenceRange.add(t);
2813      return this;
2814    }
2815
2816    /**
2817     * @return The first repetition of repeating field {@link #referenceRange}, creating it if it does not already exist
2818     */
2819    public ObservationReferenceRangeComponent getReferenceRangeFirstRep() { 
2820      if (getReferenceRange().isEmpty()) {
2821        addReferenceRange();
2822      }
2823      return getReferenceRange().get(0);
2824    }
2825
2826    /**
2827     * @return {@link #related} (A  reference to another resource (usually another Observation) whose relationship is defined by the relationship type code.)
2828     */
2829    public List<ObservationRelatedComponent> getRelated() { 
2830      if (this.related == null)
2831        this.related = new ArrayList<ObservationRelatedComponent>();
2832      return this.related;
2833    }
2834
2835    /**
2836     * @return Returns a reference to <code>this</code> for easy method chaining
2837     */
2838    public Observation setRelated(List<ObservationRelatedComponent> theRelated) { 
2839      this.related = theRelated;
2840      return this;
2841    }
2842
2843    public boolean hasRelated() { 
2844      if (this.related == null)
2845        return false;
2846      for (ObservationRelatedComponent item : this.related)
2847        if (!item.isEmpty())
2848          return true;
2849      return false;
2850    }
2851
2852    public ObservationRelatedComponent addRelated() { //3
2853      ObservationRelatedComponent t = new ObservationRelatedComponent();
2854      if (this.related == null)
2855        this.related = new ArrayList<ObservationRelatedComponent>();
2856      this.related.add(t);
2857      return t;
2858    }
2859
2860    public Observation addRelated(ObservationRelatedComponent t) { //3
2861      if (t == null)
2862        return this;
2863      if (this.related == null)
2864        this.related = new ArrayList<ObservationRelatedComponent>();
2865      this.related.add(t);
2866      return this;
2867    }
2868
2869    /**
2870     * @return The first repetition of repeating field {@link #related}, creating it if it does not already exist
2871     */
2872    public ObservationRelatedComponent getRelatedFirstRep() { 
2873      if (getRelated().isEmpty()) {
2874        addRelated();
2875      }
2876      return getRelated().get(0);
2877    }
2878
2879    /**
2880     * @return {@link #component} (Some observations have multiple component observations.  These component observations are expressed as separate code value pairs that share the same attributes.  Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations.)
2881     */
2882    public List<ObservationComponentComponent> getComponent() { 
2883      if (this.component == null)
2884        this.component = new ArrayList<ObservationComponentComponent>();
2885      return this.component;
2886    }
2887
2888    /**
2889     * @return Returns a reference to <code>this</code> for easy method chaining
2890     */
2891    public Observation setComponent(List<ObservationComponentComponent> theComponent) { 
2892      this.component = theComponent;
2893      return this;
2894    }
2895
2896    public boolean hasComponent() { 
2897      if (this.component == null)
2898        return false;
2899      for (ObservationComponentComponent item : this.component)
2900        if (!item.isEmpty())
2901          return true;
2902      return false;
2903    }
2904
2905    public ObservationComponentComponent addComponent() { //3
2906      ObservationComponentComponent t = new ObservationComponentComponent();
2907      if (this.component == null)
2908        this.component = new ArrayList<ObservationComponentComponent>();
2909      this.component.add(t);
2910      return t;
2911    }
2912
2913    public Observation addComponent(ObservationComponentComponent t) { //3
2914      if (t == null)
2915        return this;
2916      if (this.component == null)
2917        this.component = new ArrayList<ObservationComponentComponent>();
2918      this.component.add(t);
2919      return this;
2920    }
2921
2922    /**
2923     * @return The first repetition of repeating field {@link #component}, creating it if it does not already exist
2924     */
2925    public ObservationComponentComponent getComponentFirstRep() { 
2926      if (getComponent().isEmpty()) {
2927        addComponent();
2928      }
2929      return getComponent().get(0);
2930    }
2931
2932      protected void listChildren(List<Property> children) {
2933        super.listChildren(children);
2934        children.add(new Property("identifier", "Identifier", "A unique identifier assigned to this observation.", 0, java.lang.Integer.MAX_VALUE, identifier));
2935        children.add(new Property("basedOn", "Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|MedicationRequest|NutritionOrder|ProcedureRequest|ReferralRequest)", "A plan, proposal or order that is fulfilled in whole or in part by this event.", 0, java.lang.Integer.MAX_VALUE, basedOn));
2936        children.add(new Property("status", "code", "The status of the result value.", 0, 1, status));
2937        children.add(new Property("category", "CodeableConcept", "A code that classifies the general type of observation being made.", 0, java.lang.Integer.MAX_VALUE, category));
2938        children.add(new Property("code", "CodeableConcept", "Describes what was observed. Sometimes this is called the observation \"name\".", 0, 1, code));
2939        children.add(new Property("subject", "Reference(Patient|Group|Device|Location)", "The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed.  Comments: Indirect characteristics may be those of a specimen, fetus, donor,  other observer (for example a relative or EMT), or any observation made about the subject.", 0, 1, subject));
2940        children.add(new Property("context", "Reference(Encounter|EpisodeOfCare)", "The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made.", 0, 1, context));
2941        children.add(new Property("effective[x]", "dateTime|Period", "The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the \"physiologically relevant time\". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.", 0, 1, effective));
2942        children.add(new Property("issued", "instant", "The date and time this observation was made available to providers, typically after the results have been reviewed and verified.", 0, 1, issued));
2943        children.add(new Property("performer", "Reference(Practitioner|Organization|Patient|RelatedPerson)", "Who was responsible for asserting the observed value as \"true\".", 0, java.lang.Integer.MAX_VALUE, performer));
2944        children.add(new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value));
2945        children.add(new Property("dataAbsentReason", "CodeableConcept", "Provides a reason why the expected value in the element Observation.value[x] is missing.", 0, 1, dataAbsentReason));
2946        children.add(new Property("interpretation", "CodeableConcept", "The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.", 0, 1, interpretation));
2947        children.add(new Property("comment", "string", "May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the result.", 0, 1, comment));
2948        children.add(new Property("bodySite", "CodeableConcept", "Indicates the site on the subject's body where the observation was made (i.e. the target site).", 0, 1, bodySite));
2949        children.add(new Property("method", "CodeableConcept", "Indicates the mechanism used to perform the observation.", 0, 1, method));
2950        children.add(new Property("specimen", "Reference(Specimen)", "The specimen that was used when this observation was made.", 0, 1, specimen));
2951        children.add(new Property("device", "Reference(Device|DeviceMetric)", "The device used to generate the observation data.", 0, 1, device));
2952        children.add(new Property("referenceRange", "", "Guidance on how to interpret the value by comparison to a normal or recommended range.", 0, java.lang.Integer.MAX_VALUE, referenceRange));
2953        children.add(new Property("related", "", "A  reference to another resource (usually another Observation) whose relationship is defined by the relationship type code.", 0, java.lang.Integer.MAX_VALUE, related));
2954        children.add(new Property("component", "", "Some observations have multiple component observations.  These component observations are expressed as separate code value pairs that share the same attributes.  Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations.", 0, java.lang.Integer.MAX_VALUE, component));
2955      }
2956
2957      @Override
2958      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2959        switch (_hash) {
2960        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A unique identifier assigned to this observation.", 0, java.lang.Integer.MAX_VALUE, identifier);
2961        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|MedicationRequest|NutritionOrder|ProcedureRequest|ReferralRequest)", "A plan, proposal or order that is fulfilled in whole or in part by this event.", 0, java.lang.Integer.MAX_VALUE, basedOn);
2962        case -892481550: /*status*/  return new Property("status", "code", "The status of the result value.", 0, 1, status);
2963        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "A code that classifies the general type of observation being made.", 0, java.lang.Integer.MAX_VALUE, category);
2964        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Describes what was observed. Sometimes this is called the observation \"name\".", 0, 1, code);
2965        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group|Device|Location)", "The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed.  Comments: Indirect characteristics may be those of a specimen, fetus, donor,  other observer (for example a relative or EMT), or any observation made about the subject.", 0, 1, subject);
2966        case 951530927: /*context*/  return new Property("context", "Reference(Encounter|EpisodeOfCare)", "The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made.", 0, 1, context);
2967        case 247104889: /*effective[x]*/  return new Property("effective[x]", "dateTime|Period", "The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the \"physiologically relevant time\". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.", 0, 1, effective);
2968        case -1468651097: /*effective*/  return new Property("effective[x]", "dateTime|Period", "The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the \"physiologically relevant time\". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.", 0, 1, effective);
2969        case -275306910: /*effectiveDateTime*/  return new Property("effective[x]", "dateTime|Period", "The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the \"physiologically relevant time\". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.", 0, 1, effective);
2970        case -403934648: /*effectivePeriod*/  return new Property("effective[x]", "dateTime|Period", "The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the \"physiologically relevant time\". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.", 0, 1, effective);
2971        case -1179159893: /*issued*/  return new Property("issued", "instant", "The date and time this observation was made available to providers, typically after the results have been reviewed and verified.", 0, 1, issued);
2972        case 481140686: /*performer*/  return new Property("performer", "Reference(Practitioner|Organization|Patient|RelatedPerson)", "Who was responsible for asserting the observed value as \"true\".", 0, java.lang.Integer.MAX_VALUE, performer);
2973        case -1410166417: /*value[x]*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2974        case 111972721: /*value*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2975        case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2976        case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2977        case -1424603934: /*valueString*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2978        case 733421943: /*valueBoolean*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2979        case 2030761548: /*valueRange*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2980        case 2030767386: /*valueRatio*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2981        case -962229101: /*valueSampledData*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2982        case -475566732: /*valueAttachment*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2983        case -765708322: /*valueTime*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2984        case 1047929900: /*valueDateTime*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2985        case -1524344174: /*valuePeriod*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|Range|Ratio|SampledData|Attachment|time|dateTime|Period", "The information determined as a result of making the observation, if the information has a simple value.", 0, 1, value);
2986        case 1034315687: /*dataAbsentReason*/  return new Property("dataAbsentReason", "CodeableConcept", "Provides a reason why the expected value in the element Observation.value[x] is missing.", 0, 1, dataAbsentReason);
2987        case -297950712: /*interpretation*/  return new Property("interpretation", "CodeableConcept", "The assessment made based on the result of the observation.  Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flag.", 0, 1, interpretation);
2988        case 950398559: /*comment*/  return new Property("comment", "string", "May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the result.", 0, 1, comment);
2989        case 1702620169: /*bodySite*/  return new Property("bodySite", "CodeableConcept", "Indicates the site on the subject's body where the observation was made (i.e. the target site).", 0, 1, bodySite);
2990        case -1077554975: /*method*/  return new Property("method", "CodeableConcept", "Indicates the mechanism used to perform the observation.", 0, 1, method);
2991        case -2132868344: /*specimen*/  return new Property("specimen", "Reference(Specimen)", "The specimen that was used when this observation was made.", 0, 1, specimen);
2992        case -1335157162: /*device*/  return new Property("device", "Reference(Device|DeviceMetric)", "The device used to generate the observation data.", 0, 1, device);
2993        case -1912545102: /*referenceRange*/  return new Property("referenceRange", "", "Guidance on how to interpret the value by comparison to a normal or recommended range.", 0, java.lang.Integer.MAX_VALUE, referenceRange);
2994        case 1090493483: /*related*/  return new Property("related", "", "A  reference to another resource (usually another Observation) whose relationship is defined by the relationship type code.", 0, java.lang.Integer.MAX_VALUE, related);
2995        case -1399907075: /*component*/  return new Property("component", "", "Some observations have multiple component observations.  These component observations are expressed as separate code value pairs that share the same attributes.  Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations.", 0, java.lang.Integer.MAX_VALUE, component);
2996        default: return super.getNamedProperty(_hash, _name, _checkValid);
2997        }
2998
2999      }
3000
3001      @Override
3002      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3003        switch (hash) {
3004        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3005        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
3006        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ObservationStatus>
3007        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
3008        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
3009        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
3010        case 951530927: /*context*/ return this.context == null ? new Base[0] : new Base[] {this.context}; // Reference
3011        case -1468651097: /*effective*/ return this.effective == null ? new Base[0] : new Base[] {this.effective}; // Type
3012        case -1179159893: /*issued*/ return this.issued == null ? new Base[0] : new Base[] {this.issued}; // InstantType
3013        case 481140686: /*performer*/ return this.performer == null ? new Base[0] : this.performer.toArray(new Base[this.performer.size()]); // Reference
3014        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // Type
3015        case 1034315687: /*dataAbsentReason*/ return this.dataAbsentReason == null ? new Base[0] : new Base[] {this.dataAbsentReason}; // CodeableConcept
3016        case -297950712: /*interpretation*/ return this.interpretation == null ? new Base[0] : new Base[] {this.interpretation}; // CodeableConcept
3017        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // StringType
3018        case 1702620169: /*bodySite*/ return this.bodySite == null ? new Base[0] : new Base[] {this.bodySite}; // CodeableConcept
3019        case -1077554975: /*method*/ return this.method == null ? new Base[0] : new Base[] {this.method}; // CodeableConcept
3020        case -2132868344: /*specimen*/ return this.specimen == null ? new Base[0] : new Base[] {this.specimen}; // Reference
3021        case -1335157162: /*device*/ return this.device == null ? new Base[0] : new Base[] {this.device}; // Reference
3022        case -1912545102: /*referenceRange*/ return this.referenceRange == null ? new Base[0] : this.referenceRange.toArray(new Base[this.referenceRange.size()]); // ObservationReferenceRangeComponent
3023        case 1090493483: /*related*/ return this.related == null ? new Base[0] : this.related.toArray(new Base[this.related.size()]); // ObservationRelatedComponent
3024        case -1399907075: /*component*/ return this.component == null ? new Base[0] : this.component.toArray(new Base[this.component.size()]); // ObservationComponentComponent
3025        default: return super.getProperty(hash, name, checkValid);
3026        }
3027
3028      }
3029
3030      @Override
3031      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3032        switch (hash) {
3033        case -1618432855: // identifier
3034          this.getIdentifier().add(castToIdentifier(value)); // Identifier
3035          return value;
3036        case -332612366: // basedOn
3037          this.getBasedOn().add(castToReference(value)); // Reference
3038          return value;
3039        case -892481550: // status
3040          value = new ObservationStatusEnumFactory().fromType(castToCode(value));
3041          this.status = (Enumeration) value; // Enumeration<ObservationStatus>
3042          return value;
3043        case 50511102: // category
3044          this.getCategory().add(castToCodeableConcept(value)); // CodeableConcept
3045          return value;
3046        case 3059181: // code
3047          this.code = castToCodeableConcept(value); // CodeableConcept
3048          return value;
3049        case -1867885268: // subject
3050          this.subject = castToReference(value); // Reference
3051          return value;
3052        case 951530927: // context
3053          this.context = castToReference(value); // Reference
3054          return value;
3055        case -1468651097: // effective
3056          this.effective = castToType(value); // Type
3057          return value;
3058        case -1179159893: // issued
3059          this.issued = castToInstant(value); // InstantType
3060          return value;
3061        case 481140686: // performer
3062          this.getPerformer().add(castToReference(value)); // Reference
3063          return value;
3064        case 111972721: // value
3065          this.value = castToType(value); // Type
3066          return value;
3067        case 1034315687: // dataAbsentReason
3068          this.dataAbsentReason = castToCodeableConcept(value); // CodeableConcept
3069          return value;
3070        case -297950712: // interpretation
3071          this.interpretation = castToCodeableConcept(value); // CodeableConcept
3072          return value;
3073        case 950398559: // comment
3074          this.comment = castToString(value); // StringType
3075          return value;
3076        case 1702620169: // bodySite
3077          this.bodySite = castToCodeableConcept(value); // CodeableConcept
3078          return value;
3079        case -1077554975: // method
3080          this.method = castToCodeableConcept(value); // CodeableConcept
3081          return value;
3082        case -2132868344: // specimen
3083          this.specimen = castToReference(value); // Reference
3084          return value;
3085        case -1335157162: // device
3086          this.device = castToReference(value); // Reference
3087          return value;
3088        case -1912545102: // referenceRange
3089          this.getReferenceRange().add((ObservationReferenceRangeComponent) value); // ObservationReferenceRangeComponent
3090          return value;
3091        case 1090493483: // related
3092          this.getRelated().add((ObservationRelatedComponent) value); // ObservationRelatedComponent
3093          return value;
3094        case -1399907075: // component
3095          this.getComponent().add((ObservationComponentComponent) value); // ObservationComponentComponent
3096          return value;
3097        default: return super.setProperty(hash, name, value);
3098        }
3099
3100      }
3101
3102      @Override
3103      public Base setProperty(String name, Base value) throws FHIRException {
3104        if (name.equals("identifier")) {
3105          this.getIdentifier().add(castToIdentifier(value));
3106        } else if (name.equals("basedOn")) {
3107          this.getBasedOn().add(castToReference(value));
3108        } else if (name.equals("status")) {
3109          value = new ObservationStatusEnumFactory().fromType(castToCode(value));
3110          this.status = (Enumeration) value; // Enumeration<ObservationStatus>
3111        } else if (name.equals("category")) {
3112          this.getCategory().add(castToCodeableConcept(value));
3113        } else if (name.equals("code")) {
3114          this.code = castToCodeableConcept(value); // CodeableConcept
3115        } else if (name.equals("subject")) {
3116          this.subject = castToReference(value); // Reference
3117        } else if (name.equals("context")) {
3118          this.context = castToReference(value); // Reference
3119        } else if (name.equals("effective[x]")) {
3120          this.effective = castToType(value); // Type
3121        } else if (name.equals("issued")) {
3122          this.issued = castToInstant(value); // InstantType
3123        } else if (name.equals("performer")) {
3124          this.getPerformer().add(castToReference(value));
3125        } else if (name.equals("value[x]")) {
3126          this.value = castToType(value); // Type
3127        } else if (name.equals("dataAbsentReason")) {
3128          this.dataAbsentReason = castToCodeableConcept(value); // CodeableConcept
3129        } else if (name.equals("interpretation")) {
3130          this.interpretation = castToCodeableConcept(value); // CodeableConcept
3131        } else if (name.equals("comment")) {
3132          this.comment = castToString(value); // StringType
3133        } else if (name.equals("bodySite")) {
3134          this.bodySite = castToCodeableConcept(value); // CodeableConcept
3135        } else if (name.equals("method")) {
3136          this.method = castToCodeableConcept(value); // CodeableConcept
3137        } else if (name.equals("specimen")) {
3138          this.specimen = castToReference(value); // Reference
3139        } else if (name.equals("device")) {
3140          this.device = castToReference(value); // Reference
3141        } else if (name.equals("referenceRange")) {
3142          this.getReferenceRange().add((ObservationReferenceRangeComponent) value);
3143        } else if (name.equals("related")) {
3144          this.getRelated().add((ObservationRelatedComponent) value);
3145        } else if (name.equals("component")) {
3146          this.getComponent().add((ObservationComponentComponent) value);
3147        } else
3148          return super.setProperty(name, value);
3149        return value;
3150      }
3151
3152      @Override
3153      public Base makeProperty(int hash, String name) throws FHIRException {
3154        switch (hash) {
3155        case -1618432855:  return addIdentifier(); 
3156        case -332612366:  return addBasedOn(); 
3157        case -892481550:  return getStatusElement();
3158        case 50511102:  return addCategory(); 
3159        case 3059181:  return getCode(); 
3160        case -1867885268:  return getSubject(); 
3161        case 951530927:  return getContext(); 
3162        case 247104889:  return getEffective(); 
3163        case -1468651097:  return getEffective(); 
3164        case -1179159893:  return getIssuedElement();
3165        case 481140686:  return addPerformer(); 
3166        case -1410166417:  return getValue(); 
3167        case 111972721:  return getValue(); 
3168        case 1034315687:  return getDataAbsentReason(); 
3169        case -297950712:  return getInterpretation(); 
3170        case 950398559:  return getCommentElement();
3171        case 1702620169:  return getBodySite(); 
3172        case -1077554975:  return getMethod(); 
3173        case -2132868344:  return getSpecimen(); 
3174        case -1335157162:  return getDevice(); 
3175        case -1912545102:  return addReferenceRange(); 
3176        case 1090493483:  return addRelated(); 
3177        case -1399907075:  return addComponent(); 
3178        default: return super.makeProperty(hash, name);
3179        }
3180
3181      }
3182
3183      @Override
3184      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3185        switch (hash) {
3186        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3187        case -332612366: /*basedOn*/ return new String[] {"Reference"};
3188        case -892481550: /*status*/ return new String[] {"code"};
3189        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
3190        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
3191        case -1867885268: /*subject*/ return new String[] {"Reference"};
3192        case 951530927: /*context*/ return new String[] {"Reference"};
3193        case -1468651097: /*effective*/ return new String[] {"dateTime", "Period"};
3194        case -1179159893: /*issued*/ return new String[] {"instant"};
3195        case 481140686: /*performer*/ return new String[] {"Reference"};
3196        case 111972721: /*value*/ return new String[] {"Quantity", "CodeableConcept", "string", "boolean", "Range", "Ratio", "SampledData", "Attachment", "time", "dateTime", "Period"};
3197        case 1034315687: /*dataAbsentReason*/ return new String[] {"CodeableConcept"};
3198        case -297950712: /*interpretation*/ return new String[] {"CodeableConcept"};
3199        case 950398559: /*comment*/ return new String[] {"string"};
3200        case 1702620169: /*bodySite*/ return new String[] {"CodeableConcept"};
3201        case -1077554975: /*method*/ return new String[] {"CodeableConcept"};
3202        case -2132868344: /*specimen*/ return new String[] {"Reference"};
3203        case -1335157162: /*device*/ return new String[] {"Reference"};
3204        case -1912545102: /*referenceRange*/ return new String[] {};
3205        case 1090493483: /*related*/ return new String[] {};
3206        case -1399907075: /*component*/ return new String[] {};
3207        default: return super.getTypesForProperty(hash, name);
3208        }
3209
3210      }
3211
3212      @Override
3213      public Base addChild(String name) throws FHIRException {
3214        if (name.equals("identifier")) {
3215          return addIdentifier();
3216        }
3217        else if (name.equals("basedOn")) {
3218          return addBasedOn();
3219        }
3220        else if (name.equals("status")) {
3221          throw new FHIRException("Cannot call addChild on a singleton property Observation.status");
3222        }
3223        else if (name.equals("category")) {
3224          return addCategory();
3225        }
3226        else if (name.equals("code")) {
3227          this.code = new CodeableConcept();
3228          return this.code;
3229        }
3230        else if (name.equals("subject")) {
3231          this.subject = new Reference();
3232          return this.subject;
3233        }
3234        else if (name.equals("context")) {
3235          this.context = new Reference();
3236          return this.context;
3237        }
3238        else if (name.equals("effectiveDateTime")) {
3239          this.effective = new DateTimeType();
3240          return this.effective;
3241        }
3242        else if (name.equals("effectivePeriod")) {
3243          this.effective = new Period();
3244          return this.effective;
3245        }
3246        else if (name.equals("issued")) {
3247          throw new FHIRException("Cannot call addChild on a singleton property Observation.issued");
3248        }
3249        else if (name.equals("performer")) {
3250          return addPerformer();
3251        }
3252        else if (name.equals("valueQuantity")) {
3253          this.value = new Quantity();
3254          return this.value;
3255        }
3256        else if (name.equals("valueCodeableConcept")) {
3257          this.value = new CodeableConcept();
3258          return this.value;
3259        }
3260        else if (name.equals("valueString")) {
3261          this.value = new StringType();
3262          return this.value;
3263        }
3264        else if (name.equals("valueBoolean")) {
3265          this.value = new BooleanType();
3266          return this.value;
3267        }
3268        else if (name.equals("valueRange")) {
3269          this.value = new Range();
3270          return this.value;
3271        }
3272        else if (name.equals("valueRatio")) {
3273          this.value = new Ratio();
3274          return this.value;
3275        }
3276        else if (name.equals("valueSampledData")) {
3277          this.value = new SampledData();
3278          return this.value;
3279        }
3280        else if (name.equals("valueAttachment")) {
3281          this.value = new Attachment();
3282          return this.value;
3283        }
3284        else if (name.equals("valueTime")) {
3285          this.value = new TimeType();
3286          return this.value;
3287        }
3288        else if (name.equals("valueDateTime")) {
3289          this.value = new DateTimeType();
3290          return this.value;
3291        }
3292        else if (name.equals("valuePeriod")) {
3293          this.value = new Period();
3294          return this.value;
3295        }
3296        else if (name.equals("dataAbsentReason")) {
3297          this.dataAbsentReason = new CodeableConcept();
3298          return this.dataAbsentReason;
3299        }
3300        else if (name.equals("interpretation")) {
3301          this.interpretation = new CodeableConcept();
3302          return this.interpretation;
3303        }
3304        else if (name.equals("comment")) {
3305          throw new FHIRException("Cannot call addChild on a singleton property Observation.comment");
3306        }
3307        else if (name.equals("bodySite")) {
3308          this.bodySite = new CodeableConcept();
3309          return this.bodySite;
3310        }
3311        else if (name.equals("method")) {
3312          this.method = new CodeableConcept();
3313          return this.method;
3314        }
3315        else if (name.equals("specimen")) {
3316          this.specimen = new Reference();
3317          return this.specimen;
3318        }
3319        else if (name.equals("device")) {
3320          this.device = new Reference();
3321          return this.device;
3322        }
3323        else if (name.equals("referenceRange")) {
3324          return addReferenceRange();
3325        }
3326        else if (name.equals("related")) {
3327          return addRelated();
3328        }
3329        else if (name.equals("component")) {
3330          return addComponent();
3331        }
3332        else
3333          return super.addChild(name);
3334      }
3335
3336  public String fhirType() {
3337    return "Observation";
3338
3339  }
3340
3341      public Observation copy() {
3342        Observation dst = new Observation();
3343        copyValues(dst);
3344        if (identifier != null) {
3345          dst.identifier = new ArrayList<Identifier>();
3346          for (Identifier i : identifier)
3347            dst.identifier.add(i.copy());
3348        };
3349        if (basedOn != null) {
3350          dst.basedOn = new ArrayList<Reference>();
3351          for (Reference i : basedOn)
3352            dst.basedOn.add(i.copy());
3353        };
3354        dst.status = status == null ? null : status.copy();
3355        if (category != null) {
3356          dst.category = new ArrayList<CodeableConcept>();
3357          for (CodeableConcept i : category)
3358            dst.category.add(i.copy());
3359        };
3360        dst.code = code == null ? null : code.copy();
3361        dst.subject = subject == null ? null : subject.copy();
3362        dst.context = context == null ? null : context.copy();
3363        dst.effective = effective == null ? null : effective.copy();
3364        dst.issued = issued == null ? null : issued.copy();
3365        if (performer != null) {
3366          dst.performer = new ArrayList<Reference>();
3367          for (Reference i : performer)
3368            dst.performer.add(i.copy());
3369        };
3370        dst.value = value == null ? null : value.copy();
3371        dst.dataAbsentReason = dataAbsentReason == null ? null : dataAbsentReason.copy();
3372        dst.interpretation = interpretation == null ? null : interpretation.copy();
3373        dst.comment = comment == null ? null : comment.copy();
3374        dst.bodySite = bodySite == null ? null : bodySite.copy();
3375        dst.method = method == null ? null : method.copy();
3376        dst.specimen = specimen == null ? null : specimen.copy();
3377        dst.device = device == null ? null : device.copy();
3378        if (referenceRange != null) {
3379          dst.referenceRange = new ArrayList<ObservationReferenceRangeComponent>();
3380          for (ObservationReferenceRangeComponent i : referenceRange)
3381            dst.referenceRange.add(i.copy());
3382        };
3383        if (related != null) {
3384          dst.related = new ArrayList<ObservationRelatedComponent>();
3385          for (ObservationRelatedComponent i : related)
3386            dst.related.add(i.copy());
3387        };
3388        if (component != null) {
3389          dst.component = new ArrayList<ObservationComponentComponent>();
3390          for (ObservationComponentComponent i : component)
3391            dst.component.add(i.copy());
3392        };
3393        return dst;
3394      }
3395
3396      protected Observation typedCopy() {
3397        return copy();
3398      }
3399
3400      @Override
3401      public boolean equalsDeep(Base other_) {
3402        if (!super.equalsDeep(other_))
3403          return false;
3404        if (!(other_ instanceof Observation))
3405          return false;
3406        Observation o = (Observation) other_;
3407        return compareDeep(identifier, o.identifier, true) && compareDeep(basedOn, o.basedOn, true) && compareDeep(status, o.status, true)
3408           && compareDeep(category, o.category, true) && compareDeep(code, o.code, true) && compareDeep(subject, o.subject, true)
3409           && compareDeep(context, o.context, true) && compareDeep(effective, o.effective, true) && compareDeep(issued, o.issued, true)
3410           && compareDeep(performer, o.performer, true) && compareDeep(value, o.value, true) && compareDeep(dataAbsentReason, o.dataAbsentReason, true)
3411           && compareDeep(interpretation, o.interpretation, true) && compareDeep(comment, o.comment, true)
3412           && compareDeep(bodySite, o.bodySite, true) && compareDeep(method, o.method, true) && compareDeep(specimen, o.specimen, true)
3413           && compareDeep(device, o.device, true) && compareDeep(referenceRange, o.referenceRange, true) && compareDeep(related, o.related, true)
3414           && compareDeep(component, o.component, true);
3415      }
3416
3417      @Override
3418      public boolean equalsShallow(Base other_) {
3419        if (!super.equalsShallow(other_))
3420          return false;
3421        if (!(other_ instanceof Observation))
3422          return false;
3423        Observation o = (Observation) other_;
3424        return compareValues(status, o.status, true) && compareValues(issued, o.issued, true) && compareValues(comment, o.comment, true)
3425          ;
3426      }
3427
3428      public boolean isEmpty() {
3429        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, basedOn, status
3430          , category, code, subject, context, effective, issued, performer, value, dataAbsentReason
3431          , interpretation, comment, bodySite, method, specimen, device, referenceRange
3432          , related, component);
3433      }
3434
3435  @Override
3436  public ResourceType getResourceType() {
3437    return ResourceType.Observation;
3438   }
3439
3440 /**
3441   * Search parameter: <b>date</b>
3442   * <p>
3443   * Description: <b>Obtained date/time. If the obtained element is a period, a date that falls in the period</b><br>
3444   * Type: <b>date</b><br>
3445   * Path: <b>Observation.effective[x]</b><br>
3446   * </p>
3447   */
3448  @SearchParamDefinition(name="date", path="Observation.effective", description="Obtained date/time. If the obtained element is a period, a date that falls in the period", type="date" )
3449  public static final String SP_DATE = "date";
3450 /**
3451   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3452   * <p>
3453   * Description: <b>Obtained date/time. If the obtained element is a period, a date that falls in the period</b><br>
3454   * Type: <b>date</b><br>
3455   * Path: <b>Observation.effective[x]</b><br>
3456   * </p>
3457   */
3458  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3459
3460 /**
3461   * Search parameter: <b>combo-data-absent-reason</b>
3462   * <p>
3463   * Description: <b>The reason why the expected value in the element Observation.value[x] or Observation.component.value[x] is missing.</b><br>
3464   * Type: <b>token</b><br>
3465   * Path: <b>Observation.dataAbsentReason, Observation.component.dataAbsentReason</b><br>
3466   * </p>
3467   */
3468  @SearchParamDefinition(name="combo-data-absent-reason", path="Observation.dataAbsentReason | Observation.component.dataAbsentReason", description="The reason why the expected value in the element Observation.value[x] or Observation.component.value[x] is missing.", type="token" )
3469  public static final String SP_COMBO_DATA_ABSENT_REASON = "combo-data-absent-reason";
3470 /**
3471   * <b>Fluent Client</b> search parameter constant for <b>combo-data-absent-reason</b>
3472   * <p>
3473   * Description: <b>The reason why the expected value in the element Observation.value[x] or Observation.component.value[x] is missing.</b><br>
3474   * Type: <b>token</b><br>
3475   * Path: <b>Observation.dataAbsentReason, Observation.component.dataAbsentReason</b><br>
3476   * </p>
3477   */
3478  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMBO_DATA_ABSENT_REASON = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMBO_DATA_ABSENT_REASON);
3479
3480 /**
3481   * Search parameter: <b>code</b>
3482   * <p>
3483   * Description: <b>The code of the observation type</b><br>
3484   * Type: <b>token</b><br>
3485   * Path: <b>Observation.code</b><br>
3486   * </p>
3487   */
3488  @SearchParamDefinition(name="code", path="Observation.code", description="The code of the observation type", type="token" )
3489  public static final String SP_CODE = "code";
3490 /**
3491   * <b>Fluent Client</b> search parameter constant for <b>code</b>
3492   * <p>
3493   * Description: <b>The code of the observation type</b><br>
3494   * Type: <b>token</b><br>
3495   * Path: <b>Observation.code</b><br>
3496   * </p>
3497   */
3498  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
3499
3500 /**
3501   * Search parameter: <b>combo-code-value-quantity</b>
3502   * <p>
3503   * Description: <b>Code and quantity value parameter pair, including in components</b><br>
3504   * Type: <b>composite</b><br>
3505   * Path: <b></b><br>
3506   * </p>
3507   */
3508  @SearchParamDefinition(name="combo-code-value-quantity", path="Observation | Observation.component", description="Code and quantity value parameter pair, including in components", type="composite", compositeOf={"combo-code", "combo-value-quantity"} )
3509  public static final String SP_COMBO_CODE_VALUE_QUANTITY = "combo-code-value-quantity";
3510 /**
3511   * <b>Fluent Client</b> search parameter constant for <b>combo-code-value-quantity</b>
3512   * <p>
3513   * Description: <b>Code and quantity value parameter pair, including in components</b><br>
3514   * Type: <b>composite</b><br>
3515   * Path: <b></b><br>
3516   * </p>
3517   */
3518  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> COMBO_CODE_VALUE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(SP_COMBO_CODE_VALUE_QUANTITY);
3519
3520 /**
3521   * Search parameter: <b>subject</b>
3522   * <p>
3523   * Description: <b>The subject that the observation is about</b><br>
3524   * Type: <b>reference</b><br>
3525   * Path: <b>Observation.subject</b><br>
3526   * </p>
3527   */
3528  @SearchParamDefinition(name="subject", path="Observation.subject", description="The subject that the observation is about", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Device.class, Group.class, Location.class, Patient.class } )
3529  public static final String SP_SUBJECT = "subject";
3530 /**
3531   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
3532   * <p>
3533   * Description: <b>The subject that the observation is about</b><br>
3534   * Type: <b>reference</b><br>
3535   * Path: <b>Observation.subject</b><br>
3536   * </p>
3537   */
3538  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
3539
3540/**
3541   * Constant for fluent queries to be used to add include statements. Specifies
3542   * the path value of "<b>Observation:subject</b>".
3543   */
3544  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Observation:subject").toLocked();
3545
3546 /**
3547   * Search parameter: <b>component-data-absent-reason</b>
3548   * <p>
3549   * Description: <b>The reason why the expected value in the element Observation.component.value[x] is missing.</b><br>
3550   * Type: <b>token</b><br>
3551   * Path: <b>Observation.component.dataAbsentReason</b><br>
3552   * </p>
3553   */
3554  @SearchParamDefinition(name="component-data-absent-reason", path="Observation.component.dataAbsentReason", description="The reason why the expected value in the element Observation.component.value[x] is missing.", type="token" )
3555  public static final String SP_COMPONENT_DATA_ABSENT_REASON = "component-data-absent-reason";
3556 /**
3557   * <b>Fluent Client</b> search parameter constant for <b>component-data-absent-reason</b>
3558   * <p>
3559   * Description: <b>The reason why the expected value in the element Observation.component.value[x] is missing.</b><br>
3560   * Type: <b>token</b><br>
3561   * Path: <b>Observation.component.dataAbsentReason</b><br>
3562   * </p>
3563   */
3564  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMPONENT_DATA_ABSENT_REASON = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMPONENT_DATA_ABSENT_REASON);
3565
3566 /**
3567   * Search parameter: <b>value-concept</b>
3568   * <p>
3569   * Description: <b>The value of the observation, if the value is a CodeableConcept</b><br>
3570   * Type: <b>token</b><br>
3571   * Path: <b>Observation.valueCodeableConcept</b><br>
3572   * </p>
3573   */
3574  @SearchParamDefinition(name="value-concept", path="Observation.value.as(CodeableConcept)", description="The value of the observation, if the value is a CodeableConcept", type="token" )
3575  public static final String SP_VALUE_CONCEPT = "value-concept";
3576 /**
3577   * <b>Fluent Client</b> search parameter constant for <b>value-concept</b>
3578   * <p>
3579   * Description: <b>The value of the observation, if the value is a CodeableConcept</b><br>
3580   * Type: <b>token</b><br>
3581   * Path: <b>Observation.valueCodeableConcept</b><br>
3582   * </p>
3583   */
3584  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VALUE_CONCEPT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VALUE_CONCEPT);
3585
3586 /**
3587   * Search parameter: <b>value-date</b>
3588   * <p>
3589   * Description: <b>The value of the observation, if the value is a date or period of time</b><br>
3590   * Type: <b>date</b><br>
3591   * Path: <b>Observation.valueDateTime, Observation.valuePeriod</b><br>
3592   * </p>
3593   */
3594  @SearchParamDefinition(name="value-date", path="Observation.value.as(DateTime) | Observation.value.as(Period)", description="The value of the observation, if the value is a date or period of time", type="date" )
3595  public static final String SP_VALUE_DATE = "value-date";
3596 /**
3597   * <b>Fluent Client</b> search parameter constant for <b>value-date</b>
3598   * <p>
3599   * Description: <b>The value of the observation, if the value is a date or period of time</b><br>
3600   * Type: <b>date</b><br>
3601   * Path: <b>Observation.valueDateTime, Observation.valuePeriod</b><br>
3602   * </p>
3603   */
3604  public static final ca.uhn.fhir.rest.gclient.DateClientParam VALUE_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_VALUE_DATE);
3605
3606 /**
3607   * Search parameter: <b>code-value-string</b>
3608   * <p>
3609   * Description: <b>Code and string value parameter pair</b><br>
3610   * Type: <b>composite</b><br>
3611   * Path: <b></b><br>
3612   * </p>
3613   */
3614  @SearchParamDefinition(name="code-value-string", path="Observation", description="Code and string value parameter pair", type="composite", compositeOf={"code", "value-string"} )
3615  public static final String SP_CODE_VALUE_STRING = "code-value-string";
3616 /**
3617   * <b>Fluent Client</b> search parameter constant for <b>code-value-string</b>
3618   * <p>
3619   * Description: <b>Code and string value parameter pair</b><br>
3620   * Type: <b>composite</b><br>
3621   * Path: <b></b><br>
3622   * </p>
3623   */
3624  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.StringClientParam> CODE_VALUE_STRING = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.StringClientParam>(SP_CODE_VALUE_STRING);
3625
3626 /**
3627   * Search parameter: <b>component-code-value-quantity</b>
3628   * <p>
3629   * Description: <b>Component code and component quantity value parameter pair</b><br>
3630   * Type: <b>composite</b><br>
3631   * Path: <b></b><br>
3632   * </p>
3633   */
3634  @SearchParamDefinition(name="component-code-value-quantity", path="Observation.component", description="Component code and component quantity value parameter pair", type="composite", compositeOf={"component-code", "component-value-quantity"} )
3635  public static final String SP_COMPONENT_CODE_VALUE_QUANTITY = "component-code-value-quantity";
3636 /**
3637   * <b>Fluent Client</b> search parameter constant for <b>component-code-value-quantity</b>
3638   * <p>
3639   * Description: <b>Component code and component quantity value parameter pair</b><br>
3640   * Type: <b>composite</b><br>
3641   * Path: <b></b><br>
3642   * </p>
3643   */
3644  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> COMPONENT_CODE_VALUE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(SP_COMPONENT_CODE_VALUE_QUANTITY);
3645
3646 /**
3647   * Search parameter: <b>based-on</b>
3648   * <p>
3649   * Description: <b>Reference to the test or procedure request.</b><br>
3650   * Type: <b>reference</b><br>
3651   * Path: <b>Observation.basedOn</b><br>
3652   * </p>
3653   */
3654  @SearchParamDefinition(name="based-on", path="Observation.basedOn", description="Reference to the test or procedure request.", type="reference", target={CarePlan.class, DeviceRequest.class, ImmunizationRecommendation.class, MedicationRequest.class, NutritionOrder.class, ProcedureRequest.class, ReferralRequest.class } )
3655  public static final String SP_BASED_ON = "based-on";
3656 /**
3657   * <b>Fluent Client</b> search parameter constant for <b>based-on</b>
3658   * <p>
3659   * Description: <b>Reference to the test or procedure request.</b><br>
3660   * Type: <b>reference</b><br>
3661   * Path: <b>Observation.basedOn</b><br>
3662   * </p>
3663   */
3664  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASED_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASED_ON);
3665
3666/**
3667   * Constant for fluent queries to be used to add include statements. Specifies
3668   * the path value of "<b>Observation:based-on</b>".
3669   */
3670  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASED_ON = new ca.uhn.fhir.model.api.Include("Observation:based-on").toLocked();
3671
3672 /**
3673   * Search parameter: <b>related</b>
3674   * <p>
3675   * Description: <b>Related Observations - search on related-type and related-target together</b><br>
3676   * Type: <b>composite</b><br>
3677   * Path: <b></b><br>
3678   * </p>
3679   */
3680  @SearchParamDefinition(name="related", path="Observation.related", description="Related Observations - search on related-type and related-target together", type="composite", compositeOf={"related-target", "related-type"} )
3681  public static final String SP_RELATED = "related";
3682 /**
3683   * <b>Fluent Client</b> search parameter constant for <b>related</b>
3684   * <p>
3685   * Description: <b>Related Observations - search on related-type and related-target together</b><br>
3686   * Type: <b>composite</b><br>
3687   * Path: <b></b><br>
3688   * </p>
3689   */
3690  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.ReferenceClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> RELATED = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.ReferenceClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_RELATED);
3691
3692 /**
3693   * Search parameter: <b>code-value-date</b>
3694   * <p>
3695   * Description: <b>Code and date/time value parameter pair</b><br>
3696   * Type: <b>composite</b><br>
3697   * Path: <b></b><br>
3698   * </p>
3699   */
3700  @SearchParamDefinition(name="code-value-date", path="Observation", description="Code and date/time value parameter pair", type="composite", compositeOf={"code", "value-date"} )
3701  public static final String SP_CODE_VALUE_DATE = "code-value-date";
3702 /**
3703   * <b>Fluent Client</b> search parameter constant for <b>code-value-date</b>
3704   * <p>
3705   * Description: <b>Code and date/time value parameter pair</b><br>
3706   * Type: <b>composite</b><br>
3707   * Path: <b></b><br>
3708   * </p>
3709   */
3710  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.DateClientParam> CODE_VALUE_DATE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.DateClientParam>(SP_CODE_VALUE_DATE);
3711
3712 /**
3713   * Search parameter: <b>patient</b>
3714   * <p>
3715   * Description: <b>The subject that the observation is about (if patient)</b><br>
3716   * Type: <b>reference</b><br>
3717   * Path: <b>Observation.subject</b><br>
3718   * </p>
3719   */
3720  @SearchParamDefinition(name="patient", path="Observation.subject", description="The subject that the observation is about (if patient)", type="reference", target={Patient.class } )
3721  public static final String SP_PATIENT = "patient";
3722 /**
3723   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3724   * <p>
3725   * Description: <b>The subject that the observation is about (if patient)</b><br>
3726   * Type: <b>reference</b><br>
3727   * Path: <b>Observation.subject</b><br>
3728   * </p>
3729   */
3730  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3731
3732/**
3733   * Constant for fluent queries to be used to add include statements. Specifies
3734   * the path value of "<b>Observation:patient</b>".
3735   */
3736  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Observation:patient").toLocked();
3737
3738 /**
3739   * Search parameter: <b>specimen</b>
3740   * <p>
3741   * Description: <b>Specimen used for this observation</b><br>
3742   * Type: <b>reference</b><br>
3743   * Path: <b>Observation.specimen</b><br>
3744   * </p>
3745   */
3746  @SearchParamDefinition(name="specimen", path="Observation.specimen", description="Specimen used for this observation", type="reference", target={Specimen.class } )
3747  public static final String SP_SPECIMEN = "specimen";
3748 /**
3749   * <b>Fluent Client</b> search parameter constant for <b>specimen</b>
3750   * <p>
3751   * Description: <b>Specimen used for this observation</b><br>
3752   * Type: <b>reference</b><br>
3753   * Path: <b>Observation.specimen</b><br>
3754   * </p>
3755   */
3756  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SPECIMEN = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SPECIMEN);
3757
3758/**
3759   * Constant for fluent queries to be used to add include statements. Specifies
3760   * the path value of "<b>Observation:specimen</b>".
3761   */
3762  public static final ca.uhn.fhir.model.api.Include INCLUDE_SPECIMEN = new ca.uhn.fhir.model.api.Include("Observation:specimen").toLocked();
3763
3764 /**
3765   * Search parameter: <b>component-code</b>
3766   * <p>
3767   * Description: <b>The component code of the observation type</b><br>
3768   * Type: <b>token</b><br>
3769   * Path: <b>Observation.component.code</b><br>
3770   * </p>
3771   */
3772  @SearchParamDefinition(name="component-code", path="Observation.component.code", description="The component code of the observation type", type="token" )
3773  public static final String SP_COMPONENT_CODE = "component-code";
3774 /**
3775   * <b>Fluent Client</b> search parameter constant for <b>component-code</b>
3776   * <p>
3777   * Description: <b>The component code of the observation type</b><br>
3778   * Type: <b>token</b><br>
3779   * Path: <b>Observation.component.code</b><br>
3780   * </p>
3781   */
3782  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMPONENT_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMPONENT_CODE);
3783
3784 /**
3785   * Search parameter: <b>code-value-quantity</b>
3786   * <p>
3787   * Description: <b>Code and quantity value parameter pair</b><br>
3788   * Type: <b>composite</b><br>
3789   * Path: <b></b><br>
3790   * </p>
3791   */
3792  @SearchParamDefinition(name="code-value-quantity", path="Observation", description="Code and quantity value parameter pair", type="composite", compositeOf={"code", "value-quantity"} )
3793  public static final String SP_CODE_VALUE_QUANTITY = "code-value-quantity";
3794 /**
3795   * <b>Fluent Client</b> search parameter constant for <b>code-value-quantity</b>
3796   * <p>
3797   * Description: <b>Code and quantity value parameter pair</b><br>
3798   * Type: <b>composite</b><br>
3799   * Path: <b></b><br>
3800   * </p>
3801   */
3802  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> CODE_VALUE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(SP_CODE_VALUE_QUANTITY);
3803
3804 /**
3805   * Search parameter: <b>context</b>
3806   * <p>
3807   * Description: <b>Healthcare event  (Episode-of-care or Encounter) related to the observation</b><br>
3808   * Type: <b>reference</b><br>
3809   * Path: <b>Observation.context</b><br>
3810   * </p>
3811   */
3812  @SearchParamDefinition(name="context", path="Observation.context", description="Healthcare event  (Episode-of-care or Encounter) related to the observation", type="reference", target={Encounter.class, EpisodeOfCare.class } )
3813  public static final String SP_CONTEXT = "context";
3814 /**
3815   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3816   * <p>
3817   * Description: <b>Healthcare event  (Episode-of-care or Encounter) related to the observation</b><br>
3818   * Type: <b>reference</b><br>
3819   * Path: <b>Observation.context</b><br>
3820   * </p>
3821   */
3822  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CONTEXT);
3823
3824/**
3825   * Constant for fluent queries to be used to add include statements. Specifies
3826   * the path value of "<b>Observation:context</b>".
3827   */
3828  public static final ca.uhn.fhir.model.api.Include INCLUDE_CONTEXT = new ca.uhn.fhir.model.api.Include("Observation:context").toLocked();
3829
3830 /**
3831   * Search parameter: <b>combo-code-value-concept</b>
3832   * <p>
3833   * Description: <b>Code and coded value parameter pair, including in components</b><br>
3834   * Type: <b>composite</b><br>
3835   * Path: <b></b><br>
3836   * </p>
3837   */
3838  @SearchParamDefinition(name="combo-code-value-concept", path="Observation | Observation.component", description="Code and coded value parameter pair, including in components", type="composite", compositeOf={"combo-code", "combo-value-concept"} )
3839  public static final String SP_COMBO_CODE_VALUE_CONCEPT = "combo-code-value-concept";
3840 /**
3841   * <b>Fluent Client</b> search parameter constant for <b>combo-code-value-concept</b>
3842   * <p>
3843   * Description: <b>Code and coded value parameter pair, including in components</b><br>
3844   * Type: <b>composite</b><br>
3845   * Path: <b></b><br>
3846   * </p>
3847   */
3848  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> COMBO_CODE_VALUE_CONCEPT = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_COMBO_CODE_VALUE_CONCEPT);
3849
3850 /**
3851   * Search parameter: <b>value-string</b>
3852   * <p>
3853   * Description: <b>The value of the observation, if the value is a string, and also searches in CodeableConcept.text</b><br>
3854   * Type: <b>string</b><br>
3855   * Path: <b>Observation.valueString</b><br>
3856   * </p>
3857   */
3858  @SearchParamDefinition(name="value-string", path="Observation.value.as(String)", description="The value of the observation, if the value is a string, and also searches in CodeableConcept.text", type="string" )
3859  public static final String SP_VALUE_STRING = "value-string";
3860 /**
3861   * <b>Fluent Client</b> search parameter constant for <b>value-string</b>
3862   * <p>
3863   * Description: <b>The value of the observation, if the value is a string, and also searches in CodeableConcept.text</b><br>
3864   * Type: <b>string</b><br>
3865   * Path: <b>Observation.valueString</b><br>
3866   * </p>
3867   */
3868  public static final ca.uhn.fhir.rest.gclient.StringClientParam VALUE_STRING = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_VALUE_STRING);
3869
3870 /**
3871   * Search parameter: <b>identifier</b>
3872   * <p>
3873   * Description: <b>The unique id for a particular observation</b><br>
3874   * Type: <b>token</b><br>
3875   * Path: <b>Observation.identifier</b><br>
3876   * </p>
3877   */
3878  @SearchParamDefinition(name="identifier", path="Observation.identifier", description="The unique id for a particular observation", type="token" )
3879  public static final String SP_IDENTIFIER = "identifier";
3880 /**
3881   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3882   * <p>
3883   * Description: <b>The unique id for a particular observation</b><br>
3884   * Type: <b>token</b><br>
3885   * Path: <b>Observation.identifier</b><br>
3886   * </p>
3887   */
3888  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3889
3890 /**
3891   * Search parameter: <b>performer</b>
3892   * <p>
3893   * Description: <b>Who performed the observation</b><br>
3894   * Type: <b>reference</b><br>
3895   * Path: <b>Observation.performer</b><br>
3896   * </p>
3897   */
3898  @SearchParamDefinition(name="performer", path="Observation.performer", description="Who performed the observation", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={Organization.class, Patient.class, Practitioner.class, RelatedPerson.class } )
3899  public static final String SP_PERFORMER = "performer";
3900 /**
3901   * <b>Fluent Client</b> search parameter constant for <b>performer</b>
3902   * <p>
3903   * Description: <b>Who performed the observation</b><br>
3904   * Type: <b>reference</b><br>
3905   * Path: <b>Observation.performer</b><br>
3906   * </p>
3907   */
3908  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PERFORMER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PERFORMER);
3909
3910/**
3911   * Constant for fluent queries to be used to add include statements. Specifies
3912   * the path value of "<b>Observation:performer</b>".
3913   */
3914  public static final ca.uhn.fhir.model.api.Include INCLUDE_PERFORMER = new ca.uhn.fhir.model.api.Include("Observation:performer").toLocked();
3915
3916 /**
3917   * Search parameter: <b>combo-code</b>
3918   * <p>
3919   * Description: <b>The code of the observation type or component type</b><br>
3920   * Type: <b>token</b><br>
3921   * Path: <b>Observation.code, Observation.component.code</b><br>
3922   * </p>
3923   */
3924  @SearchParamDefinition(name="combo-code", path="Observation.code | Observation.component.code", description="The code of the observation type or component type", type="token" )
3925  public static final String SP_COMBO_CODE = "combo-code";
3926 /**
3927   * <b>Fluent Client</b> search parameter constant for <b>combo-code</b>
3928   * <p>
3929   * Description: <b>The code of the observation type or component type</b><br>
3930   * Type: <b>token</b><br>
3931   * Path: <b>Observation.code, Observation.component.code</b><br>
3932   * </p>
3933   */
3934  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMBO_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMBO_CODE);
3935
3936 /**
3937   * Search parameter: <b>method</b>
3938   * <p>
3939   * Description: <b>The method used for the observation</b><br>
3940   * Type: <b>token</b><br>
3941   * Path: <b>Observation.method</b><br>
3942   * </p>
3943   */
3944  @SearchParamDefinition(name="method", path="Observation.method", description="The method used for the observation", type="token" )
3945  public static final String SP_METHOD = "method";
3946 /**
3947   * <b>Fluent Client</b> search parameter constant for <b>method</b>
3948   * <p>
3949   * Description: <b>The method used for the observation</b><br>
3950   * Type: <b>token</b><br>
3951   * Path: <b>Observation.method</b><br>
3952   * </p>
3953   */
3954  public static final ca.uhn.fhir.rest.gclient.TokenClientParam METHOD = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_METHOD);
3955
3956 /**
3957   * Search parameter: <b>value-quantity</b>
3958   * <p>
3959   * Description: <b>The value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)</b><br>
3960   * Type: <b>quantity</b><br>
3961   * Path: <b>Observation.valueQuantity</b><br>
3962   * </p>
3963   */
3964  @SearchParamDefinition(name="value-quantity", path="Observation.value.as(Quantity)", description="The value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)", type="quantity" )
3965  public static final String SP_VALUE_QUANTITY = "value-quantity";
3966 /**
3967   * <b>Fluent Client</b> search parameter constant for <b>value-quantity</b>
3968   * <p>
3969   * Description: <b>The value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)</b><br>
3970   * Type: <b>quantity</b><br>
3971   * Path: <b>Observation.valueQuantity</b><br>
3972   * </p>
3973   */
3974  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam VALUE_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_VALUE_QUANTITY);
3975
3976 /**
3977   * Search parameter: <b>component-value-quantity</b>
3978   * <p>
3979   * Description: <b>The value of the component observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)</b><br>
3980   * Type: <b>quantity</b><br>
3981   * Path: <b>Observation.component.valueQuantity</b><br>
3982   * </p>
3983   */
3984  @SearchParamDefinition(name="component-value-quantity", path="Observation.component.value.as(Quantity)", description="The value of the component observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)", type="quantity" )
3985  public static final String SP_COMPONENT_VALUE_QUANTITY = "component-value-quantity";
3986 /**
3987   * <b>Fluent Client</b> search parameter constant for <b>component-value-quantity</b>
3988   * <p>
3989   * Description: <b>The value of the component observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)</b><br>
3990   * Type: <b>quantity</b><br>
3991   * Path: <b>Observation.component.valueQuantity</b><br>
3992   * </p>
3993   */
3994  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam COMPONENT_VALUE_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_COMPONENT_VALUE_QUANTITY);
3995
3996 /**
3997   * Search parameter: <b>data-absent-reason</b>
3998   * <p>
3999   * Description: <b>The reason why the expected value in the element Observation.value[x] is missing.</b><br>
4000   * Type: <b>token</b><br>
4001   * Path: <b>Observation.dataAbsentReason</b><br>
4002   * </p>
4003   */
4004  @SearchParamDefinition(name="data-absent-reason", path="Observation.dataAbsentReason", description="The reason why the expected value in the element Observation.value[x] is missing.", type="token" )
4005  public static final String SP_DATA_ABSENT_REASON = "data-absent-reason";
4006 /**
4007   * <b>Fluent Client</b> search parameter constant for <b>data-absent-reason</b>
4008   * <p>
4009   * Description: <b>The reason why the expected value in the element Observation.value[x] is missing.</b><br>
4010   * Type: <b>token</b><br>
4011   * Path: <b>Observation.dataAbsentReason</b><br>
4012   * </p>
4013   */
4014  public static final ca.uhn.fhir.rest.gclient.TokenClientParam DATA_ABSENT_REASON = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_DATA_ABSENT_REASON);
4015
4016 /**
4017   * Search parameter: <b>combo-value-quantity</b>
4018   * <p>
4019   * Description: <b>The value or component value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)</b><br>
4020   * Type: <b>quantity</b><br>
4021   * Path: <b>Observation.valueQuantity, Observation.component.valueQuantity</b><br>
4022   * </p>
4023   */
4024  @SearchParamDefinition(name="combo-value-quantity", path="Observation.value.as(Quantity) | Observation.component.value.as(Quantity)", description="The value or component value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)", type="quantity" )
4025  public static final String SP_COMBO_VALUE_QUANTITY = "combo-value-quantity";
4026 /**
4027   * <b>Fluent Client</b> search parameter constant for <b>combo-value-quantity</b>
4028   * <p>
4029   * Description: <b>The value or component value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)</b><br>
4030   * Type: <b>quantity</b><br>
4031   * Path: <b>Observation.valueQuantity, Observation.component.valueQuantity</b><br>
4032   * </p>
4033   */
4034  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam COMBO_VALUE_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_COMBO_VALUE_QUANTITY);
4035
4036 /**
4037   * Search parameter: <b>encounter</b>
4038   * <p>
4039   * Description: <b>Encounter related to the observation</b><br>
4040   * Type: <b>reference</b><br>
4041   * Path: <b>Observation.context</b><br>
4042   * </p>
4043   */
4044  @SearchParamDefinition(name="encounter", path="Observation.context", description="Encounter related to the observation", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Encounter") }, target={Encounter.class } )
4045  public static final String SP_ENCOUNTER = "encounter";
4046 /**
4047   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
4048   * <p>
4049   * Description: <b>Encounter related to the observation</b><br>
4050   * Type: <b>reference</b><br>
4051   * Path: <b>Observation.context</b><br>
4052   * </p>
4053   */
4054  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
4055
4056/**
4057   * Constant for fluent queries to be used to add include statements. Specifies
4058   * the path value of "<b>Observation:encounter</b>".
4059   */
4060  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("Observation:encounter").toLocked();
4061
4062 /**
4063   * Search parameter: <b>related-type</b>
4064   * <p>
4065   * Description: <b>has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by</b><br>
4066   * Type: <b>token</b><br>
4067   * Path: <b>Observation.related.type</b><br>
4068   * </p>
4069   */
4070  @SearchParamDefinition(name="related-type", path="Observation.related.type", description="has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by", type="token" )
4071  public static final String SP_RELATED_TYPE = "related-type";
4072 /**
4073   * <b>Fluent Client</b> search parameter constant for <b>related-type</b>
4074   * <p>
4075   * Description: <b>has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by</b><br>
4076   * Type: <b>token</b><br>
4077   * Path: <b>Observation.related.type</b><br>
4078   * </p>
4079   */
4080  public static final ca.uhn.fhir.rest.gclient.TokenClientParam RELATED_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_RELATED_TYPE);
4081
4082 /**
4083   * Search parameter: <b>related-target</b>
4084   * <p>
4085   * Description: <b>Resource that is related to this one</b><br>
4086   * Type: <b>reference</b><br>
4087   * Path: <b>Observation.related.target</b><br>
4088   * </p>
4089   */
4090  @SearchParamDefinition(name="related-target", path="Observation.related.target", description="Resource that is related to this one", type="reference", target={Observation.class, QuestionnaireResponse.class, Sequence.class } )
4091  public static final String SP_RELATED_TARGET = "related-target";
4092 /**
4093   * <b>Fluent Client</b> search parameter constant for <b>related-target</b>
4094   * <p>
4095   * Description: <b>Resource that is related to this one</b><br>
4096   * Type: <b>reference</b><br>
4097   * Path: <b>Observation.related.target</b><br>
4098   * </p>
4099   */
4100  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam RELATED_TARGET = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_RELATED_TARGET);
4101
4102/**
4103   * Constant for fluent queries to be used to add include statements. Specifies
4104   * the path value of "<b>Observation:related-target</b>".
4105   */
4106  public static final ca.uhn.fhir.model.api.Include INCLUDE_RELATED_TARGET = new ca.uhn.fhir.model.api.Include("Observation:related-target").toLocked();
4107
4108 /**
4109   * Search parameter: <b>code-value-concept</b>
4110   * <p>
4111   * Description: <b>Code and coded value parameter pair</b><br>
4112   * Type: <b>composite</b><br>
4113   * Path: <b></b><br>
4114   * </p>
4115   */
4116  @SearchParamDefinition(name="code-value-concept", path="Observation", description="Code and coded value parameter pair", type="composite", compositeOf={"code", "value-concept"} )
4117  public static final String SP_CODE_VALUE_CONCEPT = "code-value-concept";
4118 /**
4119   * <b>Fluent Client</b> search parameter constant for <b>code-value-concept</b>
4120   * <p>
4121   * Description: <b>Code and coded value parameter pair</b><br>
4122   * Type: <b>composite</b><br>
4123   * Path: <b></b><br>
4124   * </p>
4125   */
4126  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CODE_VALUE_CONCEPT = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_CODE_VALUE_CONCEPT);
4127
4128 /**
4129   * Search parameter: <b>component-code-value-concept</b>
4130   * <p>
4131   * Description: <b>Component code and component coded value parameter pair</b><br>
4132   * Type: <b>composite</b><br>
4133   * Path: <b></b><br>
4134   * </p>
4135   */
4136  @SearchParamDefinition(name="component-code-value-concept", path="Observation.component", description="Component code and component coded value parameter pair", type="composite", compositeOf={"component-code", "component-value-concept"} )
4137  public static final String SP_COMPONENT_CODE_VALUE_CONCEPT = "component-code-value-concept";
4138 /**
4139   * <b>Fluent Client</b> search parameter constant for <b>component-code-value-concept</b>
4140   * <p>
4141   * Description: <b>Component code and component coded value parameter pair</b><br>
4142   * Type: <b>composite</b><br>
4143   * Path: <b></b><br>
4144   * </p>
4145   */
4146  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> COMPONENT_CODE_VALUE_CONCEPT = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_COMPONENT_CODE_VALUE_CONCEPT);
4147
4148 /**
4149   * Search parameter: <b>component-value-concept</b>
4150   * <p>
4151   * Description: <b>The value of the component observation, if the value is a CodeableConcept</b><br>
4152   * Type: <b>token</b><br>
4153   * Path: <b>Observation.component.valueCodeableConcept</b><br>
4154   * </p>
4155   */
4156  @SearchParamDefinition(name="component-value-concept", path="Observation.component.value.as(CodeableConcept)", description="The value of the component observation, if the value is a CodeableConcept", type="token" )
4157  public static final String SP_COMPONENT_VALUE_CONCEPT = "component-value-concept";
4158 /**
4159   * <b>Fluent Client</b> search parameter constant for <b>component-value-concept</b>
4160   * <p>
4161   * Description: <b>The value of the component observation, if the value is a CodeableConcept</b><br>
4162   * Type: <b>token</b><br>
4163   * Path: <b>Observation.component.valueCodeableConcept</b><br>
4164   * </p>
4165   */
4166  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMPONENT_VALUE_CONCEPT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMPONENT_VALUE_CONCEPT);
4167
4168 /**
4169   * Search parameter: <b>category</b>
4170   * <p>
4171   * Description: <b>The classification of the type of observation</b><br>
4172   * Type: <b>token</b><br>
4173   * Path: <b>Observation.category</b><br>
4174   * </p>
4175   */
4176  @SearchParamDefinition(name="category", path="Observation.category", description="The classification of the type of observation", type="token" )
4177  public static final String SP_CATEGORY = "category";
4178 /**
4179   * <b>Fluent Client</b> search parameter constant for <b>category</b>
4180   * <p>
4181   * Description: <b>The classification of the type of observation</b><br>
4182   * Type: <b>token</b><br>
4183   * Path: <b>Observation.category</b><br>
4184   * </p>
4185   */
4186  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
4187
4188 /**
4189   * Search parameter: <b>device</b>
4190   * <p>
4191   * Description: <b>The Device that generated the observation data.</b><br>
4192   * Type: <b>reference</b><br>
4193   * Path: <b>Observation.device</b><br>
4194   * </p>
4195   */
4196  @SearchParamDefinition(name="device", path="Observation.device", description="The Device that generated the observation data.", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device") }, target={Device.class, DeviceMetric.class } )
4197  public static final String SP_DEVICE = "device";
4198 /**
4199   * <b>Fluent Client</b> search parameter constant for <b>device</b>
4200   * <p>
4201   * Description: <b>The Device that generated the observation data.</b><br>
4202   * Type: <b>reference</b><br>
4203   * Path: <b>Observation.device</b><br>
4204   * </p>
4205   */
4206  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DEVICE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DEVICE);
4207
4208/**
4209   * Constant for fluent queries to be used to add include statements. Specifies
4210   * the path value of "<b>Observation:device</b>".
4211   */
4212  public static final ca.uhn.fhir.model.api.Include INCLUDE_DEVICE = new ca.uhn.fhir.model.api.Include("Observation:device").toLocked();
4213
4214 /**
4215   * Search parameter: <b>combo-value-concept</b>
4216   * <p>
4217   * Description: <b>The value or component value of the observation, if the value is a CodeableConcept</b><br>
4218   * Type: <b>token</b><br>
4219   * Path: <b>Observation.valueCodeableConcept, Observation.component.valueCodeableConcept</b><br>
4220   * </p>
4221   */
4222  @SearchParamDefinition(name="combo-value-concept", path="Observation.value.as(CodeableConcept) | Observation.component.value.as(CodeableConcept)", description="The value or component value of the observation, if the value is a CodeableConcept", type="token" )
4223  public static final String SP_COMBO_VALUE_CONCEPT = "combo-value-concept";
4224 /**
4225   * <b>Fluent Client</b> search parameter constant for <b>combo-value-concept</b>
4226   * <p>
4227   * Description: <b>The value or component value of the observation, if the value is a CodeableConcept</b><br>
4228   * Type: <b>token</b><br>
4229   * Path: <b>Observation.valueCodeableConcept, Observation.component.valueCodeableConcept</b><br>
4230   * </p>
4231   */
4232  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMBO_VALUE_CONCEPT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMBO_VALUE_CONCEPT);
4233
4234 /**
4235   * Search parameter: <b>status</b>
4236   * <p>
4237   * Description: <b>The status of the observation</b><br>
4238   * Type: <b>token</b><br>
4239   * Path: <b>Observation.status</b><br>
4240   * </p>
4241   */
4242  @SearchParamDefinition(name="status", path="Observation.status", description="The status of the observation", type="token" )
4243  public static final String SP_STATUS = "status";
4244 /**
4245   * <b>Fluent Client</b> search parameter constant for <b>status</b>
4246   * <p>
4247   * Description: <b>The status of the observation</b><br>
4248   * Type: <b>token</b><br>
4249   * Path: <b>Observation.status</b><br>
4250   * </p>
4251   */
4252  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
4253
4254
4255}