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