001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * Set of definitional characteristics for a kind of observation or measurement produced or consumed by an orderable health care service.
052 */
053@ResourceDef(name="ObservationDefinition", profile="http://hl7.org/fhir/StructureDefinition/ObservationDefinition")
054public class ObservationDefinition extends DomainResource {
055
056    public enum ObservationDataType {
057        /**
058         * A measured amount.
059         */
060        QUANTITY, 
061        /**
062         * A coded concept from a reference terminology and/or text.
063         */
064        CODEABLECONCEPT, 
065        /**
066         * A sequence of Unicode characters.
067         */
068        STRING, 
069        /**
070         * true or false.
071         */
072        BOOLEAN, 
073        /**
074         * A signed integer.
075         */
076        INTEGER, 
077        /**
078         * A set of values bounded by low and high.
079         */
080        RANGE, 
081        /**
082         * A ratio of two Quantity values - a numerator and a denominator.
083         */
084        RATIO, 
085        /**
086         * A series of measurements taken by a device.
087         */
088        SAMPLEDDATA, 
089        /**
090         * A time during the day, in the format hh:mm:ss.
091         */
092        TIME, 
093        /**
094         * A date, date-time or partial date (e.g. just year or year + month) as used in human communication.
095         */
096        DATETIME, 
097        /**
098         * A time range defined by start and end date/time.
099         */
100        PERIOD, 
101        /**
102         * added to help the parsers with the generic types
103         */
104        NULL;
105        public static ObservationDataType fromCode(String codeString) throws FHIRException {
106            if (codeString == null || "".equals(codeString))
107                return null;
108        if ("Quantity".equals(codeString))
109          return QUANTITY;
110        if ("CodeableConcept".equals(codeString))
111          return CODEABLECONCEPT;
112        if ("string".equals(codeString))
113          return STRING;
114        if ("boolean".equals(codeString))
115          return BOOLEAN;
116        if ("integer".equals(codeString))
117          return INTEGER;
118        if ("Range".equals(codeString))
119          return RANGE;
120        if ("Ratio".equals(codeString))
121          return RATIO;
122        if ("SampledData".equals(codeString))
123          return SAMPLEDDATA;
124        if ("time".equals(codeString))
125          return TIME;
126        if ("dateTime".equals(codeString))
127          return DATETIME;
128        if ("Period".equals(codeString))
129          return PERIOD;
130        if (Configuration.isAcceptInvalidEnums())
131          return null;
132        else
133          throw new FHIRException("Unknown ObservationDataType code '"+codeString+"'");
134        }
135        public String toCode() {
136          switch (this) {
137            case QUANTITY: return "Quantity";
138            case CODEABLECONCEPT: return "CodeableConcept";
139            case STRING: return "string";
140            case BOOLEAN: return "boolean";
141            case INTEGER: return "integer";
142            case RANGE: return "Range";
143            case RATIO: return "Ratio";
144            case SAMPLEDDATA: return "SampledData";
145            case TIME: return "time";
146            case DATETIME: return "dateTime";
147            case PERIOD: return "Period";
148            case NULL: return null;
149            default: return "?";
150          }
151        }
152        public String getSystem() {
153          switch (this) {
154            case QUANTITY: return "http://hl7.org/fhir/permitted-data-type";
155            case CODEABLECONCEPT: return "http://hl7.org/fhir/permitted-data-type";
156            case STRING: return "http://hl7.org/fhir/permitted-data-type";
157            case BOOLEAN: return "http://hl7.org/fhir/permitted-data-type";
158            case INTEGER: return "http://hl7.org/fhir/permitted-data-type";
159            case RANGE: return "http://hl7.org/fhir/permitted-data-type";
160            case RATIO: return "http://hl7.org/fhir/permitted-data-type";
161            case SAMPLEDDATA: return "http://hl7.org/fhir/permitted-data-type";
162            case TIME: return "http://hl7.org/fhir/permitted-data-type";
163            case DATETIME: return "http://hl7.org/fhir/permitted-data-type";
164            case PERIOD: return "http://hl7.org/fhir/permitted-data-type";
165            case NULL: return null;
166            default: return "?";
167          }
168        }
169        public String getDefinition() {
170          switch (this) {
171            case QUANTITY: return "A measured amount.";
172            case CODEABLECONCEPT: return "A coded concept from a reference terminology and/or text.";
173            case STRING: return "A sequence of Unicode characters.";
174            case BOOLEAN: return "true or false.";
175            case INTEGER: return "A signed integer.";
176            case RANGE: return "A set of values bounded by low and high.";
177            case RATIO: return "A ratio of two Quantity values - a numerator and a denominator.";
178            case SAMPLEDDATA: return "A series of measurements taken by a device.";
179            case TIME: return "A time during the day, in the format hh:mm:ss.";
180            case DATETIME: return "A date, date-time or partial date (e.g. just year or year + month) as used in human communication.";
181            case PERIOD: return "A time range defined by start and end date/time.";
182            case NULL: return null;
183            default: return "?";
184          }
185        }
186        public String getDisplay() {
187          switch (this) {
188            case QUANTITY: return "Quantity";
189            case CODEABLECONCEPT: return "CodeableConcept";
190            case STRING: return "string";
191            case BOOLEAN: return "boolean";
192            case INTEGER: return "integer";
193            case RANGE: return "Range";
194            case RATIO: return "Ratio";
195            case SAMPLEDDATA: return "SampledData";
196            case TIME: return "time";
197            case DATETIME: return "dateTime";
198            case PERIOD: return "Period";
199            case NULL: return null;
200            default: return "?";
201          }
202        }
203    }
204
205  public static class ObservationDataTypeEnumFactory implements EnumFactory<ObservationDataType> {
206    public ObservationDataType fromCode(String codeString) throws IllegalArgumentException {
207      if (codeString == null || "".equals(codeString))
208            if (codeString == null || "".equals(codeString))
209                return null;
210        if ("Quantity".equals(codeString))
211          return ObservationDataType.QUANTITY;
212        if ("CodeableConcept".equals(codeString))
213          return ObservationDataType.CODEABLECONCEPT;
214        if ("string".equals(codeString))
215          return ObservationDataType.STRING;
216        if ("boolean".equals(codeString))
217          return ObservationDataType.BOOLEAN;
218        if ("integer".equals(codeString))
219          return ObservationDataType.INTEGER;
220        if ("Range".equals(codeString))
221          return ObservationDataType.RANGE;
222        if ("Ratio".equals(codeString))
223          return ObservationDataType.RATIO;
224        if ("SampledData".equals(codeString))
225          return ObservationDataType.SAMPLEDDATA;
226        if ("time".equals(codeString))
227          return ObservationDataType.TIME;
228        if ("dateTime".equals(codeString))
229          return ObservationDataType.DATETIME;
230        if ("Period".equals(codeString))
231          return ObservationDataType.PERIOD;
232        throw new IllegalArgumentException("Unknown ObservationDataType code '"+codeString+"'");
233        }
234        public Enumeration<ObservationDataType> fromType(PrimitiveType<?> code) throws FHIRException {
235          if (code == null)
236            return null;
237          if (code.isEmpty())
238            return new Enumeration<ObservationDataType>(this, ObservationDataType.NULL, code);
239          String codeString = ((PrimitiveType) code).asStringValue();
240          if (codeString == null || "".equals(codeString))
241            return new Enumeration<ObservationDataType>(this, ObservationDataType.NULL, code);
242        if ("Quantity".equals(codeString))
243          return new Enumeration<ObservationDataType>(this, ObservationDataType.QUANTITY, code);
244        if ("CodeableConcept".equals(codeString))
245          return new Enumeration<ObservationDataType>(this, ObservationDataType.CODEABLECONCEPT, code);
246        if ("string".equals(codeString))
247          return new Enumeration<ObservationDataType>(this, ObservationDataType.STRING, code);
248        if ("boolean".equals(codeString))
249          return new Enumeration<ObservationDataType>(this, ObservationDataType.BOOLEAN, code);
250        if ("integer".equals(codeString))
251          return new Enumeration<ObservationDataType>(this, ObservationDataType.INTEGER, code);
252        if ("Range".equals(codeString))
253          return new Enumeration<ObservationDataType>(this, ObservationDataType.RANGE, code);
254        if ("Ratio".equals(codeString))
255          return new Enumeration<ObservationDataType>(this, ObservationDataType.RATIO, code);
256        if ("SampledData".equals(codeString))
257          return new Enumeration<ObservationDataType>(this, ObservationDataType.SAMPLEDDATA, code);
258        if ("time".equals(codeString))
259          return new Enumeration<ObservationDataType>(this, ObservationDataType.TIME, code);
260        if ("dateTime".equals(codeString))
261          return new Enumeration<ObservationDataType>(this, ObservationDataType.DATETIME, code);
262        if ("Period".equals(codeString))
263          return new Enumeration<ObservationDataType>(this, ObservationDataType.PERIOD, code);
264        throw new FHIRException("Unknown ObservationDataType code '"+codeString+"'");
265        }
266    public String toCode(ObservationDataType code) {
267      if (code == ObservationDataType.QUANTITY)
268        return "Quantity";
269      if (code == ObservationDataType.CODEABLECONCEPT)
270        return "CodeableConcept";
271      if (code == ObservationDataType.STRING)
272        return "string";
273      if (code == ObservationDataType.BOOLEAN)
274        return "boolean";
275      if (code == ObservationDataType.INTEGER)
276        return "integer";
277      if (code == ObservationDataType.RANGE)
278        return "Range";
279      if (code == ObservationDataType.RATIO)
280        return "Ratio";
281      if (code == ObservationDataType.SAMPLEDDATA)
282        return "SampledData";
283      if (code == ObservationDataType.TIME)
284        return "time";
285      if (code == ObservationDataType.DATETIME)
286        return "dateTime";
287      if (code == ObservationDataType.PERIOD)
288        return "Period";
289      return "?";
290      }
291    public String toSystem(ObservationDataType code) {
292      return code.getSystem();
293      }
294    }
295
296    public enum ObservationRangeCategory {
297        /**
298         * Reference (Normal) Range for Ordinal and Continuous Observations.
299         */
300        REFERENCE, 
301        /**
302         * Critical Range for Ordinal and Continuous Observations. Results outside this range are critical.
303         */
304        CRITICAL, 
305        /**
306         * Absolute Range for Ordinal and Continuous Observations. Results outside this range are not possible.
307         */
308        ABSOLUTE, 
309        /**
310         * added to help the parsers with the generic types
311         */
312        NULL;
313        public static ObservationRangeCategory fromCode(String codeString) throws FHIRException {
314            if (codeString == null || "".equals(codeString))
315                return null;
316        if ("reference".equals(codeString))
317          return REFERENCE;
318        if ("critical".equals(codeString))
319          return CRITICAL;
320        if ("absolute".equals(codeString))
321          return ABSOLUTE;
322        if (Configuration.isAcceptInvalidEnums())
323          return null;
324        else
325          throw new FHIRException("Unknown ObservationRangeCategory code '"+codeString+"'");
326        }
327        public String toCode() {
328          switch (this) {
329            case REFERENCE: return "reference";
330            case CRITICAL: return "critical";
331            case ABSOLUTE: return "absolute";
332            case NULL: return null;
333            default: return "?";
334          }
335        }
336        public String getSystem() {
337          switch (this) {
338            case REFERENCE: return "http://hl7.org/fhir/observation-range-category";
339            case CRITICAL: return "http://hl7.org/fhir/observation-range-category";
340            case ABSOLUTE: return "http://hl7.org/fhir/observation-range-category";
341            case NULL: return null;
342            default: return "?";
343          }
344        }
345        public String getDefinition() {
346          switch (this) {
347            case REFERENCE: return "Reference (Normal) Range for Ordinal and Continuous Observations.";
348            case CRITICAL: return "Critical Range for Ordinal and Continuous Observations. Results outside this range are critical.";
349            case ABSOLUTE: return "Absolute Range for Ordinal and Continuous Observations. Results outside this range are not possible.";
350            case NULL: return null;
351            default: return "?";
352          }
353        }
354        public String getDisplay() {
355          switch (this) {
356            case REFERENCE: return "reference range";
357            case CRITICAL: return "critical range";
358            case ABSOLUTE: return "absolute range";
359            case NULL: return null;
360            default: return "?";
361          }
362        }
363    }
364
365  public static class ObservationRangeCategoryEnumFactory implements EnumFactory<ObservationRangeCategory> {
366    public ObservationRangeCategory fromCode(String codeString) throws IllegalArgumentException {
367      if (codeString == null || "".equals(codeString))
368            if (codeString == null || "".equals(codeString))
369                return null;
370        if ("reference".equals(codeString))
371          return ObservationRangeCategory.REFERENCE;
372        if ("critical".equals(codeString))
373          return ObservationRangeCategory.CRITICAL;
374        if ("absolute".equals(codeString))
375          return ObservationRangeCategory.ABSOLUTE;
376        throw new IllegalArgumentException("Unknown ObservationRangeCategory code '"+codeString+"'");
377        }
378        public Enumeration<ObservationRangeCategory> fromType(PrimitiveType<?> code) throws FHIRException {
379          if (code == null)
380            return null;
381          if (code.isEmpty())
382            return new Enumeration<ObservationRangeCategory>(this, ObservationRangeCategory.NULL, code);
383          String codeString = ((PrimitiveType) code).asStringValue();
384          if (codeString == null || "".equals(codeString))
385            return new Enumeration<ObservationRangeCategory>(this, ObservationRangeCategory.NULL, code);
386        if ("reference".equals(codeString))
387          return new Enumeration<ObservationRangeCategory>(this, ObservationRangeCategory.REFERENCE, code);
388        if ("critical".equals(codeString))
389          return new Enumeration<ObservationRangeCategory>(this, ObservationRangeCategory.CRITICAL, code);
390        if ("absolute".equals(codeString))
391          return new Enumeration<ObservationRangeCategory>(this, ObservationRangeCategory.ABSOLUTE, code);
392        throw new FHIRException("Unknown ObservationRangeCategory code '"+codeString+"'");
393        }
394    public String toCode(ObservationRangeCategory code) {
395      if (code == ObservationRangeCategory.REFERENCE)
396        return "reference";
397      if (code == ObservationRangeCategory.CRITICAL)
398        return "critical";
399      if (code == ObservationRangeCategory.ABSOLUTE)
400        return "absolute";
401      return "?";
402      }
403    public String toSystem(ObservationRangeCategory code) {
404      return code.getSystem();
405      }
406    }
407
408    @Block()
409    public static class ObservationDefinitionQualifiedValueComponent extends BackboneElement implements IBaseBackboneElement {
410        /**
411         * A concept defining the context for this set of qualified values.
412         */
413        @Child(name = "context", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
414        @Description(shortDefinition="Context qualifier for the set of qualified values", formalDefinition="A concept defining the context for this set of qualified values." )
415        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/referencerange-meaning")
416        protected CodeableConcept context;
417
418        /**
419         * The target population this  set of qualified values applies to.
420         */
421        @Child(name = "appliesTo", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
422        @Description(shortDefinition="Targetted population for the set of qualified values", formalDefinition="The target population this  set of qualified values applies to." )
423        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/referencerange-appliesto")
424        protected List<CodeableConcept> appliesTo;
425
426        /**
427         * The gender this  set of qualified values applies to.
428         */
429        @Child(name = "gender", type = {CodeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
430        @Description(shortDefinition="male | female | other | unknown", formalDefinition="The gender this  set of qualified values applies to." )
431        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/administrative-gender")
432        protected Enumeration<AdministrativeGender> gender;
433
434        /**
435         * The age range this  set of qualified values applies to.
436         */
437        @Child(name = "age", type = {Range.class}, order=4, min=0, max=1, modifier=false, summary=false)
438        @Description(shortDefinition="Applicable age range for the set of qualified values", formalDefinition="The age range this  set of qualified values applies to." )
439        protected Range age;
440
441        /**
442         * The gestational age this  set of qualified values applies to.
443         */
444        @Child(name = "gestationalAge", type = {Range.class}, order=5, min=0, max=1, modifier=false, summary=false)
445        @Description(shortDefinition="Applicable gestational age range for the set of qualified values", formalDefinition="The gestational age this  set of qualified values applies to." )
446        protected Range gestationalAge;
447
448        /**
449         * Text based condition for which the the set of qualified values is valid.
450         */
451        @Child(name = "condition", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
452        @Description(shortDefinition="Condition associated with the set of qualified values", formalDefinition="Text based condition for which the the set of qualified values is valid." )
453        protected StringType condition;
454
455        /**
456         * The category of range of values for continuous or ordinal observations that match the criteria of this set of qualified values.
457         */
458        @Child(name = "rangeCategory", type = {CodeType.class}, order=7, min=0, max=1, modifier=false, summary=false)
459        @Description(shortDefinition="reference | critical | absolute", formalDefinition="The category of range of values for continuous or ordinal observations that match the criteria of this set of qualified values." )
460        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-range-category")
461        protected Enumeration<ObservationRangeCategory> rangeCategory;
462
463        /**
464         * The range of values defined for continuous or ordinal observations that match the criteria of this set of qualified values.
465         */
466        @Child(name = "range", type = {Range.class}, order=8, min=0, max=1, modifier=false, summary=false)
467        @Description(shortDefinition="The range for continuous or ordinal observations", formalDefinition="The range of values defined for continuous or ordinal observations that match the criteria of this set of qualified values." )
468        protected Range range;
469
470        /**
471         * The set of valid coded results for qualitative observations  that match the criteria of this set of qualified values.
472         */
473        @Child(name = "validCodedValueSet", type = {CanonicalType.class}, order=9, min=0, max=1, modifier=false, summary=false)
474        @Description(shortDefinition="Value set of valid coded values as part of this set of qualified values", formalDefinition="The set of valid coded results for qualitative observations  that match the criteria of this set of qualified values." )
475        protected CanonicalType validCodedValueSet;
476
477        /**
478         * The set of normal coded results for qualitative observations  that match the criteria of this set of qualified values.
479         */
480        @Child(name = "normalCodedValueSet", type = {CanonicalType.class}, order=10, min=0, max=1, modifier=false, summary=false)
481        @Description(shortDefinition="Value set of normal coded values as part of this set of qualified values", formalDefinition="The set of normal coded results for qualitative observations  that match the criteria of this set of qualified values." )
482        protected CanonicalType normalCodedValueSet;
483
484        /**
485         * The set of abnormal coded results for qualitative observations  that match the criteria of this set of qualified values.
486         */
487        @Child(name = "abnormalCodedValueSet", type = {CanonicalType.class}, order=11, min=0, max=1, modifier=false, summary=false)
488        @Description(shortDefinition="Value set of abnormal coded values as part of this set of qualified values", formalDefinition="The set of abnormal coded results for qualitative observations  that match the criteria of this set of qualified values." )
489        protected CanonicalType abnormalCodedValueSet;
490
491        /**
492         * The set of critical coded results for qualitative observations  that match the criteria of this set of qualified values.
493         */
494        @Child(name = "criticalCodedValueSet", type = {CanonicalType.class}, order=12, min=0, max=1, modifier=false, summary=false)
495        @Description(shortDefinition="Value set of critical coded values as part of this set of qualified values", formalDefinition="The set of critical coded results for qualitative observations  that match the criteria of this set of qualified values." )
496        protected CanonicalType criticalCodedValueSet;
497
498        private static final long serialVersionUID = -538666361L;
499
500    /**
501     * Constructor
502     */
503      public ObservationDefinitionQualifiedValueComponent() {
504        super();
505      }
506
507        /**
508         * @return {@link #context} (A concept defining the context for this set of qualified values.)
509         */
510        public CodeableConcept getContext() { 
511          if (this.context == null)
512            if (Configuration.errorOnAutoCreate())
513              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.context");
514            else if (Configuration.doAutoCreate())
515              this.context = new CodeableConcept(); // cc
516          return this.context;
517        }
518
519        public boolean hasContext() { 
520          return this.context != null && !this.context.isEmpty();
521        }
522
523        /**
524         * @param value {@link #context} (A concept defining the context for this set of qualified values.)
525         */
526        public ObservationDefinitionQualifiedValueComponent setContext(CodeableConcept value) { 
527          this.context = value;
528          return this;
529        }
530
531        /**
532         * @return {@link #appliesTo} (The target population this  set of qualified values applies to.)
533         */
534        public List<CodeableConcept> getAppliesTo() { 
535          if (this.appliesTo == null)
536            this.appliesTo = new ArrayList<CodeableConcept>();
537          return this.appliesTo;
538        }
539
540        /**
541         * @return Returns a reference to <code>this</code> for easy method chaining
542         */
543        public ObservationDefinitionQualifiedValueComponent setAppliesTo(List<CodeableConcept> theAppliesTo) { 
544          this.appliesTo = theAppliesTo;
545          return this;
546        }
547
548        public boolean hasAppliesTo() { 
549          if (this.appliesTo == null)
550            return false;
551          for (CodeableConcept item : this.appliesTo)
552            if (!item.isEmpty())
553              return true;
554          return false;
555        }
556
557        public CodeableConcept addAppliesTo() { //3
558          CodeableConcept t = new CodeableConcept();
559          if (this.appliesTo == null)
560            this.appliesTo = new ArrayList<CodeableConcept>();
561          this.appliesTo.add(t);
562          return t;
563        }
564
565        public ObservationDefinitionQualifiedValueComponent addAppliesTo(CodeableConcept t) { //3
566          if (t == null)
567            return this;
568          if (this.appliesTo == null)
569            this.appliesTo = new ArrayList<CodeableConcept>();
570          this.appliesTo.add(t);
571          return this;
572        }
573
574        /**
575         * @return The first repetition of repeating field {@link #appliesTo}, creating it if it does not already exist {3}
576         */
577        public CodeableConcept getAppliesToFirstRep() { 
578          if (getAppliesTo().isEmpty()) {
579            addAppliesTo();
580          }
581          return getAppliesTo().get(0);
582        }
583
584        /**
585         * @return {@link #gender} (The gender this  set of qualified values applies to.). This is the underlying object with id, value and extensions. The accessor "getGender" gives direct access to the value
586         */
587        public Enumeration<AdministrativeGender> getGenderElement() { 
588          if (this.gender == null)
589            if (Configuration.errorOnAutoCreate())
590              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.gender");
591            else if (Configuration.doAutoCreate())
592              this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory()); // bb
593          return this.gender;
594        }
595
596        public boolean hasGenderElement() { 
597          return this.gender != null && !this.gender.isEmpty();
598        }
599
600        public boolean hasGender() { 
601          return this.gender != null && !this.gender.isEmpty();
602        }
603
604        /**
605         * @param value {@link #gender} (The gender this  set of qualified values applies to.). This is the underlying object with id, value and extensions. The accessor "getGender" gives direct access to the value
606         */
607        public ObservationDefinitionQualifiedValueComponent setGenderElement(Enumeration<AdministrativeGender> value) { 
608          this.gender = value;
609          return this;
610        }
611
612        /**
613         * @return The gender this  set of qualified values applies to.
614         */
615        public AdministrativeGender getGender() { 
616          return this.gender == null ? null : this.gender.getValue();
617        }
618
619        /**
620         * @param value The gender this  set of qualified values applies to.
621         */
622        public ObservationDefinitionQualifiedValueComponent setGender(AdministrativeGender value) { 
623          if (value == null)
624            this.gender = null;
625          else {
626            if (this.gender == null)
627              this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory());
628            this.gender.setValue(value);
629          }
630          return this;
631        }
632
633        /**
634         * @return {@link #age} (The age range this  set of qualified values applies to.)
635         */
636        public Range getAge() { 
637          if (this.age == null)
638            if (Configuration.errorOnAutoCreate())
639              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.age");
640            else if (Configuration.doAutoCreate())
641              this.age = new Range(); // cc
642          return this.age;
643        }
644
645        public boolean hasAge() { 
646          return this.age != null && !this.age.isEmpty();
647        }
648
649        /**
650         * @param value {@link #age} (The age range this  set of qualified values applies to.)
651         */
652        public ObservationDefinitionQualifiedValueComponent setAge(Range value) { 
653          this.age = value;
654          return this;
655        }
656
657        /**
658         * @return {@link #gestationalAge} (The gestational age this  set of qualified values applies to.)
659         */
660        public Range getGestationalAge() { 
661          if (this.gestationalAge == null)
662            if (Configuration.errorOnAutoCreate())
663              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.gestationalAge");
664            else if (Configuration.doAutoCreate())
665              this.gestationalAge = new Range(); // cc
666          return this.gestationalAge;
667        }
668
669        public boolean hasGestationalAge() { 
670          return this.gestationalAge != null && !this.gestationalAge.isEmpty();
671        }
672
673        /**
674         * @param value {@link #gestationalAge} (The gestational age this  set of qualified values applies to.)
675         */
676        public ObservationDefinitionQualifiedValueComponent setGestationalAge(Range value) { 
677          this.gestationalAge = value;
678          return this;
679        }
680
681        /**
682         * @return {@link #condition} (Text based condition for which the the set of qualified values is valid.). This is the underlying object with id, value and extensions. The accessor "getCondition" gives direct access to the value
683         */
684        public StringType getConditionElement() { 
685          if (this.condition == null)
686            if (Configuration.errorOnAutoCreate())
687              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.condition");
688            else if (Configuration.doAutoCreate())
689              this.condition = new StringType(); // bb
690          return this.condition;
691        }
692
693        public boolean hasConditionElement() { 
694          return this.condition != null && !this.condition.isEmpty();
695        }
696
697        public boolean hasCondition() { 
698          return this.condition != null && !this.condition.isEmpty();
699        }
700
701        /**
702         * @param value {@link #condition} (Text based condition for which the the set of qualified values is valid.). This is the underlying object with id, value and extensions. The accessor "getCondition" gives direct access to the value
703         */
704        public ObservationDefinitionQualifiedValueComponent setConditionElement(StringType value) { 
705          this.condition = value;
706          return this;
707        }
708
709        /**
710         * @return Text based condition for which the the set of qualified values is valid.
711         */
712        public String getCondition() { 
713          return this.condition == null ? null : this.condition.getValue();
714        }
715
716        /**
717         * @param value Text based condition for which the the set of qualified values is valid.
718         */
719        public ObservationDefinitionQualifiedValueComponent setCondition(String value) { 
720          if (Utilities.noString(value))
721            this.condition = null;
722          else {
723            if (this.condition == null)
724              this.condition = new StringType();
725            this.condition.setValue(value);
726          }
727          return this;
728        }
729
730        /**
731         * @return {@link #rangeCategory} (The category of range of values for continuous or ordinal observations that match the criteria of this set of qualified values.). This is the underlying object with id, value and extensions. The accessor "getRangeCategory" gives direct access to the value
732         */
733        public Enumeration<ObservationRangeCategory> getRangeCategoryElement() { 
734          if (this.rangeCategory == null)
735            if (Configuration.errorOnAutoCreate())
736              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.rangeCategory");
737            else if (Configuration.doAutoCreate())
738              this.rangeCategory = new Enumeration<ObservationRangeCategory>(new ObservationRangeCategoryEnumFactory()); // bb
739          return this.rangeCategory;
740        }
741
742        public boolean hasRangeCategoryElement() { 
743          return this.rangeCategory != null && !this.rangeCategory.isEmpty();
744        }
745
746        public boolean hasRangeCategory() { 
747          return this.rangeCategory != null && !this.rangeCategory.isEmpty();
748        }
749
750        /**
751         * @param value {@link #rangeCategory} (The category of range of values for continuous or ordinal observations that match the criteria of this set of qualified values.). This is the underlying object with id, value and extensions. The accessor "getRangeCategory" gives direct access to the value
752         */
753        public ObservationDefinitionQualifiedValueComponent setRangeCategoryElement(Enumeration<ObservationRangeCategory> value) { 
754          this.rangeCategory = value;
755          return this;
756        }
757
758        /**
759         * @return The category of range of values for continuous or ordinal observations that match the criteria of this set of qualified values.
760         */
761        public ObservationRangeCategory getRangeCategory() { 
762          return this.rangeCategory == null ? null : this.rangeCategory.getValue();
763        }
764
765        /**
766         * @param value The category of range of values for continuous or ordinal observations that match the criteria of this set of qualified values.
767         */
768        public ObservationDefinitionQualifiedValueComponent setRangeCategory(ObservationRangeCategory value) { 
769          if (value == null)
770            this.rangeCategory = null;
771          else {
772            if (this.rangeCategory == null)
773              this.rangeCategory = new Enumeration<ObservationRangeCategory>(new ObservationRangeCategoryEnumFactory());
774            this.rangeCategory.setValue(value);
775          }
776          return this;
777        }
778
779        /**
780         * @return {@link #range} (The range of values defined for continuous or ordinal observations that match the criteria of this set of qualified values.)
781         */
782        public Range getRange() { 
783          if (this.range == null)
784            if (Configuration.errorOnAutoCreate())
785              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.range");
786            else if (Configuration.doAutoCreate())
787              this.range = new Range(); // cc
788          return this.range;
789        }
790
791        public boolean hasRange() { 
792          return this.range != null && !this.range.isEmpty();
793        }
794
795        /**
796         * @param value {@link #range} (The range of values defined for continuous or ordinal observations that match the criteria of this set of qualified values.)
797         */
798        public ObservationDefinitionQualifiedValueComponent setRange(Range value) { 
799          this.range = value;
800          return this;
801        }
802
803        /**
804         * @return {@link #validCodedValueSet} (The set of valid coded results for qualitative observations  that match the criteria of this set of qualified values.). This is the underlying object with id, value and extensions. The accessor "getValidCodedValueSet" gives direct access to the value
805         */
806        public CanonicalType getValidCodedValueSetElement() { 
807          if (this.validCodedValueSet == null)
808            if (Configuration.errorOnAutoCreate())
809              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.validCodedValueSet");
810            else if (Configuration.doAutoCreate())
811              this.validCodedValueSet = new CanonicalType(); // bb
812          return this.validCodedValueSet;
813        }
814
815        public boolean hasValidCodedValueSetElement() { 
816          return this.validCodedValueSet != null && !this.validCodedValueSet.isEmpty();
817        }
818
819        public boolean hasValidCodedValueSet() { 
820          return this.validCodedValueSet != null && !this.validCodedValueSet.isEmpty();
821        }
822
823        /**
824         * @param value {@link #validCodedValueSet} (The set of valid coded results for qualitative observations  that match the criteria of this set of qualified values.). This is the underlying object with id, value and extensions. The accessor "getValidCodedValueSet" gives direct access to the value
825         */
826        public ObservationDefinitionQualifiedValueComponent setValidCodedValueSetElement(CanonicalType value) { 
827          this.validCodedValueSet = value;
828          return this;
829        }
830
831        /**
832         * @return The set of valid coded results for qualitative observations  that match the criteria of this set of qualified values.
833         */
834        public String getValidCodedValueSet() { 
835          return this.validCodedValueSet == null ? null : this.validCodedValueSet.getValue();
836        }
837
838        /**
839         * @param value The set of valid coded results for qualitative observations  that match the criteria of this set of qualified values.
840         */
841        public ObservationDefinitionQualifiedValueComponent setValidCodedValueSet(String value) { 
842          if (Utilities.noString(value))
843            this.validCodedValueSet = null;
844          else {
845            if (this.validCodedValueSet == null)
846              this.validCodedValueSet = new CanonicalType();
847            this.validCodedValueSet.setValue(value);
848          }
849          return this;
850        }
851
852        /**
853         * @return {@link #normalCodedValueSet} (The set of normal coded results for qualitative observations  that match the criteria of this set of qualified values.). This is the underlying object with id, value and extensions. The accessor "getNormalCodedValueSet" gives direct access to the value
854         */
855        public CanonicalType getNormalCodedValueSetElement() { 
856          if (this.normalCodedValueSet == null)
857            if (Configuration.errorOnAutoCreate())
858              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.normalCodedValueSet");
859            else if (Configuration.doAutoCreate())
860              this.normalCodedValueSet = new CanonicalType(); // bb
861          return this.normalCodedValueSet;
862        }
863
864        public boolean hasNormalCodedValueSetElement() { 
865          return this.normalCodedValueSet != null && !this.normalCodedValueSet.isEmpty();
866        }
867
868        public boolean hasNormalCodedValueSet() { 
869          return this.normalCodedValueSet != null && !this.normalCodedValueSet.isEmpty();
870        }
871
872        /**
873         * @param value {@link #normalCodedValueSet} (The set of normal coded results for qualitative observations  that match the criteria of this set of qualified values.). This is the underlying object with id, value and extensions. The accessor "getNormalCodedValueSet" gives direct access to the value
874         */
875        public ObservationDefinitionQualifiedValueComponent setNormalCodedValueSetElement(CanonicalType value) { 
876          this.normalCodedValueSet = value;
877          return this;
878        }
879
880        /**
881         * @return The set of normal coded results for qualitative observations  that match the criteria of this set of qualified values.
882         */
883        public String getNormalCodedValueSet() { 
884          return this.normalCodedValueSet == null ? null : this.normalCodedValueSet.getValue();
885        }
886
887        /**
888         * @param value The set of normal coded results for qualitative observations  that match the criteria of this set of qualified values.
889         */
890        public ObservationDefinitionQualifiedValueComponent setNormalCodedValueSet(String value) { 
891          if (Utilities.noString(value))
892            this.normalCodedValueSet = null;
893          else {
894            if (this.normalCodedValueSet == null)
895              this.normalCodedValueSet = new CanonicalType();
896            this.normalCodedValueSet.setValue(value);
897          }
898          return this;
899        }
900
901        /**
902         * @return {@link #abnormalCodedValueSet} (The set of abnormal coded results for qualitative observations  that match the criteria of this set of qualified values.). This is the underlying object with id, value and extensions. The accessor "getAbnormalCodedValueSet" gives direct access to the value
903         */
904        public CanonicalType getAbnormalCodedValueSetElement() { 
905          if (this.abnormalCodedValueSet == null)
906            if (Configuration.errorOnAutoCreate())
907              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.abnormalCodedValueSet");
908            else if (Configuration.doAutoCreate())
909              this.abnormalCodedValueSet = new CanonicalType(); // bb
910          return this.abnormalCodedValueSet;
911        }
912
913        public boolean hasAbnormalCodedValueSetElement() { 
914          return this.abnormalCodedValueSet != null && !this.abnormalCodedValueSet.isEmpty();
915        }
916
917        public boolean hasAbnormalCodedValueSet() { 
918          return this.abnormalCodedValueSet != null && !this.abnormalCodedValueSet.isEmpty();
919        }
920
921        /**
922         * @param value {@link #abnormalCodedValueSet} (The set of abnormal coded results for qualitative observations  that match the criteria of this set of qualified values.). This is the underlying object with id, value and extensions. The accessor "getAbnormalCodedValueSet" gives direct access to the value
923         */
924        public ObservationDefinitionQualifiedValueComponent setAbnormalCodedValueSetElement(CanonicalType value) { 
925          this.abnormalCodedValueSet = value;
926          return this;
927        }
928
929        /**
930         * @return The set of abnormal coded results for qualitative observations  that match the criteria of this set of qualified values.
931         */
932        public String getAbnormalCodedValueSet() { 
933          return this.abnormalCodedValueSet == null ? null : this.abnormalCodedValueSet.getValue();
934        }
935
936        /**
937         * @param value The set of abnormal coded results for qualitative observations  that match the criteria of this set of qualified values.
938         */
939        public ObservationDefinitionQualifiedValueComponent setAbnormalCodedValueSet(String value) { 
940          if (Utilities.noString(value))
941            this.abnormalCodedValueSet = null;
942          else {
943            if (this.abnormalCodedValueSet == null)
944              this.abnormalCodedValueSet = new CanonicalType();
945            this.abnormalCodedValueSet.setValue(value);
946          }
947          return this;
948        }
949
950        /**
951         * @return {@link #criticalCodedValueSet} (The set of critical coded results for qualitative observations  that match the criteria of this set of qualified values.). This is the underlying object with id, value and extensions. The accessor "getCriticalCodedValueSet" gives direct access to the value
952         */
953        public CanonicalType getCriticalCodedValueSetElement() { 
954          if (this.criticalCodedValueSet == null)
955            if (Configuration.errorOnAutoCreate())
956              throw new Error("Attempt to auto-create ObservationDefinitionQualifiedValueComponent.criticalCodedValueSet");
957            else if (Configuration.doAutoCreate())
958              this.criticalCodedValueSet = new CanonicalType(); // bb
959          return this.criticalCodedValueSet;
960        }
961
962        public boolean hasCriticalCodedValueSetElement() { 
963          return this.criticalCodedValueSet != null && !this.criticalCodedValueSet.isEmpty();
964        }
965
966        public boolean hasCriticalCodedValueSet() { 
967          return this.criticalCodedValueSet != null && !this.criticalCodedValueSet.isEmpty();
968        }
969
970        /**
971         * @param value {@link #criticalCodedValueSet} (The set of critical coded results for qualitative observations  that match the criteria of this set of qualified values.). This is the underlying object with id, value and extensions. The accessor "getCriticalCodedValueSet" gives direct access to the value
972         */
973        public ObservationDefinitionQualifiedValueComponent setCriticalCodedValueSetElement(CanonicalType value) { 
974          this.criticalCodedValueSet = value;
975          return this;
976        }
977
978        /**
979         * @return The set of critical coded results for qualitative observations  that match the criteria of this set of qualified values.
980         */
981        public String getCriticalCodedValueSet() { 
982          return this.criticalCodedValueSet == null ? null : this.criticalCodedValueSet.getValue();
983        }
984
985        /**
986         * @param value The set of critical coded results for qualitative observations  that match the criteria of this set of qualified values.
987         */
988        public ObservationDefinitionQualifiedValueComponent setCriticalCodedValueSet(String value) { 
989          if (Utilities.noString(value))
990            this.criticalCodedValueSet = null;
991          else {
992            if (this.criticalCodedValueSet == null)
993              this.criticalCodedValueSet = new CanonicalType();
994            this.criticalCodedValueSet.setValue(value);
995          }
996          return this;
997        }
998
999        protected void listChildren(List<Property> children) {
1000          super.listChildren(children);
1001          children.add(new Property("context", "CodeableConcept", "A concept defining the context for this set of qualified values.", 0, 1, context));
1002          children.add(new Property("appliesTo", "CodeableConcept", "The target population this  set of qualified values applies to.", 0, java.lang.Integer.MAX_VALUE, appliesTo));
1003          children.add(new Property("gender", "code", "The gender this  set of qualified values applies to.", 0, 1, gender));
1004          children.add(new Property("age", "Range", "The age range this  set of qualified values applies to.", 0, 1, age));
1005          children.add(new Property("gestationalAge", "Range", "The gestational age this  set of qualified values applies to.", 0, 1, gestationalAge));
1006          children.add(new Property("condition", "string", "Text based condition for which the the set of qualified values is valid.", 0, 1, condition));
1007          children.add(new Property("rangeCategory", "code", "The category of range of values for continuous or ordinal observations that match the criteria of this set of qualified values.", 0, 1, rangeCategory));
1008          children.add(new Property("range", "Range", "The range of values defined for continuous or ordinal observations that match the criteria of this set of qualified values.", 0, 1, range));
1009          children.add(new Property("validCodedValueSet", "canonical(ValueSet)", "The set of valid coded results for qualitative observations  that match the criteria of this set of qualified values.", 0, 1, validCodedValueSet));
1010          children.add(new Property("normalCodedValueSet", "canonical(ValueSet)", "The set of normal coded results for qualitative observations  that match the criteria of this set of qualified values.", 0, 1, normalCodedValueSet));
1011          children.add(new Property("abnormalCodedValueSet", "canonical(ValueSet)", "The set of abnormal coded results for qualitative observations  that match the criteria of this set of qualified values.", 0, 1, abnormalCodedValueSet));
1012          children.add(new Property("criticalCodedValueSet", "canonical(ValueSet)", "The set of critical coded results for qualitative observations  that match the criteria of this set of qualified values.", 0, 1, criticalCodedValueSet));
1013        }
1014
1015        @Override
1016        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1017          switch (_hash) {
1018          case 951530927: /*context*/  return new Property("context", "CodeableConcept", "A concept defining the context for this set of qualified values.", 0, 1, context);
1019          case -2089924569: /*appliesTo*/  return new Property("appliesTo", "CodeableConcept", "The target population this  set of qualified values applies to.", 0, java.lang.Integer.MAX_VALUE, appliesTo);
1020          case -1249512767: /*gender*/  return new Property("gender", "code", "The gender this  set of qualified values applies to.", 0, 1, gender);
1021          case 96511: /*age*/  return new Property("age", "Range", "The age range this  set of qualified values applies to.", 0, 1, age);
1022          case -241217538: /*gestationalAge*/  return new Property("gestationalAge", "Range", "The gestational age this  set of qualified values applies to.", 0, 1, gestationalAge);
1023          case -861311717: /*condition*/  return new Property("condition", "string", "Text based condition for which the the set of qualified values is valid.", 0, 1, condition);
1024          case -363410085: /*rangeCategory*/  return new Property("rangeCategory", "code", "The category of range of values for continuous or ordinal observations that match the criteria of this set of qualified values.", 0, 1, rangeCategory);
1025          case 108280125: /*range*/  return new Property("range", "Range", "The range of values defined for continuous or ordinal observations that match the criteria of this set of qualified values.", 0, 1, range);
1026          case 1374640076: /*validCodedValueSet*/  return new Property("validCodedValueSet", "canonical(ValueSet)", "The set of valid coded results for qualitative observations  that match the criteria of this set of qualified values.", 0, 1, validCodedValueSet);
1027          case -837500735: /*normalCodedValueSet*/  return new Property("normalCodedValueSet", "canonical(ValueSet)", "The set of normal coded results for qualitative observations  that match the criteria of this set of qualified values.", 0, 1, normalCodedValueSet);
1028          case 1073600256: /*abnormalCodedValueSet*/  return new Property("abnormalCodedValueSet", "canonical(ValueSet)", "The set of abnormal coded results for qualitative observations  that match the criteria of this set of qualified values.", 0, 1, abnormalCodedValueSet);
1029          case 2568457: /*criticalCodedValueSet*/  return new Property("criticalCodedValueSet", "canonical(ValueSet)", "The set of critical coded results for qualitative observations  that match the criteria of this set of qualified values.", 0, 1, criticalCodedValueSet);
1030          default: return super.getNamedProperty(_hash, _name, _checkValid);
1031          }
1032
1033        }
1034
1035      @Override
1036      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1037        switch (hash) {
1038        case 951530927: /*context*/ return this.context == null ? new Base[0] : new Base[] {this.context}; // CodeableConcept
1039        case -2089924569: /*appliesTo*/ return this.appliesTo == null ? new Base[0] : this.appliesTo.toArray(new Base[this.appliesTo.size()]); // CodeableConcept
1040        case -1249512767: /*gender*/ return this.gender == null ? new Base[0] : new Base[] {this.gender}; // Enumeration<AdministrativeGender>
1041        case 96511: /*age*/ return this.age == null ? new Base[0] : new Base[] {this.age}; // Range
1042        case -241217538: /*gestationalAge*/ return this.gestationalAge == null ? new Base[0] : new Base[] {this.gestationalAge}; // Range
1043        case -861311717: /*condition*/ return this.condition == null ? new Base[0] : new Base[] {this.condition}; // StringType
1044        case -363410085: /*rangeCategory*/ return this.rangeCategory == null ? new Base[0] : new Base[] {this.rangeCategory}; // Enumeration<ObservationRangeCategory>
1045        case 108280125: /*range*/ return this.range == null ? new Base[0] : new Base[] {this.range}; // Range
1046        case 1374640076: /*validCodedValueSet*/ return this.validCodedValueSet == null ? new Base[0] : new Base[] {this.validCodedValueSet}; // CanonicalType
1047        case -837500735: /*normalCodedValueSet*/ return this.normalCodedValueSet == null ? new Base[0] : new Base[] {this.normalCodedValueSet}; // CanonicalType
1048        case 1073600256: /*abnormalCodedValueSet*/ return this.abnormalCodedValueSet == null ? new Base[0] : new Base[] {this.abnormalCodedValueSet}; // CanonicalType
1049        case 2568457: /*criticalCodedValueSet*/ return this.criticalCodedValueSet == null ? new Base[0] : new Base[] {this.criticalCodedValueSet}; // CanonicalType
1050        default: return super.getProperty(hash, name, checkValid);
1051        }
1052
1053      }
1054
1055      @Override
1056      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1057        switch (hash) {
1058        case 951530927: // context
1059          this.context = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1060          return value;
1061        case -2089924569: // appliesTo
1062          this.getAppliesTo().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1063          return value;
1064        case -1249512767: // gender
1065          value = new AdministrativeGenderEnumFactory().fromType(TypeConvertor.castToCode(value));
1066          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1067          return value;
1068        case 96511: // age
1069          this.age = TypeConvertor.castToRange(value); // Range
1070          return value;
1071        case -241217538: // gestationalAge
1072          this.gestationalAge = TypeConvertor.castToRange(value); // Range
1073          return value;
1074        case -861311717: // condition
1075          this.condition = TypeConvertor.castToString(value); // StringType
1076          return value;
1077        case -363410085: // rangeCategory
1078          value = new ObservationRangeCategoryEnumFactory().fromType(TypeConvertor.castToCode(value));
1079          this.rangeCategory = (Enumeration) value; // Enumeration<ObservationRangeCategory>
1080          return value;
1081        case 108280125: // range
1082          this.range = TypeConvertor.castToRange(value); // Range
1083          return value;
1084        case 1374640076: // validCodedValueSet
1085          this.validCodedValueSet = TypeConvertor.castToCanonical(value); // CanonicalType
1086          return value;
1087        case -837500735: // normalCodedValueSet
1088          this.normalCodedValueSet = TypeConvertor.castToCanonical(value); // CanonicalType
1089          return value;
1090        case 1073600256: // abnormalCodedValueSet
1091          this.abnormalCodedValueSet = TypeConvertor.castToCanonical(value); // CanonicalType
1092          return value;
1093        case 2568457: // criticalCodedValueSet
1094          this.criticalCodedValueSet = TypeConvertor.castToCanonical(value); // CanonicalType
1095          return value;
1096        default: return super.setProperty(hash, name, value);
1097        }
1098
1099      }
1100
1101      @Override
1102      public Base setProperty(String name, Base value) throws FHIRException {
1103        if (name.equals("context")) {
1104          this.context = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1105        } else if (name.equals("appliesTo")) {
1106          this.getAppliesTo().add(TypeConvertor.castToCodeableConcept(value));
1107        } else if (name.equals("gender")) {
1108          value = new AdministrativeGenderEnumFactory().fromType(TypeConvertor.castToCode(value));
1109          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1110        } else if (name.equals("age")) {
1111          this.age = TypeConvertor.castToRange(value); // Range
1112        } else if (name.equals("gestationalAge")) {
1113          this.gestationalAge = TypeConvertor.castToRange(value); // Range
1114        } else if (name.equals("condition")) {
1115          this.condition = TypeConvertor.castToString(value); // StringType
1116        } else if (name.equals("rangeCategory")) {
1117          value = new ObservationRangeCategoryEnumFactory().fromType(TypeConvertor.castToCode(value));
1118          this.rangeCategory = (Enumeration) value; // Enumeration<ObservationRangeCategory>
1119        } else if (name.equals("range")) {
1120          this.range = TypeConvertor.castToRange(value); // Range
1121        } else if (name.equals("validCodedValueSet")) {
1122          this.validCodedValueSet = TypeConvertor.castToCanonical(value); // CanonicalType
1123        } else if (name.equals("normalCodedValueSet")) {
1124          this.normalCodedValueSet = TypeConvertor.castToCanonical(value); // CanonicalType
1125        } else if (name.equals("abnormalCodedValueSet")) {
1126          this.abnormalCodedValueSet = TypeConvertor.castToCanonical(value); // CanonicalType
1127        } else if (name.equals("criticalCodedValueSet")) {
1128          this.criticalCodedValueSet = TypeConvertor.castToCanonical(value); // CanonicalType
1129        } else
1130          return super.setProperty(name, value);
1131        return value;
1132      }
1133
1134  @Override
1135  public void removeChild(String name, Base value) throws FHIRException {
1136        if (name.equals("context")) {
1137          this.context = null;
1138        } else if (name.equals("appliesTo")) {
1139          this.getAppliesTo().remove(value);
1140        } else if (name.equals("gender")) {
1141          value = new AdministrativeGenderEnumFactory().fromType(TypeConvertor.castToCode(value));
1142          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1143        } else if (name.equals("age")) {
1144          this.age = null;
1145        } else if (name.equals("gestationalAge")) {
1146          this.gestationalAge = null;
1147        } else if (name.equals("condition")) {
1148          this.condition = null;
1149        } else if (name.equals("rangeCategory")) {
1150          value = new ObservationRangeCategoryEnumFactory().fromType(TypeConvertor.castToCode(value));
1151          this.rangeCategory = (Enumeration) value; // Enumeration<ObservationRangeCategory>
1152        } else if (name.equals("range")) {
1153          this.range = null;
1154        } else if (name.equals("validCodedValueSet")) {
1155          this.validCodedValueSet = null;
1156        } else if (name.equals("normalCodedValueSet")) {
1157          this.normalCodedValueSet = null;
1158        } else if (name.equals("abnormalCodedValueSet")) {
1159          this.abnormalCodedValueSet = null;
1160        } else if (name.equals("criticalCodedValueSet")) {
1161          this.criticalCodedValueSet = null;
1162        } else
1163          super.removeChild(name, value);
1164        
1165      }
1166
1167      @Override
1168      public Base makeProperty(int hash, String name) throws FHIRException {
1169        switch (hash) {
1170        case 951530927:  return getContext();
1171        case -2089924569:  return addAppliesTo(); 
1172        case -1249512767:  return getGenderElement();
1173        case 96511:  return getAge();
1174        case -241217538:  return getGestationalAge();
1175        case -861311717:  return getConditionElement();
1176        case -363410085:  return getRangeCategoryElement();
1177        case 108280125:  return getRange();
1178        case 1374640076:  return getValidCodedValueSetElement();
1179        case -837500735:  return getNormalCodedValueSetElement();
1180        case 1073600256:  return getAbnormalCodedValueSetElement();
1181        case 2568457:  return getCriticalCodedValueSetElement();
1182        default: return super.makeProperty(hash, name);
1183        }
1184
1185      }
1186
1187      @Override
1188      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1189        switch (hash) {
1190        case 951530927: /*context*/ return new String[] {"CodeableConcept"};
1191        case -2089924569: /*appliesTo*/ return new String[] {"CodeableConcept"};
1192        case -1249512767: /*gender*/ return new String[] {"code"};
1193        case 96511: /*age*/ return new String[] {"Range"};
1194        case -241217538: /*gestationalAge*/ return new String[] {"Range"};
1195        case -861311717: /*condition*/ return new String[] {"string"};
1196        case -363410085: /*rangeCategory*/ return new String[] {"code"};
1197        case 108280125: /*range*/ return new String[] {"Range"};
1198        case 1374640076: /*validCodedValueSet*/ return new String[] {"canonical"};
1199        case -837500735: /*normalCodedValueSet*/ return new String[] {"canonical"};
1200        case 1073600256: /*abnormalCodedValueSet*/ return new String[] {"canonical"};
1201        case 2568457: /*criticalCodedValueSet*/ return new String[] {"canonical"};
1202        default: return super.getTypesForProperty(hash, name);
1203        }
1204
1205      }
1206
1207      @Override
1208      public Base addChild(String name) throws FHIRException {
1209        if (name.equals("context")) {
1210          this.context = new CodeableConcept();
1211          return this.context;
1212        }
1213        else if (name.equals("appliesTo")) {
1214          return addAppliesTo();
1215        }
1216        else if (name.equals("gender")) {
1217          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.qualifiedValue.gender");
1218        }
1219        else if (name.equals("age")) {
1220          this.age = new Range();
1221          return this.age;
1222        }
1223        else if (name.equals("gestationalAge")) {
1224          this.gestationalAge = new Range();
1225          return this.gestationalAge;
1226        }
1227        else if (name.equals("condition")) {
1228          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.qualifiedValue.condition");
1229        }
1230        else if (name.equals("rangeCategory")) {
1231          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.qualifiedValue.rangeCategory");
1232        }
1233        else if (name.equals("range")) {
1234          this.range = new Range();
1235          return this.range;
1236        }
1237        else if (name.equals("validCodedValueSet")) {
1238          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.qualifiedValue.validCodedValueSet");
1239        }
1240        else if (name.equals("normalCodedValueSet")) {
1241          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.qualifiedValue.normalCodedValueSet");
1242        }
1243        else if (name.equals("abnormalCodedValueSet")) {
1244          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.qualifiedValue.abnormalCodedValueSet");
1245        }
1246        else if (name.equals("criticalCodedValueSet")) {
1247          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.qualifiedValue.criticalCodedValueSet");
1248        }
1249        else
1250          return super.addChild(name);
1251      }
1252
1253      public ObservationDefinitionQualifiedValueComponent copy() {
1254        ObservationDefinitionQualifiedValueComponent dst = new ObservationDefinitionQualifiedValueComponent();
1255        copyValues(dst);
1256        return dst;
1257      }
1258
1259      public void copyValues(ObservationDefinitionQualifiedValueComponent dst) {
1260        super.copyValues(dst);
1261        dst.context = context == null ? null : context.copy();
1262        if (appliesTo != null) {
1263          dst.appliesTo = new ArrayList<CodeableConcept>();
1264          for (CodeableConcept i : appliesTo)
1265            dst.appliesTo.add(i.copy());
1266        };
1267        dst.gender = gender == null ? null : gender.copy();
1268        dst.age = age == null ? null : age.copy();
1269        dst.gestationalAge = gestationalAge == null ? null : gestationalAge.copy();
1270        dst.condition = condition == null ? null : condition.copy();
1271        dst.rangeCategory = rangeCategory == null ? null : rangeCategory.copy();
1272        dst.range = range == null ? null : range.copy();
1273        dst.validCodedValueSet = validCodedValueSet == null ? null : validCodedValueSet.copy();
1274        dst.normalCodedValueSet = normalCodedValueSet == null ? null : normalCodedValueSet.copy();
1275        dst.abnormalCodedValueSet = abnormalCodedValueSet == null ? null : abnormalCodedValueSet.copy();
1276        dst.criticalCodedValueSet = criticalCodedValueSet == null ? null : criticalCodedValueSet.copy();
1277      }
1278
1279      @Override
1280      public boolean equalsDeep(Base other_) {
1281        if (!super.equalsDeep(other_))
1282          return false;
1283        if (!(other_ instanceof ObservationDefinitionQualifiedValueComponent))
1284          return false;
1285        ObservationDefinitionQualifiedValueComponent o = (ObservationDefinitionQualifiedValueComponent) other_;
1286        return compareDeep(context, o.context, true) && compareDeep(appliesTo, o.appliesTo, true) && compareDeep(gender, o.gender, true)
1287           && compareDeep(age, o.age, true) && compareDeep(gestationalAge, o.gestationalAge, true) && compareDeep(condition, o.condition, true)
1288           && compareDeep(rangeCategory, o.rangeCategory, true) && compareDeep(range, o.range, true) && compareDeep(validCodedValueSet, o.validCodedValueSet, true)
1289           && compareDeep(normalCodedValueSet, o.normalCodedValueSet, true) && compareDeep(abnormalCodedValueSet, o.abnormalCodedValueSet, true)
1290           && compareDeep(criticalCodedValueSet, o.criticalCodedValueSet, true);
1291      }
1292
1293      @Override
1294      public boolean equalsShallow(Base other_) {
1295        if (!super.equalsShallow(other_))
1296          return false;
1297        if (!(other_ instanceof ObservationDefinitionQualifiedValueComponent))
1298          return false;
1299        ObservationDefinitionQualifiedValueComponent o = (ObservationDefinitionQualifiedValueComponent) other_;
1300        return compareValues(gender, o.gender, true) && compareValues(condition, o.condition, true) && compareValues(rangeCategory, o.rangeCategory, true)
1301           && compareValues(validCodedValueSet, o.validCodedValueSet, true) && compareValues(normalCodedValueSet, o.normalCodedValueSet, true)
1302           && compareValues(abnormalCodedValueSet, o.abnormalCodedValueSet, true) && compareValues(criticalCodedValueSet, o.criticalCodedValueSet, true)
1303          ;
1304      }
1305
1306      public boolean isEmpty() {
1307        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(context, appliesTo, gender
1308          , age, gestationalAge, condition, rangeCategory, range, validCodedValueSet, normalCodedValueSet
1309          , abnormalCodedValueSet, criticalCodedValueSet);
1310      }
1311
1312  public String fhirType() {
1313    return "ObservationDefinition.qualifiedValue";
1314
1315  }
1316
1317  }
1318
1319    @Block()
1320    public static class ObservationDefinitionComponentComponent extends BackboneElement implements IBaseBackboneElement {
1321        /**
1322         * Describes what will be observed.
1323         */
1324        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
1325        @Description(shortDefinition="Type of observation", formalDefinition="Describes what will be observed." )
1326        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-codes")
1327        protected CodeableConcept code;
1328
1329        /**
1330         * The data types allowed for the value element of the instance of this component observations.
1331         */
1332        @Child(name = "permittedDataType", type = {CodeType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1333        @Description(shortDefinition="Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period", formalDefinition="The data types allowed for the value element of the instance of this component observations." )
1334        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/permitted-data-type")
1335        protected List<Enumeration<ObservationDataType>> permittedDataType;
1336
1337        /**
1338         * Units allowed for the valueQuantity element in the instance observations conforming to this ObservationDefinition.
1339         */
1340        @Child(name = "permittedUnit", type = {Coding.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1341        @Description(shortDefinition="Unit for quantitative results", formalDefinition="Units allowed for the valueQuantity element in the instance observations conforming to this ObservationDefinition." )
1342        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ucum-units")
1343        protected List<Coding> permittedUnit;
1344
1345        /**
1346         * A set of qualified values associated with a context and a set of conditions -  provides a range for quantitative and ordinal observations and a collection of value sets for qualitative observations.
1347         */
1348        @Child(name = "qualifiedValue", type = {ObservationDefinitionQualifiedValueComponent.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1349        @Description(shortDefinition="Set of qualified values for observation results", formalDefinition="A set of qualified values associated with a context and a set of conditions -  provides a range for quantitative and ordinal observations and a collection of value sets for qualitative observations." )
1350        protected List<ObservationDefinitionQualifiedValueComponent> qualifiedValue;
1351
1352        private static final long serialVersionUID = 2106051085L;
1353
1354    /**
1355     * Constructor
1356     */
1357      public ObservationDefinitionComponentComponent() {
1358        super();
1359      }
1360
1361    /**
1362     * Constructor
1363     */
1364      public ObservationDefinitionComponentComponent(CodeableConcept code) {
1365        super();
1366        this.setCode(code);
1367      }
1368
1369        /**
1370         * @return {@link #code} (Describes what will be observed.)
1371         */
1372        public CodeableConcept getCode() { 
1373          if (this.code == null)
1374            if (Configuration.errorOnAutoCreate())
1375              throw new Error("Attempt to auto-create ObservationDefinitionComponentComponent.code");
1376            else if (Configuration.doAutoCreate())
1377              this.code = new CodeableConcept(); // cc
1378          return this.code;
1379        }
1380
1381        public boolean hasCode() { 
1382          return this.code != null && !this.code.isEmpty();
1383        }
1384
1385        /**
1386         * @param value {@link #code} (Describes what will be observed.)
1387         */
1388        public ObservationDefinitionComponentComponent setCode(CodeableConcept value) { 
1389          this.code = value;
1390          return this;
1391        }
1392
1393        /**
1394         * @return {@link #permittedDataType} (The data types allowed for the value element of the instance of this component observations.)
1395         */
1396        public List<Enumeration<ObservationDataType>> getPermittedDataType() { 
1397          if (this.permittedDataType == null)
1398            this.permittedDataType = new ArrayList<Enumeration<ObservationDataType>>();
1399          return this.permittedDataType;
1400        }
1401
1402        /**
1403         * @return Returns a reference to <code>this</code> for easy method chaining
1404         */
1405        public ObservationDefinitionComponentComponent setPermittedDataType(List<Enumeration<ObservationDataType>> thePermittedDataType) { 
1406          this.permittedDataType = thePermittedDataType;
1407          return this;
1408        }
1409
1410        public boolean hasPermittedDataType() { 
1411          if (this.permittedDataType == null)
1412            return false;
1413          for (Enumeration<ObservationDataType> item : this.permittedDataType)
1414            if (!item.isEmpty())
1415              return true;
1416          return false;
1417        }
1418
1419        /**
1420         * @return {@link #permittedDataType} (The data types allowed for the value element of the instance of this component observations.)
1421         */
1422        public Enumeration<ObservationDataType> addPermittedDataTypeElement() {//2 
1423          Enumeration<ObservationDataType> t = new Enumeration<ObservationDataType>(new ObservationDataTypeEnumFactory());
1424          if (this.permittedDataType == null)
1425            this.permittedDataType = new ArrayList<Enumeration<ObservationDataType>>();
1426          this.permittedDataType.add(t);
1427          return t;
1428        }
1429
1430        /**
1431         * @param value {@link #permittedDataType} (The data types allowed for the value element of the instance of this component observations.)
1432         */
1433        public ObservationDefinitionComponentComponent addPermittedDataType(ObservationDataType value) { //1
1434          Enumeration<ObservationDataType> t = new Enumeration<ObservationDataType>(new ObservationDataTypeEnumFactory());
1435          t.setValue(value);
1436          if (this.permittedDataType == null)
1437            this.permittedDataType = new ArrayList<Enumeration<ObservationDataType>>();
1438          this.permittedDataType.add(t);
1439          return this;
1440        }
1441
1442        /**
1443         * @param value {@link #permittedDataType} (The data types allowed for the value element of the instance of this component observations.)
1444         */
1445        public boolean hasPermittedDataType(ObservationDataType value) { 
1446          if (this.permittedDataType == null)
1447            return false;
1448          for (Enumeration<ObservationDataType> v : this.permittedDataType)
1449            if (v.getValue().equals(value)) // code
1450              return true;
1451          return false;
1452        }
1453
1454        /**
1455         * @return {@link #permittedUnit} (Units allowed for the valueQuantity element in the instance observations conforming to this ObservationDefinition.)
1456         */
1457        public List<Coding> getPermittedUnit() { 
1458          if (this.permittedUnit == null)
1459            this.permittedUnit = new ArrayList<Coding>();
1460          return this.permittedUnit;
1461        }
1462
1463        /**
1464         * @return Returns a reference to <code>this</code> for easy method chaining
1465         */
1466        public ObservationDefinitionComponentComponent setPermittedUnit(List<Coding> thePermittedUnit) { 
1467          this.permittedUnit = thePermittedUnit;
1468          return this;
1469        }
1470
1471        public boolean hasPermittedUnit() { 
1472          if (this.permittedUnit == null)
1473            return false;
1474          for (Coding item : this.permittedUnit)
1475            if (!item.isEmpty())
1476              return true;
1477          return false;
1478        }
1479
1480        public Coding addPermittedUnit() { //3
1481          Coding t = new Coding();
1482          if (this.permittedUnit == null)
1483            this.permittedUnit = new ArrayList<Coding>();
1484          this.permittedUnit.add(t);
1485          return t;
1486        }
1487
1488        public ObservationDefinitionComponentComponent addPermittedUnit(Coding t) { //3
1489          if (t == null)
1490            return this;
1491          if (this.permittedUnit == null)
1492            this.permittedUnit = new ArrayList<Coding>();
1493          this.permittedUnit.add(t);
1494          return this;
1495        }
1496
1497        /**
1498         * @return The first repetition of repeating field {@link #permittedUnit}, creating it if it does not already exist {3}
1499         */
1500        public Coding getPermittedUnitFirstRep() { 
1501          if (getPermittedUnit().isEmpty()) {
1502            addPermittedUnit();
1503          }
1504          return getPermittedUnit().get(0);
1505        }
1506
1507        /**
1508         * @return {@link #qualifiedValue} (A set of qualified values associated with a context and a set of conditions -  provides a range for quantitative and ordinal observations and a collection of value sets for qualitative observations.)
1509         */
1510        public List<ObservationDefinitionQualifiedValueComponent> getQualifiedValue() { 
1511          if (this.qualifiedValue == null)
1512            this.qualifiedValue = new ArrayList<ObservationDefinitionQualifiedValueComponent>();
1513          return this.qualifiedValue;
1514        }
1515
1516        /**
1517         * @return Returns a reference to <code>this</code> for easy method chaining
1518         */
1519        public ObservationDefinitionComponentComponent setQualifiedValue(List<ObservationDefinitionQualifiedValueComponent> theQualifiedValue) { 
1520          this.qualifiedValue = theQualifiedValue;
1521          return this;
1522        }
1523
1524        public boolean hasQualifiedValue() { 
1525          if (this.qualifiedValue == null)
1526            return false;
1527          for (ObservationDefinitionQualifiedValueComponent item : this.qualifiedValue)
1528            if (!item.isEmpty())
1529              return true;
1530          return false;
1531        }
1532
1533        public ObservationDefinitionQualifiedValueComponent addQualifiedValue() { //3
1534          ObservationDefinitionQualifiedValueComponent t = new ObservationDefinitionQualifiedValueComponent();
1535          if (this.qualifiedValue == null)
1536            this.qualifiedValue = new ArrayList<ObservationDefinitionQualifiedValueComponent>();
1537          this.qualifiedValue.add(t);
1538          return t;
1539        }
1540
1541        public ObservationDefinitionComponentComponent addQualifiedValue(ObservationDefinitionQualifiedValueComponent t) { //3
1542          if (t == null)
1543            return this;
1544          if (this.qualifiedValue == null)
1545            this.qualifiedValue = new ArrayList<ObservationDefinitionQualifiedValueComponent>();
1546          this.qualifiedValue.add(t);
1547          return this;
1548        }
1549
1550        /**
1551         * @return The first repetition of repeating field {@link #qualifiedValue}, creating it if it does not already exist {3}
1552         */
1553        public ObservationDefinitionQualifiedValueComponent getQualifiedValueFirstRep() { 
1554          if (getQualifiedValue().isEmpty()) {
1555            addQualifiedValue();
1556          }
1557          return getQualifiedValue().get(0);
1558        }
1559
1560        protected void listChildren(List<Property> children) {
1561          super.listChildren(children);
1562          children.add(new Property("code", "CodeableConcept", "Describes what will be observed.", 0, 1, code));
1563          children.add(new Property("permittedDataType", "code", "The data types allowed for the value element of the instance of this component observations.", 0, java.lang.Integer.MAX_VALUE, permittedDataType));
1564          children.add(new Property("permittedUnit", "Coding", "Units allowed for the valueQuantity element in the instance observations conforming to this ObservationDefinition.", 0, java.lang.Integer.MAX_VALUE, permittedUnit));
1565          children.add(new Property("qualifiedValue", "@ObservationDefinition.qualifiedValue", "A set of qualified values associated with a context and a set of conditions -  provides a range for quantitative and ordinal observations and a collection of value sets for qualitative observations.", 0, java.lang.Integer.MAX_VALUE, qualifiedValue));
1566        }
1567
1568        @Override
1569        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1570          switch (_hash) {
1571          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Describes what will be observed.", 0, 1, code);
1572          case -99492804: /*permittedDataType*/  return new Property("permittedDataType", "code", "The data types allowed for the value element of the instance of this component observations.", 0, java.lang.Integer.MAX_VALUE, permittedDataType);
1573          case 1073054652: /*permittedUnit*/  return new Property("permittedUnit", "Coding", "Units allowed for the valueQuantity element in the instance observations conforming to this ObservationDefinition.", 0, java.lang.Integer.MAX_VALUE, permittedUnit);
1574          case -558517707: /*qualifiedValue*/  return new Property("qualifiedValue", "@ObservationDefinition.qualifiedValue", "A set of qualified values associated with a context and a set of conditions -  provides a range for quantitative and ordinal observations and a collection of value sets for qualitative observations.", 0, java.lang.Integer.MAX_VALUE, qualifiedValue);
1575          default: return super.getNamedProperty(_hash, _name, _checkValid);
1576          }
1577
1578        }
1579
1580      @Override
1581      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1582        switch (hash) {
1583        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1584        case -99492804: /*permittedDataType*/ return this.permittedDataType == null ? new Base[0] : this.permittedDataType.toArray(new Base[this.permittedDataType.size()]); // Enumeration<ObservationDataType>
1585        case 1073054652: /*permittedUnit*/ return this.permittedUnit == null ? new Base[0] : this.permittedUnit.toArray(new Base[this.permittedUnit.size()]); // Coding
1586        case -558517707: /*qualifiedValue*/ return this.qualifiedValue == null ? new Base[0] : this.qualifiedValue.toArray(new Base[this.qualifiedValue.size()]); // ObservationDefinitionQualifiedValueComponent
1587        default: return super.getProperty(hash, name, checkValid);
1588        }
1589
1590      }
1591
1592      @Override
1593      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1594        switch (hash) {
1595        case 3059181: // code
1596          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1597          return value;
1598        case -99492804: // permittedDataType
1599          value = new ObservationDataTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1600          this.getPermittedDataType().add((Enumeration) value); // Enumeration<ObservationDataType>
1601          return value;
1602        case 1073054652: // permittedUnit
1603          this.getPermittedUnit().add(TypeConvertor.castToCoding(value)); // Coding
1604          return value;
1605        case -558517707: // qualifiedValue
1606          this.getQualifiedValue().add((ObservationDefinitionQualifiedValueComponent) value); // ObservationDefinitionQualifiedValueComponent
1607          return value;
1608        default: return super.setProperty(hash, name, value);
1609        }
1610
1611      }
1612
1613      @Override
1614      public Base setProperty(String name, Base value) throws FHIRException {
1615        if (name.equals("code")) {
1616          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1617        } else if (name.equals("permittedDataType")) {
1618          value = new ObservationDataTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1619          this.getPermittedDataType().add((Enumeration) value);
1620        } else if (name.equals("permittedUnit")) {
1621          this.getPermittedUnit().add(TypeConvertor.castToCoding(value));
1622        } else if (name.equals("qualifiedValue")) {
1623          this.getQualifiedValue().add((ObservationDefinitionQualifiedValueComponent) value);
1624        } else
1625          return super.setProperty(name, value);
1626        return value;
1627      }
1628
1629  @Override
1630  public void removeChild(String name, Base value) throws FHIRException {
1631        if (name.equals("code")) {
1632          this.code = null;
1633        } else if (name.equals("permittedDataType")) {
1634          value = new ObservationDataTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1635          this.getPermittedDataType().remove((Enumeration) value);
1636        } else if (name.equals("permittedUnit")) {
1637          this.getPermittedUnit().remove(value);
1638        } else if (name.equals("qualifiedValue")) {
1639          this.getQualifiedValue().remove((ObservationDefinitionQualifiedValueComponent) value);
1640        } else
1641          super.removeChild(name, value);
1642        
1643      }
1644
1645      @Override
1646      public Base makeProperty(int hash, String name) throws FHIRException {
1647        switch (hash) {
1648        case 3059181:  return getCode();
1649        case -99492804:  return addPermittedDataTypeElement();
1650        case 1073054652:  return addPermittedUnit(); 
1651        case -558517707:  return addQualifiedValue(); 
1652        default: return super.makeProperty(hash, name);
1653        }
1654
1655      }
1656
1657      @Override
1658      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1659        switch (hash) {
1660        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1661        case -99492804: /*permittedDataType*/ return new String[] {"code"};
1662        case 1073054652: /*permittedUnit*/ return new String[] {"Coding"};
1663        case -558517707: /*qualifiedValue*/ return new String[] {"@ObservationDefinition.qualifiedValue"};
1664        default: return super.getTypesForProperty(hash, name);
1665        }
1666
1667      }
1668
1669      @Override
1670      public Base addChild(String name) throws FHIRException {
1671        if (name.equals("code")) {
1672          this.code = new CodeableConcept();
1673          return this.code;
1674        }
1675        else if (name.equals("permittedDataType")) {
1676          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.component.permittedDataType");
1677        }
1678        else if (name.equals("permittedUnit")) {
1679          return addPermittedUnit();
1680        }
1681        else if (name.equals("qualifiedValue")) {
1682          return addQualifiedValue();
1683        }
1684        else
1685          return super.addChild(name);
1686      }
1687
1688      public ObservationDefinitionComponentComponent copy() {
1689        ObservationDefinitionComponentComponent dst = new ObservationDefinitionComponentComponent();
1690        copyValues(dst);
1691        return dst;
1692      }
1693
1694      public void copyValues(ObservationDefinitionComponentComponent dst) {
1695        super.copyValues(dst);
1696        dst.code = code == null ? null : code.copy();
1697        if (permittedDataType != null) {
1698          dst.permittedDataType = new ArrayList<Enumeration<ObservationDataType>>();
1699          for (Enumeration<ObservationDataType> i : permittedDataType)
1700            dst.permittedDataType.add(i.copy());
1701        };
1702        if (permittedUnit != null) {
1703          dst.permittedUnit = new ArrayList<Coding>();
1704          for (Coding i : permittedUnit)
1705            dst.permittedUnit.add(i.copy());
1706        };
1707        if (qualifiedValue != null) {
1708          dst.qualifiedValue = new ArrayList<ObservationDefinitionQualifiedValueComponent>();
1709          for (ObservationDefinitionQualifiedValueComponent i : qualifiedValue)
1710            dst.qualifiedValue.add(i.copy());
1711        };
1712      }
1713
1714      @Override
1715      public boolean equalsDeep(Base other_) {
1716        if (!super.equalsDeep(other_))
1717          return false;
1718        if (!(other_ instanceof ObservationDefinitionComponentComponent))
1719          return false;
1720        ObservationDefinitionComponentComponent o = (ObservationDefinitionComponentComponent) other_;
1721        return compareDeep(code, o.code, true) && compareDeep(permittedDataType, o.permittedDataType, true)
1722           && compareDeep(permittedUnit, o.permittedUnit, true) && compareDeep(qualifiedValue, o.qualifiedValue, true)
1723          ;
1724      }
1725
1726      @Override
1727      public boolean equalsShallow(Base other_) {
1728        if (!super.equalsShallow(other_))
1729          return false;
1730        if (!(other_ instanceof ObservationDefinitionComponentComponent))
1731          return false;
1732        ObservationDefinitionComponentComponent o = (ObservationDefinitionComponentComponent) other_;
1733        return compareValues(permittedDataType, o.permittedDataType, true);
1734      }
1735
1736      public boolean isEmpty() {
1737        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, permittedDataType, permittedUnit
1738          , qualifiedValue);
1739      }
1740
1741  public String fhirType() {
1742    return "ObservationDefinition.component";
1743
1744  }
1745
1746  }
1747
1748    /**
1749     * An absolute URL that is used to identify this ObservationDefinition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this ObservationDefinition is (or will be) published. The URL SHOULD include the major version of the ObservationDefinition. For more information see Technical and Business Versions.
1750     */
1751    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
1752    @Description(shortDefinition="Logical canonical URL to reference this ObservationDefinition (globally unique)", formalDefinition="An absolute URL that is used to identify this ObservationDefinition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this ObservationDefinition is (or will be) published. The URL SHOULD include the major version of the ObservationDefinition. For more information see Technical and Business Versions." )
1753    protected UriType url;
1754
1755    /**
1756     * Business identifiers assigned to this ObservationDefinition. by the performer and/or other systems. These identifiers remain constant as the resource is updated and propagates from server to server.
1757     */
1758    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=1, modifier=false, summary=true)
1759    @Description(shortDefinition="Business identifier of the ObservationDefinition", formalDefinition="Business identifiers assigned to this ObservationDefinition. by the performer and/or other systems. These identifiers remain constant as the resource is updated and propagates from server to server." )
1760    protected Identifier identifier;
1761
1762    /**
1763     * The identifier that is used to identify this version of the ObservationDefinition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the ObservationDefinition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.
1764     */
1765    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1766    @Description(shortDefinition="Business version of the ObservationDefinition", formalDefinition="The identifier that is used to identify this version of the ObservationDefinition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the ObservationDefinition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable." )
1767    protected StringType version;
1768
1769    /**
1770     * Indicates the mechanism used to compare versions to determine which is more current.
1771     */
1772    @Child(name = "versionAlgorithm", type = {StringType.class, Coding.class}, order=3, min=0, max=1, modifier=false, summary=true)
1773    @Description(shortDefinition="How to compare versions", formalDefinition="Indicates the mechanism used to compare versions to determine which is more current." )
1774    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/version-algorithm")
1775    protected DataType versionAlgorithm;
1776
1777    /**
1778     * A natural language name identifying the ObservationDefinition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
1779     */
1780    @Child(name = "name", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
1781    @Description(shortDefinition="Name for this ObservationDefinition (computer friendly)", formalDefinition="A natural language name identifying the ObservationDefinition. This name should be usable as an identifier for the module by machine processing applications such as code generation." )
1782    protected StringType name;
1783
1784    /**
1785     * A short, descriptive, user-friendly title for the ObservationDefinition.
1786     */
1787    @Child(name = "title", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
1788    @Description(shortDefinition="Name for this ObservationDefinition (human friendly)", formalDefinition="A short, descriptive, user-friendly title for the ObservationDefinition." )
1789    protected StringType title;
1790
1791    /**
1792     * The current state of the ObservationDefinition.
1793     */
1794    @Child(name = "status", type = {CodeType.class}, order=6, min=1, max=1, modifier=true, summary=true)
1795    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The current state of the ObservationDefinition." )
1796    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
1797    protected Enumeration<PublicationStatus> status;
1798
1799    /**
1800     * A flag to indicate that this ObservationDefinition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
1801     */
1802    @Child(name = "experimental", type = {BooleanType.class}, order=7, min=0, max=1, modifier=false, summary=true)
1803    @Description(shortDefinition="If for testing purposes, not real usage", formalDefinition="A flag to indicate that this ObservationDefinition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage." )
1804    protected BooleanType experimental;
1805
1806    /**
1807     * The date (and optionally time) when the ObservationDefinition was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ObservationDefinition changes.
1808     */
1809    @Child(name = "date", type = {DateTimeType.class}, order=8, min=0, max=1, modifier=false, summary=true)
1810    @Description(shortDefinition="Date last changed", formalDefinition="The date (and optionally time) when the ObservationDefinition was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ObservationDefinition changes." )
1811    protected DateTimeType date;
1812
1813    /**
1814     * Helps establish the "authority/credibility" of the ObservationDefinition. May also allow for contact.
1815     */
1816    @Child(name = "publisher", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1817    @Description(shortDefinition="The name of the individual or organization that published the ObservationDefinition", formalDefinition="Helps establish the \"authority/credibility\" of the ObservationDefinition. May also allow for contact." )
1818    protected StringType publisher;
1819
1820    /**
1821     * Contact details to assist a user in finding and communicating with the publisher.
1822     */
1823    @Child(name = "contact", type = {ContactDetail.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1824    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
1825    protected List<ContactDetail> contact;
1826
1827    /**
1828     * A free text natural language description of the ObservationDefinition from the consumer's perspective.
1829     */
1830    @Child(name = "description", type = {MarkdownType.class}, order=11, min=0, max=1, modifier=false, summary=false)
1831    @Description(shortDefinition="Natural language description of the ObservationDefinition", formalDefinition="A free text natural language description of the ObservationDefinition from the consumer's perspective." )
1832    protected MarkdownType description;
1833
1834    /**
1835     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate ObservationDefinition instances.
1836     */
1837    @Child(name = "useContext", type = {UsageContext.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1838    @Description(shortDefinition="Content intends to support these contexts", formalDefinition="The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate ObservationDefinition instances." )
1839    protected List<UsageContext> useContext;
1840
1841    /**
1842     * A jurisdiction in which the ObservationDefinition is intended to be used.
1843     */
1844    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1845    @Description(shortDefinition="Intended jurisdiction for this ObservationDefinition (if applicable)", formalDefinition="A jurisdiction in which the ObservationDefinition is intended to be used." )
1846    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
1847    protected List<CodeableConcept> jurisdiction;
1848
1849    /**
1850     * Explains why this ObservationDefinition is needed and why it has been designed as it has.
1851     */
1852    @Child(name = "purpose", type = {MarkdownType.class}, order=14, min=0, max=1, modifier=false, summary=false)
1853    @Description(shortDefinition="Why this ObservationDefinition is defined", formalDefinition="Explains why this ObservationDefinition is needed and why it has been designed as it has." )
1854    protected MarkdownType purpose;
1855
1856    /**
1857     * Copyright statement relating to the ObservationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the ObservationDefinition.
1858     */
1859    @Child(name = "copyright", type = {MarkdownType.class}, order=15, min=0, max=1, modifier=false, summary=false)
1860    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="Copyright statement relating to the ObservationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the ObservationDefinition." )
1861    protected MarkdownType copyright;
1862
1863    /**
1864     * A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').
1865     */
1866    @Child(name = "copyrightLabel", type = {StringType.class}, order=16, min=0, max=1, modifier=false, summary=false)
1867    @Description(shortDefinition="Copyright holder and year(s)", formalDefinition="A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved')." )
1868    protected StringType copyrightLabel;
1869
1870    /**
1871     * The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.
1872     */
1873    @Child(name = "approvalDate", type = {DateType.class}, order=17, min=0, max=1, modifier=false, summary=false)
1874    @Description(shortDefinition="When ObservationDefinition was approved by publisher", formalDefinition="The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage." )
1875    protected DateType approvalDate;
1876
1877    /**
1878     * The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.
1879     */
1880    @Child(name = "lastReviewDate", type = {DateType.class}, order=18, min=0, max=1, modifier=false, summary=false)
1881    @Description(shortDefinition="Date on which the asset content was last reviewed by the publisher", formalDefinition="The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date." )
1882    protected DateType lastReviewDate;
1883
1884    /**
1885     * The period during which the ObservationDefinition content was or is planned to be effective.
1886     */
1887    @Child(name = "effectivePeriod", type = {Period.class}, order=19, min=0, max=1, modifier=false, summary=true)
1888    @Description(shortDefinition="The effective date range for the ObservationDefinition", formalDefinition="The period during which the ObservationDefinition content was or is planned to be effective." )
1889    protected Period effectivePeriod;
1890
1891    /**
1892     * The canonical URL pointing to another FHIR-defined ObservationDefinition that is adhered to in whole or in part by this definition.
1893     */
1894    @Child(name = "derivedFromCanonical", type = {CanonicalType.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1895    @Description(shortDefinition="Based on FHIR definition of another observation", formalDefinition="The canonical URL pointing to another FHIR-defined ObservationDefinition that is adhered to in whole or in part by this definition." )
1896    protected List<CanonicalType> derivedFromCanonical;
1897
1898    /**
1899     * The URL pointing to an externally-defined observation definition, guideline or other definition that is adhered to in whole or in part by this definition.
1900     */
1901    @Child(name = "derivedFromUri", type = {UriType.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1902    @Description(shortDefinition="Based on external definition", formalDefinition="The URL pointing to an externally-defined observation definition, guideline or other definition that is adhered to in whole or in part by this definition." )
1903    protected List<UriType> derivedFromUri;
1904
1905    /**
1906     * A code that describes the intended kind of subject of Observation instances conforming to this ObservationDefinition.
1907     */
1908    @Child(name = "subject", type = {CodeableConcept.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1909    @Description(shortDefinition="Type of subject for the defined observation", formalDefinition="A code that describes the intended kind of subject of Observation instances conforming to this ObservationDefinition." )
1910    protected List<CodeableConcept> subject;
1911
1912    /**
1913     * The type of individual/organization/device that is expected to act upon instances of this definition.
1914     */
1915    @Child(name = "performerType", type = {CodeableConcept.class}, order=23, min=0, max=1, modifier=false, summary=true)
1916    @Description(shortDefinition="Desired kind of performer for such kind of observation", formalDefinition="The type of individual/organization/device that is expected to act upon instances of this definition." )
1917    protected CodeableConcept performerType;
1918
1919    /**
1920     * A code that classifies the general type of observation.
1921     */
1922    @Child(name = "category", type = {CodeableConcept.class}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1923    @Description(shortDefinition="General type of observation", formalDefinition="A code that classifies the general type of observation." )
1924    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-category")
1925    protected List<CodeableConcept> category;
1926
1927    /**
1928     * Describes what will be observed. Sometimes this is called the observation "name".
1929     */
1930    @Child(name = "code", type = {CodeableConcept.class}, order=25, min=1, max=1, modifier=false, summary=true)
1931    @Description(shortDefinition="Type of observation", formalDefinition="Describes what will be observed. Sometimes this is called the observation \"name\"." )
1932    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-codes")
1933    protected CodeableConcept code;
1934
1935    /**
1936     * The data types allowed for the value element of the instance observations conforming to this ObservationDefinition.
1937     */
1938    @Child(name = "permittedDataType", type = {CodeType.class}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1939    @Description(shortDefinition="Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period", formalDefinition="The data types allowed for the value element of the instance observations conforming to this ObservationDefinition." )
1940    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/permitted-data-type")
1941    protected List<Enumeration<ObservationDataType>> permittedDataType;
1942
1943    /**
1944     * Multiple results allowed for observations conforming to this ObservationDefinition.
1945     */
1946    @Child(name = "multipleResultsAllowed", type = {BooleanType.class}, order=27, min=0, max=1, modifier=false, summary=false)
1947    @Description(shortDefinition="Multiple results allowed for conforming observations", formalDefinition="Multiple results allowed for observations conforming to this ObservationDefinition." )
1948    protected BooleanType multipleResultsAllowed;
1949
1950    /**
1951     * The site on the subject's body where the  observation is to be made.
1952     */
1953    @Child(name = "bodySite", type = {CodeableConcept.class}, order=28, min=0, max=1, modifier=false, summary=false)
1954    @Description(shortDefinition="Body part to be observed", formalDefinition="The site on the subject's body where the  observation is to be made." )
1955    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/body-site")
1956    protected CodeableConcept bodySite;
1957
1958    /**
1959     * The method or technique used to perform the observation.
1960     */
1961    @Child(name = "method", type = {CodeableConcept.class}, order=29, min=0, max=1, modifier=false, summary=false)
1962    @Description(shortDefinition="Method used to produce the observation", formalDefinition="The method or technique used to perform the observation." )
1963    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-methods")
1964    protected CodeableConcept method;
1965
1966    /**
1967     * The kind of specimen that this type of observation is produced on.
1968     */
1969    @Child(name = "specimen", type = {SpecimenDefinition.class}, order=30, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1970    @Description(shortDefinition="Kind of specimen used by this type of observation", formalDefinition="The kind of specimen that this type of observation is produced on." )
1971    protected List<Reference> specimen;
1972
1973    /**
1974     * The measurement model of device or actual device used to produce observations of this type.
1975     */
1976    @Child(name = "device", type = {DeviceDefinition.class, Device.class}, order=31, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1977    @Description(shortDefinition="Measurement device or model of device", formalDefinition="The measurement model of device or actual device used to produce observations of this type." )
1978    protected List<Reference> device;
1979
1980    /**
1981     * The preferred name to be used when reporting the results of observations conforming to this ObservationDefinition.
1982     */
1983    @Child(name = "preferredReportName", type = {StringType.class}, order=32, min=0, max=1, modifier=false, summary=false)
1984    @Description(shortDefinition="The preferred name to be used when reporting the observation results", formalDefinition="The preferred name to be used when reporting the results of observations conforming to this ObservationDefinition." )
1985    protected StringType preferredReportName;
1986
1987    /**
1988     * Units allowed for the valueQuantity element in the instance observations conforming to this ObservationDefinition.
1989     */
1990    @Child(name = "permittedUnit", type = {Coding.class}, order=33, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1991    @Description(shortDefinition="Unit for quantitative results", formalDefinition="Units allowed for the valueQuantity element in the instance observations conforming to this ObservationDefinition." )
1992    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ucum-units")
1993    protected List<Coding> permittedUnit;
1994
1995    /**
1996     * A set of qualified values associated with a context and a set of conditions -  provides a range for quantitative and ordinal observations and a collection of value sets for qualitative observations.
1997     */
1998    @Child(name = "qualifiedValue", type = {}, order=34, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1999    @Description(shortDefinition="Set of qualified values for observation results", formalDefinition="A set of qualified values associated with a context and a set of conditions -  provides a range for quantitative and ordinal observations and a collection of value sets for qualitative observations." )
2000    protected List<ObservationDefinitionQualifiedValueComponent> qualifiedValue;
2001
2002    /**
2003     * This ObservationDefinition defines 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.
2004     */
2005    @Child(name = "hasMember", type = {ObservationDefinition.class, Questionnaire.class}, order=35, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2006    @Description(shortDefinition="Definitions of related resources belonging to this kind of observation group", formalDefinition="This ObservationDefinition defines 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." )
2007    protected List<Reference> hasMember;
2008
2009    /**
2010     * Some observations have multiple component observations, expressed as separate code value pairs.
2011     */
2012    @Child(name = "component", type = {}, order=36, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2013    @Description(shortDefinition="Component results", formalDefinition="Some observations have multiple component observations, expressed as separate code value pairs." )
2014    protected List<ObservationDefinitionComponentComponent> component;
2015
2016    private static final long serialVersionUID = -415480292L;
2017
2018  /**
2019   * Constructor
2020   */
2021    public ObservationDefinition() {
2022      super();
2023    }
2024
2025  /**
2026   * Constructor
2027   */
2028    public ObservationDefinition(PublicationStatus status, CodeableConcept code) {
2029      super();
2030      this.setStatus(status);
2031      this.setCode(code);
2032    }
2033
2034    /**
2035     * @return {@link #url} (An absolute URL that is used to identify this ObservationDefinition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this ObservationDefinition is (or will be) published. The URL SHOULD include the major version of the ObservationDefinition. For more information see Technical and Business Versions.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2036     */
2037    public UriType getUrlElement() { 
2038      if (this.url == null)
2039        if (Configuration.errorOnAutoCreate())
2040          throw new Error("Attempt to auto-create ObservationDefinition.url");
2041        else if (Configuration.doAutoCreate())
2042          this.url = new UriType(); // bb
2043      return this.url;
2044    }
2045
2046    public boolean hasUrlElement() { 
2047      return this.url != null && !this.url.isEmpty();
2048    }
2049
2050    public boolean hasUrl() { 
2051      return this.url != null && !this.url.isEmpty();
2052    }
2053
2054    /**
2055     * @param value {@link #url} (An absolute URL that is used to identify this ObservationDefinition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this ObservationDefinition is (or will be) published. The URL SHOULD include the major version of the ObservationDefinition. For more information see Technical and Business Versions.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2056     */
2057    public ObservationDefinition setUrlElement(UriType value) { 
2058      this.url = value;
2059      return this;
2060    }
2061
2062    /**
2063     * @return An absolute URL that is used to identify this ObservationDefinition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this ObservationDefinition is (or will be) published. The URL SHOULD include the major version of the ObservationDefinition. For more information see Technical and Business Versions.
2064     */
2065    public String getUrl() { 
2066      return this.url == null ? null : this.url.getValue();
2067    }
2068
2069    /**
2070     * @param value An absolute URL that is used to identify this ObservationDefinition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this ObservationDefinition is (or will be) published. The URL SHOULD include the major version of the ObservationDefinition. For more information see Technical and Business Versions.
2071     */
2072    public ObservationDefinition setUrl(String value) { 
2073      if (Utilities.noString(value))
2074        this.url = null;
2075      else {
2076        if (this.url == null)
2077          this.url = new UriType();
2078        this.url.setValue(value);
2079      }
2080      return this;
2081    }
2082
2083    /**
2084     * @return {@link #identifier} (Business identifiers assigned to this ObservationDefinition. by the performer and/or other systems. These identifiers remain constant as the resource is updated and propagates from server to server.)
2085     */
2086    public Identifier getIdentifier() { 
2087      if (this.identifier == null)
2088        if (Configuration.errorOnAutoCreate())
2089          throw new Error("Attempt to auto-create ObservationDefinition.identifier");
2090        else if (Configuration.doAutoCreate())
2091          this.identifier = new Identifier(); // cc
2092      return this.identifier;
2093    }
2094
2095    public boolean hasIdentifier() { 
2096      return this.identifier != null && !this.identifier.isEmpty();
2097    }
2098
2099    /**
2100     * @param value {@link #identifier} (Business identifiers assigned to this ObservationDefinition. by the performer and/or other systems. These identifiers remain constant as the resource is updated and propagates from server to server.)
2101     */
2102    public ObservationDefinition setIdentifier(Identifier value) { 
2103      this.identifier = value;
2104      return this;
2105    }
2106
2107    /**
2108     * @return {@link #version} (The identifier that is used to identify this version of the ObservationDefinition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the ObservationDefinition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
2109     */
2110    public StringType getVersionElement() { 
2111      if (this.version == null)
2112        if (Configuration.errorOnAutoCreate())
2113          throw new Error("Attempt to auto-create ObservationDefinition.version");
2114        else if (Configuration.doAutoCreate())
2115          this.version = new StringType(); // bb
2116      return this.version;
2117    }
2118
2119    public boolean hasVersionElement() { 
2120      return this.version != null && !this.version.isEmpty();
2121    }
2122
2123    public boolean hasVersion() { 
2124      return this.version != null && !this.version.isEmpty();
2125    }
2126
2127    /**
2128     * @param value {@link #version} (The identifier that is used to identify this version of the ObservationDefinition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the ObservationDefinition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
2129     */
2130    public ObservationDefinition setVersionElement(StringType value) { 
2131      this.version = value;
2132      return this;
2133    }
2134
2135    /**
2136     * @return The identifier that is used to identify this version of the ObservationDefinition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the ObservationDefinition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.
2137     */
2138    public String getVersion() { 
2139      return this.version == null ? null : this.version.getValue();
2140    }
2141
2142    /**
2143     * @param value The identifier that is used to identify this version of the ObservationDefinition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the ObservationDefinition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.
2144     */
2145    public ObservationDefinition setVersion(String value) { 
2146      if (Utilities.noString(value))
2147        this.version = null;
2148      else {
2149        if (this.version == null)
2150          this.version = new StringType();
2151        this.version.setValue(value);
2152      }
2153      return this;
2154    }
2155
2156    /**
2157     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which is more current.)
2158     */
2159    public DataType getVersionAlgorithm() { 
2160      return this.versionAlgorithm;
2161    }
2162
2163    /**
2164     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which is more current.)
2165     */
2166    public StringType getVersionAlgorithmStringType() throws FHIRException { 
2167      if (this.versionAlgorithm == null)
2168        this.versionAlgorithm = new StringType();
2169      if (!(this.versionAlgorithm instanceof StringType))
2170        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.versionAlgorithm.getClass().getName()+" was encountered");
2171      return (StringType) this.versionAlgorithm;
2172    }
2173
2174    public boolean hasVersionAlgorithmStringType() { 
2175      return this != null && this.versionAlgorithm instanceof StringType;
2176    }
2177
2178    /**
2179     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which is more current.)
2180     */
2181    public Coding getVersionAlgorithmCoding() throws FHIRException { 
2182      if (this.versionAlgorithm == null)
2183        this.versionAlgorithm = new Coding();
2184      if (!(this.versionAlgorithm instanceof Coding))
2185        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.versionAlgorithm.getClass().getName()+" was encountered");
2186      return (Coding) this.versionAlgorithm;
2187    }
2188
2189    public boolean hasVersionAlgorithmCoding() { 
2190      return this != null && this.versionAlgorithm instanceof Coding;
2191    }
2192
2193    public boolean hasVersionAlgorithm() { 
2194      return this.versionAlgorithm != null && !this.versionAlgorithm.isEmpty();
2195    }
2196
2197    /**
2198     * @param value {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which is more current.)
2199     */
2200    public ObservationDefinition setVersionAlgorithm(DataType value) { 
2201      if (value != null && !(value instanceof StringType || value instanceof Coding))
2202        throw new FHIRException("Not the right type for ObservationDefinition.versionAlgorithm[x]: "+value.fhirType());
2203      this.versionAlgorithm = value;
2204      return this;
2205    }
2206
2207    /**
2208     * @return {@link #name} (A natural language name identifying the ObservationDefinition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2209     */
2210    public StringType getNameElement() { 
2211      if (this.name == null)
2212        if (Configuration.errorOnAutoCreate())
2213          throw new Error("Attempt to auto-create ObservationDefinition.name");
2214        else if (Configuration.doAutoCreate())
2215          this.name = new StringType(); // bb
2216      return this.name;
2217    }
2218
2219    public boolean hasNameElement() { 
2220      return this.name != null && !this.name.isEmpty();
2221    }
2222
2223    public boolean hasName() { 
2224      return this.name != null && !this.name.isEmpty();
2225    }
2226
2227    /**
2228     * @param value {@link #name} (A natural language name identifying the ObservationDefinition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2229     */
2230    public ObservationDefinition setNameElement(StringType value) { 
2231      this.name = value;
2232      return this;
2233    }
2234
2235    /**
2236     * @return A natural language name identifying the ObservationDefinition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
2237     */
2238    public String getName() { 
2239      return this.name == null ? null : this.name.getValue();
2240    }
2241
2242    /**
2243     * @param value A natural language name identifying the ObservationDefinition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
2244     */
2245    public ObservationDefinition setName(String value) { 
2246      if (Utilities.noString(value))
2247        this.name = null;
2248      else {
2249        if (this.name == null)
2250          this.name = new StringType();
2251        this.name.setValue(value);
2252      }
2253      return this;
2254    }
2255
2256    /**
2257     * @return {@link #title} (A short, descriptive, user-friendly title for the ObservationDefinition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
2258     */
2259    public StringType getTitleElement() { 
2260      if (this.title == null)
2261        if (Configuration.errorOnAutoCreate())
2262          throw new Error("Attempt to auto-create ObservationDefinition.title");
2263        else if (Configuration.doAutoCreate())
2264          this.title = new StringType(); // bb
2265      return this.title;
2266    }
2267
2268    public boolean hasTitleElement() { 
2269      return this.title != null && !this.title.isEmpty();
2270    }
2271
2272    public boolean hasTitle() { 
2273      return this.title != null && !this.title.isEmpty();
2274    }
2275
2276    /**
2277     * @param value {@link #title} (A short, descriptive, user-friendly title for the ObservationDefinition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
2278     */
2279    public ObservationDefinition setTitleElement(StringType value) { 
2280      this.title = value;
2281      return this;
2282    }
2283
2284    /**
2285     * @return A short, descriptive, user-friendly title for the ObservationDefinition.
2286     */
2287    public String getTitle() { 
2288      return this.title == null ? null : this.title.getValue();
2289    }
2290
2291    /**
2292     * @param value A short, descriptive, user-friendly title for the ObservationDefinition.
2293     */
2294    public ObservationDefinition setTitle(String value) { 
2295      if (Utilities.noString(value))
2296        this.title = null;
2297      else {
2298        if (this.title == null)
2299          this.title = new StringType();
2300        this.title.setValue(value);
2301      }
2302      return this;
2303    }
2304
2305    /**
2306     * @return {@link #status} (The current state of the ObservationDefinition.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2307     */
2308    public Enumeration<PublicationStatus> getStatusElement() { 
2309      if (this.status == null)
2310        if (Configuration.errorOnAutoCreate())
2311          throw new Error("Attempt to auto-create ObservationDefinition.status");
2312        else if (Configuration.doAutoCreate())
2313          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
2314      return this.status;
2315    }
2316
2317    public boolean hasStatusElement() { 
2318      return this.status != null && !this.status.isEmpty();
2319    }
2320
2321    public boolean hasStatus() { 
2322      return this.status != null && !this.status.isEmpty();
2323    }
2324
2325    /**
2326     * @param value {@link #status} (The current state of the ObservationDefinition.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2327     */
2328    public ObservationDefinition setStatusElement(Enumeration<PublicationStatus> value) { 
2329      this.status = value;
2330      return this;
2331    }
2332
2333    /**
2334     * @return The current state of the ObservationDefinition.
2335     */
2336    public PublicationStatus getStatus() { 
2337      return this.status == null ? null : this.status.getValue();
2338    }
2339
2340    /**
2341     * @param value The current state of the ObservationDefinition.
2342     */
2343    public ObservationDefinition setStatus(PublicationStatus value) { 
2344        if (this.status == null)
2345          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
2346        this.status.setValue(value);
2347      return this;
2348    }
2349
2350    /**
2351     * @return {@link #experimental} (A flag to indicate that this ObservationDefinition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
2352     */
2353    public BooleanType getExperimentalElement() { 
2354      if (this.experimental == null)
2355        if (Configuration.errorOnAutoCreate())
2356          throw new Error("Attempt to auto-create ObservationDefinition.experimental");
2357        else if (Configuration.doAutoCreate())
2358          this.experimental = new BooleanType(); // bb
2359      return this.experimental;
2360    }
2361
2362    public boolean hasExperimentalElement() { 
2363      return this.experimental != null && !this.experimental.isEmpty();
2364    }
2365
2366    public boolean hasExperimental() { 
2367      return this.experimental != null && !this.experimental.isEmpty();
2368    }
2369
2370    /**
2371     * @param value {@link #experimental} (A flag to indicate that this ObservationDefinition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
2372     */
2373    public ObservationDefinition setExperimentalElement(BooleanType value) { 
2374      this.experimental = value;
2375      return this;
2376    }
2377
2378    /**
2379     * @return A flag to indicate that this ObservationDefinition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
2380     */
2381    public boolean getExperimental() { 
2382      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
2383    }
2384
2385    /**
2386     * @param value A flag to indicate that this ObservationDefinition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
2387     */
2388    public ObservationDefinition setExperimental(boolean value) { 
2389        if (this.experimental == null)
2390          this.experimental = new BooleanType();
2391        this.experimental.setValue(value);
2392      return this;
2393    }
2394
2395    /**
2396     * @return {@link #date} (The date (and optionally time) when the ObservationDefinition was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ObservationDefinition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2397     */
2398    public DateTimeType getDateElement() { 
2399      if (this.date == null)
2400        if (Configuration.errorOnAutoCreate())
2401          throw new Error("Attempt to auto-create ObservationDefinition.date");
2402        else if (Configuration.doAutoCreate())
2403          this.date = new DateTimeType(); // bb
2404      return this.date;
2405    }
2406
2407    public boolean hasDateElement() { 
2408      return this.date != null && !this.date.isEmpty();
2409    }
2410
2411    public boolean hasDate() { 
2412      return this.date != null && !this.date.isEmpty();
2413    }
2414
2415    /**
2416     * @param value {@link #date} (The date (and optionally time) when the ObservationDefinition was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ObservationDefinition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2417     */
2418    public ObservationDefinition setDateElement(DateTimeType value) { 
2419      this.date = value;
2420      return this;
2421    }
2422
2423    /**
2424     * @return The date (and optionally time) when the ObservationDefinition was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ObservationDefinition changes.
2425     */
2426    public Date getDate() { 
2427      return this.date == null ? null : this.date.getValue();
2428    }
2429
2430    /**
2431     * @param value The date (and optionally time) when the ObservationDefinition was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ObservationDefinition changes.
2432     */
2433    public ObservationDefinition setDate(Date value) { 
2434      if (value == null)
2435        this.date = null;
2436      else {
2437        if (this.date == null)
2438          this.date = new DateTimeType();
2439        this.date.setValue(value);
2440      }
2441      return this;
2442    }
2443
2444    /**
2445     * @return {@link #publisher} (Helps establish the "authority/credibility" of the ObservationDefinition. May also allow for contact.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2446     */
2447    public StringType getPublisherElement() { 
2448      if (this.publisher == null)
2449        if (Configuration.errorOnAutoCreate())
2450          throw new Error("Attempt to auto-create ObservationDefinition.publisher");
2451        else if (Configuration.doAutoCreate())
2452          this.publisher = new StringType(); // bb
2453      return this.publisher;
2454    }
2455
2456    public boolean hasPublisherElement() { 
2457      return this.publisher != null && !this.publisher.isEmpty();
2458    }
2459
2460    public boolean hasPublisher() { 
2461      return this.publisher != null && !this.publisher.isEmpty();
2462    }
2463
2464    /**
2465     * @param value {@link #publisher} (Helps establish the "authority/credibility" of the ObservationDefinition. May also allow for contact.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2466     */
2467    public ObservationDefinition setPublisherElement(StringType value) { 
2468      this.publisher = value;
2469      return this;
2470    }
2471
2472    /**
2473     * @return Helps establish the "authority/credibility" of the ObservationDefinition. May also allow for contact.
2474     */
2475    public String getPublisher() { 
2476      return this.publisher == null ? null : this.publisher.getValue();
2477    }
2478
2479    /**
2480     * @param value Helps establish the "authority/credibility" of the ObservationDefinition. May also allow for contact.
2481     */
2482    public ObservationDefinition setPublisher(String value) { 
2483      if (Utilities.noString(value))
2484        this.publisher = null;
2485      else {
2486        if (this.publisher == null)
2487          this.publisher = new StringType();
2488        this.publisher.setValue(value);
2489      }
2490      return this;
2491    }
2492
2493    /**
2494     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
2495     */
2496    public List<ContactDetail> getContact() { 
2497      if (this.contact == null)
2498        this.contact = new ArrayList<ContactDetail>();
2499      return this.contact;
2500    }
2501
2502    /**
2503     * @return Returns a reference to <code>this</code> for easy method chaining
2504     */
2505    public ObservationDefinition setContact(List<ContactDetail> theContact) { 
2506      this.contact = theContact;
2507      return this;
2508    }
2509
2510    public boolean hasContact() { 
2511      if (this.contact == null)
2512        return false;
2513      for (ContactDetail item : this.contact)
2514        if (!item.isEmpty())
2515          return true;
2516      return false;
2517    }
2518
2519    public ContactDetail addContact() { //3
2520      ContactDetail t = new ContactDetail();
2521      if (this.contact == null)
2522        this.contact = new ArrayList<ContactDetail>();
2523      this.contact.add(t);
2524      return t;
2525    }
2526
2527    public ObservationDefinition addContact(ContactDetail t) { //3
2528      if (t == null)
2529        return this;
2530      if (this.contact == null)
2531        this.contact = new ArrayList<ContactDetail>();
2532      this.contact.add(t);
2533      return this;
2534    }
2535
2536    /**
2537     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
2538     */
2539    public ContactDetail getContactFirstRep() { 
2540      if (getContact().isEmpty()) {
2541        addContact();
2542      }
2543      return getContact().get(0);
2544    }
2545
2546    /**
2547     * @return {@link #description} (A free text natural language description of the ObservationDefinition from the consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2548     */
2549    public MarkdownType getDescriptionElement() { 
2550      if (this.description == null)
2551        if (Configuration.errorOnAutoCreate())
2552          throw new Error("Attempt to auto-create ObservationDefinition.description");
2553        else if (Configuration.doAutoCreate())
2554          this.description = new MarkdownType(); // bb
2555      return this.description;
2556    }
2557
2558    public boolean hasDescriptionElement() { 
2559      return this.description != null && !this.description.isEmpty();
2560    }
2561
2562    public boolean hasDescription() { 
2563      return this.description != null && !this.description.isEmpty();
2564    }
2565
2566    /**
2567     * @param value {@link #description} (A free text natural language description of the ObservationDefinition from the consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2568     */
2569    public ObservationDefinition setDescriptionElement(MarkdownType value) { 
2570      this.description = value;
2571      return this;
2572    }
2573
2574    /**
2575     * @return A free text natural language description of the ObservationDefinition from the consumer's perspective.
2576     */
2577    public String getDescription() { 
2578      return this.description == null ? null : this.description.getValue();
2579    }
2580
2581    /**
2582     * @param value A free text natural language description of the ObservationDefinition from the consumer's perspective.
2583     */
2584    public ObservationDefinition setDescription(String value) { 
2585      if (Utilities.noString(value))
2586        this.description = null;
2587      else {
2588        if (this.description == null)
2589          this.description = new MarkdownType();
2590        this.description.setValue(value);
2591      }
2592      return this;
2593    }
2594
2595    /**
2596     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate ObservationDefinition instances.)
2597     */
2598    public List<UsageContext> getUseContext() { 
2599      if (this.useContext == null)
2600        this.useContext = new ArrayList<UsageContext>();
2601      return this.useContext;
2602    }
2603
2604    /**
2605     * @return Returns a reference to <code>this</code> for easy method chaining
2606     */
2607    public ObservationDefinition setUseContext(List<UsageContext> theUseContext) { 
2608      this.useContext = theUseContext;
2609      return this;
2610    }
2611
2612    public boolean hasUseContext() { 
2613      if (this.useContext == null)
2614        return false;
2615      for (UsageContext item : this.useContext)
2616        if (!item.isEmpty())
2617          return true;
2618      return false;
2619    }
2620
2621    public UsageContext addUseContext() { //3
2622      UsageContext t = new UsageContext();
2623      if (this.useContext == null)
2624        this.useContext = new ArrayList<UsageContext>();
2625      this.useContext.add(t);
2626      return t;
2627    }
2628
2629    public ObservationDefinition addUseContext(UsageContext t) { //3
2630      if (t == null)
2631        return this;
2632      if (this.useContext == null)
2633        this.useContext = new ArrayList<UsageContext>();
2634      this.useContext.add(t);
2635      return this;
2636    }
2637
2638    /**
2639     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
2640     */
2641    public UsageContext getUseContextFirstRep() { 
2642      if (getUseContext().isEmpty()) {
2643        addUseContext();
2644      }
2645      return getUseContext().get(0);
2646    }
2647
2648    /**
2649     * @return {@link #jurisdiction} (A jurisdiction in which the ObservationDefinition is intended to be used.)
2650     */
2651    public List<CodeableConcept> getJurisdiction() { 
2652      if (this.jurisdiction == null)
2653        this.jurisdiction = new ArrayList<CodeableConcept>();
2654      return this.jurisdiction;
2655    }
2656
2657    /**
2658     * @return Returns a reference to <code>this</code> for easy method chaining
2659     */
2660    public ObservationDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) { 
2661      this.jurisdiction = theJurisdiction;
2662      return this;
2663    }
2664
2665    public boolean hasJurisdiction() { 
2666      if (this.jurisdiction == null)
2667        return false;
2668      for (CodeableConcept item : this.jurisdiction)
2669        if (!item.isEmpty())
2670          return true;
2671      return false;
2672    }
2673
2674    public CodeableConcept addJurisdiction() { //3
2675      CodeableConcept t = new CodeableConcept();
2676      if (this.jurisdiction == null)
2677        this.jurisdiction = new ArrayList<CodeableConcept>();
2678      this.jurisdiction.add(t);
2679      return t;
2680    }
2681
2682    public ObservationDefinition addJurisdiction(CodeableConcept t) { //3
2683      if (t == null)
2684        return this;
2685      if (this.jurisdiction == null)
2686        this.jurisdiction = new ArrayList<CodeableConcept>();
2687      this.jurisdiction.add(t);
2688      return this;
2689    }
2690
2691    /**
2692     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {3}
2693     */
2694    public CodeableConcept getJurisdictionFirstRep() { 
2695      if (getJurisdiction().isEmpty()) {
2696        addJurisdiction();
2697      }
2698      return getJurisdiction().get(0);
2699    }
2700
2701    /**
2702     * @return {@link #purpose} (Explains why this ObservationDefinition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
2703     */
2704    public MarkdownType getPurposeElement() { 
2705      if (this.purpose == null)
2706        if (Configuration.errorOnAutoCreate())
2707          throw new Error("Attempt to auto-create ObservationDefinition.purpose");
2708        else if (Configuration.doAutoCreate())
2709          this.purpose = new MarkdownType(); // bb
2710      return this.purpose;
2711    }
2712
2713    public boolean hasPurposeElement() { 
2714      return this.purpose != null && !this.purpose.isEmpty();
2715    }
2716
2717    public boolean hasPurpose() { 
2718      return this.purpose != null && !this.purpose.isEmpty();
2719    }
2720
2721    /**
2722     * @param value {@link #purpose} (Explains why this ObservationDefinition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
2723     */
2724    public ObservationDefinition setPurposeElement(MarkdownType value) { 
2725      this.purpose = value;
2726      return this;
2727    }
2728
2729    /**
2730     * @return Explains why this ObservationDefinition is needed and why it has been designed as it has.
2731     */
2732    public String getPurpose() { 
2733      return this.purpose == null ? null : this.purpose.getValue();
2734    }
2735
2736    /**
2737     * @param value Explains why this ObservationDefinition is needed and why it has been designed as it has.
2738     */
2739    public ObservationDefinition setPurpose(String value) { 
2740      if (Utilities.noString(value))
2741        this.purpose = null;
2742      else {
2743        if (this.purpose == null)
2744          this.purpose = new MarkdownType();
2745        this.purpose.setValue(value);
2746      }
2747      return this;
2748    }
2749
2750    /**
2751     * @return {@link #copyright} (Copyright statement relating to the ObservationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the ObservationDefinition.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
2752     */
2753    public MarkdownType getCopyrightElement() { 
2754      if (this.copyright == null)
2755        if (Configuration.errorOnAutoCreate())
2756          throw new Error("Attempt to auto-create ObservationDefinition.copyright");
2757        else if (Configuration.doAutoCreate())
2758          this.copyright = new MarkdownType(); // bb
2759      return this.copyright;
2760    }
2761
2762    public boolean hasCopyrightElement() { 
2763      return this.copyright != null && !this.copyright.isEmpty();
2764    }
2765
2766    public boolean hasCopyright() { 
2767      return this.copyright != null && !this.copyright.isEmpty();
2768    }
2769
2770    /**
2771     * @param value {@link #copyright} (Copyright statement relating to the ObservationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the ObservationDefinition.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
2772     */
2773    public ObservationDefinition setCopyrightElement(MarkdownType value) { 
2774      this.copyright = value;
2775      return this;
2776    }
2777
2778    /**
2779     * @return Copyright statement relating to the ObservationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the ObservationDefinition.
2780     */
2781    public String getCopyright() { 
2782      return this.copyright == null ? null : this.copyright.getValue();
2783    }
2784
2785    /**
2786     * @param value Copyright statement relating to the ObservationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the ObservationDefinition.
2787     */
2788    public ObservationDefinition setCopyright(String value) { 
2789      if (Utilities.noString(value))
2790        this.copyright = null;
2791      else {
2792        if (this.copyright == null)
2793          this.copyright = new MarkdownType();
2794        this.copyright.setValue(value);
2795      }
2796      return this;
2797    }
2798
2799    /**
2800     * @return {@link #copyrightLabel} (A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').). This is the underlying object with id, value and extensions. The accessor "getCopyrightLabel" gives direct access to the value
2801     */
2802    public StringType getCopyrightLabelElement() { 
2803      if (this.copyrightLabel == null)
2804        if (Configuration.errorOnAutoCreate())
2805          throw new Error("Attempt to auto-create ObservationDefinition.copyrightLabel");
2806        else if (Configuration.doAutoCreate())
2807          this.copyrightLabel = new StringType(); // bb
2808      return this.copyrightLabel;
2809    }
2810
2811    public boolean hasCopyrightLabelElement() { 
2812      return this.copyrightLabel != null && !this.copyrightLabel.isEmpty();
2813    }
2814
2815    public boolean hasCopyrightLabel() { 
2816      return this.copyrightLabel != null && !this.copyrightLabel.isEmpty();
2817    }
2818
2819    /**
2820     * @param value {@link #copyrightLabel} (A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').). This is the underlying object with id, value and extensions. The accessor "getCopyrightLabel" gives direct access to the value
2821     */
2822    public ObservationDefinition setCopyrightLabelElement(StringType value) { 
2823      this.copyrightLabel = value;
2824      return this;
2825    }
2826
2827    /**
2828     * @return A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').
2829     */
2830    public String getCopyrightLabel() { 
2831      return this.copyrightLabel == null ? null : this.copyrightLabel.getValue();
2832    }
2833
2834    /**
2835     * @param value A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').
2836     */
2837    public ObservationDefinition setCopyrightLabel(String value) { 
2838      if (Utilities.noString(value))
2839        this.copyrightLabel = null;
2840      else {
2841        if (this.copyrightLabel == null)
2842          this.copyrightLabel = new StringType();
2843        this.copyrightLabel.setValue(value);
2844      }
2845      return this;
2846    }
2847
2848    /**
2849     * @return {@link #approvalDate} (The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
2850     */
2851    public DateType getApprovalDateElement() { 
2852      if (this.approvalDate == null)
2853        if (Configuration.errorOnAutoCreate())
2854          throw new Error("Attempt to auto-create ObservationDefinition.approvalDate");
2855        else if (Configuration.doAutoCreate())
2856          this.approvalDate = new DateType(); // bb
2857      return this.approvalDate;
2858    }
2859
2860    public boolean hasApprovalDateElement() { 
2861      return this.approvalDate != null && !this.approvalDate.isEmpty();
2862    }
2863
2864    public boolean hasApprovalDate() { 
2865      return this.approvalDate != null && !this.approvalDate.isEmpty();
2866    }
2867
2868    /**
2869     * @param value {@link #approvalDate} (The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
2870     */
2871    public ObservationDefinition setApprovalDateElement(DateType value) { 
2872      this.approvalDate = value;
2873      return this;
2874    }
2875
2876    /**
2877     * @return The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.
2878     */
2879    public Date getApprovalDate() { 
2880      return this.approvalDate == null ? null : this.approvalDate.getValue();
2881    }
2882
2883    /**
2884     * @param value The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.
2885     */
2886    public ObservationDefinition setApprovalDate(Date value) { 
2887      if (value == null)
2888        this.approvalDate = null;
2889      else {
2890        if (this.approvalDate == null)
2891          this.approvalDate = new DateType();
2892        this.approvalDate.setValue(value);
2893      }
2894      return this;
2895    }
2896
2897    /**
2898     * @return {@link #lastReviewDate} (The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
2899     */
2900    public DateType getLastReviewDateElement() { 
2901      if (this.lastReviewDate == null)
2902        if (Configuration.errorOnAutoCreate())
2903          throw new Error("Attempt to auto-create ObservationDefinition.lastReviewDate");
2904        else if (Configuration.doAutoCreate())
2905          this.lastReviewDate = new DateType(); // bb
2906      return this.lastReviewDate;
2907    }
2908
2909    public boolean hasLastReviewDateElement() { 
2910      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
2911    }
2912
2913    public boolean hasLastReviewDate() { 
2914      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
2915    }
2916
2917    /**
2918     * @param value {@link #lastReviewDate} (The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
2919     */
2920    public ObservationDefinition setLastReviewDateElement(DateType value) { 
2921      this.lastReviewDate = value;
2922      return this;
2923    }
2924
2925    /**
2926     * @return The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.
2927     */
2928    public Date getLastReviewDate() { 
2929      return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
2930    }
2931
2932    /**
2933     * @param value The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.
2934     */
2935    public ObservationDefinition setLastReviewDate(Date value) { 
2936      if (value == null)
2937        this.lastReviewDate = null;
2938      else {
2939        if (this.lastReviewDate == null)
2940          this.lastReviewDate = new DateType();
2941        this.lastReviewDate.setValue(value);
2942      }
2943      return this;
2944    }
2945
2946    /**
2947     * @return {@link #effectivePeriod} (The period during which the ObservationDefinition content was or is planned to be effective.)
2948     */
2949    public Period getEffectivePeriod() { 
2950      if (this.effectivePeriod == null)
2951        if (Configuration.errorOnAutoCreate())
2952          throw new Error("Attempt to auto-create ObservationDefinition.effectivePeriod");
2953        else if (Configuration.doAutoCreate())
2954          this.effectivePeriod = new Period(); // cc
2955      return this.effectivePeriod;
2956    }
2957
2958    public boolean hasEffectivePeriod() { 
2959      return this.effectivePeriod != null && !this.effectivePeriod.isEmpty();
2960    }
2961
2962    /**
2963     * @param value {@link #effectivePeriod} (The period during which the ObservationDefinition content was or is planned to be effective.)
2964     */
2965    public ObservationDefinition setEffectivePeriod(Period value) { 
2966      this.effectivePeriod = value;
2967      return this;
2968    }
2969
2970    /**
2971     * @return {@link #derivedFromCanonical} (The canonical URL pointing to another FHIR-defined ObservationDefinition that is adhered to in whole or in part by this definition.)
2972     */
2973    public List<CanonicalType> getDerivedFromCanonical() { 
2974      if (this.derivedFromCanonical == null)
2975        this.derivedFromCanonical = new ArrayList<CanonicalType>();
2976      return this.derivedFromCanonical;
2977    }
2978
2979    /**
2980     * @return Returns a reference to <code>this</code> for easy method chaining
2981     */
2982    public ObservationDefinition setDerivedFromCanonical(List<CanonicalType> theDerivedFromCanonical) { 
2983      this.derivedFromCanonical = theDerivedFromCanonical;
2984      return this;
2985    }
2986
2987    public boolean hasDerivedFromCanonical() { 
2988      if (this.derivedFromCanonical == null)
2989        return false;
2990      for (CanonicalType item : this.derivedFromCanonical)
2991        if (!item.isEmpty())
2992          return true;
2993      return false;
2994    }
2995
2996    /**
2997     * @return {@link #derivedFromCanonical} (The canonical URL pointing to another FHIR-defined ObservationDefinition that is adhered to in whole or in part by this definition.)
2998     */
2999    public CanonicalType addDerivedFromCanonicalElement() {//2 
3000      CanonicalType t = new CanonicalType();
3001      if (this.derivedFromCanonical == null)
3002        this.derivedFromCanonical = new ArrayList<CanonicalType>();
3003      this.derivedFromCanonical.add(t);
3004      return t;
3005    }
3006
3007    /**
3008     * @param value {@link #derivedFromCanonical} (The canonical URL pointing to another FHIR-defined ObservationDefinition that is adhered to in whole or in part by this definition.)
3009     */
3010    public ObservationDefinition addDerivedFromCanonical(String value) { //1
3011      CanonicalType t = new CanonicalType();
3012      t.setValue(value);
3013      if (this.derivedFromCanonical == null)
3014        this.derivedFromCanonical = new ArrayList<CanonicalType>();
3015      this.derivedFromCanonical.add(t);
3016      return this;
3017    }
3018
3019    /**
3020     * @param value {@link #derivedFromCanonical} (The canonical URL pointing to another FHIR-defined ObservationDefinition that is adhered to in whole or in part by this definition.)
3021     */
3022    public boolean hasDerivedFromCanonical(String value) { 
3023      if (this.derivedFromCanonical == null)
3024        return false;
3025      for (CanonicalType v : this.derivedFromCanonical)
3026        if (v.getValue().equals(value)) // canonical
3027          return true;
3028      return false;
3029    }
3030
3031    /**
3032     * @return {@link #derivedFromUri} (The URL pointing to an externally-defined observation definition, guideline or other definition that is adhered to in whole or in part by this definition.)
3033     */
3034    public List<UriType> getDerivedFromUri() { 
3035      if (this.derivedFromUri == null)
3036        this.derivedFromUri = new ArrayList<UriType>();
3037      return this.derivedFromUri;
3038    }
3039
3040    /**
3041     * @return Returns a reference to <code>this</code> for easy method chaining
3042     */
3043    public ObservationDefinition setDerivedFromUri(List<UriType> theDerivedFromUri) { 
3044      this.derivedFromUri = theDerivedFromUri;
3045      return this;
3046    }
3047
3048    public boolean hasDerivedFromUri() { 
3049      if (this.derivedFromUri == null)
3050        return false;
3051      for (UriType item : this.derivedFromUri)
3052        if (!item.isEmpty())
3053          return true;
3054      return false;
3055    }
3056
3057    /**
3058     * @return {@link #derivedFromUri} (The URL pointing to an externally-defined observation definition, guideline or other definition that is adhered to in whole or in part by this definition.)
3059     */
3060    public UriType addDerivedFromUriElement() {//2 
3061      UriType t = new UriType();
3062      if (this.derivedFromUri == null)
3063        this.derivedFromUri = new ArrayList<UriType>();
3064      this.derivedFromUri.add(t);
3065      return t;
3066    }
3067
3068    /**
3069     * @param value {@link #derivedFromUri} (The URL pointing to an externally-defined observation definition, guideline or other definition that is adhered to in whole or in part by this definition.)
3070     */
3071    public ObservationDefinition addDerivedFromUri(String value) { //1
3072      UriType t = new UriType();
3073      t.setValue(value);
3074      if (this.derivedFromUri == null)
3075        this.derivedFromUri = new ArrayList<UriType>();
3076      this.derivedFromUri.add(t);
3077      return this;
3078    }
3079
3080    /**
3081     * @param value {@link #derivedFromUri} (The URL pointing to an externally-defined observation definition, guideline or other definition that is adhered to in whole or in part by this definition.)
3082     */
3083    public boolean hasDerivedFromUri(String value) { 
3084      if (this.derivedFromUri == null)
3085        return false;
3086      for (UriType v : this.derivedFromUri)
3087        if (v.getValue().equals(value)) // uri
3088          return true;
3089      return false;
3090    }
3091
3092    /**
3093     * @return {@link #subject} (A code that describes the intended kind of subject of Observation instances conforming to this ObservationDefinition.)
3094     */
3095    public List<CodeableConcept> getSubject() { 
3096      if (this.subject == null)
3097        this.subject = new ArrayList<CodeableConcept>();
3098      return this.subject;
3099    }
3100
3101    /**
3102     * @return Returns a reference to <code>this</code> for easy method chaining
3103     */
3104    public ObservationDefinition setSubject(List<CodeableConcept> theSubject) { 
3105      this.subject = theSubject;
3106      return this;
3107    }
3108
3109    public boolean hasSubject() { 
3110      if (this.subject == null)
3111        return false;
3112      for (CodeableConcept item : this.subject)
3113        if (!item.isEmpty())
3114          return true;
3115      return false;
3116    }
3117
3118    public CodeableConcept addSubject() { //3
3119      CodeableConcept t = new CodeableConcept();
3120      if (this.subject == null)
3121        this.subject = new ArrayList<CodeableConcept>();
3122      this.subject.add(t);
3123      return t;
3124    }
3125
3126    public ObservationDefinition addSubject(CodeableConcept t) { //3
3127      if (t == null)
3128        return this;
3129      if (this.subject == null)
3130        this.subject = new ArrayList<CodeableConcept>();
3131      this.subject.add(t);
3132      return this;
3133    }
3134
3135    /**
3136     * @return The first repetition of repeating field {@link #subject}, creating it if it does not already exist {3}
3137     */
3138    public CodeableConcept getSubjectFirstRep() { 
3139      if (getSubject().isEmpty()) {
3140        addSubject();
3141      }
3142      return getSubject().get(0);
3143    }
3144
3145    /**
3146     * @return {@link #performerType} (The type of individual/organization/device that is expected to act upon instances of this definition.)
3147     */
3148    public CodeableConcept getPerformerType() { 
3149      if (this.performerType == null)
3150        if (Configuration.errorOnAutoCreate())
3151          throw new Error("Attempt to auto-create ObservationDefinition.performerType");
3152        else if (Configuration.doAutoCreate())
3153          this.performerType = new CodeableConcept(); // cc
3154      return this.performerType;
3155    }
3156
3157    public boolean hasPerformerType() { 
3158      return this.performerType != null && !this.performerType.isEmpty();
3159    }
3160
3161    /**
3162     * @param value {@link #performerType} (The type of individual/organization/device that is expected to act upon instances of this definition.)
3163     */
3164    public ObservationDefinition setPerformerType(CodeableConcept value) { 
3165      this.performerType = value;
3166      return this;
3167    }
3168
3169    /**
3170     * @return {@link #category} (A code that classifies the general type of observation.)
3171     */
3172    public List<CodeableConcept> getCategory() { 
3173      if (this.category == null)
3174        this.category = new ArrayList<CodeableConcept>();
3175      return this.category;
3176    }
3177
3178    /**
3179     * @return Returns a reference to <code>this</code> for easy method chaining
3180     */
3181    public ObservationDefinition setCategory(List<CodeableConcept> theCategory) { 
3182      this.category = theCategory;
3183      return this;
3184    }
3185
3186    public boolean hasCategory() { 
3187      if (this.category == null)
3188        return false;
3189      for (CodeableConcept item : this.category)
3190        if (!item.isEmpty())
3191          return true;
3192      return false;
3193    }
3194
3195    public CodeableConcept addCategory() { //3
3196      CodeableConcept t = new CodeableConcept();
3197      if (this.category == null)
3198        this.category = new ArrayList<CodeableConcept>();
3199      this.category.add(t);
3200      return t;
3201    }
3202
3203    public ObservationDefinition addCategory(CodeableConcept t) { //3
3204      if (t == null)
3205        return this;
3206      if (this.category == null)
3207        this.category = new ArrayList<CodeableConcept>();
3208      this.category.add(t);
3209      return this;
3210    }
3211
3212    /**
3213     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist {3}
3214     */
3215    public CodeableConcept getCategoryFirstRep() { 
3216      if (getCategory().isEmpty()) {
3217        addCategory();
3218      }
3219      return getCategory().get(0);
3220    }
3221
3222    /**
3223     * @return {@link #code} (Describes what will be observed. Sometimes this is called the observation "name".)
3224     */
3225    public CodeableConcept getCode() { 
3226      if (this.code == null)
3227        if (Configuration.errorOnAutoCreate())
3228          throw new Error("Attempt to auto-create ObservationDefinition.code");
3229        else if (Configuration.doAutoCreate())
3230          this.code = new CodeableConcept(); // cc
3231      return this.code;
3232    }
3233
3234    public boolean hasCode() { 
3235      return this.code != null && !this.code.isEmpty();
3236    }
3237
3238    /**
3239     * @param value {@link #code} (Describes what will be observed. Sometimes this is called the observation "name".)
3240     */
3241    public ObservationDefinition setCode(CodeableConcept value) { 
3242      this.code = value;
3243      return this;
3244    }
3245
3246    /**
3247     * @return {@link #permittedDataType} (The data types allowed for the value element of the instance observations conforming to this ObservationDefinition.)
3248     */
3249    public List<Enumeration<ObservationDataType>> getPermittedDataType() { 
3250      if (this.permittedDataType == null)
3251        this.permittedDataType = new ArrayList<Enumeration<ObservationDataType>>();
3252      return this.permittedDataType;
3253    }
3254
3255    /**
3256     * @return Returns a reference to <code>this</code> for easy method chaining
3257     */
3258    public ObservationDefinition setPermittedDataType(List<Enumeration<ObservationDataType>> thePermittedDataType) { 
3259      this.permittedDataType = thePermittedDataType;
3260      return this;
3261    }
3262
3263    public boolean hasPermittedDataType() { 
3264      if (this.permittedDataType == null)
3265        return false;
3266      for (Enumeration<ObservationDataType> item : this.permittedDataType)
3267        if (!item.isEmpty())
3268          return true;
3269      return false;
3270    }
3271
3272    /**
3273     * @return {@link #permittedDataType} (The data types allowed for the value element of the instance observations conforming to this ObservationDefinition.)
3274     */
3275    public Enumeration<ObservationDataType> addPermittedDataTypeElement() {//2 
3276      Enumeration<ObservationDataType> t = new Enumeration<ObservationDataType>(new ObservationDataTypeEnumFactory());
3277      if (this.permittedDataType == null)
3278        this.permittedDataType = new ArrayList<Enumeration<ObservationDataType>>();
3279      this.permittedDataType.add(t);
3280      return t;
3281    }
3282
3283    /**
3284     * @param value {@link #permittedDataType} (The data types allowed for the value element of the instance observations conforming to this ObservationDefinition.)
3285     */
3286    public ObservationDefinition addPermittedDataType(ObservationDataType value) { //1
3287      Enumeration<ObservationDataType> t = new Enumeration<ObservationDataType>(new ObservationDataTypeEnumFactory());
3288      t.setValue(value);
3289      if (this.permittedDataType == null)
3290        this.permittedDataType = new ArrayList<Enumeration<ObservationDataType>>();
3291      this.permittedDataType.add(t);
3292      return this;
3293    }
3294
3295    /**
3296     * @param value {@link #permittedDataType} (The data types allowed for the value element of the instance observations conforming to this ObservationDefinition.)
3297     */
3298    public boolean hasPermittedDataType(ObservationDataType value) { 
3299      if (this.permittedDataType == null)
3300        return false;
3301      for (Enumeration<ObservationDataType> v : this.permittedDataType)
3302        if (v.getValue().equals(value)) // code
3303          return true;
3304      return false;
3305    }
3306
3307    /**
3308     * @return {@link #multipleResultsAllowed} (Multiple results allowed for observations conforming to this ObservationDefinition.). This is the underlying object with id, value and extensions. The accessor "getMultipleResultsAllowed" gives direct access to the value
3309     */
3310    public BooleanType getMultipleResultsAllowedElement() { 
3311      if (this.multipleResultsAllowed == null)
3312        if (Configuration.errorOnAutoCreate())
3313          throw new Error("Attempt to auto-create ObservationDefinition.multipleResultsAllowed");
3314        else if (Configuration.doAutoCreate())
3315          this.multipleResultsAllowed = new BooleanType(); // bb
3316      return this.multipleResultsAllowed;
3317    }
3318
3319    public boolean hasMultipleResultsAllowedElement() { 
3320      return this.multipleResultsAllowed != null && !this.multipleResultsAllowed.isEmpty();
3321    }
3322
3323    public boolean hasMultipleResultsAllowed() { 
3324      return this.multipleResultsAllowed != null && !this.multipleResultsAllowed.isEmpty();
3325    }
3326
3327    /**
3328     * @param value {@link #multipleResultsAllowed} (Multiple results allowed for observations conforming to this ObservationDefinition.). This is the underlying object with id, value and extensions. The accessor "getMultipleResultsAllowed" gives direct access to the value
3329     */
3330    public ObservationDefinition setMultipleResultsAllowedElement(BooleanType value) { 
3331      this.multipleResultsAllowed = value;
3332      return this;
3333    }
3334
3335    /**
3336     * @return Multiple results allowed for observations conforming to this ObservationDefinition.
3337     */
3338    public boolean getMultipleResultsAllowed() { 
3339      return this.multipleResultsAllowed == null || this.multipleResultsAllowed.isEmpty() ? false : this.multipleResultsAllowed.getValue();
3340    }
3341
3342    /**
3343     * @param value Multiple results allowed for observations conforming to this ObservationDefinition.
3344     */
3345    public ObservationDefinition setMultipleResultsAllowed(boolean value) { 
3346        if (this.multipleResultsAllowed == null)
3347          this.multipleResultsAllowed = new BooleanType();
3348        this.multipleResultsAllowed.setValue(value);
3349      return this;
3350    }
3351
3352    /**
3353     * @return {@link #bodySite} (The site on the subject's body where the  observation is to be made.)
3354     */
3355    public CodeableConcept getBodySite() { 
3356      if (this.bodySite == null)
3357        if (Configuration.errorOnAutoCreate())
3358          throw new Error("Attempt to auto-create ObservationDefinition.bodySite");
3359        else if (Configuration.doAutoCreate())
3360          this.bodySite = new CodeableConcept(); // cc
3361      return this.bodySite;
3362    }
3363
3364    public boolean hasBodySite() { 
3365      return this.bodySite != null && !this.bodySite.isEmpty();
3366    }
3367
3368    /**
3369     * @param value {@link #bodySite} (The site on the subject's body where the  observation is to be made.)
3370     */
3371    public ObservationDefinition setBodySite(CodeableConcept value) { 
3372      this.bodySite = value;
3373      return this;
3374    }
3375
3376    /**
3377     * @return {@link #method} (The method or technique used to perform the observation.)
3378     */
3379    public CodeableConcept getMethod() { 
3380      if (this.method == null)
3381        if (Configuration.errorOnAutoCreate())
3382          throw new Error("Attempt to auto-create ObservationDefinition.method");
3383        else if (Configuration.doAutoCreate())
3384          this.method = new CodeableConcept(); // cc
3385      return this.method;
3386    }
3387
3388    public boolean hasMethod() { 
3389      return this.method != null && !this.method.isEmpty();
3390    }
3391
3392    /**
3393     * @param value {@link #method} (The method or technique used to perform the observation.)
3394     */
3395    public ObservationDefinition setMethod(CodeableConcept value) { 
3396      this.method = value;
3397      return this;
3398    }
3399
3400    /**
3401     * @return {@link #specimen} (The kind of specimen that this type of observation is produced on.)
3402     */
3403    public List<Reference> getSpecimen() { 
3404      if (this.specimen == null)
3405        this.specimen = new ArrayList<Reference>();
3406      return this.specimen;
3407    }
3408
3409    /**
3410     * @return Returns a reference to <code>this</code> for easy method chaining
3411     */
3412    public ObservationDefinition setSpecimen(List<Reference> theSpecimen) { 
3413      this.specimen = theSpecimen;
3414      return this;
3415    }
3416
3417    public boolean hasSpecimen() { 
3418      if (this.specimen == null)
3419        return false;
3420      for (Reference item : this.specimen)
3421        if (!item.isEmpty())
3422          return true;
3423      return false;
3424    }
3425
3426    public Reference addSpecimen() { //3
3427      Reference t = new Reference();
3428      if (this.specimen == null)
3429        this.specimen = new ArrayList<Reference>();
3430      this.specimen.add(t);
3431      return t;
3432    }
3433
3434    public ObservationDefinition addSpecimen(Reference t) { //3
3435      if (t == null)
3436        return this;
3437      if (this.specimen == null)
3438        this.specimen = new ArrayList<Reference>();
3439      this.specimen.add(t);
3440      return this;
3441    }
3442
3443    /**
3444     * @return The first repetition of repeating field {@link #specimen}, creating it if it does not already exist {3}
3445     */
3446    public Reference getSpecimenFirstRep() { 
3447      if (getSpecimen().isEmpty()) {
3448        addSpecimen();
3449      }
3450      return getSpecimen().get(0);
3451    }
3452
3453    /**
3454     * @return {@link #device} (The measurement model of device or actual device used to produce observations of this type.)
3455     */
3456    public List<Reference> getDevice() { 
3457      if (this.device == null)
3458        this.device = new ArrayList<Reference>();
3459      return this.device;
3460    }
3461
3462    /**
3463     * @return Returns a reference to <code>this</code> for easy method chaining
3464     */
3465    public ObservationDefinition setDevice(List<Reference> theDevice) { 
3466      this.device = theDevice;
3467      return this;
3468    }
3469
3470    public boolean hasDevice() { 
3471      if (this.device == null)
3472        return false;
3473      for (Reference item : this.device)
3474        if (!item.isEmpty())
3475          return true;
3476      return false;
3477    }
3478
3479    public Reference addDevice() { //3
3480      Reference t = new Reference();
3481      if (this.device == null)
3482        this.device = new ArrayList<Reference>();
3483      this.device.add(t);
3484      return t;
3485    }
3486
3487    public ObservationDefinition addDevice(Reference t) { //3
3488      if (t == null)
3489        return this;
3490      if (this.device == null)
3491        this.device = new ArrayList<Reference>();
3492      this.device.add(t);
3493      return this;
3494    }
3495
3496    /**
3497     * @return The first repetition of repeating field {@link #device}, creating it if it does not already exist {3}
3498     */
3499    public Reference getDeviceFirstRep() { 
3500      if (getDevice().isEmpty()) {
3501        addDevice();
3502      }
3503      return getDevice().get(0);
3504    }
3505
3506    /**
3507     * @return {@link #preferredReportName} (The preferred name to be used when reporting the results of observations conforming to this ObservationDefinition.). This is the underlying object with id, value and extensions. The accessor "getPreferredReportName" gives direct access to the value
3508     */
3509    public StringType getPreferredReportNameElement() { 
3510      if (this.preferredReportName == null)
3511        if (Configuration.errorOnAutoCreate())
3512          throw new Error("Attempt to auto-create ObservationDefinition.preferredReportName");
3513        else if (Configuration.doAutoCreate())
3514          this.preferredReportName = new StringType(); // bb
3515      return this.preferredReportName;
3516    }
3517
3518    public boolean hasPreferredReportNameElement() { 
3519      return this.preferredReportName != null && !this.preferredReportName.isEmpty();
3520    }
3521
3522    public boolean hasPreferredReportName() { 
3523      return this.preferredReportName != null && !this.preferredReportName.isEmpty();
3524    }
3525
3526    /**
3527     * @param value {@link #preferredReportName} (The preferred name to be used when reporting the results of observations conforming to this ObservationDefinition.). This is the underlying object with id, value and extensions. The accessor "getPreferredReportName" gives direct access to the value
3528     */
3529    public ObservationDefinition setPreferredReportNameElement(StringType value) { 
3530      this.preferredReportName = value;
3531      return this;
3532    }
3533
3534    /**
3535     * @return The preferred name to be used when reporting the results of observations conforming to this ObservationDefinition.
3536     */
3537    public String getPreferredReportName() { 
3538      return this.preferredReportName == null ? null : this.preferredReportName.getValue();
3539    }
3540
3541    /**
3542     * @param value The preferred name to be used when reporting the results of observations conforming to this ObservationDefinition.
3543     */
3544    public ObservationDefinition setPreferredReportName(String value) { 
3545      if (Utilities.noString(value))
3546        this.preferredReportName = null;
3547      else {
3548        if (this.preferredReportName == null)
3549          this.preferredReportName = new StringType();
3550        this.preferredReportName.setValue(value);
3551      }
3552      return this;
3553    }
3554
3555    /**
3556     * @return {@link #permittedUnit} (Units allowed for the valueQuantity element in the instance observations conforming to this ObservationDefinition.)
3557     */
3558    public List<Coding> getPermittedUnit() { 
3559      if (this.permittedUnit == null)
3560        this.permittedUnit = new ArrayList<Coding>();
3561      return this.permittedUnit;
3562    }
3563
3564    /**
3565     * @return Returns a reference to <code>this</code> for easy method chaining
3566     */
3567    public ObservationDefinition setPermittedUnit(List<Coding> thePermittedUnit) { 
3568      this.permittedUnit = thePermittedUnit;
3569      return this;
3570    }
3571
3572    public boolean hasPermittedUnit() { 
3573      if (this.permittedUnit == null)
3574        return false;
3575      for (Coding item : this.permittedUnit)
3576        if (!item.isEmpty())
3577          return true;
3578      return false;
3579    }
3580
3581    public Coding addPermittedUnit() { //3
3582      Coding t = new Coding();
3583      if (this.permittedUnit == null)
3584        this.permittedUnit = new ArrayList<Coding>();
3585      this.permittedUnit.add(t);
3586      return t;
3587    }
3588
3589    public ObservationDefinition addPermittedUnit(Coding t) { //3
3590      if (t == null)
3591        return this;
3592      if (this.permittedUnit == null)
3593        this.permittedUnit = new ArrayList<Coding>();
3594      this.permittedUnit.add(t);
3595      return this;
3596    }
3597
3598    /**
3599     * @return The first repetition of repeating field {@link #permittedUnit}, creating it if it does not already exist {3}
3600     */
3601    public Coding getPermittedUnitFirstRep() { 
3602      if (getPermittedUnit().isEmpty()) {
3603        addPermittedUnit();
3604      }
3605      return getPermittedUnit().get(0);
3606    }
3607
3608    /**
3609     * @return {@link #qualifiedValue} (A set of qualified values associated with a context and a set of conditions -  provides a range for quantitative and ordinal observations and a collection of value sets for qualitative observations.)
3610     */
3611    public List<ObservationDefinitionQualifiedValueComponent> getQualifiedValue() { 
3612      if (this.qualifiedValue == null)
3613        this.qualifiedValue = new ArrayList<ObservationDefinitionQualifiedValueComponent>();
3614      return this.qualifiedValue;
3615    }
3616
3617    /**
3618     * @return Returns a reference to <code>this</code> for easy method chaining
3619     */
3620    public ObservationDefinition setQualifiedValue(List<ObservationDefinitionQualifiedValueComponent> theQualifiedValue) { 
3621      this.qualifiedValue = theQualifiedValue;
3622      return this;
3623    }
3624
3625    public boolean hasQualifiedValue() { 
3626      if (this.qualifiedValue == null)
3627        return false;
3628      for (ObservationDefinitionQualifiedValueComponent item : this.qualifiedValue)
3629        if (!item.isEmpty())
3630          return true;
3631      return false;
3632    }
3633
3634    public ObservationDefinitionQualifiedValueComponent addQualifiedValue() { //3
3635      ObservationDefinitionQualifiedValueComponent t = new ObservationDefinitionQualifiedValueComponent();
3636      if (this.qualifiedValue == null)
3637        this.qualifiedValue = new ArrayList<ObservationDefinitionQualifiedValueComponent>();
3638      this.qualifiedValue.add(t);
3639      return t;
3640    }
3641
3642    public ObservationDefinition addQualifiedValue(ObservationDefinitionQualifiedValueComponent t) { //3
3643      if (t == null)
3644        return this;
3645      if (this.qualifiedValue == null)
3646        this.qualifiedValue = new ArrayList<ObservationDefinitionQualifiedValueComponent>();
3647      this.qualifiedValue.add(t);
3648      return this;
3649    }
3650
3651    /**
3652     * @return The first repetition of repeating field {@link #qualifiedValue}, creating it if it does not already exist {3}
3653     */
3654    public ObservationDefinitionQualifiedValueComponent getQualifiedValueFirstRep() { 
3655      if (getQualifiedValue().isEmpty()) {
3656        addQualifiedValue();
3657      }
3658      return getQualifiedValue().get(0);
3659    }
3660
3661    /**
3662     * @return {@link #hasMember} (This ObservationDefinition defines 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.)
3663     */
3664    public List<Reference> getHasMember() { 
3665      if (this.hasMember == null)
3666        this.hasMember = new ArrayList<Reference>();
3667      return this.hasMember;
3668    }
3669
3670    /**
3671     * @return Returns a reference to <code>this</code> for easy method chaining
3672     */
3673    public ObservationDefinition setHasMember(List<Reference> theHasMember) { 
3674      this.hasMember = theHasMember;
3675      return this;
3676    }
3677
3678    public boolean hasHasMember() { 
3679      if (this.hasMember == null)
3680        return false;
3681      for (Reference item : this.hasMember)
3682        if (!item.isEmpty())
3683          return true;
3684      return false;
3685    }
3686
3687    public Reference addHasMember() { //3
3688      Reference t = new Reference();
3689      if (this.hasMember == null)
3690        this.hasMember = new ArrayList<Reference>();
3691      this.hasMember.add(t);
3692      return t;
3693    }
3694
3695    public ObservationDefinition addHasMember(Reference t) { //3
3696      if (t == null)
3697        return this;
3698      if (this.hasMember == null)
3699        this.hasMember = new ArrayList<Reference>();
3700      this.hasMember.add(t);
3701      return this;
3702    }
3703
3704    /**
3705     * @return The first repetition of repeating field {@link #hasMember}, creating it if it does not already exist {3}
3706     */
3707    public Reference getHasMemberFirstRep() { 
3708      if (getHasMember().isEmpty()) {
3709        addHasMember();
3710      }
3711      return getHasMember().get(0);
3712    }
3713
3714    /**
3715     * @return {@link #component} (Some observations have multiple component observations, expressed as separate code value pairs.)
3716     */
3717    public List<ObservationDefinitionComponentComponent> getComponent() { 
3718      if (this.component == null)
3719        this.component = new ArrayList<ObservationDefinitionComponentComponent>();
3720      return this.component;
3721    }
3722
3723    /**
3724     * @return Returns a reference to <code>this</code> for easy method chaining
3725     */
3726    public ObservationDefinition setComponent(List<ObservationDefinitionComponentComponent> theComponent) { 
3727      this.component = theComponent;
3728      return this;
3729    }
3730
3731    public boolean hasComponent() { 
3732      if (this.component == null)
3733        return false;
3734      for (ObservationDefinitionComponentComponent item : this.component)
3735        if (!item.isEmpty())
3736          return true;
3737      return false;
3738    }
3739
3740    public ObservationDefinitionComponentComponent addComponent() { //3
3741      ObservationDefinitionComponentComponent t = new ObservationDefinitionComponentComponent();
3742      if (this.component == null)
3743        this.component = new ArrayList<ObservationDefinitionComponentComponent>();
3744      this.component.add(t);
3745      return t;
3746    }
3747
3748    public ObservationDefinition addComponent(ObservationDefinitionComponentComponent t) { //3
3749      if (t == null)
3750        return this;
3751      if (this.component == null)
3752        this.component = new ArrayList<ObservationDefinitionComponentComponent>();
3753      this.component.add(t);
3754      return this;
3755    }
3756
3757    /**
3758     * @return The first repetition of repeating field {@link #component}, creating it if it does not already exist {3}
3759     */
3760    public ObservationDefinitionComponentComponent getComponentFirstRep() { 
3761      if (getComponent().isEmpty()) {
3762        addComponent();
3763      }
3764      return getComponent().get(0);
3765    }
3766
3767      protected void listChildren(List<Property> children) {
3768        super.listChildren(children);
3769        children.add(new Property("url", "uri", "An absolute URL that is used to identify this ObservationDefinition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this ObservationDefinition is (or will be) published. The URL SHOULD include the major version of the ObservationDefinition. For more information see Technical and Business Versions.", 0, 1, url));
3770        children.add(new Property("identifier", "Identifier", "Business identifiers assigned to this ObservationDefinition. by the performer and/or other systems. These identifiers remain constant as the resource is updated and propagates from server to server.", 0, 1, identifier));
3771        children.add(new Property("version", "string", "The identifier that is used to identify this version of the ObservationDefinition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the ObservationDefinition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.", 0, 1, version));
3772        children.add(new Property("versionAlgorithm[x]", "string|Coding", "Indicates the mechanism used to compare versions to determine which is more current.", 0, 1, versionAlgorithm));
3773        children.add(new Property("name", "string", "A natural language name identifying the ObservationDefinition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name));
3774        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the ObservationDefinition.", 0, 1, title));
3775        children.add(new Property("status", "code", "The current state of the ObservationDefinition.", 0, 1, status));
3776        children.add(new Property("experimental", "boolean", "A flag to indicate that this ObservationDefinition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, 1, experimental));
3777        children.add(new Property("date", "dateTime", "The date (and optionally time) when the ObservationDefinition was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ObservationDefinition changes.", 0, 1, date));
3778        children.add(new Property("publisher", "string", "Helps establish the \"authority/credibility\" of the ObservationDefinition. May also allow for contact.", 0, 1, publisher));
3779        children.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
3780        children.add(new Property("description", "markdown", "A free text natural language description of the ObservationDefinition from the consumer's perspective.", 0, 1, description));
3781        children.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate ObservationDefinition instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
3782        children.add(new Property("jurisdiction", "CodeableConcept", "A jurisdiction in which the ObservationDefinition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
3783        children.add(new Property("purpose", "markdown", "Explains why this ObservationDefinition is needed and why it has been designed as it has.", 0, 1, purpose));
3784        children.add(new Property("copyright", "markdown", "Copyright statement relating to the ObservationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the ObservationDefinition.", 0, 1, copyright));
3785        children.add(new Property("copyrightLabel", "string", "A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').", 0, 1, copyrightLabel));
3786        children.add(new Property("approvalDate", "date", "The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, 1, approvalDate));
3787        children.add(new Property("lastReviewDate", "date", "The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.", 0, 1, lastReviewDate));
3788        children.add(new Property("effectivePeriod", "Period", "The period during which the ObservationDefinition content was or is planned to be effective.", 0, 1, effectivePeriod));
3789        children.add(new Property("derivedFromCanonical", "canonical(ObservationDefinition)", "The canonical URL pointing to another FHIR-defined ObservationDefinition that is adhered to in whole or in part by this definition.", 0, java.lang.Integer.MAX_VALUE, derivedFromCanonical));
3790        children.add(new Property("derivedFromUri", "uri", "The URL pointing to an externally-defined observation definition, guideline or other definition that is adhered to in whole or in part by this definition.", 0, java.lang.Integer.MAX_VALUE, derivedFromUri));
3791        children.add(new Property("subject", "CodeableConcept", "A code that describes the intended kind of subject of Observation instances conforming to this ObservationDefinition.", 0, java.lang.Integer.MAX_VALUE, subject));
3792        children.add(new Property("performerType", "CodeableConcept", "The type of individual/organization/device that is expected to act upon instances of this definition.", 0, 1, performerType));
3793        children.add(new Property("category", "CodeableConcept", "A code that classifies the general type of observation.", 0, java.lang.Integer.MAX_VALUE, category));
3794        children.add(new Property("code", "CodeableConcept", "Describes what will be observed. Sometimes this is called the observation \"name\".", 0, 1, code));
3795        children.add(new Property("permittedDataType", "code", "The data types allowed for the value element of the instance observations conforming to this ObservationDefinition.", 0, java.lang.Integer.MAX_VALUE, permittedDataType));
3796        children.add(new Property("multipleResultsAllowed", "boolean", "Multiple results allowed for observations conforming to this ObservationDefinition.", 0, 1, multipleResultsAllowed));
3797        children.add(new Property("bodySite", "CodeableConcept", "The site on the subject's body where the  observation is to be made.", 0, 1, bodySite));
3798        children.add(new Property("method", "CodeableConcept", "The method or technique used to perform the observation.", 0, 1, method));
3799        children.add(new Property("specimen", "Reference(SpecimenDefinition)", "The kind of specimen that this type of observation is produced on.", 0, java.lang.Integer.MAX_VALUE, specimen));
3800        children.add(new Property("device", "Reference(DeviceDefinition|Device)", "The measurement model of device or actual device used to produce observations of this type.", 0, java.lang.Integer.MAX_VALUE, device));
3801        children.add(new Property("preferredReportName", "string", "The preferred name to be used when reporting the results of observations conforming to this ObservationDefinition.", 0, 1, preferredReportName));
3802        children.add(new Property("permittedUnit", "Coding", "Units allowed for the valueQuantity element in the instance observations conforming to this ObservationDefinition.", 0, java.lang.Integer.MAX_VALUE, permittedUnit));
3803        children.add(new Property("qualifiedValue", "", "A set of qualified values associated with a context and a set of conditions -  provides a range for quantitative and ordinal observations and a collection of value sets for qualitative observations.", 0, java.lang.Integer.MAX_VALUE, qualifiedValue));
3804        children.add(new Property("hasMember", "Reference(ObservationDefinition|Questionnaire)", "This ObservationDefinition defines 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.", 0, java.lang.Integer.MAX_VALUE, hasMember));
3805        children.add(new Property("component", "", "Some observations have multiple component observations, expressed as separate code value pairs.", 0, java.lang.Integer.MAX_VALUE, component));
3806      }
3807
3808      @Override
3809      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3810        switch (_hash) {
3811        case 116079: /*url*/  return new Property("url", "uri", "An absolute URL that is used to identify this ObservationDefinition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this ObservationDefinition is (or will be) published. The URL SHOULD include the major version of the ObservationDefinition. For more information see Technical and Business Versions.", 0, 1, url);
3812        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifiers assigned to this ObservationDefinition. by the performer and/or other systems. These identifiers remain constant as the resource is updated and propagates from server to server.", 0, 1, identifier);
3813        case 351608024: /*version*/  return new Property("version", "string", "The identifier that is used to identify this version of the ObservationDefinition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the ObservationDefinition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.", 0, 1, version);
3814        case -115699031: /*versionAlgorithm[x]*/  return new Property("versionAlgorithm[x]", "string|Coding", "Indicates the mechanism used to compare versions to determine which is more current.", 0, 1, versionAlgorithm);
3815        case 1508158071: /*versionAlgorithm*/  return new Property("versionAlgorithm[x]", "string|Coding", "Indicates the mechanism used to compare versions to determine which is more current.", 0, 1, versionAlgorithm);
3816        case 1836908904: /*versionAlgorithmString*/  return new Property("versionAlgorithm[x]", "string", "Indicates the mechanism used to compare versions to determine which is more current.", 0, 1, versionAlgorithm);
3817        case 1373807809: /*versionAlgorithmCoding*/  return new Property("versionAlgorithm[x]", "Coding", "Indicates the mechanism used to compare versions to determine which is more current.", 0, 1, versionAlgorithm);
3818        case 3373707: /*name*/  return new Property("name", "string", "A natural language name identifying the ObservationDefinition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name);
3819        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the ObservationDefinition.", 0, 1, title);
3820        case -892481550: /*status*/  return new Property("status", "code", "The current state of the ObservationDefinition.", 0, 1, status);
3821        case -404562712: /*experimental*/  return new Property("experimental", "boolean", "A flag to indicate that this ObservationDefinition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, 1, experimental);
3822        case 3076014: /*date*/  return new Property("date", "dateTime", "The date (and optionally time) when the ObservationDefinition was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ObservationDefinition changes.", 0, 1, date);
3823        case 1447404028: /*publisher*/  return new Property("publisher", "string", "Helps establish the \"authority/credibility\" of the ObservationDefinition. May also allow for contact.", 0, 1, publisher);
3824        case 951526432: /*contact*/  return new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact);
3825        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the ObservationDefinition from the consumer's perspective.", 0, 1, description);
3826        case -669707736: /*useContext*/  return new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate ObservationDefinition instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
3827        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A jurisdiction in which the ObservationDefinition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
3828        case -220463842: /*purpose*/  return new Property("purpose", "markdown", "Explains why this ObservationDefinition is needed and why it has been designed as it has.", 0, 1, purpose);
3829        case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "Copyright statement relating to the ObservationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the ObservationDefinition.", 0, 1, copyright);
3830        case 765157229: /*copyrightLabel*/  return new Property("copyrightLabel", "string", "A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').", 0, 1, copyrightLabel);
3831        case 223539345: /*approvalDate*/  return new Property("approvalDate", "date", "The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, 1, approvalDate);
3832        case -1687512484: /*lastReviewDate*/  return new Property("lastReviewDate", "date", "The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.", 0, 1, lastReviewDate);
3833        case -403934648: /*effectivePeriod*/  return new Property("effectivePeriod", "Period", "The period during which the ObservationDefinition content was or is planned to be effective.", 0, 1, effectivePeriod);
3834        case -978133683: /*derivedFromCanonical*/  return new Property("derivedFromCanonical", "canonical(ObservationDefinition)", "The canonical URL pointing to another FHIR-defined ObservationDefinition that is adhered to in whole or in part by this definition.", 0, java.lang.Integer.MAX_VALUE, derivedFromCanonical);
3835        case -1076333435: /*derivedFromUri*/  return new Property("derivedFromUri", "uri", "The URL pointing to an externally-defined observation definition, guideline or other definition that is adhered to in whole or in part by this definition.", 0, java.lang.Integer.MAX_VALUE, derivedFromUri);
3836        case -1867885268: /*subject*/  return new Property("subject", "CodeableConcept", "A code that describes the intended kind of subject of Observation instances conforming to this ObservationDefinition.", 0, java.lang.Integer.MAX_VALUE, subject);
3837        case -901444568: /*performerType*/  return new Property("performerType", "CodeableConcept", "The type of individual/organization/device that is expected to act upon instances of this definition.", 0, 1, performerType);
3838        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "A code that classifies the general type of observation.", 0, java.lang.Integer.MAX_VALUE, category);
3839        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Describes what will be observed. Sometimes this is called the observation \"name\".", 0, 1, code);
3840        case -99492804: /*permittedDataType*/  return new Property("permittedDataType", "code", "The data types allowed for the value element of the instance observations conforming to this ObservationDefinition.", 0, java.lang.Integer.MAX_VALUE, permittedDataType);
3841        case -2102414590: /*multipleResultsAllowed*/  return new Property("multipleResultsAllowed", "boolean", "Multiple results allowed for observations conforming to this ObservationDefinition.", 0, 1, multipleResultsAllowed);
3842        case 1702620169: /*bodySite*/  return new Property("bodySite", "CodeableConcept", "The site on the subject's body where the  observation is to be made.", 0, 1, bodySite);
3843        case -1077554975: /*method*/  return new Property("method", "CodeableConcept", "The method or technique used to perform the observation.", 0, 1, method);
3844        case -2132868344: /*specimen*/  return new Property("specimen", "Reference(SpecimenDefinition)", "The kind of specimen that this type of observation is produced on.", 0, java.lang.Integer.MAX_VALUE, specimen);
3845        case -1335157162: /*device*/  return new Property("device", "Reference(DeviceDefinition|Device)", "The measurement model of device or actual device used to produce observations of this type.", 0, java.lang.Integer.MAX_VALUE, device);
3846        case -1851030208: /*preferredReportName*/  return new Property("preferredReportName", "string", "The preferred name to be used when reporting the results of observations conforming to this ObservationDefinition.", 0, 1, preferredReportName);
3847        case 1073054652: /*permittedUnit*/  return new Property("permittedUnit", "Coding", "Units allowed for the valueQuantity element in the instance observations conforming to this ObservationDefinition.", 0, java.lang.Integer.MAX_VALUE, permittedUnit);
3848        case -558517707: /*qualifiedValue*/  return new Property("qualifiedValue", "", "A set of qualified values associated with a context and a set of conditions -  provides a range for quantitative and ordinal observations and a collection of value sets for qualitative observations.", 0, java.lang.Integer.MAX_VALUE, qualifiedValue);
3849        case -458019372: /*hasMember*/  return new Property("hasMember", "Reference(ObservationDefinition|Questionnaire)", "This ObservationDefinition defines 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.", 0, java.lang.Integer.MAX_VALUE, hasMember);
3850        case -1399907075: /*component*/  return new Property("component", "", "Some observations have multiple component observations, expressed as separate code value pairs.", 0, java.lang.Integer.MAX_VALUE, component);
3851        default: return super.getNamedProperty(_hash, _name, _checkValid);
3852        }
3853
3854      }
3855
3856      @Override
3857      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3858        switch (hash) {
3859        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
3860        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // Identifier
3861        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
3862        case 1508158071: /*versionAlgorithm*/ return this.versionAlgorithm == null ? new Base[0] : new Base[] {this.versionAlgorithm}; // DataType
3863        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
3864        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
3865        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
3866        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
3867        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
3868        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
3869        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
3870        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
3871        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
3872        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
3873        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
3874        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
3875        case 765157229: /*copyrightLabel*/ return this.copyrightLabel == null ? new Base[0] : new Base[] {this.copyrightLabel}; // StringType
3876        case 223539345: /*approvalDate*/ return this.approvalDate == null ? new Base[0] : new Base[] {this.approvalDate}; // DateType
3877        case -1687512484: /*lastReviewDate*/ return this.lastReviewDate == null ? new Base[0] : new Base[] {this.lastReviewDate}; // DateType
3878        case -403934648: /*effectivePeriod*/ return this.effectivePeriod == null ? new Base[0] : new Base[] {this.effectivePeriod}; // Period
3879        case -978133683: /*derivedFromCanonical*/ return this.derivedFromCanonical == null ? new Base[0] : this.derivedFromCanonical.toArray(new Base[this.derivedFromCanonical.size()]); // CanonicalType
3880        case -1076333435: /*derivedFromUri*/ return this.derivedFromUri == null ? new Base[0] : this.derivedFromUri.toArray(new Base[this.derivedFromUri.size()]); // UriType
3881        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : this.subject.toArray(new Base[this.subject.size()]); // CodeableConcept
3882        case -901444568: /*performerType*/ return this.performerType == null ? new Base[0] : new Base[] {this.performerType}; // CodeableConcept
3883        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
3884        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
3885        case -99492804: /*permittedDataType*/ return this.permittedDataType == null ? new Base[0] : this.permittedDataType.toArray(new Base[this.permittedDataType.size()]); // Enumeration<ObservationDataType>
3886        case -2102414590: /*multipleResultsAllowed*/ return this.multipleResultsAllowed == null ? new Base[0] : new Base[] {this.multipleResultsAllowed}; // BooleanType
3887        case 1702620169: /*bodySite*/ return this.bodySite == null ? new Base[0] : new Base[] {this.bodySite}; // CodeableConcept
3888        case -1077554975: /*method*/ return this.method == null ? new Base[0] : new Base[] {this.method}; // CodeableConcept
3889        case -2132868344: /*specimen*/ return this.specimen == null ? new Base[0] : this.specimen.toArray(new Base[this.specimen.size()]); // Reference
3890        case -1335157162: /*device*/ return this.device == null ? new Base[0] : this.device.toArray(new Base[this.device.size()]); // Reference
3891        case -1851030208: /*preferredReportName*/ return this.preferredReportName == null ? new Base[0] : new Base[] {this.preferredReportName}; // StringType
3892        case 1073054652: /*permittedUnit*/ return this.permittedUnit == null ? new Base[0] : this.permittedUnit.toArray(new Base[this.permittedUnit.size()]); // Coding
3893        case -558517707: /*qualifiedValue*/ return this.qualifiedValue == null ? new Base[0] : this.qualifiedValue.toArray(new Base[this.qualifiedValue.size()]); // ObservationDefinitionQualifiedValueComponent
3894        case -458019372: /*hasMember*/ return this.hasMember == null ? new Base[0] : this.hasMember.toArray(new Base[this.hasMember.size()]); // Reference
3895        case -1399907075: /*component*/ return this.component == null ? new Base[0] : this.component.toArray(new Base[this.component.size()]); // ObservationDefinitionComponentComponent
3896        default: return super.getProperty(hash, name, checkValid);
3897        }
3898
3899      }
3900
3901      @Override
3902      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3903        switch (hash) {
3904        case 116079: // url
3905          this.url = TypeConvertor.castToUri(value); // UriType
3906          return value;
3907        case -1618432855: // identifier
3908          this.identifier = TypeConvertor.castToIdentifier(value); // Identifier
3909          return value;
3910        case 351608024: // version
3911          this.version = TypeConvertor.castToString(value); // StringType
3912          return value;
3913        case 1508158071: // versionAlgorithm
3914          this.versionAlgorithm = TypeConvertor.castToType(value); // DataType
3915          return value;
3916        case 3373707: // name
3917          this.name = TypeConvertor.castToString(value); // StringType
3918          return value;
3919        case 110371416: // title
3920          this.title = TypeConvertor.castToString(value); // StringType
3921          return value;
3922        case -892481550: // status
3923          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3924          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3925          return value;
3926        case -404562712: // experimental
3927          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
3928          return value;
3929        case 3076014: // date
3930          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
3931          return value;
3932        case 1447404028: // publisher
3933          this.publisher = TypeConvertor.castToString(value); // StringType
3934          return value;
3935        case 951526432: // contact
3936          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
3937          return value;
3938        case -1724546052: // description
3939          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
3940          return value;
3941        case -669707736: // useContext
3942          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
3943          return value;
3944        case -507075711: // jurisdiction
3945          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3946          return value;
3947        case -220463842: // purpose
3948          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
3949          return value;
3950        case 1522889671: // copyright
3951          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
3952          return value;
3953        case 765157229: // copyrightLabel
3954          this.copyrightLabel = TypeConvertor.castToString(value); // StringType
3955          return value;
3956        case 223539345: // approvalDate
3957          this.approvalDate = TypeConvertor.castToDate(value); // DateType
3958          return value;
3959        case -1687512484: // lastReviewDate
3960          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
3961          return value;
3962        case -403934648: // effectivePeriod
3963          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
3964          return value;
3965        case -978133683: // derivedFromCanonical
3966          this.getDerivedFromCanonical().add(TypeConvertor.castToCanonical(value)); // CanonicalType
3967          return value;
3968        case -1076333435: // derivedFromUri
3969          this.getDerivedFromUri().add(TypeConvertor.castToUri(value)); // UriType
3970          return value;
3971        case -1867885268: // subject
3972          this.getSubject().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3973          return value;
3974        case -901444568: // performerType
3975          this.performerType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3976          return value;
3977        case 50511102: // category
3978          this.getCategory().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3979          return value;
3980        case 3059181: // code
3981          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3982          return value;
3983        case -99492804: // permittedDataType
3984          value = new ObservationDataTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
3985          this.getPermittedDataType().add((Enumeration) value); // Enumeration<ObservationDataType>
3986          return value;
3987        case -2102414590: // multipleResultsAllowed
3988          this.multipleResultsAllowed = TypeConvertor.castToBoolean(value); // BooleanType
3989          return value;
3990        case 1702620169: // bodySite
3991          this.bodySite = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3992          return value;
3993        case -1077554975: // method
3994          this.method = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3995          return value;
3996        case -2132868344: // specimen
3997          this.getSpecimen().add(TypeConvertor.castToReference(value)); // Reference
3998          return value;
3999        case -1335157162: // device
4000          this.getDevice().add(TypeConvertor.castToReference(value)); // Reference
4001          return value;
4002        case -1851030208: // preferredReportName
4003          this.preferredReportName = TypeConvertor.castToString(value); // StringType
4004          return value;
4005        case 1073054652: // permittedUnit
4006          this.getPermittedUnit().add(TypeConvertor.castToCoding(value)); // Coding
4007          return value;
4008        case -558517707: // qualifiedValue
4009          this.getQualifiedValue().add((ObservationDefinitionQualifiedValueComponent) value); // ObservationDefinitionQualifiedValueComponent
4010          return value;
4011        case -458019372: // hasMember
4012          this.getHasMember().add(TypeConvertor.castToReference(value)); // Reference
4013          return value;
4014        case -1399907075: // component
4015          this.getComponent().add((ObservationDefinitionComponentComponent) value); // ObservationDefinitionComponentComponent
4016          return value;
4017        default: return super.setProperty(hash, name, value);
4018        }
4019
4020      }
4021
4022      @Override
4023      public Base setProperty(String name, Base value) throws FHIRException {
4024        if (name.equals("url")) {
4025          this.url = TypeConvertor.castToUri(value); // UriType
4026        } else if (name.equals("identifier")) {
4027          this.identifier = TypeConvertor.castToIdentifier(value); // Identifier
4028        } else if (name.equals("version")) {
4029          this.version = TypeConvertor.castToString(value); // StringType
4030        } else if (name.equals("versionAlgorithm[x]")) {
4031          this.versionAlgorithm = TypeConvertor.castToType(value); // DataType
4032        } else if (name.equals("name")) {
4033          this.name = TypeConvertor.castToString(value); // StringType
4034        } else if (name.equals("title")) {
4035          this.title = TypeConvertor.castToString(value); // StringType
4036        } else if (name.equals("status")) {
4037          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
4038          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
4039        } else if (name.equals("experimental")) {
4040          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
4041        } else if (name.equals("date")) {
4042          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
4043        } else if (name.equals("publisher")) {
4044          this.publisher = TypeConvertor.castToString(value); // StringType
4045        } else if (name.equals("contact")) {
4046          this.getContact().add(TypeConvertor.castToContactDetail(value));
4047        } else if (name.equals("description")) {
4048          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
4049        } else if (name.equals("useContext")) {
4050          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
4051        } else if (name.equals("jurisdiction")) {
4052          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
4053        } else if (name.equals("purpose")) {
4054          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
4055        } else if (name.equals("copyright")) {
4056          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
4057        } else if (name.equals("copyrightLabel")) {
4058          this.copyrightLabel = TypeConvertor.castToString(value); // StringType
4059        } else if (name.equals("approvalDate")) {
4060          this.approvalDate = TypeConvertor.castToDate(value); // DateType
4061        } else if (name.equals("lastReviewDate")) {
4062          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
4063        } else if (name.equals("effectivePeriod")) {
4064          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
4065        } else if (name.equals("derivedFromCanonical")) {
4066          this.getDerivedFromCanonical().add(TypeConvertor.castToCanonical(value));
4067        } else if (name.equals("derivedFromUri")) {
4068          this.getDerivedFromUri().add(TypeConvertor.castToUri(value));
4069        } else if (name.equals("subject")) {
4070          this.getSubject().add(TypeConvertor.castToCodeableConcept(value));
4071        } else if (name.equals("performerType")) {
4072          this.performerType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4073        } else if (name.equals("category")) {
4074          this.getCategory().add(TypeConvertor.castToCodeableConcept(value));
4075        } else if (name.equals("code")) {
4076          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4077        } else if (name.equals("permittedDataType")) {
4078          value = new ObservationDataTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
4079          this.getPermittedDataType().add((Enumeration) value);
4080        } else if (name.equals("multipleResultsAllowed")) {
4081          this.multipleResultsAllowed = TypeConvertor.castToBoolean(value); // BooleanType
4082        } else if (name.equals("bodySite")) {
4083          this.bodySite = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4084        } else if (name.equals("method")) {
4085          this.method = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4086        } else if (name.equals("specimen")) {
4087          this.getSpecimen().add(TypeConvertor.castToReference(value));
4088        } else if (name.equals("device")) {
4089          this.getDevice().add(TypeConvertor.castToReference(value));
4090        } else if (name.equals("preferredReportName")) {
4091          this.preferredReportName = TypeConvertor.castToString(value); // StringType
4092        } else if (name.equals("permittedUnit")) {
4093          this.getPermittedUnit().add(TypeConvertor.castToCoding(value));
4094        } else if (name.equals("qualifiedValue")) {
4095          this.getQualifiedValue().add((ObservationDefinitionQualifiedValueComponent) value);
4096        } else if (name.equals("hasMember")) {
4097          this.getHasMember().add(TypeConvertor.castToReference(value));
4098        } else if (name.equals("component")) {
4099          this.getComponent().add((ObservationDefinitionComponentComponent) value);
4100        } else
4101          return super.setProperty(name, value);
4102        return value;
4103      }
4104
4105  @Override
4106  public void removeChild(String name, Base value) throws FHIRException {
4107        if (name.equals("url")) {
4108          this.url = null;
4109        } else if (name.equals("identifier")) {
4110          this.identifier = null;
4111        } else if (name.equals("version")) {
4112          this.version = null;
4113        } else if (name.equals("versionAlgorithm[x]")) {
4114          this.versionAlgorithm = null;
4115        } else if (name.equals("name")) {
4116          this.name = null;
4117        } else if (name.equals("title")) {
4118          this.title = null;
4119        } else if (name.equals("status")) {
4120          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
4121          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
4122        } else if (name.equals("experimental")) {
4123          this.experimental = null;
4124        } else if (name.equals("date")) {
4125          this.date = null;
4126        } else if (name.equals("publisher")) {
4127          this.publisher = null;
4128        } else if (name.equals("contact")) {
4129          this.getContact().remove(value);
4130        } else if (name.equals("description")) {
4131          this.description = null;
4132        } else if (name.equals("useContext")) {
4133          this.getUseContext().remove(value);
4134        } else if (name.equals("jurisdiction")) {
4135          this.getJurisdiction().remove(value);
4136        } else if (name.equals("purpose")) {
4137          this.purpose = null;
4138        } else if (name.equals("copyright")) {
4139          this.copyright = null;
4140        } else if (name.equals("copyrightLabel")) {
4141          this.copyrightLabel = null;
4142        } else if (name.equals("approvalDate")) {
4143          this.approvalDate = null;
4144        } else if (name.equals("lastReviewDate")) {
4145          this.lastReviewDate = null;
4146        } else if (name.equals("effectivePeriod")) {
4147          this.effectivePeriod = null;
4148        } else if (name.equals("derivedFromCanonical")) {
4149          this.getDerivedFromCanonical().remove(value);
4150        } else if (name.equals("derivedFromUri")) {
4151          this.getDerivedFromUri().remove(value);
4152        } else if (name.equals("subject")) {
4153          this.getSubject().remove(value);
4154        } else if (name.equals("performerType")) {
4155          this.performerType = null;
4156        } else if (name.equals("category")) {
4157          this.getCategory().remove(value);
4158        } else if (name.equals("code")) {
4159          this.code = null;
4160        } else if (name.equals("permittedDataType")) {
4161          value = new ObservationDataTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
4162          this.getPermittedDataType().remove((Enumeration) value);
4163        } else if (name.equals("multipleResultsAllowed")) {
4164          this.multipleResultsAllowed = null;
4165        } else if (name.equals("bodySite")) {
4166          this.bodySite = null;
4167        } else if (name.equals("method")) {
4168          this.method = null;
4169        } else if (name.equals("specimen")) {
4170          this.getSpecimen().remove(value);
4171        } else if (name.equals("device")) {
4172          this.getDevice().remove(value);
4173        } else if (name.equals("preferredReportName")) {
4174          this.preferredReportName = null;
4175        } else if (name.equals("permittedUnit")) {
4176          this.getPermittedUnit().remove(value);
4177        } else if (name.equals("qualifiedValue")) {
4178          this.getQualifiedValue().remove((ObservationDefinitionQualifiedValueComponent) value);
4179        } else if (name.equals("hasMember")) {
4180          this.getHasMember().remove(value);
4181        } else if (name.equals("component")) {
4182          this.getComponent().remove((ObservationDefinitionComponentComponent) value);
4183        } else
4184          super.removeChild(name, value);
4185        
4186      }
4187
4188      @Override
4189      public Base makeProperty(int hash, String name) throws FHIRException {
4190        switch (hash) {
4191        case 116079:  return getUrlElement();
4192        case -1618432855:  return getIdentifier();
4193        case 351608024:  return getVersionElement();
4194        case -115699031:  return getVersionAlgorithm();
4195        case 1508158071:  return getVersionAlgorithm();
4196        case 3373707:  return getNameElement();
4197        case 110371416:  return getTitleElement();
4198        case -892481550:  return getStatusElement();
4199        case -404562712:  return getExperimentalElement();
4200        case 3076014:  return getDateElement();
4201        case 1447404028:  return getPublisherElement();
4202        case 951526432:  return addContact(); 
4203        case -1724546052:  return getDescriptionElement();
4204        case -669707736:  return addUseContext(); 
4205        case -507075711:  return addJurisdiction(); 
4206        case -220463842:  return getPurposeElement();
4207        case 1522889671:  return getCopyrightElement();
4208        case 765157229:  return getCopyrightLabelElement();
4209        case 223539345:  return getApprovalDateElement();
4210        case -1687512484:  return getLastReviewDateElement();
4211        case -403934648:  return getEffectivePeriod();
4212        case -978133683:  return addDerivedFromCanonicalElement();
4213        case -1076333435:  return addDerivedFromUriElement();
4214        case -1867885268:  return addSubject(); 
4215        case -901444568:  return getPerformerType();
4216        case 50511102:  return addCategory(); 
4217        case 3059181:  return getCode();
4218        case -99492804:  return addPermittedDataTypeElement();
4219        case -2102414590:  return getMultipleResultsAllowedElement();
4220        case 1702620169:  return getBodySite();
4221        case -1077554975:  return getMethod();
4222        case -2132868344:  return addSpecimen(); 
4223        case -1335157162:  return addDevice(); 
4224        case -1851030208:  return getPreferredReportNameElement();
4225        case 1073054652:  return addPermittedUnit(); 
4226        case -558517707:  return addQualifiedValue(); 
4227        case -458019372:  return addHasMember(); 
4228        case -1399907075:  return addComponent(); 
4229        default: return super.makeProperty(hash, name);
4230        }
4231
4232      }
4233
4234      @Override
4235      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4236        switch (hash) {
4237        case 116079: /*url*/ return new String[] {"uri"};
4238        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
4239        case 351608024: /*version*/ return new String[] {"string"};
4240        case 1508158071: /*versionAlgorithm*/ return new String[] {"string", "Coding"};
4241        case 3373707: /*name*/ return new String[] {"string"};
4242        case 110371416: /*title*/ return new String[] {"string"};
4243        case -892481550: /*status*/ return new String[] {"code"};
4244        case -404562712: /*experimental*/ return new String[] {"boolean"};
4245        case 3076014: /*date*/ return new String[] {"dateTime"};
4246        case 1447404028: /*publisher*/ return new String[] {"string"};
4247        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
4248        case -1724546052: /*description*/ return new String[] {"markdown"};
4249        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
4250        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
4251        case -220463842: /*purpose*/ return new String[] {"markdown"};
4252        case 1522889671: /*copyright*/ return new String[] {"markdown"};
4253        case 765157229: /*copyrightLabel*/ return new String[] {"string"};
4254        case 223539345: /*approvalDate*/ return new String[] {"date"};
4255        case -1687512484: /*lastReviewDate*/ return new String[] {"date"};
4256        case -403934648: /*effectivePeriod*/ return new String[] {"Period"};
4257        case -978133683: /*derivedFromCanonical*/ return new String[] {"canonical"};
4258        case -1076333435: /*derivedFromUri*/ return new String[] {"uri"};
4259        case -1867885268: /*subject*/ return new String[] {"CodeableConcept"};
4260        case -901444568: /*performerType*/ return new String[] {"CodeableConcept"};
4261        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
4262        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
4263        case -99492804: /*permittedDataType*/ return new String[] {"code"};
4264        case -2102414590: /*multipleResultsAllowed*/ return new String[] {"boolean"};
4265        case 1702620169: /*bodySite*/ return new String[] {"CodeableConcept"};
4266        case -1077554975: /*method*/ return new String[] {"CodeableConcept"};
4267        case -2132868344: /*specimen*/ return new String[] {"Reference"};
4268        case -1335157162: /*device*/ return new String[] {"Reference"};
4269        case -1851030208: /*preferredReportName*/ return new String[] {"string"};
4270        case 1073054652: /*permittedUnit*/ return new String[] {"Coding"};
4271        case -558517707: /*qualifiedValue*/ return new String[] {};
4272        case -458019372: /*hasMember*/ return new String[] {"Reference"};
4273        case -1399907075: /*component*/ return new String[] {};
4274        default: return super.getTypesForProperty(hash, name);
4275        }
4276
4277      }
4278
4279      @Override
4280      public Base addChild(String name) throws FHIRException {
4281        if (name.equals("url")) {
4282          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.url");
4283        }
4284        else if (name.equals("identifier")) {
4285          this.identifier = new Identifier();
4286          return this.identifier;
4287        }
4288        else if (name.equals("version")) {
4289          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.version");
4290        }
4291        else if (name.equals("versionAlgorithmString")) {
4292          this.versionAlgorithm = new StringType();
4293          return this.versionAlgorithm;
4294        }
4295        else if (name.equals("versionAlgorithmCoding")) {
4296          this.versionAlgorithm = new Coding();
4297          return this.versionAlgorithm;
4298        }
4299        else if (name.equals("name")) {
4300          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.name");
4301        }
4302        else if (name.equals("title")) {
4303          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.title");
4304        }
4305        else if (name.equals("status")) {
4306          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.status");
4307        }
4308        else if (name.equals("experimental")) {
4309          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.experimental");
4310        }
4311        else if (name.equals("date")) {
4312          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.date");
4313        }
4314        else if (name.equals("publisher")) {
4315          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.publisher");
4316        }
4317        else if (name.equals("contact")) {
4318          return addContact();
4319        }
4320        else if (name.equals("description")) {
4321          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.description");
4322        }
4323        else if (name.equals("useContext")) {
4324          return addUseContext();
4325        }
4326        else if (name.equals("jurisdiction")) {
4327          return addJurisdiction();
4328        }
4329        else if (name.equals("purpose")) {
4330          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.purpose");
4331        }
4332        else if (name.equals("copyright")) {
4333          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.copyright");
4334        }
4335        else if (name.equals("copyrightLabel")) {
4336          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.copyrightLabel");
4337        }
4338        else if (name.equals("approvalDate")) {
4339          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.approvalDate");
4340        }
4341        else if (name.equals("lastReviewDate")) {
4342          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.lastReviewDate");
4343        }
4344        else if (name.equals("effectivePeriod")) {
4345          this.effectivePeriod = new Period();
4346          return this.effectivePeriod;
4347        }
4348        else if (name.equals("derivedFromCanonical")) {
4349          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.derivedFromCanonical");
4350        }
4351        else if (name.equals("derivedFromUri")) {
4352          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.derivedFromUri");
4353        }
4354        else if (name.equals("subject")) {
4355          return addSubject();
4356        }
4357        else if (name.equals("performerType")) {
4358          this.performerType = new CodeableConcept();
4359          return this.performerType;
4360        }
4361        else if (name.equals("category")) {
4362          return addCategory();
4363        }
4364        else if (name.equals("code")) {
4365          this.code = new CodeableConcept();
4366          return this.code;
4367        }
4368        else if (name.equals("permittedDataType")) {
4369          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.permittedDataType");
4370        }
4371        else if (name.equals("multipleResultsAllowed")) {
4372          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.multipleResultsAllowed");
4373        }
4374        else if (name.equals("bodySite")) {
4375          this.bodySite = new CodeableConcept();
4376          return this.bodySite;
4377        }
4378        else if (name.equals("method")) {
4379          this.method = new CodeableConcept();
4380          return this.method;
4381        }
4382        else if (name.equals("specimen")) {
4383          return addSpecimen();
4384        }
4385        else if (name.equals("device")) {
4386          return addDevice();
4387        }
4388        else if (name.equals("preferredReportName")) {
4389          throw new FHIRException("Cannot call addChild on a singleton property ObservationDefinition.preferredReportName");
4390        }
4391        else if (name.equals("permittedUnit")) {
4392          return addPermittedUnit();
4393        }
4394        else if (name.equals("qualifiedValue")) {
4395          return addQualifiedValue();
4396        }
4397        else if (name.equals("hasMember")) {
4398          return addHasMember();
4399        }
4400        else if (name.equals("component")) {
4401          return addComponent();
4402        }
4403        else
4404          return super.addChild(name);
4405      }
4406
4407  public String fhirType() {
4408    return "ObservationDefinition";
4409
4410  }
4411
4412      public ObservationDefinition copy() {
4413        ObservationDefinition dst = new ObservationDefinition();
4414        copyValues(dst);
4415        return dst;
4416      }
4417
4418      public void copyValues(ObservationDefinition dst) {
4419        super.copyValues(dst);
4420        dst.url = url == null ? null : url.copy();
4421        dst.identifier = identifier == null ? null : identifier.copy();
4422        dst.version = version == null ? null : version.copy();
4423        dst.versionAlgorithm = versionAlgorithm == null ? null : versionAlgorithm.copy();
4424        dst.name = name == null ? null : name.copy();
4425        dst.title = title == null ? null : title.copy();
4426        dst.status = status == null ? null : status.copy();
4427        dst.experimental = experimental == null ? null : experimental.copy();
4428        dst.date = date == null ? null : date.copy();
4429        dst.publisher = publisher == null ? null : publisher.copy();
4430        if (contact != null) {
4431          dst.contact = new ArrayList<ContactDetail>();
4432          for (ContactDetail i : contact)
4433            dst.contact.add(i.copy());
4434        };
4435        dst.description = description == null ? null : description.copy();
4436        if (useContext != null) {
4437          dst.useContext = new ArrayList<UsageContext>();
4438          for (UsageContext i : useContext)
4439            dst.useContext.add(i.copy());
4440        };
4441        if (jurisdiction != null) {
4442          dst.jurisdiction = new ArrayList<CodeableConcept>();
4443          for (CodeableConcept i : jurisdiction)
4444            dst.jurisdiction.add(i.copy());
4445        };
4446        dst.purpose = purpose == null ? null : purpose.copy();
4447        dst.copyright = copyright == null ? null : copyright.copy();
4448        dst.copyrightLabel = copyrightLabel == null ? null : copyrightLabel.copy();
4449        dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
4450        dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
4451        dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
4452        if (derivedFromCanonical != null) {
4453          dst.derivedFromCanonical = new ArrayList<CanonicalType>();
4454          for (CanonicalType i : derivedFromCanonical)
4455            dst.derivedFromCanonical.add(i.copy());
4456        };
4457        if (derivedFromUri != null) {
4458          dst.derivedFromUri = new ArrayList<UriType>();
4459          for (UriType i : derivedFromUri)
4460            dst.derivedFromUri.add(i.copy());
4461        };
4462        if (subject != null) {
4463          dst.subject = new ArrayList<CodeableConcept>();
4464          for (CodeableConcept i : subject)
4465            dst.subject.add(i.copy());
4466        };
4467        dst.performerType = performerType == null ? null : performerType.copy();
4468        if (category != null) {
4469          dst.category = new ArrayList<CodeableConcept>();
4470          for (CodeableConcept i : category)
4471            dst.category.add(i.copy());
4472        };
4473        dst.code = code == null ? null : code.copy();
4474        if (permittedDataType != null) {
4475          dst.permittedDataType = new ArrayList<Enumeration<ObservationDataType>>();
4476          for (Enumeration<ObservationDataType> i : permittedDataType)
4477            dst.permittedDataType.add(i.copy());
4478        };
4479        dst.multipleResultsAllowed = multipleResultsAllowed == null ? null : multipleResultsAllowed.copy();
4480        dst.bodySite = bodySite == null ? null : bodySite.copy();
4481        dst.method = method == null ? null : method.copy();
4482        if (specimen != null) {
4483          dst.specimen = new ArrayList<Reference>();
4484          for (Reference i : specimen)
4485            dst.specimen.add(i.copy());
4486        };
4487        if (device != null) {
4488          dst.device = new ArrayList<Reference>();
4489          for (Reference i : device)
4490            dst.device.add(i.copy());
4491        };
4492        dst.preferredReportName = preferredReportName == null ? null : preferredReportName.copy();
4493        if (permittedUnit != null) {
4494          dst.permittedUnit = new ArrayList<Coding>();
4495          for (Coding i : permittedUnit)
4496            dst.permittedUnit.add(i.copy());
4497        };
4498        if (qualifiedValue != null) {
4499          dst.qualifiedValue = new ArrayList<ObservationDefinitionQualifiedValueComponent>();
4500          for (ObservationDefinitionQualifiedValueComponent i : qualifiedValue)
4501            dst.qualifiedValue.add(i.copy());
4502        };
4503        if (hasMember != null) {
4504          dst.hasMember = new ArrayList<Reference>();
4505          for (Reference i : hasMember)
4506            dst.hasMember.add(i.copy());
4507        };
4508        if (component != null) {
4509          dst.component = new ArrayList<ObservationDefinitionComponentComponent>();
4510          for (ObservationDefinitionComponentComponent i : component)
4511            dst.component.add(i.copy());
4512        };
4513      }
4514
4515      protected ObservationDefinition typedCopy() {
4516        return copy();
4517      }
4518
4519      @Override
4520      public boolean equalsDeep(Base other_) {
4521        if (!super.equalsDeep(other_))
4522          return false;
4523        if (!(other_ instanceof ObservationDefinition))
4524          return false;
4525        ObservationDefinition o = (ObservationDefinition) other_;
4526        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
4527           && compareDeep(versionAlgorithm, o.versionAlgorithm, true) && compareDeep(name, o.name, true) && compareDeep(title, o.title, true)
4528           && compareDeep(status, o.status, true) && compareDeep(experimental, o.experimental, true) && compareDeep(date, o.date, true)
4529           && compareDeep(publisher, o.publisher, true) && compareDeep(contact, o.contact, true) && compareDeep(description, o.description, true)
4530           && compareDeep(useContext, o.useContext, true) && compareDeep(jurisdiction, o.jurisdiction, true)
4531           && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true) && compareDeep(copyrightLabel, o.copyrightLabel, true)
4532           && compareDeep(approvalDate, o.approvalDate, true) && compareDeep(lastReviewDate, o.lastReviewDate, true)
4533           && compareDeep(effectivePeriod, o.effectivePeriod, true) && compareDeep(derivedFromCanonical, o.derivedFromCanonical, true)
4534           && compareDeep(derivedFromUri, o.derivedFromUri, true) && compareDeep(subject, o.subject, true)
4535           && compareDeep(performerType, o.performerType, true) && compareDeep(category, o.category, true)
4536           && compareDeep(code, o.code, true) && compareDeep(permittedDataType, o.permittedDataType, true)
4537           && compareDeep(multipleResultsAllowed, o.multipleResultsAllowed, true) && compareDeep(bodySite, o.bodySite, true)
4538           && compareDeep(method, o.method, true) && compareDeep(specimen, o.specimen, true) && compareDeep(device, o.device, true)
4539           && compareDeep(preferredReportName, o.preferredReportName, true) && compareDeep(permittedUnit, o.permittedUnit, true)
4540           && compareDeep(qualifiedValue, o.qualifiedValue, true) && compareDeep(hasMember, o.hasMember, true)
4541           && compareDeep(component, o.component, true);
4542      }
4543
4544      @Override
4545      public boolean equalsShallow(Base other_) {
4546        if (!super.equalsShallow(other_))
4547          return false;
4548        if (!(other_ instanceof ObservationDefinition))
4549          return false;
4550        ObservationDefinition o = (ObservationDefinition) other_;
4551        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(name, o.name, true)
4552           && compareValues(title, o.title, true) && compareValues(status, o.status, true) && compareValues(experimental, o.experimental, true)
4553           && compareValues(date, o.date, true) && compareValues(publisher, o.publisher, true) && compareValues(description, o.description, true)
4554           && compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true) && compareValues(copyrightLabel, o.copyrightLabel, true)
4555           && compareValues(approvalDate, o.approvalDate, true) && compareValues(lastReviewDate, o.lastReviewDate, true)
4556           && compareValues(derivedFromCanonical, o.derivedFromCanonical, true) && compareValues(derivedFromUri, o.derivedFromUri, true)
4557           && compareValues(permittedDataType, o.permittedDataType, true) && compareValues(multipleResultsAllowed, o.multipleResultsAllowed, true)
4558           && compareValues(preferredReportName, o.preferredReportName, true);
4559      }
4560
4561      public boolean isEmpty() {
4562        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, identifier, version
4563          , versionAlgorithm, name, title, status, experimental, date, publisher, contact
4564          , description, useContext, jurisdiction, purpose, copyright, copyrightLabel, approvalDate
4565          , lastReviewDate, effectivePeriod, derivedFromCanonical, derivedFromUri, subject, performerType
4566          , category, code, permittedDataType, multipleResultsAllowed, bodySite, method, specimen
4567          , device, preferredReportName, permittedUnit, qualifiedValue, hasMember, component
4568          );
4569      }
4570
4571  @Override
4572  public ResourceType getResourceType() {
4573    return ResourceType.ObservationDefinition;
4574   }
4575
4576 /**
4577   * Search parameter: <b>identifier</b>
4578   * <p>
4579   * Description: <b>Multiple Resources: 
4580
4581* [ActivityDefinition](activitydefinition.html): External identifier for the activity definition
4582* [ActorDefinition](actordefinition.html): External identifier for the Actor Definition
4583* [CapabilityStatement](capabilitystatement.html): External identifier for the capability statement
4584* [ChargeItemDefinition](chargeitemdefinition.html): External identifier for the charge item definition
4585* [Citation](citation.html): External identifier for the citation
4586* [CodeSystem](codesystem.html): External identifier for the code system
4587* [ConceptMap](conceptmap.html): External identifier for the concept map
4588* [ConditionDefinition](conditiondefinition.html): External identifier for the condition definition
4589* [EventDefinition](eventdefinition.html): External identifier for the event definition
4590* [Evidence](evidence.html): External identifier for the evidence
4591* [EvidenceReport](evidencereport.html): External identifier for the evidence report
4592* [EvidenceVariable](evidencevariable.html): External identifier for the evidence variable
4593* [ExampleScenario](examplescenario.html): External identifier for the example scenario
4594* [GraphDefinition](graphdefinition.html): External identifier for the graph definition
4595* [ImplementationGuide](implementationguide.html): External identifier for the implementation guide
4596* [Library](library.html): External identifier for the library
4597* [Measure](measure.html): External identifier for the measure
4598* [MedicationKnowledge](medicationknowledge.html): Business identifier for this medication
4599* [MessageDefinition](messagedefinition.html): External identifier for the message definition
4600* [NamingSystem](namingsystem.html): External identifier for the naming system
4601* [ObservationDefinition](observationdefinition.html): The unique identifier associated with the specimen definition
4602* [OperationDefinition](operationdefinition.html): External identifier for the search parameter
4603* [PlanDefinition](plandefinition.html): External identifier for the plan definition
4604* [Questionnaire](questionnaire.html): External identifier for the questionnaire
4605* [Requirements](requirements.html): External identifier for the requirements
4606* [SearchParameter](searchparameter.html): External identifier for the search parameter
4607* [SpecimenDefinition](specimendefinition.html): The unique identifier associated with the SpecimenDefinition
4608* [StructureDefinition](structuredefinition.html): External identifier for the structure definition
4609* [StructureMap](structuremap.html): External identifier for the structure map
4610* [SubscriptionTopic](subscriptiontopic.html): Business Identifier for SubscriptionTopic
4611* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities
4612* [TestPlan](testplan.html): An identifier for the test plan
4613* [TestScript](testscript.html): External identifier for the test script
4614* [ValueSet](valueset.html): External identifier for the value set
4615</b><br>
4616   * Type: <b>token</b><br>
4617   * Path: <b>ActivityDefinition.identifier | ActorDefinition.identifier | CapabilityStatement.identifier | ChargeItemDefinition.identifier | Citation.identifier | CodeSystem.identifier | ConceptMap.identifier | ConditionDefinition.identifier | EventDefinition.identifier | Evidence.identifier | EvidenceReport.identifier | EvidenceVariable.identifier | ExampleScenario.identifier | GraphDefinition.identifier | ImplementationGuide.identifier | Library.identifier | Measure.identifier | MedicationKnowledge.identifier | MessageDefinition.identifier | NamingSystem.identifier | ObservationDefinition.identifier | OperationDefinition.identifier | PlanDefinition.identifier | Questionnaire.identifier | Requirements.identifier | SearchParameter.identifier | SpecimenDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | SubscriptionTopic.identifier | TerminologyCapabilities.identifier | TestPlan.identifier | TestScript.identifier | ValueSet.identifier</b><br>
4618   * </p>
4619   */
4620  @SearchParamDefinition(name="identifier", path="ActivityDefinition.identifier | ActorDefinition.identifier | CapabilityStatement.identifier | ChargeItemDefinition.identifier | Citation.identifier | CodeSystem.identifier | ConceptMap.identifier | ConditionDefinition.identifier | EventDefinition.identifier | Evidence.identifier | EvidenceReport.identifier | EvidenceVariable.identifier | ExampleScenario.identifier | GraphDefinition.identifier | ImplementationGuide.identifier | Library.identifier | Measure.identifier | MedicationKnowledge.identifier | MessageDefinition.identifier | NamingSystem.identifier | ObservationDefinition.identifier | OperationDefinition.identifier | PlanDefinition.identifier | Questionnaire.identifier | Requirements.identifier | SearchParameter.identifier | SpecimenDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | SubscriptionTopic.identifier | TerminologyCapabilities.identifier | TestPlan.identifier | TestScript.identifier | ValueSet.identifier", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): External identifier for the activity definition\r\n* [ActorDefinition](actordefinition.html): External identifier for the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): External identifier for the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): External identifier for the charge item definition\r\n* [Citation](citation.html): External identifier for the citation\r\n* [CodeSystem](codesystem.html): External identifier for the code system\r\n* [ConceptMap](conceptmap.html): External identifier for the concept map\r\n* [ConditionDefinition](conditiondefinition.html): External identifier for the condition definition\r\n* [EventDefinition](eventdefinition.html): External identifier for the event definition\r\n* [Evidence](evidence.html): External identifier for the evidence\r\n* [EvidenceReport](evidencereport.html): External identifier for the evidence report\r\n* [EvidenceVariable](evidencevariable.html): External identifier for the evidence variable\r\n* [ExampleScenario](examplescenario.html): External identifier for the example scenario\r\n* [GraphDefinition](graphdefinition.html): External identifier for the graph definition\r\n* [ImplementationGuide](implementationguide.html): External identifier for the implementation guide\r\n* [Library](library.html): External identifier for the library\r\n* [Measure](measure.html): External identifier for the measure\r\n* [MedicationKnowledge](medicationknowledge.html): Business identifier for this medication\r\n* [MessageDefinition](messagedefinition.html): External identifier for the message definition\r\n* [NamingSystem](namingsystem.html): External identifier for the naming system\r\n* [ObservationDefinition](observationdefinition.html): The unique identifier associated with the specimen definition\r\n* [OperationDefinition](operationdefinition.html): External identifier for the search parameter\r\n* [PlanDefinition](plandefinition.html): External identifier for the plan definition\r\n* [Questionnaire](questionnaire.html): External identifier for the questionnaire\r\n* [Requirements](requirements.html): External identifier for the requirements\r\n* [SearchParameter](searchparameter.html): External identifier for the search parameter\r\n* [SpecimenDefinition](specimendefinition.html): The unique identifier associated with the SpecimenDefinition\r\n* [StructureDefinition](structuredefinition.html): External identifier for the structure definition\r\n* [StructureMap](structuremap.html): External identifier for the structure map\r\n* [SubscriptionTopic](subscriptiontopic.html): Business Identifier for SubscriptionTopic\r\n* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities\r\n* [TestPlan](testplan.html): An identifier for the test plan\r\n* [TestScript](testscript.html): External identifier for the test script\r\n* [ValueSet](valueset.html): External identifier for the value set\r\n", type="token" )
4621  public static final String SP_IDENTIFIER = "identifier";
4622 /**
4623   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
4624   * <p>
4625   * Description: <b>Multiple Resources: 
4626
4627* [ActivityDefinition](activitydefinition.html): External identifier for the activity definition
4628* [ActorDefinition](actordefinition.html): External identifier for the Actor Definition
4629* [CapabilityStatement](capabilitystatement.html): External identifier for the capability statement
4630* [ChargeItemDefinition](chargeitemdefinition.html): External identifier for the charge item definition
4631* [Citation](citation.html): External identifier for the citation
4632* [CodeSystem](codesystem.html): External identifier for the code system
4633* [ConceptMap](conceptmap.html): External identifier for the concept map
4634* [ConditionDefinition](conditiondefinition.html): External identifier for the condition definition
4635* [EventDefinition](eventdefinition.html): External identifier for the event definition
4636* [Evidence](evidence.html): External identifier for the evidence
4637* [EvidenceReport](evidencereport.html): External identifier for the evidence report
4638* [EvidenceVariable](evidencevariable.html): External identifier for the evidence variable
4639* [ExampleScenario](examplescenario.html): External identifier for the example scenario
4640* [GraphDefinition](graphdefinition.html): External identifier for the graph definition
4641* [ImplementationGuide](implementationguide.html): External identifier for the implementation guide
4642* [Library](library.html): External identifier for the library
4643* [Measure](measure.html): External identifier for the measure
4644* [MedicationKnowledge](medicationknowledge.html): Business identifier for this medication
4645* [MessageDefinition](messagedefinition.html): External identifier for the message definition
4646* [NamingSystem](namingsystem.html): External identifier for the naming system
4647* [ObservationDefinition](observationdefinition.html): The unique identifier associated with the specimen definition
4648* [OperationDefinition](operationdefinition.html): External identifier for the search parameter
4649* [PlanDefinition](plandefinition.html): External identifier for the plan definition
4650* [Questionnaire](questionnaire.html): External identifier for the questionnaire
4651* [Requirements](requirements.html): External identifier for the requirements
4652* [SearchParameter](searchparameter.html): External identifier for the search parameter
4653* [SpecimenDefinition](specimendefinition.html): The unique identifier associated with the SpecimenDefinition
4654* [StructureDefinition](structuredefinition.html): External identifier for the structure definition
4655* [StructureMap](structuremap.html): External identifier for the structure map
4656* [SubscriptionTopic](subscriptiontopic.html): Business Identifier for SubscriptionTopic
4657* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities
4658* [TestPlan](testplan.html): An identifier for the test plan
4659* [TestScript](testscript.html): External identifier for the test script
4660* [ValueSet](valueset.html): External identifier for the value set
4661</b><br>
4662   * Type: <b>token</b><br>
4663   * Path: <b>ActivityDefinition.identifier | ActorDefinition.identifier | CapabilityStatement.identifier | ChargeItemDefinition.identifier | Citation.identifier | CodeSystem.identifier | ConceptMap.identifier | ConditionDefinition.identifier | EventDefinition.identifier | Evidence.identifier | EvidenceReport.identifier | EvidenceVariable.identifier | ExampleScenario.identifier | GraphDefinition.identifier | ImplementationGuide.identifier | Library.identifier | Measure.identifier | MedicationKnowledge.identifier | MessageDefinition.identifier | NamingSystem.identifier | ObservationDefinition.identifier | OperationDefinition.identifier | PlanDefinition.identifier | Questionnaire.identifier | Requirements.identifier | SearchParameter.identifier | SpecimenDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | SubscriptionTopic.identifier | TerminologyCapabilities.identifier | TestPlan.identifier | TestScript.identifier | ValueSet.identifier</b><br>
4664   * </p>
4665   */
4666  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
4667
4668 /**
4669   * Search parameter: <b>status</b>
4670   * <p>
4671   * Description: <b>Multiple Resources: 
4672
4673* [ActivityDefinition](activitydefinition.html): The current status of the activity definition
4674* [ActorDefinition](actordefinition.html): The current status of the Actor Definition
4675* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement
4676* [ChargeItemDefinition](chargeitemdefinition.html): The current status of the charge item definition
4677* [Citation](citation.html): The current status of the citation
4678* [CodeSystem](codesystem.html): The current status of the code system
4679* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition
4680* [ConceptMap](conceptmap.html): The current status of the concept map
4681* [ConditionDefinition](conditiondefinition.html): The current status of the condition definition
4682* [EventDefinition](eventdefinition.html): The current status of the event definition
4683* [Evidence](evidence.html): The current status of the evidence
4684* [EvidenceReport](evidencereport.html): The current status of the evidence report
4685* [EvidenceVariable](evidencevariable.html): The current status of the evidence variable
4686* [ExampleScenario](examplescenario.html): The current status of the example scenario
4687* [GraphDefinition](graphdefinition.html): The current status of the graph definition
4688* [ImplementationGuide](implementationguide.html): The current status of the implementation guide
4689* [Library](library.html): The current status of the library
4690* [Measure](measure.html): The current status of the measure
4691* [MedicationKnowledge](medicationknowledge.html): active | inactive | entered-in-error
4692* [MessageDefinition](messagedefinition.html): The current status of the message definition
4693* [NamingSystem](namingsystem.html): The current status of the naming system
4694* [ObservationDefinition](observationdefinition.html): Publication status of the ObservationDefinition: draft, active, retired, unknown
4695* [OperationDefinition](operationdefinition.html): The current status of the operation definition
4696* [PlanDefinition](plandefinition.html): The current status of the plan definition
4697* [Questionnaire](questionnaire.html): The current status of the questionnaire
4698* [Requirements](requirements.html): The current status of the requirements
4699* [SearchParameter](searchparameter.html): The current status of the search parameter
4700* [SpecimenDefinition](specimendefinition.html): Publication status of the SpecimenDefinition: draft, active, retired, unknown
4701* [StructureDefinition](structuredefinition.html): The current status of the structure definition
4702* [StructureMap](structuremap.html): The current status of the structure map
4703* [SubscriptionTopic](subscriptiontopic.html): draft | active | retired | unknown
4704* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities
4705* [TestPlan](testplan.html): The current status of the test plan
4706* [TestScript](testscript.html): The current status of the test script
4707* [ValueSet](valueset.html): The current status of the value set
4708</b><br>
4709   * Type: <b>token</b><br>
4710   * Path: <b>ActivityDefinition.status | ActorDefinition.status | CapabilityStatement.status | ChargeItemDefinition.status | Citation.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | ConditionDefinition.status | EventDefinition.status | Evidence.status | EvidenceReport.status | EvidenceVariable.status | ExampleScenario.status | GraphDefinition.status | ImplementationGuide.status | Library.status | Measure.status | MedicationKnowledge.status | MessageDefinition.status | NamingSystem.status | ObservationDefinition.status | OperationDefinition.status | PlanDefinition.status | Questionnaire.status | Requirements.status | SearchParameter.status | SpecimenDefinition.status | StructureDefinition.status | StructureMap.status | SubscriptionTopic.status | TerminologyCapabilities.status | TestPlan.status | TestScript.status | ValueSet.status</b><br>
4711   * </p>
4712   */
4713  @SearchParamDefinition(name="status", path="ActivityDefinition.status | ActorDefinition.status | CapabilityStatement.status | ChargeItemDefinition.status | Citation.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | ConditionDefinition.status | EventDefinition.status | Evidence.status | EvidenceReport.status | EvidenceVariable.status | ExampleScenario.status | GraphDefinition.status | ImplementationGuide.status | Library.status | Measure.status | MedicationKnowledge.status | MessageDefinition.status | NamingSystem.status | ObservationDefinition.status | OperationDefinition.status | PlanDefinition.status | Questionnaire.status | Requirements.status | SearchParameter.status | SpecimenDefinition.status | StructureDefinition.status | StructureMap.status | SubscriptionTopic.status | TerminologyCapabilities.status | TestPlan.status | TestScript.status | ValueSet.status", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): The current status of the activity definition\r\n* [ActorDefinition](actordefinition.html): The current status of the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): The current status of the charge item definition\r\n* [Citation](citation.html): The current status of the citation\r\n* [CodeSystem](codesystem.html): The current status of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition\r\n* [ConceptMap](conceptmap.html): The current status of the concept map\r\n* [ConditionDefinition](conditiondefinition.html): The current status of the condition definition\r\n* [EventDefinition](eventdefinition.html): The current status of the event definition\r\n* [Evidence](evidence.html): The current status of the evidence\r\n* [EvidenceReport](evidencereport.html): The current status of the evidence report\r\n* [EvidenceVariable](evidencevariable.html): The current status of the evidence variable\r\n* [ExampleScenario](examplescenario.html): The current status of the example scenario\r\n* [GraphDefinition](graphdefinition.html): The current status of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The current status of the implementation guide\r\n* [Library](library.html): The current status of the library\r\n* [Measure](measure.html): The current status of the measure\r\n* [MedicationKnowledge](medicationknowledge.html): active | inactive | entered-in-error\r\n* [MessageDefinition](messagedefinition.html): The current status of the message definition\r\n* [NamingSystem](namingsystem.html): The current status of the naming system\r\n* [ObservationDefinition](observationdefinition.html): Publication status of the ObservationDefinition: draft, active, retired, unknown\r\n* [OperationDefinition](operationdefinition.html): The current status of the operation definition\r\n* [PlanDefinition](plandefinition.html): The current status of the plan definition\r\n* [Questionnaire](questionnaire.html): The current status of the questionnaire\r\n* [Requirements](requirements.html): The current status of the requirements\r\n* [SearchParameter](searchparameter.html): The current status of the search parameter\r\n* [SpecimenDefinition](specimendefinition.html): Publication status of the SpecimenDefinition: draft, active, retired, unknown\r\n* [StructureDefinition](structuredefinition.html): The current status of the structure definition\r\n* [StructureMap](structuremap.html): The current status of the structure map\r\n* [SubscriptionTopic](subscriptiontopic.html): draft | active | retired | unknown\r\n* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities\r\n* [TestPlan](testplan.html): The current status of the test plan\r\n* [TestScript](testscript.html): The current status of the test script\r\n* [ValueSet](valueset.html): The current status of the value set\r\n", type="token" )
4714  public static final String SP_STATUS = "status";
4715 /**
4716   * <b>Fluent Client</b> search parameter constant for <b>status</b>
4717   * <p>
4718   * Description: <b>Multiple Resources: 
4719
4720* [ActivityDefinition](activitydefinition.html): The current status of the activity definition
4721* [ActorDefinition](actordefinition.html): The current status of the Actor Definition
4722* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement
4723* [ChargeItemDefinition](chargeitemdefinition.html): The current status of the charge item definition
4724* [Citation](citation.html): The current status of the citation
4725* [CodeSystem](codesystem.html): The current status of the code system
4726* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition
4727* [ConceptMap](conceptmap.html): The current status of the concept map
4728* [ConditionDefinition](conditiondefinition.html): The current status of the condition definition
4729* [EventDefinition](eventdefinition.html): The current status of the event definition
4730* [Evidence](evidence.html): The current status of the evidence
4731* [EvidenceReport](evidencereport.html): The current status of the evidence report
4732* [EvidenceVariable](evidencevariable.html): The current status of the evidence variable
4733* [ExampleScenario](examplescenario.html): The current status of the example scenario
4734* [GraphDefinition](graphdefinition.html): The current status of the graph definition
4735* [ImplementationGuide](implementationguide.html): The current status of the implementation guide
4736* [Library](library.html): The current status of the library
4737* [Measure](measure.html): The current status of the measure
4738* [MedicationKnowledge](medicationknowledge.html): active | inactive | entered-in-error
4739* [MessageDefinition](messagedefinition.html): The current status of the message definition
4740* [NamingSystem](namingsystem.html): The current status of the naming system
4741* [ObservationDefinition](observationdefinition.html): Publication status of the ObservationDefinition: draft, active, retired, unknown
4742* [OperationDefinition](operationdefinition.html): The current status of the operation definition
4743* [PlanDefinition](plandefinition.html): The current status of the plan definition
4744* [Questionnaire](questionnaire.html): The current status of the questionnaire
4745* [Requirements](requirements.html): The current status of the requirements
4746* [SearchParameter](searchparameter.html): The current status of the search parameter
4747* [SpecimenDefinition](specimendefinition.html): Publication status of the SpecimenDefinition: draft, active, retired, unknown
4748* [StructureDefinition](structuredefinition.html): The current status of the structure definition
4749* [StructureMap](structuremap.html): The current status of the structure map
4750* [SubscriptionTopic](subscriptiontopic.html): draft | active | retired | unknown
4751* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities
4752* [TestPlan](testplan.html): The current status of the test plan
4753* [TestScript](testscript.html): The current status of the test script
4754* [ValueSet](valueset.html): The current status of the value set
4755</b><br>
4756   * Type: <b>token</b><br>
4757   * Path: <b>ActivityDefinition.status | ActorDefinition.status | CapabilityStatement.status | ChargeItemDefinition.status | Citation.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | ConditionDefinition.status | EventDefinition.status | Evidence.status | EvidenceReport.status | EvidenceVariable.status | ExampleScenario.status | GraphDefinition.status | ImplementationGuide.status | Library.status | Measure.status | MedicationKnowledge.status | MessageDefinition.status | NamingSystem.status | ObservationDefinition.status | OperationDefinition.status | PlanDefinition.status | Questionnaire.status | Requirements.status | SearchParameter.status | SpecimenDefinition.status | StructureDefinition.status | StructureMap.status | SubscriptionTopic.status | TerminologyCapabilities.status | TestPlan.status | TestScript.status | ValueSet.status</b><br>
4758   * </p>
4759   */
4760  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
4761
4762 /**
4763   * Search parameter: <b>title</b>
4764   * <p>
4765   * Description: <b>Multiple Resources: 
4766
4767* [ActivityDefinition](activitydefinition.html): The human-friendly name of the activity definition
4768* [ActorDefinition](actordefinition.html): The human-friendly name of the Actor Definition
4769* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement
4770* [ChargeItemDefinition](chargeitemdefinition.html): The human-friendly name of the charge item definition
4771* [Citation](citation.html): The human-friendly name of the citation
4772* [CodeSystem](codesystem.html): The human-friendly name of the code system
4773* [ConceptMap](conceptmap.html): The human-friendly name of the concept map
4774* [ConditionDefinition](conditiondefinition.html): The human-friendly name of the condition definition
4775* [EventDefinition](eventdefinition.html): The human-friendly name of the event definition
4776* [Evidence](evidence.html): The human-friendly name of the evidence
4777* [EvidenceVariable](evidencevariable.html): The human-friendly name of the evidence variable
4778* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide
4779* [Library](library.html): The human-friendly name of the library
4780* [Measure](measure.html): The human-friendly name of the measure
4781* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition
4782* [ObservationDefinition](observationdefinition.html): Human-friendly name of the ObservationDefinition
4783* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition
4784* [PlanDefinition](plandefinition.html): The human-friendly name of the plan definition
4785* [Questionnaire](questionnaire.html): The human-friendly name of the questionnaire
4786* [Requirements](requirements.html): The human-friendly name of the requirements
4787* [SpecimenDefinition](specimendefinition.html): Human-friendly name of the SpecimenDefinition
4788* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition
4789* [StructureMap](structuremap.html): The human-friendly name of the structure map
4790* [SubscriptionTopic](subscriptiontopic.html): Name for this SubscriptionTopic (Human friendly)
4791* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities
4792* [TestScript](testscript.html): The human-friendly name of the test script
4793* [ValueSet](valueset.html): The human-friendly name of the value set
4794</b><br>
4795   * Type: <b>string</b><br>
4796   * Path: <b>ActivityDefinition.title | ActorDefinition.title | CapabilityStatement.title | ChargeItemDefinition.title | Citation.title | CodeSystem.title | ConceptMap.title | ConditionDefinition.title | EventDefinition.title | Evidence.title | EvidenceVariable.title | ImplementationGuide.title | Library.title | Measure.title | MessageDefinition.title | ObservationDefinition.title | OperationDefinition.title | PlanDefinition.title | Questionnaire.title | Requirements.title | SpecimenDefinition.title | StructureDefinition.title | StructureMap.title | SubscriptionTopic.title | TerminologyCapabilities.title | TestScript.title | ValueSet.title</b><br>
4797   * </p>
4798   */
4799  @SearchParamDefinition(name="title", path="ActivityDefinition.title | ActorDefinition.title | CapabilityStatement.title | ChargeItemDefinition.title | Citation.title | CodeSystem.title | ConceptMap.title | ConditionDefinition.title | EventDefinition.title | Evidence.title | EvidenceVariable.title | ImplementationGuide.title | Library.title | Measure.title | MessageDefinition.title | ObservationDefinition.title | OperationDefinition.title | PlanDefinition.title | Questionnaire.title | Requirements.title | SpecimenDefinition.title | StructureDefinition.title | StructureMap.title | SubscriptionTopic.title | TerminologyCapabilities.title | TestScript.title | ValueSet.title", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): The human-friendly name of the activity definition\r\n* [ActorDefinition](actordefinition.html): The human-friendly name of the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): The human-friendly name of the charge item definition\r\n* [Citation](citation.html): The human-friendly name of the citation\r\n* [CodeSystem](codesystem.html): The human-friendly name of the code system\r\n* [ConceptMap](conceptmap.html): The human-friendly name of the concept map\r\n* [ConditionDefinition](conditiondefinition.html): The human-friendly name of the condition definition\r\n* [EventDefinition](eventdefinition.html): The human-friendly name of the event definition\r\n* [Evidence](evidence.html): The human-friendly name of the evidence\r\n* [EvidenceVariable](evidencevariable.html): The human-friendly name of the evidence variable\r\n* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide\r\n* [Library](library.html): The human-friendly name of the library\r\n* [Measure](measure.html): The human-friendly name of the measure\r\n* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition\r\n* [ObservationDefinition](observationdefinition.html): Human-friendly name of the ObservationDefinition\r\n* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition\r\n* [PlanDefinition](plandefinition.html): The human-friendly name of the plan definition\r\n* [Questionnaire](questionnaire.html): The human-friendly name of the questionnaire\r\n* [Requirements](requirements.html): The human-friendly name of the requirements\r\n* [SpecimenDefinition](specimendefinition.html): Human-friendly name of the SpecimenDefinition\r\n* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition\r\n* [StructureMap](structuremap.html): The human-friendly name of the structure map\r\n* [SubscriptionTopic](subscriptiontopic.html): Name for this SubscriptionTopic (Human friendly)\r\n* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities\r\n* [TestScript](testscript.html): The human-friendly name of the test script\r\n* [ValueSet](valueset.html): The human-friendly name of the value set\r\n", type="string" )
4800  public static final String SP_TITLE = "title";
4801 /**
4802   * <b>Fluent Client</b> search parameter constant for <b>title</b>
4803   * <p>
4804   * Description: <b>Multiple Resources: 
4805
4806* [ActivityDefinition](activitydefinition.html): The human-friendly name of the activity definition
4807* [ActorDefinition](actordefinition.html): The human-friendly name of the Actor Definition
4808* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement
4809* [ChargeItemDefinition](chargeitemdefinition.html): The human-friendly name of the charge item definition
4810* [Citation](citation.html): The human-friendly name of the citation
4811* [CodeSystem](codesystem.html): The human-friendly name of the code system
4812* [ConceptMap](conceptmap.html): The human-friendly name of the concept map
4813* [ConditionDefinition](conditiondefinition.html): The human-friendly name of the condition definition
4814* [EventDefinition](eventdefinition.html): The human-friendly name of the event definition
4815* [Evidence](evidence.html): The human-friendly name of the evidence
4816* [EvidenceVariable](evidencevariable.html): The human-friendly name of the evidence variable
4817* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide
4818* [Library](library.html): The human-friendly name of the library
4819* [Measure](measure.html): The human-friendly name of the measure
4820* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition
4821* [ObservationDefinition](observationdefinition.html): Human-friendly name of the ObservationDefinition
4822* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition
4823* [PlanDefinition](plandefinition.html): The human-friendly name of the plan definition
4824* [Questionnaire](questionnaire.html): The human-friendly name of the questionnaire
4825* [Requirements](requirements.html): The human-friendly name of the requirements
4826* [SpecimenDefinition](specimendefinition.html): Human-friendly name of the SpecimenDefinition
4827* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition
4828* [StructureMap](structuremap.html): The human-friendly name of the structure map
4829* [SubscriptionTopic](subscriptiontopic.html): Name for this SubscriptionTopic (Human friendly)
4830* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities
4831* [TestScript](testscript.html): The human-friendly name of the test script
4832* [ValueSet](valueset.html): The human-friendly name of the value set
4833</b><br>
4834   * Type: <b>string</b><br>
4835   * Path: <b>ActivityDefinition.title | ActorDefinition.title | CapabilityStatement.title | ChargeItemDefinition.title | Citation.title | CodeSystem.title | ConceptMap.title | ConditionDefinition.title | EventDefinition.title | Evidence.title | EvidenceVariable.title | ImplementationGuide.title | Library.title | Measure.title | MessageDefinition.title | ObservationDefinition.title | OperationDefinition.title | PlanDefinition.title | Questionnaire.title | Requirements.title | SpecimenDefinition.title | StructureDefinition.title | StructureMap.title | SubscriptionTopic.title | TerminologyCapabilities.title | TestScript.title | ValueSet.title</b><br>
4836   * </p>
4837   */
4838  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
4839
4840 /**
4841   * Search parameter: <b>url</b>
4842   * <p>
4843   * Description: <b>Multiple Resources: 
4844
4845* [ActivityDefinition](activitydefinition.html): The uri that identifies the activity definition
4846* [ActorDefinition](actordefinition.html): The uri that identifies the Actor Definition
4847* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement
4848* [ChargeItemDefinition](chargeitemdefinition.html): The uri that identifies the charge item definition
4849* [Citation](citation.html): The uri that identifies the citation
4850* [CodeSystem](codesystem.html): The uri that identifies the code system
4851* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition
4852* [ConceptMap](conceptmap.html): The URI that identifies the concept map
4853* [ConditionDefinition](conditiondefinition.html): The uri that identifies the condition definition
4854* [EventDefinition](eventdefinition.html): The uri that identifies the event definition
4855* [Evidence](evidence.html): The uri that identifies the evidence
4856* [EvidenceReport](evidencereport.html): The uri that identifies the evidence report
4857* [EvidenceVariable](evidencevariable.html): The uri that identifies the evidence variable
4858* [ExampleScenario](examplescenario.html): The uri that identifies the example scenario
4859* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition
4860* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide
4861* [Library](library.html): The uri that identifies the library
4862* [Measure](measure.html): The uri that identifies the measure
4863* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition
4864* [NamingSystem](namingsystem.html): The uri that identifies the naming system
4865* [ObservationDefinition](observationdefinition.html): The uri that identifies the observation definition
4866* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition
4867* [PlanDefinition](plandefinition.html): The uri that identifies the plan definition
4868* [Questionnaire](questionnaire.html): The uri that identifies the questionnaire
4869* [Requirements](requirements.html): The uri that identifies the requirements
4870* [SearchParameter](searchparameter.html): The uri that identifies the search parameter
4871* [SpecimenDefinition](specimendefinition.html): The uri that identifies the specimen definition
4872* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition
4873* [StructureMap](structuremap.html): The uri that identifies the structure map
4874* [SubscriptionTopic](subscriptiontopic.html): Logical canonical URL to reference this SubscriptionTopic (globally unique)
4875* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities
4876* [TestPlan](testplan.html): The uri that identifies the test plan
4877* [TestScript](testscript.html): The uri that identifies the test script
4878* [ValueSet](valueset.html): The uri that identifies the value set
4879</b><br>
4880   * Type: <b>uri</b><br>
4881   * Path: <b>ActivityDefinition.url | ActorDefinition.url | CapabilityStatement.url | ChargeItemDefinition.url | Citation.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | ConditionDefinition.url | EventDefinition.url | Evidence.url | EvidenceReport.url | EvidenceVariable.url | ExampleScenario.url | GraphDefinition.url | ImplementationGuide.url | Library.url | Measure.url | MessageDefinition.url | NamingSystem.url | ObservationDefinition.url | OperationDefinition.url | PlanDefinition.url | Questionnaire.url | Requirements.url | SearchParameter.url | SpecimenDefinition.url | StructureDefinition.url | StructureMap.url | SubscriptionTopic.url | TerminologyCapabilities.url | TestPlan.url | TestScript.url | ValueSet.url</b><br>
4882   * </p>
4883   */
4884  @SearchParamDefinition(name="url", path="ActivityDefinition.url | ActorDefinition.url | CapabilityStatement.url | ChargeItemDefinition.url | Citation.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | ConditionDefinition.url | EventDefinition.url | Evidence.url | EvidenceReport.url | EvidenceVariable.url | ExampleScenario.url | GraphDefinition.url | ImplementationGuide.url | Library.url | Measure.url | MessageDefinition.url | NamingSystem.url | ObservationDefinition.url | OperationDefinition.url | PlanDefinition.url | Questionnaire.url | Requirements.url | SearchParameter.url | SpecimenDefinition.url | StructureDefinition.url | StructureMap.url | SubscriptionTopic.url | TerminologyCapabilities.url | TestPlan.url | TestScript.url | ValueSet.url", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): The uri that identifies the activity definition\r\n* [ActorDefinition](actordefinition.html): The uri that identifies the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): The uri that identifies the charge item definition\r\n* [Citation](citation.html): The uri that identifies the citation\r\n* [CodeSystem](codesystem.html): The uri that identifies the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition\r\n* [ConceptMap](conceptmap.html): The URI that identifies the concept map\r\n* [ConditionDefinition](conditiondefinition.html): The uri that identifies the condition definition\r\n* [EventDefinition](eventdefinition.html): The uri that identifies the event definition\r\n* [Evidence](evidence.html): The uri that identifies the evidence\r\n* [EvidenceReport](evidencereport.html): The uri that identifies the evidence report\r\n* [EvidenceVariable](evidencevariable.html): The uri that identifies the evidence variable\r\n* [ExampleScenario](examplescenario.html): The uri that identifies the example scenario\r\n* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition\r\n* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide\r\n* [Library](library.html): The uri that identifies the library\r\n* [Measure](measure.html): The uri that identifies the measure\r\n* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition\r\n* [NamingSystem](namingsystem.html): The uri that identifies the naming system\r\n* [ObservationDefinition](observationdefinition.html): The uri that identifies the observation definition\r\n* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition\r\n* [PlanDefinition](plandefinition.html): The uri that identifies the plan definition\r\n* [Questionnaire](questionnaire.html): The uri that identifies the questionnaire\r\n* [Requirements](requirements.html): The uri that identifies the requirements\r\n* [SearchParameter](searchparameter.html): The uri that identifies the search parameter\r\n* [SpecimenDefinition](specimendefinition.html): The uri that identifies the specimen definition\r\n* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition\r\n* [StructureMap](structuremap.html): The uri that identifies the structure map\r\n* [SubscriptionTopic](subscriptiontopic.html): Logical canonical URL to reference this SubscriptionTopic (globally unique)\r\n* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities\r\n* [TestPlan](testplan.html): The uri that identifies the test plan\r\n* [TestScript](testscript.html): The uri that identifies the test script\r\n* [ValueSet](valueset.html): The uri that identifies the value set\r\n", type="uri" )
4885  public static final String SP_URL = "url";
4886 /**
4887   * <b>Fluent Client</b> search parameter constant for <b>url</b>
4888   * <p>
4889   * Description: <b>Multiple Resources: 
4890
4891* [ActivityDefinition](activitydefinition.html): The uri that identifies the activity definition
4892* [ActorDefinition](actordefinition.html): The uri that identifies the Actor Definition
4893* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement
4894* [ChargeItemDefinition](chargeitemdefinition.html): The uri that identifies the charge item definition
4895* [Citation](citation.html): The uri that identifies the citation
4896* [CodeSystem](codesystem.html): The uri that identifies the code system
4897* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition
4898* [ConceptMap](conceptmap.html): The URI that identifies the concept map
4899* [ConditionDefinition](conditiondefinition.html): The uri that identifies the condition definition
4900* [EventDefinition](eventdefinition.html): The uri that identifies the event definition
4901* [Evidence](evidence.html): The uri that identifies the evidence
4902* [EvidenceReport](evidencereport.html): The uri that identifies the evidence report
4903* [EvidenceVariable](evidencevariable.html): The uri that identifies the evidence variable
4904* [ExampleScenario](examplescenario.html): The uri that identifies the example scenario
4905* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition
4906* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide
4907* [Library](library.html): The uri that identifies the library
4908* [Measure](measure.html): The uri that identifies the measure
4909* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition
4910* [NamingSystem](namingsystem.html): The uri that identifies the naming system
4911* [ObservationDefinition](observationdefinition.html): The uri that identifies the observation definition
4912* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition
4913* [PlanDefinition](plandefinition.html): The uri that identifies the plan definition
4914* [Questionnaire](questionnaire.html): The uri that identifies the questionnaire
4915* [Requirements](requirements.html): The uri that identifies the requirements
4916* [SearchParameter](searchparameter.html): The uri that identifies the search parameter
4917* [SpecimenDefinition](specimendefinition.html): The uri that identifies the specimen definition
4918* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition
4919* [StructureMap](structuremap.html): The uri that identifies the structure map
4920* [SubscriptionTopic](subscriptiontopic.html): Logical canonical URL to reference this SubscriptionTopic (globally unique)
4921* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities
4922* [TestPlan](testplan.html): The uri that identifies the test plan
4923* [TestScript](testscript.html): The uri that identifies the test script
4924* [ValueSet](valueset.html): The uri that identifies the value set
4925</b><br>
4926   * Type: <b>uri</b><br>
4927   * Path: <b>ActivityDefinition.url | ActorDefinition.url | CapabilityStatement.url | ChargeItemDefinition.url | Citation.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | ConditionDefinition.url | EventDefinition.url | Evidence.url | EvidenceReport.url | EvidenceVariable.url | ExampleScenario.url | GraphDefinition.url | ImplementationGuide.url | Library.url | Measure.url | MessageDefinition.url | NamingSystem.url | ObservationDefinition.url | OperationDefinition.url | PlanDefinition.url | Questionnaire.url | Requirements.url | SearchParameter.url | SpecimenDefinition.url | StructureDefinition.url | StructureMap.url | SubscriptionTopic.url | TerminologyCapabilities.url | TestPlan.url | TestScript.url | ValueSet.url</b><br>
4928   * </p>
4929   */
4930  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
4931
4932 /**
4933   * Search parameter: <b>category</b>
4934   * <p>
4935   * Description: <b>Category (class) of observation</b><br>
4936   * Type: <b>token</b><br>
4937   * Path: <b>ObservationDefinition.category</b><br>
4938   * </p>
4939   */
4940  @SearchParamDefinition(name="category", path="ObservationDefinition.category", description="Category (class) of observation", type="token" )
4941  public static final String SP_CATEGORY = "category";
4942 /**
4943   * <b>Fluent Client</b> search parameter constant for <b>category</b>
4944   * <p>
4945   * Description: <b>Category (class) of observation</b><br>
4946   * Type: <b>token</b><br>
4947   * Path: <b>ObservationDefinition.category</b><br>
4948   * </p>
4949   */
4950  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
4951
4952 /**
4953   * Search parameter: <b>code</b>
4954   * <p>
4955   * Description: <b>Observation code</b><br>
4956   * Type: <b>token</b><br>
4957   * Path: <b>ObservationDefinition.code</b><br>
4958   * </p>
4959   */
4960  @SearchParamDefinition(name="code", path="ObservationDefinition.code", description="Observation code", type="token" )
4961  public static final String SP_CODE = "code";
4962 /**
4963   * <b>Fluent Client</b> search parameter constant for <b>code</b>
4964   * <p>
4965   * Description: <b>Observation code</b><br>
4966   * Type: <b>token</b><br>
4967   * Path: <b>ObservationDefinition.code</b><br>
4968   * </p>
4969   */
4970  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
4971
4972 /**
4973   * Search parameter: <b>experimental</b>
4974   * <p>
4975   * Description: <b>Not for genuine usage (true)</b><br>
4976   * Type: <b>token</b><br>
4977   * Path: <b>ObservationDefinition.experimental</b><br>
4978   * </p>
4979   */
4980  @SearchParamDefinition(name="experimental", path="ObservationDefinition.experimental", description="Not for genuine usage (true)", type="token" )
4981  public static final String SP_EXPERIMENTAL = "experimental";
4982 /**
4983   * <b>Fluent Client</b> search parameter constant for <b>experimental</b>
4984   * <p>
4985   * Description: <b>Not for genuine usage (true)</b><br>
4986   * Type: <b>token</b><br>
4987   * Path: <b>ObservationDefinition.experimental</b><br>
4988   * </p>
4989   */
4990  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EXPERIMENTAL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EXPERIMENTAL);
4991
4992 /**
4993   * Search parameter: <b>method</b>
4994   * <p>
4995   * Description: <b>Method of observation</b><br>
4996   * Type: <b>token</b><br>
4997   * Path: <b>ObservationDefinition.method</b><br>
4998   * </p>
4999   */
5000  @SearchParamDefinition(name="method", path="ObservationDefinition.method", description="Method of observation", type="token" )
5001  public static final String SP_METHOD = "method";
5002 /**
5003   * <b>Fluent Client</b> search parameter constant for <b>method</b>
5004   * <p>
5005   * Description: <b>Method of observation</b><br>
5006   * Type: <b>token</b><br>
5007   * Path: <b>ObservationDefinition.method</b><br>
5008   * </p>
5009   */
5010  public static final ca.uhn.fhir.rest.gclient.TokenClientParam METHOD = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_METHOD);
5011
5012
5013}
5014