001package org.hl7.fhir.dstu3.model;
002
003
004
005
006/*
007  Copyright (c) 2011+, HL7, Inc.
008  All rights reserved.
009  
010  Redistribution and use in source and binary forms, with or without modification, 
011  are permitted provided that the following conditions are met:
012  
013   * Redistributions of source code must retain the above copyright notice, this 
014     list of conditions and the following disclaimer.
015   * Redistributions in binary form must reproduce the above copyright notice, 
016     this list of conditions and the following disclaimer in the documentation 
017     and/or other materials provided with the distribution.
018   * Neither the name of HL7 nor the names of its contributors may be used to 
019     endorse or promote products derived from this software without specific 
020     prior written permission.
021  
022  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
023  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
024  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
025  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
026  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
027  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
028  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
029  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
030  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
031  POSSIBILITY OF SUCH DAMAGE.
032  
033*/
034
035// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
036import java.util.ArrayList;
037import java.util.Date;
038import java.util.List;
039
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.exceptions.FHIRFormatError;
042import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
043import org.hl7.fhir.utilities.Utilities;
044
045import ca.uhn.fhir.model.api.annotation.Block;
046import ca.uhn.fhir.model.api.annotation.Child;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.ResourceDef;
049import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
050/**
051 * A group of related requests that can be used to capture intended activities that have inter-dependencies such as "give this medication after that one".
052 */
053@ResourceDef(name="RequestGroup", profile="http://hl7.org/fhir/Profile/RequestGroup")
054public class RequestGroup extends DomainResource {
055
056    public enum RequestStatus {
057        /**
058         * The request has been created but is not yet complete or ready for action
059         */
060        DRAFT, 
061        /**
062         * The request is ready to be acted upon
063         */
064        ACTIVE, 
065        /**
066         * The authorization/request to act has been temporarily withdrawn but is expected to resume in the future
067         */
068        SUSPENDED, 
069        /**
070         * The authorization/request to act has been terminated prior to the full completion of the intended actions.  No further activity should occur.
071         */
072        CANCELLED, 
073        /**
074         * Activity against the request has been sufficiently completed to the satisfaction of the requester
075         */
076        COMPLETED, 
077        /**
078         * This electronic record should never have existed, though it is possible that real-world decisions were based on it.  (If real-world activity has occurred, the status should be "cancelled" rather than "entered-in-error".)
079         */
080        ENTEREDINERROR, 
081        /**
082         * The authoring system does not know which of the status values currently applies for this request.  Note: This concept is not to be used for "other" . One of the listed statuses is presumed to apply,  but the system creating the request doesn't know.
083         */
084        UNKNOWN, 
085        /**
086         * added to help the parsers with the generic types
087         */
088        NULL;
089        public static RequestStatus fromCode(String codeString) throws FHIRException {
090            if (codeString == null || "".equals(codeString))
091                return null;
092        if ("draft".equals(codeString))
093          return DRAFT;
094        if ("active".equals(codeString))
095          return ACTIVE;
096        if ("suspended".equals(codeString))
097          return SUSPENDED;
098        if ("cancelled".equals(codeString))
099          return CANCELLED;
100        if ("completed".equals(codeString))
101          return COMPLETED;
102        if ("entered-in-error".equals(codeString))
103          return ENTEREDINERROR;
104        if ("unknown".equals(codeString))
105          return UNKNOWN;
106        if (Configuration.isAcceptInvalidEnums())
107          return null;
108        else
109          throw new FHIRException("Unknown RequestStatus code '"+codeString+"'");
110        }
111        public String toCode() {
112          switch (this) {
113            case DRAFT: return "draft";
114            case ACTIVE: return "active";
115            case SUSPENDED: return "suspended";
116            case CANCELLED: return "cancelled";
117            case COMPLETED: return "completed";
118            case ENTEREDINERROR: return "entered-in-error";
119            case UNKNOWN: return "unknown";
120            case NULL: return null;
121            default: return "?";
122          }
123        }
124        public String getSystem() {
125          switch (this) {
126            case DRAFT: return "http://hl7.org/fhir/request-status";
127            case ACTIVE: return "http://hl7.org/fhir/request-status";
128            case SUSPENDED: return "http://hl7.org/fhir/request-status";
129            case CANCELLED: return "http://hl7.org/fhir/request-status";
130            case COMPLETED: return "http://hl7.org/fhir/request-status";
131            case ENTEREDINERROR: return "http://hl7.org/fhir/request-status";
132            case UNKNOWN: return "http://hl7.org/fhir/request-status";
133            case NULL: return null;
134            default: return "?";
135          }
136        }
137        public String getDefinition() {
138          switch (this) {
139            case DRAFT: return "The request has been created but is not yet complete or ready for action";
140            case ACTIVE: return "The request is ready to be acted upon";
141            case SUSPENDED: return "The authorization/request to act has been temporarily withdrawn but is expected to resume in the future";
142            case CANCELLED: return "The authorization/request to act has been terminated prior to the full completion of the intended actions.  No further activity should occur.";
143            case COMPLETED: return "Activity against the request has been sufficiently completed to the satisfaction of the requester";
144            case ENTEREDINERROR: return "This electronic record should never have existed, though it is possible that real-world decisions were based on it.  (If real-world activity has occurred, the status should be \"cancelled\" rather than \"entered-in-error\".)";
145            case UNKNOWN: return "The authoring system does not know which of the status values currently applies for this request.  Note: This concept is not to be used for \"other\" . One of the listed statuses is presumed to apply,  but the system creating the request doesn't know.";
146            case NULL: return null;
147            default: return "?";
148          }
149        }
150        public String getDisplay() {
151          switch (this) {
152            case DRAFT: return "Draft";
153            case ACTIVE: return "Active";
154            case SUSPENDED: return "Suspended";
155            case CANCELLED: return "Cancelled";
156            case COMPLETED: return "Completed";
157            case ENTEREDINERROR: return "Entered in Error";
158            case UNKNOWN: return "Unknown";
159            case NULL: return null;
160            default: return "?";
161          }
162        }
163    }
164
165  public static class RequestStatusEnumFactory implements EnumFactory<RequestStatus> {
166    public RequestStatus fromCode(String codeString) throws IllegalArgumentException {
167      if (codeString == null || "".equals(codeString))
168            if (codeString == null || "".equals(codeString))
169                return null;
170        if ("draft".equals(codeString))
171          return RequestStatus.DRAFT;
172        if ("active".equals(codeString))
173          return RequestStatus.ACTIVE;
174        if ("suspended".equals(codeString))
175          return RequestStatus.SUSPENDED;
176        if ("cancelled".equals(codeString))
177          return RequestStatus.CANCELLED;
178        if ("completed".equals(codeString))
179          return RequestStatus.COMPLETED;
180        if ("entered-in-error".equals(codeString))
181          return RequestStatus.ENTEREDINERROR;
182        if ("unknown".equals(codeString))
183          return RequestStatus.UNKNOWN;
184        throw new IllegalArgumentException("Unknown RequestStatus code '"+codeString+"'");
185        }
186        public Enumeration<RequestStatus> fromType(PrimitiveType<?> code) throws FHIRException {
187          if (code == null)
188            return null;
189          if (code.isEmpty())
190            return new Enumeration<RequestStatus>(this);
191          String codeString = code.asStringValue();
192          if (codeString == null || "".equals(codeString))
193            return null;
194        if ("draft".equals(codeString))
195          return new Enumeration<RequestStatus>(this, RequestStatus.DRAFT);
196        if ("active".equals(codeString))
197          return new Enumeration<RequestStatus>(this, RequestStatus.ACTIVE);
198        if ("suspended".equals(codeString))
199          return new Enumeration<RequestStatus>(this, RequestStatus.SUSPENDED);
200        if ("cancelled".equals(codeString))
201          return new Enumeration<RequestStatus>(this, RequestStatus.CANCELLED);
202        if ("completed".equals(codeString))
203          return new Enumeration<RequestStatus>(this, RequestStatus.COMPLETED);
204        if ("entered-in-error".equals(codeString))
205          return new Enumeration<RequestStatus>(this, RequestStatus.ENTEREDINERROR);
206        if ("unknown".equals(codeString))
207          return new Enumeration<RequestStatus>(this, RequestStatus.UNKNOWN);
208        throw new FHIRException("Unknown RequestStatus code '"+codeString+"'");
209        }
210    public String toCode(RequestStatus code) {
211       if (code == RequestStatus.NULL)
212           return null;
213       if (code == RequestStatus.DRAFT)
214        return "draft";
215      if (code == RequestStatus.ACTIVE)
216        return "active";
217      if (code == RequestStatus.SUSPENDED)
218        return "suspended";
219      if (code == RequestStatus.CANCELLED)
220        return "cancelled";
221      if (code == RequestStatus.COMPLETED)
222        return "completed";
223      if (code == RequestStatus.ENTEREDINERROR)
224        return "entered-in-error";
225      if (code == RequestStatus.UNKNOWN)
226        return "unknown";
227      return "?";
228   }
229    public String toSystem(RequestStatus code) {
230      return code.getSystem();
231      }
232    }
233
234    public enum RequestIntent {
235        /**
236         * The request is a suggestion made by someone/something that doesn't have an intention to ensure it occurs and without providing an authorization to act
237         */
238        PROPOSAL, 
239        /**
240         * The request represents an intension to ensure something occurs without providing an authorization for others to act
241         */
242        PLAN, 
243        /**
244         * The request represents a request/demand and authorization for action
245         */
246        ORDER, 
247        /**
248         * The request represents an original authorization for action
249         */
250        ORIGINALORDER, 
251        /**
252         * The request represents an automatically generated supplemental authorization for action based on a parent authorization together with initial results of the action taken against that parent authorization
253         */
254        REFLEXORDER, 
255        /**
256         * The request represents the view of an authorization instantiated by a fulfilling system representing the details of the fulfiller's intention to act upon a submitted order
257         */
258        FILLERORDER, 
259        /**
260         * An order created in fulfillment of a broader order that represents the authorization for a single activity occurrence.  E.g. The administration of a single dose of a drug.
261         */
262        INSTANCEORDER, 
263        /**
264         * The request represents a component or option for a RequestGroup that establishes timing, conditionality and/or other constraints among a set of requests.
265
266Refer to [[[RequestGroup]]] for additional information on how this status is used
267         */
268        OPTION, 
269        /**
270         * added to help the parsers with the generic types
271         */
272        NULL;
273        public static RequestIntent fromCode(String codeString) throws FHIRException {
274            if (codeString == null || "".equals(codeString))
275                return null;
276        if ("proposal".equals(codeString))
277          return PROPOSAL;
278        if ("plan".equals(codeString))
279          return PLAN;
280        if ("order".equals(codeString))
281          return ORDER;
282        if ("original-order".equals(codeString))
283          return ORIGINALORDER;
284        if ("reflex-order".equals(codeString))
285          return REFLEXORDER;
286        if ("filler-order".equals(codeString))
287          return FILLERORDER;
288        if ("instance-order".equals(codeString))
289          return INSTANCEORDER;
290        if ("option".equals(codeString))
291          return OPTION;
292        if (Configuration.isAcceptInvalidEnums())
293          return null;
294        else
295          throw new FHIRException("Unknown RequestIntent code '"+codeString+"'");
296        }
297        public String toCode() {
298          switch (this) {
299            case PROPOSAL: return "proposal";
300            case PLAN: return "plan";
301            case ORDER: return "order";
302            case ORIGINALORDER: return "original-order";
303            case REFLEXORDER: return "reflex-order";
304            case FILLERORDER: return "filler-order";
305            case INSTANCEORDER: return "instance-order";
306            case OPTION: return "option";
307            case NULL: return null;
308            default: return "?";
309          }
310        }
311        public String getSystem() {
312          switch (this) {
313            case PROPOSAL: return "http://hl7.org/fhir/request-intent";
314            case PLAN: return "http://hl7.org/fhir/request-intent";
315            case ORDER: return "http://hl7.org/fhir/request-intent";
316            case ORIGINALORDER: return "http://hl7.org/fhir/request-intent";
317            case REFLEXORDER: return "http://hl7.org/fhir/request-intent";
318            case FILLERORDER: return "http://hl7.org/fhir/request-intent";
319            case INSTANCEORDER: return "http://hl7.org/fhir/request-intent";
320            case OPTION: return "http://hl7.org/fhir/request-intent";
321            case NULL: return null;
322            default: return "?";
323          }
324        }
325        public String getDefinition() {
326          switch (this) {
327            case PROPOSAL: return "The request is a suggestion made by someone/something that doesn't have an intention to ensure it occurs and without providing an authorization to act";
328            case PLAN: return "The request represents an intension to ensure something occurs without providing an authorization for others to act";
329            case ORDER: return "The request represents a request/demand and authorization for action";
330            case ORIGINALORDER: return "The request represents an original authorization for action";
331            case REFLEXORDER: return "The request represents an automatically generated supplemental authorization for action based on a parent authorization together with initial results of the action taken against that parent authorization";
332            case FILLERORDER: return "The request represents the view of an authorization instantiated by a fulfilling system representing the details of the fulfiller's intention to act upon a submitted order";
333            case INSTANCEORDER: return "An order created in fulfillment of a broader order that represents the authorization for a single activity occurrence.  E.g. The administration of a single dose of a drug.";
334            case OPTION: return "The request represents a component or option for a RequestGroup that establishes timing, conditionality and/or other constraints among a set of requests.\n\nRefer to [[[RequestGroup]]] for additional information on how this status is used";
335            case NULL: return null;
336            default: return "?";
337          }
338        }
339        public String getDisplay() {
340          switch (this) {
341            case PROPOSAL: return "Proposal";
342            case PLAN: return "Plan";
343            case ORDER: return "Order";
344            case ORIGINALORDER: return "Original Order";
345            case REFLEXORDER: return "Reflex Order";
346            case FILLERORDER: return "Filler Order";
347            case INSTANCEORDER: return "Instance Order";
348            case OPTION: return "Option";
349            case NULL: return null;
350            default: return "?";
351          }
352        }
353    }
354
355  public static class RequestIntentEnumFactory implements EnumFactory<RequestIntent> {
356    public RequestIntent fromCode(String codeString) throws IllegalArgumentException {
357      if (codeString == null || "".equals(codeString))
358            if (codeString == null || "".equals(codeString))
359                return null;
360        if ("proposal".equals(codeString))
361          return RequestIntent.PROPOSAL;
362        if ("plan".equals(codeString))
363          return RequestIntent.PLAN;
364        if ("order".equals(codeString))
365          return RequestIntent.ORDER;
366        if ("original-order".equals(codeString))
367          return RequestIntent.ORIGINALORDER;
368        if ("reflex-order".equals(codeString))
369          return RequestIntent.REFLEXORDER;
370        if ("filler-order".equals(codeString))
371          return RequestIntent.FILLERORDER;
372        if ("instance-order".equals(codeString))
373          return RequestIntent.INSTANCEORDER;
374        if ("option".equals(codeString))
375          return RequestIntent.OPTION;
376        throw new IllegalArgumentException("Unknown RequestIntent code '"+codeString+"'");
377        }
378        public Enumeration<RequestIntent> fromType(PrimitiveType<?> code) throws FHIRException {
379          if (code == null)
380            return null;
381          if (code.isEmpty())
382            return new Enumeration<RequestIntent>(this);
383          String codeString = code.asStringValue();
384          if (codeString == null || "".equals(codeString))
385            return null;
386        if ("proposal".equals(codeString))
387          return new Enumeration<RequestIntent>(this, RequestIntent.PROPOSAL);
388        if ("plan".equals(codeString))
389          return new Enumeration<RequestIntent>(this, RequestIntent.PLAN);
390        if ("order".equals(codeString))
391          return new Enumeration<RequestIntent>(this, RequestIntent.ORDER);
392        if ("original-order".equals(codeString))
393          return new Enumeration<RequestIntent>(this, RequestIntent.ORIGINALORDER);
394        if ("reflex-order".equals(codeString))
395          return new Enumeration<RequestIntent>(this, RequestIntent.REFLEXORDER);
396        if ("filler-order".equals(codeString))
397          return new Enumeration<RequestIntent>(this, RequestIntent.FILLERORDER);
398        if ("instance-order".equals(codeString))
399          return new Enumeration<RequestIntent>(this, RequestIntent.INSTANCEORDER);
400        if ("option".equals(codeString))
401          return new Enumeration<RequestIntent>(this, RequestIntent.OPTION);
402        throw new FHIRException("Unknown RequestIntent code '"+codeString+"'");
403        }
404    public String toCode(RequestIntent code) {
405       if (code == RequestIntent.NULL)
406           return null;
407       if (code == RequestIntent.PROPOSAL)
408        return "proposal";
409      if (code == RequestIntent.PLAN)
410        return "plan";
411      if (code == RequestIntent.ORDER)
412        return "order";
413      if (code == RequestIntent.ORIGINALORDER)
414        return "original-order";
415      if (code == RequestIntent.REFLEXORDER)
416        return "reflex-order";
417      if (code == RequestIntent.FILLERORDER)
418        return "filler-order";
419      if (code == RequestIntent.INSTANCEORDER)
420        return "instance-order";
421      if (code == RequestIntent.OPTION)
422        return "option";
423      return "?";
424   }
425    public String toSystem(RequestIntent code) {
426      return code.getSystem();
427      }
428    }
429
430    public enum RequestPriority {
431        /**
432         * The request has normal priority
433         */
434        ROUTINE, 
435        /**
436         * The request should be actioned promptly - higher priority than routine
437         */
438        URGENT, 
439        /**
440         * The request should be actioned as soon as possible - higher priority than urgent
441         */
442        ASAP, 
443        /**
444         * The request should be actioned immediately - highest possible priority.  E.g. an emergency
445         */
446        STAT, 
447        /**
448         * added to help the parsers with the generic types
449         */
450        NULL;
451        public static RequestPriority fromCode(String codeString) throws FHIRException {
452            if (codeString == null || "".equals(codeString))
453                return null;
454        if ("routine".equals(codeString))
455          return ROUTINE;
456        if ("urgent".equals(codeString))
457          return URGENT;
458        if ("asap".equals(codeString))
459          return ASAP;
460        if ("stat".equals(codeString))
461          return STAT;
462        if (Configuration.isAcceptInvalidEnums())
463          return null;
464        else
465          throw new FHIRException("Unknown RequestPriority code '"+codeString+"'");
466        }
467        public String toCode() {
468          switch (this) {
469            case ROUTINE: return "routine";
470            case URGENT: return "urgent";
471            case ASAP: return "asap";
472            case STAT: return "stat";
473            case NULL: return null;
474            default: return "?";
475          }
476        }
477        public String getSystem() {
478          switch (this) {
479            case ROUTINE: return "http://hl7.org/fhir/request-priority";
480            case URGENT: return "http://hl7.org/fhir/request-priority";
481            case ASAP: return "http://hl7.org/fhir/request-priority";
482            case STAT: return "http://hl7.org/fhir/request-priority";
483            case NULL: return null;
484            default: return "?";
485          }
486        }
487        public String getDefinition() {
488          switch (this) {
489            case ROUTINE: return "The request has normal priority";
490            case URGENT: return "The request should be actioned promptly - higher priority than routine";
491            case ASAP: return "The request should be actioned as soon as possible - higher priority than urgent";
492            case STAT: return "The request should be actioned immediately - highest possible priority.  E.g. an emergency";
493            case NULL: return null;
494            default: return "?";
495          }
496        }
497        public String getDisplay() {
498          switch (this) {
499            case ROUTINE: return "Routine";
500            case URGENT: return "Urgent";
501            case ASAP: return "ASAP";
502            case STAT: return "STAT";
503            case NULL: return null;
504            default: return "?";
505          }
506        }
507    }
508
509  public static class RequestPriorityEnumFactory implements EnumFactory<RequestPriority> {
510    public RequestPriority fromCode(String codeString) throws IllegalArgumentException {
511      if (codeString == null || "".equals(codeString))
512            if (codeString == null || "".equals(codeString))
513                return null;
514        if ("routine".equals(codeString))
515          return RequestPriority.ROUTINE;
516        if ("urgent".equals(codeString))
517          return RequestPriority.URGENT;
518        if ("asap".equals(codeString))
519          return RequestPriority.ASAP;
520        if ("stat".equals(codeString))
521          return RequestPriority.STAT;
522        throw new IllegalArgumentException("Unknown RequestPriority code '"+codeString+"'");
523        }
524        public Enumeration<RequestPriority> fromType(PrimitiveType<?> code) throws FHIRException {
525          if (code == null)
526            return null;
527          if (code.isEmpty())
528            return new Enumeration<RequestPriority>(this);
529          String codeString = code.asStringValue();
530          if (codeString == null || "".equals(codeString))
531            return null;
532        if ("routine".equals(codeString))
533          return new Enumeration<RequestPriority>(this, RequestPriority.ROUTINE);
534        if ("urgent".equals(codeString))
535          return new Enumeration<RequestPriority>(this, RequestPriority.URGENT);
536        if ("asap".equals(codeString))
537          return new Enumeration<RequestPriority>(this, RequestPriority.ASAP);
538        if ("stat".equals(codeString))
539          return new Enumeration<RequestPriority>(this, RequestPriority.STAT);
540        throw new FHIRException("Unknown RequestPriority code '"+codeString+"'");
541        }
542    public String toCode(RequestPriority code) {
543       if (code == RequestPriority.NULL)
544           return null;
545       if (code == RequestPriority.ROUTINE)
546        return "routine";
547      if (code == RequestPriority.URGENT)
548        return "urgent";
549      if (code == RequestPriority.ASAP)
550        return "asap";
551      if (code == RequestPriority.STAT)
552        return "stat";
553      return "?";
554   }
555    public String toSystem(RequestPriority code) {
556      return code.getSystem();
557      }
558    }
559
560    public enum ActionConditionKind {
561        /**
562         * The condition describes whether or not a given action is applicable
563         */
564        APPLICABILITY, 
565        /**
566         * The condition is a starting condition for the action
567         */
568        START, 
569        /**
570         * The condition is a stop, or exit condition for the action
571         */
572        STOP, 
573        /**
574         * added to help the parsers with the generic types
575         */
576        NULL;
577        public static ActionConditionKind fromCode(String codeString) throws FHIRException {
578            if (codeString == null || "".equals(codeString))
579                return null;
580        if ("applicability".equals(codeString))
581          return APPLICABILITY;
582        if ("start".equals(codeString))
583          return START;
584        if ("stop".equals(codeString))
585          return STOP;
586        if (Configuration.isAcceptInvalidEnums())
587          return null;
588        else
589          throw new FHIRException("Unknown ActionConditionKind code '"+codeString+"'");
590        }
591        public String toCode() {
592          switch (this) {
593            case APPLICABILITY: return "applicability";
594            case START: return "start";
595            case STOP: return "stop";
596            case NULL: return null;
597            default: return "?";
598          }
599        }
600        public String getSystem() {
601          switch (this) {
602            case APPLICABILITY: return "http://hl7.org/fhir/action-condition-kind";
603            case START: return "http://hl7.org/fhir/action-condition-kind";
604            case STOP: return "http://hl7.org/fhir/action-condition-kind";
605            case NULL: return null;
606            default: return "?";
607          }
608        }
609        public String getDefinition() {
610          switch (this) {
611            case APPLICABILITY: return "The condition describes whether or not a given action is applicable";
612            case START: return "The condition is a starting condition for the action";
613            case STOP: return "The condition is a stop, or exit condition for the action";
614            case NULL: return null;
615            default: return "?";
616          }
617        }
618        public String getDisplay() {
619          switch (this) {
620            case APPLICABILITY: return "Applicability";
621            case START: return "Start";
622            case STOP: return "Stop";
623            case NULL: return null;
624            default: return "?";
625          }
626        }
627    }
628
629  public static class ActionConditionKindEnumFactory implements EnumFactory<ActionConditionKind> {
630    public ActionConditionKind fromCode(String codeString) throws IllegalArgumentException {
631      if (codeString == null || "".equals(codeString))
632            if (codeString == null || "".equals(codeString))
633                return null;
634        if ("applicability".equals(codeString))
635          return ActionConditionKind.APPLICABILITY;
636        if ("start".equals(codeString))
637          return ActionConditionKind.START;
638        if ("stop".equals(codeString))
639          return ActionConditionKind.STOP;
640        throw new IllegalArgumentException("Unknown ActionConditionKind code '"+codeString+"'");
641        }
642        public Enumeration<ActionConditionKind> fromType(PrimitiveType<?> code) throws FHIRException {
643          if (code == null)
644            return null;
645          if (code.isEmpty())
646            return new Enumeration<ActionConditionKind>(this);
647          String codeString = code.asStringValue();
648          if (codeString == null || "".equals(codeString))
649            return null;
650        if ("applicability".equals(codeString))
651          return new Enumeration<ActionConditionKind>(this, ActionConditionKind.APPLICABILITY);
652        if ("start".equals(codeString))
653          return new Enumeration<ActionConditionKind>(this, ActionConditionKind.START);
654        if ("stop".equals(codeString))
655          return new Enumeration<ActionConditionKind>(this, ActionConditionKind.STOP);
656        throw new FHIRException("Unknown ActionConditionKind code '"+codeString+"'");
657        }
658    public String toCode(ActionConditionKind code) {
659       if (code == ActionConditionKind.NULL)
660           return null;
661       if (code == ActionConditionKind.APPLICABILITY)
662        return "applicability";
663      if (code == ActionConditionKind.START)
664        return "start";
665      if (code == ActionConditionKind.STOP)
666        return "stop";
667      return "?";
668   }
669    public String toSystem(ActionConditionKind code) {
670      return code.getSystem();
671      }
672    }
673
674    public enum ActionRelationshipType {
675        /**
676         * The action must be performed before the start of the related action
677         */
678        BEFORESTART, 
679        /**
680         * The action must be performed before the related action
681         */
682        BEFORE, 
683        /**
684         * The action must be performed before the end of the related action
685         */
686        BEFOREEND, 
687        /**
688         * The action must be performed concurrent with the start of the related action
689         */
690        CONCURRENTWITHSTART, 
691        /**
692         * The action must be performed concurrent with the related action
693         */
694        CONCURRENT, 
695        /**
696         * The action must be performed concurrent with the end of the related action
697         */
698        CONCURRENTWITHEND, 
699        /**
700         * The action must be performed after the start of the related action
701         */
702        AFTERSTART, 
703        /**
704         * The action must be performed after the related action
705         */
706        AFTER, 
707        /**
708         * The action must be performed after the end of the related action
709         */
710        AFTEREND, 
711        /**
712         * added to help the parsers with the generic types
713         */
714        NULL;
715        public static ActionRelationshipType fromCode(String codeString) throws FHIRException {
716            if (codeString == null || "".equals(codeString))
717                return null;
718        if ("before-start".equals(codeString))
719          return BEFORESTART;
720        if ("before".equals(codeString))
721          return BEFORE;
722        if ("before-end".equals(codeString))
723          return BEFOREEND;
724        if ("concurrent-with-start".equals(codeString))
725          return CONCURRENTWITHSTART;
726        if ("concurrent".equals(codeString))
727          return CONCURRENT;
728        if ("concurrent-with-end".equals(codeString))
729          return CONCURRENTWITHEND;
730        if ("after-start".equals(codeString))
731          return AFTERSTART;
732        if ("after".equals(codeString))
733          return AFTER;
734        if ("after-end".equals(codeString))
735          return AFTEREND;
736        if (Configuration.isAcceptInvalidEnums())
737          return null;
738        else
739          throw new FHIRException("Unknown ActionRelationshipType code '"+codeString+"'");
740        }
741        public String toCode() {
742          switch (this) {
743            case BEFORESTART: return "before-start";
744            case BEFORE: return "before";
745            case BEFOREEND: return "before-end";
746            case CONCURRENTWITHSTART: return "concurrent-with-start";
747            case CONCURRENT: return "concurrent";
748            case CONCURRENTWITHEND: return "concurrent-with-end";
749            case AFTERSTART: return "after-start";
750            case AFTER: return "after";
751            case AFTEREND: return "after-end";
752            case NULL: return null;
753            default: return "?";
754          }
755        }
756        public String getSystem() {
757          switch (this) {
758            case BEFORESTART: return "http://hl7.org/fhir/action-relationship-type";
759            case BEFORE: return "http://hl7.org/fhir/action-relationship-type";
760            case BEFOREEND: return "http://hl7.org/fhir/action-relationship-type";
761            case CONCURRENTWITHSTART: return "http://hl7.org/fhir/action-relationship-type";
762            case CONCURRENT: return "http://hl7.org/fhir/action-relationship-type";
763            case CONCURRENTWITHEND: return "http://hl7.org/fhir/action-relationship-type";
764            case AFTERSTART: return "http://hl7.org/fhir/action-relationship-type";
765            case AFTER: return "http://hl7.org/fhir/action-relationship-type";
766            case AFTEREND: return "http://hl7.org/fhir/action-relationship-type";
767            case NULL: return null;
768            default: return "?";
769          }
770        }
771        public String getDefinition() {
772          switch (this) {
773            case BEFORESTART: return "The action must be performed before the start of the related action";
774            case BEFORE: return "The action must be performed before the related action";
775            case BEFOREEND: return "The action must be performed before the end of the related action";
776            case CONCURRENTWITHSTART: return "The action must be performed concurrent with the start of the related action";
777            case CONCURRENT: return "The action must be performed concurrent with the related action";
778            case CONCURRENTWITHEND: return "The action must be performed concurrent with the end of the related action";
779            case AFTERSTART: return "The action must be performed after the start of the related action";
780            case AFTER: return "The action must be performed after the related action";
781            case AFTEREND: return "The action must be performed after the end of the related action";
782            case NULL: return null;
783            default: return "?";
784          }
785        }
786        public String getDisplay() {
787          switch (this) {
788            case BEFORESTART: return "Before Start";
789            case BEFORE: return "Before";
790            case BEFOREEND: return "Before End";
791            case CONCURRENTWITHSTART: return "Concurrent With Start";
792            case CONCURRENT: return "Concurrent";
793            case CONCURRENTWITHEND: return "Concurrent With End";
794            case AFTERSTART: return "After Start";
795            case AFTER: return "After";
796            case AFTEREND: return "After End";
797            case NULL: return null;
798            default: return "?";
799          }
800        }
801    }
802
803  public static class ActionRelationshipTypeEnumFactory implements EnumFactory<ActionRelationshipType> {
804    public ActionRelationshipType fromCode(String codeString) throws IllegalArgumentException {
805      if (codeString == null || "".equals(codeString))
806            if (codeString == null || "".equals(codeString))
807                return null;
808        if ("before-start".equals(codeString))
809          return ActionRelationshipType.BEFORESTART;
810        if ("before".equals(codeString))
811          return ActionRelationshipType.BEFORE;
812        if ("before-end".equals(codeString))
813          return ActionRelationshipType.BEFOREEND;
814        if ("concurrent-with-start".equals(codeString))
815          return ActionRelationshipType.CONCURRENTWITHSTART;
816        if ("concurrent".equals(codeString))
817          return ActionRelationshipType.CONCURRENT;
818        if ("concurrent-with-end".equals(codeString))
819          return ActionRelationshipType.CONCURRENTWITHEND;
820        if ("after-start".equals(codeString))
821          return ActionRelationshipType.AFTERSTART;
822        if ("after".equals(codeString))
823          return ActionRelationshipType.AFTER;
824        if ("after-end".equals(codeString))
825          return ActionRelationshipType.AFTEREND;
826        throw new IllegalArgumentException("Unknown ActionRelationshipType code '"+codeString+"'");
827        }
828        public Enumeration<ActionRelationshipType> fromType(PrimitiveType<?> code) throws FHIRException {
829          if (code == null)
830            return null;
831          if (code.isEmpty())
832            return new Enumeration<ActionRelationshipType>(this);
833          String codeString = code.asStringValue();
834          if (codeString == null || "".equals(codeString))
835            return null;
836        if ("before-start".equals(codeString))
837          return new Enumeration<ActionRelationshipType>(this, ActionRelationshipType.BEFORESTART);
838        if ("before".equals(codeString))
839          return new Enumeration<ActionRelationshipType>(this, ActionRelationshipType.BEFORE);
840        if ("before-end".equals(codeString))
841          return new Enumeration<ActionRelationshipType>(this, ActionRelationshipType.BEFOREEND);
842        if ("concurrent-with-start".equals(codeString))
843          return new Enumeration<ActionRelationshipType>(this, ActionRelationshipType.CONCURRENTWITHSTART);
844        if ("concurrent".equals(codeString))
845          return new Enumeration<ActionRelationshipType>(this, ActionRelationshipType.CONCURRENT);
846        if ("concurrent-with-end".equals(codeString))
847          return new Enumeration<ActionRelationshipType>(this, ActionRelationshipType.CONCURRENTWITHEND);
848        if ("after-start".equals(codeString))
849          return new Enumeration<ActionRelationshipType>(this, ActionRelationshipType.AFTERSTART);
850        if ("after".equals(codeString))
851          return new Enumeration<ActionRelationshipType>(this, ActionRelationshipType.AFTER);
852        if ("after-end".equals(codeString))
853          return new Enumeration<ActionRelationshipType>(this, ActionRelationshipType.AFTEREND);
854        throw new FHIRException("Unknown ActionRelationshipType code '"+codeString+"'");
855        }
856    public String toCode(ActionRelationshipType code) {
857       if (code == ActionRelationshipType.NULL)
858           return null;
859       if (code == ActionRelationshipType.BEFORESTART)
860        return "before-start";
861      if (code == ActionRelationshipType.BEFORE)
862        return "before";
863      if (code == ActionRelationshipType.BEFOREEND)
864        return "before-end";
865      if (code == ActionRelationshipType.CONCURRENTWITHSTART)
866        return "concurrent-with-start";
867      if (code == ActionRelationshipType.CONCURRENT)
868        return "concurrent";
869      if (code == ActionRelationshipType.CONCURRENTWITHEND)
870        return "concurrent-with-end";
871      if (code == ActionRelationshipType.AFTERSTART)
872        return "after-start";
873      if (code == ActionRelationshipType.AFTER)
874        return "after";
875      if (code == ActionRelationshipType.AFTEREND)
876        return "after-end";
877      return "?";
878   }
879    public String toSystem(ActionRelationshipType code) {
880      return code.getSystem();
881      }
882    }
883
884    public enum ActionGroupingBehavior {
885        /**
886         * Any group marked with this behavior should be displayed as a visual group to the end user
887         */
888        VISUALGROUP, 
889        /**
890         * A group with this behavior logically groups its sub-elements, and may be shown as a visual group to the end user, but it is not required to do so
891         */
892        LOGICALGROUP, 
893        /**
894         * A group of related alternative actions is a sentence group if the target referenced by the action is the same in all the actions and each action simply constitutes a different variation on how to specify the details for the target. For example, two actions that could be in a SentenceGroup are "aspirin, 500 mg, 2 times per day" and "aspirin, 300 mg, 3 times per day". In both cases, aspirin is the target referenced by the action, and the two actions represent different options for how aspirin might be ordered for the patient. Note that a SentenceGroup would almost always have an associated selection behavior of "AtMostOne", unless it's a required action, in which case, it would be "ExactlyOne"
895         */
896        SENTENCEGROUP, 
897        /**
898         * added to help the parsers with the generic types
899         */
900        NULL;
901        public static ActionGroupingBehavior fromCode(String codeString) throws FHIRException {
902            if (codeString == null || "".equals(codeString))
903                return null;
904        if ("visual-group".equals(codeString))
905          return VISUALGROUP;
906        if ("logical-group".equals(codeString))
907          return LOGICALGROUP;
908        if ("sentence-group".equals(codeString))
909          return SENTENCEGROUP;
910        if (Configuration.isAcceptInvalidEnums())
911          return null;
912        else
913          throw new FHIRException("Unknown ActionGroupingBehavior code '"+codeString+"'");
914        }
915        public String toCode() {
916          switch (this) {
917            case VISUALGROUP: return "visual-group";
918            case LOGICALGROUP: return "logical-group";
919            case SENTENCEGROUP: return "sentence-group";
920            case NULL: return null;
921            default: return "?";
922          }
923        }
924        public String getSystem() {
925          switch (this) {
926            case VISUALGROUP: return "http://hl7.org/fhir/action-grouping-behavior";
927            case LOGICALGROUP: return "http://hl7.org/fhir/action-grouping-behavior";
928            case SENTENCEGROUP: return "http://hl7.org/fhir/action-grouping-behavior";
929            case NULL: return null;
930            default: return "?";
931          }
932        }
933        public String getDefinition() {
934          switch (this) {
935            case VISUALGROUP: return "Any group marked with this behavior should be displayed as a visual group to the end user";
936            case LOGICALGROUP: return "A group with this behavior logically groups its sub-elements, and may be shown as a visual group to the end user, but it is not required to do so";
937            case SENTENCEGROUP: return "A group of related alternative actions is a sentence group if the target referenced by the action is the same in all the actions and each action simply constitutes a different variation on how to specify the details for the target. For example, two actions that could be in a SentenceGroup are \"aspirin, 500 mg, 2 times per day\" and \"aspirin, 300 mg, 3 times per day\". In both cases, aspirin is the target referenced by the action, and the two actions represent different options for how aspirin might be ordered for the patient. Note that a SentenceGroup would almost always have an associated selection behavior of \"AtMostOne\", unless it's a required action, in which case, it would be \"ExactlyOne\"";
938            case NULL: return null;
939            default: return "?";
940          }
941        }
942        public String getDisplay() {
943          switch (this) {
944            case VISUALGROUP: return "Visual Group";
945            case LOGICALGROUP: return "Logical Group";
946            case SENTENCEGROUP: return "Sentence Group";
947            case NULL: return null;
948            default: return "?";
949          }
950        }
951    }
952
953  public static class ActionGroupingBehaviorEnumFactory implements EnumFactory<ActionGroupingBehavior> {
954    public ActionGroupingBehavior fromCode(String codeString) throws IllegalArgumentException {
955      if (codeString == null || "".equals(codeString))
956            if (codeString == null || "".equals(codeString))
957                return null;
958        if ("visual-group".equals(codeString))
959          return ActionGroupingBehavior.VISUALGROUP;
960        if ("logical-group".equals(codeString))
961          return ActionGroupingBehavior.LOGICALGROUP;
962        if ("sentence-group".equals(codeString))
963          return ActionGroupingBehavior.SENTENCEGROUP;
964        throw new IllegalArgumentException("Unknown ActionGroupingBehavior code '"+codeString+"'");
965        }
966        public Enumeration<ActionGroupingBehavior> fromType(PrimitiveType<?> code) throws FHIRException {
967          if (code == null)
968            return null;
969          if (code.isEmpty())
970            return new Enumeration<ActionGroupingBehavior>(this);
971          String codeString = code.asStringValue();
972          if (codeString == null || "".equals(codeString))
973            return null;
974        if ("visual-group".equals(codeString))
975          return new Enumeration<ActionGroupingBehavior>(this, ActionGroupingBehavior.VISUALGROUP);
976        if ("logical-group".equals(codeString))
977          return new Enumeration<ActionGroupingBehavior>(this, ActionGroupingBehavior.LOGICALGROUP);
978        if ("sentence-group".equals(codeString))
979          return new Enumeration<ActionGroupingBehavior>(this, ActionGroupingBehavior.SENTENCEGROUP);
980        throw new FHIRException("Unknown ActionGroupingBehavior code '"+codeString+"'");
981        }
982    public String toCode(ActionGroupingBehavior code) {
983       if (code == ActionGroupingBehavior.NULL)
984           return null;
985       if (code == ActionGroupingBehavior.VISUALGROUP)
986        return "visual-group";
987      if (code == ActionGroupingBehavior.LOGICALGROUP)
988        return "logical-group";
989      if (code == ActionGroupingBehavior.SENTENCEGROUP)
990        return "sentence-group";
991      return "?";
992   }
993    public String toSystem(ActionGroupingBehavior code) {
994      return code.getSystem();
995      }
996    }
997
998    public enum ActionSelectionBehavior {
999        /**
1000         * Any number of the actions in the group may be chosen, from zero to all
1001         */
1002        ANY, 
1003        /**
1004         * All the actions in the group must be selected as a single unit
1005         */
1006        ALL, 
1007        /**
1008         * All the actions in the group are meant to be chosen as a single unit: either all must be selected by the end user, or none may be selected
1009         */
1010        ALLORNONE, 
1011        /**
1012         * The end user must choose one and only one of the selectable actions in the group. The user may not choose none of the actions in the group
1013         */
1014        EXACTLYONE, 
1015        /**
1016         * The end user may choose zero or at most one of the actions in the group
1017         */
1018        ATMOSTONE, 
1019        /**
1020         * The end user must choose a minimum of one, and as many additional as desired
1021         */
1022        ONEORMORE, 
1023        /**
1024         * added to help the parsers with the generic types
1025         */
1026        NULL;
1027        public static ActionSelectionBehavior fromCode(String codeString) throws FHIRException {
1028            if (codeString == null || "".equals(codeString))
1029                return null;
1030        if ("any".equals(codeString))
1031          return ANY;
1032        if ("all".equals(codeString))
1033          return ALL;
1034        if ("all-or-none".equals(codeString))
1035          return ALLORNONE;
1036        if ("exactly-one".equals(codeString))
1037          return EXACTLYONE;
1038        if ("at-most-one".equals(codeString))
1039          return ATMOSTONE;
1040        if ("one-or-more".equals(codeString))
1041          return ONEORMORE;
1042        if (Configuration.isAcceptInvalidEnums())
1043          return null;
1044        else
1045          throw new FHIRException("Unknown ActionSelectionBehavior code '"+codeString+"'");
1046        }
1047        public String toCode() {
1048          switch (this) {
1049            case ANY: return "any";
1050            case ALL: return "all";
1051            case ALLORNONE: return "all-or-none";
1052            case EXACTLYONE: return "exactly-one";
1053            case ATMOSTONE: return "at-most-one";
1054            case ONEORMORE: return "one-or-more";
1055            case NULL: return null;
1056            default: return "?";
1057          }
1058        }
1059        public String getSystem() {
1060          switch (this) {
1061            case ANY: return "http://hl7.org/fhir/action-selection-behavior";
1062            case ALL: return "http://hl7.org/fhir/action-selection-behavior";
1063            case ALLORNONE: return "http://hl7.org/fhir/action-selection-behavior";
1064            case EXACTLYONE: return "http://hl7.org/fhir/action-selection-behavior";
1065            case ATMOSTONE: return "http://hl7.org/fhir/action-selection-behavior";
1066            case ONEORMORE: return "http://hl7.org/fhir/action-selection-behavior";
1067            case NULL: return null;
1068            default: return "?";
1069          }
1070        }
1071        public String getDefinition() {
1072          switch (this) {
1073            case ANY: return "Any number of the actions in the group may be chosen, from zero to all";
1074            case ALL: return "All the actions in the group must be selected as a single unit";
1075            case ALLORNONE: return "All the actions in the group are meant to be chosen as a single unit: either all must be selected by the end user, or none may be selected";
1076            case EXACTLYONE: return "The end user must choose one and only one of the selectable actions in the group. The user may not choose none of the actions in the group";
1077            case ATMOSTONE: return "The end user may choose zero or at most one of the actions in the group";
1078            case ONEORMORE: return "The end user must choose a minimum of one, and as many additional as desired";
1079            case NULL: return null;
1080            default: return "?";
1081          }
1082        }
1083        public String getDisplay() {
1084          switch (this) {
1085            case ANY: return "Any";
1086            case ALL: return "All";
1087            case ALLORNONE: return "All Or None";
1088            case EXACTLYONE: return "Exactly One";
1089            case ATMOSTONE: return "At Most One";
1090            case ONEORMORE: return "One Or More";
1091            case NULL: return null;
1092            default: return "?";
1093          }
1094        }
1095    }
1096
1097  public static class ActionSelectionBehaviorEnumFactory implements EnumFactory<ActionSelectionBehavior> {
1098    public ActionSelectionBehavior fromCode(String codeString) throws IllegalArgumentException {
1099      if (codeString == null || "".equals(codeString))
1100            if (codeString == null || "".equals(codeString))
1101                return null;
1102        if ("any".equals(codeString))
1103          return ActionSelectionBehavior.ANY;
1104        if ("all".equals(codeString))
1105          return ActionSelectionBehavior.ALL;
1106        if ("all-or-none".equals(codeString))
1107          return ActionSelectionBehavior.ALLORNONE;
1108        if ("exactly-one".equals(codeString))
1109          return ActionSelectionBehavior.EXACTLYONE;
1110        if ("at-most-one".equals(codeString))
1111          return ActionSelectionBehavior.ATMOSTONE;
1112        if ("one-or-more".equals(codeString))
1113          return ActionSelectionBehavior.ONEORMORE;
1114        throw new IllegalArgumentException("Unknown ActionSelectionBehavior code '"+codeString+"'");
1115        }
1116        public Enumeration<ActionSelectionBehavior> fromType(PrimitiveType<?> code) throws FHIRException {
1117          if (code == null)
1118            return null;
1119          if (code.isEmpty())
1120            return new Enumeration<ActionSelectionBehavior>(this);
1121          String codeString = code.asStringValue();
1122          if (codeString == null || "".equals(codeString))
1123            return null;
1124        if ("any".equals(codeString))
1125          return new Enumeration<ActionSelectionBehavior>(this, ActionSelectionBehavior.ANY);
1126        if ("all".equals(codeString))
1127          return new Enumeration<ActionSelectionBehavior>(this, ActionSelectionBehavior.ALL);
1128        if ("all-or-none".equals(codeString))
1129          return new Enumeration<ActionSelectionBehavior>(this, ActionSelectionBehavior.ALLORNONE);
1130        if ("exactly-one".equals(codeString))
1131          return new Enumeration<ActionSelectionBehavior>(this, ActionSelectionBehavior.EXACTLYONE);
1132        if ("at-most-one".equals(codeString))
1133          return new Enumeration<ActionSelectionBehavior>(this, ActionSelectionBehavior.ATMOSTONE);
1134        if ("one-or-more".equals(codeString))
1135          return new Enumeration<ActionSelectionBehavior>(this, ActionSelectionBehavior.ONEORMORE);
1136        throw new FHIRException("Unknown ActionSelectionBehavior code '"+codeString+"'");
1137        }
1138    public String toCode(ActionSelectionBehavior code) {
1139       if (code == ActionSelectionBehavior.NULL)
1140           return null;
1141       if (code == ActionSelectionBehavior.ANY)
1142        return "any";
1143      if (code == ActionSelectionBehavior.ALL)
1144        return "all";
1145      if (code == ActionSelectionBehavior.ALLORNONE)
1146        return "all-or-none";
1147      if (code == ActionSelectionBehavior.EXACTLYONE)
1148        return "exactly-one";
1149      if (code == ActionSelectionBehavior.ATMOSTONE)
1150        return "at-most-one";
1151      if (code == ActionSelectionBehavior.ONEORMORE)
1152        return "one-or-more";
1153      return "?";
1154   }
1155    public String toSystem(ActionSelectionBehavior code) {
1156      return code.getSystem();
1157      }
1158    }
1159
1160    public enum ActionRequiredBehavior {
1161        /**
1162         * An action with this behavior must be included in the actions processed by the end user; the end user may not choose not to include this action
1163         */
1164        MUST, 
1165        /**
1166         * An action with this behavior may be included in the set of actions processed by the end user
1167         */
1168        COULD, 
1169        /**
1170         * An action with this behavior must be included in the set of actions processed by the end user, unless the end user provides documentation as to why the action was not included
1171         */
1172        MUSTUNLESSDOCUMENTED, 
1173        /**
1174         * added to help the parsers with the generic types
1175         */
1176        NULL;
1177        public static ActionRequiredBehavior fromCode(String codeString) throws FHIRException {
1178            if (codeString == null || "".equals(codeString))
1179                return null;
1180        if ("must".equals(codeString))
1181          return MUST;
1182        if ("could".equals(codeString))
1183          return COULD;
1184        if ("must-unless-documented".equals(codeString))
1185          return MUSTUNLESSDOCUMENTED;
1186        if (Configuration.isAcceptInvalidEnums())
1187          return null;
1188        else
1189          throw new FHIRException("Unknown ActionRequiredBehavior code '"+codeString+"'");
1190        }
1191        public String toCode() {
1192          switch (this) {
1193            case MUST: return "must";
1194            case COULD: return "could";
1195            case MUSTUNLESSDOCUMENTED: return "must-unless-documented";
1196            case NULL: return null;
1197            default: return "?";
1198          }
1199        }
1200        public String getSystem() {
1201          switch (this) {
1202            case MUST: return "http://hl7.org/fhir/action-required-behavior";
1203            case COULD: return "http://hl7.org/fhir/action-required-behavior";
1204            case MUSTUNLESSDOCUMENTED: return "http://hl7.org/fhir/action-required-behavior";
1205            case NULL: return null;
1206            default: return "?";
1207          }
1208        }
1209        public String getDefinition() {
1210          switch (this) {
1211            case MUST: return "An action with this behavior must be included in the actions processed by the end user; the end user may not choose not to include this action";
1212            case COULD: return "An action with this behavior may be included in the set of actions processed by the end user";
1213            case MUSTUNLESSDOCUMENTED: return "An action with this behavior must be included in the set of actions processed by the end user, unless the end user provides documentation as to why the action was not included";
1214            case NULL: return null;
1215            default: return "?";
1216          }
1217        }
1218        public String getDisplay() {
1219          switch (this) {
1220            case MUST: return "Must";
1221            case COULD: return "Could";
1222            case MUSTUNLESSDOCUMENTED: return "Must Unless Documented";
1223            case NULL: return null;
1224            default: return "?";
1225          }
1226        }
1227    }
1228
1229  public static class ActionRequiredBehaviorEnumFactory implements EnumFactory<ActionRequiredBehavior> {
1230    public ActionRequiredBehavior fromCode(String codeString) throws IllegalArgumentException {
1231      if (codeString == null || "".equals(codeString))
1232            if (codeString == null || "".equals(codeString))
1233                return null;
1234        if ("must".equals(codeString))
1235          return ActionRequiredBehavior.MUST;
1236        if ("could".equals(codeString))
1237          return ActionRequiredBehavior.COULD;
1238        if ("must-unless-documented".equals(codeString))
1239          return ActionRequiredBehavior.MUSTUNLESSDOCUMENTED;
1240        throw new IllegalArgumentException("Unknown ActionRequiredBehavior code '"+codeString+"'");
1241        }
1242        public Enumeration<ActionRequiredBehavior> fromType(PrimitiveType<?> code) throws FHIRException {
1243          if (code == null)
1244            return null;
1245          if (code.isEmpty())
1246            return new Enumeration<ActionRequiredBehavior>(this);
1247          String codeString = code.asStringValue();
1248          if (codeString == null || "".equals(codeString))
1249            return null;
1250        if ("must".equals(codeString))
1251          return new Enumeration<ActionRequiredBehavior>(this, ActionRequiredBehavior.MUST);
1252        if ("could".equals(codeString))
1253          return new Enumeration<ActionRequiredBehavior>(this, ActionRequiredBehavior.COULD);
1254        if ("must-unless-documented".equals(codeString))
1255          return new Enumeration<ActionRequiredBehavior>(this, ActionRequiredBehavior.MUSTUNLESSDOCUMENTED);
1256        throw new FHIRException("Unknown ActionRequiredBehavior code '"+codeString+"'");
1257        }
1258    public String toCode(ActionRequiredBehavior code) {
1259       if (code == ActionRequiredBehavior.NULL)
1260           return null;
1261       if (code == ActionRequiredBehavior.MUST)
1262        return "must";
1263      if (code == ActionRequiredBehavior.COULD)
1264        return "could";
1265      if (code == ActionRequiredBehavior.MUSTUNLESSDOCUMENTED)
1266        return "must-unless-documented";
1267      return "?";
1268   }
1269    public String toSystem(ActionRequiredBehavior code) {
1270      return code.getSystem();
1271      }
1272    }
1273
1274    public enum ActionPrecheckBehavior {
1275        /**
1276         * An action with this behavior is one of the most frequent action that is, or should be, included by an end user, for the particular context in which the action occurs. The system displaying the action to the end user should consider "pre-checking" such an action as a convenience for the user
1277         */
1278        YES, 
1279        /**
1280         * An action with this behavior is one of the less frequent actions included by the end user, for the particular context in which the action occurs. The system displaying the actions to the end user would typically not "pre-check" such an action
1281         */
1282        NO, 
1283        /**
1284         * added to help the parsers with the generic types
1285         */
1286        NULL;
1287        public static ActionPrecheckBehavior fromCode(String codeString) throws FHIRException {
1288            if (codeString == null || "".equals(codeString))
1289                return null;
1290        if ("yes".equals(codeString))
1291          return YES;
1292        if ("no".equals(codeString))
1293          return NO;
1294        if (Configuration.isAcceptInvalidEnums())
1295          return null;
1296        else
1297          throw new FHIRException("Unknown ActionPrecheckBehavior code '"+codeString+"'");
1298        }
1299        public String toCode() {
1300          switch (this) {
1301            case YES: return "yes";
1302            case NO: return "no";
1303            case NULL: return null;
1304            default: return "?";
1305          }
1306        }
1307        public String getSystem() {
1308          switch (this) {
1309            case YES: return "http://hl7.org/fhir/action-precheck-behavior";
1310            case NO: return "http://hl7.org/fhir/action-precheck-behavior";
1311            case NULL: return null;
1312            default: return "?";
1313          }
1314        }
1315        public String getDefinition() {
1316          switch (this) {
1317            case YES: return "An action with this behavior is one of the most frequent action that is, or should be, included by an end user, for the particular context in which the action occurs. The system displaying the action to the end user should consider \"pre-checking\" such an action as a convenience for the user";
1318            case NO: return "An action with this behavior is one of the less frequent actions included by the end user, for the particular context in which the action occurs. The system displaying the actions to the end user would typically not \"pre-check\" such an action";
1319            case NULL: return null;
1320            default: return "?";
1321          }
1322        }
1323        public String getDisplay() {
1324          switch (this) {
1325            case YES: return "Yes";
1326            case NO: return "No";
1327            case NULL: return null;
1328            default: return "?";
1329          }
1330        }
1331    }
1332
1333  public static class ActionPrecheckBehaviorEnumFactory implements EnumFactory<ActionPrecheckBehavior> {
1334    public ActionPrecheckBehavior fromCode(String codeString) throws IllegalArgumentException {
1335      if (codeString == null || "".equals(codeString))
1336            if (codeString == null || "".equals(codeString))
1337                return null;
1338        if ("yes".equals(codeString))
1339          return ActionPrecheckBehavior.YES;
1340        if ("no".equals(codeString))
1341          return ActionPrecheckBehavior.NO;
1342        throw new IllegalArgumentException("Unknown ActionPrecheckBehavior code '"+codeString+"'");
1343        }
1344        public Enumeration<ActionPrecheckBehavior> fromType(PrimitiveType<?> code) throws FHIRException {
1345          if (code == null)
1346            return null;
1347          if (code.isEmpty())
1348            return new Enumeration<ActionPrecheckBehavior>(this);
1349          String codeString = code.asStringValue();
1350          if (codeString == null || "".equals(codeString))
1351            return null;
1352        if ("yes".equals(codeString))
1353          return new Enumeration<ActionPrecheckBehavior>(this, ActionPrecheckBehavior.YES);
1354        if ("no".equals(codeString))
1355          return new Enumeration<ActionPrecheckBehavior>(this, ActionPrecheckBehavior.NO);
1356        throw new FHIRException("Unknown ActionPrecheckBehavior code '"+codeString+"'");
1357        }
1358    public String toCode(ActionPrecheckBehavior code) {
1359       if (code == ActionPrecheckBehavior.NULL)
1360           return null;
1361       if (code == ActionPrecheckBehavior.YES)
1362        return "yes";
1363      if (code == ActionPrecheckBehavior.NO)
1364        return "no";
1365      return "?";
1366   }
1367    public String toSystem(ActionPrecheckBehavior code) {
1368      return code.getSystem();
1369      }
1370    }
1371
1372    public enum ActionCardinalityBehavior {
1373        /**
1374         * The action may only be selected one time
1375         */
1376        SINGLE, 
1377        /**
1378         * The action may be selected multiple times
1379         */
1380        MULTIPLE, 
1381        /**
1382         * added to help the parsers with the generic types
1383         */
1384        NULL;
1385        public static ActionCardinalityBehavior fromCode(String codeString) throws FHIRException {
1386            if (codeString == null || "".equals(codeString))
1387                return null;
1388        if ("single".equals(codeString))
1389          return SINGLE;
1390        if ("multiple".equals(codeString))
1391          return MULTIPLE;
1392        if (Configuration.isAcceptInvalidEnums())
1393          return null;
1394        else
1395          throw new FHIRException("Unknown ActionCardinalityBehavior code '"+codeString+"'");
1396        }
1397        public String toCode() {
1398          switch (this) {
1399            case SINGLE: return "single";
1400            case MULTIPLE: return "multiple";
1401            case NULL: return null;
1402            default: return "?";
1403          }
1404        }
1405        public String getSystem() {
1406          switch (this) {
1407            case SINGLE: return "http://hl7.org/fhir/action-cardinality-behavior";
1408            case MULTIPLE: return "http://hl7.org/fhir/action-cardinality-behavior";
1409            case NULL: return null;
1410            default: return "?";
1411          }
1412        }
1413        public String getDefinition() {
1414          switch (this) {
1415            case SINGLE: return "The action may only be selected one time";
1416            case MULTIPLE: return "The action may be selected multiple times";
1417            case NULL: return null;
1418            default: return "?";
1419          }
1420        }
1421        public String getDisplay() {
1422          switch (this) {
1423            case SINGLE: return "Single";
1424            case MULTIPLE: return "Multiple";
1425            case NULL: return null;
1426            default: return "?";
1427          }
1428        }
1429    }
1430
1431  public static class ActionCardinalityBehaviorEnumFactory implements EnumFactory<ActionCardinalityBehavior> {
1432    public ActionCardinalityBehavior fromCode(String codeString) throws IllegalArgumentException {
1433      if (codeString == null || "".equals(codeString))
1434            if (codeString == null || "".equals(codeString))
1435                return null;
1436        if ("single".equals(codeString))
1437          return ActionCardinalityBehavior.SINGLE;
1438        if ("multiple".equals(codeString))
1439          return ActionCardinalityBehavior.MULTIPLE;
1440        throw new IllegalArgumentException("Unknown ActionCardinalityBehavior code '"+codeString+"'");
1441        }
1442        public Enumeration<ActionCardinalityBehavior> fromType(PrimitiveType<?> code) throws FHIRException {
1443          if (code == null)
1444            return null;
1445          if (code.isEmpty())
1446            return new Enumeration<ActionCardinalityBehavior>(this);
1447          String codeString = code.asStringValue();
1448          if (codeString == null || "".equals(codeString))
1449            return null;
1450        if ("single".equals(codeString))
1451          return new Enumeration<ActionCardinalityBehavior>(this, ActionCardinalityBehavior.SINGLE);
1452        if ("multiple".equals(codeString))
1453          return new Enumeration<ActionCardinalityBehavior>(this, ActionCardinalityBehavior.MULTIPLE);
1454        throw new FHIRException("Unknown ActionCardinalityBehavior code '"+codeString+"'");
1455        }
1456    public String toCode(ActionCardinalityBehavior code) {
1457       if (code == ActionCardinalityBehavior.NULL)
1458           return null;
1459       if (code == ActionCardinalityBehavior.SINGLE)
1460        return "single";
1461      if (code == ActionCardinalityBehavior.MULTIPLE)
1462        return "multiple";
1463      return "?";
1464   }
1465    public String toSystem(ActionCardinalityBehavior code) {
1466      return code.getSystem();
1467      }
1468    }
1469
1470    @Block()
1471    public static class RequestGroupActionComponent extends BackboneElement implements IBaseBackboneElement {
1472        /**
1473         * A user-visible label for the action.
1474         */
1475        @Child(name = "label", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1476        @Description(shortDefinition="User-visible label for the action (e.g. 1. or A.)", formalDefinition="A user-visible label for the action." )
1477        protected StringType label;
1478
1479        /**
1480         * The title of the action displayed to a user.
1481         */
1482        @Child(name = "title", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1483        @Description(shortDefinition="User-visible title", formalDefinition="The title of the action displayed to a user." )
1484        protected StringType title;
1485
1486        /**
1487         * A short description of the action used to provide a summary to display to the user.
1488         */
1489        @Child(name = "description", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1490        @Description(shortDefinition="Short description of the action", formalDefinition="A short description of the action used to provide a summary to display to the user." )
1491        protected StringType description;
1492
1493        /**
1494         * A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that may not be capable of interpreting it dynamically.
1495         */
1496        @Child(name = "textEquivalent", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
1497        @Description(shortDefinition="Static text equivalent of the action, used if the dynamic aspects cannot be interpreted by the receiving system", formalDefinition="A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that may not be capable of interpreting it dynamically." )
1498        protected StringType textEquivalent;
1499
1500        /**
1501         * A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a the section of a documentation template.
1502         */
1503        @Child(name = "code", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1504        @Description(shortDefinition="Code representing the meaning of the action or sub-actions", formalDefinition="A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a the section of a documentation template." )
1505        protected List<CodeableConcept> code;
1506
1507        /**
1508         * Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.
1509         */
1510        @Child(name = "documentation", type = {RelatedArtifact.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1511        @Description(shortDefinition="Supporting documentation for the intended performer of the action", formalDefinition="Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources." )
1512        protected List<RelatedArtifact> documentation;
1513
1514        /**
1515         * An expression that describes applicability criteria, or start/stop conditions for the action.
1516         */
1517        @Child(name = "condition", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1518        @Description(shortDefinition="Whether or not the action is applicable", formalDefinition="An expression that describes applicability criteria, or start/stop conditions for the action." )
1519        protected List<RequestGroupActionConditionComponent> condition;
1520
1521        /**
1522         * A relationship to another action such as "before" or "30-60 minutes after start of".
1523         */
1524        @Child(name = "relatedAction", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1525        @Description(shortDefinition="Relationship to another action", formalDefinition="A relationship to another action such as \"before\" or \"30-60 minutes after start of\"." )
1526        protected List<RequestGroupActionRelatedActionComponent> relatedAction;
1527
1528        /**
1529         * An optional value describing when the action should be performed.
1530         */
1531        @Child(name = "timing", type = {DateTimeType.class, Period.class, Duration.class, Range.class, Timing.class}, order=9, min=0, max=1, modifier=false, summary=false)
1532        @Description(shortDefinition="When the action should take place", formalDefinition="An optional value describing when the action should be performed." )
1533        protected Type timing;
1534
1535        /**
1536         * The participant that should perform or be responsible for this action.
1537         */
1538        @Child(name = "participant", type = {Patient.class, Person.class, Practitioner.class, RelatedPerson.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1539        @Description(shortDefinition="Who should perform the action", formalDefinition="The participant that should perform or be responsible for this action." )
1540        protected List<Reference> participant;
1541        /**
1542         * The actual objects that are the target of the reference (The participant that should perform or be responsible for this action.)
1543         */
1544        protected List<Resource> participantTarget;
1545
1546
1547        /**
1548         * The type of action to perform (create, update, remove).
1549         */
1550        @Child(name = "type", type = {Coding.class}, order=11, min=0, max=1, modifier=false, summary=false)
1551        @Description(shortDefinition="create | update | remove | fire-event", formalDefinition="The type of action to perform (create, update, remove)." )
1552        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-type")
1553        protected Coding type;
1554
1555        /**
1556         * Defines the grouping behavior for the action and its children.
1557         */
1558        @Child(name = "groupingBehavior", type = {CodeType.class}, order=12, min=0, max=1, modifier=false, summary=false)
1559        @Description(shortDefinition="visual-group | logical-group | sentence-group", formalDefinition="Defines the grouping behavior for the action and its children." )
1560        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-grouping-behavior")
1561        protected Enumeration<ActionGroupingBehavior> groupingBehavior;
1562
1563        /**
1564         * Defines the selection behavior for the action and its children.
1565         */
1566        @Child(name = "selectionBehavior", type = {CodeType.class}, order=13, min=0, max=1, modifier=false, summary=false)
1567        @Description(shortDefinition="any | all | all-or-none | exactly-one | at-most-one | one-or-more", formalDefinition="Defines the selection behavior for the action and its children." )
1568        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-selection-behavior")
1569        protected Enumeration<ActionSelectionBehavior> selectionBehavior;
1570
1571        /**
1572         * Defines the requiredness behavior for the action.
1573         */
1574        @Child(name = "requiredBehavior", type = {CodeType.class}, order=14, min=0, max=1, modifier=false, summary=false)
1575        @Description(shortDefinition="must | could | must-unless-documented", formalDefinition="Defines the requiredness behavior for the action." )
1576        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-required-behavior")
1577        protected Enumeration<ActionRequiredBehavior> requiredBehavior;
1578
1579        /**
1580         * Defines whether the action should usually be preselected.
1581         */
1582        @Child(name = "precheckBehavior", type = {CodeType.class}, order=15, min=0, max=1, modifier=false, summary=false)
1583        @Description(shortDefinition="yes | no", formalDefinition="Defines whether the action should usually be preselected." )
1584        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-precheck-behavior")
1585        protected Enumeration<ActionPrecheckBehavior> precheckBehavior;
1586
1587        /**
1588         * Defines whether the action can be selected multiple times.
1589         */
1590        @Child(name = "cardinalityBehavior", type = {CodeType.class}, order=16, min=0, max=1, modifier=false, summary=false)
1591        @Description(shortDefinition="single | multiple", formalDefinition="Defines whether the action can be selected multiple times." )
1592        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-cardinality-behavior")
1593        protected Enumeration<ActionCardinalityBehavior> cardinalityBehavior;
1594
1595        /**
1596         * The resource that is the target of the action (e.g. CommunicationRequest).
1597         */
1598        @Child(name = "resource", type = {Reference.class}, order=17, min=0, max=1, modifier=false, summary=false)
1599        @Description(shortDefinition="The target of the action", formalDefinition="The resource that is the target of the action (e.g. CommunicationRequest)." )
1600        protected Reference resource;
1601
1602        /**
1603         * The actual object that is the target of the reference (The resource that is the target of the action (e.g. CommunicationRequest).)
1604         */
1605        protected Resource resourceTarget;
1606
1607        /**
1608         * Sub actions.
1609         */
1610        @Child(name = "action", type = {RequestGroupActionComponent.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1611        @Description(shortDefinition="Sub action", formalDefinition="Sub actions." )
1612        protected List<RequestGroupActionComponent> action;
1613
1614        private static final long serialVersionUID = 362859874L;
1615
1616    /**
1617     * Constructor
1618     */
1619      public RequestGroupActionComponent() {
1620        super();
1621      }
1622
1623        /**
1624         * @return {@link #label} (A user-visible label for the action.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
1625         */
1626        public StringType getLabelElement() { 
1627          if (this.label == null)
1628            if (Configuration.errorOnAutoCreate())
1629              throw new Error("Attempt to auto-create RequestGroupActionComponent.label");
1630            else if (Configuration.doAutoCreate())
1631              this.label = new StringType(); // bb
1632          return this.label;
1633        }
1634
1635        public boolean hasLabelElement() { 
1636          return this.label != null && !this.label.isEmpty();
1637        }
1638
1639        public boolean hasLabel() { 
1640          return this.label != null && !this.label.isEmpty();
1641        }
1642
1643        /**
1644         * @param value {@link #label} (A user-visible label for the action.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
1645         */
1646        public RequestGroupActionComponent setLabelElement(StringType value) { 
1647          this.label = value;
1648          return this;
1649        }
1650
1651        /**
1652         * @return A user-visible label for the action.
1653         */
1654        public String getLabel() { 
1655          return this.label == null ? null : this.label.getValue();
1656        }
1657
1658        /**
1659         * @param value A user-visible label for the action.
1660         */
1661        public RequestGroupActionComponent setLabel(String value) { 
1662          if (Utilities.noString(value))
1663            this.label = null;
1664          else {
1665            if (this.label == null)
1666              this.label = new StringType();
1667            this.label.setValue(value);
1668          }
1669          return this;
1670        }
1671
1672        /**
1673         * @return {@link #title} (The title of the action displayed to a user.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1674         */
1675        public StringType getTitleElement() { 
1676          if (this.title == null)
1677            if (Configuration.errorOnAutoCreate())
1678              throw new Error("Attempt to auto-create RequestGroupActionComponent.title");
1679            else if (Configuration.doAutoCreate())
1680              this.title = new StringType(); // bb
1681          return this.title;
1682        }
1683
1684        public boolean hasTitleElement() { 
1685          return this.title != null && !this.title.isEmpty();
1686        }
1687
1688        public boolean hasTitle() { 
1689          return this.title != null && !this.title.isEmpty();
1690        }
1691
1692        /**
1693         * @param value {@link #title} (The title of the action displayed to a user.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1694         */
1695        public RequestGroupActionComponent setTitleElement(StringType value) { 
1696          this.title = value;
1697          return this;
1698        }
1699
1700        /**
1701         * @return The title of the action displayed to a user.
1702         */
1703        public String getTitle() { 
1704          return this.title == null ? null : this.title.getValue();
1705        }
1706
1707        /**
1708         * @param value The title of the action displayed to a user.
1709         */
1710        public RequestGroupActionComponent setTitle(String value) { 
1711          if (Utilities.noString(value))
1712            this.title = null;
1713          else {
1714            if (this.title == null)
1715              this.title = new StringType();
1716            this.title.setValue(value);
1717          }
1718          return this;
1719        }
1720
1721        /**
1722         * @return {@link #description} (A short description of the action used to provide a summary to display to the user.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1723         */
1724        public StringType getDescriptionElement() { 
1725          if (this.description == null)
1726            if (Configuration.errorOnAutoCreate())
1727              throw new Error("Attempt to auto-create RequestGroupActionComponent.description");
1728            else if (Configuration.doAutoCreate())
1729              this.description = new StringType(); // bb
1730          return this.description;
1731        }
1732
1733        public boolean hasDescriptionElement() { 
1734          return this.description != null && !this.description.isEmpty();
1735        }
1736
1737        public boolean hasDescription() { 
1738          return this.description != null && !this.description.isEmpty();
1739        }
1740
1741        /**
1742         * @param value {@link #description} (A short description of the action used to provide a summary to display to the user.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1743         */
1744        public RequestGroupActionComponent setDescriptionElement(StringType value) { 
1745          this.description = value;
1746          return this;
1747        }
1748
1749        /**
1750         * @return A short description of the action used to provide a summary to display to the user.
1751         */
1752        public String getDescription() { 
1753          return this.description == null ? null : this.description.getValue();
1754        }
1755
1756        /**
1757         * @param value A short description of the action used to provide a summary to display to the user.
1758         */
1759        public RequestGroupActionComponent setDescription(String value) { 
1760          if (Utilities.noString(value))
1761            this.description = null;
1762          else {
1763            if (this.description == null)
1764              this.description = new StringType();
1765            this.description.setValue(value);
1766          }
1767          return this;
1768        }
1769
1770        /**
1771         * @return {@link #textEquivalent} (A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that may not be capable of interpreting it dynamically.). This is the underlying object with id, value and extensions. The accessor "getTextEquivalent" gives direct access to the value
1772         */
1773        public StringType getTextEquivalentElement() { 
1774          if (this.textEquivalent == null)
1775            if (Configuration.errorOnAutoCreate())
1776              throw new Error("Attempt to auto-create RequestGroupActionComponent.textEquivalent");
1777            else if (Configuration.doAutoCreate())
1778              this.textEquivalent = new StringType(); // bb
1779          return this.textEquivalent;
1780        }
1781
1782        public boolean hasTextEquivalentElement() { 
1783          return this.textEquivalent != null && !this.textEquivalent.isEmpty();
1784        }
1785
1786        public boolean hasTextEquivalent() { 
1787          return this.textEquivalent != null && !this.textEquivalent.isEmpty();
1788        }
1789
1790        /**
1791         * @param value {@link #textEquivalent} (A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that may not be capable of interpreting it dynamically.). This is the underlying object with id, value and extensions. The accessor "getTextEquivalent" gives direct access to the value
1792         */
1793        public RequestGroupActionComponent setTextEquivalentElement(StringType value) { 
1794          this.textEquivalent = value;
1795          return this;
1796        }
1797
1798        /**
1799         * @return A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that may not be capable of interpreting it dynamically.
1800         */
1801        public String getTextEquivalent() { 
1802          return this.textEquivalent == null ? null : this.textEquivalent.getValue();
1803        }
1804
1805        /**
1806         * @param value A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that may not be capable of interpreting it dynamically.
1807         */
1808        public RequestGroupActionComponent setTextEquivalent(String value) { 
1809          if (Utilities.noString(value))
1810            this.textEquivalent = null;
1811          else {
1812            if (this.textEquivalent == null)
1813              this.textEquivalent = new StringType();
1814            this.textEquivalent.setValue(value);
1815          }
1816          return this;
1817        }
1818
1819        /**
1820         * @return {@link #code} (A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a the section of a documentation template.)
1821         */
1822        public List<CodeableConcept> getCode() { 
1823          if (this.code == null)
1824            this.code = new ArrayList<CodeableConcept>();
1825          return this.code;
1826        }
1827
1828        /**
1829         * @return Returns a reference to <code>this</code> for easy method chaining
1830         */
1831        public RequestGroupActionComponent setCode(List<CodeableConcept> theCode) { 
1832          this.code = theCode;
1833          return this;
1834        }
1835
1836        public boolean hasCode() { 
1837          if (this.code == null)
1838            return false;
1839          for (CodeableConcept item : this.code)
1840            if (!item.isEmpty())
1841              return true;
1842          return false;
1843        }
1844
1845        public CodeableConcept addCode() { //3
1846          CodeableConcept t = new CodeableConcept();
1847          if (this.code == null)
1848            this.code = new ArrayList<CodeableConcept>();
1849          this.code.add(t);
1850          return t;
1851        }
1852
1853        public RequestGroupActionComponent addCode(CodeableConcept t) { //3
1854          if (t == null)
1855            return this;
1856          if (this.code == null)
1857            this.code = new ArrayList<CodeableConcept>();
1858          this.code.add(t);
1859          return this;
1860        }
1861
1862        /**
1863         * @return The first repetition of repeating field {@link #code}, creating it if it does not already exist
1864         */
1865        public CodeableConcept getCodeFirstRep() { 
1866          if (getCode().isEmpty()) {
1867            addCode();
1868          }
1869          return getCode().get(0);
1870        }
1871
1872        /**
1873         * @return {@link #documentation} (Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.)
1874         */
1875        public List<RelatedArtifact> getDocumentation() { 
1876          if (this.documentation == null)
1877            this.documentation = new ArrayList<RelatedArtifact>();
1878          return this.documentation;
1879        }
1880
1881        /**
1882         * @return Returns a reference to <code>this</code> for easy method chaining
1883         */
1884        public RequestGroupActionComponent setDocumentation(List<RelatedArtifact> theDocumentation) { 
1885          this.documentation = theDocumentation;
1886          return this;
1887        }
1888
1889        public boolean hasDocumentation() { 
1890          if (this.documentation == null)
1891            return false;
1892          for (RelatedArtifact item : this.documentation)
1893            if (!item.isEmpty())
1894              return true;
1895          return false;
1896        }
1897
1898        public RelatedArtifact addDocumentation() { //3
1899          RelatedArtifact t = new RelatedArtifact();
1900          if (this.documentation == null)
1901            this.documentation = new ArrayList<RelatedArtifact>();
1902          this.documentation.add(t);
1903          return t;
1904        }
1905
1906        public RequestGroupActionComponent addDocumentation(RelatedArtifact t) { //3
1907          if (t == null)
1908            return this;
1909          if (this.documentation == null)
1910            this.documentation = new ArrayList<RelatedArtifact>();
1911          this.documentation.add(t);
1912          return this;
1913        }
1914
1915        /**
1916         * @return The first repetition of repeating field {@link #documentation}, creating it if it does not already exist
1917         */
1918        public RelatedArtifact getDocumentationFirstRep() { 
1919          if (getDocumentation().isEmpty()) {
1920            addDocumentation();
1921          }
1922          return getDocumentation().get(0);
1923        }
1924
1925        /**
1926         * @return {@link #condition} (An expression that describes applicability criteria, or start/stop conditions for the action.)
1927         */
1928        public List<RequestGroupActionConditionComponent> getCondition() { 
1929          if (this.condition == null)
1930            this.condition = new ArrayList<RequestGroupActionConditionComponent>();
1931          return this.condition;
1932        }
1933
1934        /**
1935         * @return Returns a reference to <code>this</code> for easy method chaining
1936         */
1937        public RequestGroupActionComponent setCondition(List<RequestGroupActionConditionComponent> theCondition) { 
1938          this.condition = theCondition;
1939          return this;
1940        }
1941
1942        public boolean hasCondition() { 
1943          if (this.condition == null)
1944            return false;
1945          for (RequestGroupActionConditionComponent item : this.condition)
1946            if (!item.isEmpty())
1947              return true;
1948          return false;
1949        }
1950
1951        public RequestGroupActionConditionComponent addCondition() { //3
1952          RequestGroupActionConditionComponent t = new RequestGroupActionConditionComponent();
1953          if (this.condition == null)
1954            this.condition = new ArrayList<RequestGroupActionConditionComponent>();
1955          this.condition.add(t);
1956          return t;
1957        }
1958
1959        public RequestGroupActionComponent addCondition(RequestGroupActionConditionComponent t) { //3
1960          if (t == null)
1961            return this;
1962          if (this.condition == null)
1963            this.condition = new ArrayList<RequestGroupActionConditionComponent>();
1964          this.condition.add(t);
1965          return this;
1966        }
1967
1968        /**
1969         * @return The first repetition of repeating field {@link #condition}, creating it if it does not already exist
1970         */
1971        public RequestGroupActionConditionComponent getConditionFirstRep() { 
1972          if (getCondition().isEmpty()) {
1973            addCondition();
1974          }
1975          return getCondition().get(0);
1976        }
1977
1978        /**
1979         * @return {@link #relatedAction} (A relationship to another action such as "before" or "30-60 minutes after start of".)
1980         */
1981        public List<RequestGroupActionRelatedActionComponent> getRelatedAction() { 
1982          if (this.relatedAction == null)
1983            this.relatedAction = new ArrayList<RequestGroupActionRelatedActionComponent>();
1984          return this.relatedAction;
1985        }
1986
1987        /**
1988         * @return Returns a reference to <code>this</code> for easy method chaining
1989         */
1990        public RequestGroupActionComponent setRelatedAction(List<RequestGroupActionRelatedActionComponent> theRelatedAction) { 
1991          this.relatedAction = theRelatedAction;
1992          return this;
1993        }
1994
1995        public boolean hasRelatedAction() { 
1996          if (this.relatedAction == null)
1997            return false;
1998          for (RequestGroupActionRelatedActionComponent item : this.relatedAction)
1999            if (!item.isEmpty())
2000              return true;
2001          return false;
2002        }
2003
2004        public RequestGroupActionRelatedActionComponent addRelatedAction() { //3
2005          RequestGroupActionRelatedActionComponent t = new RequestGroupActionRelatedActionComponent();
2006          if (this.relatedAction == null)
2007            this.relatedAction = new ArrayList<RequestGroupActionRelatedActionComponent>();
2008          this.relatedAction.add(t);
2009          return t;
2010        }
2011
2012        public RequestGroupActionComponent addRelatedAction(RequestGroupActionRelatedActionComponent t) { //3
2013          if (t == null)
2014            return this;
2015          if (this.relatedAction == null)
2016            this.relatedAction = new ArrayList<RequestGroupActionRelatedActionComponent>();
2017          this.relatedAction.add(t);
2018          return this;
2019        }
2020
2021        /**
2022         * @return The first repetition of repeating field {@link #relatedAction}, creating it if it does not already exist
2023         */
2024        public RequestGroupActionRelatedActionComponent getRelatedActionFirstRep() { 
2025          if (getRelatedAction().isEmpty()) {
2026            addRelatedAction();
2027          }
2028          return getRelatedAction().get(0);
2029        }
2030
2031        /**
2032         * @return {@link #timing} (An optional value describing when the action should be performed.)
2033         */
2034        public Type getTiming() { 
2035          return this.timing;
2036        }
2037
2038        /**
2039         * @return {@link #timing} (An optional value describing when the action should be performed.)
2040         */
2041        public DateTimeType getTimingDateTimeType() throws FHIRException { 
2042          if (this.timing == null)
2043            return null;
2044          if (!(this.timing instanceof DateTimeType))
2045            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.timing.getClass().getName()+" was encountered");
2046          return (DateTimeType) this.timing;
2047        }
2048
2049        public boolean hasTimingDateTimeType() { 
2050          return this != null && this.timing instanceof DateTimeType;
2051        }
2052
2053        /**
2054         * @return {@link #timing} (An optional value describing when the action should be performed.)
2055         */
2056        public Period getTimingPeriod() throws FHIRException { 
2057          if (this.timing == null)
2058            return null;
2059          if (!(this.timing instanceof Period))
2060            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.timing.getClass().getName()+" was encountered");
2061          return (Period) this.timing;
2062        }
2063
2064        public boolean hasTimingPeriod() { 
2065          return this != null && this.timing instanceof Period;
2066        }
2067
2068        /**
2069         * @return {@link #timing} (An optional value describing when the action should be performed.)
2070         */
2071        public Duration getTimingDuration() throws FHIRException { 
2072          if (this.timing == null)
2073            return null;
2074          if (!(this.timing instanceof Duration))
2075            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.timing.getClass().getName()+" was encountered");
2076          return (Duration) this.timing;
2077        }
2078
2079        public boolean hasTimingDuration() { 
2080          return this != null && this.timing instanceof Duration;
2081        }
2082
2083        /**
2084         * @return {@link #timing} (An optional value describing when the action should be performed.)
2085         */
2086        public Range getTimingRange() throws FHIRException { 
2087          if (this.timing == null)
2088            return null;
2089          if (!(this.timing instanceof Range))
2090            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.timing.getClass().getName()+" was encountered");
2091          return (Range) this.timing;
2092        }
2093
2094        public boolean hasTimingRange() { 
2095          return this != null && this.timing instanceof Range;
2096        }
2097
2098        /**
2099         * @return {@link #timing} (An optional value describing when the action should be performed.)
2100         */
2101        public Timing getTimingTiming() throws FHIRException { 
2102          if (this.timing == null)
2103            return null;
2104          if (!(this.timing instanceof Timing))
2105            throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.timing.getClass().getName()+" was encountered");
2106          return (Timing) this.timing;
2107        }
2108
2109        public boolean hasTimingTiming() { 
2110          return this != null && this.timing instanceof Timing;
2111        }
2112
2113        public boolean hasTiming() { 
2114          return this.timing != null && !this.timing.isEmpty();
2115        }
2116
2117        /**
2118         * @param value {@link #timing} (An optional value describing when the action should be performed.)
2119         */
2120        public RequestGroupActionComponent setTiming(Type value) throws FHIRFormatError { 
2121          if (value != null && !(value instanceof DateTimeType || value instanceof Period || value instanceof Duration || value instanceof Range || value instanceof Timing))
2122            throw new FHIRFormatError("Not the right type for RequestGroup.action.timing[x]: "+value.fhirType());
2123          this.timing = value;
2124          return this;
2125        }
2126
2127        /**
2128         * @return {@link #participant} (The participant that should perform or be responsible for this action.)
2129         */
2130        public List<Reference> getParticipant() { 
2131          if (this.participant == null)
2132            this.participant = new ArrayList<Reference>();
2133          return this.participant;
2134        }
2135
2136        /**
2137         * @return Returns a reference to <code>this</code> for easy method chaining
2138         */
2139        public RequestGroupActionComponent setParticipant(List<Reference> theParticipant) { 
2140          this.participant = theParticipant;
2141          return this;
2142        }
2143
2144        public boolean hasParticipant() { 
2145          if (this.participant == null)
2146            return false;
2147          for (Reference item : this.participant)
2148            if (!item.isEmpty())
2149              return true;
2150          return false;
2151        }
2152
2153        public Reference addParticipant() { //3
2154          Reference t = new Reference();
2155          if (this.participant == null)
2156            this.participant = new ArrayList<Reference>();
2157          this.participant.add(t);
2158          return t;
2159        }
2160
2161        public RequestGroupActionComponent addParticipant(Reference t) { //3
2162          if (t == null)
2163            return this;
2164          if (this.participant == null)
2165            this.participant = new ArrayList<Reference>();
2166          this.participant.add(t);
2167          return this;
2168        }
2169
2170        /**
2171         * @return The first repetition of repeating field {@link #participant}, creating it if it does not already exist
2172         */
2173        public Reference getParticipantFirstRep() { 
2174          if (getParticipant().isEmpty()) {
2175            addParticipant();
2176          }
2177          return getParticipant().get(0);
2178        }
2179
2180        /**
2181         * @deprecated Use Reference#setResource(IBaseResource) instead
2182         */
2183        @Deprecated
2184        public List<Resource> getParticipantTarget() { 
2185          if (this.participantTarget == null)
2186            this.participantTarget = new ArrayList<Resource>();
2187          return this.participantTarget;
2188        }
2189
2190        /**
2191         * @return {@link #type} (The type of action to perform (create, update, remove).)
2192         */
2193        public Coding getType() { 
2194          if (this.type == null)
2195            if (Configuration.errorOnAutoCreate())
2196              throw new Error("Attempt to auto-create RequestGroupActionComponent.type");
2197            else if (Configuration.doAutoCreate())
2198              this.type = new Coding(); // cc
2199          return this.type;
2200        }
2201
2202        public boolean hasType() { 
2203          return this.type != null && !this.type.isEmpty();
2204        }
2205
2206        /**
2207         * @param value {@link #type} (The type of action to perform (create, update, remove).)
2208         */
2209        public RequestGroupActionComponent setType(Coding value)  { 
2210          this.type = value;
2211          return this;
2212        }
2213
2214        /**
2215         * @return {@link #groupingBehavior} (Defines the grouping behavior for the action and its children.). This is the underlying object with id, value and extensions. The accessor "getGroupingBehavior" gives direct access to the value
2216         */
2217        public Enumeration<ActionGroupingBehavior> getGroupingBehaviorElement() { 
2218          if (this.groupingBehavior == null)
2219            if (Configuration.errorOnAutoCreate())
2220              throw new Error("Attempt to auto-create RequestGroupActionComponent.groupingBehavior");
2221            else if (Configuration.doAutoCreate())
2222              this.groupingBehavior = new Enumeration<ActionGroupingBehavior>(new ActionGroupingBehaviorEnumFactory()); // bb
2223          return this.groupingBehavior;
2224        }
2225
2226        public boolean hasGroupingBehaviorElement() { 
2227          return this.groupingBehavior != null && !this.groupingBehavior.isEmpty();
2228        }
2229
2230        public boolean hasGroupingBehavior() { 
2231          return this.groupingBehavior != null && !this.groupingBehavior.isEmpty();
2232        }
2233
2234        /**
2235         * @param value {@link #groupingBehavior} (Defines the grouping behavior for the action and its children.). This is the underlying object with id, value and extensions. The accessor "getGroupingBehavior" gives direct access to the value
2236         */
2237        public RequestGroupActionComponent setGroupingBehaviorElement(Enumeration<ActionGroupingBehavior> value) { 
2238          this.groupingBehavior = value;
2239          return this;
2240        }
2241
2242        /**
2243         * @return Defines the grouping behavior for the action and its children.
2244         */
2245        public ActionGroupingBehavior getGroupingBehavior() { 
2246          return this.groupingBehavior == null ? null : this.groupingBehavior.getValue();
2247        }
2248
2249        /**
2250         * @param value Defines the grouping behavior for the action and its children.
2251         */
2252        public RequestGroupActionComponent setGroupingBehavior(ActionGroupingBehavior value) { 
2253          if (value == null)
2254            this.groupingBehavior = null;
2255          else {
2256            if (this.groupingBehavior == null)
2257              this.groupingBehavior = new Enumeration<ActionGroupingBehavior>(new ActionGroupingBehaviorEnumFactory());
2258            this.groupingBehavior.setValue(value);
2259          }
2260          return this;
2261        }
2262
2263        /**
2264         * @return {@link #selectionBehavior} (Defines the selection behavior for the action and its children.). This is the underlying object with id, value and extensions. The accessor "getSelectionBehavior" gives direct access to the value
2265         */
2266        public Enumeration<ActionSelectionBehavior> getSelectionBehaviorElement() { 
2267          if (this.selectionBehavior == null)
2268            if (Configuration.errorOnAutoCreate())
2269              throw new Error("Attempt to auto-create RequestGroupActionComponent.selectionBehavior");
2270            else if (Configuration.doAutoCreate())
2271              this.selectionBehavior = new Enumeration<ActionSelectionBehavior>(new ActionSelectionBehaviorEnumFactory()); // bb
2272          return this.selectionBehavior;
2273        }
2274
2275        public boolean hasSelectionBehaviorElement() { 
2276          return this.selectionBehavior != null && !this.selectionBehavior.isEmpty();
2277        }
2278
2279        public boolean hasSelectionBehavior() { 
2280          return this.selectionBehavior != null && !this.selectionBehavior.isEmpty();
2281        }
2282
2283        /**
2284         * @param value {@link #selectionBehavior} (Defines the selection behavior for the action and its children.). This is the underlying object with id, value and extensions. The accessor "getSelectionBehavior" gives direct access to the value
2285         */
2286        public RequestGroupActionComponent setSelectionBehaviorElement(Enumeration<ActionSelectionBehavior> value) { 
2287          this.selectionBehavior = value;
2288          return this;
2289        }
2290
2291        /**
2292         * @return Defines the selection behavior for the action and its children.
2293         */
2294        public ActionSelectionBehavior getSelectionBehavior() { 
2295          return this.selectionBehavior == null ? null : this.selectionBehavior.getValue();
2296        }
2297
2298        /**
2299         * @param value Defines the selection behavior for the action and its children.
2300         */
2301        public RequestGroupActionComponent setSelectionBehavior(ActionSelectionBehavior value) { 
2302          if (value == null)
2303            this.selectionBehavior = null;
2304          else {
2305            if (this.selectionBehavior == null)
2306              this.selectionBehavior = new Enumeration<ActionSelectionBehavior>(new ActionSelectionBehaviorEnumFactory());
2307            this.selectionBehavior.setValue(value);
2308          }
2309          return this;
2310        }
2311
2312        /**
2313         * @return {@link #requiredBehavior} (Defines the requiredness behavior for the action.). This is the underlying object with id, value and extensions. The accessor "getRequiredBehavior" gives direct access to the value
2314         */
2315        public Enumeration<ActionRequiredBehavior> getRequiredBehaviorElement() { 
2316          if (this.requiredBehavior == null)
2317            if (Configuration.errorOnAutoCreate())
2318              throw new Error("Attempt to auto-create RequestGroupActionComponent.requiredBehavior");
2319            else if (Configuration.doAutoCreate())
2320              this.requiredBehavior = new Enumeration<ActionRequiredBehavior>(new ActionRequiredBehaviorEnumFactory()); // bb
2321          return this.requiredBehavior;
2322        }
2323
2324        public boolean hasRequiredBehaviorElement() { 
2325          return this.requiredBehavior != null && !this.requiredBehavior.isEmpty();
2326        }
2327
2328        public boolean hasRequiredBehavior() { 
2329          return this.requiredBehavior != null && !this.requiredBehavior.isEmpty();
2330        }
2331
2332        /**
2333         * @param value {@link #requiredBehavior} (Defines the requiredness behavior for the action.). This is the underlying object with id, value and extensions. The accessor "getRequiredBehavior" gives direct access to the value
2334         */
2335        public RequestGroupActionComponent setRequiredBehaviorElement(Enumeration<ActionRequiredBehavior> value) { 
2336          this.requiredBehavior = value;
2337          return this;
2338        }
2339
2340        /**
2341         * @return Defines the requiredness behavior for the action.
2342         */
2343        public ActionRequiredBehavior getRequiredBehavior() { 
2344          return this.requiredBehavior == null ? null : this.requiredBehavior.getValue();
2345        }
2346
2347        /**
2348         * @param value Defines the requiredness behavior for the action.
2349         */
2350        public RequestGroupActionComponent setRequiredBehavior(ActionRequiredBehavior value) { 
2351          if (value == null)
2352            this.requiredBehavior = null;
2353          else {
2354            if (this.requiredBehavior == null)
2355              this.requiredBehavior = new Enumeration<ActionRequiredBehavior>(new ActionRequiredBehaviorEnumFactory());
2356            this.requiredBehavior.setValue(value);
2357          }
2358          return this;
2359        }
2360
2361        /**
2362         * @return {@link #precheckBehavior} (Defines whether the action should usually be preselected.). This is the underlying object with id, value and extensions. The accessor "getPrecheckBehavior" gives direct access to the value
2363         */
2364        public Enumeration<ActionPrecheckBehavior> getPrecheckBehaviorElement() { 
2365          if (this.precheckBehavior == null)
2366            if (Configuration.errorOnAutoCreate())
2367              throw new Error("Attempt to auto-create RequestGroupActionComponent.precheckBehavior");
2368            else if (Configuration.doAutoCreate())
2369              this.precheckBehavior = new Enumeration<ActionPrecheckBehavior>(new ActionPrecheckBehaviorEnumFactory()); // bb
2370          return this.precheckBehavior;
2371        }
2372
2373        public boolean hasPrecheckBehaviorElement() { 
2374          return this.precheckBehavior != null && !this.precheckBehavior.isEmpty();
2375        }
2376
2377        public boolean hasPrecheckBehavior() { 
2378          return this.precheckBehavior != null && !this.precheckBehavior.isEmpty();
2379        }
2380
2381        /**
2382         * @param value {@link #precheckBehavior} (Defines whether the action should usually be preselected.). This is the underlying object with id, value and extensions. The accessor "getPrecheckBehavior" gives direct access to the value
2383         */
2384        public RequestGroupActionComponent setPrecheckBehaviorElement(Enumeration<ActionPrecheckBehavior> value) { 
2385          this.precheckBehavior = value;
2386          return this;
2387        }
2388
2389        /**
2390         * @return Defines whether the action should usually be preselected.
2391         */
2392        public ActionPrecheckBehavior getPrecheckBehavior() { 
2393          return this.precheckBehavior == null ? null : this.precheckBehavior.getValue();
2394        }
2395
2396        /**
2397         * @param value Defines whether the action should usually be preselected.
2398         */
2399        public RequestGroupActionComponent setPrecheckBehavior(ActionPrecheckBehavior value) { 
2400          if (value == null)
2401            this.precheckBehavior = null;
2402          else {
2403            if (this.precheckBehavior == null)
2404              this.precheckBehavior = new Enumeration<ActionPrecheckBehavior>(new ActionPrecheckBehaviorEnumFactory());
2405            this.precheckBehavior.setValue(value);
2406          }
2407          return this;
2408        }
2409
2410        /**
2411         * @return {@link #cardinalityBehavior} (Defines whether the action can be selected multiple times.). This is the underlying object with id, value and extensions. The accessor "getCardinalityBehavior" gives direct access to the value
2412         */
2413        public Enumeration<ActionCardinalityBehavior> getCardinalityBehaviorElement() { 
2414          if (this.cardinalityBehavior == null)
2415            if (Configuration.errorOnAutoCreate())
2416              throw new Error("Attempt to auto-create RequestGroupActionComponent.cardinalityBehavior");
2417            else if (Configuration.doAutoCreate())
2418              this.cardinalityBehavior = new Enumeration<ActionCardinalityBehavior>(new ActionCardinalityBehaviorEnumFactory()); // bb
2419          return this.cardinalityBehavior;
2420        }
2421
2422        public boolean hasCardinalityBehaviorElement() { 
2423          return this.cardinalityBehavior != null && !this.cardinalityBehavior.isEmpty();
2424        }
2425
2426        public boolean hasCardinalityBehavior() { 
2427          return this.cardinalityBehavior != null && !this.cardinalityBehavior.isEmpty();
2428        }
2429
2430        /**
2431         * @param value {@link #cardinalityBehavior} (Defines whether the action can be selected multiple times.). This is the underlying object with id, value and extensions. The accessor "getCardinalityBehavior" gives direct access to the value
2432         */
2433        public RequestGroupActionComponent setCardinalityBehaviorElement(Enumeration<ActionCardinalityBehavior> value) { 
2434          this.cardinalityBehavior = value;
2435          return this;
2436        }
2437
2438        /**
2439         * @return Defines whether the action can be selected multiple times.
2440         */
2441        public ActionCardinalityBehavior getCardinalityBehavior() { 
2442          return this.cardinalityBehavior == null ? null : this.cardinalityBehavior.getValue();
2443        }
2444
2445        /**
2446         * @param value Defines whether the action can be selected multiple times.
2447         */
2448        public RequestGroupActionComponent setCardinalityBehavior(ActionCardinalityBehavior value) { 
2449          if (value == null)
2450            this.cardinalityBehavior = null;
2451          else {
2452            if (this.cardinalityBehavior == null)
2453              this.cardinalityBehavior = new Enumeration<ActionCardinalityBehavior>(new ActionCardinalityBehaviorEnumFactory());
2454            this.cardinalityBehavior.setValue(value);
2455          }
2456          return this;
2457        }
2458
2459        /**
2460         * @return {@link #resource} (The resource that is the target of the action (e.g. CommunicationRequest).)
2461         */
2462        public Reference getResource() { 
2463          if (this.resource == null)
2464            if (Configuration.errorOnAutoCreate())
2465              throw new Error("Attempt to auto-create RequestGroupActionComponent.resource");
2466            else if (Configuration.doAutoCreate())
2467              this.resource = new Reference(); // cc
2468          return this.resource;
2469        }
2470
2471        public boolean hasResource() { 
2472          return this.resource != null && !this.resource.isEmpty();
2473        }
2474
2475        /**
2476         * @param value {@link #resource} (The resource that is the target of the action (e.g. CommunicationRequest).)
2477         */
2478        public RequestGroupActionComponent setResource(Reference value)  { 
2479          this.resource = value;
2480          return this;
2481        }
2482
2483        /**
2484         * @return {@link #resource} 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 resource that is the target of the action (e.g. CommunicationRequest).)
2485         */
2486        public Resource getResourceTarget() { 
2487          return this.resourceTarget;
2488        }
2489
2490        /**
2491         * @param value {@link #resource} 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 resource that is the target of the action (e.g. CommunicationRequest).)
2492         */
2493        public RequestGroupActionComponent setResourceTarget(Resource value) { 
2494          this.resourceTarget = value;
2495          return this;
2496        }
2497
2498        /**
2499         * @return {@link #action} (Sub actions.)
2500         */
2501        public List<RequestGroupActionComponent> getAction() { 
2502          if (this.action == null)
2503            this.action = new ArrayList<RequestGroupActionComponent>();
2504          return this.action;
2505        }
2506
2507        /**
2508         * @return Returns a reference to <code>this</code> for easy method chaining
2509         */
2510        public RequestGroupActionComponent setAction(List<RequestGroupActionComponent> theAction) { 
2511          this.action = theAction;
2512          return this;
2513        }
2514
2515        public boolean hasAction() { 
2516          if (this.action == null)
2517            return false;
2518          for (RequestGroupActionComponent item : this.action)
2519            if (!item.isEmpty())
2520              return true;
2521          return false;
2522        }
2523
2524        public RequestGroupActionComponent addAction() { //3
2525          RequestGroupActionComponent t = new RequestGroupActionComponent();
2526          if (this.action == null)
2527            this.action = new ArrayList<RequestGroupActionComponent>();
2528          this.action.add(t);
2529          return t;
2530        }
2531
2532        public RequestGroupActionComponent addAction(RequestGroupActionComponent t) { //3
2533          if (t == null)
2534            return this;
2535          if (this.action == null)
2536            this.action = new ArrayList<RequestGroupActionComponent>();
2537          this.action.add(t);
2538          return this;
2539        }
2540
2541        /**
2542         * @return The first repetition of repeating field {@link #action}, creating it if it does not already exist
2543         */
2544        public RequestGroupActionComponent getActionFirstRep() { 
2545          if (getAction().isEmpty()) {
2546            addAction();
2547          }
2548          return getAction().get(0);
2549        }
2550
2551        protected void listChildren(List<Property> children) {
2552          super.listChildren(children);
2553          children.add(new Property("label", "string", "A user-visible label for the action.", 0, 1, label));
2554          children.add(new Property("title", "string", "The title of the action displayed to a user.", 0, 1, title));
2555          children.add(new Property("description", "string", "A short description of the action used to provide a summary to display to the user.", 0, 1, description));
2556          children.add(new Property("textEquivalent", "string", "A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that may not be capable of interpreting it dynamically.", 0, 1, textEquivalent));
2557          children.add(new Property("code", "CodeableConcept", "A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a the section of a documentation template.", 0, java.lang.Integer.MAX_VALUE, code));
2558          children.add(new Property("documentation", "RelatedArtifact", "Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.", 0, java.lang.Integer.MAX_VALUE, documentation));
2559          children.add(new Property("condition", "", "An expression that describes applicability criteria, or start/stop conditions for the action.", 0, java.lang.Integer.MAX_VALUE, condition));
2560          children.add(new Property("relatedAction", "", "A relationship to another action such as \"before\" or \"30-60 minutes after start of\".", 0, java.lang.Integer.MAX_VALUE, relatedAction));
2561          children.add(new Property("timing[x]", "dateTime|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing));
2562          children.add(new Property("participant", "Reference(Patient|Person|Practitioner|RelatedPerson)", "The participant that should perform or be responsible for this action.", 0, java.lang.Integer.MAX_VALUE, participant));
2563          children.add(new Property("type", "Coding", "The type of action to perform (create, update, remove).", 0, 1, type));
2564          children.add(new Property("groupingBehavior", "code", "Defines the grouping behavior for the action and its children.", 0, 1, groupingBehavior));
2565          children.add(new Property("selectionBehavior", "code", "Defines the selection behavior for the action and its children.", 0, 1, selectionBehavior));
2566          children.add(new Property("requiredBehavior", "code", "Defines the requiredness behavior for the action.", 0, 1, requiredBehavior));
2567          children.add(new Property("precheckBehavior", "code", "Defines whether the action should usually be preselected.", 0, 1, precheckBehavior));
2568          children.add(new Property("cardinalityBehavior", "code", "Defines whether the action can be selected multiple times.", 0, 1, cardinalityBehavior));
2569          children.add(new Property("resource", "Reference(Any)", "The resource that is the target of the action (e.g. CommunicationRequest).", 0, 1, resource));
2570          children.add(new Property("action", "@RequestGroup.action", "Sub actions.", 0, java.lang.Integer.MAX_VALUE, action));
2571        }
2572
2573        @Override
2574        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2575          switch (_hash) {
2576          case 102727412: /*label*/  return new Property("label", "string", "A user-visible label for the action.", 0, 1, label);
2577          case 110371416: /*title*/  return new Property("title", "string", "The title of the action displayed to a user.", 0, 1, title);
2578          case -1724546052: /*description*/  return new Property("description", "string", "A short description of the action used to provide a summary to display to the user.", 0, 1, description);
2579          case -900391049: /*textEquivalent*/  return new Property("textEquivalent", "string", "A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that may not be capable of interpreting it dynamically.", 0, 1, textEquivalent);
2580          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a the section of a documentation template.", 0, java.lang.Integer.MAX_VALUE, code);
2581          case 1587405498: /*documentation*/  return new Property("documentation", "RelatedArtifact", "Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.", 0, java.lang.Integer.MAX_VALUE, documentation);
2582          case -861311717: /*condition*/  return new Property("condition", "", "An expression that describes applicability criteria, or start/stop conditions for the action.", 0, java.lang.Integer.MAX_VALUE, condition);
2583          case -384107967: /*relatedAction*/  return new Property("relatedAction", "", "A relationship to another action such as \"before\" or \"30-60 minutes after start of\".", 0, java.lang.Integer.MAX_VALUE, relatedAction);
2584          case 164632566: /*timing[x]*/  return new Property("timing[x]", "dateTime|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing);
2585          case -873664438: /*timing*/  return new Property("timing[x]", "dateTime|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing);
2586          case -1837458939: /*timingDateTime*/  return new Property("timing[x]", "dateTime|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing);
2587          case -615615829: /*timingPeriod*/  return new Property("timing[x]", "dateTime|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing);
2588          case -1327253506: /*timingDuration*/  return new Property("timing[x]", "dateTime|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing);
2589          case -710871277: /*timingRange*/  return new Property("timing[x]", "dateTime|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing);
2590          case -497554124: /*timingTiming*/  return new Property("timing[x]", "dateTime|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing);
2591          case 767422259: /*participant*/  return new Property("participant", "Reference(Patient|Person|Practitioner|RelatedPerson)", "The participant that should perform or be responsible for this action.", 0, java.lang.Integer.MAX_VALUE, participant);
2592          case 3575610: /*type*/  return new Property("type", "Coding", "The type of action to perform (create, update, remove).", 0, 1, type);
2593          case 586678389: /*groupingBehavior*/  return new Property("groupingBehavior", "code", "Defines the grouping behavior for the action and its children.", 0, 1, groupingBehavior);
2594          case 168639486: /*selectionBehavior*/  return new Property("selectionBehavior", "code", "Defines the selection behavior for the action and its children.", 0, 1, selectionBehavior);
2595          case -1163906287: /*requiredBehavior*/  return new Property("requiredBehavior", "code", "Defines the requiredness behavior for the action.", 0, 1, requiredBehavior);
2596          case -1174249033: /*precheckBehavior*/  return new Property("precheckBehavior", "code", "Defines whether the action should usually be preselected.", 0, 1, precheckBehavior);
2597          case -922577408: /*cardinalityBehavior*/  return new Property("cardinalityBehavior", "code", "Defines whether the action can be selected multiple times.", 0, 1, cardinalityBehavior);
2598          case -341064690: /*resource*/  return new Property("resource", "Reference(Any)", "The resource that is the target of the action (e.g. CommunicationRequest).", 0, 1, resource);
2599          case -1422950858: /*action*/  return new Property("action", "@RequestGroup.action", "Sub actions.", 0, java.lang.Integer.MAX_VALUE, action);
2600          default: return super.getNamedProperty(_hash, _name, _checkValid);
2601          }
2602
2603        }
2604
2605      @Override
2606      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2607        switch (hash) {
2608        case 102727412: /*label*/ return this.label == null ? new Base[0] : new Base[] {this.label}; // StringType
2609        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
2610        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
2611        case -900391049: /*textEquivalent*/ return this.textEquivalent == null ? new Base[0] : new Base[] {this.textEquivalent}; // StringType
2612        case 3059181: /*code*/ return this.code == null ? new Base[0] : this.code.toArray(new Base[this.code.size()]); // CodeableConcept
2613        case 1587405498: /*documentation*/ return this.documentation == null ? new Base[0] : this.documentation.toArray(new Base[this.documentation.size()]); // RelatedArtifact
2614        case -861311717: /*condition*/ return this.condition == null ? new Base[0] : this.condition.toArray(new Base[this.condition.size()]); // RequestGroupActionConditionComponent
2615        case -384107967: /*relatedAction*/ return this.relatedAction == null ? new Base[0] : this.relatedAction.toArray(new Base[this.relatedAction.size()]); // RequestGroupActionRelatedActionComponent
2616        case -873664438: /*timing*/ return this.timing == null ? new Base[0] : new Base[] {this.timing}; // Type
2617        case 767422259: /*participant*/ return this.participant == null ? new Base[0] : this.participant.toArray(new Base[this.participant.size()]); // Reference
2618        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Coding
2619        case 586678389: /*groupingBehavior*/ return this.groupingBehavior == null ? new Base[0] : new Base[] {this.groupingBehavior}; // Enumeration<ActionGroupingBehavior>
2620        case 168639486: /*selectionBehavior*/ return this.selectionBehavior == null ? new Base[0] : new Base[] {this.selectionBehavior}; // Enumeration<ActionSelectionBehavior>
2621        case -1163906287: /*requiredBehavior*/ return this.requiredBehavior == null ? new Base[0] : new Base[] {this.requiredBehavior}; // Enumeration<ActionRequiredBehavior>
2622        case -1174249033: /*precheckBehavior*/ return this.precheckBehavior == null ? new Base[0] : new Base[] {this.precheckBehavior}; // Enumeration<ActionPrecheckBehavior>
2623        case -922577408: /*cardinalityBehavior*/ return this.cardinalityBehavior == null ? new Base[0] : new Base[] {this.cardinalityBehavior}; // Enumeration<ActionCardinalityBehavior>
2624        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : new Base[] {this.resource}; // Reference
2625        case -1422950858: /*action*/ return this.action == null ? new Base[0] : this.action.toArray(new Base[this.action.size()]); // RequestGroupActionComponent
2626        default: return super.getProperty(hash, name, checkValid);
2627        }
2628
2629      }
2630
2631      @Override
2632      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2633        switch (hash) {
2634        case 102727412: // label
2635          this.label = castToString(value); // StringType
2636          return value;
2637        case 110371416: // title
2638          this.title = castToString(value); // StringType
2639          return value;
2640        case -1724546052: // description
2641          this.description = castToString(value); // StringType
2642          return value;
2643        case -900391049: // textEquivalent
2644          this.textEquivalent = castToString(value); // StringType
2645          return value;
2646        case 3059181: // code
2647          this.getCode().add(castToCodeableConcept(value)); // CodeableConcept
2648          return value;
2649        case 1587405498: // documentation
2650          this.getDocumentation().add(castToRelatedArtifact(value)); // RelatedArtifact
2651          return value;
2652        case -861311717: // condition
2653          this.getCondition().add((RequestGroupActionConditionComponent) value); // RequestGroupActionConditionComponent
2654          return value;
2655        case -384107967: // relatedAction
2656          this.getRelatedAction().add((RequestGroupActionRelatedActionComponent) value); // RequestGroupActionRelatedActionComponent
2657          return value;
2658        case -873664438: // timing
2659          this.timing = castToType(value); // Type
2660          return value;
2661        case 767422259: // participant
2662          this.getParticipant().add(castToReference(value)); // Reference
2663          return value;
2664        case 3575610: // type
2665          this.type = castToCoding(value); // Coding
2666          return value;
2667        case 586678389: // groupingBehavior
2668          value = new ActionGroupingBehaviorEnumFactory().fromType(castToCode(value));
2669          this.groupingBehavior = (Enumeration) value; // Enumeration<ActionGroupingBehavior>
2670          return value;
2671        case 168639486: // selectionBehavior
2672          value = new ActionSelectionBehaviorEnumFactory().fromType(castToCode(value));
2673          this.selectionBehavior = (Enumeration) value; // Enumeration<ActionSelectionBehavior>
2674          return value;
2675        case -1163906287: // requiredBehavior
2676          value = new ActionRequiredBehaviorEnumFactory().fromType(castToCode(value));
2677          this.requiredBehavior = (Enumeration) value; // Enumeration<ActionRequiredBehavior>
2678          return value;
2679        case -1174249033: // precheckBehavior
2680          value = new ActionPrecheckBehaviorEnumFactory().fromType(castToCode(value));
2681          this.precheckBehavior = (Enumeration) value; // Enumeration<ActionPrecheckBehavior>
2682          return value;
2683        case -922577408: // cardinalityBehavior
2684          value = new ActionCardinalityBehaviorEnumFactory().fromType(castToCode(value));
2685          this.cardinalityBehavior = (Enumeration) value; // Enumeration<ActionCardinalityBehavior>
2686          return value;
2687        case -341064690: // resource
2688          this.resource = castToReference(value); // Reference
2689          return value;
2690        case -1422950858: // action
2691          this.getAction().add((RequestGroupActionComponent) value); // RequestGroupActionComponent
2692          return value;
2693        default: return super.setProperty(hash, name, value);
2694        }
2695
2696      }
2697
2698      @Override
2699      public Base setProperty(String name, Base value) throws FHIRException {
2700        if (name.equals("label")) {
2701          this.label = castToString(value); // StringType
2702        } else if (name.equals("title")) {
2703          this.title = castToString(value); // StringType
2704        } else if (name.equals("description")) {
2705          this.description = castToString(value); // StringType
2706        } else if (name.equals("textEquivalent")) {
2707          this.textEquivalent = castToString(value); // StringType
2708        } else if (name.equals("code")) {
2709          this.getCode().add(castToCodeableConcept(value));
2710        } else if (name.equals("documentation")) {
2711          this.getDocumentation().add(castToRelatedArtifact(value));
2712        } else if (name.equals("condition")) {
2713          this.getCondition().add((RequestGroupActionConditionComponent) value);
2714        } else if (name.equals("relatedAction")) {
2715          this.getRelatedAction().add((RequestGroupActionRelatedActionComponent) value);
2716        } else if (name.equals("timing[x]")) {
2717          this.timing = castToType(value); // Type
2718        } else if (name.equals("participant")) {
2719          this.getParticipant().add(castToReference(value));
2720        } else if (name.equals("type")) {
2721          this.type = castToCoding(value); // Coding
2722        } else if (name.equals("groupingBehavior")) {
2723          value = new ActionGroupingBehaviorEnumFactory().fromType(castToCode(value));
2724          this.groupingBehavior = (Enumeration) value; // Enumeration<ActionGroupingBehavior>
2725        } else if (name.equals("selectionBehavior")) {
2726          value = new ActionSelectionBehaviorEnumFactory().fromType(castToCode(value));
2727          this.selectionBehavior = (Enumeration) value; // Enumeration<ActionSelectionBehavior>
2728        } else if (name.equals("requiredBehavior")) {
2729          value = new ActionRequiredBehaviorEnumFactory().fromType(castToCode(value));
2730          this.requiredBehavior = (Enumeration) value; // Enumeration<ActionRequiredBehavior>
2731        } else if (name.equals("precheckBehavior")) {
2732          value = new ActionPrecheckBehaviorEnumFactory().fromType(castToCode(value));
2733          this.precheckBehavior = (Enumeration) value; // Enumeration<ActionPrecheckBehavior>
2734        } else if (name.equals("cardinalityBehavior")) {
2735          value = new ActionCardinalityBehaviorEnumFactory().fromType(castToCode(value));
2736          this.cardinalityBehavior = (Enumeration) value; // Enumeration<ActionCardinalityBehavior>
2737        } else if (name.equals("resource")) {
2738          this.resource = castToReference(value); // Reference
2739        } else if (name.equals("action")) {
2740          this.getAction().add((RequestGroupActionComponent) value);
2741        } else
2742          return super.setProperty(name, value);
2743        return value;
2744      }
2745
2746      @Override
2747      public Base makeProperty(int hash, String name) throws FHIRException {
2748        switch (hash) {
2749        case 102727412:  return getLabelElement();
2750        case 110371416:  return getTitleElement();
2751        case -1724546052:  return getDescriptionElement();
2752        case -900391049:  return getTextEquivalentElement();
2753        case 3059181:  return addCode(); 
2754        case 1587405498:  return addDocumentation(); 
2755        case -861311717:  return addCondition(); 
2756        case -384107967:  return addRelatedAction(); 
2757        case 164632566:  return getTiming(); 
2758        case -873664438:  return getTiming(); 
2759        case 767422259:  return addParticipant(); 
2760        case 3575610:  return getType(); 
2761        case 586678389:  return getGroupingBehaviorElement();
2762        case 168639486:  return getSelectionBehaviorElement();
2763        case -1163906287:  return getRequiredBehaviorElement();
2764        case -1174249033:  return getPrecheckBehaviorElement();
2765        case -922577408:  return getCardinalityBehaviorElement();
2766        case -341064690:  return getResource(); 
2767        case -1422950858:  return addAction(); 
2768        default: return super.makeProperty(hash, name);
2769        }
2770
2771      }
2772
2773      @Override
2774      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2775        switch (hash) {
2776        case 102727412: /*label*/ return new String[] {"string"};
2777        case 110371416: /*title*/ return new String[] {"string"};
2778        case -1724546052: /*description*/ return new String[] {"string"};
2779        case -900391049: /*textEquivalent*/ return new String[] {"string"};
2780        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2781        case 1587405498: /*documentation*/ return new String[] {"RelatedArtifact"};
2782        case -861311717: /*condition*/ return new String[] {};
2783        case -384107967: /*relatedAction*/ return new String[] {};
2784        case -873664438: /*timing*/ return new String[] {"dateTime", "Period", "Duration", "Range", "Timing"};
2785        case 767422259: /*participant*/ return new String[] {"Reference"};
2786        case 3575610: /*type*/ return new String[] {"Coding"};
2787        case 586678389: /*groupingBehavior*/ return new String[] {"code"};
2788        case 168639486: /*selectionBehavior*/ return new String[] {"code"};
2789        case -1163906287: /*requiredBehavior*/ return new String[] {"code"};
2790        case -1174249033: /*precheckBehavior*/ return new String[] {"code"};
2791        case -922577408: /*cardinalityBehavior*/ return new String[] {"code"};
2792        case -341064690: /*resource*/ return new String[] {"Reference"};
2793        case -1422950858: /*action*/ return new String[] {"@RequestGroup.action"};
2794        default: return super.getTypesForProperty(hash, name);
2795        }
2796
2797      }
2798
2799      @Override
2800      public Base addChild(String name) throws FHIRException {
2801        if (name.equals("label")) {
2802          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.label");
2803        }
2804        else if (name.equals("title")) {
2805          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.title");
2806        }
2807        else if (name.equals("description")) {
2808          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.description");
2809        }
2810        else if (name.equals("textEquivalent")) {
2811          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.textEquivalent");
2812        }
2813        else if (name.equals("code")) {
2814          return addCode();
2815        }
2816        else if (name.equals("documentation")) {
2817          return addDocumentation();
2818        }
2819        else if (name.equals("condition")) {
2820          return addCondition();
2821        }
2822        else if (name.equals("relatedAction")) {
2823          return addRelatedAction();
2824        }
2825        else if (name.equals("timingDateTime")) {
2826          this.timing = new DateTimeType();
2827          return this.timing;
2828        }
2829        else if (name.equals("timingPeriod")) {
2830          this.timing = new Period();
2831          return this.timing;
2832        }
2833        else if (name.equals("timingDuration")) {
2834          this.timing = new Duration();
2835          return this.timing;
2836        }
2837        else if (name.equals("timingRange")) {
2838          this.timing = new Range();
2839          return this.timing;
2840        }
2841        else if (name.equals("timingTiming")) {
2842          this.timing = new Timing();
2843          return this.timing;
2844        }
2845        else if (name.equals("participant")) {
2846          return addParticipant();
2847        }
2848        else if (name.equals("type")) {
2849          this.type = new Coding();
2850          return this.type;
2851        }
2852        else if (name.equals("groupingBehavior")) {
2853          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.groupingBehavior");
2854        }
2855        else if (name.equals("selectionBehavior")) {
2856          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.selectionBehavior");
2857        }
2858        else if (name.equals("requiredBehavior")) {
2859          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.requiredBehavior");
2860        }
2861        else if (name.equals("precheckBehavior")) {
2862          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.precheckBehavior");
2863        }
2864        else if (name.equals("cardinalityBehavior")) {
2865          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.cardinalityBehavior");
2866        }
2867        else if (name.equals("resource")) {
2868          this.resource = new Reference();
2869          return this.resource;
2870        }
2871        else if (name.equals("action")) {
2872          return addAction();
2873        }
2874        else
2875          return super.addChild(name);
2876      }
2877
2878      public RequestGroupActionComponent copy() {
2879        RequestGroupActionComponent dst = new RequestGroupActionComponent();
2880        copyValues(dst);
2881        dst.label = label == null ? null : label.copy();
2882        dst.title = title == null ? null : title.copy();
2883        dst.description = description == null ? null : description.copy();
2884        dst.textEquivalent = textEquivalent == null ? null : textEquivalent.copy();
2885        if (code != null) {
2886          dst.code = new ArrayList<CodeableConcept>();
2887          for (CodeableConcept i : code)
2888            dst.code.add(i.copy());
2889        };
2890        if (documentation != null) {
2891          dst.documentation = new ArrayList<RelatedArtifact>();
2892          for (RelatedArtifact i : documentation)
2893            dst.documentation.add(i.copy());
2894        };
2895        if (condition != null) {
2896          dst.condition = new ArrayList<RequestGroupActionConditionComponent>();
2897          for (RequestGroupActionConditionComponent i : condition)
2898            dst.condition.add(i.copy());
2899        };
2900        if (relatedAction != null) {
2901          dst.relatedAction = new ArrayList<RequestGroupActionRelatedActionComponent>();
2902          for (RequestGroupActionRelatedActionComponent i : relatedAction)
2903            dst.relatedAction.add(i.copy());
2904        };
2905        dst.timing = timing == null ? null : timing.copy();
2906        if (participant != null) {
2907          dst.participant = new ArrayList<Reference>();
2908          for (Reference i : participant)
2909            dst.participant.add(i.copy());
2910        };
2911        dst.type = type == null ? null : type.copy();
2912        dst.groupingBehavior = groupingBehavior == null ? null : groupingBehavior.copy();
2913        dst.selectionBehavior = selectionBehavior == null ? null : selectionBehavior.copy();
2914        dst.requiredBehavior = requiredBehavior == null ? null : requiredBehavior.copy();
2915        dst.precheckBehavior = precheckBehavior == null ? null : precheckBehavior.copy();
2916        dst.cardinalityBehavior = cardinalityBehavior == null ? null : cardinalityBehavior.copy();
2917        dst.resource = resource == null ? null : resource.copy();
2918        if (action != null) {
2919          dst.action = new ArrayList<RequestGroupActionComponent>();
2920          for (RequestGroupActionComponent i : action)
2921            dst.action.add(i.copy());
2922        };
2923        return dst;
2924      }
2925
2926      @Override
2927      public boolean equalsDeep(Base other_) {
2928        if (!super.equalsDeep(other_))
2929          return false;
2930        if (!(other_ instanceof RequestGroupActionComponent))
2931          return false;
2932        RequestGroupActionComponent o = (RequestGroupActionComponent) other_;
2933        return compareDeep(label, o.label, true) && compareDeep(title, o.title, true) && compareDeep(description, o.description, true)
2934           && compareDeep(textEquivalent, o.textEquivalent, true) && compareDeep(code, o.code, true) && compareDeep(documentation, o.documentation, true)
2935           && compareDeep(condition, o.condition, true) && compareDeep(relatedAction, o.relatedAction, true)
2936           && compareDeep(timing, o.timing, true) && compareDeep(participant, o.participant, true) && compareDeep(type, o.type, true)
2937           && compareDeep(groupingBehavior, o.groupingBehavior, true) && compareDeep(selectionBehavior, o.selectionBehavior, true)
2938           && compareDeep(requiredBehavior, o.requiredBehavior, true) && compareDeep(precheckBehavior, o.precheckBehavior, true)
2939           && compareDeep(cardinalityBehavior, o.cardinalityBehavior, true) && compareDeep(resource, o.resource, true)
2940           && compareDeep(action, o.action, true);
2941      }
2942
2943      @Override
2944      public boolean equalsShallow(Base other_) {
2945        if (!super.equalsShallow(other_))
2946          return false;
2947        if (!(other_ instanceof RequestGroupActionComponent))
2948          return false;
2949        RequestGroupActionComponent o = (RequestGroupActionComponent) other_;
2950        return compareValues(label, o.label, true) && compareValues(title, o.title, true) && compareValues(description, o.description, true)
2951           && compareValues(textEquivalent, o.textEquivalent, true) && compareValues(groupingBehavior, o.groupingBehavior, true)
2952           && compareValues(selectionBehavior, o.selectionBehavior, true) && compareValues(requiredBehavior, o.requiredBehavior, true)
2953           && compareValues(precheckBehavior, o.precheckBehavior, true) && compareValues(cardinalityBehavior, o.cardinalityBehavior, true)
2954          ;
2955      }
2956
2957      public boolean isEmpty() {
2958        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(label, title, description
2959          , textEquivalent, code, documentation, condition, relatedAction, timing, participant
2960          , type, groupingBehavior, selectionBehavior, requiredBehavior, precheckBehavior, cardinalityBehavior
2961          , resource, action);
2962      }
2963
2964  public String fhirType() {
2965    return "RequestGroup.action";
2966
2967  }
2968
2969  }
2970
2971    @Block()
2972    public static class RequestGroupActionConditionComponent extends BackboneElement implements IBaseBackboneElement {
2973        /**
2974         * The kind of condition.
2975         */
2976        @Child(name = "kind", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2977        @Description(shortDefinition="applicability | start | stop", formalDefinition="The kind of condition." )
2978        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-condition-kind")
2979        protected Enumeration<ActionConditionKind> kind;
2980
2981        /**
2982         * A brief, natural language description of the condition that effectively communicates the intended semantics.
2983         */
2984        @Child(name = "description", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
2985        @Description(shortDefinition="Natural language description of the condition", formalDefinition="A brief, natural language description of the condition that effectively communicates the intended semantics." )
2986        protected StringType description;
2987
2988        /**
2989         * The media type of the language for the expression.
2990         */
2991        @Child(name = "language", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
2992        @Description(shortDefinition="Language of the expression", formalDefinition="The media type of the language for the expression." )
2993        protected StringType language;
2994
2995        /**
2996         * An expression that returns true or false, indicating whether or not the condition is satisfied.
2997         */
2998        @Child(name = "expression", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
2999        @Description(shortDefinition="Boolean-valued expression", formalDefinition="An expression that returns true or false, indicating whether or not the condition is satisfied." )
3000        protected StringType expression;
3001
3002        private static final long serialVersionUID = 944300105L;
3003
3004    /**
3005     * Constructor
3006     */
3007      public RequestGroupActionConditionComponent() {
3008        super();
3009      }
3010
3011    /**
3012     * Constructor
3013     */
3014      public RequestGroupActionConditionComponent(Enumeration<ActionConditionKind> kind) {
3015        super();
3016        this.kind = kind;
3017      }
3018
3019        /**
3020         * @return {@link #kind} (The kind of condition.). This is the underlying object with id, value and extensions. The accessor "getKind" gives direct access to the value
3021         */
3022        public Enumeration<ActionConditionKind> getKindElement() { 
3023          if (this.kind == null)
3024            if (Configuration.errorOnAutoCreate())
3025              throw new Error("Attempt to auto-create RequestGroupActionConditionComponent.kind");
3026            else if (Configuration.doAutoCreate())
3027              this.kind = new Enumeration<ActionConditionKind>(new ActionConditionKindEnumFactory()); // bb
3028          return this.kind;
3029        }
3030
3031        public boolean hasKindElement() { 
3032          return this.kind != null && !this.kind.isEmpty();
3033        }
3034
3035        public boolean hasKind() { 
3036          return this.kind != null && !this.kind.isEmpty();
3037        }
3038
3039        /**
3040         * @param value {@link #kind} (The kind of condition.). This is the underlying object with id, value and extensions. The accessor "getKind" gives direct access to the value
3041         */
3042        public RequestGroupActionConditionComponent setKindElement(Enumeration<ActionConditionKind> value) { 
3043          this.kind = value;
3044          return this;
3045        }
3046
3047        /**
3048         * @return The kind of condition.
3049         */
3050        public ActionConditionKind getKind() { 
3051          return this.kind == null ? null : this.kind.getValue();
3052        }
3053
3054        /**
3055         * @param value The kind of condition.
3056         */
3057        public RequestGroupActionConditionComponent setKind(ActionConditionKind value) { 
3058            if (this.kind == null)
3059              this.kind = new Enumeration<ActionConditionKind>(new ActionConditionKindEnumFactory());
3060            this.kind.setValue(value);
3061          return this;
3062        }
3063
3064        /**
3065         * @return {@link #description} (A brief, natural language description of the condition that effectively communicates the intended semantics.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
3066         */
3067        public StringType getDescriptionElement() { 
3068          if (this.description == null)
3069            if (Configuration.errorOnAutoCreate())
3070              throw new Error("Attempt to auto-create RequestGroupActionConditionComponent.description");
3071            else if (Configuration.doAutoCreate())
3072              this.description = new StringType(); // bb
3073          return this.description;
3074        }
3075
3076        public boolean hasDescriptionElement() { 
3077          return this.description != null && !this.description.isEmpty();
3078        }
3079
3080        public boolean hasDescription() { 
3081          return this.description != null && !this.description.isEmpty();
3082        }
3083
3084        /**
3085         * @param value {@link #description} (A brief, natural language description of the condition that effectively communicates the intended semantics.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
3086         */
3087        public RequestGroupActionConditionComponent setDescriptionElement(StringType value) { 
3088          this.description = value;
3089          return this;
3090        }
3091
3092        /**
3093         * @return A brief, natural language description of the condition that effectively communicates the intended semantics.
3094         */
3095        public String getDescription() { 
3096          return this.description == null ? null : this.description.getValue();
3097        }
3098
3099        /**
3100         * @param value A brief, natural language description of the condition that effectively communicates the intended semantics.
3101         */
3102        public RequestGroupActionConditionComponent setDescription(String value) { 
3103          if (Utilities.noString(value))
3104            this.description = null;
3105          else {
3106            if (this.description == null)
3107              this.description = new StringType();
3108            this.description.setValue(value);
3109          }
3110          return this;
3111        }
3112
3113        /**
3114         * @return {@link #language} (The media type of the language for the expression.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
3115         */
3116        public StringType getLanguageElement() { 
3117          if (this.language == null)
3118            if (Configuration.errorOnAutoCreate())
3119              throw new Error("Attempt to auto-create RequestGroupActionConditionComponent.language");
3120            else if (Configuration.doAutoCreate())
3121              this.language = new StringType(); // bb
3122          return this.language;
3123        }
3124
3125        public boolean hasLanguageElement() { 
3126          return this.language != null && !this.language.isEmpty();
3127        }
3128
3129        public boolean hasLanguage() { 
3130          return this.language != null && !this.language.isEmpty();
3131        }
3132
3133        /**
3134         * @param value {@link #language} (The media type of the language for the expression.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
3135         */
3136        public RequestGroupActionConditionComponent setLanguageElement(StringType value) { 
3137          this.language = value;
3138          return this;
3139        }
3140
3141        /**
3142         * @return The media type of the language for the expression.
3143         */
3144        public String getLanguage() { 
3145          return this.language == null ? null : this.language.getValue();
3146        }
3147
3148        /**
3149         * @param value The media type of the language for the expression.
3150         */
3151        public RequestGroupActionConditionComponent setLanguage(String value) { 
3152          if (Utilities.noString(value))
3153            this.language = null;
3154          else {
3155            if (this.language == null)
3156              this.language = new StringType();
3157            this.language.setValue(value);
3158          }
3159          return this;
3160        }
3161
3162        /**
3163         * @return {@link #expression} (An expression that returns true or false, indicating whether or not the condition is satisfied.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
3164         */
3165        public StringType getExpressionElement() { 
3166          if (this.expression == null)
3167            if (Configuration.errorOnAutoCreate())
3168              throw new Error("Attempt to auto-create RequestGroupActionConditionComponent.expression");
3169            else if (Configuration.doAutoCreate())
3170              this.expression = new StringType(); // bb
3171          return this.expression;
3172        }
3173
3174        public boolean hasExpressionElement() { 
3175          return this.expression != null && !this.expression.isEmpty();
3176        }
3177
3178        public boolean hasExpression() { 
3179          return this.expression != null && !this.expression.isEmpty();
3180        }
3181
3182        /**
3183         * @param value {@link #expression} (An expression that returns true or false, indicating whether or not the condition is satisfied.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
3184         */
3185        public RequestGroupActionConditionComponent setExpressionElement(StringType value) { 
3186          this.expression = value;
3187          return this;
3188        }
3189
3190        /**
3191         * @return An expression that returns true or false, indicating whether or not the condition is satisfied.
3192         */
3193        public String getExpression() { 
3194          return this.expression == null ? null : this.expression.getValue();
3195        }
3196
3197        /**
3198         * @param value An expression that returns true or false, indicating whether or not the condition is satisfied.
3199         */
3200        public RequestGroupActionConditionComponent setExpression(String value) { 
3201          if (Utilities.noString(value))
3202            this.expression = null;
3203          else {
3204            if (this.expression == null)
3205              this.expression = new StringType();
3206            this.expression.setValue(value);
3207          }
3208          return this;
3209        }
3210
3211        protected void listChildren(List<Property> children) {
3212          super.listChildren(children);
3213          children.add(new Property("kind", "code", "The kind of condition.", 0, 1, kind));
3214          children.add(new Property("description", "string", "A brief, natural language description of the condition that effectively communicates the intended semantics.", 0, 1, description));
3215          children.add(new Property("language", "string", "The media type of the language for the expression.", 0, 1, language));
3216          children.add(new Property("expression", "string", "An expression that returns true or false, indicating whether or not the condition is satisfied.", 0, 1, expression));
3217        }
3218
3219        @Override
3220        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3221          switch (_hash) {
3222          case 3292052: /*kind*/  return new Property("kind", "code", "The kind of condition.", 0, 1, kind);
3223          case -1724546052: /*description*/  return new Property("description", "string", "A brief, natural language description of the condition that effectively communicates the intended semantics.", 0, 1, description);
3224          case -1613589672: /*language*/  return new Property("language", "string", "The media type of the language for the expression.", 0, 1, language);
3225          case -1795452264: /*expression*/  return new Property("expression", "string", "An expression that returns true or false, indicating whether or not the condition is satisfied.", 0, 1, expression);
3226          default: return super.getNamedProperty(_hash, _name, _checkValid);
3227          }
3228
3229        }
3230
3231      @Override
3232      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3233        switch (hash) {
3234        case 3292052: /*kind*/ return this.kind == null ? new Base[0] : new Base[] {this.kind}; // Enumeration<ActionConditionKind>
3235        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
3236        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // StringType
3237        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // StringType
3238        default: return super.getProperty(hash, name, checkValid);
3239        }
3240
3241      }
3242
3243      @Override
3244      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3245        switch (hash) {
3246        case 3292052: // kind
3247          value = new ActionConditionKindEnumFactory().fromType(castToCode(value));
3248          this.kind = (Enumeration) value; // Enumeration<ActionConditionKind>
3249          return value;
3250        case -1724546052: // description
3251          this.description = castToString(value); // StringType
3252          return value;
3253        case -1613589672: // language
3254          this.language = castToString(value); // StringType
3255          return value;
3256        case -1795452264: // expression
3257          this.expression = castToString(value); // StringType
3258          return value;
3259        default: return super.setProperty(hash, name, value);
3260        }
3261
3262      }
3263
3264      @Override
3265      public Base setProperty(String name, Base value) throws FHIRException {
3266        if (name.equals("kind")) {
3267          value = new ActionConditionKindEnumFactory().fromType(castToCode(value));
3268          this.kind = (Enumeration) value; // Enumeration<ActionConditionKind>
3269        } else if (name.equals("description")) {
3270          this.description = castToString(value); // StringType
3271        } else if (name.equals("language")) {
3272          this.language = castToString(value); // StringType
3273        } else if (name.equals("expression")) {
3274          this.expression = castToString(value); // StringType
3275        } else
3276          return super.setProperty(name, value);
3277        return value;
3278      }
3279
3280      @Override
3281      public Base makeProperty(int hash, String name) throws FHIRException {
3282        switch (hash) {
3283        case 3292052:  return getKindElement();
3284        case -1724546052:  return getDescriptionElement();
3285        case -1613589672:  return getLanguageElement();
3286        case -1795452264:  return getExpressionElement();
3287        default: return super.makeProperty(hash, name);
3288        }
3289
3290      }
3291
3292      @Override
3293      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3294        switch (hash) {
3295        case 3292052: /*kind*/ return new String[] {"code"};
3296        case -1724546052: /*description*/ return new String[] {"string"};
3297        case -1613589672: /*language*/ return new String[] {"string"};
3298        case -1795452264: /*expression*/ return new String[] {"string"};
3299        default: return super.getTypesForProperty(hash, name);
3300        }
3301
3302      }
3303
3304      @Override
3305      public Base addChild(String name) throws FHIRException {
3306        if (name.equals("kind")) {
3307          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.kind");
3308        }
3309        else if (name.equals("description")) {
3310          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.description");
3311        }
3312        else if (name.equals("language")) {
3313          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.language");
3314        }
3315        else if (name.equals("expression")) {
3316          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.expression");
3317        }
3318        else
3319          return super.addChild(name);
3320      }
3321
3322      public RequestGroupActionConditionComponent copy() {
3323        RequestGroupActionConditionComponent dst = new RequestGroupActionConditionComponent();
3324        copyValues(dst);
3325        dst.kind = kind == null ? null : kind.copy();
3326        dst.description = description == null ? null : description.copy();
3327        dst.language = language == null ? null : language.copy();
3328        dst.expression = expression == null ? null : expression.copy();
3329        return dst;
3330      }
3331
3332      @Override
3333      public boolean equalsDeep(Base other_) {
3334        if (!super.equalsDeep(other_))
3335          return false;
3336        if (!(other_ instanceof RequestGroupActionConditionComponent))
3337          return false;
3338        RequestGroupActionConditionComponent o = (RequestGroupActionConditionComponent) other_;
3339        return compareDeep(kind, o.kind, true) && compareDeep(description, o.description, true) && compareDeep(language, o.language, true)
3340           && compareDeep(expression, o.expression, true);
3341      }
3342
3343      @Override
3344      public boolean equalsShallow(Base other_) {
3345        if (!super.equalsShallow(other_))
3346          return false;
3347        if (!(other_ instanceof RequestGroupActionConditionComponent))
3348          return false;
3349        RequestGroupActionConditionComponent o = (RequestGroupActionConditionComponent) other_;
3350        return compareValues(kind, o.kind, true) && compareValues(description, o.description, true) && compareValues(language, o.language, true)
3351           && compareValues(expression, o.expression, true);
3352      }
3353
3354      public boolean isEmpty() {
3355        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(kind, description, language
3356          , expression);
3357      }
3358
3359  public String fhirType() {
3360    return "RequestGroup.action.condition";
3361
3362  }
3363
3364  }
3365
3366    @Block()
3367    public static class RequestGroupActionRelatedActionComponent extends BackboneElement implements IBaseBackboneElement {
3368        /**
3369         * The element id of the action this is related to.
3370         */
3371        @Child(name = "actionId", type = {IdType.class}, order=1, min=1, max=1, modifier=false, summary=false)
3372        @Description(shortDefinition="What action this is related to", formalDefinition="The element id of the action this is related to." )
3373        protected IdType actionId;
3374
3375        /**
3376         * The relationship of this action to the related action.
3377         */
3378        @Child(name = "relationship", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=false)
3379        @Description(shortDefinition="before-start | before | before-end | concurrent-with-start | concurrent | concurrent-with-end | after-start | after | after-end", formalDefinition="The relationship of this action to the related action." )
3380        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-relationship-type")
3381        protected Enumeration<ActionRelationshipType> relationship;
3382
3383        /**
3384         * A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.
3385         */
3386        @Child(name = "offset", type = {Duration.class, Range.class}, order=3, min=0, max=1, modifier=false, summary=false)
3387        @Description(shortDefinition="Time offset for the relationship", formalDefinition="A duration or range of durations to apply to the relationship. For example, 30-60 minutes before." )
3388        protected Type offset;
3389
3390        private static final long serialVersionUID = 1063306770L;
3391
3392    /**
3393     * Constructor
3394     */
3395      public RequestGroupActionRelatedActionComponent() {
3396        super();
3397      }
3398
3399    /**
3400     * Constructor
3401     */
3402      public RequestGroupActionRelatedActionComponent(IdType actionId, Enumeration<ActionRelationshipType> relationship) {
3403        super();
3404        this.actionId = actionId;
3405        this.relationship = relationship;
3406      }
3407
3408        /**
3409         * @return {@link #actionId} (The element id of the action this is related to.). This is the underlying object with id, value and extensions. The accessor "getActionId" gives direct access to the value
3410         */
3411        public IdType getActionIdElement() { 
3412          if (this.actionId == null)
3413            if (Configuration.errorOnAutoCreate())
3414              throw new Error("Attempt to auto-create RequestGroupActionRelatedActionComponent.actionId");
3415            else if (Configuration.doAutoCreate())
3416              this.actionId = new IdType(); // bb
3417          return this.actionId;
3418        }
3419
3420        public boolean hasActionIdElement() { 
3421          return this.actionId != null && !this.actionId.isEmpty();
3422        }
3423
3424        public boolean hasActionId() { 
3425          return this.actionId != null && !this.actionId.isEmpty();
3426        }
3427
3428        /**
3429         * @param value {@link #actionId} (The element id of the action this is related to.). This is the underlying object with id, value and extensions. The accessor "getActionId" gives direct access to the value
3430         */
3431        public RequestGroupActionRelatedActionComponent setActionIdElement(IdType value) { 
3432          this.actionId = value;
3433          return this;
3434        }
3435
3436        /**
3437         * @return The element id of the action this is related to.
3438         */
3439        public String getActionId() { 
3440          return this.actionId == null ? null : this.actionId.getValue();
3441        }
3442
3443        /**
3444         * @param value The element id of the action this is related to.
3445         */
3446        public RequestGroupActionRelatedActionComponent setActionId(String value) { 
3447            if (this.actionId == null)
3448              this.actionId = new IdType();
3449            this.actionId.setValue(value);
3450          return this;
3451        }
3452
3453        /**
3454         * @return {@link #relationship} (The relationship of this action to the related action.). This is the underlying object with id, value and extensions. The accessor "getRelationship" gives direct access to the value
3455         */
3456        public Enumeration<ActionRelationshipType> getRelationshipElement() { 
3457          if (this.relationship == null)
3458            if (Configuration.errorOnAutoCreate())
3459              throw new Error("Attempt to auto-create RequestGroupActionRelatedActionComponent.relationship");
3460            else if (Configuration.doAutoCreate())
3461              this.relationship = new Enumeration<ActionRelationshipType>(new ActionRelationshipTypeEnumFactory()); // bb
3462          return this.relationship;
3463        }
3464
3465        public boolean hasRelationshipElement() { 
3466          return this.relationship != null && !this.relationship.isEmpty();
3467        }
3468
3469        public boolean hasRelationship() { 
3470          return this.relationship != null && !this.relationship.isEmpty();
3471        }
3472
3473        /**
3474         * @param value {@link #relationship} (The relationship of this action to the related action.). This is the underlying object with id, value and extensions. The accessor "getRelationship" gives direct access to the value
3475         */
3476        public RequestGroupActionRelatedActionComponent setRelationshipElement(Enumeration<ActionRelationshipType> value) { 
3477          this.relationship = value;
3478          return this;
3479        }
3480
3481        /**
3482         * @return The relationship of this action to the related action.
3483         */
3484        public ActionRelationshipType getRelationship() { 
3485          return this.relationship == null ? null : this.relationship.getValue();
3486        }
3487
3488        /**
3489         * @param value The relationship of this action to the related action.
3490         */
3491        public RequestGroupActionRelatedActionComponent setRelationship(ActionRelationshipType value) { 
3492            if (this.relationship == null)
3493              this.relationship = new Enumeration<ActionRelationshipType>(new ActionRelationshipTypeEnumFactory());
3494            this.relationship.setValue(value);
3495          return this;
3496        }
3497
3498        /**
3499         * @return {@link #offset} (A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.)
3500         */
3501        public Type getOffset() { 
3502          return this.offset;
3503        }
3504
3505        /**
3506         * @return {@link #offset} (A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.)
3507         */
3508        public Duration getOffsetDuration() throws FHIRException { 
3509          if (this.offset == null)
3510            return null;
3511          if (!(this.offset instanceof Duration))
3512            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.offset.getClass().getName()+" was encountered");
3513          return (Duration) this.offset;
3514        }
3515
3516        public boolean hasOffsetDuration() { 
3517          return this != null && this.offset instanceof Duration;
3518        }
3519
3520        /**
3521         * @return {@link #offset} (A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.)
3522         */
3523        public Range getOffsetRange() throws FHIRException { 
3524          if (this.offset == null)
3525            return null;
3526          if (!(this.offset instanceof Range))
3527            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.offset.getClass().getName()+" was encountered");
3528          return (Range) this.offset;
3529        }
3530
3531        public boolean hasOffsetRange() { 
3532          return this != null && this.offset instanceof Range;
3533        }
3534
3535        public boolean hasOffset() { 
3536          return this.offset != null && !this.offset.isEmpty();
3537        }
3538
3539        /**
3540         * @param value {@link #offset} (A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.)
3541         */
3542        public RequestGroupActionRelatedActionComponent setOffset(Type value) throws FHIRFormatError { 
3543          if (value != null && !(value instanceof Duration || value instanceof Range))
3544            throw new FHIRFormatError("Not the right type for RequestGroup.action.relatedAction.offset[x]: "+value.fhirType());
3545          this.offset = value;
3546          return this;
3547        }
3548
3549        protected void listChildren(List<Property> children) {
3550          super.listChildren(children);
3551          children.add(new Property("actionId", "id", "The element id of the action this is related to.", 0, 1, actionId));
3552          children.add(new Property("relationship", "code", "The relationship of this action to the related action.", 0, 1, relationship));
3553          children.add(new Property("offset[x]", "Duration|Range", "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", 0, 1, offset));
3554        }
3555
3556        @Override
3557        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3558          switch (_hash) {
3559          case -1656172047: /*actionId*/  return new Property("actionId", "id", "The element id of the action this is related to.", 0, 1, actionId);
3560          case -261851592: /*relationship*/  return new Property("relationship", "code", "The relationship of this action to the related action.", 0, 1, relationship);
3561          case -1960684787: /*offset[x]*/  return new Property("offset[x]", "Duration|Range", "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", 0, 1, offset);
3562          case -1019779949: /*offset*/  return new Property("offset[x]", "Duration|Range", "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", 0, 1, offset);
3563          case 134075207: /*offsetDuration*/  return new Property("offset[x]", "Duration|Range", "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", 0, 1, offset);
3564          case 1263585386: /*offsetRange*/  return new Property("offset[x]", "Duration|Range", "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", 0, 1, offset);
3565          default: return super.getNamedProperty(_hash, _name, _checkValid);
3566          }
3567
3568        }
3569
3570      @Override
3571      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3572        switch (hash) {
3573        case -1656172047: /*actionId*/ return this.actionId == null ? new Base[0] : new Base[] {this.actionId}; // IdType
3574        case -261851592: /*relationship*/ return this.relationship == null ? new Base[0] : new Base[] {this.relationship}; // Enumeration<ActionRelationshipType>
3575        case -1019779949: /*offset*/ return this.offset == null ? new Base[0] : new Base[] {this.offset}; // Type
3576        default: return super.getProperty(hash, name, checkValid);
3577        }
3578
3579      }
3580
3581      @Override
3582      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3583        switch (hash) {
3584        case -1656172047: // actionId
3585          this.actionId = castToId(value); // IdType
3586          return value;
3587        case -261851592: // relationship
3588          value = new ActionRelationshipTypeEnumFactory().fromType(castToCode(value));
3589          this.relationship = (Enumeration) value; // Enumeration<ActionRelationshipType>
3590          return value;
3591        case -1019779949: // offset
3592          this.offset = castToType(value); // Type
3593          return value;
3594        default: return super.setProperty(hash, name, value);
3595        }
3596
3597      }
3598
3599      @Override
3600      public Base setProperty(String name, Base value) throws FHIRException {
3601        if (name.equals("actionId")) {
3602          this.actionId = castToId(value); // IdType
3603        } else if (name.equals("relationship")) {
3604          value = new ActionRelationshipTypeEnumFactory().fromType(castToCode(value));
3605          this.relationship = (Enumeration) value; // Enumeration<ActionRelationshipType>
3606        } else if (name.equals("offset[x]")) {
3607          this.offset = castToType(value); // Type
3608        } else
3609          return super.setProperty(name, value);
3610        return value;
3611      }
3612
3613      @Override
3614      public Base makeProperty(int hash, String name) throws FHIRException {
3615        switch (hash) {
3616        case -1656172047:  return getActionIdElement();
3617        case -261851592:  return getRelationshipElement();
3618        case -1960684787:  return getOffset(); 
3619        case -1019779949:  return getOffset(); 
3620        default: return super.makeProperty(hash, name);
3621        }
3622
3623      }
3624
3625      @Override
3626      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3627        switch (hash) {
3628        case -1656172047: /*actionId*/ return new String[] {"id"};
3629        case -261851592: /*relationship*/ return new String[] {"code"};
3630        case -1019779949: /*offset*/ return new String[] {"Duration", "Range"};
3631        default: return super.getTypesForProperty(hash, name);
3632        }
3633
3634      }
3635
3636      @Override
3637      public Base addChild(String name) throws FHIRException {
3638        if (name.equals("actionId")) {
3639          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.actionId");
3640        }
3641        else if (name.equals("relationship")) {
3642          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.relationship");
3643        }
3644        else if (name.equals("offsetDuration")) {
3645          this.offset = new Duration();
3646          return this.offset;
3647        }
3648        else if (name.equals("offsetRange")) {
3649          this.offset = new Range();
3650          return this.offset;
3651        }
3652        else
3653          return super.addChild(name);
3654      }
3655
3656      public RequestGroupActionRelatedActionComponent copy() {
3657        RequestGroupActionRelatedActionComponent dst = new RequestGroupActionRelatedActionComponent();
3658        copyValues(dst);
3659        dst.actionId = actionId == null ? null : actionId.copy();
3660        dst.relationship = relationship == null ? null : relationship.copy();
3661        dst.offset = offset == null ? null : offset.copy();
3662        return dst;
3663      }
3664
3665      @Override
3666      public boolean equalsDeep(Base other_) {
3667        if (!super.equalsDeep(other_))
3668          return false;
3669        if (!(other_ instanceof RequestGroupActionRelatedActionComponent))
3670          return false;
3671        RequestGroupActionRelatedActionComponent o = (RequestGroupActionRelatedActionComponent) other_;
3672        return compareDeep(actionId, o.actionId, true) && compareDeep(relationship, o.relationship, true)
3673           && compareDeep(offset, o.offset, true);
3674      }
3675
3676      @Override
3677      public boolean equalsShallow(Base other_) {
3678        if (!super.equalsShallow(other_))
3679          return false;
3680        if (!(other_ instanceof RequestGroupActionRelatedActionComponent))
3681          return false;
3682        RequestGroupActionRelatedActionComponent o = (RequestGroupActionRelatedActionComponent) other_;
3683        return compareValues(actionId, o.actionId, true) && compareValues(relationship, o.relationship, true)
3684          ;
3685      }
3686
3687      public boolean isEmpty() {
3688        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(actionId, relationship, offset
3689          );
3690      }
3691
3692  public String fhirType() {
3693    return "RequestGroup.action.relatedAction";
3694
3695  }
3696
3697  }
3698
3699    /**
3700     * Allows a service to provide a unique, business identifier for the request.
3701     */
3702    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3703    @Description(shortDefinition="Business identifier", formalDefinition="Allows a service to provide a unique, business identifier for the request." )
3704    protected List<Identifier> identifier;
3705
3706    /**
3707     * A protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.
3708     */
3709    @Child(name = "definition", type = {Reference.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3710    @Description(shortDefinition="Instantiates protocol or definition", formalDefinition="A protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request." )
3711    protected List<Reference> definition;
3712    /**
3713     * The actual objects that are the target of the reference (A protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.)
3714     */
3715    protected List<Resource> definitionTarget;
3716
3717
3718    /**
3719     * A plan, proposal or order that is fulfilled in whole or in part by this request.
3720     */
3721    @Child(name = "basedOn", type = {Reference.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3722    @Description(shortDefinition="Fulfills plan, proposal, or order", formalDefinition="A plan, proposal or order that is fulfilled in whole or in part by this request." )
3723    protected List<Reference> basedOn;
3724    /**
3725     * The actual objects that are the target of the reference (A plan, proposal or order that is fulfilled in whole or in part by this request.)
3726     */
3727    protected List<Resource> basedOnTarget;
3728
3729
3730    /**
3731     * Completed or terminated request(s) whose function is taken by this new request.
3732     */
3733    @Child(name = "replaces", type = {Reference.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3734    @Description(shortDefinition="Request(s) replaced by this request", formalDefinition="Completed or terminated request(s) whose function is taken by this new request." )
3735    protected List<Reference> replaces;
3736    /**
3737     * The actual objects that are the target of the reference (Completed or terminated request(s) whose function is taken by this new request.)
3738     */
3739    protected List<Resource> replacesTarget;
3740
3741
3742    /**
3743     * A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.
3744     */
3745    @Child(name = "groupIdentifier", type = {Identifier.class}, order=4, min=0, max=1, modifier=false, summary=true)
3746    @Description(shortDefinition="Composite request this is part of", formalDefinition="A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form." )
3747    protected Identifier groupIdentifier;
3748
3749    /**
3750     * The current state of the request. For request groups, the status reflects the status of all the requests in the group.
3751     */
3752    @Child(name = "status", type = {CodeType.class}, order=5, min=1, max=1, modifier=true, summary=true)
3753    @Description(shortDefinition="draft | active | suspended | cancelled | completed | entered-in-error | unknown", formalDefinition="The current state of the request. For request groups, the status reflects the status of all the requests in the group." )
3754    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-status")
3755    protected Enumeration<RequestStatus> status;
3756
3757    /**
3758     * Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.
3759     */
3760    @Child(name = "intent", type = {CodeType.class}, order=6, min=1, max=1, modifier=true, summary=true)
3761    @Description(shortDefinition="proposal | plan | order", formalDefinition="Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain." )
3762    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-intent")
3763    protected Enumeration<RequestIntent> intent;
3764
3765    /**
3766     * Indicates how quickly the request should be addressed with respect to other requests.
3767     */
3768    @Child(name = "priority", type = {CodeType.class}, order=7, min=0, max=1, modifier=false, summary=true)
3769    @Description(shortDefinition="routine | urgent | asap | stat", formalDefinition="Indicates how quickly the request should be addressed with respect to other requests." )
3770    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-priority")
3771    protected Enumeration<RequestPriority> priority;
3772
3773    /**
3774     * The subject for which the request group was created.
3775     */
3776    @Child(name = "subject", type = {Patient.class, Group.class}, order=8, min=0, max=1, modifier=false, summary=false)
3777    @Description(shortDefinition="Who the request group is about", formalDefinition="The subject for which the request group was created." )
3778    protected Reference subject;
3779
3780    /**
3781     * The actual object that is the target of the reference (The subject for which the request group was created.)
3782     */
3783    protected Resource subjectTarget;
3784
3785    /**
3786     * Describes the context of the request group, if any.
3787     */
3788    @Child(name = "context", type = {Encounter.class, EpisodeOfCare.class}, order=9, min=0, max=1, modifier=false, summary=false)
3789    @Description(shortDefinition="Encounter or Episode for the request group", formalDefinition="Describes the context of the request group, if any." )
3790    protected Reference context;
3791
3792    /**
3793     * The actual object that is the target of the reference (Describes the context of the request group, if any.)
3794     */
3795    protected Resource contextTarget;
3796
3797    /**
3798     * Indicates when the request group was created.
3799     */
3800    @Child(name = "authoredOn", type = {DateTimeType.class}, order=10, min=0, max=1, modifier=false, summary=false)
3801    @Description(shortDefinition="When the request group was authored", formalDefinition="Indicates when the request group was created." )
3802    protected DateTimeType authoredOn;
3803
3804    /**
3805     * Provides a reference to the author of the request group.
3806     */
3807    @Child(name = "author", type = {Device.class, Practitioner.class}, order=11, min=0, max=1, modifier=false, summary=false)
3808    @Description(shortDefinition="Device or practitioner that authored the request group", formalDefinition="Provides a reference to the author of the request group." )
3809    protected Reference author;
3810
3811    /**
3812     * The actual object that is the target of the reference (Provides a reference to the author of the request group.)
3813     */
3814    protected Resource authorTarget;
3815
3816    /**
3817     * Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.
3818     */
3819    @Child(name = "reason", type = {CodeableConcept.class, Reference.class}, order=12, min=0, max=1, modifier=false, summary=false)
3820    @Description(shortDefinition="Reason for the request group", formalDefinition="Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response." )
3821    protected Type reason;
3822
3823    /**
3824     * Provides a mechanism to communicate additional information about the response.
3825     */
3826    @Child(name = "note", type = {Annotation.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3827    @Description(shortDefinition="Additional notes about the response", formalDefinition="Provides a mechanism to communicate additional information about the response." )
3828    protected List<Annotation> note;
3829
3830    /**
3831     * The actions, if any, produced by the evaluation of the artifact.
3832     */
3833    @Child(name = "action", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3834    @Description(shortDefinition="Proposed actions, if any", formalDefinition="The actions, if any, produced by the evaluation of the artifact." )
3835    protected List<RequestGroupActionComponent> action;
3836
3837    private static final long serialVersionUID = -1812083587L;
3838
3839  /**
3840   * Constructor
3841   */
3842    public RequestGroup() {
3843      super();
3844    }
3845
3846  /**
3847   * Constructor
3848   */
3849    public RequestGroup(Enumeration<RequestStatus> status, Enumeration<RequestIntent> intent) {
3850      super();
3851      this.status = status;
3852      this.intent = intent;
3853    }
3854
3855    /**
3856     * @return {@link #identifier} (Allows a service to provide a unique, business identifier for the request.)
3857     */
3858    public List<Identifier> getIdentifier() { 
3859      if (this.identifier == null)
3860        this.identifier = new ArrayList<Identifier>();
3861      return this.identifier;
3862    }
3863
3864    /**
3865     * @return Returns a reference to <code>this</code> for easy method chaining
3866     */
3867    public RequestGroup setIdentifier(List<Identifier> theIdentifier) { 
3868      this.identifier = theIdentifier;
3869      return this;
3870    }
3871
3872    public boolean hasIdentifier() { 
3873      if (this.identifier == null)
3874        return false;
3875      for (Identifier item : this.identifier)
3876        if (!item.isEmpty())
3877          return true;
3878      return false;
3879    }
3880
3881    public Identifier addIdentifier() { //3
3882      Identifier t = new Identifier();
3883      if (this.identifier == null)
3884        this.identifier = new ArrayList<Identifier>();
3885      this.identifier.add(t);
3886      return t;
3887    }
3888
3889    public RequestGroup addIdentifier(Identifier t) { //3
3890      if (t == null)
3891        return this;
3892      if (this.identifier == null)
3893        this.identifier = new ArrayList<Identifier>();
3894      this.identifier.add(t);
3895      return this;
3896    }
3897
3898    /**
3899     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
3900     */
3901    public Identifier getIdentifierFirstRep() { 
3902      if (getIdentifier().isEmpty()) {
3903        addIdentifier();
3904      }
3905      return getIdentifier().get(0);
3906    }
3907
3908    /**
3909     * @return {@link #definition} (A protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.)
3910     */
3911    public List<Reference> getDefinition() { 
3912      if (this.definition == null)
3913        this.definition = new ArrayList<Reference>();
3914      return this.definition;
3915    }
3916
3917    /**
3918     * @return Returns a reference to <code>this</code> for easy method chaining
3919     */
3920    public RequestGroup setDefinition(List<Reference> theDefinition) { 
3921      this.definition = theDefinition;
3922      return this;
3923    }
3924
3925    public boolean hasDefinition() { 
3926      if (this.definition == null)
3927        return false;
3928      for (Reference item : this.definition)
3929        if (!item.isEmpty())
3930          return true;
3931      return false;
3932    }
3933
3934    public Reference addDefinition() { //3
3935      Reference t = new Reference();
3936      if (this.definition == null)
3937        this.definition = new ArrayList<Reference>();
3938      this.definition.add(t);
3939      return t;
3940    }
3941
3942    public RequestGroup addDefinition(Reference t) { //3
3943      if (t == null)
3944        return this;
3945      if (this.definition == null)
3946        this.definition = new ArrayList<Reference>();
3947      this.definition.add(t);
3948      return this;
3949    }
3950
3951    /**
3952     * @return The first repetition of repeating field {@link #definition}, creating it if it does not already exist
3953     */
3954    public Reference getDefinitionFirstRep() { 
3955      if (getDefinition().isEmpty()) {
3956        addDefinition();
3957      }
3958      return getDefinition().get(0);
3959    }
3960
3961    /**
3962     * @deprecated Use Reference#setResource(IBaseResource) instead
3963     */
3964    @Deprecated
3965    public List<Resource> getDefinitionTarget() { 
3966      if (this.definitionTarget == null)
3967        this.definitionTarget = new ArrayList<Resource>();
3968      return this.definitionTarget;
3969    }
3970
3971    /**
3972     * @return {@link #basedOn} (A plan, proposal or order that is fulfilled in whole or in part by this request.)
3973     */
3974    public List<Reference> getBasedOn() { 
3975      if (this.basedOn == null)
3976        this.basedOn = new ArrayList<Reference>();
3977      return this.basedOn;
3978    }
3979
3980    /**
3981     * @return Returns a reference to <code>this</code> for easy method chaining
3982     */
3983    public RequestGroup setBasedOn(List<Reference> theBasedOn) { 
3984      this.basedOn = theBasedOn;
3985      return this;
3986    }
3987
3988    public boolean hasBasedOn() { 
3989      if (this.basedOn == null)
3990        return false;
3991      for (Reference item : this.basedOn)
3992        if (!item.isEmpty())
3993          return true;
3994      return false;
3995    }
3996
3997    public Reference addBasedOn() { //3
3998      Reference t = new Reference();
3999      if (this.basedOn == null)
4000        this.basedOn = new ArrayList<Reference>();
4001      this.basedOn.add(t);
4002      return t;
4003    }
4004
4005    public RequestGroup addBasedOn(Reference t) { //3
4006      if (t == null)
4007        return this;
4008      if (this.basedOn == null)
4009        this.basedOn = new ArrayList<Reference>();
4010      this.basedOn.add(t);
4011      return this;
4012    }
4013
4014    /**
4015     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist
4016     */
4017    public Reference getBasedOnFirstRep() { 
4018      if (getBasedOn().isEmpty()) {
4019        addBasedOn();
4020      }
4021      return getBasedOn().get(0);
4022    }
4023
4024    /**
4025     * @deprecated Use Reference#setResource(IBaseResource) instead
4026     */
4027    @Deprecated
4028    public List<Resource> getBasedOnTarget() { 
4029      if (this.basedOnTarget == null)
4030        this.basedOnTarget = new ArrayList<Resource>();
4031      return this.basedOnTarget;
4032    }
4033
4034    /**
4035     * @return {@link #replaces} (Completed or terminated request(s) whose function is taken by this new request.)
4036     */
4037    public List<Reference> getReplaces() { 
4038      if (this.replaces == null)
4039        this.replaces = new ArrayList<Reference>();
4040      return this.replaces;
4041    }
4042
4043    /**
4044     * @return Returns a reference to <code>this</code> for easy method chaining
4045     */
4046    public RequestGroup setReplaces(List<Reference> theReplaces) { 
4047      this.replaces = theReplaces;
4048      return this;
4049    }
4050
4051    public boolean hasReplaces() { 
4052      if (this.replaces == null)
4053        return false;
4054      for (Reference item : this.replaces)
4055        if (!item.isEmpty())
4056          return true;
4057      return false;
4058    }
4059
4060    public Reference addReplaces() { //3
4061      Reference t = new Reference();
4062      if (this.replaces == null)
4063        this.replaces = new ArrayList<Reference>();
4064      this.replaces.add(t);
4065      return t;
4066    }
4067
4068    public RequestGroup addReplaces(Reference t) { //3
4069      if (t == null)
4070        return this;
4071      if (this.replaces == null)
4072        this.replaces = new ArrayList<Reference>();
4073      this.replaces.add(t);
4074      return this;
4075    }
4076
4077    /**
4078     * @return The first repetition of repeating field {@link #replaces}, creating it if it does not already exist
4079     */
4080    public Reference getReplacesFirstRep() { 
4081      if (getReplaces().isEmpty()) {
4082        addReplaces();
4083      }
4084      return getReplaces().get(0);
4085    }
4086
4087    /**
4088     * @deprecated Use Reference#setResource(IBaseResource) instead
4089     */
4090    @Deprecated
4091    public List<Resource> getReplacesTarget() { 
4092      if (this.replacesTarget == null)
4093        this.replacesTarget = new ArrayList<Resource>();
4094      return this.replacesTarget;
4095    }
4096
4097    /**
4098     * @return {@link #groupIdentifier} (A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.)
4099     */
4100    public Identifier getGroupIdentifier() { 
4101      if (this.groupIdentifier == null)
4102        if (Configuration.errorOnAutoCreate())
4103          throw new Error("Attempt to auto-create RequestGroup.groupIdentifier");
4104        else if (Configuration.doAutoCreate())
4105          this.groupIdentifier = new Identifier(); // cc
4106      return this.groupIdentifier;
4107    }
4108
4109    public boolean hasGroupIdentifier() { 
4110      return this.groupIdentifier != null && !this.groupIdentifier.isEmpty();
4111    }
4112
4113    /**
4114     * @param value {@link #groupIdentifier} (A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.)
4115     */
4116    public RequestGroup setGroupIdentifier(Identifier value)  { 
4117      this.groupIdentifier = value;
4118      return this;
4119    }
4120
4121    /**
4122     * @return {@link #status} (The current state of the request. For request groups, the status reflects the status of all the requests in the group.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
4123     */
4124    public Enumeration<RequestStatus> getStatusElement() { 
4125      if (this.status == null)
4126        if (Configuration.errorOnAutoCreate())
4127          throw new Error("Attempt to auto-create RequestGroup.status");
4128        else if (Configuration.doAutoCreate())
4129          this.status = new Enumeration<RequestStatus>(new RequestStatusEnumFactory()); // bb
4130      return this.status;
4131    }
4132
4133    public boolean hasStatusElement() { 
4134      return this.status != null && !this.status.isEmpty();
4135    }
4136
4137    public boolean hasStatus() { 
4138      return this.status != null && !this.status.isEmpty();
4139    }
4140
4141    /**
4142     * @param value {@link #status} (The current state of the request. For request groups, the status reflects the status of all the requests in the group.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
4143     */
4144    public RequestGroup setStatusElement(Enumeration<RequestStatus> value) { 
4145      this.status = value;
4146      return this;
4147    }
4148
4149    /**
4150     * @return The current state of the request. For request groups, the status reflects the status of all the requests in the group.
4151     */
4152    public RequestStatus getStatus() { 
4153      return this.status == null ? null : this.status.getValue();
4154    }
4155
4156    /**
4157     * @param value The current state of the request. For request groups, the status reflects the status of all the requests in the group.
4158     */
4159    public RequestGroup setStatus(RequestStatus value) { 
4160        if (this.status == null)
4161          this.status = new Enumeration<RequestStatus>(new RequestStatusEnumFactory());
4162        this.status.setValue(value);
4163      return this;
4164    }
4165
4166    /**
4167     * @return {@link #intent} (Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.). This is the underlying object with id, value and extensions. The accessor "getIntent" gives direct access to the value
4168     */
4169    public Enumeration<RequestIntent> getIntentElement() { 
4170      if (this.intent == null)
4171        if (Configuration.errorOnAutoCreate())
4172          throw new Error("Attempt to auto-create RequestGroup.intent");
4173        else if (Configuration.doAutoCreate())
4174          this.intent = new Enumeration<RequestIntent>(new RequestIntentEnumFactory()); // bb
4175      return this.intent;
4176    }
4177
4178    public boolean hasIntentElement() { 
4179      return this.intent != null && !this.intent.isEmpty();
4180    }
4181
4182    public boolean hasIntent() { 
4183      return this.intent != null && !this.intent.isEmpty();
4184    }
4185
4186    /**
4187     * @param value {@link #intent} (Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.). This is the underlying object with id, value and extensions. The accessor "getIntent" gives direct access to the value
4188     */
4189    public RequestGroup setIntentElement(Enumeration<RequestIntent> value) { 
4190      this.intent = value;
4191      return this;
4192    }
4193
4194    /**
4195     * @return Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.
4196     */
4197    public RequestIntent getIntent() { 
4198      return this.intent == null ? null : this.intent.getValue();
4199    }
4200
4201    /**
4202     * @param value Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.
4203     */
4204    public RequestGroup setIntent(RequestIntent value) { 
4205        if (this.intent == null)
4206          this.intent = new Enumeration<RequestIntent>(new RequestIntentEnumFactory());
4207        this.intent.setValue(value);
4208      return this;
4209    }
4210
4211    /**
4212     * @return {@link #priority} (Indicates how quickly the request should be addressed with respect to other requests.). This is the underlying object with id, value and extensions. The accessor "getPriority" gives direct access to the value
4213     */
4214    public Enumeration<RequestPriority> getPriorityElement() { 
4215      if (this.priority == null)
4216        if (Configuration.errorOnAutoCreate())
4217          throw new Error("Attempt to auto-create RequestGroup.priority");
4218        else if (Configuration.doAutoCreate())
4219          this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory()); // bb
4220      return this.priority;
4221    }
4222
4223    public boolean hasPriorityElement() { 
4224      return this.priority != null && !this.priority.isEmpty();
4225    }
4226
4227    public boolean hasPriority() { 
4228      return this.priority != null && !this.priority.isEmpty();
4229    }
4230
4231    /**
4232     * @param value {@link #priority} (Indicates how quickly the request should be addressed with respect to other requests.). This is the underlying object with id, value and extensions. The accessor "getPriority" gives direct access to the value
4233     */
4234    public RequestGroup setPriorityElement(Enumeration<RequestPriority> value) { 
4235      this.priority = value;
4236      return this;
4237    }
4238
4239    /**
4240     * @return Indicates how quickly the request should be addressed with respect to other requests.
4241     */
4242    public RequestPriority getPriority() { 
4243      return this.priority == null ? null : this.priority.getValue();
4244    }
4245
4246    /**
4247     * @param value Indicates how quickly the request should be addressed with respect to other requests.
4248     */
4249    public RequestGroup setPriority(RequestPriority value) { 
4250      if (value == null)
4251        this.priority = null;
4252      else {
4253        if (this.priority == null)
4254          this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory());
4255        this.priority.setValue(value);
4256      }
4257      return this;
4258    }
4259
4260    /**
4261     * @return {@link #subject} (The subject for which the request group was created.)
4262     */
4263    public Reference getSubject() { 
4264      if (this.subject == null)
4265        if (Configuration.errorOnAutoCreate())
4266          throw new Error("Attempt to auto-create RequestGroup.subject");
4267        else if (Configuration.doAutoCreate())
4268          this.subject = new Reference(); // cc
4269      return this.subject;
4270    }
4271
4272    public boolean hasSubject() { 
4273      return this.subject != null && !this.subject.isEmpty();
4274    }
4275
4276    /**
4277     * @param value {@link #subject} (The subject for which the request group was created.)
4278     */
4279    public RequestGroup setSubject(Reference value)  { 
4280      this.subject = value;
4281      return this;
4282    }
4283
4284    /**
4285     * @return {@link #subject} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The subject for which the request group was created.)
4286     */
4287    public Resource getSubjectTarget() { 
4288      return this.subjectTarget;
4289    }
4290
4291    /**
4292     * @param value {@link #subject} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The subject for which the request group was created.)
4293     */
4294    public RequestGroup setSubjectTarget(Resource value) { 
4295      this.subjectTarget = value;
4296      return this;
4297    }
4298
4299    /**
4300     * @return {@link #context} (Describes the context of the request group, if any.)
4301     */
4302    public Reference getContext() { 
4303      if (this.context == null)
4304        if (Configuration.errorOnAutoCreate())
4305          throw new Error("Attempt to auto-create RequestGroup.context");
4306        else if (Configuration.doAutoCreate())
4307          this.context = new Reference(); // cc
4308      return this.context;
4309    }
4310
4311    public boolean hasContext() { 
4312      return this.context != null && !this.context.isEmpty();
4313    }
4314
4315    /**
4316     * @param value {@link #context} (Describes the context of the request group, if any.)
4317     */
4318    public RequestGroup setContext(Reference value)  { 
4319      this.context = value;
4320      return this;
4321    }
4322
4323    /**
4324     * @return {@link #context} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Describes the context of the request group, if any.)
4325     */
4326    public Resource getContextTarget() { 
4327      return this.contextTarget;
4328    }
4329
4330    /**
4331     * @param value {@link #context} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Describes the context of the request group, if any.)
4332     */
4333    public RequestGroup setContextTarget(Resource value) { 
4334      this.contextTarget = value;
4335      return this;
4336    }
4337
4338    /**
4339     * @return {@link #authoredOn} (Indicates when the request group was created.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
4340     */
4341    public DateTimeType getAuthoredOnElement() { 
4342      if (this.authoredOn == null)
4343        if (Configuration.errorOnAutoCreate())
4344          throw new Error("Attempt to auto-create RequestGroup.authoredOn");
4345        else if (Configuration.doAutoCreate())
4346          this.authoredOn = new DateTimeType(); // bb
4347      return this.authoredOn;
4348    }
4349
4350    public boolean hasAuthoredOnElement() { 
4351      return this.authoredOn != null && !this.authoredOn.isEmpty();
4352    }
4353
4354    public boolean hasAuthoredOn() { 
4355      return this.authoredOn != null && !this.authoredOn.isEmpty();
4356    }
4357
4358    /**
4359     * @param value {@link #authoredOn} (Indicates when the request group was created.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
4360     */
4361    public RequestGroup setAuthoredOnElement(DateTimeType value) { 
4362      this.authoredOn = value;
4363      return this;
4364    }
4365
4366    /**
4367     * @return Indicates when the request group was created.
4368     */
4369    public Date getAuthoredOn() { 
4370      return this.authoredOn == null ? null : this.authoredOn.getValue();
4371    }
4372
4373    /**
4374     * @param value Indicates when the request group was created.
4375     */
4376    public RequestGroup setAuthoredOn(Date value) { 
4377      if (value == null)
4378        this.authoredOn = null;
4379      else {
4380        if (this.authoredOn == null)
4381          this.authoredOn = new DateTimeType();
4382        this.authoredOn.setValue(value);
4383      }
4384      return this;
4385    }
4386
4387    /**
4388     * @return {@link #author} (Provides a reference to the author of the request group.)
4389     */
4390    public Reference getAuthor() { 
4391      if (this.author == null)
4392        if (Configuration.errorOnAutoCreate())
4393          throw new Error("Attempt to auto-create RequestGroup.author");
4394        else if (Configuration.doAutoCreate())
4395          this.author = new Reference(); // cc
4396      return this.author;
4397    }
4398
4399    public boolean hasAuthor() { 
4400      return this.author != null && !this.author.isEmpty();
4401    }
4402
4403    /**
4404     * @param value {@link #author} (Provides a reference to the author of the request group.)
4405     */
4406    public RequestGroup setAuthor(Reference value)  { 
4407      this.author = value;
4408      return this;
4409    }
4410
4411    /**
4412     * @return {@link #author} 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. (Provides a reference to the author of the request group.)
4413     */
4414    public Resource getAuthorTarget() { 
4415      return this.authorTarget;
4416    }
4417
4418    /**
4419     * @param value {@link #author} 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. (Provides a reference to the author of the request group.)
4420     */
4421    public RequestGroup setAuthorTarget(Resource value) { 
4422      this.authorTarget = value;
4423      return this;
4424    }
4425
4426    /**
4427     * @return {@link #reason} (Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.)
4428     */
4429    public Type getReason() { 
4430      return this.reason;
4431    }
4432
4433    /**
4434     * @return {@link #reason} (Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.)
4435     */
4436    public CodeableConcept getReasonCodeableConcept() throws FHIRException { 
4437      if (this.reason == null)
4438        return null;
4439      if (!(this.reason instanceof CodeableConcept))
4440        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.reason.getClass().getName()+" was encountered");
4441      return (CodeableConcept) this.reason;
4442    }
4443
4444    public boolean hasReasonCodeableConcept() { 
4445      return this != null && this.reason instanceof CodeableConcept;
4446    }
4447
4448    /**
4449     * @return {@link #reason} (Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.)
4450     */
4451    public Reference getReasonReference() throws FHIRException { 
4452      if (this.reason == null)
4453        return null;
4454      if (!(this.reason instanceof Reference))
4455        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.reason.getClass().getName()+" was encountered");
4456      return (Reference) this.reason;
4457    }
4458
4459    public boolean hasReasonReference() { 
4460      return this != null && this.reason instanceof Reference;
4461    }
4462
4463    public boolean hasReason() { 
4464      return this.reason != null && !this.reason.isEmpty();
4465    }
4466
4467    /**
4468     * @param value {@link #reason} (Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.)
4469     */
4470    public RequestGroup setReason(Type value) throws FHIRFormatError { 
4471      if (value != null && !(value instanceof CodeableConcept || value instanceof Reference))
4472        throw new FHIRFormatError("Not the right type for RequestGroup.reason[x]: "+value.fhirType());
4473      this.reason = value;
4474      return this;
4475    }
4476
4477    /**
4478     * @return {@link #note} (Provides a mechanism to communicate additional information about the response.)
4479     */
4480    public List<Annotation> getNote() { 
4481      if (this.note == null)
4482        this.note = new ArrayList<Annotation>();
4483      return this.note;
4484    }
4485
4486    /**
4487     * @return Returns a reference to <code>this</code> for easy method chaining
4488     */
4489    public RequestGroup setNote(List<Annotation> theNote) { 
4490      this.note = theNote;
4491      return this;
4492    }
4493
4494    public boolean hasNote() { 
4495      if (this.note == null)
4496        return false;
4497      for (Annotation item : this.note)
4498        if (!item.isEmpty())
4499          return true;
4500      return false;
4501    }
4502
4503    public Annotation addNote() { //3
4504      Annotation t = new Annotation();
4505      if (this.note == null)
4506        this.note = new ArrayList<Annotation>();
4507      this.note.add(t);
4508      return t;
4509    }
4510
4511    public RequestGroup addNote(Annotation t) { //3
4512      if (t == null)
4513        return this;
4514      if (this.note == null)
4515        this.note = new ArrayList<Annotation>();
4516      this.note.add(t);
4517      return this;
4518    }
4519
4520    /**
4521     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
4522     */
4523    public Annotation getNoteFirstRep() { 
4524      if (getNote().isEmpty()) {
4525        addNote();
4526      }
4527      return getNote().get(0);
4528    }
4529
4530    /**
4531     * @return {@link #action} (The actions, if any, produced by the evaluation of the artifact.)
4532     */
4533    public List<RequestGroupActionComponent> getAction() { 
4534      if (this.action == null)
4535        this.action = new ArrayList<RequestGroupActionComponent>();
4536      return this.action;
4537    }
4538
4539    /**
4540     * @return Returns a reference to <code>this</code> for easy method chaining
4541     */
4542    public RequestGroup setAction(List<RequestGroupActionComponent> theAction) { 
4543      this.action = theAction;
4544      return this;
4545    }
4546
4547    public boolean hasAction() { 
4548      if (this.action == null)
4549        return false;
4550      for (RequestGroupActionComponent item : this.action)
4551        if (!item.isEmpty())
4552          return true;
4553      return false;
4554    }
4555
4556    public RequestGroupActionComponent addAction() { //3
4557      RequestGroupActionComponent t = new RequestGroupActionComponent();
4558      if (this.action == null)
4559        this.action = new ArrayList<RequestGroupActionComponent>();
4560      this.action.add(t);
4561      return t;
4562    }
4563
4564    public RequestGroup addAction(RequestGroupActionComponent t) { //3
4565      if (t == null)
4566        return this;
4567      if (this.action == null)
4568        this.action = new ArrayList<RequestGroupActionComponent>();
4569      this.action.add(t);
4570      return this;
4571    }
4572
4573    /**
4574     * @return The first repetition of repeating field {@link #action}, creating it if it does not already exist
4575     */
4576    public RequestGroupActionComponent getActionFirstRep() { 
4577      if (getAction().isEmpty()) {
4578        addAction();
4579      }
4580      return getAction().get(0);
4581    }
4582
4583      protected void listChildren(List<Property> children) {
4584        super.listChildren(children);
4585        children.add(new Property("identifier", "Identifier", "Allows a service to provide a unique, business identifier for the request.", 0, java.lang.Integer.MAX_VALUE, identifier));
4586        children.add(new Property("definition", "Reference(Any)", "A protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, definition));
4587        children.add(new Property("basedOn", "Reference(Any)", "A plan, proposal or order that is fulfilled in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, basedOn));
4588        children.add(new Property("replaces", "Reference(Any)", "Completed or terminated request(s) whose function is taken by this new request.", 0, java.lang.Integer.MAX_VALUE, replaces));
4589        children.add(new Property("groupIdentifier", "Identifier", "A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.", 0, 1, groupIdentifier));
4590        children.add(new Property("status", "code", "The current state of the request. For request groups, the status reflects the status of all the requests in the group.", 0, 1, status));
4591        children.add(new Property("intent", "code", "Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.", 0, 1, intent));
4592        children.add(new Property("priority", "code", "Indicates how quickly the request should be addressed with respect to other requests.", 0, 1, priority));
4593        children.add(new Property("subject", "Reference(Patient|Group)", "The subject for which the request group was created.", 0, 1, subject));
4594        children.add(new Property("context", "Reference(Encounter|EpisodeOfCare)", "Describes the context of the request group, if any.", 0, 1, context));
4595        children.add(new Property("authoredOn", "dateTime", "Indicates when the request group was created.", 0, 1, authoredOn));
4596        children.add(new Property("author", "Reference(Device|Practitioner)", "Provides a reference to the author of the request group.", 0, 1, author));
4597        children.add(new Property("reason[x]", "CodeableConcept|Reference(Any)", "Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.", 0, 1, reason));
4598        children.add(new Property("note", "Annotation", "Provides a mechanism to communicate additional information about the response.", 0, java.lang.Integer.MAX_VALUE, note));
4599        children.add(new Property("action", "", "The actions, if any, produced by the evaluation of the artifact.", 0, java.lang.Integer.MAX_VALUE, action));
4600      }
4601
4602      @Override
4603      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4604        switch (_hash) {
4605        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Allows a service to provide a unique, business identifier for the request.", 0, java.lang.Integer.MAX_VALUE, identifier);
4606        case -1014418093: /*definition*/  return new Property("definition", "Reference(Any)", "A protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, definition);
4607        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(Any)", "A plan, proposal or order that is fulfilled in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, basedOn);
4608        case -430332865: /*replaces*/  return new Property("replaces", "Reference(Any)", "Completed or terminated request(s) whose function is taken by this new request.", 0, java.lang.Integer.MAX_VALUE, replaces);
4609        case -445338488: /*groupIdentifier*/  return new Property("groupIdentifier", "Identifier", "A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.", 0, 1, groupIdentifier);
4610        case -892481550: /*status*/  return new Property("status", "code", "The current state of the request. For request groups, the status reflects the status of all the requests in the group.", 0, 1, status);
4611        case -1183762788: /*intent*/  return new Property("intent", "code", "Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.", 0, 1, intent);
4612        case -1165461084: /*priority*/  return new Property("priority", "code", "Indicates how quickly the request should be addressed with respect to other requests.", 0, 1, priority);
4613        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group)", "The subject for which the request group was created.", 0, 1, subject);
4614        case 951530927: /*context*/  return new Property("context", "Reference(Encounter|EpisodeOfCare)", "Describes the context of the request group, if any.", 0, 1, context);
4615        case -1500852503: /*authoredOn*/  return new Property("authoredOn", "dateTime", "Indicates when the request group was created.", 0, 1, authoredOn);
4616        case -1406328437: /*author*/  return new Property("author", "Reference(Device|Practitioner)", "Provides a reference to the author of the request group.", 0, 1, author);
4617        case -669418564: /*reason[x]*/  return new Property("reason[x]", "CodeableConcept|Reference(Any)", "Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.", 0, 1, reason);
4618        case -934964668: /*reason*/  return new Property("reason[x]", "CodeableConcept|Reference(Any)", "Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.", 0, 1, reason);
4619        case -610155331: /*reasonCodeableConcept*/  return new Property("reason[x]", "CodeableConcept|Reference(Any)", "Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.", 0, 1, reason);
4620        case -1146218137: /*reasonReference*/  return new Property("reason[x]", "CodeableConcept|Reference(Any)", "Indicates the reason the request group was created. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.", 0, 1, reason);
4621        case 3387378: /*note*/  return new Property("note", "Annotation", "Provides a mechanism to communicate additional information about the response.", 0, java.lang.Integer.MAX_VALUE, note);
4622        case -1422950858: /*action*/  return new Property("action", "", "The actions, if any, produced by the evaluation of the artifact.", 0, java.lang.Integer.MAX_VALUE, action);
4623        default: return super.getNamedProperty(_hash, _name, _checkValid);
4624        }
4625
4626      }
4627
4628      @Override
4629      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4630        switch (hash) {
4631        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
4632        case -1014418093: /*definition*/ return this.definition == null ? new Base[0] : this.definition.toArray(new Base[this.definition.size()]); // Reference
4633        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
4634        case -430332865: /*replaces*/ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // Reference
4635        case -445338488: /*groupIdentifier*/ return this.groupIdentifier == null ? new Base[0] : new Base[] {this.groupIdentifier}; // Identifier
4636        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<RequestStatus>
4637        case -1183762788: /*intent*/ return this.intent == null ? new Base[0] : new Base[] {this.intent}; // Enumeration<RequestIntent>
4638        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // Enumeration<RequestPriority>
4639        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
4640        case 951530927: /*context*/ return this.context == null ? new Base[0] : new Base[] {this.context}; // Reference
4641        case -1500852503: /*authoredOn*/ return this.authoredOn == null ? new Base[0] : new Base[] {this.authoredOn}; // DateTimeType
4642        case -1406328437: /*author*/ return this.author == null ? new Base[0] : new Base[] {this.author}; // Reference
4643        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : new Base[] {this.reason}; // Type
4644        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
4645        case -1422950858: /*action*/ return this.action == null ? new Base[0] : this.action.toArray(new Base[this.action.size()]); // RequestGroupActionComponent
4646        default: return super.getProperty(hash, name, checkValid);
4647        }
4648
4649      }
4650
4651      @Override
4652      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4653        switch (hash) {
4654        case -1618432855: // identifier
4655          this.getIdentifier().add(castToIdentifier(value)); // Identifier
4656          return value;
4657        case -1014418093: // definition
4658          this.getDefinition().add(castToReference(value)); // Reference
4659          return value;
4660        case -332612366: // basedOn
4661          this.getBasedOn().add(castToReference(value)); // Reference
4662          return value;
4663        case -430332865: // replaces
4664          this.getReplaces().add(castToReference(value)); // Reference
4665          return value;
4666        case -445338488: // groupIdentifier
4667          this.groupIdentifier = castToIdentifier(value); // Identifier
4668          return value;
4669        case -892481550: // status
4670          value = new RequestStatusEnumFactory().fromType(castToCode(value));
4671          this.status = (Enumeration) value; // Enumeration<RequestStatus>
4672          return value;
4673        case -1183762788: // intent
4674          value = new RequestIntentEnumFactory().fromType(castToCode(value));
4675          this.intent = (Enumeration) value; // Enumeration<RequestIntent>
4676          return value;
4677        case -1165461084: // priority
4678          value = new RequestPriorityEnumFactory().fromType(castToCode(value));
4679          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
4680          return value;
4681        case -1867885268: // subject
4682          this.subject = castToReference(value); // Reference
4683          return value;
4684        case 951530927: // context
4685          this.context = castToReference(value); // Reference
4686          return value;
4687        case -1500852503: // authoredOn
4688          this.authoredOn = castToDateTime(value); // DateTimeType
4689          return value;
4690        case -1406328437: // author
4691          this.author = castToReference(value); // Reference
4692          return value;
4693        case -934964668: // reason
4694          this.reason = castToType(value); // Type
4695          return value;
4696        case 3387378: // note
4697          this.getNote().add(castToAnnotation(value)); // Annotation
4698          return value;
4699        case -1422950858: // action
4700          this.getAction().add((RequestGroupActionComponent) value); // RequestGroupActionComponent
4701          return value;
4702        default: return super.setProperty(hash, name, value);
4703        }
4704
4705      }
4706
4707      @Override
4708      public Base setProperty(String name, Base value) throws FHIRException {
4709        if (name.equals("identifier")) {
4710          this.getIdentifier().add(castToIdentifier(value));
4711        } else if (name.equals("definition")) {
4712          this.getDefinition().add(castToReference(value));
4713        } else if (name.equals("basedOn")) {
4714          this.getBasedOn().add(castToReference(value));
4715        } else if (name.equals("replaces")) {
4716          this.getReplaces().add(castToReference(value));
4717        } else if (name.equals("groupIdentifier")) {
4718          this.groupIdentifier = castToIdentifier(value); // Identifier
4719        } else if (name.equals("status")) {
4720          value = new RequestStatusEnumFactory().fromType(castToCode(value));
4721          this.status = (Enumeration) value; // Enumeration<RequestStatus>
4722        } else if (name.equals("intent")) {
4723          value = new RequestIntentEnumFactory().fromType(castToCode(value));
4724          this.intent = (Enumeration) value; // Enumeration<RequestIntent>
4725        } else if (name.equals("priority")) {
4726          value = new RequestPriorityEnumFactory().fromType(castToCode(value));
4727          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
4728        } else if (name.equals("subject")) {
4729          this.subject = castToReference(value); // Reference
4730        } else if (name.equals("context")) {
4731          this.context = castToReference(value); // Reference
4732        } else if (name.equals("authoredOn")) {
4733          this.authoredOn = castToDateTime(value); // DateTimeType
4734        } else if (name.equals("author")) {
4735          this.author = castToReference(value); // Reference
4736        } else if (name.equals("reason[x]")) {
4737          this.reason = castToType(value); // Type
4738        } else if (name.equals("note")) {
4739          this.getNote().add(castToAnnotation(value));
4740        } else if (name.equals("action")) {
4741          this.getAction().add((RequestGroupActionComponent) value);
4742        } else
4743          return super.setProperty(name, value);
4744        return value;
4745      }
4746
4747      @Override
4748      public Base makeProperty(int hash, String name) throws FHIRException {
4749        switch (hash) {
4750        case -1618432855:  return addIdentifier(); 
4751        case -1014418093:  return addDefinition(); 
4752        case -332612366:  return addBasedOn(); 
4753        case -430332865:  return addReplaces(); 
4754        case -445338488:  return getGroupIdentifier(); 
4755        case -892481550:  return getStatusElement();
4756        case -1183762788:  return getIntentElement();
4757        case -1165461084:  return getPriorityElement();
4758        case -1867885268:  return getSubject(); 
4759        case 951530927:  return getContext(); 
4760        case -1500852503:  return getAuthoredOnElement();
4761        case -1406328437:  return getAuthor(); 
4762        case -669418564:  return getReason(); 
4763        case -934964668:  return getReason(); 
4764        case 3387378:  return addNote(); 
4765        case -1422950858:  return addAction(); 
4766        default: return super.makeProperty(hash, name);
4767        }
4768
4769      }
4770
4771      @Override
4772      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4773        switch (hash) {
4774        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
4775        case -1014418093: /*definition*/ return new String[] {"Reference"};
4776        case -332612366: /*basedOn*/ return new String[] {"Reference"};
4777        case -430332865: /*replaces*/ return new String[] {"Reference"};
4778        case -445338488: /*groupIdentifier*/ return new String[] {"Identifier"};
4779        case -892481550: /*status*/ return new String[] {"code"};
4780        case -1183762788: /*intent*/ return new String[] {"code"};
4781        case -1165461084: /*priority*/ return new String[] {"code"};
4782        case -1867885268: /*subject*/ return new String[] {"Reference"};
4783        case 951530927: /*context*/ return new String[] {"Reference"};
4784        case -1500852503: /*authoredOn*/ return new String[] {"dateTime"};
4785        case -1406328437: /*author*/ return new String[] {"Reference"};
4786        case -934964668: /*reason*/ return new String[] {"CodeableConcept", "Reference"};
4787        case 3387378: /*note*/ return new String[] {"Annotation"};
4788        case -1422950858: /*action*/ return new String[] {};
4789        default: return super.getTypesForProperty(hash, name);
4790        }
4791
4792      }
4793
4794      @Override
4795      public Base addChild(String name) throws FHIRException {
4796        if (name.equals("identifier")) {
4797          return addIdentifier();
4798        }
4799        else if (name.equals("definition")) {
4800          return addDefinition();
4801        }
4802        else if (name.equals("basedOn")) {
4803          return addBasedOn();
4804        }
4805        else if (name.equals("replaces")) {
4806          return addReplaces();
4807        }
4808        else if (name.equals("groupIdentifier")) {
4809          this.groupIdentifier = new Identifier();
4810          return this.groupIdentifier;
4811        }
4812        else if (name.equals("status")) {
4813          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.status");
4814        }
4815        else if (name.equals("intent")) {
4816          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.intent");
4817        }
4818        else if (name.equals("priority")) {
4819          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.priority");
4820        }
4821        else if (name.equals("subject")) {
4822          this.subject = new Reference();
4823          return this.subject;
4824        }
4825        else if (name.equals("context")) {
4826          this.context = new Reference();
4827          return this.context;
4828        }
4829        else if (name.equals("authoredOn")) {
4830          throw new FHIRException("Cannot call addChild on a singleton property RequestGroup.authoredOn");
4831        }
4832        else if (name.equals("author")) {
4833          this.author = new Reference();
4834          return this.author;
4835        }
4836        else if (name.equals("reasonCodeableConcept")) {
4837          this.reason = new CodeableConcept();
4838          return this.reason;
4839        }
4840        else if (name.equals("reasonReference")) {
4841          this.reason = new Reference();
4842          return this.reason;
4843        }
4844        else if (name.equals("note")) {
4845          return addNote();
4846        }
4847        else if (name.equals("action")) {
4848          return addAction();
4849        }
4850        else
4851          return super.addChild(name);
4852      }
4853
4854  public String fhirType() {
4855    return "RequestGroup";
4856
4857  }
4858
4859      public RequestGroup copy() {
4860        RequestGroup dst = new RequestGroup();
4861        copyValues(dst);
4862        if (identifier != null) {
4863          dst.identifier = new ArrayList<Identifier>();
4864          for (Identifier i : identifier)
4865            dst.identifier.add(i.copy());
4866        };
4867        if (definition != null) {
4868          dst.definition = new ArrayList<Reference>();
4869          for (Reference i : definition)
4870            dst.definition.add(i.copy());
4871        };
4872        if (basedOn != null) {
4873          dst.basedOn = new ArrayList<Reference>();
4874          for (Reference i : basedOn)
4875            dst.basedOn.add(i.copy());
4876        };
4877        if (replaces != null) {
4878          dst.replaces = new ArrayList<Reference>();
4879          for (Reference i : replaces)
4880            dst.replaces.add(i.copy());
4881        };
4882        dst.groupIdentifier = groupIdentifier == null ? null : groupIdentifier.copy();
4883        dst.status = status == null ? null : status.copy();
4884        dst.intent = intent == null ? null : intent.copy();
4885        dst.priority = priority == null ? null : priority.copy();
4886        dst.subject = subject == null ? null : subject.copy();
4887        dst.context = context == null ? null : context.copy();
4888        dst.authoredOn = authoredOn == null ? null : authoredOn.copy();
4889        dst.author = author == null ? null : author.copy();
4890        dst.reason = reason == null ? null : reason.copy();
4891        if (note != null) {
4892          dst.note = new ArrayList<Annotation>();
4893          for (Annotation i : note)
4894            dst.note.add(i.copy());
4895        };
4896        if (action != null) {
4897          dst.action = new ArrayList<RequestGroupActionComponent>();
4898          for (RequestGroupActionComponent i : action)
4899            dst.action.add(i.copy());
4900        };
4901        return dst;
4902      }
4903
4904      protected RequestGroup typedCopy() {
4905        return copy();
4906      }
4907
4908      @Override
4909      public boolean equalsDeep(Base other_) {
4910        if (!super.equalsDeep(other_))
4911          return false;
4912        if (!(other_ instanceof RequestGroup))
4913          return false;
4914        RequestGroup o = (RequestGroup) other_;
4915        return compareDeep(identifier, o.identifier, true) && compareDeep(definition, o.definition, true)
4916           && compareDeep(basedOn, o.basedOn, true) && compareDeep(replaces, o.replaces, true) && compareDeep(groupIdentifier, o.groupIdentifier, true)
4917           && compareDeep(status, o.status, true) && compareDeep(intent, o.intent, true) && compareDeep(priority, o.priority, true)
4918           && compareDeep(subject, o.subject, true) && compareDeep(context, o.context, true) && compareDeep(authoredOn, o.authoredOn, true)
4919           && compareDeep(author, o.author, true) && compareDeep(reason, o.reason, true) && compareDeep(note, o.note, true)
4920           && compareDeep(action, o.action, true);
4921      }
4922
4923      @Override
4924      public boolean equalsShallow(Base other_) {
4925        if (!super.equalsShallow(other_))
4926          return false;
4927        if (!(other_ instanceof RequestGroup))
4928          return false;
4929        RequestGroup o = (RequestGroup) other_;
4930        return compareValues(status, o.status, true) && compareValues(intent, o.intent, true) && compareValues(priority, o.priority, true)
4931           && compareValues(authoredOn, o.authoredOn, true);
4932      }
4933
4934      public boolean isEmpty() {
4935        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, definition, basedOn
4936          , replaces, groupIdentifier, status, intent, priority, subject, context, authoredOn
4937          , author, reason, note, action);
4938      }
4939
4940  @Override
4941  public ResourceType getResourceType() {
4942    return ResourceType.RequestGroup;
4943   }
4944
4945 /**
4946   * Search parameter: <b>authored</b>
4947   * <p>
4948   * Description: <b>The date the request group was authored</b><br>
4949   * Type: <b>date</b><br>
4950   * Path: <b>RequestGroup.authoredOn</b><br>
4951   * </p>
4952   */
4953  @SearchParamDefinition(name="authored", path="RequestGroup.authoredOn", description="The date the request group was authored", type="date" )
4954  public static final String SP_AUTHORED = "authored";
4955 /**
4956   * <b>Fluent Client</b> search parameter constant for <b>authored</b>
4957   * <p>
4958   * Description: <b>The date the request group was authored</b><br>
4959   * Type: <b>date</b><br>
4960   * Path: <b>RequestGroup.authoredOn</b><br>
4961   * </p>
4962   */
4963  public static final ca.uhn.fhir.rest.gclient.DateClientParam AUTHORED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_AUTHORED);
4964
4965 /**
4966   * Search parameter: <b>identifier</b>
4967   * <p>
4968   * Description: <b>External identifiers for the request group</b><br>
4969   * Type: <b>token</b><br>
4970   * Path: <b>RequestGroup.identifier</b><br>
4971   * </p>
4972   */
4973  @SearchParamDefinition(name="identifier", path="RequestGroup.identifier", description="External identifiers for the request group", type="token" )
4974  public static final String SP_IDENTIFIER = "identifier";
4975 /**
4976   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
4977   * <p>
4978   * Description: <b>External identifiers for the request group</b><br>
4979   * Type: <b>token</b><br>
4980   * Path: <b>RequestGroup.identifier</b><br>
4981   * </p>
4982   */
4983  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
4984
4985 /**
4986   * Search parameter: <b>subject</b>
4987   * <p>
4988   * Description: <b>The subject that the request group is about</b><br>
4989   * Type: <b>reference</b><br>
4990   * Path: <b>RequestGroup.subject</b><br>
4991   * </p>
4992   */
4993  @SearchParamDefinition(name="subject", path="RequestGroup.subject", description="The subject that the request group is about", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Group.class, Patient.class } )
4994  public static final String SP_SUBJECT = "subject";
4995 /**
4996   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
4997   * <p>
4998   * Description: <b>The subject that the request group is about</b><br>
4999   * Type: <b>reference</b><br>
5000   * Path: <b>RequestGroup.subject</b><br>
5001   * </p>
5002   */
5003  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
5004
5005/**
5006   * Constant for fluent queries to be used to add include statements. Specifies
5007   * the path value of "<b>RequestGroup:subject</b>".
5008   */
5009  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("RequestGroup:subject").toLocked();
5010
5011 /**
5012   * Search parameter: <b>author</b>
5013   * <p>
5014   * Description: <b>The author of the request group</b><br>
5015   * Type: <b>reference</b><br>
5016   * Path: <b>RequestGroup.author</b><br>
5017   * </p>
5018   */
5019  @SearchParamDefinition(name="author", path="RequestGroup.author", description="The author of the request group", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Device.class, Practitioner.class } )
5020  public static final String SP_AUTHOR = "author";
5021 /**
5022   * <b>Fluent Client</b> search parameter constant for <b>author</b>
5023   * <p>
5024   * Description: <b>The author of the request group</b><br>
5025   * Type: <b>reference</b><br>
5026   * Path: <b>RequestGroup.author</b><br>
5027   * </p>
5028   */
5029  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam AUTHOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_AUTHOR);
5030
5031/**
5032   * Constant for fluent queries to be used to add include statements. Specifies
5033   * the path value of "<b>RequestGroup:author</b>".
5034   */
5035  public static final ca.uhn.fhir.model.api.Include INCLUDE_AUTHOR = new ca.uhn.fhir.model.api.Include("RequestGroup:author").toLocked();
5036
5037 /**
5038   * Search parameter: <b>encounter</b>
5039   * <p>
5040   * Description: <b>The encounter the request group applies to</b><br>
5041   * Type: <b>reference</b><br>
5042   * Path: <b>RequestGroup.context</b><br>
5043   * </p>
5044   */
5045  @SearchParamDefinition(name="encounter", path="RequestGroup.context", description="The encounter the request group applies to", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Encounter") }, target={Encounter.class } )
5046  public static final String SP_ENCOUNTER = "encounter";
5047 /**
5048   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
5049   * <p>
5050   * Description: <b>The encounter the request group applies to</b><br>
5051   * Type: <b>reference</b><br>
5052   * Path: <b>RequestGroup.context</b><br>
5053   * </p>
5054   */
5055  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
5056
5057/**
5058   * Constant for fluent queries to be used to add include statements. Specifies
5059   * the path value of "<b>RequestGroup:encounter</b>".
5060   */
5061  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("RequestGroup:encounter").toLocked();
5062
5063 /**
5064   * Search parameter: <b>priority</b>
5065   * <p>
5066   * Description: <b>The priority of the request group</b><br>
5067   * Type: <b>token</b><br>
5068   * Path: <b>RequestGroup.priority</b><br>
5069   * </p>
5070   */
5071  @SearchParamDefinition(name="priority", path="RequestGroup.priority", description="The priority of the request group", type="token" )
5072  public static final String SP_PRIORITY = "priority";
5073 /**
5074   * <b>Fluent Client</b> search parameter constant for <b>priority</b>
5075   * <p>
5076   * Description: <b>The priority of the request group</b><br>
5077   * Type: <b>token</b><br>
5078   * Path: <b>RequestGroup.priority</b><br>
5079   * </p>
5080   */
5081  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PRIORITY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PRIORITY);
5082
5083 /**
5084   * Search parameter: <b>intent</b>
5085   * <p>
5086   * Description: <b>The intent of the request group</b><br>
5087   * Type: <b>token</b><br>
5088   * Path: <b>RequestGroup.intent</b><br>
5089   * </p>
5090   */
5091  @SearchParamDefinition(name="intent", path="RequestGroup.intent", description="The intent of the request group", type="token" )
5092  public static final String SP_INTENT = "intent";
5093 /**
5094   * <b>Fluent Client</b> search parameter constant for <b>intent</b>
5095   * <p>
5096   * Description: <b>The intent of the request group</b><br>
5097   * Type: <b>token</b><br>
5098   * Path: <b>RequestGroup.intent</b><br>
5099   * </p>
5100   */
5101  public static final ca.uhn.fhir.rest.gclient.TokenClientParam INTENT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_INTENT);
5102
5103 /**
5104   * Search parameter: <b>participant</b>
5105   * <p>
5106   * Description: <b>The participant in the requests in the group</b><br>
5107   * Type: <b>reference</b><br>
5108   * Path: <b>RequestGroup.action.participant</b><br>
5109   * </p>
5110   */
5111  @SearchParamDefinition(name="participant", path="RequestGroup.action.participant", description="The participant in the requests in the group", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={Patient.class, Person.class, Practitioner.class, RelatedPerson.class } )
5112  public static final String SP_PARTICIPANT = "participant";
5113 /**
5114   * <b>Fluent Client</b> search parameter constant for <b>participant</b>
5115   * <p>
5116   * Description: <b>The participant in the requests in the group</b><br>
5117   * Type: <b>reference</b><br>
5118   * Path: <b>RequestGroup.action.participant</b><br>
5119   * </p>
5120   */
5121  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PARTICIPANT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PARTICIPANT);
5122
5123/**
5124   * Constant for fluent queries to be used to add include statements. Specifies
5125   * the path value of "<b>RequestGroup:participant</b>".
5126   */
5127  public static final ca.uhn.fhir.model.api.Include INCLUDE_PARTICIPANT = new ca.uhn.fhir.model.api.Include("RequestGroup:participant").toLocked();
5128
5129 /**
5130   * Search parameter: <b>group-identifier</b>
5131   * <p>
5132   * Description: <b>The group identifier for the request group</b><br>
5133   * Type: <b>token</b><br>
5134   * Path: <b>RequestGroup.groupIdentifier</b><br>
5135   * </p>
5136   */
5137  @SearchParamDefinition(name="group-identifier", path="RequestGroup.groupIdentifier", description="The group identifier for the request group", type="token" )
5138  public static final String SP_GROUP_IDENTIFIER = "group-identifier";
5139 /**
5140   * <b>Fluent Client</b> search parameter constant for <b>group-identifier</b>
5141   * <p>
5142   * Description: <b>The group identifier for the request group</b><br>
5143   * Type: <b>token</b><br>
5144   * Path: <b>RequestGroup.groupIdentifier</b><br>
5145   * </p>
5146   */
5147  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GROUP_IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GROUP_IDENTIFIER);
5148
5149 /**
5150   * Search parameter: <b>patient</b>
5151   * <p>
5152   * Description: <b>The identity of a patient to search for request groups</b><br>
5153   * Type: <b>reference</b><br>
5154   * Path: <b>RequestGroup.subject</b><br>
5155   * </p>
5156   */
5157  @SearchParamDefinition(name="patient", path="RequestGroup.subject", description="The identity of a patient to search for request groups", type="reference", target={Patient.class } )
5158  public static final String SP_PATIENT = "patient";
5159 /**
5160   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
5161   * <p>
5162   * Description: <b>The identity of a patient to search for request groups</b><br>
5163   * Type: <b>reference</b><br>
5164   * Path: <b>RequestGroup.subject</b><br>
5165   * </p>
5166   */
5167  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
5168
5169/**
5170   * Constant for fluent queries to be used to add include statements. Specifies
5171   * the path value of "<b>RequestGroup:patient</b>".
5172   */
5173  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("RequestGroup:patient").toLocked();
5174
5175 /**
5176   * Search parameter: <b>context</b>
5177   * <p>
5178   * Description: <b>The context the request group applies to</b><br>
5179   * Type: <b>reference</b><br>
5180   * Path: <b>RequestGroup.context</b><br>
5181   * </p>
5182   */
5183  @SearchParamDefinition(name="context", path="RequestGroup.context", description="The context the request group applies to", type="reference", target={Encounter.class, EpisodeOfCare.class } )
5184  public static final String SP_CONTEXT = "context";
5185 /**
5186   * <b>Fluent Client</b> search parameter constant for <b>context</b>
5187   * <p>
5188   * Description: <b>The context the request group applies to</b><br>
5189   * Type: <b>reference</b><br>
5190   * Path: <b>RequestGroup.context</b><br>
5191   * </p>
5192   */
5193  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CONTEXT);
5194
5195/**
5196   * Constant for fluent queries to be used to add include statements. Specifies
5197   * the path value of "<b>RequestGroup:context</b>".
5198   */
5199  public static final ca.uhn.fhir.model.api.Include INCLUDE_CONTEXT = new ca.uhn.fhir.model.api.Include("RequestGroup:context").toLocked();
5200
5201 /**
5202   * Search parameter: <b>definition</b>
5203   * <p>
5204   * Description: <b>The definition from which the request group is realized</b><br>
5205   * Type: <b>reference</b><br>
5206   * Path: <b>RequestGroup.definition</b><br>
5207   * </p>
5208   */
5209  @SearchParamDefinition(name="definition", path="RequestGroup.definition", description="The definition from which the request group is realized", type="reference" )
5210  public static final String SP_DEFINITION = "definition";
5211 /**
5212   * <b>Fluent Client</b> search parameter constant for <b>definition</b>
5213   * <p>
5214   * Description: <b>The definition from which the request group is realized</b><br>
5215   * Type: <b>reference</b><br>
5216   * Path: <b>RequestGroup.definition</b><br>
5217   * </p>
5218   */
5219  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DEFINITION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DEFINITION);
5220
5221/**
5222   * Constant for fluent queries to be used to add include statements. Specifies
5223   * the path value of "<b>RequestGroup:definition</b>".
5224   */
5225  public static final ca.uhn.fhir.model.api.Include INCLUDE_DEFINITION = new ca.uhn.fhir.model.api.Include("RequestGroup:definition").toLocked();
5226
5227 /**
5228   * Search parameter: <b>status</b>
5229   * <p>
5230   * Description: <b>The status of the request group</b><br>
5231   * Type: <b>token</b><br>
5232   * Path: <b>RequestGroup.status</b><br>
5233   * </p>
5234   */
5235  @SearchParamDefinition(name="status", path="RequestGroup.status", description="The status of the request group", type="token" )
5236  public static final String SP_STATUS = "status";
5237 /**
5238   * <b>Fluent Client</b> search parameter constant for <b>status</b>
5239   * <p>
5240   * Description: <b>The status of the request group</b><br>
5241   * Type: <b>token</b><br>
5242   * Path: <b>RequestGroup.status</b><br>
5243   * </p>
5244   */
5245  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
5246
5247
5248}