001package org.hl7.fhir.dstu3.model;
002
003
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
035import java.util.ArrayList;
036import java.util.Date;
037import java.util.List;
038
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.exceptions.FHIRFormatError;
041import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
042import org.hl7.fhir.utilities.Utilities;
043
044import ca.uhn.fhir.model.api.annotation.Block;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.Description;
047import ca.uhn.fhir.model.api.annotation.ResourceDef;
048import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
049/**
050 * A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.
051 */
052@ResourceDef(name="NutritionOrder", profile="http://hl7.org/fhir/Profile/NutritionOrder")
053public class NutritionOrder extends DomainResource {
054
055    public enum NutritionOrderStatus {
056        /**
057         * The request has been proposed.
058         */
059        PROPOSED, 
060        /**
061         * The request is in preliminary form prior to being sent.
062         */
063        DRAFT, 
064        /**
065         * The request has been planned.
066         */
067        PLANNED, 
068        /**
069         * The request has been placed.
070         */
071        REQUESTED, 
072        /**
073         * The request is 'actionable', but not all actions that are implied by it have occurred yet.
074         */
075        ACTIVE, 
076        /**
077         * Actions implied by the request have been temporarily halted, but are expected to continue later. May also be called "suspended".
078         */
079        ONHOLD, 
080        /**
081         * All actions that are implied by the order have occurred and no continuation is planned (this will rarely be made explicit).
082         */
083        COMPLETED, 
084        /**
085         * The request has been withdrawn and is no longer actionable.
086         */
087        CANCELLED, 
088        /**
089         * The request was entered in error and voided.
090         */
091        ENTEREDINERROR, 
092        /**
093         * added to help the parsers with the generic types
094         */
095        NULL;
096        public static NutritionOrderStatus fromCode(String codeString) throws FHIRException {
097            if (codeString == null || "".equals(codeString))
098                return null;
099        if ("proposed".equals(codeString))
100          return PROPOSED;
101        if ("draft".equals(codeString))
102          return DRAFT;
103        if ("planned".equals(codeString))
104          return PLANNED;
105        if ("requested".equals(codeString))
106          return REQUESTED;
107        if ("active".equals(codeString))
108          return ACTIVE;
109        if ("on-hold".equals(codeString))
110          return ONHOLD;
111        if ("completed".equals(codeString))
112          return COMPLETED;
113        if ("cancelled".equals(codeString))
114          return CANCELLED;
115        if ("entered-in-error".equals(codeString))
116          return ENTEREDINERROR;
117        if (Configuration.isAcceptInvalidEnums())
118          return null;
119        else
120          throw new FHIRException("Unknown NutritionOrderStatus code '"+codeString+"'");
121        }
122        public String toCode() {
123          switch (this) {
124            case PROPOSED: return "proposed";
125            case DRAFT: return "draft";
126            case PLANNED: return "planned";
127            case REQUESTED: return "requested";
128            case ACTIVE: return "active";
129            case ONHOLD: return "on-hold";
130            case COMPLETED: return "completed";
131            case CANCELLED: return "cancelled";
132            case ENTEREDINERROR: return "entered-in-error";
133            case NULL: return null;
134            default: return "?";
135          }
136        }
137        public String getSystem() {
138          switch (this) {
139            case PROPOSED: return "http://hl7.org/fhir/nutrition-request-status";
140            case DRAFT: return "http://hl7.org/fhir/nutrition-request-status";
141            case PLANNED: return "http://hl7.org/fhir/nutrition-request-status";
142            case REQUESTED: return "http://hl7.org/fhir/nutrition-request-status";
143            case ACTIVE: return "http://hl7.org/fhir/nutrition-request-status";
144            case ONHOLD: return "http://hl7.org/fhir/nutrition-request-status";
145            case COMPLETED: return "http://hl7.org/fhir/nutrition-request-status";
146            case CANCELLED: return "http://hl7.org/fhir/nutrition-request-status";
147            case ENTEREDINERROR: return "http://hl7.org/fhir/nutrition-request-status";
148            case NULL: return null;
149            default: return "?";
150          }
151        }
152        public String getDefinition() {
153          switch (this) {
154            case PROPOSED: return "The request has been proposed.";
155            case DRAFT: return "The request is in preliminary form prior to being sent.";
156            case PLANNED: return "The request has been planned.";
157            case REQUESTED: return "The request has been placed.";
158            case ACTIVE: return "The request is 'actionable', but not all actions that are implied by it have occurred yet.";
159            case ONHOLD: return "Actions implied by the request have been temporarily halted, but are expected to continue later. May also be called \"suspended\".";
160            case COMPLETED: return "All actions that are implied by the order have occurred and no continuation is planned (this will rarely be made explicit).";
161            case CANCELLED: return "The request has been withdrawn and is no longer actionable.";
162            case ENTEREDINERROR: return "The request was entered in error and voided.";
163            case NULL: return null;
164            default: return "?";
165          }
166        }
167        public String getDisplay() {
168          switch (this) {
169            case PROPOSED: return "Proposed";
170            case DRAFT: return "Draft";
171            case PLANNED: return "Planned";
172            case REQUESTED: return "Requested";
173            case ACTIVE: return "Active";
174            case ONHOLD: return "On-Hold";
175            case COMPLETED: return "Completed";
176            case CANCELLED: return "Cancelled";
177            case ENTEREDINERROR: return "Entered in Error";
178            case NULL: return null;
179            default: return "?";
180          }
181        }
182    }
183
184  public static class NutritionOrderStatusEnumFactory implements EnumFactory<NutritionOrderStatus> {
185    public NutritionOrderStatus fromCode(String codeString) throws IllegalArgumentException {
186      if (codeString == null || "".equals(codeString))
187            if (codeString == null || "".equals(codeString))
188                return null;
189        if ("proposed".equals(codeString))
190          return NutritionOrderStatus.PROPOSED;
191        if ("draft".equals(codeString))
192          return NutritionOrderStatus.DRAFT;
193        if ("planned".equals(codeString))
194          return NutritionOrderStatus.PLANNED;
195        if ("requested".equals(codeString))
196          return NutritionOrderStatus.REQUESTED;
197        if ("active".equals(codeString))
198          return NutritionOrderStatus.ACTIVE;
199        if ("on-hold".equals(codeString))
200          return NutritionOrderStatus.ONHOLD;
201        if ("completed".equals(codeString))
202          return NutritionOrderStatus.COMPLETED;
203        if ("cancelled".equals(codeString))
204          return NutritionOrderStatus.CANCELLED;
205        if ("entered-in-error".equals(codeString))
206          return NutritionOrderStatus.ENTEREDINERROR;
207        throw new IllegalArgumentException("Unknown NutritionOrderStatus code '"+codeString+"'");
208        }
209        public Enumeration<NutritionOrderStatus> fromType(PrimitiveType<?> code) throws FHIRException {
210          if (code == null)
211            return null;
212          if (code.isEmpty())
213            return new Enumeration<NutritionOrderStatus>(this);
214          String codeString = code.asStringValue();
215          if (codeString == null || "".equals(codeString))
216            return null;
217        if ("proposed".equals(codeString))
218          return new Enumeration<NutritionOrderStatus>(this, NutritionOrderStatus.PROPOSED);
219        if ("draft".equals(codeString))
220          return new Enumeration<NutritionOrderStatus>(this, NutritionOrderStatus.DRAFT);
221        if ("planned".equals(codeString))
222          return new Enumeration<NutritionOrderStatus>(this, NutritionOrderStatus.PLANNED);
223        if ("requested".equals(codeString))
224          return new Enumeration<NutritionOrderStatus>(this, NutritionOrderStatus.REQUESTED);
225        if ("active".equals(codeString))
226          return new Enumeration<NutritionOrderStatus>(this, NutritionOrderStatus.ACTIVE);
227        if ("on-hold".equals(codeString))
228          return new Enumeration<NutritionOrderStatus>(this, NutritionOrderStatus.ONHOLD);
229        if ("completed".equals(codeString))
230          return new Enumeration<NutritionOrderStatus>(this, NutritionOrderStatus.COMPLETED);
231        if ("cancelled".equals(codeString))
232          return new Enumeration<NutritionOrderStatus>(this, NutritionOrderStatus.CANCELLED);
233        if ("entered-in-error".equals(codeString))
234          return new Enumeration<NutritionOrderStatus>(this, NutritionOrderStatus.ENTEREDINERROR);
235        throw new FHIRException("Unknown NutritionOrderStatus code '"+codeString+"'");
236        }
237    public String toCode(NutritionOrderStatus code) {
238      if (code == NutritionOrderStatus.PROPOSED)
239        return "proposed";
240      if (code == NutritionOrderStatus.DRAFT)
241        return "draft";
242      if (code == NutritionOrderStatus.PLANNED)
243        return "planned";
244      if (code == NutritionOrderStatus.REQUESTED)
245        return "requested";
246      if (code == NutritionOrderStatus.ACTIVE)
247        return "active";
248      if (code == NutritionOrderStatus.ONHOLD)
249        return "on-hold";
250      if (code == NutritionOrderStatus.COMPLETED)
251        return "completed";
252      if (code == NutritionOrderStatus.CANCELLED)
253        return "cancelled";
254      if (code == NutritionOrderStatus.ENTEREDINERROR)
255        return "entered-in-error";
256      return "?";
257      }
258    public String toSystem(NutritionOrderStatus code) {
259      return code.getSystem();
260      }
261    }
262
263    @Block()
264    public static class NutritionOrderOralDietComponent extends BackboneElement implements IBaseBackboneElement {
265        /**
266         * The kind of diet or dietary restriction such as fiber restricted diet or diabetic diet.
267         */
268        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
269        @Description(shortDefinition="Type of oral diet or diet restrictions that describe what can be consumed orally", formalDefinition="The kind of diet or dietary restriction such as fiber restricted diet or diabetic diet." )
270        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/diet-type")
271        protected List<CodeableConcept> type;
272
273        /**
274         * The time period and frequency at which the diet should be given.  The diet should be given for the combination of all schedules if more than one schedule is present.
275         */
276        @Child(name = "schedule", type = {Timing.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
277        @Description(shortDefinition="Scheduled frequency of diet", formalDefinition="The time period and frequency at which the diet should be given.  The diet should be given for the combination of all schedules if more than one schedule is present." )
278        protected List<Timing> schedule;
279
280        /**
281         * Class that defines the quantity and type of nutrient modifications (for example carbohydrate, fiber or sodium) required for the oral diet.
282         */
283        @Child(name = "nutrient", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
284        @Description(shortDefinition="Required  nutrient modifications", formalDefinition="Class that defines the quantity and type of nutrient modifications (for example carbohydrate, fiber or sodium) required for the oral diet." )
285        protected List<NutritionOrderOralDietNutrientComponent> nutrient;
286
287        /**
288         * Class that describes any texture modifications required for the patient to safely consume various types of solid foods.
289         */
290        @Child(name = "texture", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
291        @Description(shortDefinition="Required  texture modifications", formalDefinition="Class that describes any texture modifications required for the patient to safely consume various types of solid foods." )
292        protected List<NutritionOrderOralDietTextureComponent> texture;
293
294        /**
295         * The required consistency (e.g. honey-thick, nectar-thick, thin, thickened.) of liquids or fluids served to the patient.
296         */
297        @Child(name = "fluidConsistencyType", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
298        @Description(shortDefinition="The required consistency of fluids and liquids provided to the patient", formalDefinition="The required consistency (e.g. honey-thick, nectar-thick, thin, thickened.) of liquids or fluids served to the patient." )
299        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/consistency-type")
300        protected List<CodeableConcept> fluidConsistencyType;
301
302        /**
303         * Free text or additional instructions or information pertaining to the oral diet.
304         */
305        @Child(name = "instruction", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=true)
306        @Description(shortDefinition="Instructions or additional information about the oral diet", formalDefinition="Free text or additional instructions or information pertaining to the oral diet." )
307        protected StringType instruction;
308
309        private static final long serialVersionUID = 973058412L;
310
311    /**
312     * Constructor
313     */
314      public NutritionOrderOralDietComponent() {
315        super();
316      }
317
318        /**
319         * @return {@link #type} (The kind of diet or dietary restriction such as fiber restricted diet or diabetic diet.)
320         */
321        public List<CodeableConcept> getType() { 
322          if (this.type == null)
323            this.type = new ArrayList<CodeableConcept>();
324          return this.type;
325        }
326
327        /**
328         * @return Returns a reference to <code>this</code> for easy method chaining
329         */
330        public NutritionOrderOralDietComponent setType(List<CodeableConcept> theType) { 
331          this.type = theType;
332          return this;
333        }
334
335        public boolean hasType() { 
336          if (this.type == null)
337            return false;
338          for (CodeableConcept item : this.type)
339            if (!item.isEmpty())
340              return true;
341          return false;
342        }
343
344        public CodeableConcept addType() { //3
345          CodeableConcept t = new CodeableConcept();
346          if (this.type == null)
347            this.type = new ArrayList<CodeableConcept>();
348          this.type.add(t);
349          return t;
350        }
351
352        public NutritionOrderOralDietComponent addType(CodeableConcept t) { //3
353          if (t == null)
354            return this;
355          if (this.type == null)
356            this.type = new ArrayList<CodeableConcept>();
357          this.type.add(t);
358          return this;
359        }
360
361        /**
362         * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist
363         */
364        public CodeableConcept getTypeFirstRep() { 
365          if (getType().isEmpty()) {
366            addType();
367          }
368          return getType().get(0);
369        }
370
371        /**
372         * @return {@link #schedule} (The time period and frequency at which the diet should be given.  The diet should be given for the combination of all schedules if more than one schedule is present.)
373         */
374        public List<Timing> getSchedule() { 
375          if (this.schedule == null)
376            this.schedule = new ArrayList<Timing>();
377          return this.schedule;
378        }
379
380        /**
381         * @return Returns a reference to <code>this</code> for easy method chaining
382         */
383        public NutritionOrderOralDietComponent setSchedule(List<Timing> theSchedule) { 
384          this.schedule = theSchedule;
385          return this;
386        }
387
388        public boolean hasSchedule() { 
389          if (this.schedule == null)
390            return false;
391          for (Timing item : this.schedule)
392            if (!item.isEmpty())
393              return true;
394          return false;
395        }
396
397        public Timing addSchedule() { //3
398          Timing t = new Timing();
399          if (this.schedule == null)
400            this.schedule = new ArrayList<Timing>();
401          this.schedule.add(t);
402          return t;
403        }
404
405        public NutritionOrderOralDietComponent addSchedule(Timing t) { //3
406          if (t == null)
407            return this;
408          if (this.schedule == null)
409            this.schedule = new ArrayList<Timing>();
410          this.schedule.add(t);
411          return this;
412        }
413
414        /**
415         * @return The first repetition of repeating field {@link #schedule}, creating it if it does not already exist
416         */
417        public Timing getScheduleFirstRep() { 
418          if (getSchedule().isEmpty()) {
419            addSchedule();
420          }
421          return getSchedule().get(0);
422        }
423
424        /**
425         * @return {@link #nutrient} (Class that defines the quantity and type of nutrient modifications (for example carbohydrate, fiber or sodium) required for the oral diet.)
426         */
427        public List<NutritionOrderOralDietNutrientComponent> getNutrient() { 
428          if (this.nutrient == null)
429            this.nutrient = new ArrayList<NutritionOrderOralDietNutrientComponent>();
430          return this.nutrient;
431        }
432
433        /**
434         * @return Returns a reference to <code>this</code> for easy method chaining
435         */
436        public NutritionOrderOralDietComponent setNutrient(List<NutritionOrderOralDietNutrientComponent> theNutrient) { 
437          this.nutrient = theNutrient;
438          return this;
439        }
440
441        public boolean hasNutrient() { 
442          if (this.nutrient == null)
443            return false;
444          for (NutritionOrderOralDietNutrientComponent item : this.nutrient)
445            if (!item.isEmpty())
446              return true;
447          return false;
448        }
449
450        public NutritionOrderOralDietNutrientComponent addNutrient() { //3
451          NutritionOrderOralDietNutrientComponent t = new NutritionOrderOralDietNutrientComponent();
452          if (this.nutrient == null)
453            this.nutrient = new ArrayList<NutritionOrderOralDietNutrientComponent>();
454          this.nutrient.add(t);
455          return t;
456        }
457
458        public NutritionOrderOralDietComponent addNutrient(NutritionOrderOralDietNutrientComponent t) { //3
459          if (t == null)
460            return this;
461          if (this.nutrient == null)
462            this.nutrient = new ArrayList<NutritionOrderOralDietNutrientComponent>();
463          this.nutrient.add(t);
464          return this;
465        }
466
467        /**
468         * @return The first repetition of repeating field {@link #nutrient}, creating it if it does not already exist
469         */
470        public NutritionOrderOralDietNutrientComponent getNutrientFirstRep() { 
471          if (getNutrient().isEmpty()) {
472            addNutrient();
473          }
474          return getNutrient().get(0);
475        }
476
477        /**
478         * @return {@link #texture} (Class that describes any texture modifications required for the patient to safely consume various types of solid foods.)
479         */
480        public List<NutritionOrderOralDietTextureComponent> getTexture() { 
481          if (this.texture == null)
482            this.texture = new ArrayList<NutritionOrderOralDietTextureComponent>();
483          return this.texture;
484        }
485
486        /**
487         * @return Returns a reference to <code>this</code> for easy method chaining
488         */
489        public NutritionOrderOralDietComponent setTexture(List<NutritionOrderOralDietTextureComponent> theTexture) { 
490          this.texture = theTexture;
491          return this;
492        }
493
494        public boolean hasTexture() { 
495          if (this.texture == null)
496            return false;
497          for (NutritionOrderOralDietTextureComponent item : this.texture)
498            if (!item.isEmpty())
499              return true;
500          return false;
501        }
502
503        public NutritionOrderOralDietTextureComponent addTexture() { //3
504          NutritionOrderOralDietTextureComponent t = new NutritionOrderOralDietTextureComponent();
505          if (this.texture == null)
506            this.texture = new ArrayList<NutritionOrderOralDietTextureComponent>();
507          this.texture.add(t);
508          return t;
509        }
510
511        public NutritionOrderOralDietComponent addTexture(NutritionOrderOralDietTextureComponent t) { //3
512          if (t == null)
513            return this;
514          if (this.texture == null)
515            this.texture = new ArrayList<NutritionOrderOralDietTextureComponent>();
516          this.texture.add(t);
517          return this;
518        }
519
520        /**
521         * @return The first repetition of repeating field {@link #texture}, creating it if it does not already exist
522         */
523        public NutritionOrderOralDietTextureComponent getTextureFirstRep() { 
524          if (getTexture().isEmpty()) {
525            addTexture();
526          }
527          return getTexture().get(0);
528        }
529
530        /**
531         * @return {@link #fluidConsistencyType} (The required consistency (e.g. honey-thick, nectar-thick, thin, thickened.) of liquids or fluids served to the patient.)
532         */
533        public List<CodeableConcept> getFluidConsistencyType() { 
534          if (this.fluidConsistencyType == null)
535            this.fluidConsistencyType = new ArrayList<CodeableConcept>();
536          return this.fluidConsistencyType;
537        }
538
539        /**
540         * @return Returns a reference to <code>this</code> for easy method chaining
541         */
542        public NutritionOrderOralDietComponent setFluidConsistencyType(List<CodeableConcept> theFluidConsistencyType) { 
543          this.fluidConsistencyType = theFluidConsistencyType;
544          return this;
545        }
546
547        public boolean hasFluidConsistencyType() { 
548          if (this.fluidConsistencyType == null)
549            return false;
550          for (CodeableConcept item : this.fluidConsistencyType)
551            if (!item.isEmpty())
552              return true;
553          return false;
554        }
555
556        public CodeableConcept addFluidConsistencyType() { //3
557          CodeableConcept t = new CodeableConcept();
558          if (this.fluidConsistencyType == null)
559            this.fluidConsistencyType = new ArrayList<CodeableConcept>();
560          this.fluidConsistencyType.add(t);
561          return t;
562        }
563
564        public NutritionOrderOralDietComponent addFluidConsistencyType(CodeableConcept t) { //3
565          if (t == null)
566            return this;
567          if (this.fluidConsistencyType == null)
568            this.fluidConsistencyType = new ArrayList<CodeableConcept>();
569          this.fluidConsistencyType.add(t);
570          return this;
571        }
572
573        /**
574         * @return The first repetition of repeating field {@link #fluidConsistencyType}, creating it if it does not already exist
575         */
576        public CodeableConcept getFluidConsistencyTypeFirstRep() { 
577          if (getFluidConsistencyType().isEmpty()) {
578            addFluidConsistencyType();
579          }
580          return getFluidConsistencyType().get(0);
581        }
582
583        /**
584         * @return {@link #instruction} (Free text or additional instructions or information pertaining to the oral diet.). This is the underlying object with id, value and extensions. The accessor "getInstruction" gives direct access to the value
585         */
586        public StringType getInstructionElement() { 
587          if (this.instruction == null)
588            if (Configuration.errorOnAutoCreate())
589              throw new Error("Attempt to auto-create NutritionOrderOralDietComponent.instruction");
590            else if (Configuration.doAutoCreate())
591              this.instruction = new StringType(); // bb
592          return this.instruction;
593        }
594
595        public boolean hasInstructionElement() { 
596          return this.instruction != null && !this.instruction.isEmpty();
597        }
598
599        public boolean hasInstruction() { 
600          return this.instruction != null && !this.instruction.isEmpty();
601        }
602
603        /**
604         * @param value {@link #instruction} (Free text or additional instructions or information pertaining to the oral diet.). This is the underlying object with id, value and extensions. The accessor "getInstruction" gives direct access to the value
605         */
606        public NutritionOrderOralDietComponent setInstructionElement(StringType value) { 
607          this.instruction = value;
608          return this;
609        }
610
611        /**
612         * @return Free text or additional instructions or information pertaining to the oral diet.
613         */
614        public String getInstruction() { 
615          return this.instruction == null ? null : this.instruction.getValue();
616        }
617
618        /**
619         * @param value Free text or additional instructions or information pertaining to the oral diet.
620         */
621        public NutritionOrderOralDietComponent setInstruction(String value) { 
622          if (Utilities.noString(value))
623            this.instruction = null;
624          else {
625            if (this.instruction == null)
626              this.instruction = new StringType();
627            this.instruction.setValue(value);
628          }
629          return this;
630        }
631
632        protected void listChildren(List<Property> children) {
633          super.listChildren(children);
634          children.add(new Property("type", "CodeableConcept", "The kind of diet or dietary restriction such as fiber restricted diet or diabetic diet.", 0, java.lang.Integer.MAX_VALUE, type));
635          children.add(new Property("schedule", "Timing", "The time period and frequency at which the diet should be given.  The diet should be given for the combination of all schedules if more than one schedule is present.", 0, java.lang.Integer.MAX_VALUE, schedule));
636          children.add(new Property("nutrient", "", "Class that defines the quantity and type of nutrient modifications (for example carbohydrate, fiber or sodium) required for the oral diet.", 0, java.lang.Integer.MAX_VALUE, nutrient));
637          children.add(new Property("texture", "", "Class that describes any texture modifications required for the patient to safely consume various types of solid foods.", 0, java.lang.Integer.MAX_VALUE, texture));
638          children.add(new Property("fluidConsistencyType", "CodeableConcept", "The required consistency (e.g. honey-thick, nectar-thick, thin, thickened.) of liquids or fluids served to the patient.", 0, java.lang.Integer.MAX_VALUE, fluidConsistencyType));
639          children.add(new Property("instruction", "string", "Free text or additional instructions or information pertaining to the oral diet.", 0, 1, instruction));
640        }
641
642        @Override
643        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
644          switch (_hash) {
645          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The kind of diet or dietary restriction such as fiber restricted diet or diabetic diet.", 0, java.lang.Integer.MAX_VALUE, type);
646          case -697920873: /*schedule*/  return new Property("schedule", "Timing", "The time period and frequency at which the diet should be given.  The diet should be given for the combination of all schedules if more than one schedule is present.", 0, java.lang.Integer.MAX_VALUE, schedule);
647          case -1671151641: /*nutrient*/  return new Property("nutrient", "", "Class that defines the quantity and type of nutrient modifications (for example carbohydrate, fiber or sodium) required for the oral diet.", 0, java.lang.Integer.MAX_VALUE, nutrient);
648          case -1417816805: /*texture*/  return new Property("texture", "", "Class that describes any texture modifications required for the patient to safely consume various types of solid foods.", 0, java.lang.Integer.MAX_VALUE, texture);
649          case -525105592: /*fluidConsistencyType*/  return new Property("fluidConsistencyType", "CodeableConcept", "The required consistency (e.g. honey-thick, nectar-thick, thin, thickened.) of liquids or fluids served to the patient.", 0, java.lang.Integer.MAX_VALUE, fluidConsistencyType);
650          case 301526158: /*instruction*/  return new Property("instruction", "string", "Free text or additional instructions or information pertaining to the oral diet.", 0, 1, instruction);
651          default: return super.getNamedProperty(_hash, _name, _checkValid);
652          }
653
654        }
655
656      @Override
657      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
658        switch (hash) {
659        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
660        case -697920873: /*schedule*/ return this.schedule == null ? new Base[0] : this.schedule.toArray(new Base[this.schedule.size()]); // Timing
661        case -1671151641: /*nutrient*/ return this.nutrient == null ? new Base[0] : this.nutrient.toArray(new Base[this.nutrient.size()]); // NutritionOrderOralDietNutrientComponent
662        case -1417816805: /*texture*/ return this.texture == null ? new Base[0] : this.texture.toArray(new Base[this.texture.size()]); // NutritionOrderOralDietTextureComponent
663        case -525105592: /*fluidConsistencyType*/ return this.fluidConsistencyType == null ? new Base[0] : this.fluidConsistencyType.toArray(new Base[this.fluidConsistencyType.size()]); // CodeableConcept
664        case 301526158: /*instruction*/ return this.instruction == null ? new Base[0] : new Base[] {this.instruction}; // StringType
665        default: return super.getProperty(hash, name, checkValid);
666        }
667
668      }
669
670      @Override
671      public Base setProperty(int hash, String name, Base value) throws FHIRException {
672        switch (hash) {
673        case 3575610: // type
674          this.getType().add(castToCodeableConcept(value)); // CodeableConcept
675          return value;
676        case -697920873: // schedule
677          this.getSchedule().add(castToTiming(value)); // Timing
678          return value;
679        case -1671151641: // nutrient
680          this.getNutrient().add((NutritionOrderOralDietNutrientComponent) value); // NutritionOrderOralDietNutrientComponent
681          return value;
682        case -1417816805: // texture
683          this.getTexture().add((NutritionOrderOralDietTextureComponent) value); // NutritionOrderOralDietTextureComponent
684          return value;
685        case -525105592: // fluidConsistencyType
686          this.getFluidConsistencyType().add(castToCodeableConcept(value)); // CodeableConcept
687          return value;
688        case 301526158: // instruction
689          this.instruction = castToString(value); // StringType
690          return value;
691        default: return super.setProperty(hash, name, value);
692        }
693
694      }
695
696      @Override
697      public Base setProperty(String name, Base value) throws FHIRException {
698        if (name.equals("type")) {
699          this.getType().add(castToCodeableConcept(value));
700        } else if (name.equals("schedule")) {
701          this.getSchedule().add(castToTiming(value));
702        } else if (name.equals("nutrient")) {
703          this.getNutrient().add((NutritionOrderOralDietNutrientComponent) value);
704        } else if (name.equals("texture")) {
705          this.getTexture().add((NutritionOrderOralDietTextureComponent) value);
706        } else if (name.equals("fluidConsistencyType")) {
707          this.getFluidConsistencyType().add(castToCodeableConcept(value));
708        } else if (name.equals("instruction")) {
709          this.instruction = castToString(value); // StringType
710        } else
711          return super.setProperty(name, value);
712        return value;
713      }
714
715      @Override
716      public Base makeProperty(int hash, String name) throws FHIRException {
717        switch (hash) {
718        case 3575610:  return addType(); 
719        case -697920873:  return addSchedule(); 
720        case -1671151641:  return addNutrient(); 
721        case -1417816805:  return addTexture(); 
722        case -525105592:  return addFluidConsistencyType(); 
723        case 301526158:  return getInstructionElement();
724        default: return super.makeProperty(hash, name);
725        }
726
727      }
728
729      @Override
730      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
731        switch (hash) {
732        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
733        case -697920873: /*schedule*/ return new String[] {"Timing"};
734        case -1671151641: /*nutrient*/ return new String[] {};
735        case -1417816805: /*texture*/ return new String[] {};
736        case -525105592: /*fluidConsistencyType*/ return new String[] {"CodeableConcept"};
737        case 301526158: /*instruction*/ return new String[] {"string"};
738        default: return super.getTypesForProperty(hash, name);
739        }
740
741      }
742
743      @Override
744      public Base addChild(String name) throws FHIRException {
745        if (name.equals("type")) {
746          return addType();
747        }
748        else if (name.equals("schedule")) {
749          return addSchedule();
750        }
751        else if (name.equals("nutrient")) {
752          return addNutrient();
753        }
754        else if (name.equals("texture")) {
755          return addTexture();
756        }
757        else if (name.equals("fluidConsistencyType")) {
758          return addFluidConsistencyType();
759        }
760        else if (name.equals("instruction")) {
761          throw new FHIRException("Cannot call addChild on a singleton property NutritionOrder.instruction");
762        }
763        else
764          return super.addChild(name);
765      }
766
767      public NutritionOrderOralDietComponent copy() {
768        NutritionOrderOralDietComponent dst = new NutritionOrderOralDietComponent();
769        copyValues(dst);
770        if (type != null) {
771          dst.type = new ArrayList<CodeableConcept>();
772          for (CodeableConcept i : type)
773            dst.type.add(i.copy());
774        };
775        if (schedule != null) {
776          dst.schedule = new ArrayList<Timing>();
777          for (Timing i : schedule)
778            dst.schedule.add(i.copy());
779        };
780        if (nutrient != null) {
781          dst.nutrient = new ArrayList<NutritionOrderOralDietNutrientComponent>();
782          for (NutritionOrderOralDietNutrientComponent i : nutrient)
783            dst.nutrient.add(i.copy());
784        };
785        if (texture != null) {
786          dst.texture = new ArrayList<NutritionOrderOralDietTextureComponent>();
787          for (NutritionOrderOralDietTextureComponent i : texture)
788            dst.texture.add(i.copy());
789        };
790        if (fluidConsistencyType != null) {
791          dst.fluidConsistencyType = new ArrayList<CodeableConcept>();
792          for (CodeableConcept i : fluidConsistencyType)
793            dst.fluidConsistencyType.add(i.copy());
794        };
795        dst.instruction = instruction == null ? null : instruction.copy();
796        return dst;
797      }
798
799      @Override
800      public boolean equalsDeep(Base other_) {
801        if (!super.equalsDeep(other_))
802          return false;
803        if (!(other_ instanceof NutritionOrderOralDietComponent))
804          return false;
805        NutritionOrderOralDietComponent o = (NutritionOrderOralDietComponent) other_;
806        return compareDeep(type, o.type, true) && compareDeep(schedule, o.schedule, true) && compareDeep(nutrient, o.nutrient, true)
807           && compareDeep(texture, o.texture, true) && compareDeep(fluidConsistencyType, o.fluidConsistencyType, true)
808           && compareDeep(instruction, o.instruction, true);
809      }
810
811      @Override
812      public boolean equalsShallow(Base other_) {
813        if (!super.equalsShallow(other_))
814          return false;
815        if (!(other_ instanceof NutritionOrderOralDietComponent))
816          return false;
817        NutritionOrderOralDietComponent o = (NutritionOrderOralDietComponent) other_;
818        return compareValues(instruction, o.instruction, true);
819      }
820
821      public boolean isEmpty() {
822        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, schedule, nutrient
823          , texture, fluidConsistencyType, instruction);
824      }
825
826  public String fhirType() {
827    return "NutritionOrder.oralDiet";
828
829  }
830
831  }
832
833    @Block()
834    public static class NutritionOrderOralDietNutrientComponent extends BackboneElement implements IBaseBackboneElement {
835        /**
836         * The nutrient that is being modified such as carbohydrate or sodium.
837         */
838        @Child(name = "modifier", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
839        @Description(shortDefinition="Type of nutrient that is being modified", formalDefinition="The nutrient that is being modified such as carbohydrate or sodium." )
840        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/nutrient-code")
841        protected CodeableConcept modifier;
842
843        /**
844         * The quantity of the specified nutrient to include in diet.
845         */
846        @Child(name = "amount", type = {SimpleQuantity.class}, order=2, min=0, max=1, modifier=false, summary=false)
847        @Description(shortDefinition="Quantity of the specified nutrient", formalDefinition="The quantity of the specified nutrient to include in diet." )
848        protected SimpleQuantity amount;
849
850        private static final long serialVersionUID = 465107295L;
851
852    /**
853     * Constructor
854     */
855      public NutritionOrderOralDietNutrientComponent() {
856        super();
857      }
858
859        /**
860         * @return {@link #modifier} (The nutrient that is being modified such as carbohydrate or sodium.)
861         */
862        public CodeableConcept getModifier() { 
863          if (this.modifier == null)
864            if (Configuration.errorOnAutoCreate())
865              throw new Error("Attempt to auto-create NutritionOrderOralDietNutrientComponent.modifier");
866            else if (Configuration.doAutoCreate())
867              this.modifier = new CodeableConcept(); // cc
868          return this.modifier;
869        }
870
871        public boolean hasModifier() { 
872          return this.modifier != null && !this.modifier.isEmpty();
873        }
874
875        /**
876         * @param value {@link #modifier} (The nutrient that is being modified such as carbohydrate or sodium.)
877         */
878        public NutritionOrderOralDietNutrientComponent setModifier(CodeableConcept value)  { 
879          this.modifier = value;
880          return this;
881        }
882
883        /**
884         * @return {@link #amount} (The quantity of the specified nutrient to include in diet.)
885         */
886        public SimpleQuantity getAmount() { 
887          if (this.amount == null)
888            if (Configuration.errorOnAutoCreate())
889              throw new Error("Attempt to auto-create NutritionOrderOralDietNutrientComponent.amount");
890            else if (Configuration.doAutoCreate())
891              this.amount = new SimpleQuantity(); // cc
892          return this.amount;
893        }
894
895        public boolean hasAmount() { 
896          return this.amount != null && !this.amount.isEmpty();
897        }
898
899        /**
900         * @param value {@link #amount} (The quantity of the specified nutrient to include in diet.)
901         */
902        public NutritionOrderOralDietNutrientComponent setAmount(SimpleQuantity value)  { 
903          this.amount = value;
904          return this;
905        }
906
907        protected void listChildren(List<Property> children) {
908          super.listChildren(children);
909          children.add(new Property("modifier", "CodeableConcept", "The nutrient that is being modified such as carbohydrate or sodium.", 0, 1, modifier));
910          children.add(new Property("amount", "SimpleQuantity", "The quantity of the specified nutrient to include in diet.", 0, 1, amount));
911        }
912
913        @Override
914        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
915          switch (_hash) {
916          case -615513385: /*modifier*/  return new Property("modifier", "CodeableConcept", "The nutrient that is being modified such as carbohydrate or sodium.", 0, 1, modifier);
917          case -1413853096: /*amount*/  return new Property("amount", "SimpleQuantity", "The quantity of the specified nutrient to include in diet.", 0, 1, amount);
918          default: return super.getNamedProperty(_hash, _name, _checkValid);
919          }
920
921        }
922
923      @Override
924      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
925        switch (hash) {
926        case -615513385: /*modifier*/ return this.modifier == null ? new Base[0] : new Base[] {this.modifier}; // CodeableConcept
927        case -1413853096: /*amount*/ return this.amount == null ? new Base[0] : new Base[] {this.amount}; // SimpleQuantity
928        default: return super.getProperty(hash, name, checkValid);
929        }
930
931      }
932
933      @Override
934      public Base setProperty(int hash, String name, Base value) throws FHIRException {
935        switch (hash) {
936        case -615513385: // modifier
937          this.modifier = castToCodeableConcept(value); // CodeableConcept
938          return value;
939        case -1413853096: // amount
940          this.amount = castToSimpleQuantity(value); // SimpleQuantity
941          return value;
942        default: return super.setProperty(hash, name, value);
943        }
944
945      }
946
947      @Override
948      public Base setProperty(String name, Base value) throws FHIRException {
949        if (name.equals("modifier")) {
950          this.modifier = castToCodeableConcept(value); // CodeableConcept
951        } else if (name.equals("amount")) {
952          this.amount = castToSimpleQuantity(value); // SimpleQuantity
953        } else
954          return super.setProperty(name, value);
955        return value;
956      }
957
958      @Override
959      public Base makeProperty(int hash, String name) throws FHIRException {
960        switch (hash) {
961        case -615513385:  return getModifier(); 
962        case -1413853096:  return getAmount(); 
963        default: return super.makeProperty(hash, name);
964        }
965
966      }
967
968      @Override
969      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
970        switch (hash) {
971        case -615513385: /*modifier*/ return new String[] {"CodeableConcept"};
972        case -1413853096: /*amount*/ return new String[] {"SimpleQuantity"};
973        default: return super.getTypesForProperty(hash, name);
974        }
975
976      }
977
978      @Override
979      public Base addChild(String name) throws FHIRException {
980        if (name.equals("modifier")) {
981          this.modifier = new CodeableConcept();
982          return this.modifier;
983        }
984        else if (name.equals("amount")) {
985          this.amount = new SimpleQuantity();
986          return this.amount;
987        }
988        else
989          return super.addChild(name);
990      }
991
992      public NutritionOrderOralDietNutrientComponent copy() {
993        NutritionOrderOralDietNutrientComponent dst = new NutritionOrderOralDietNutrientComponent();
994        copyValues(dst);
995        dst.modifier = modifier == null ? null : modifier.copy();
996        dst.amount = amount == null ? null : amount.copy();
997        return dst;
998      }
999
1000      @Override
1001      public boolean equalsDeep(Base other_) {
1002        if (!super.equalsDeep(other_))
1003          return false;
1004        if (!(other_ instanceof NutritionOrderOralDietNutrientComponent))
1005          return false;
1006        NutritionOrderOralDietNutrientComponent o = (NutritionOrderOralDietNutrientComponent) other_;
1007        return compareDeep(modifier, o.modifier, true) && compareDeep(amount, o.amount, true);
1008      }
1009
1010      @Override
1011      public boolean equalsShallow(Base other_) {
1012        if (!super.equalsShallow(other_))
1013          return false;
1014        if (!(other_ instanceof NutritionOrderOralDietNutrientComponent))
1015          return false;
1016        NutritionOrderOralDietNutrientComponent o = (NutritionOrderOralDietNutrientComponent) other_;
1017        return true;
1018      }
1019
1020      public boolean isEmpty() {
1021        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(modifier, amount);
1022      }
1023
1024  public String fhirType() {
1025    return "NutritionOrder.oralDiet.nutrient";
1026
1027  }
1028
1029  }
1030
1031    @Block()
1032    public static class NutritionOrderOralDietTextureComponent extends BackboneElement implements IBaseBackboneElement {
1033        /**
1034         * Any texture modifications (for solid foods) that should be made, e.g. easy to chew, chopped, ground, and pureed.
1035         */
1036        @Child(name = "modifier", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
1037        @Description(shortDefinition="Code to indicate how to alter the texture of the foods, e.g. pureed", formalDefinition="Any texture modifications (for solid foods) that should be made, e.g. easy to chew, chopped, ground, and pureed." )
1038        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/texture-code")
1039        protected CodeableConcept modifier;
1040
1041        /**
1042         * The food type(s) (e.g. meats, all foods)  that the texture modification applies to.  This could be all foods types.
1043         */
1044        @Child(name = "foodType", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
1045        @Description(shortDefinition="Concepts that are used to identify an entity that is ingested for nutritional purposes", formalDefinition="The food type(s) (e.g. meats, all foods)  that the texture modification applies to.  This could be all foods types." )
1046        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/modified-foodtype")
1047        protected CodeableConcept foodType;
1048
1049        private static final long serialVersionUID = -56402817L;
1050
1051    /**
1052     * Constructor
1053     */
1054      public NutritionOrderOralDietTextureComponent() {
1055        super();
1056      }
1057
1058        /**
1059         * @return {@link #modifier} (Any texture modifications (for solid foods) that should be made, e.g. easy to chew, chopped, ground, and pureed.)
1060         */
1061        public CodeableConcept getModifier() { 
1062          if (this.modifier == null)
1063            if (Configuration.errorOnAutoCreate())
1064              throw new Error("Attempt to auto-create NutritionOrderOralDietTextureComponent.modifier");
1065            else if (Configuration.doAutoCreate())
1066              this.modifier = new CodeableConcept(); // cc
1067          return this.modifier;
1068        }
1069
1070        public boolean hasModifier() { 
1071          return this.modifier != null && !this.modifier.isEmpty();
1072        }
1073
1074        /**
1075         * @param value {@link #modifier} (Any texture modifications (for solid foods) that should be made, e.g. easy to chew, chopped, ground, and pureed.)
1076         */
1077        public NutritionOrderOralDietTextureComponent setModifier(CodeableConcept value)  { 
1078          this.modifier = value;
1079          return this;
1080        }
1081
1082        /**
1083         * @return {@link #foodType} (The food type(s) (e.g. meats, all foods)  that the texture modification applies to.  This could be all foods types.)
1084         */
1085        public CodeableConcept getFoodType() { 
1086          if (this.foodType == null)
1087            if (Configuration.errorOnAutoCreate())
1088              throw new Error("Attempt to auto-create NutritionOrderOralDietTextureComponent.foodType");
1089            else if (Configuration.doAutoCreate())
1090              this.foodType = new CodeableConcept(); // cc
1091          return this.foodType;
1092        }
1093
1094        public boolean hasFoodType() { 
1095          return this.foodType != null && !this.foodType.isEmpty();
1096        }
1097
1098        /**
1099         * @param value {@link #foodType} (The food type(s) (e.g. meats, all foods)  that the texture modification applies to.  This could be all foods types.)
1100         */
1101        public NutritionOrderOralDietTextureComponent setFoodType(CodeableConcept value)  { 
1102          this.foodType = value;
1103          return this;
1104        }
1105
1106        protected void listChildren(List<Property> children) {
1107          super.listChildren(children);
1108          children.add(new Property("modifier", "CodeableConcept", "Any texture modifications (for solid foods) that should be made, e.g. easy to chew, chopped, ground, and pureed.", 0, 1, modifier));
1109          children.add(new Property("foodType", "CodeableConcept", "The food type(s) (e.g. meats, all foods)  that the texture modification applies to.  This could be all foods types.", 0, 1, foodType));
1110        }
1111
1112        @Override
1113        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1114          switch (_hash) {
1115          case -615513385: /*modifier*/  return new Property("modifier", "CodeableConcept", "Any texture modifications (for solid foods) that should be made, e.g. easy to chew, chopped, ground, and pureed.", 0, 1, modifier);
1116          case 379498680: /*foodType*/  return new Property("foodType", "CodeableConcept", "The food type(s) (e.g. meats, all foods)  that the texture modification applies to.  This could be all foods types.", 0, 1, foodType);
1117          default: return super.getNamedProperty(_hash, _name, _checkValid);
1118          }
1119
1120        }
1121
1122      @Override
1123      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1124        switch (hash) {
1125        case -615513385: /*modifier*/ return this.modifier == null ? new Base[0] : new Base[] {this.modifier}; // CodeableConcept
1126        case 379498680: /*foodType*/ return this.foodType == null ? new Base[0] : new Base[] {this.foodType}; // CodeableConcept
1127        default: return super.getProperty(hash, name, checkValid);
1128        }
1129
1130      }
1131
1132      @Override
1133      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1134        switch (hash) {
1135        case -615513385: // modifier
1136          this.modifier = castToCodeableConcept(value); // CodeableConcept
1137          return value;
1138        case 379498680: // foodType
1139          this.foodType = castToCodeableConcept(value); // CodeableConcept
1140          return value;
1141        default: return super.setProperty(hash, name, value);
1142        }
1143
1144      }
1145
1146      @Override
1147      public Base setProperty(String name, Base value) throws FHIRException {
1148        if (name.equals("modifier")) {
1149          this.modifier = castToCodeableConcept(value); // CodeableConcept
1150        } else if (name.equals("foodType")) {
1151          this.foodType = castToCodeableConcept(value); // CodeableConcept
1152        } else
1153          return super.setProperty(name, value);
1154        return value;
1155      }
1156
1157      @Override
1158      public Base makeProperty(int hash, String name) throws FHIRException {
1159        switch (hash) {
1160        case -615513385:  return getModifier(); 
1161        case 379498680:  return getFoodType(); 
1162        default: return super.makeProperty(hash, name);
1163        }
1164
1165      }
1166
1167      @Override
1168      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1169        switch (hash) {
1170        case -615513385: /*modifier*/ return new String[] {"CodeableConcept"};
1171        case 379498680: /*foodType*/ return new String[] {"CodeableConcept"};
1172        default: return super.getTypesForProperty(hash, name);
1173        }
1174
1175      }
1176
1177      @Override
1178      public Base addChild(String name) throws FHIRException {
1179        if (name.equals("modifier")) {
1180          this.modifier = new CodeableConcept();
1181          return this.modifier;
1182        }
1183        else if (name.equals("foodType")) {
1184          this.foodType = new CodeableConcept();
1185          return this.foodType;
1186        }
1187        else
1188          return super.addChild(name);
1189      }
1190
1191      public NutritionOrderOralDietTextureComponent copy() {
1192        NutritionOrderOralDietTextureComponent dst = new NutritionOrderOralDietTextureComponent();
1193        copyValues(dst);
1194        dst.modifier = modifier == null ? null : modifier.copy();
1195        dst.foodType = foodType == null ? null : foodType.copy();
1196        return dst;
1197      }
1198
1199      @Override
1200      public boolean equalsDeep(Base other_) {
1201        if (!super.equalsDeep(other_))
1202          return false;
1203        if (!(other_ instanceof NutritionOrderOralDietTextureComponent))
1204          return false;
1205        NutritionOrderOralDietTextureComponent o = (NutritionOrderOralDietTextureComponent) other_;
1206        return compareDeep(modifier, o.modifier, true) && compareDeep(foodType, o.foodType, true);
1207      }
1208
1209      @Override
1210      public boolean equalsShallow(Base other_) {
1211        if (!super.equalsShallow(other_))
1212          return false;
1213        if (!(other_ instanceof NutritionOrderOralDietTextureComponent))
1214          return false;
1215        NutritionOrderOralDietTextureComponent o = (NutritionOrderOralDietTextureComponent) other_;
1216        return true;
1217      }
1218
1219      public boolean isEmpty() {
1220        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(modifier, foodType);
1221      }
1222
1223  public String fhirType() {
1224    return "NutritionOrder.oralDiet.texture";
1225
1226  }
1227
1228  }
1229
1230    @Block()
1231    public static class NutritionOrderSupplementComponent extends BackboneElement implements IBaseBackboneElement {
1232        /**
1233         * The kind of nutritional supplement product required such as a high protein or pediatric clear liquid supplement.
1234         */
1235        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
1236        @Description(shortDefinition="Type of supplement product requested", formalDefinition="The kind of nutritional supplement product required such as a high protein or pediatric clear liquid supplement." )
1237        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/supplement-type")
1238        protected CodeableConcept type;
1239
1240        /**
1241         * The product or brand name of the nutritional supplement such as "Acme Protein Shake".
1242         */
1243        @Child(name = "productName", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1244        @Description(shortDefinition="Product or brand name of the nutritional supplement", formalDefinition="The product or brand name of the nutritional supplement such as \"Acme Protein Shake\"." )
1245        protected StringType productName;
1246
1247        /**
1248         * The time period and frequency at which the supplement(s) should be given.  The supplement should be given for the combination of all schedules if more than one schedule is present.
1249         */
1250        @Child(name = "schedule", type = {Timing.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1251        @Description(shortDefinition="Scheduled frequency of supplement", formalDefinition="The time period and frequency at which the supplement(s) should be given.  The supplement should be given for the combination of all schedules if more than one schedule is present." )
1252        protected List<Timing> schedule;
1253
1254        /**
1255         * The amount of the nutritional supplement to be given.
1256         */
1257        @Child(name = "quantity", type = {SimpleQuantity.class}, order=4, min=0, max=1, modifier=false, summary=false)
1258        @Description(shortDefinition="Amount of the nutritional supplement", formalDefinition="The amount of the nutritional supplement to be given." )
1259        protected SimpleQuantity quantity;
1260
1261        /**
1262         * Free text or additional instructions or information pertaining to the oral supplement.
1263         */
1264        @Child(name = "instruction", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
1265        @Description(shortDefinition="Instructions or additional information about the oral supplement", formalDefinition="Free text or additional instructions or information pertaining to the oral supplement." )
1266        protected StringType instruction;
1267
1268        private static final long serialVersionUID = 297545236L;
1269
1270    /**
1271     * Constructor
1272     */
1273      public NutritionOrderSupplementComponent() {
1274        super();
1275      }
1276
1277        /**
1278         * @return {@link #type} (The kind of nutritional supplement product required such as a high protein or pediatric clear liquid supplement.)
1279         */
1280        public CodeableConcept getType() { 
1281          if (this.type == null)
1282            if (Configuration.errorOnAutoCreate())
1283              throw new Error("Attempt to auto-create NutritionOrderSupplementComponent.type");
1284            else if (Configuration.doAutoCreate())
1285              this.type = new CodeableConcept(); // cc
1286          return this.type;
1287        }
1288
1289        public boolean hasType() { 
1290          return this.type != null && !this.type.isEmpty();
1291        }
1292
1293        /**
1294         * @param value {@link #type} (The kind of nutritional supplement product required such as a high protein or pediatric clear liquid supplement.)
1295         */
1296        public NutritionOrderSupplementComponent setType(CodeableConcept value)  { 
1297          this.type = value;
1298          return this;
1299        }
1300
1301        /**
1302         * @return {@link #productName} (The product or brand name of the nutritional supplement such as "Acme Protein Shake".). This is the underlying object with id, value and extensions. The accessor "getProductName" gives direct access to the value
1303         */
1304        public StringType getProductNameElement() { 
1305          if (this.productName == null)
1306            if (Configuration.errorOnAutoCreate())
1307              throw new Error("Attempt to auto-create NutritionOrderSupplementComponent.productName");
1308            else if (Configuration.doAutoCreate())
1309              this.productName = new StringType(); // bb
1310          return this.productName;
1311        }
1312
1313        public boolean hasProductNameElement() { 
1314          return this.productName != null && !this.productName.isEmpty();
1315        }
1316
1317        public boolean hasProductName() { 
1318          return this.productName != null && !this.productName.isEmpty();
1319        }
1320
1321        /**
1322         * @param value {@link #productName} (The product or brand name of the nutritional supplement such as "Acme Protein Shake".). This is the underlying object with id, value and extensions. The accessor "getProductName" gives direct access to the value
1323         */
1324        public NutritionOrderSupplementComponent setProductNameElement(StringType value) { 
1325          this.productName = value;
1326          return this;
1327        }
1328
1329        /**
1330         * @return The product or brand name of the nutritional supplement such as "Acme Protein Shake".
1331         */
1332        public String getProductName() { 
1333          return this.productName == null ? null : this.productName.getValue();
1334        }
1335
1336        /**
1337         * @param value The product or brand name of the nutritional supplement such as "Acme Protein Shake".
1338         */
1339        public NutritionOrderSupplementComponent setProductName(String value) { 
1340          if (Utilities.noString(value))
1341            this.productName = null;
1342          else {
1343            if (this.productName == null)
1344              this.productName = new StringType();
1345            this.productName.setValue(value);
1346          }
1347          return this;
1348        }
1349
1350        /**
1351         * @return {@link #schedule} (The time period and frequency at which the supplement(s) should be given.  The supplement should be given for the combination of all schedules if more than one schedule is present.)
1352         */
1353        public List<Timing> getSchedule() { 
1354          if (this.schedule == null)
1355            this.schedule = new ArrayList<Timing>();
1356          return this.schedule;
1357        }
1358
1359        /**
1360         * @return Returns a reference to <code>this</code> for easy method chaining
1361         */
1362        public NutritionOrderSupplementComponent setSchedule(List<Timing> theSchedule) { 
1363          this.schedule = theSchedule;
1364          return this;
1365        }
1366
1367        public boolean hasSchedule() { 
1368          if (this.schedule == null)
1369            return false;
1370          for (Timing item : this.schedule)
1371            if (!item.isEmpty())
1372              return true;
1373          return false;
1374        }
1375
1376        public Timing addSchedule() { //3
1377          Timing t = new Timing();
1378          if (this.schedule == null)
1379            this.schedule = new ArrayList<Timing>();
1380          this.schedule.add(t);
1381          return t;
1382        }
1383
1384        public NutritionOrderSupplementComponent addSchedule(Timing t) { //3
1385          if (t == null)
1386            return this;
1387          if (this.schedule == null)
1388            this.schedule = new ArrayList<Timing>();
1389          this.schedule.add(t);
1390          return this;
1391        }
1392
1393        /**
1394         * @return The first repetition of repeating field {@link #schedule}, creating it if it does not already exist
1395         */
1396        public Timing getScheduleFirstRep() { 
1397          if (getSchedule().isEmpty()) {
1398            addSchedule();
1399          }
1400          return getSchedule().get(0);
1401        }
1402
1403        /**
1404         * @return {@link #quantity} (The amount of the nutritional supplement to be given.)
1405         */
1406        public SimpleQuantity getQuantity() { 
1407          if (this.quantity == null)
1408            if (Configuration.errorOnAutoCreate())
1409              throw new Error("Attempt to auto-create NutritionOrderSupplementComponent.quantity");
1410            else if (Configuration.doAutoCreate())
1411              this.quantity = new SimpleQuantity(); // cc
1412          return this.quantity;
1413        }
1414
1415        public boolean hasQuantity() { 
1416          return this.quantity != null && !this.quantity.isEmpty();
1417        }
1418
1419        /**
1420         * @param value {@link #quantity} (The amount of the nutritional supplement to be given.)
1421         */
1422        public NutritionOrderSupplementComponent setQuantity(SimpleQuantity value)  { 
1423          this.quantity = value;
1424          return this;
1425        }
1426
1427        /**
1428         * @return {@link #instruction} (Free text or additional instructions or information pertaining to the oral supplement.). This is the underlying object with id, value and extensions. The accessor "getInstruction" gives direct access to the value
1429         */
1430        public StringType getInstructionElement() { 
1431          if (this.instruction == null)
1432            if (Configuration.errorOnAutoCreate())
1433              throw new Error("Attempt to auto-create NutritionOrderSupplementComponent.instruction");
1434            else if (Configuration.doAutoCreate())
1435              this.instruction = new StringType(); // bb
1436          return this.instruction;
1437        }
1438
1439        public boolean hasInstructionElement() { 
1440          return this.instruction != null && !this.instruction.isEmpty();
1441        }
1442
1443        public boolean hasInstruction() { 
1444          return this.instruction != null && !this.instruction.isEmpty();
1445        }
1446
1447        /**
1448         * @param value {@link #instruction} (Free text or additional instructions or information pertaining to the oral supplement.). This is the underlying object with id, value and extensions. The accessor "getInstruction" gives direct access to the value
1449         */
1450        public NutritionOrderSupplementComponent setInstructionElement(StringType value) { 
1451          this.instruction = value;
1452          return this;
1453        }
1454
1455        /**
1456         * @return Free text or additional instructions or information pertaining to the oral supplement.
1457         */
1458        public String getInstruction() { 
1459          return this.instruction == null ? null : this.instruction.getValue();
1460        }
1461
1462        /**
1463         * @param value Free text or additional instructions or information pertaining to the oral supplement.
1464         */
1465        public NutritionOrderSupplementComponent setInstruction(String value) { 
1466          if (Utilities.noString(value))
1467            this.instruction = null;
1468          else {
1469            if (this.instruction == null)
1470              this.instruction = new StringType();
1471            this.instruction.setValue(value);
1472          }
1473          return this;
1474        }
1475
1476        protected void listChildren(List<Property> children) {
1477          super.listChildren(children);
1478          children.add(new Property("type", "CodeableConcept", "The kind of nutritional supplement product required such as a high protein or pediatric clear liquid supplement.", 0, 1, type));
1479          children.add(new Property("productName", "string", "The product or brand name of the nutritional supplement such as \"Acme Protein Shake\".", 0, 1, productName));
1480          children.add(new Property("schedule", "Timing", "The time period and frequency at which the supplement(s) should be given.  The supplement should be given for the combination of all schedules if more than one schedule is present.", 0, java.lang.Integer.MAX_VALUE, schedule));
1481          children.add(new Property("quantity", "SimpleQuantity", "The amount of the nutritional supplement to be given.", 0, 1, quantity));
1482          children.add(new Property("instruction", "string", "Free text or additional instructions or information pertaining to the oral supplement.", 0, 1, instruction));
1483        }
1484
1485        @Override
1486        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1487          switch (_hash) {
1488          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The kind of nutritional supplement product required such as a high protein or pediatric clear liquid supplement.", 0, 1, type);
1489          case -1491817446: /*productName*/  return new Property("productName", "string", "The product or brand name of the nutritional supplement such as \"Acme Protein Shake\".", 0, 1, productName);
1490          case -697920873: /*schedule*/  return new Property("schedule", "Timing", "The time period and frequency at which the supplement(s) should be given.  The supplement should be given for the combination of all schedules if more than one schedule is present.", 0, java.lang.Integer.MAX_VALUE, schedule);
1491          case -1285004149: /*quantity*/  return new Property("quantity", "SimpleQuantity", "The amount of the nutritional supplement to be given.", 0, 1, quantity);
1492          case 301526158: /*instruction*/  return new Property("instruction", "string", "Free text or additional instructions or information pertaining to the oral supplement.", 0, 1, instruction);
1493          default: return super.getNamedProperty(_hash, _name, _checkValid);
1494          }
1495
1496        }
1497
1498      @Override
1499      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1500        switch (hash) {
1501        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1502        case -1491817446: /*productName*/ return this.productName == null ? new Base[0] : new Base[] {this.productName}; // StringType
1503        case -697920873: /*schedule*/ return this.schedule == null ? new Base[0] : this.schedule.toArray(new Base[this.schedule.size()]); // Timing
1504        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // SimpleQuantity
1505        case 301526158: /*instruction*/ return this.instruction == null ? new Base[0] : new Base[] {this.instruction}; // StringType
1506        default: return super.getProperty(hash, name, checkValid);
1507        }
1508
1509      }
1510
1511      @Override
1512      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1513        switch (hash) {
1514        case 3575610: // type
1515          this.type = castToCodeableConcept(value); // CodeableConcept
1516          return value;
1517        case -1491817446: // productName
1518          this.productName = castToString(value); // StringType
1519          return value;
1520        case -697920873: // schedule
1521          this.getSchedule().add(castToTiming(value)); // Timing
1522          return value;
1523        case -1285004149: // quantity
1524          this.quantity = castToSimpleQuantity(value); // SimpleQuantity
1525          return value;
1526        case 301526158: // instruction
1527          this.instruction = castToString(value); // StringType
1528          return value;
1529        default: return super.setProperty(hash, name, value);
1530        }
1531
1532      }
1533
1534      @Override
1535      public Base setProperty(String name, Base value) throws FHIRException {
1536        if (name.equals("type")) {
1537          this.type = castToCodeableConcept(value); // CodeableConcept
1538        } else if (name.equals("productName")) {
1539          this.productName = castToString(value); // StringType
1540        } else if (name.equals("schedule")) {
1541          this.getSchedule().add(castToTiming(value));
1542        } else if (name.equals("quantity")) {
1543          this.quantity = castToSimpleQuantity(value); // SimpleQuantity
1544        } else if (name.equals("instruction")) {
1545          this.instruction = castToString(value); // StringType
1546        } else
1547          return super.setProperty(name, value);
1548        return value;
1549      }
1550
1551      @Override
1552      public Base makeProperty(int hash, String name) throws FHIRException {
1553        switch (hash) {
1554        case 3575610:  return getType(); 
1555        case -1491817446:  return getProductNameElement();
1556        case -697920873:  return addSchedule(); 
1557        case -1285004149:  return getQuantity(); 
1558        case 301526158:  return getInstructionElement();
1559        default: return super.makeProperty(hash, name);
1560        }
1561
1562      }
1563
1564      @Override
1565      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1566        switch (hash) {
1567        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1568        case -1491817446: /*productName*/ return new String[] {"string"};
1569        case -697920873: /*schedule*/ return new String[] {"Timing"};
1570        case -1285004149: /*quantity*/ return new String[] {"SimpleQuantity"};
1571        case 301526158: /*instruction*/ return new String[] {"string"};
1572        default: return super.getTypesForProperty(hash, name);
1573        }
1574
1575      }
1576
1577      @Override
1578      public Base addChild(String name) throws FHIRException {
1579        if (name.equals("type")) {
1580          this.type = new CodeableConcept();
1581          return this.type;
1582        }
1583        else if (name.equals("productName")) {
1584          throw new FHIRException("Cannot call addChild on a singleton property NutritionOrder.productName");
1585        }
1586        else if (name.equals("schedule")) {
1587          return addSchedule();
1588        }
1589        else if (name.equals("quantity")) {
1590          this.quantity = new SimpleQuantity();
1591          return this.quantity;
1592        }
1593        else if (name.equals("instruction")) {
1594          throw new FHIRException("Cannot call addChild on a singleton property NutritionOrder.instruction");
1595        }
1596        else
1597          return super.addChild(name);
1598      }
1599
1600      public NutritionOrderSupplementComponent copy() {
1601        NutritionOrderSupplementComponent dst = new NutritionOrderSupplementComponent();
1602        copyValues(dst);
1603        dst.type = type == null ? null : type.copy();
1604        dst.productName = productName == null ? null : productName.copy();
1605        if (schedule != null) {
1606          dst.schedule = new ArrayList<Timing>();
1607          for (Timing i : schedule)
1608            dst.schedule.add(i.copy());
1609        };
1610        dst.quantity = quantity == null ? null : quantity.copy();
1611        dst.instruction = instruction == null ? null : instruction.copy();
1612        return dst;
1613      }
1614
1615      @Override
1616      public boolean equalsDeep(Base other_) {
1617        if (!super.equalsDeep(other_))
1618          return false;
1619        if (!(other_ instanceof NutritionOrderSupplementComponent))
1620          return false;
1621        NutritionOrderSupplementComponent o = (NutritionOrderSupplementComponent) other_;
1622        return compareDeep(type, o.type, true) && compareDeep(productName, o.productName, true) && compareDeep(schedule, o.schedule, true)
1623           && compareDeep(quantity, o.quantity, true) && compareDeep(instruction, o.instruction, true);
1624      }
1625
1626      @Override
1627      public boolean equalsShallow(Base other_) {
1628        if (!super.equalsShallow(other_))
1629          return false;
1630        if (!(other_ instanceof NutritionOrderSupplementComponent))
1631          return false;
1632        NutritionOrderSupplementComponent o = (NutritionOrderSupplementComponent) other_;
1633        return compareValues(productName, o.productName, true) && compareValues(instruction, o.instruction, true)
1634          ;
1635      }
1636
1637      public boolean isEmpty() {
1638        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, productName, schedule
1639          , quantity, instruction);
1640      }
1641
1642  public String fhirType() {
1643    return "NutritionOrder.supplement";
1644
1645  }
1646
1647  }
1648
1649    @Block()
1650    public static class NutritionOrderEnteralFormulaComponent extends BackboneElement implements IBaseBackboneElement {
1651        /**
1652         * The type of enteral or infant formula such as an adult standard formula with fiber or a soy-based infant formula.
1653         */
1654        @Child(name = "baseFormulaType", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
1655        @Description(shortDefinition="Type of enteral or infant formula", formalDefinition="The type of enteral or infant formula such as an adult standard formula with fiber or a soy-based infant formula." )
1656        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/entformula-type")
1657        protected CodeableConcept baseFormulaType;
1658
1659        /**
1660         * The product or brand name of the enteral or infant formula product such as "ACME Adult Standard Formula".
1661         */
1662        @Child(name = "baseFormulaProductName", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1663        @Description(shortDefinition="Product or brand name of the enteral or infant formula", formalDefinition="The product or brand name of the enteral or infant formula product such as \"ACME Adult Standard Formula\"." )
1664        protected StringType baseFormulaProductName;
1665
1666        /**
1667         * Indicates the type of modular component such as protein, carbohydrate, fat or fiber to be provided in addition to or mixed with the base formula.
1668         */
1669        @Child(name = "additiveType", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
1670        @Description(shortDefinition="Type of modular component to add to the feeding", formalDefinition="Indicates the type of modular component such as protein, carbohydrate, fat or fiber to be provided in addition to or mixed with the base formula." )
1671        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/entformula-additive")
1672        protected CodeableConcept additiveType;
1673
1674        /**
1675         * The product or brand name of the type of modular component to be added to the formula.
1676         */
1677        @Child(name = "additiveProductName", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
1678        @Description(shortDefinition="Product or brand name of the modular additive", formalDefinition="The product or brand name of the type of modular component to be added to the formula." )
1679        protected StringType additiveProductName;
1680
1681        /**
1682         * The amount of energy (calories) that the formula should provide per specified volume, typically per mL or fluid oz.  For example, an infant may require a formula that provides 24 calories per fluid ounce or an adult may require an enteral formula that provides 1.5 calorie/mL.
1683         */
1684        @Child(name = "caloricDensity", type = {SimpleQuantity.class}, order=5, min=0, max=1, modifier=false, summary=false)
1685        @Description(shortDefinition="Amount of energy per specified volume that is required", formalDefinition="The amount of energy (calories) that the formula should provide per specified volume, typically per mL or fluid oz.  For example, an infant may require a formula that provides 24 calories per fluid ounce or an adult may require an enteral formula that provides 1.5 calorie/mL." )
1686        protected SimpleQuantity caloricDensity;
1687
1688        /**
1689         * The route or physiological path of administration into the patient's gastrointestinal  tract for purposes of providing the formula feeding, e.g. nasogastric tube.
1690         */
1691        @Child(name = "routeofAdministration", type = {CodeableConcept.class}, order=6, min=0, max=1, modifier=false, summary=false)
1692        @Description(shortDefinition="How the formula should enter the patient's gastrointestinal tract", formalDefinition="The route or physiological path of administration into the patient's gastrointestinal  tract for purposes of providing the formula feeding, e.g. nasogastric tube." )
1693        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/enteral-route")
1694        protected CodeableConcept routeofAdministration;
1695
1696        /**
1697         * Formula administration instructions as structured data.  This repeating structure allows for changing the administration rate or volume over time for both bolus and continuous feeding.  An example of this would be an instruction to increase the rate of continuous feeding every 2 hours.
1698         */
1699        @Child(name = "administration", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1700        @Description(shortDefinition="Formula feeding instruction as structured data", formalDefinition="Formula administration instructions as structured data.  This repeating structure allows for changing the administration rate or volume over time for both bolus and continuous feeding.  An example of this would be an instruction to increase the rate of continuous feeding every 2 hours." )
1701        protected List<NutritionOrderEnteralFormulaAdministrationComponent> administration;
1702
1703        /**
1704         * The maximum total quantity of formula that may be administered to a subject over the period of time, e.g. 1440 mL over 24 hours.
1705         */
1706        @Child(name = "maxVolumeToDeliver", type = {SimpleQuantity.class}, order=8, min=0, max=1, modifier=false, summary=false)
1707        @Description(shortDefinition="Upper limit on formula volume per unit of time", formalDefinition="The maximum total quantity of formula that may be administered to a subject over the period of time, e.g. 1440 mL over 24 hours." )
1708        protected SimpleQuantity maxVolumeToDeliver;
1709
1710        /**
1711         * Free text formula administration, feeding instructions or additional instructions or information.
1712         */
1713        @Child(name = "administrationInstruction", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1714        @Description(shortDefinition="Formula feeding instructions expressed as text", formalDefinition="Free text formula administration, feeding instructions or additional instructions or information." )
1715        protected StringType administrationInstruction;
1716
1717        private static final long serialVersionUID = 292116061L;
1718
1719    /**
1720     * Constructor
1721     */
1722      public NutritionOrderEnteralFormulaComponent() {
1723        super();
1724      }
1725
1726        /**
1727         * @return {@link #baseFormulaType} (The type of enteral or infant formula such as an adult standard formula with fiber or a soy-based infant formula.)
1728         */
1729        public CodeableConcept getBaseFormulaType() { 
1730          if (this.baseFormulaType == null)
1731            if (Configuration.errorOnAutoCreate())
1732              throw new Error("Attempt to auto-create NutritionOrderEnteralFormulaComponent.baseFormulaType");
1733            else if (Configuration.doAutoCreate())
1734              this.baseFormulaType = new CodeableConcept(); // cc
1735          return this.baseFormulaType;
1736        }
1737
1738        public boolean hasBaseFormulaType() { 
1739          return this.baseFormulaType != null && !this.baseFormulaType.isEmpty();
1740        }
1741
1742        /**
1743         * @param value {@link #baseFormulaType} (The type of enteral or infant formula such as an adult standard formula with fiber or a soy-based infant formula.)
1744         */
1745        public NutritionOrderEnteralFormulaComponent setBaseFormulaType(CodeableConcept value)  { 
1746          this.baseFormulaType = value;
1747          return this;
1748        }
1749
1750        /**
1751         * @return {@link #baseFormulaProductName} (The product or brand name of the enteral or infant formula product such as "ACME Adult Standard Formula".). This is the underlying object with id, value and extensions. The accessor "getBaseFormulaProductName" gives direct access to the value
1752         */
1753        public StringType getBaseFormulaProductNameElement() { 
1754          if (this.baseFormulaProductName == null)
1755            if (Configuration.errorOnAutoCreate())
1756              throw new Error("Attempt to auto-create NutritionOrderEnteralFormulaComponent.baseFormulaProductName");
1757            else if (Configuration.doAutoCreate())
1758              this.baseFormulaProductName = new StringType(); // bb
1759          return this.baseFormulaProductName;
1760        }
1761
1762        public boolean hasBaseFormulaProductNameElement() { 
1763          return this.baseFormulaProductName != null && !this.baseFormulaProductName.isEmpty();
1764        }
1765
1766        public boolean hasBaseFormulaProductName() { 
1767          return this.baseFormulaProductName != null && !this.baseFormulaProductName.isEmpty();
1768        }
1769
1770        /**
1771         * @param value {@link #baseFormulaProductName} (The product or brand name of the enteral or infant formula product such as "ACME Adult Standard Formula".). This is the underlying object with id, value and extensions. The accessor "getBaseFormulaProductName" gives direct access to the value
1772         */
1773        public NutritionOrderEnteralFormulaComponent setBaseFormulaProductNameElement(StringType value) { 
1774          this.baseFormulaProductName = value;
1775          return this;
1776        }
1777
1778        /**
1779         * @return The product or brand name of the enteral or infant formula product such as "ACME Adult Standard Formula".
1780         */
1781        public String getBaseFormulaProductName() { 
1782          return this.baseFormulaProductName == null ? null : this.baseFormulaProductName.getValue();
1783        }
1784
1785        /**
1786         * @param value The product or brand name of the enteral or infant formula product such as "ACME Adult Standard Formula".
1787         */
1788        public NutritionOrderEnteralFormulaComponent setBaseFormulaProductName(String value) { 
1789          if (Utilities.noString(value))
1790            this.baseFormulaProductName = null;
1791          else {
1792            if (this.baseFormulaProductName == null)
1793              this.baseFormulaProductName = new StringType();
1794            this.baseFormulaProductName.setValue(value);
1795          }
1796          return this;
1797        }
1798
1799        /**
1800         * @return {@link #additiveType} (Indicates the type of modular component such as protein, carbohydrate, fat or fiber to be provided in addition to or mixed with the base formula.)
1801         */
1802        public CodeableConcept getAdditiveType() { 
1803          if (this.additiveType == null)
1804            if (Configuration.errorOnAutoCreate())
1805              throw new Error("Attempt to auto-create NutritionOrderEnteralFormulaComponent.additiveType");
1806            else if (Configuration.doAutoCreate())
1807              this.additiveType = new CodeableConcept(); // cc
1808          return this.additiveType;
1809        }
1810
1811        public boolean hasAdditiveType() { 
1812          return this.additiveType != null && !this.additiveType.isEmpty();
1813        }
1814
1815        /**
1816         * @param value {@link #additiveType} (Indicates the type of modular component such as protein, carbohydrate, fat or fiber to be provided in addition to or mixed with the base formula.)
1817         */
1818        public NutritionOrderEnteralFormulaComponent setAdditiveType(CodeableConcept value)  { 
1819          this.additiveType = value;
1820          return this;
1821        }
1822
1823        /**
1824         * @return {@link #additiveProductName} (The product or brand name of the type of modular component to be added to the formula.). This is the underlying object with id, value and extensions. The accessor "getAdditiveProductName" gives direct access to the value
1825         */
1826        public StringType getAdditiveProductNameElement() { 
1827          if (this.additiveProductName == null)
1828            if (Configuration.errorOnAutoCreate())
1829              throw new Error("Attempt to auto-create NutritionOrderEnteralFormulaComponent.additiveProductName");
1830            else if (Configuration.doAutoCreate())
1831              this.additiveProductName = new StringType(); // bb
1832          return this.additiveProductName;
1833        }
1834
1835        public boolean hasAdditiveProductNameElement() { 
1836          return this.additiveProductName != null && !this.additiveProductName.isEmpty();
1837        }
1838
1839        public boolean hasAdditiveProductName() { 
1840          return this.additiveProductName != null && !this.additiveProductName.isEmpty();
1841        }
1842
1843        /**
1844         * @param value {@link #additiveProductName} (The product or brand name of the type of modular component to be added to the formula.). This is the underlying object with id, value and extensions. The accessor "getAdditiveProductName" gives direct access to the value
1845         */
1846        public NutritionOrderEnteralFormulaComponent setAdditiveProductNameElement(StringType value) { 
1847          this.additiveProductName = value;
1848          return this;
1849        }
1850
1851        /**
1852         * @return The product or brand name of the type of modular component to be added to the formula.
1853         */
1854        public String getAdditiveProductName() { 
1855          return this.additiveProductName == null ? null : this.additiveProductName.getValue();
1856        }
1857
1858        /**
1859         * @param value The product or brand name of the type of modular component to be added to the formula.
1860         */
1861        public NutritionOrderEnteralFormulaComponent setAdditiveProductName(String value) { 
1862          if (Utilities.noString(value))
1863            this.additiveProductName = null;
1864          else {
1865            if (this.additiveProductName == null)
1866              this.additiveProductName = new StringType();
1867            this.additiveProductName.setValue(value);
1868          }
1869          return this;
1870        }
1871
1872        /**
1873         * @return {@link #caloricDensity} (The amount of energy (calories) that the formula should provide per specified volume, typically per mL or fluid oz.  For example, an infant may require a formula that provides 24 calories per fluid ounce or an adult may require an enteral formula that provides 1.5 calorie/mL.)
1874         */
1875        public SimpleQuantity getCaloricDensity() { 
1876          if (this.caloricDensity == null)
1877            if (Configuration.errorOnAutoCreate())
1878              throw new Error("Attempt to auto-create NutritionOrderEnteralFormulaComponent.caloricDensity");
1879            else if (Configuration.doAutoCreate())
1880              this.caloricDensity = new SimpleQuantity(); // cc
1881          return this.caloricDensity;
1882        }
1883
1884        public boolean hasCaloricDensity() { 
1885          return this.caloricDensity != null && !this.caloricDensity.isEmpty();
1886        }
1887
1888        /**
1889         * @param value {@link #caloricDensity} (The amount of energy (calories) that the formula should provide per specified volume, typically per mL or fluid oz.  For example, an infant may require a formula that provides 24 calories per fluid ounce or an adult may require an enteral formula that provides 1.5 calorie/mL.)
1890         */
1891        public NutritionOrderEnteralFormulaComponent setCaloricDensity(SimpleQuantity value)  { 
1892          this.caloricDensity = value;
1893          return this;
1894        }
1895
1896        /**
1897         * @return {@link #routeofAdministration} (The route or physiological path of administration into the patient's gastrointestinal  tract for purposes of providing the formula feeding, e.g. nasogastric tube.)
1898         */
1899        public CodeableConcept getRouteofAdministration() { 
1900          if (this.routeofAdministration == null)
1901            if (Configuration.errorOnAutoCreate())
1902              throw new Error("Attempt to auto-create NutritionOrderEnteralFormulaComponent.routeofAdministration");
1903            else if (Configuration.doAutoCreate())
1904              this.routeofAdministration = new CodeableConcept(); // cc
1905          return this.routeofAdministration;
1906        }
1907
1908        public boolean hasRouteofAdministration() { 
1909          return this.routeofAdministration != null && !this.routeofAdministration.isEmpty();
1910        }
1911
1912        /**
1913         * @param value {@link #routeofAdministration} (The route or physiological path of administration into the patient's gastrointestinal  tract for purposes of providing the formula feeding, e.g. nasogastric tube.)
1914         */
1915        public NutritionOrderEnteralFormulaComponent setRouteofAdministration(CodeableConcept value)  { 
1916          this.routeofAdministration = value;
1917          return this;
1918        }
1919
1920        /**
1921         * @return {@link #administration} (Formula administration instructions as structured data.  This repeating structure allows for changing the administration rate or volume over time for both bolus and continuous feeding.  An example of this would be an instruction to increase the rate of continuous feeding every 2 hours.)
1922         */
1923        public List<NutritionOrderEnteralFormulaAdministrationComponent> getAdministration() { 
1924          if (this.administration == null)
1925            this.administration = new ArrayList<NutritionOrderEnteralFormulaAdministrationComponent>();
1926          return this.administration;
1927        }
1928
1929        /**
1930         * @return Returns a reference to <code>this</code> for easy method chaining
1931         */
1932        public NutritionOrderEnteralFormulaComponent setAdministration(List<NutritionOrderEnteralFormulaAdministrationComponent> theAdministration) { 
1933          this.administration = theAdministration;
1934          return this;
1935        }
1936
1937        public boolean hasAdministration() { 
1938          if (this.administration == null)
1939            return false;
1940          for (NutritionOrderEnteralFormulaAdministrationComponent item : this.administration)
1941            if (!item.isEmpty())
1942              return true;
1943          return false;
1944        }
1945
1946        public NutritionOrderEnteralFormulaAdministrationComponent addAdministration() { //3
1947          NutritionOrderEnteralFormulaAdministrationComponent t = new NutritionOrderEnteralFormulaAdministrationComponent();
1948          if (this.administration == null)
1949            this.administration = new ArrayList<NutritionOrderEnteralFormulaAdministrationComponent>();
1950          this.administration.add(t);
1951          return t;
1952        }
1953
1954        public NutritionOrderEnteralFormulaComponent addAdministration(NutritionOrderEnteralFormulaAdministrationComponent t) { //3
1955          if (t == null)
1956            return this;
1957          if (this.administration == null)
1958            this.administration = new ArrayList<NutritionOrderEnteralFormulaAdministrationComponent>();
1959          this.administration.add(t);
1960          return this;
1961        }
1962
1963        /**
1964         * @return The first repetition of repeating field {@link #administration}, creating it if it does not already exist
1965         */
1966        public NutritionOrderEnteralFormulaAdministrationComponent getAdministrationFirstRep() { 
1967          if (getAdministration().isEmpty()) {
1968            addAdministration();
1969          }
1970          return getAdministration().get(0);
1971        }
1972
1973        /**
1974         * @return {@link #maxVolumeToDeliver} (The maximum total quantity of formula that may be administered to a subject over the period of time, e.g. 1440 mL over 24 hours.)
1975         */
1976        public SimpleQuantity getMaxVolumeToDeliver() { 
1977          if (this.maxVolumeToDeliver == null)
1978            if (Configuration.errorOnAutoCreate())
1979              throw new Error("Attempt to auto-create NutritionOrderEnteralFormulaComponent.maxVolumeToDeliver");
1980            else if (Configuration.doAutoCreate())
1981              this.maxVolumeToDeliver = new SimpleQuantity(); // cc
1982          return this.maxVolumeToDeliver;
1983        }
1984
1985        public boolean hasMaxVolumeToDeliver() { 
1986          return this.maxVolumeToDeliver != null && !this.maxVolumeToDeliver.isEmpty();
1987        }
1988
1989        /**
1990         * @param value {@link #maxVolumeToDeliver} (The maximum total quantity of formula that may be administered to a subject over the period of time, e.g. 1440 mL over 24 hours.)
1991         */
1992        public NutritionOrderEnteralFormulaComponent setMaxVolumeToDeliver(SimpleQuantity value)  { 
1993          this.maxVolumeToDeliver = value;
1994          return this;
1995        }
1996
1997        /**
1998         * @return {@link #administrationInstruction} (Free text formula administration, feeding instructions or additional instructions or information.). This is the underlying object with id, value and extensions. The accessor "getAdministrationInstruction" gives direct access to the value
1999         */
2000        public StringType getAdministrationInstructionElement() { 
2001          if (this.administrationInstruction == null)
2002            if (Configuration.errorOnAutoCreate())
2003              throw new Error("Attempt to auto-create NutritionOrderEnteralFormulaComponent.administrationInstruction");
2004            else if (Configuration.doAutoCreate())
2005              this.administrationInstruction = new StringType(); // bb
2006          return this.administrationInstruction;
2007        }
2008
2009        public boolean hasAdministrationInstructionElement() { 
2010          return this.administrationInstruction != null && !this.administrationInstruction.isEmpty();
2011        }
2012
2013        public boolean hasAdministrationInstruction() { 
2014          return this.administrationInstruction != null && !this.administrationInstruction.isEmpty();
2015        }
2016
2017        /**
2018         * @param value {@link #administrationInstruction} (Free text formula administration, feeding instructions or additional instructions or information.). This is the underlying object with id, value and extensions. The accessor "getAdministrationInstruction" gives direct access to the value
2019         */
2020        public NutritionOrderEnteralFormulaComponent setAdministrationInstructionElement(StringType value) { 
2021          this.administrationInstruction = value;
2022          return this;
2023        }
2024
2025        /**
2026         * @return Free text formula administration, feeding instructions or additional instructions or information.
2027         */
2028        public String getAdministrationInstruction() { 
2029          return this.administrationInstruction == null ? null : this.administrationInstruction.getValue();
2030        }
2031
2032        /**
2033         * @param value Free text formula administration, feeding instructions or additional instructions or information.
2034         */
2035        public NutritionOrderEnteralFormulaComponent setAdministrationInstruction(String value) { 
2036          if (Utilities.noString(value))
2037            this.administrationInstruction = null;
2038          else {
2039            if (this.administrationInstruction == null)
2040              this.administrationInstruction = new StringType();
2041            this.administrationInstruction.setValue(value);
2042          }
2043          return this;
2044        }
2045
2046        protected void listChildren(List<Property> children) {
2047          super.listChildren(children);
2048          children.add(new Property("baseFormulaType", "CodeableConcept", "The type of enteral or infant formula such as an adult standard formula with fiber or a soy-based infant formula.", 0, 1, baseFormulaType));
2049          children.add(new Property("baseFormulaProductName", "string", "The product or brand name of the enteral or infant formula product such as \"ACME Adult Standard Formula\".", 0, 1, baseFormulaProductName));
2050          children.add(new Property("additiveType", "CodeableConcept", "Indicates the type of modular component such as protein, carbohydrate, fat or fiber to be provided in addition to or mixed with the base formula.", 0, 1, additiveType));
2051          children.add(new Property("additiveProductName", "string", "The product or brand name of the type of modular component to be added to the formula.", 0, 1, additiveProductName));
2052          children.add(new Property("caloricDensity", "SimpleQuantity", "The amount of energy (calories) that the formula should provide per specified volume, typically per mL or fluid oz.  For example, an infant may require a formula that provides 24 calories per fluid ounce or an adult may require an enteral formula that provides 1.5 calorie/mL.", 0, 1, caloricDensity));
2053          children.add(new Property("routeofAdministration", "CodeableConcept", "The route or physiological path of administration into the patient's gastrointestinal  tract for purposes of providing the formula feeding, e.g. nasogastric tube.", 0, 1, routeofAdministration));
2054          children.add(new Property("administration", "", "Formula administration instructions as structured data.  This repeating structure allows for changing the administration rate or volume over time for both bolus and continuous feeding.  An example of this would be an instruction to increase the rate of continuous feeding every 2 hours.", 0, java.lang.Integer.MAX_VALUE, administration));
2055          children.add(new Property("maxVolumeToDeliver", "SimpleQuantity", "The maximum total quantity of formula that may be administered to a subject over the period of time, e.g. 1440 mL over 24 hours.", 0, 1, maxVolumeToDeliver));
2056          children.add(new Property("administrationInstruction", "string", "Free text formula administration, feeding instructions or additional instructions or information.", 0, 1, administrationInstruction));
2057        }
2058
2059        @Override
2060        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2061          switch (_hash) {
2062          case -138930641: /*baseFormulaType*/  return new Property("baseFormulaType", "CodeableConcept", "The type of enteral or infant formula such as an adult standard formula with fiber or a soy-based infant formula.", 0, 1, baseFormulaType);
2063          case -1267705979: /*baseFormulaProductName*/  return new Property("baseFormulaProductName", "string", "The product or brand name of the enteral or infant formula product such as \"ACME Adult Standard Formula\".", 0, 1, baseFormulaProductName);
2064          case -470746842: /*additiveType*/  return new Property("additiveType", "CodeableConcept", "Indicates the type of modular component such as protein, carbohydrate, fat or fiber to be provided in addition to or mixed with the base formula.", 0, 1, additiveType);
2065          case 488079534: /*additiveProductName*/  return new Property("additiveProductName", "string", "The product or brand name of the type of modular component to be added to the formula.", 0, 1, additiveProductName);
2066          case 186983261: /*caloricDensity*/  return new Property("caloricDensity", "SimpleQuantity", "The amount of energy (calories) that the formula should provide per specified volume, typically per mL or fluid oz.  For example, an infant may require a formula that provides 24 calories per fluid ounce or an adult may require an enteral formula that provides 1.5 calorie/mL.", 0, 1, caloricDensity);
2067          case -1710107042: /*routeofAdministration*/  return new Property("routeofAdministration", "CodeableConcept", "The route or physiological path of administration into the patient's gastrointestinal  tract for purposes of providing the formula feeding, e.g. nasogastric tube.", 0, 1, routeofAdministration);
2068          case 1255702622: /*administration*/  return new Property("administration", "", "Formula administration instructions as structured data.  This repeating structure allows for changing the administration rate or volume over time for both bolus and continuous feeding.  An example of this would be an instruction to increase the rate of continuous feeding every 2 hours.", 0, java.lang.Integer.MAX_VALUE, administration);
2069          case 2017924652: /*maxVolumeToDeliver*/  return new Property("maxVolumeToDeliver", "SimpleQuantity", "The maximum total quantity of formula that may be administered to a subject over the period of time, e.g. 1440 mL over 24 hours.", 0, 1, maxVolumeToDeliver);
2070          case 427085136: /*administrationInstruction*/  return new Property("administrationInstruction", "string", "Free text formula administration, feeding instructions or additional instructions or information.", 0, 1, administrationInstruction);
2071          default: return super.getNamedProperty(_hash, _name, _checkValid);
2072          }
2073
2074        }
2075
2076      @Override
2077      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2078        switch (hash) {
2079        case -138930641: /*baseFormulaType*/ return this.baseFormulaType == null ? new Base[0] : new Base[] {this.baseFormulaType}; // CodeableConcept
2080        case -1267705979: /*baseFormulaProductName*/ return this.baseFormulaProductName == null ? new Base[0] : new Base[] {this.baseFormulaProductName}; // StringType
2081        case -470746842: /*additiveType*/ return this.additiveType == null ? new Base[0] : new Base[] {this.additiveType}; // CodeableConcept
2082        case 488079534: /*additiveProductName*/ return this.additiveProductName == null ? new Base[0] : new Base[] {this.additiveProductName}; // StringType
2083        case 186983261: /*caloricDensity*/ return this.caloricDensity == null ? new Base[0] : new Base[] {this.caloricDensity}; // SimpleQuantity
2084        case -1710107042: /*routeofAdministration*/ return this.routeofAdministration == null ? new Base[0] : new Base[] {this.routeofAdministration}; // CodeableConcept
2085        case 1255702622: /*administration*/ return this.administration == null ? new Base[0] : this.administration.toArray(new Base[this.administration.size()]); // NutritionOrderEnteralFormulaAdministrationComponent
2086        case 2017924652: /*maxVolumeToDeliver*/ return this.maxVolumeToDeliver == null ? new Base[0] : new Base[] {this.maxVolumeToDeliver}; // SimpleQuantity
2087        case 427085136: /*administrationInstruction*/ return this.administrationInstruction == null ? new Base[0] : new Base[] {this.administrationInstruction}; // StringType
2088        default: return super.getProperty(hash, name, checkValid);
2089        }
2090
2091      }
2092
2093      @Override
2094      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2095        switch (hash) {
2096        case -138930641: // baseFormulaType
2097          this.baseFormulaType = castToCodeableConcept(value); // CodeableConcept
2098          return value;
2099        case -1267705979: // baseFormulaProductName
2100          this.baseFormulaProductName = castToString(value); // StringType
2101          return value;
2102        case -470746842: // additiveType
2103          this.additiveType = castToCodeableConcept(value); // CodeableConcept
2104          return value;
2105        case 488079534: // additiveProductName
2106          this.additiveProductName = castToString(value); // StringType
2107          return value;
2108        case 186983261: // caloricDensity
2109          this.caloricDensity = castToSimpleQuantity(value); // SimpleQuantity
2110          return value;
2111        case -1710107042: // routeofAdministration
2112          this.routeofAdministration = castToCodeableConcept(value); // CodeableConcept
2113          return value;
2114        case 1255702622: // administration
2115          this.getAdministration().add((NutritionOrderEnteralFormulaAdministrationComponent) value); // NutritionOrderEnteralFormulaAdministrationComponent
2116          return value;
2117        case 2017924652: // maxVolumeToDeliver
2118          this.maxVolumeToDeliver = castToSimpleQuantity(value); // SimpleQuantity
2119          return value;
2120        case 427085136: // administrationInstruction
2121          this.administrationInstruction = castToString(value); // StringType
2122          return value;
2123        default: return super.setProperty(hash, name, value);
2124        }
2125
2126      }
2127
2128      @Override
2129      public Base setProperty(String name, Base value) throws FHIRException {
2130        if (name.equals("baseFormulaType")) {
2131          this.baseFormulaType = castToCodeableConcept(value); // CodeableConcept
2132        } else if (name.equals("baseFormulaProductName")) {
2133          this.baseFormulaProductName = castToString(value); // StringType
2134        } else if (name.equals("additiveType")) {
2135          this.additiveType = castToCodeableConcept(value); // CodeableConcept
2136        } else if (name.equals("additiveProductName")) {
2137          this.additiveProductName = castToString(value); // StringType
2138        } else if (name.equals("caloricDensity")) {
2139          this.caloricDensity = castToSimpleQuantity(value); // SimpleQuantity
2140        } else if (name.equals("routeofAdministration")) {
2141          this.routeofAdministration = castToCodeableConcept(value); // CodeableConcept
2142        } else if (name.equals("administration")) {
2143          this.getAdministration().add((NutritionOrderEnteralFormulaAdministrationComponent) value);
2144        } else if (name.equals("maxVolumeToDeliver")) {
2145          this.maxVolumeToDeliver = castToSimpleQuantity(value); // SimpleQuantity
2146        } else if (name.equals("administrationInstruction")) {
2147          this.administrationInstruction = castToString(value); // StringType
2148        } else
2149          return super.setProperty(name, value);
2150        return value;
2151      }
2152
2153      @Override
2154      public Base makeProperty(int hash, String name) throws FHIRException {
2155        switch (hash) {
2156        case -138930641:  return getBaseFormulaType(); 
2157        case -1267705979:  return getBaseFormulaProductNameElement();
2158        case -470746842:  return getAdditiveType(); 
2159        case 488079534:  return getAdditiveProductNameElement();
2160        case 186983261:  return getCaloricDensity(); 
2161        case -1710107042:  return getRouteofAdministration(); 
2162        case 1255702622:  return addAdministration(); 
2163        case 2017924652:  return getMaxVolumeToDeliver(); 
2164        case 427085136:  return getAdministrationInstructionElement();
2165        default: return super.makeProperty(hash, name);
2166        }
2167
2168      }
2169
2170      @Override
2171      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2172        switch (hash) {
2173        case -138930641: /*baseFormulaType*/ return new String[] {"CodeableConcept"};
2174        case -1267705979: /*baseFormulaProductName*/ return new String[] {"string"};
2175        case -470746842: /*additiveType*/ return new String[] {"CodeableConcept"};
2176        case 488079534: /*additiveProductName*/ return new String[] {"string"};
2177        case 186983261: /*caloricDensity*/ return new String[] {"SimpleQuantity"};
2178        case -1710107042: /*routeofAdministration*/ return new String[] {"CodeableConcept"};
2179        case 1255702622: /*administration*/ return new String[] {};
2180        case 2017924652: /*maxVolumeToDeliver*/ return new String[] {"SimpleQuantity"};
2181        case 427085136: /*administrationInstruction*/ return new String[] {"string"};
2182        default: return super.getTypesForProperty(hash, name);
2183        }
2184
2185      }
2186
2187      @Override
2188      public Base addChild(String name) throws FHIRException {
2189        if (name.equals("baseFormulaType")) {
2190          this.baseFormulaType = new CodeableConcept();
2191          return this.baseFormulaType;
2192        }
2193        else if (name.equals("baseFormulaProductName")) {
2194          throw new FHIRException("Cannot call addChild on a singleton property NutritionOrder.baseFormulaProductName");
2195        }
2196        else if (name.equals("additiveType")) {
2197          this.additiveType = new CodeableConcept();
2198          return this.additiveType;
2199        }
2200        else if (name.equals("additiveProductName")) {
2201          throw new FHIRException("Cannot call addChild on a singleton property NutritionOrder.additiveProductName");
2202        }
2203        else if (name.equals("caloricDensity")) {
2204          this.caloricDensity = new SimpleQuantity();
2205          return this.caloricDensity;
2206        }
2207        else if (name.equals("routeofAdministration")) {
2208          this.routeofAdministration = new CodeableConcept();
2209          return this.routeofAdministration;
2210        }
2211        else if (name.equals("administration")) {
2212          return addAdministration();
2213        }
2214        else if (name.equals("maxVolumeToDeliver")) {
2215          this.maxVolumeToDeliver = new SimpleQuantity();
2216          return this.maxVolumeToDeliver;
2217        }
2218        else if (name.equals("administrationInstruction")) {
2219          throw new FHIRException("Cannot call addChild on a singleton property NutritionOrder.administrationInstruction");
2220        }
2221        else
2222          return super.addChild(name);
2223      }
2224
2225      public NutritionOrderEnteralFormulaComponent copy() {
2226        NutritionOrderEnteralFormulaComponent dst = new NutritionOrderEnteralFormulaComponent();
2227        copyValues(dst);
2228        dst.baseFormulaType = baseFormulaType == null ? null : baseFormulaType.copy();
2229        dst.baseFormulaProductName = baseFormulaProductName == null ? null : baseFormulaProductName.copy();
2230        dst.additiveType = additiveType == null ? null : additiveType.copy();
2231        dst.additiveProductName = additiveProductName == null ? null : additiveProductName.copy();
2232        dst.caloricDensity = caloricDensity == null ? null : caloricDensity.copy();
2233        dst.routeofAdministration = routeofAdministration == null ? null : routeofAdministration.copy();
2234        if (administration != null) {
2235          dst.administration = new ArrayList<NutritionOrderEnteralFormulaAdministrationComponent>();
2236          for (NutritionOrderEnteralFormulaAdministrationComponent i : administration)
2237            dst.administration.add(i.copy());
2238        };
2239        dst.maxVolumeToDeliver = maxVolumeToDeliver == null ? null : maxVolumeToDeliver.copy();
2240        dst.administrationInstruction = administrationInstruction == null ? null : administrationInstruction.copy();
2241        return dst;
2242      }
2243
2244      @Override
2245      public boolean equalsDeep(Base other_) {
2246        if (!super.equalsDeep(other_))
2247          return false;
2248        if (!(other_ instanceof NutritionOrderEnteralFormulaComponent))
2249          return false;
2250        NutritionOrderEnteralFormulaComponent o = (NutritionOrderEnteralFormulaComponent) other_;
2251        return compareDeep(baseFormulaType, o.baseFormulaType, true) && compareDeep(baseFormulaProductName, o.baseFormulaProductName, true)
2252           && compareDeep(additiveType, o.additiveType, true) && compareDeep(additiveProductName, o.additiveProductName, true)
2253           && compareDeep(caloricDensity, o.caloricDensity, true) && compareDeep(routeofAdministration, o.routeofAdministration, true)
2254           && compareDeep(administration, o.administration, true) && compareDeep(maxVolumeToDeliver, o.maxVolumeToDeliver, true)
2255           && compareDeep(administrationInstruction, o.administrationInstruction, true);
2256      }
2257
2258      @Override
2259      public boolean equalsShallow(Base other_) {
2260        if (!super.equalsShallow(other_))
2261          return false;
2262        if (!(other_ instanceof NutritionOrderEnteralFormulaComponent))
2263          return false;
2264        NutritionOrderEnteralFormulaComponent o = (NutritionOrderEnteralFormulaComponent) other_;
2265        return compareValues(baseFormulaProductName, o.baseFormulaProductName, true) && compareValues(additiveProductName, o.additiveProductName, true)
2266           && compareValues(administrationInstruction, o.administrationInstruction, true);
2267      }
2268
2269      public boolean isEmpty() {
2270        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(baseFormulaType, baseFormulaProductName
2271          , additiveType, additiveProductName, caloricDensity, routeofAdministration, administration
2272          , maxVolumeToDeliver, administrationInstruction);
2273      }
2274
2275  public String fhirType() {
2276    return "NutritionOrder.enteralFormula";
2277
2278  }
2279
2280  }
2281
2282    @Block()
2283    public static class NutritionOrderEnteralFormulaAdministrationComponent extends BackboneElement implements IBaseBackboneElement {
2284        /**
2285         * The time period and frequency at which the enteral formula should be delivered to the patient.
2286         */
2287        @Child(name = "schedule", type = {Timing.class}, order=1, min=0, max=1, modifier=false, summary=false)
2288        @Description(shortDefinition="Scheduled frequency of enteral feeding", formalDefinition="The time period and frequency at which the enteral formula should be delivered to the patient." )
2289        protected Timing schedule;
2290
2291        /**
2292         * The volume of formula to provide to the patient per the specified administration schedule.
2293         */
2294        @Child(name = "quantity", type = {SimpleQuantity.class}, order=2, min=0, max=1, modifier=false, summary=false)
2295        @Description(shortDefinition="The volume of formula to provide", formalDefinition="The volume of formula to provide to the patient per the specified administration schedule." )
2296        protected SimpleQuantity quantity;
2297
2298        /**
2299         * The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.
2300         */
2301        @Child(name = "rate", type = {SimpleQuantity.class, Ratio.class}, order=3, min=0, max=1, modifier=false, summary=false)
2302        @Description(shortDefinition="Speed with which the formula is provided per period of time", formalDefinition="The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule." )
2303        protected Type rate;
2304
2305        private static final long serialVersionUID = 1895031997L;
2306
2307    /**
2308     * Constructor
2309     */
2310      public NutritionOrderEnteralFormulaAdministrationComponent() {
2311        super();
2312      }
2313
2314        /**
2315         * @return {@link #schedule} (The time period and frequency at which the enteral formula should be delivered to the patient.)
2316         */
2317        public Timing getSchedule() { 
2318          if (this.schedule == null)
2319            if (Configuration.errorOnAutoCreate())
2320              throw new Error("Attempt to auto-create NutritionOrderEnteralFormulaAdministrationComponent.schedule");
2321            else if (Configuration.doAutoCreate())
2322              this.schedule = new Timing(); // cc
2323          return this.schedule;
2324        }
2325
2326        public boolean hasSchedule() { 
2327          return this.schedule != null && !this.schedule.isEmpty();
2328        }
2329
2330        /**
2331         * @param value {@link #schedule} (The time period and frequency at which the enteral formula should be delivered to the patient.)
2332         */
2333        public NutritionOrderEnteralFormulaAdministrationComponent setSchedule(Timing value)  { 
2334          this.schedule = value;
2335          return this;
2336        }
2337
2338        /**
2339         * @return {@link #quantity} (The volume of formula to provide to the patient per the specified administration schedule.)
2340         */
2341        public SimpleQuantity getQuantity() { 
2342          if (this.quantity == null)
2343            if (Configuration.errorOnAutoCreate())
2344              throw new Error("Attempt to auto-create NutritionOrderEnteralFormulaAdministrationComponent.quantity");
2345            else if (Configuration.doAutoCreate())
2346              this.quantity = new SimpleQuantity(); // cc
2347          return this.quantity;
2348        }
2349
2350        public boolean hasQuantity() { 
2351          return this.quantity != null && !this.quantity.isEmpty();
2352        }
2353
2354        /**
2355         * @param value {@link #quantity} (The volume of formula to provide to the patient per the specified administration schedule.)
2356         */
2357        public NutritionOrderEnteralFormulaAdministrationComponent setQuantity(SimpleQuantity value)  { 
2358          this.quantity = value;
2359          return this;
2360        }
2361
2362        /**
2363         * @return {@link #rate} (The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.)
2364         */
2365        public Type getRate() { 
2366          return this.rate;
2367        }
2368
2369        /**
2370         * @return {@link #rate} (The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.)
2371         */
2372        public SimpleQuantity getRateSimpleQuantity() throws FHIRException { 
2373          if (this.rate == null)
2374            return null;
2375          if (!(this.rate instanceof SimpleQuantity))
2376            throw new FHIRException("Type mismatch: the type SimpleQuantity was expected, but "+this.rate.getClass().getName()+" was encountered");
2377          return (SimpleQuantity) this.rate;
2378        }
2379
2380        public boolean hasRateSimpleQuantity() { 
2381          return this != null && this.rate instanceof SimpleQuantity;
2382        }
2383
2384        /**
2385         * @return {@link #rate} (The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.)
2386         */
2387        public Ratio getRateRatio() throws FHIRException { 
2388          if (this.rate == null)
2389            return null;
2390          if (!(this.rate instanceof Ratio))
2391            throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.rate.getClass().getName()+" was encountered");
2392          return (Ratio) this.rate;
2393        }
2394
2395        public boolean hasRateRatio() { 
2396          return this != null && this.rate instanceof Ratio;
2397        }
2398
2399        public boolean hasRate() { 
2400          return this.rate != null && !this.rate.isEmpty();
2401        }
2402
2403        /**
2404         * @param value {@link #rate} (The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.)
2405         */
2406        public NutritionOrderEnteralFormulaAdministrationComponent setRate(Type value) throws FHIRFormatError { 
2407          if (value != null && !(value instanceof Quantity || value instanceof Ratio))
2408            throw new FHIRFormatError("Not the right type for NutritionOrder.enteralFormula.administration.rate[x]: "+value.fhirType());
2409          this.rate = value;
2410          return this;
2411        }
2412
2413        protected void listChildren(List<Property> children) {
2414          super.listChildren(children);
2415          children.add(new Property("schedule", "Timing", "The time period and frequency at which the enteral formula should be delivered to the patient.", 0, 1, schedule));
2416          children.add(new Property("quantity", "SimpleQuantity", "The volume of formula to provide to the patient per the specified administration schedule.", 0, 1, quantity));
2417          children.add(new Property("rate[x]", "SimpleQuantity|Ratio", "The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.", 0, 1, rate));
2418        }
2419
2420        @Override
2421        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2422          switch (_hash) {
2423          case -697920873: /*schedule*/  return new Property("schedule", "Timing", "The time period and frequency at which the enteral formula should be delivered to the patient.", 0, 1, schedule);
2424          case -1285004149: /*quantity*/  return new Property("quantity", "SimpleQuantity", "The volume of formula to provide to the patient per the specified administration schedule.", 0, 1, quantity);
2425          case 983460768: /*rate[x]*/  return new Property("rate[x]", "SimpleQuantity|Ratio", "The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.", 0, 1, rate);
2426          case 3493088: /*rate*/  return new Property("rate[x]", "SimpleQuantity|Ratio", "The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.", 0, 1, rate);
2427          case -2121057955: /*rateSimpleQuantity*/  return new Property("rate[x]", "SimpleQuantity|Ratio", "The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.", 0, 1, rate);
2428          case 204021515: /*rateRatio*/  return new Property("rate[x]", "SimpleQuantity|Ratio", "The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.", 0, 1, rate);
2429          default: return super.getNamedProperty(_hash, _name, _checkValid);
2430          }
2431
2432        }
2433
2434      @Override
2435      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2436        switch (hash) {
2437        case -697920873: /*schedule*/ return this.schedule == null ? new Base[0] : new Base[] {this.schedule}; // Timing
2438        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // SimpleQuantity
2439        case 3493088: /*rate*/ return this.rate == null ? new Base[0] : new Base[] {this.rate}; // Type
2440        default: return super.getProperty(hash, name, checkValid);
2441        }
2442
2443      }
2444
2445      @Override
2446      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2447        switch (hash) {
2448        case -697920873: // schedule
2449          this.schedule = castToTiming(value); // Timing
2450          return value;
2451        case -1285004149: // quantity
2452          this.quantity = castToSimpleQuantity(value); // SimpleQuantity
2453          return value;
2454        case 3493088: // rate
2455          this.rate = castToType(value); // Type
2456          return value;
2457        default: return super.setProperty(hash, name, value);
2458        }
2459
2460      }
2461
2462      @Override
2463      public Base setProperty(String name, Base value) throws FHIRException {
2464        if (name.equals("schedule")) {
2465          this.schedule = castToTiming(value); // Timing
2466        } else if (name.equals("quantity")) {
2467          this.quantity = castToSimpleQuantity(value); // SimpleQuantity
2468        } else if (name.equals("rate[x]")) {
2469          this.rate = castToType(value); // Type
2470        } else
2471          return super.setProperty(name, value);
2472        return value;
2473      }
2474
2475      @Override
2476      public Base makeProperty(int hash, String name) throws FHIRException {
2477        switch (hash) {
2478        case -697920873:  return getSchedule(); 
2479        case -1285004149:  return getQuantity(); 
2480        case 983460768:  return getRate(); 
2481        case 3493088:  return getRate(); 
2482        default: return super.makeProperty(hash, name);
2483        }
2484
2485      }
2486
2487      @Override
2488      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2489        switch (hash) {
2490        case -697920873: /*schedule*/ return new String[] {"Timing"};
2491        case -1285004149: /*quantity*/ return new String[] {"SimpleQuantity"};
2492        case 3493088: /*rate*/ return new String[] {"SimpleQuantity", "Ratio"};
2493        default: return super.getTypesForProperty(hash, name);
2494        }
2495
2496      }
2497
2498      @Override
2499      public Base addChild(String name) throws FHIRException {
2500        if (name.equals("schedule")) {
2501          this.schedule = new Timing();
2502          return this.schedule;
2503        }
2504        else if (name.equals("quantity")) {
2505          this.quantity = new SimpleQuantity();
2506          return this.quantity;
2507        }
2508        else if (name.equals("rateSimpleQuantity")) {
2509          this.rate = new SimpleQuantity();
2510          return this.rate;
2511        }
2512        else if (name.equals("rateRatio")) {
2513          this.rate = new Ratio();
2514          return this.rate;
2515        }
2516        else
2517          return super.addChild(name);
2518      }
2519
2520      public NutritionOrderEnteralFormulaAdministrationComponent copy() {
2521        NutritionOrderEnteralFormulaAdministrationComponent dst = new NutritionOrderEnteralFormulaAdministrationComponent();
2522        copyValues(dst);
2523        dst.schedule = schedule == null ? null : schedule.copy();
2524        dst.quantity = quantity == null ? null : quantity.copy();
2525        dst.rate = rate == null ? null : rate.copy();
2526        return dst;
2527      }
2528
2529      @Override
2530      public boolean equalsDeep(Base other_) {
2531        if (!super.equalsDeep(other_))
2532          return false;
2533        if (!(other_ instanceof NutritionOrderEnteralFormulaAdministrationComponent))
2534          return false;
2535        NutritionOrderEnteralFormulaAdministrationComponent o = (NutritionOrderEnteralFormulaAdministrationComponent) other_;
2536        return compareDeep(schedule, o.schedule, true) && compareDeep(quantity, o.quantity, true) && compareDeep(rate, o.rate, true)
2537          ;
2538      }
2539
2540      @Override
2541      public boolean equalsShallow(Base other_) {
2542        if (!super.equalsShallow(other_))
2543          return false;
2544        if (!(other_ instanceof NutritionOrderEnteralFormulaAdministrationComponent))
2545          return false;
2546        NutritionOrderEnteralFormulaAdministrationComponent o = (NutritionOrderEnteralFormulaAdministrationComponent) other_;
2547        return true;
2548      }
2549
2550      public boolean isEmpty() {
2551        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(schedule, quantity, rate
2552          );
2553      }
2554
2555  public String fhirType() {
2556    return "NutritionOrder.enteralFormula.administration";
2557
2558  }
2559
2560  }
2561
2562    /**
2563     * Identifiers assigned to this order by the order sender or by the order receiver.
2564     */
2565    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2566    @Description(shortDefinition="Identifiers assigned to this order", formalDefinition="Identifiers assigned to this order by the order sender or by the order receiver." )
2567    protected List<Identifier> identifier;
2568
2569    /**
2570     * The workflow status of the nutrition order/request.
2571     */
2572    @Child(name = "status", type = {CodeType.class}, order=1, min=0, max=1, modifier=true, summary=true)
2573    @Description(shortDefinition="proposed | draft | planned | requested | active | on-hold | completed | cancelled | entered-in-error", formalDefinition="The workflow status of the nutrition order/request." )
2574    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/nutrition-request-status")
2575    protected Enumeration<NutritionOrderStatus> status;
2576
2577    /**
2578     * The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.
2579     */
2580    @Child(name = "patient", type = {Patient.class}, order=2, min=1, max=1, modifier=false, summary=true)
2581    @Description(shortDefinition="The person who requires the diet, formula or nutritional supplement", formalDefinition="The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding." )
2582    protected Reference patient;
2583
2584    /**
2585     * The actual object that is the target of the reference (The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.)
2586     */
2587    protected Patient patientTarget;
2588
2589    /**
2590     * An encounter that provides additional information about the healthcare context in which this request is made.
2591     */
2592    @Child(name = "encounter", type = {Encounter.class}, order=3, min=0, max=1, modifier=false, summary=false)
2593    @Description(shortDefinition="The encounter associated with this nutrition order", formalDefinition="An encounter that provides additional information about the healthcare context in which this request is made." )
2594    protected Reference encounter;
2595
2596    /**
2597     * The actual object that is the target of the reference (An encounter that provides additional information about the healthcare context in which this request is made.)
2598     */
2599    protected Encounter encounterTarget;
2600
2601    /**
2602     * The date and time that this nutrition order was requested.
2603     */
2604    @Child(name = "dateTime", type = {DateTimeType.class}, order=4, min=1, max=1, modifier=false, summary=true)
2605    @Description(shortDefinition="Date and time the nutrition order was requested", formalDefinition="The date and time that this nutrition order was requested." )
2606    protected DateTimeType dateTime;
2607
2608    /**
2609     * The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.
2610     */
2611    @Child(name = "orderer", type = {Practitioner.class}, order=5, min=0, max=1, modifier=false, summary=true)
2612    @Description(shortDefinition="Who ordered the diet, formula or nutritional supplement", formalDefinition="The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings." )
2613    protected Reference orderer;
2614
2615    /**
2616     * The actual object that is the target of the reference (The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.)
2617     */
2618    protected Practitioner ordererTarget;
2619
2620    /**
2621     * A link to a record of allergies or intolerances  which should be included in the nutrition order.
2622     */
2623    @Child(name = "allergyIntolerance", type = {AllergyIntolerance.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2624    @Description(shortDefinition="List of the patient's food and nutrition-related allergies and intolerances", formalDefinition="A link to a record of allergies or intolerances  which should be included in the nutrition order." )
2625    protected List<Reference> allergyIntolerance;
2626    /**
2627     * The actual objects that are the target of the reference (A link to a record of allergies or intolerances  which should be included in the nutrition order.)
2628     */
2629    protected List<AllergyIntolerance> allergyIntoleranceTarget;
2630
2631
2632    /**
2633     * This modifier is used to convey order-specific modifiers about the type of food that should be given. These can be derived from patient allergies, intolerances, or preferences such as Halal, Vegan or Kosher. This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.
2634     */
2635    @Child(name = "foodPreferenceModifier", type = {CodeableConcept.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2636    @Description(shortDefinition="Order-specific modifier about the type of food that should be given", formalDefinition="This modifier is used to convey order-specific modifiers about the type of food that should be given. These can be derived from patient allergies, intolerances, or preferences such as Halal, Vegan or Kosher. This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings." )
2637    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/encounter-diet")
2638    protected List<CodeableConcept> foodPreferenceModifier;
2639
2640    /**
2641     * This modifier is used to convey order-specific modifiers about the type of food that should NOT be given. These can be derived from patient allergies, intolerances, or preferences such as No Red Meat, No Soy or No Wheat or  Gluten-Free.  While it should not be necessary to repeat allergy or intolerance information captured in the referenced AllergyIntolerance resource in the excludeFoodModifier, this element may be used to convey additional specificity related to foods that should be eliminated from the patient?s diet for any reason.  This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.
2642     */
2643    @Child(name = "excludeFoodModifier", type = {CodeableConcept.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2644    @Description(shortDefinition="Order-specific modifier about the type of food that should not be given", formalDefinition="This modifier is used to convey order-specific modifiers about the type of food that should NOT be given. These can be derived from patient allergies, intolerances, or preferences such as No Red Meat, No Soy or No Wheat or  Gluten-Free.  While it should not be necessary to repeat allergy or intolerance information captured in the referenced AllergyIntolerance resource in the excludeFoodModifier, this element may be used to convey additional specificity related to foods that should be eliminated from the patient?s diet for any reason.  This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings." )
2645    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/food-type")
2646    protected List<CodeableConcept> excludeFoodModifier;
2647
2648    /**
2649     * Diet given orally in contrast to enteral (tube) feeding.
2650     */
2651    @Child(name = "oralDiet", type = {}, order=9, min=0, max=1, modifier=false, summary=false)
2652    @Description(shortDefinition="Oral diet components", formalDefinition="Diet given orally in contrast to enteral (tube) feeding." )
2653    protected NutritionOrderOralDietComponent oralDiet;
2654
2655    /**
2656     * Oral nutritional products given in order to add further nutritional value to the patient's diet.
2657     */
2658    @Child(name = "supplement", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2659    @Description(shortDefinition="Supplement components", formalDefinition="Oral nutritional products given in order to add further nutritional value to the patient's diet." )
2660    protected List<NutritionOrderSupplementComponent> supplement;
2661
2662    /**
2663     * Feeding provided through the gastrointestinal tract via a tube, catheter, or stoma that delivers nutrition distal to the oral cavity.
2664     */
2665    @Child(name = "enteralFormula", type = {}, order=11, min=0, max=1, modifier=false, summary=false)
2666    @Description(shortDefinition="Enteral formula components", formalDefinition="Feeding provided through the gastrointestinal tract via a tube, catheter, or stoma that delivers nutrition distal to the oral cavity." )
2667    protected NutritionOrderEnteralFormulaComponent enteralFormula;
2668
2669    private static final long serialVersionUID = 1429947433L;
2670
2671  /**
2672   * Constructor
2673   */
2674    public NutritionOrder() {
2675      super();
2676    }
2677
2678  /**
2679   * Constructor
2680   */
2681    public NutritionOrder(Reference patient, DateTimeType dateTime) {
2682      super();
2683      this.patient = patient;
2684      this.dateTime = dateTime;
2685    }
2686
2687    /**
2688     * @return {@link #identifier} (Identifiers assigned to this order by the order sender or by the order receiver.)
2689     */
2690    public List<Identifier> getIdentifier() { 
2691      if (this.identifier == null)
2692        this.identifier = new ArrayList<Identifier>();
2693      return this.identifier;
2694    }
2695
2696    /**
2697     * @return Returns a reference to <code>this</code> for easy method chaining
2698     */
2699    public NutritionOrder setIdentifier(List<Identifier> theIdentifier) { 
2700      this.identifier = theIdentifier;
2701      return this;
2702    }
2703
2704    public boolean hasIdentifier() { 
2705      if (this.identifier == null)
2706        return false;
2707      for (Identifier item : this.identifier)
2708        if (!item.isEmpty())
2709          return true;
2710      return false;
2711    }
2712
2713    public Identifier addIdentifier() { //3
2714      Identifier t = new Identifier();
2715      if (this.identifier == null)
2716        this.identifier = new ArrayList<Identifier>();
2717      this.identifier.add(t);
2718      return t;
2719    }
2720
2721    public NutritionOrder addIdentifier(Identifier t) { //3
2722      if (t == null)
2723        return this;
2724      if (this.identifier == null)
2725        this.identifier = new ArrayList<Identifier>();
2726      this.identifier.add(t);
2727      return this;
2728    }
2729
2730    /**
2731     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
2732     */
2733    public Identifier getIdentifierFirstRep() { 
2734      if (getIdentifier().isEmpty()) {
2735        addIdentifier();
2736      }
2737      return getIdentifier().get(0);
2738    }
2739
2740    /**
2741     * @return {@link #status} (The workflow status of the nutrition order/request.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2742     */
2743    public Enumeration<NutritionOrderStatus> getStatusElement() { 
2744      if (this.status == null)
2745        if (Configuration.errorOnAutoCreate())
2746          throw new Error("Attempt to auto-create NutritionOrder.status");
2747        else if (Configuration.doAutoCreate())
2748          this.status = new Enumeration<NutritionOrderStatus>(new NutritionOrderStatusEnumFactory()); // bb
2749      return this.status;
2750    }
2751
2752    public boolean hasStatusElement() { 
2753      return this.status != null && !this.status.isEmpty();
2754    }
2755
2756    public boolean hasStatus() { 
2757      return this.status != null && !this.status.isEmpty();
2758    }
2759
2760    /**
2761     * @param value {@link #status} (The workflow status of the nutrition order/request.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2762     */
2763    public NutritionOrder setStatusElement(Enumeration<NutritionOrderStatus> value) { 
2764      this.status = value;
2765      return this;
2766    }
2767
2768    /**
2769     * @return The workflow status of the nutrition order/request.
2770     */
2771    public NutritionOrderStatus getStatus() { 
2772      return this.status == null ? null : this.status.getValue();
2773    }
2774
2775    /**
2776     * @param value The workflow status of the nutrition order/request.
2777     */
2778    public NutritionOrder setStatus(NutritionOrderStatus value) { 
2779      if (value == null)
2780        this.status = null;
2781      else {
2782        if (this.status == null)
2783          this.status = new Enumeration<NutritionOrderStatus>(new NutritionOrderStatusEnumFactory());
2784        this.status.setValue(value);
2785      }
2786      return this;
2787    }
2788
2789    /**
2790     * @return {@link #patient} (The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.)
2791     */
2792    public Reference getPatient() { 
2793      if (this.patient == null)
2794        if (Configuration.errorOnAutoCreate())
2795          throw new Error("Attempt to auto-create NutritionOrder.patient");
2796        else if (Configuration.doAutoCreate())
2797          this.patient = new Reference(); // cc
2798      return this.patient;
2799    }
2800
2801    public boolean hasPatient() { 
2802      return this.patient != null && !this.patient.isEmpty();
2803    }
2804
2805    /**
2806     * @param value {@link #patient} (The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.)
2807     */
2808    public NutritionOrder setPatient(Reference value)  { 
2809      this.patient = value;
2810      return this;
2811    }
2812
2813    /**
2814     * @return {@link #patient} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.)
2815     */
2816    public Patient getPatientTarget() { 
2817      if (this.patientTarget == null)
2818        if (Configuration.errorOnAutoCreate())
2819          throw new Error("Attempt to auto-create NutritionOrder.patient");
2820        else if (Configuration.doAutoCreate())
2821          this.patientTarget = new Patient(); // aa
2822      return this.patientTarget;
2823    }
2824
2825    /**
2826     * @param value {@link #patient} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.)
2827     */
2828    public NutritionOrder setPatientTarget(Patient value) { 
2829      this.patientTarget = value;
2830      return this;
2831    }
2832
2833    /**
2834     * @return {@link #encounter} (An encounter that provides additional information about the healthcare context in which this request is made.)
2835     */
2836    public Reference getEncounter() { 
2837      if (this.encounter == null)
2838        if (Configuration.errorOnAutoCreate())
2839          throw new Error("Attempt to auto-create NutritionOrder.encounter");
2840        else if (Configuration.doAutoCreate())
2841          this.encounter = new Reference(); // cc
2842      return this.encounter;
2843    }
2844
2845    public boolean hasEncounter() { 
2846      return this.encounter != null && !this.encounter.isEmpty();
2847    }
2848
2849    /**
2850     * @param value {@link #encounter} (An encounter that provides additional information about the healthcare context in which this request is made.)
2851     */
2852    public NutritionOrder setEncounter(Reference value)  { 
2853      this.encounter = value;
2854      return this;
2855    }
2856
2857    /**
2858     * @return {@link #encounter} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (An encounter that provides additional information about the healthcare context in which this request is made.)
2859     */
2860    public Encounter getEncounterTarget() { 
2861      if (this.encounterTarget == null)
2862        if (Configuration.errorOnAutoCreate())
2863          throw new Error("Attempt to auto-create NutritionOrder.encounter");
2864        else if (Configuration.doAutoCreate())
2865          this.encounterTarget = new Encounter(); // aa
2866      return this.encounterTarget;
2867    }
2868
2869    /**
2870     * @param value {@link #encounter} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (An encounter that provides additional information about the healthcare context in which this request is made.)
2871     */
2872    public NutritionOrder setEncounterTarget(Encounter value) { 
2873      this.encounterTarget = value;
2874      return this;
2875    }
2876
2877    /**
2878     * @return {@link #dateTime} (The date and time that this nutrition order was requested.). This is the underlying object with id, value and extensions. The accessor "getDateTime" gives direct access to the value
2879     */
2880    public DateTimeType getDateTimeElement() { 
2881      if (this.dateTime == null)
2882        if (Configuration.errorOnAutoCreate())
2883          throw new Error("Attempt to auto-create NutritionOrder.dateTime");
2884        else if (Configuration.doAutoCreate())
2885          this.dateTime = new DateTimeType(); // bb
2886      return this.dateTime;
2887    }
2888
2889    public boolean hasDateTimeElement() { 
2890      return this.dateTime != null && !this.dateTime.isEmpty();
2891    }
2892
2893    public boolean hasDateTime() { 
2894      return this.dateTime != null && !this.dateTime.isEmpty();
2895    }
2896
2897    /**
2898     * @param value {@link #dateTime} (The date and time that this nutrition order was requested.). This is the underlying object with id, value and extensions. The accessor "getDateTime" gives direct access to the value
2899     */
2900    public NutritionOrder setDateTimeElement(DateTimeType value) { 
2901      this.dateTime = value;
2902      return this;
2903    }
2904
2905    /**
2906     * @return The date and time that this nutrition order was requested.
2907     */
2908    public Date getDateTime() { 
2909      return this.dateTime == null ? null : this.dateTime.getValue();
2910    }
2911
2912    /**
2913     * @param value The date and time that this nutrition order was requested.
2914     */
2915    public NutritionOrder setDateTime(Date value) { 
2916        if (this.dateTime == null)
2917          this.dateTime = new DateTimeType();
2918        this.dateTime.setValue(value);
2919      return this;
2920    }
2921
2922    /**
2923     * @return {@link #orderer} (The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.)
2924     */
2925    public Reference getOrderer() { 
2926      if (this.orderer == null)
2927        if (Configuration.errorOnAutoCreate())
2928          throw new Error("Attempt to auto-create NutritionOrder.orderer");
2929        else if (Configuration.doAutoCreate())
2930          this.orderer = new Reference(); // cc
2931      return this.orderer;
2932    }
2933
2934    public boolean hasOrderer() { 
2935      return this.orderer != null && !this.orderer.isEmpty();
2936    }
2937
2938    /**
2939     * @param value {@link #orderer} (The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.)
2940     */
2941    public NutritionOrder setOrderer(Reference value)  { 
2942      this.orderer = value;
2943      return this;
2944    }
2945
2946    /**
2947     * @return {@link #orderer} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.)
2948     */
2949    public Practitioner getOrdererTarget() { 
2950      if (this.ordererTarget == null)
2951        if (Configuration.errorOnAutoCreate())
2952          throw new Error("Attempt to auto-create NutritionOrder.orderer");
2953        else if (Configuration.doAutoCreate())
2954          this.ordererTarget = new Practitioner(); // aa
2955      return this.ordererTarget;
2956    }
2957
2958    /**
2959     * @param value {@link #orderer} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.)
2960     */
2961    public NutritionOrder setOrdererTarget(Practitioner value) { 
2962      this.ordererTarget = value;
2963      return this;
2964    }
2965
2966    /**
2967     * @return {@link #allergyIntolerance} (A link to a record of allergies or intolerances  which should be included in the nutrition order.)
2968     */
2969    public List<Reference> getAllergyIntolerance() { 
2970      if (this.allergyIntolerance == null)
2971        this.allergyIntolerance = new ArrayList<Reference>();
2972      return this.allergyIntolerance;
2973    }
2974
2975    /**
2976     * @return Returns a reference to <code>this</code> for easy method chaining
2977     */
2978    public NutritionOrder setAllergyIntolerance(List<Reference> theAllergyIntolerance) { 
2979      this.allergyIntolerance = theAllergyIntolerance;
2980      return this;
2981    }
2982
2983    public boolean hasAllergyIntolerance() { 
2984      if (this.allergyIntolerance == null)
2985        return false;
2986      for (Reference item : this.allergyIntolerance)
2987        if (!item.isEmpty())
2988          return true;
2989      return false;
2990    }
2991
2992    public Reference addAllergyIntolerance() { //3
2993      Reference t = new Reference();
2994      if (this.allergyIntolerance == null)
2995        this.allergyIntolerance = new ArrayList<Reference>();
2996      this.allergyIntolerance.add(t);
2997      return t;
2998    }
2999
3000    public NutritionOrder addAllergyIntolerance(Reference t) { //3
3001      if (t == null)
3002        return this;
3003      if (this.allergyIntolerance == null)
3004        this.allergyIntolerance = new ArrayList<Reference>();
3005      this.allergyIntolerance.add(t);
3006      return this;
3007    }
3008
3009    /**
3010     * @return The first repetition of repeating field {@link #allergyIntolerance}, creating it if it does not already exist
3011     */
3012    public Reference getAllergyIntoleranceFirstRep() { 
3013      if (getAllergyIntolerance().isEmpty()) {
3014        addAllergyIntolerance();
3015      }
3016      return getAllergyIntolerance().get(0);
3017    }
3018
3019    /**
3020     * @deprecated Use Reference#setResource(IBaseResource) instead
3021     */
3022    @Deprecated
3023    public List<AllergyIntolerance> getAllergyIntoleranceTarget() { 
3024      if (this.allergyIntoleranceTarget == null)
3025        this.allergyIntoleranceTarget = new ArrayList<AllergyIntolerance>();
3026      return this.allergyIntoleranceTarget;
3027    }
3028
3029    /**
3030     * @deprecated Use Reference#setResource(IBaseResource) instead
3031     */
3032    @Deprecated
3033    public AllergyIntolerance addAllergyIntoleranceTarget() { 
3034      AllergyIntolerance r = new AllergyIntolerance();
3035      if (this.allergyIntoleranceTarget == null)
3036        this.allergyIntoleranceTarget = new ArrayList<AllergyIntolerance>();
3037      this.allergyIntoleranceTarget.add(r);
3038      return r;
3039    }
3040
3041    /**
3042     * @return {@link #foodPreferenceModifier} (This modifier is used to convey order-specific modifiers about the type of food that should be given. These can be derived from patient allergies, intolerances, or preferences such as Halal, Vegan or Kosher. This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.)
3043     */
3044    public List<CodeableConcept> getFoodPreferenceModifier() { 
3045      if (this.foodPreferenceModifier == null)
3046        this.foodPreferenceModifier = new ArrayList<CodeableConcept>();
3047      return this.foodPreferenceModifier;
3048    }
3049
3050    /**
3051     * @return Returns a reference to <code>this</code> for easy method chaining
3052     */
3053    public NutritionOrder setFoodPreferenceModifier(List<CodeableConcept> theFoodPreferenceModifier) { 
3054      this.foodPreferenceModifier = theFoodPreferenceModifier;
3055      return this;
3056    }
3057
3058    public boolean hasFoodPreferenceModifier() { 
3059      if (this.foodPreferenceModifier == null)
3060        return false;
3061      for (CodeableConcept item : this.foodPreferenceModifier)
3062        if (!item.isEmpty())
3063          return true;
3064      return false;
3065    }
3066
3067    public CodeableConcept addFoodPreferenceModifier() { //3
3068      CodeableConcept t = new CodeableConcept();
3069      if (this.foodPreferenceModifier == null)
3070        this.foodPreferenceModifier = new ArrayList<CodeableConcept>();
3071      this.foodPreferenceModifier.add(t);
3072      return t;
3073    }
3074
3075    public NutritionOrder addFoodPreferenceModifier(CodeableConcept t) { //3
3076      if (t == null)
3077        return this;
3078      if (this.foodPreferenceModifier == null)
3079        this.foodPreferenceModifier = new ArrayList<CodeableConcept>();
3080      this.foodPreferenceModifier.add(t);
3081      return this;
3082    }
3083
3084    /**
3085     * @return The first repetition of repeating field {@link #foodPreferenceModifier}, creating it if it does not already exist
3086     */
3087    public CodeableConcept getFoodPreferenceModifierFirstRep() { 
3088      if (getFoodPreferenceModifier().isEmpty()) {
3089        addFoodPreferenceModifier();
3090      }
3091      return getFoodPreferenceModifier().get(0);
3092    }
3093
3094    /**
3095     * @return {@link #excludeFoodModifier} (This modifier is used to convey order-specific modifiers about the type of food that should NOT be given. These can be derived from patient allergies, intolerances, or preferences such as No Red Meat, No Soy or No Wheat or  Gluten-Free.  While it should not be necessary to repeat allergy or intolerance information captured in the referenced AllergyIntolerance resource in the excludeFoodModifier, this element may be used to convey additional specificity related to foods that should be eliminated from the patient?s diet for any reason.  This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.)
3096     */
3097    public List<CodeableConcept> getExcludeFoodModifier() { 
3098      if (this.excludeFoodModifier == null)
3099        this.excludeFoodModifier = new ArrayList<CodeableConcept>();
3100      return this.excludeFoodModifier;
3101    }
3102
3103    /**
3104     * @return Returns a reference to <code>this</code> for easy method chaining
3105     */
3106    public NutritionOrder setExcludeFoodModifier(List<CodeableConcept> theExcludeFoodModifier) { 
3107      this.excludeFoodModifier = theExcludeFoodModifier;
3108      return this;
3109    }
3110
3111    public boolean hasExcludeFoodModifier() { 
3112      if (this.excludeFoodModifier == null)
3113        return false;
3114      for (CodeableConcept item : this.excludeFoodModifier)
3115        if (!item.isEmpty())
3116          return true;
3117      return false;
3118    }
3119
3120    public CodeableConcept addExcludeFoodModifier() { //3
3121      CodeableConcept t = new CodeableConcept();
3122      if (this.excludeFoodModifier == null)
3123        this.excludeFoodModifier = new ArrayList<CodeableConcept>();
3124      this.excludeFoodModifier.add(t);
3125      return t;
3126    }
3127
3128    public NutritionOrder addExcludeFoodModifier(CodeableConcept t) { //3
3129      if (t == null)
3130        return this;
3131      if (this.excludeFoodModifier == null)
3132        this.excludeFoodModifier = new ArrayList<CodeableConcept>();
3133      this.excludeFoodModifier.add(t);
3134      return this;
3135    }
3136
3137    /**
3138     * @return The first repetition of repeating field {@link #excludeFoodModifier}, creating it if it does not already exist
3139     */
3140    public CodeableConcept getExcludeFoodModifierFirstRep() { 
3141      if (getExcludeFoodModifier().isEmpty()) {
3142        addExcludeFoodModifier();
3143      }
3144      return getExcludeFoodModifier().get(0);
3145    }
3146
3147    /**
3148     * @return {@link #oralDiet} (Diet given orally in contrast to enteral (tube) feeding.)
3149     */
3150    public NutritionOrderOralDietComponent getOralDiet() { 
3151      if (this.oralDiet == null)
3152        if (Configuration.errorOnAutoCreate())
3153          throw new Error("Attempt to auto-create NutritionOrder.oralDiet");
3154        else if (Configuration.doAutoCreate())
3155          this.oralDiet = new NutritionOrderOralDietComponent(); // cc
3156      return this.oralDiet;
3157    }
3158
3159    public boolean hasOralDiet() { 
3160      return this.oralDiet != null && !this.oralDiet.isEmpty();
3161    }
3162
3163    /**
3164     * @param value {@link #oralDiet} (Diet given orally in contrast to enteral (tube) feeding.)
3165     */
3166    public NutritionOrder setOralDiet(NutritionOrderOralDietComponent value)  { 
3167      this.oralDiet = value;
3168      return this;
3169    }
3170
3171    /**
3172     * @return {@link #supplement} (Oral nutritional products given in order to add further nutritional value to the patient's diet.)
3173     */
3174    public List<NutritionOrderSupplementComponent> getSupplement() { 
3175      if (this.supplement == null)
3176        this.supplement = new ArrayList<NutritionOrderSupplementComponent>();
3177      return this.supplement;
3178    }
3179
3180    /**
3181     * @return Returns a reference to <code>this</code> for easy method chaining
3182     */
3183    public NutritionOrder setSupplement(List<NutritionOrderSupplementComponent> theSupplement) { 
3184      this.supplement = theSupplement;
3185      return this;
3186    }
3187
3188    public boolean hasSupplement() { 
3189      if (this.supplement == null)
3190        return false;
3191      for (NutritionOrderSupplementComponent item : this.supplement)
3192        if (!item.isEmpty())
3193          return true;
3194      return false;
3195    }
3196
3197    public NutritionOrderSupplementComponent addSupplement() { //3
3198      NutritionOrderSupplementComponent t = new NutritionOrderSupplementComponent();
3199      if (this.supplement == null)
3200        this.supplement = new ArrayList<NutritionOrderSupplementComponent>();
3201      this.supplement.add(t);
3202      return t;
3203    }
3204
3205    public NutritionOrder addSupplement(NutritionOrderSupplementComponent t) { //3
3206      if (t == null)
3207        return this;
3208      if (this.supplement == null)
3209        this.supplement = new ArrayList<NutritionOrderSupplementComponent>();
3210      this.supplement.add(t);
3211      return this;
3212    }
3213
3214    /**
3215     * @return The first repetition of repeating field {@link #supplement}, creating it if it does not already exist
3216     */
3217    public NutritionOrderSupplementComponent getSupplementFirstRep() { 
3218      if (getSupplement().isEmpty()) {
3219        addSupplement();
3220      }
3221      return getSupplement().get(0);
3222    }
3223
3224    /**
3225     * @return {@link #enteralFormula} (Feeding provided through the gastrointestinal tract via a tube, catheter, or stoma that delivers nutrition distal to the oral cavity.)
3226     */
3227    public NutritionOrderEnteralFormulaComponent getEnteralFormula() { 
3228      if (this.enteralFormula == null)
3229        if (Configuration.errorOnAutoCreate())
3230          throw new Error("Attempt to auto-create NutritionOrder.enteralFormula");
3231        else if (Configuration.doAutoCreate())
3232          this.enteralFormula = new NutritionOrderEnteralFormulaComponent(); // cc
3233      return this.enteralFormula;
3234    }
3235
3236    public boolean hasEnteralFormula() { 
3237      return this.enteralFormula != null && !this.enteralFormula.isEmpty();
3238    }
3239
3240    /**
3241     * @param value {@link #enteralFormula} (Feeding provided through the gastrointestinal tract via a tube, catheter, or stoma that delivers nutrition distal to the oral cavity.)
3242     */
3243    public NutritionOrder setEnteralFormula(NutritionOrderEnteralFormulaComponent value)  { 
3244      this.enteralFormula = value;
3245      return this;
3246    }
3247
3248      protected void listChildren(List<Property> children) {
3249        super.listChildren(children);
3250        children.add(new Property("identifier", "Identifier", "Identifiers assigned to this order by the order sender or by the order receiver.", 0, java.lang.Integer.MAX_VALUE, identifier));
3251        children.add(new Property("status", "code", "The workflow status of the nutrition order/request.", 0, 1, status));
3252        children.add(new Property("patient", "Reference(Patient)", "The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.", 0, 1, patient));
3253        children.add(new Property("encounter", "Reference(Encounter)", "An encounter that provides additional information about the healthcare context in which this request is made.", 0, 1, encounter));
3254        children.add(new Property("dateTime", "dateTime", "The date and time that this nutrition order was requested.", 0, 1, dateTime));
3255        children.add(new Property("orderer", "Reference(Practitioner)", "The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.", 0, 1, orderer));
3256        children.add(new Property("allergyIntolerance", "Reference(AllergyIntolerance)", "A link to a record of allergies or intolerances  which should be included in the nutrition order.", 0, java.lang.Integer.MAX_VALUE, allergyIntolerance));
3257        children.add(new Property("foodPreferenceModifier", "CodeableConcept", "This modifier is used to convey order-specific modifiers about the type of food that should be given. These can be derived from patient allergies, intolerances, or preferences such as Halal, Vegan or Kosher. This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.", 0, java.lang.Integer.MAX_VALUE, foodPreferenceModifier));
3258        children.add(new Property("excludeFoodModifier", "CodeableConcept", "This modifier is used to convey order-specific modifiers about the type of food that should NOT be given. These can be derived from patient allergies, intolerances, or preferences such as No Red Meat, No Soy or No Wheat or  Gluten-Free.  While it should not be necessary to repeat allergy or intolerance information captured in the referenced AllergyIntolerance resource in the excludeFoodModifier, this element may be used to convey additional specificity related to foods that should be eliminated from the patient?s diet for any reason.  This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.", 0, java.lang.Integer.MAX_VALUE, excludeFoodModifier));
3259        children.add(new Property("oralDiet", "", "Diet given orally in contrast to enteral (tube) feeding.", 0, 1, oralDiet));
3260        children.add(new Property("supplement", "", "Oral nutritional products given in order to add further nutritional value to the patient's diet.", 0, java.lang.Integer.MAX_VALUE, supplement));
3261        children.add(new Property("enteralFormula", "", "Feeding provided through the gastrointestinal tract via a tube, catheter, or stoma that delivers nutrition distal to the oral cavity.", 0, 1, enteralFormula));
3262      }
3263
3264      @Override
3265      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3266        switch (_hash) {
3267        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Identifiers assigned to this order by the order sender or by the order receiver.", 0, java.lang.Integer.MAX_VALUE, identifier);
3268        case -892481550: /*status*/  return new Property("status", "code", "The workflow status of the nutrition order/request.", 0, 1, status);
3269        case -791418107: /*patient*/  return new Property("patient", "Reference(Patient)", "The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.", 0, 1, patient);
3270        case 1524132147: /*encounter*/  return new Property("encounter", "Reference(Encounter)", "An encounter that provides additional information about the healthcare context in which this request is made.", 0, 1, encounter);
3271        case 1792749467: /*dateTime*/  return new Property("dateTime", "dateTime", "The date and time that this nutrition order was requested.", 0, 1, dateTime);
3272        case -1207109509: /*orderer*/  return new Property("orderer", "Reference(Practitioner)", "The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.", 0, 1, orderer);
3273        case -120164120: /*allergyIntolerance*/  return new Property("allergyIntolerance", "Reference(AllergyIntolerance)", "A link to a record of allergies or intolerances  which should be included in the nutrition order.", 0, java.lang.Integer.MAX_VALUE, allergyIntolerance);
3274        case 659473872: /*foodPreferenceModifier*/  return new Property("foodPreferenceModifier", "CodeableConcept", "This modifier is used to convey order-specific modifiers about the type of food that should be given. These can be derived from patient allergies, intolerances, or preferences such as Halal, Vegan or Kosher. This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.", 0, java.lang.Integer.MAX_VALUE, foodPreferenceModifier);
3275        case 1760260175: /*excludeFoodModifier*/  return new Property("excludeFoodModifier", "CodeableConcept", "This modifier is used to convey order-specific modifiers about the type of food that should NOT be given. These can be derived from patient allergies, intolerances, or preferences such as No Red Meat, No Soy or No Wheat or  Gluten-Free.  While it should not be necessary to repeat allergy or intolerance information captured in the referenced AllergyIntolerance resource in the excludeFoodModifier, this element may be used to convey additional specificity related to foods that should be eliminated from the patient?s diet for any reason.  This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.", 0, java.lang.Integer.MAX_VALUE, excludeFoodModifier);
3276        case 1153521250: /*oralDiet*/  return new Property("oralDiet", "", "Diet given orally in contrast to enteral (tube) feeding.", 0, 1, oralDiet);
3277        case -711993159: /*supplement*/  return new Property("supplement", "", "Oral nutritional products given in order to add further nutritional value to the patient's diet.", 0, java.lang.Integer.MAX_VALUE, supplement);
3278        case -671083805: /*enteralFormula*/  return new Property("enteralFormula", "", "Feeding provided through the gastrointestinal tract via a tube, catheter, or stoma that delivers nutrition distal to the oral cavity.", 0, 1, enteralFormula);
3279        default: return super.getNamedProperty(_hash, _name, _checkValid);
3280        }
3281
3282      }
3283
3284      @Override
3285      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3286        switch (hash) {
3287        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3288        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<NutritionOrderStatus>
3289        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
3290        case 1524132147: /*encounter*/ return this.encounter == null ? new Base[0] : new Base[] {this.encounter}; // Reference
3291        case 1792749467: /*dateTime*/ return this.dateTime == null ? new Base[0] : new Base[] {this.dateTime}; // DateTimeType
3292        case -1207109509: /*orderer*/ return this.orderer == null ? new Base[0] : new Base[] {this.orderer}; // Reference
3293        case -120164120: /*allergyIntolerance*/ return this.allergyIntolerance == null ? new Base[0] : this.allergyIntolerance.toArray(new Base[this.allergyIntolerance.size()]); // Reference
3294        case 659473872: /*foodPreferenceModifier*/ return this.foodPreferenceModifier == null ? new Base[0] : this.foodPreferenceModifier.toArray(new Base[this.foodPreferenceModifier.size()]); // CodeableConcept
3295        case 1760260175: /*excludeFoodModifier*/ return this.excludeFoodModifier == null ? new Base[0] : this.excludeFoodModifier.toArray(new Base[this.excludeFoodModifier.size()]); // CodeableConcept
3296        case 1153521250: /*oralDiet*/ return this.oralDiet == null ? new Base[0] : new Base[] {this.oralDiet}; // NutritionOrderOralDietComponent
3297        case -711993159: /*supplement*/ return this.supplement == null ? new Base[0] : this.supplement.toArray(new Base[this.supplement.size()]); // NutritionOrderSupplementComponent
3298        case -671083805: /*enteralFormula*/ return this.enteralFormula == null ? new Base[0] : new Base[] {this.enteralFormula}; // NutritionOrderEnteralFormulaComponent
3299        default: return super.getProperty(hash, name, checkValid);
3300        }
3301
3302      }
3303
3304      @Override
3305      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3306        switch (hash) {
3307        case -1618432855: // identifier
3308          this.getIdentifier().add(castToIdentifier(value)); // Identifier
3309          return value;
3310        case -892481550: // status
3311          value = new NutritionOrderStatusEnumFactory().fromType(castToCode(value));
3312          this.status = (Enumeration) value; // Enumeration<NutritionOrderStatus>
3313          return value;
3314        case -791418107: // patient
3315          this.patient = castToReference(value); // Reference
3316          return value;
3317        case 1524132147: // encounter
3318          this.encounter = castToReference(value); // Reference
3319          return value;
3320        case 1792749467: // dateTime
3321          this.dateTime = castToDateTime(value); // DateTimeType
3322          return value;
3323        case -1207109509: // orderer
3324          this.orderer = castToReference(value); // Reference
3325          return value;
3326        case -120164120: // allergyIntolerance
3327          this.getAllergyIntolerance().add(castToReference(value)); // Reference
3328          return value;
3329        case 659473872: // foodPreferenceModifier
3330          this.getFoodPreferenceModifier().add(castToCodeableConcept(value)); // CodeableConcept
3331          return value;
3332        case 1760260175: // excludeFoodModifier
3333          this.getExcludeFoodModifier().add(castToCodeableConcept(value)); // CodeableConcept
3334          return value;
3335        case 1153521250: // oralDiet
3336          this.oralDiet = (NutritionOrderOralDietComponent) value; // NutritionOrderOralDietComponent
3337          return value;
3338        case -711993159: // supplement
3339          this.getSupplement().add((NutritionOrderSupplementComponent) value); // NutritionOrderSupplementComponent
3340          return value;
3341        case -671083805: // enteralFormula
3342          this.enteralFormula = (NutritionOrderEnteralFormulaComponent) value; // NutritionOrderEnteralFormulaComponent
3343          return value;
3344        default: return super.setProperty(hash, name, value);
3345        }
3346
3347      }
3348
3349      @Override
3350      public Base setProperty(String name, Base value) throws FHIRException {
3351        if (name.equals("identifier")) {
3352          this.getIdentifier().add(castToIdentifier(value));
3353        } else if (name.equals("status")) {
3354          value = new NutritionOrderStatusEnumFactory().fromType(castToCode(value));
3355          this.status = (Enumeration) value; // Enumeration<NutritionOrderStatus>
3356        } else if (name.equals("patient")) {
3357          this.patient = castToReference(value); // Reference
3358        } else if (name.equals("encounter")) {
3359          this.encounter = castToReference(value); // Reference
3360        } else if (name.equals("dateTime")) {
3361          this.dateTime = castToDateTime(value); // DateTimeType
3362        } else if (name.equals("orderer")) {
3363          this.orderer = castToReference(value); // Reference
3364        } else if (name.equals("allergyIntolerance")) {
3365          this.getAllergyIntolerance().add(castToReference(value));
3366        } else if (name.equals("foodPreferenceModifier")) {
3367          this.getFoodPreferenceModifier().add(castToCodeableConcept(value));
3368        } else if (name.equals("excludeFoodModifier")) {
3369          this.getExcludeFoodModifier().add(castToCodeableConcept(value));
3370        } else if (name.equals("oralDiet")) {
3371          this.oralDiet = (NutritionOrderOralDietComponent) value; // NutritionOrderOralDietComponent
3372        } else if (name.equals("supplement")) {
3373          this.getSupplement().add((NutritionOrderSupplementComponent) value);
3374        } else if (name.equals("enteralFormula")) {
3375          this.enteralFormula = (NutritionOrderEnteralFormulaComponent) value; // NutritionOrderEnteralFormulaComponent
3376        } else
3377          return super.setProperty(name, value);
3378        return value;
3379      }
3380
3381      @Override
3382      public Base makeProperty(int hash, String name) throws FHIRException {
3383        switch (hash) {
3384        case -1618432855:  return addIdentifier(); 
3385        case -892481550:  return getStatusElement();
3386        case -791418107:  return getPatient(); 
3387        case 1524132147:  return getEncounter(); 
3388        case 1792749467:  return getDateTimeElement();
3389        case -1207109509:  return getOrderer(); 
3390        case -120164120:  return addAllergyIntolerance(); 
3391        case 659473872:  return addFoodPreferenceModifier(); 
3392        case 1760260175:  return addExcludeFoodModifier(); 
3393        case 1153521250:  return getOralDiet(); 
3394        case -711993159:  return addSupplement(); 
3395        case -671083805:  return getEnteralFormula(); 
3396        default: return super.makeProperty(hash, name);
3397        }
3398
3399      }
3400
3401      @Override
3402      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3403        switch (hash) {
3404        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3405        case -892481550: /*status*/ return new String[] {"code"};
3406        case -791418107: /*patient*/ return new String[] {"Reference"};
3407        case 1524132147: /*encounter*/ return new String[] {"Reference"};
3408        case 1792749467: /*dateTime*/ return new String[] {"dateTime"};
3409        case -1207109509: /*orderer*/ return new String[] {"Reference"};
3410        case -120164120: /*allergyIntolerance*/ return new String[] {"Reference"};
3411        case 659473872: /*foodPreferenceModifier*/ return new String[] {"CodeableConcept"};
3412        case 1760260175: /*excludeFoodModifier*/ return new String[] {"CodeableConcept"};
3413        case 1153521250: /*oralDiet*/ return new String[] {};
3414        case -711993159: /*supplement*/ return new String[] {};
3415        case -671083805: /*enteralFormula*/ return new String[] {};
3416        default: return super.getTypesForProperty(hash, name);
3417        }
3418
3419      }
3420
3421      @Override
3422      public Base addChild(String name) throws FHIRException {
3423        if (name.equals("identifier")) {
3424          return addIdentifier();
3425        }
3426        else if (name.equals("status")) {
3427          throw new FHIRException("Cannot call addChild on a singleton property NutritionOrder.status");
3428        }
3429        else if (name.equals("patient")) {
3430          this.patient = new Reference();
3431          return this.patient;
3432        }
3433        else if (name.equals("encounter")) {
3434          this.encounter = new Reference();
3435          return this.encounter;
3436        }
3437        else if (name.equals("dateTime")) {
3438          throw new FHIRException("Cannot call addChild on a singleton property NutritionOrder.dateTime");
3439        }
3440        else if (name.equals("orderer")) {
3441          this.orderer = new Reference();
3442          return this.orderer;
3443        }
3444        else if (name.equals("allergyIntolerance")) {
3445          return addAllergyIntolerance();
3446        }
3447        else if (name.equals("foodPreferenceModifier")) {
3448          return addFoodPreferenceModifier();
3449        }
3450        else if (name.equals("excludeFoodModifier")) {
3451          return addExcludeFoodModifier();
3452        }
3453        else if (name.equals("oralDiet")) {
3454          this.oralDiet = new NutritionOrderOralDietComponent();
3455          return this.oralDiet;
3456        }
3457        else if (name.equals("supplement")) {
3458          return addSupplement();
3459        }
3460        else if (name.equals("enteralFormula")) {
3461          this.enteralFormula = new NutritionOrderEnteralFormulaComponent();
3462          return this.enteralFormula;
3463        }
3464        else
3465          return super.addChild(name);
3466      }
3467
3468  public String fhirType() {
3469    return "NutritionOrder";
3470
3471  }
3472
3473      public NutritionOrder copy() {
3474        NutritionOrder dst = new NutritionOrder();
3475        copyValues(dst);
3476        if (identifier != null) {
3477          dst.identifier = new ArrayList<Identifier>();
3478          for (Identifier i : identifier)
3479            dst.identifier.add(i.copy());
3480        };
3481        dst.status = status == null ? null : status.copy();
3482        dst.patient = patient == null ? null : patient.copy();
3483        dst.encounter = encounter == null ? null : encounter.copy();
3484        dst.dateTime = dateTime == null ? null : dateTime.copy();
3485        dst.orderer = orderer == null ? null : orderer.copy();
3486        if (allergyIntolerance != null) {
3487          dst.allergyIntolerance = new ArrayList<Reference>();
3488          for (Reference i : allergyIntolerance)
3489            dst.allergyIntolerance.add(i.copy());
3490        };
3491        if (foodPreferenceModifier != null) {
3492          dst.foodPreferenceModifier = new ArrayList<CodeableConcept>();
3493          for (CodeableConcept i : foodPreferenceModifier)
3494            dst.foodPreferenceModifier.add(i.copy());
3495        };
3496        if (excludeFoodModifier != null) {
3497          dst.excludeFoodModifier = new ArrayList<CodeableConcept>();
3498          for (CodeableConcept i : excludeFoodModifier)
3499            dst.excludeFoodModifier.add(i.copy());
3500        };
3501        dst.oralDiet = oralDiet == null ? null : oralDiet.copy();
3502        if (supplement != null) {
3503          dst.supplement = new ArrayList<NutritionOrderSupplementComponent>();
3504          for (NutritionOrderSupplementComponent i : supplement)
3505            dst.supplement.add(i.copy());
3506        };
3507        dst.enteralFormula = enteralFormula == null ? null : enteralFormula.copy();
3508        return dst;
3509      }
3510
3511      protected NutritionOrder typedCopy() {
3512        return copy();
3513      }
3514
3515      @Override
3516      public boolean equalsDeep(Base other_) {
3517        if (!super.equalsDeep(other_))
3518          return false;
3519        if (!(other_ instanceof NutritionOrder))
3520          return false;
3521        NutritionOrder o = (NutritionOrder) other_;
3522        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(patient, o.patient, true)
3523           && compareDeep(encounter, o.encounter, true) && compareDeep(dateTime, o.dateTime, true) && compareDeep(orderer, o.orderer, true)
3524           && compareDeep(allergyIntolerance, o.allergyIntolerance, true) && compareDeep(foodPreferenceModifier, o.foodPreferenceModifier, true)
3525           && compareDeep(excludeFoodModifier, o.excludeFoodModifier, true) && compareDeep(oralDiet, o.oralDiet, true)
3526           && compareDeep(supplement, o.supplement, true) && compareDeep(enteralFormula, o.enteralFormula, true)
3527          ;
3528      }
3529
3530      @Override
3531      public boolean equalsShallow(Base other_) {
3532        if (!super.equalsShallow(other_))
3533          return false;
3534        if (!(other_ instanceof NutritionOrder))
3535          return false;
3536        NutritionOrder o = (NutritionOrder) other_;
3537        return compareValues(status, o.status, true) && compareValues(dateTime, o.dateTime, true);
3538      }
3539
3540      public boolean isEmpty() {
3541        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, patient
3542          , encounter, dateTime, orderer, allergyIntolerance, foodPreferenceModifier, excludeFoodModifier
3543          , oralDiet, supplement, enteralFormula);
3544      }
3545
3546  @Override
3547  public ResourceType getResourceType() {
3548    return ResourceType.NutritionOrder;
3549   }
3550
3551 /**
3552   * Search parameter: <b>identifier</b>
3553   * <p>
3554   * Description: <b>Return nutrition orders with this external identifier</b><br>
3555   * Type: <b>token</b><br>
3556   * Path: <b>NutritionOrder.identifier</b><br>
3557   * </p>
3558   */
3559  @SearchParamDefinition(name="identifier", path="NutritionOrder.identifier", description="Return nutrition orders with this external identifier", type="token" )
3560  public static final String SP_IDENTIFIER = "identifier";
3561 /**
3562   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3563   * <p>
3564   * Description: <b>Return nutrition orders with this external identifier</b><br>
3565   * Type: <b>token</b><br>
3566   * Path: <b>NutritionOrder.identifier</b><br>
3567   * </p>
3568   */
3569  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3570
3571 /**
3572   * Search parameter: <b>datetime</b>
3573   * <p>
3574   * Description: <b>Return nutrition orders requested on this date</b><br>
3575   * Type: <b>date</b><br>
3576   * Path: <b>NutritionOrder.dateTime</b><br>
3577   * </p>
3578   */
3579  @SearchParamDefinition(name="datetime", path="NutritionOrder.dateTime", description="Return nutrition orders requested on this date", type="date" )
3580  public static final String SP_DATETIME = "datetime";
3581 /**
3582   * <b>Fluent Client</b> search parameter constant for <b>datetime</b>
3583   * <p>
3584   * Description: <b>Return nutrition orders requested on this date</b><br>
3585   * Type: <b>date</b><br>
3586   * Path: <b>NutritionOrder.dateTime</b><br>
3587   * </p>
3588   */
3589  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATETIME = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATETIME);
3590
3591 /**
3592   * Search parameter: <b>provider</b>
3593   * <p>
3594   * Description: <b>The identify of the provider who placed the nutrition order</b><br>
3595   * Type: <b>reference</b><br>
3596   * Path: <b>NutritionOrder.orderer</b><br>
3597   * </p>
3598   */
3599  @SearchParamDefinition(name="provider", path="NutritionOrder.orderer", description="The identify of the provider who placed the nutrition order", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Practitioner.class } )
3600  public static final String SP_PROVIDER = "provider";
3601 /**
3602   * <b>Fluent Client</b> search parameter constant for <b>provider</b>
3603   * <p>
3604   * Description: <b>The identify of the provider who placed the nutrition order</b><br>
3605   * Type: <b>reference</b><br>
3606   * Path: <b>NutritionOrder.orderer</b><br>
3607   * </p>
3608   */
3609  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PROVIDER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PROVIDER);
3610
3611/**
3612   * Constant for fluent queries to be used to add include statements. Specifies
3613   * the path value of "<b>NutritionOrder:provider</b>".
3614   */
3615  public static final ca.uhn.fhir.model.api.Include INCLUDE_PROVIDER = new ca.uhn.fhir.model.api.Include("NutritionOrder:provider").toLocked();
3616
3617 /**
3618   * Search parameter: <b>patient</b>
3619   * <p>
3620   * Description: <b>The identity of the person who requires the diet, formula or nutritional supplement</b><br>
3621   * Type: <b>reference</b><br>
3622   * Path: <b>NutritionOrder.patient</b><br>
3623   * </p>
3624   */
3625  @SearchParamDefinition(name="patient", path="NutritionOrder.patient", description="The identity of the person who requires the diet, formula or nutritional supplement", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Patient.class } )
3626  public static final String SP_PATIENT = "patient";
3627 /**
3628   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3629   * <p>
3630   * Description: <b>The identity of the person who requires the diet, formula or nutritional supplement</b><br>
3631   * Type: <b>reference</b><br>
3632   * Path: <b>NutritionOrder.patient</b><br>
3633   * </p>
3634   */
3635  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3636
3637/**
3638   * Constant for fluent queries to be used to add include statements. Specifies
3639   * the path value of "<b>NutritionOrder:patient</b>".
3640   */
3641  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("NutritionOrder:patient").toLocked();
3642
3643 /**
3644   * Search parameter: <b>supplement</b>
3645   * <p>
3646   * Description: <b>Type of supplement product requested</b><br>
3647   * Type: <b>token</b><br>
3648   * Path: <b>NutritionOrder.supplement.type</b><br>
3649   * </p>
3650   */
3651  @SearchParamDefinition(name="supplement", path="NutritionOrder.supplement.type", description="Type of supplement product requested", type="token" )
3652  public static final String SP_SUPPLEMENT = "supplement";
3653 /**
3654   * <b>Fluent Client</b> search parameter constant for <b>supplement</b>
3655   * <p>
3656   * Description: <b>Type of supplement product requested</b><br>
3657   * Type: <b>token</b><br>
3658   * Path: <b>NutritionOrder.supplement.type</b><br>
3659   * </p>
3660   */
3661  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SUPPLEMENT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SUPPLEMENT);
3662
3663 /**
3664   * Search parameter: <b>formula</b>
3665   * <p>
3666   * Description: <b>Type of enteral or infant formula</b><br>
3667   * Type: <b>token</b><br>
3668   * Path: <b>NutritionOrder.enteralFormula.baseFormulaType</b><br>
3669   * </p>
3670   */
3671  @SearchParamDefinition(name="formula", path="NutritionOrder.enteralFormula.baseFormulaType", description="Type of enteral or infant formula", type="token" )
3672  public static final String SP_FORMULA = "formula";
3673 /**
3674   * <b>Fluent Client</b> search parameter constant for <b>formula</b>
3675   * <p>
3676   * Description: <b>Type of enteral or infant formula</b><br>
3677   * Type: <b>token</b><br>
3678   * Path: <b>NutritionOrder.enteralFormula.baseFormulaType</b><br>
3679   * </p>
3680   */
3681  public static final ca.uhn.fhir.rest.gclient.TokenClientParam FORMULA = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_FORMULA);
3682
3683 /**
3684   * Search parameter: <b>encounter</b>
3685   * <p>
3686   * Description: <b>Return nutrition orders with this encounter identifier</b><br>
3687   * Type: <b>reference</b><br>
3688   * Path: <b>NutritionOrder.encounter</b><br>
3689   * </p>
3690   */
3691  @SearchParamDefinition(name="encounter", path="NutritionOrder.encounter", description="Return nutrition orders with this encounter identifier", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Encounter") }, target={Encounter.class } )
3692  public static final String SP_ENCOUNTER = "encounter";
3693 /**
3694   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
3695   * <p>
3696   * Description: <b>Return nutrition orders with this encounter identifier</b><br>
3697   * Type: <b>reference</b><br>
3698   * Path: <b>NutritionOrder.encounter</b><br>
3699   * </p>
3700   */
3701  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
3702
3703/**
3704   * Constant for fluent queries to be used to add include statements. Specifies
3705   * the path value of "<b>NutritionOrder:encounter</b>".
3706   */
3707  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("NutritionOrder:encounter").toLocked();
3708
3709 /**
3710   * Search parameter: <b>oraldiet</b>
3711   * <p>
3712   * Description: <b>Type of diet that can be consumed orally (i.e., take via the mouth).</b><br>
3713   * Type: <b>token</b><br>
3714   * Path: <b>NutritionOrder.oralDiet.type</b><br>
3715   * </p>
3716   */
3717  @SearchParamDefinition(name="oraldiet", path="NutritionOrder.oralDiet.type", description="Type of diet that can be consumed orally (i.e., take via the mouth).", type="token" )
3718  public static final String SP_ORALDIET = "oraldiet";
3719 /**
3720   * <b>Fluent Client</b> search parameter constant for <b>oraldiet</b>
3721   * <p>
3722   * Description: <b>Type of diet that can be consumed orally (i.e., take via the mouth).</b><br>
3723   * Type: <b>token</b><br>
3724   * Path: <b>NutritionOrder.oralDiet.type</b><br>
3725   * </p>
3726   */
3727  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ORALDIET = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ORALDIET);
3728
3729 /**
3730   * Search parameter: <b>status</b>
3731   * <p>
3732   * Description: <b>Status of the nutrition order.</b><br>
3733   * Type: <b>token</b><br>
3734   * Path: <b>NutritionOrder.status</b><br>
3735   * </p>
3736   */
3737  @SearchParamDefinition(name="status", path="NutritionOrder.status", description="Status of the nutrition order.", type="token" )
3738  public static final String SP_STATUS = "status";
3739 /**
3740   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3741   * <p>
3742   * Description: <b>Status of the nutrition order.</b><br>
3743   * Type: <b>token</b><br>
3744   * Path: <b>NutritionOrder.status</b><br>
3745   * </p>
3746   */
3747  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3748
3749 /**
3750   * Search parameter: <b>additive</b>
3751   * <p>
3752   * Description: <b>Type of module component to add to the feeding</b><br>
3753   * Type: <b>token</b><br>
3754   * Path: <b>NutritionOrder.enteralFormula.additiveType</b><br>
3755   * </p>
3756   */
3757  @SearchParamDefinition(name="additive", path="NutritionOrder.enteralFormula.additiveType", description="Type of module component to add to the feeding", type="token" )
3758  public static final String SP_ADDITIVE = "additive";
3759 /**
3760   * <b>Fluent Client</b> search parameter constant for <b>additive</b>
3761   * <p>
3762   * Description: <b>Type of module component to add to the feeding</b><br>
3763   * Type: <b>token</b><br>
3764   * Path: <b>NutritionOrder.enteralFormula.additiveType</b><br>
3765   * </p>
3766   */
3767  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ADDITIVE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ADDITIVE);
3768
3769
3770}