001package org.hl7.fhir.dstu3.model;
002
003
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
035import java.util.ArrayList;
036import java.util.Date;
037import java.util.List;
038
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.exceptions.FHIRFormatError;
041import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
042
043import ca.uhn.fhir.model.api.annotation.Block;
044import ca.uhn.fhir.model.api.annotation.Child;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.ResourceDef;
047import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
048/**
049 * A record of a request for diagnostic investigations, treatments, or operations to be performed.
050 */
051@ResourceDef(name="ProcedureRequest", profile="http://hl7.org/fhir/Profile/ProcedureRequest")
052public class ProcedureRequest extends DomainResource {
053
054    public enum ProcedureRequestStatus {
055        /**
056         * The request has been created but is not yet complete or ready for action
057         */
058        DRAFT, 
059        /**
060         * The request is ready to be acted upon
061         */
062        ACTIVE, 
063        /**
064         * The authorization/request to act has been temporarily withdrawn but is expected to resume in the future
065         */
066        SUSPENDED, 
067        /**
068         * The authorization/request to act has been terminated prior to the full completion of the intended actions.  No further activity should occur.
069         */
070        CANCELLED, 
071        /**
072         * Activity against the request has been sufficiently completed to the satisfaction of the requester
073         */
074        COMPLETED, 
075        /**
076         * 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".)
077         */
078        ENTEREDINERROR, 
079        /**
080         * 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.
081         */
082        UNKNOWN, 
083        /**
084         * added to help the parsers with the generic types
085         */
086        NULL;
087        public static ProcedureRequestStatus fromCode(String codeString) throws FHIRException {
088            if (codeString == null || "".equals(codeString))
089                return null;
090        if ("draft".equals(codeString))
091          return DRAFT;
092        if ("active".equals(codeString))
093          return ACTIVE;
094        if ("suspended".equals(codeString))
095          return SUSPENDED;
096        if ("cancelled".equals(codeString))
097          return CANCELLED;
098        if ("completed".equals(codeString))
099          return COMPLETED;
100        if ("entered-in-error".equals(codeString))
101          return ENTEREDINERROR;
102        if ("unknown".equals(codeString))
103          return UNKNOWN;
104        if (Configuration.isAcceptInvalidEnums())
105          return null;
106        else
107          throw new FHIRException("Unknown ProcedureRequestStatus code '"+codeString+"'");
108        }
109        public String toCode() {
110          switch (this) {
111            case DRAFT: return "draft";
112            case ACTIVE: return "active";
113            case SUSPENDED: return "suspended";
114            case CANCELLED: return "cancelled";
115            case COMPLETED: return "completed";
116            case ENTEREDINERROR: return "entered-in-error";
117            case UNKNOWN: return "unknown";
118            case NULL: return null;
119            default: return "?";
120          }
121        }
122        public String getSystem() {
123          switch (this) {
124            case DRAFT: return "http://hl7.org/fhir/request-status";
125            case ACTIVE: return "http://hl7.org/fhir/request-status";
126            case SUSPENDED: return "http://hl7.org/fhir/request-status";
127            case CANCELLED: return "http://hl7.org/fhir/request-status";
128            case COMPLETED: return "http://hl7.org/fhir/request-status";
129            case ENTEREDINERROR: return "http://hl7.org/fhir/request-status";
130            case UNKNOWN: return "http://hl7.org/fhir/request-status";
131            case NULL: return null;
132            default: return "?";
133          }
134        }
135        public String getDefinition() {
136          switch (this) {
137            case DRAFT: return "The request has been created but is not yet complete or ready for action";
138            case ACTIVE: return "The request is ready to be acted upon";
139            case SUSPENDED: return "The authorization/request to act has been temporarily withdrawn but is expected to resume in the future";
140            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.";
141            case COMPLETED: return "Activity against the request has been sufficiently completed to the satisfaction of the requester";
142            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\".)";
143            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.";
144            case NULL: return null;
145            default: return "?";
146          }
147        }
148        public String getDisplay() {
149          switch (this) {
150            case DRAFT: return "Draft";
151            case ACTIVE: return "Active";
152            case SUSPENDED: return "Suspended";
153            case CANCELLED: return "Cancelled";
154            case COMPLETED: return "Completed";
155            case ENTEREDINERROR: return "Entered in Error";
156            case UNKNOWN: return "Unknown";
157            case NULL: return null;
158            default: return "?";
159          }
160        }
161    }
162
163  public static class ProcedureRequestStatusEnumFactory implements EnumFactory<ProcedureRequestStatus> {
164    public ProcedureRequestStatus fromCode(String codeString) throws IllegalArgumentException {
165      if (codeString == null || "".equals(codeString))
166            if (codeString == null || "".equals(codeString))
167                return null;
168        if ("draft".equals(codeString))
169          return ProcedureRequestStatus.DRAFT;
170        if ("active".equals(codeString))
171          return ProcedureRequestStatus.ACTIVE;
172        if ("suspended".equals(codeString))
173          return ProcedureRequestStatus.SUSPENDED;
174        if ("cancelled".equals(codeString))
175          return ProcedureRequestStatus.CANCELLED;
176        if ("completed".equals(codeString))
177          return ProcedureRequestStatus.COMPLETED;
178        if ("entered-in-error".equals(codeString))
179          return ProcedureRequestStatus.ENTEREDINERROR;
180        if ("unknown".equals(codeString))
181          return ProcedureRequestStatus.UNKNOWN;
182        throw new IllegalArgumentException("Unknown ProcedureRequestStatus code '"+codeString+"'");
183        }
184        public Enumeration<ProcedureRequestStatus> fromType(PrimitiveType<?> code) throws FHIRException {
185          if (code == null)
186            return null;
187          if (code.isEmpty())
188            return new Enumeration<ProcedureRequestStatus>(this);
189          String codeString = code.asStringValue();
190          if (codeString == null || "".equals(codeString))
191            return null;
192        if ("draft".equals(codeString))
193          return new Enumeration<ProcedureRequestStatus>(this, ProcedureRequestStatus.DRAFT);
194        if ("active".equals(codeString))
195          return new Enumeration<ProcedureRequestStatus>(this, ProcedureRequestStatus.ACTIVE);
196        if ("suspended".equals(codeString))
197          return new Enumeration<ProcedureRequestStatus>(this, ProcedureRequestStatus.SUSPENDED);
198        if ("cancelled".equals(codeString))
199          return new Enumeration<ProcedureRequestStatus>(this, ProcedureRequestStatus.CANCELLED);
200        if ("completed".equals(codeString))
201          return new Enumeration<ProcedureRequestStatus>(this, ProcedureRequestStatus.COMPLETED);
202        if ("entered-in-error".equals(codeString))
203          return new Enumeration<ProcedureRequestStatus>(this, ProcedureRequestStatus.ENTEREDINERROR);
204        if ("unknown".equals(codeString))
205          return new Enumeration<ProcedureRequestStatus>(this, ProcedureRequestStatus.UNKNOWN);
206        throw new FHIRException("Unknown ProcedureRequestStatus code '"+codeString+"'");
207        }
208    public String toCode(ProcedureRequestStatus code) {
209      if (code == ProcedureRequestStatus.DRAFT)
210        return "draft";
211      if (code == ProcedureRequestStatus.ACTIVE)
212        return "active";
213      if (code == ProcedureRequestStatus.SUSPENDED)
214        return "suspended";
215      if (code == ProcedureRequestStatus.CANCELLED)
216        return "cancelled";
217      if (code == ProcedureRequestStatus.COMPLETED)
218        return "completed";
219      if (code == ProcedureRequestStatus.ENTEREDINERROR)
220        return "entered-in-error";
221      if (code == ProcedureRequestStatus.UNKNOWN)
222        return "unknown";
223      return "?";
224      }
225    public String toSystem(ProcedureRequestStatus code) {
226      return code.getSystem();
227      }
228    }
229
230    public enum ProcedureRequestIntent {
231        /**
232         * 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
233         */
234        PROPOSAL, 
235        /**
236         * The request represents an intension to ensure something occurs without providing an authorization for others to act
237         */
238        PLAN, 
239        /**
240         * The request represents a request/demand and authorization for action
241         */
242        ORDER, 
243        /**
244         * The request represents an original authorization for action
245         */
246        ORIGINALORDER, 
247        /**
248         * 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
249         */
250        REFLEXORDER, 
251        /**
252         * 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
253         */
254        FILLERORDER, 
255        /**
256         * 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.
257         */
258        INSTANCEORDER, 
259        /**
260         * The request represents a component or option for a RequestGroup that establishes timing, conditionality and/or other constraints among a set of requests.
261
262Refer to [[[RequestGroup]]] for additional information on how this status is used
263         */
264        OPTION, 
265        /**
266         * added to help the parsers with the generic types
267         */
268        NULL;
269        public static ProcedureRequestIntent fromCode(String codeString) throws FHIRException {
270            if (codeString == null || "".equals(codeString))
271                return null;
272        if ("proposal".equals(codeString))
273          return PROPOSAL;
274        if ("plan".equals(codeString))
275          return PLAN;
276        if ("order".equals(codeString))
277          return ORDER;
278        if ("original-order".equals(codeString))
279          return ORIGINALORDER;
280        if ("reflex-order".equals(codeString))
281          return REFLEXORDER;
282        if ("filler-order".equals(codeString))
283          return FILLERORDER;
284        if ("instance-order".equals(codeString))
285          return INSTANCEORDER;
286        if ("option".equals(codeString))
287          return OPTION;
288        if (Configuration.isAcceptInvalidEnums())
289          return null;
290        else
291          throw new FHIRException("Unknown ProcedureRequestIntent code '"+codeString+"'");
292        }
293        public String toCode() {
294          switch (this) {
295            case PROPOSAL: return "proposal";
296            case PLAN: return "plan";
297            case ORDER: return "order";
298            case ORIGINALORDER: return "original-order";
299            case REFLEXORDER: return "reflex-order";
300            case FILLERORDER: return "filler-order";
301            case INSTANCEORDER: return "instance-order";
302            case OPTION: return "option";
303            case NULL: return null;
304            default: return "?";
305          }
306        }
307        public String getSystem() {
308          switch (this) {
309            case PROPOSAL: return "http://hl7.org/fhir/request-intent";
310            case PLAN: return "http://hl7.org/fhir/request-intent";
311            case ORDER: return "http://hl7.org/fhir/request-intent";
312            case ORIGINALORDER: return "http://hl7.org/fhir/request-intent";
313            case REFLEXORDER: return "http://hl7.org/fhir/request-intent";
314            case FILLERORDER: return "http://hl7.org/fhir/request-intent";
315            case INSTANCEORDER: return "http://hl7.org/fhir/request-intent";
316            case OPTION: return "http://hl7.org/fhir/request-intent";
317            case NULL: return null;
318            default: return "?";
319          }
320        }
321        public String getDefinition() {
322          switch (this) {
323            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";
324            case PLAN: return "The request represents an intension to ensure something occurs without providing an authorization for others to act";
325            case ORDER: return "The request represents a request/demand and authorization for action";
326            case ORIGINALORDER: return "The request represents an original authorization for action";
327            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";
328            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";
329            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.";
330            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";
331            case NULL: return null;
332            default: return "?";
333          }
334        }
335        public String getDisplay() {
336          switch (this) {
337            case PROPOSAL: return "Proposal";
338            case PLAN: return "Plan";
339            case ORDER: return "Order";
340            case ORIGINALORDER: return "Original Order";
341            case REFLEXORDER: return "Reflex Order";
342            case FILLERORDER: return "Filler Order";
343            case INSTANCEORDER: return "Instance Order";
344            case OPTION: return "Option";
345            case NULL: return null;
346            default: return "?";
347          }
348        }
349    }
350
351  public static class ProcedureRequestIntentEnumFactory implements EnumFactory<ProcedureRequestIntent> {
352    public ProcedureRequestIntent fromCode(String codeString) throws IllegalArgumentException {
353      if (codeString == null || "".equals(codeString))
354            if (codeString == null || "".equals(codeString))
355                return null;
356        if ("proposal".equals(codeString))
357          return ProcedureRequestIntent.PROPOSAL;
358        if ("plan".equals(codeString))
359          return ProcedureRequestIntent.PLAN;
360        if ("order".equals(codeString))
361          return ProcedureRequestIntent.ORDER;
362        if ("original-order".equals(codeString))
363          return ProcedureRequestIntent.ORIGINALORDER;
364        if ("reflex-order".equals(codeString))
365          return ProcedureRequestIntent.REFLEXORDER;
366        if ("filler-order".equals(codeString))
367          return ProcedureRequestIntent.FILLERORDER;
368        if ("instance-order".equals(codeString))
369          return ProcedureRequestIntent.INSTANCEORDER;
370        if ("option".equals(codeString))
371          return ProcedureRequestIntent.OPTION;
372        throw new IllegalArgumentException("Unknown ProcedureRequestIntent code '"+codeString+"'");
373        }
374        public Enumeration<ProcedureRequestIntent> fromType(PrimitiveType<?> code) throws FHIRException {
375          if (code == null)
376            return null;
377          if (code.isEmpty())
378            return new Enumeration<ProcedureRequestIntent>(this);
379          String codeString = code.asStringValue();
380          if (codeString == null || "".equals(codeString))
381            return null;
382        if ("proposal".equals(codeString))
383          return new Enumeration<ProcedureRequestIntent>(this, ProcedureRequestIntent.PROPOSAL);
384        if ("plan".equals(codeString))
385          return new Enumeration<ProcedureRequestIntent>(this, ProcedureRequestIntent.PLAN);
386        if ("order".equals(codeString))
387          return new Enumeration<ProcedureRequestIntent>(this, ProcedureRequestIntent.ORDER);
388        if ("original-order".equals(codeString))
389          return new Enumeration<ProcedureRequestIntent>(this, ProcedureRequestIntent.ORIGINALORDER);
390        if ("reflex-order".equals(codeString))
391          return new Enumeration<ProcedureRequestIntent>(this, ProcedureRequestIntent.REFLEXORDER);
392        if ("filler-order".equals(codeString))
393          return new Enumeration<ProcedureRequestIntent>(this, ProcedureRequestIntent.FILLERORDER);
394        if ("instance-order".equals(codeString))
395          return new Enumeration<ProcedureRequestIntent>(this, ProcedureRequestIntent.INSTANCEORDER);
396        if ("option".equals(codeString))
397          return new Enumeration<ProcedureRequestIntent>(this, ProcedureRequestIntent.OPTION);
398        throw new FHIRException("Unknown ProcedureRequestIntent code '"+codeString+"'");
399        }
400    public String toCode(ProcedureRequestIntent code) {
401      if (code == ProcedureRequestIntent.PROPOSAL)
402        return "proposal";
403      if (code == ProcedureRequestIntent.PLAN)
404        return "plan";
405      if (code == ProcedureRequestIntent.ORDER)
406        return "order";
407      if (code == ProcedureRequestIntent.ORIGINALORDER)
408        return "original-order";
409      if (code == ProcedureRequestIntent.REFLEXORDER)
410        return "reflex-order";
411      if (code == ProcedureRequestIntent.FILLERORDER)
412        return "filler-order";
413      if (code == ProcedureRequestIntent.INSTANCEORDER)
414        return "instance-order";
415      if (code == ProcedureRequestIntent.OPTION)
416        return "option";
417      return "?";
418      }
419    public String toSystem(ProcedureRequestIntent code) {
420      return code.getSystem();
421      }
422    }
423
424    public enum ProcedureRequestPriority {
425        /**
426         * The request has normal priority
427         */
428        ROUTINE, 
429        /**
430         * The request should be actioned promptly - higher priority than routine
431         */
432        URGENT, 
433        /**
434         * The request should be actioned as soon as possible - higher priority than urgent
435         */
436        ASAP, 
437        /**
438         * The request should be actioned immediately - highest possible priority.  E.g. an emergency
439         */
440        STAT, 
441        /**
442         * added to help the parsers with the generic types
443         */
444        NULL;
445        public static ProcedureRequestPriority fromCode(String codeString) throws FHIRException {
446            if (codeString == null || "".equals(codeString))
447                return null;
448        if ("routine".equals(codeString))
449          return ROUTINE;
450        if ("urgent".equals(codeString))
451          return URGENT;
452        if ("asap".equals(codeString))
453          return ASAP;
454        if ("stat".equals(codeString))
455          return STAT;
456        if (Configuration.isAcceptInvalidEnums())
457          return null;
458        else
459          throw new FHIRException("Unknown ProcedureRequestPriority code '"+codeString+"'");
460        }
461        public String toCode() {
462          switch (this) {
463            case ROUTINE: return "routine";
464            case URGENT: return "urgent";
465            case ASAP: return "asap";
466            case STAT: return "stat";
467            case NULL: return null;
468            default: return "?";
469          }
470        }
471        public String getSystem() {
472          switch (this) {
473            case ROUTINE: return "http://hl7.org/fhir/request-priority";
474            case URGENT: return "http://hl7.org/fhir/request-priority";
475            case ASAP: return "http://hl7.org/fhir/request-priority";
476            case STAT: return "http://hl7.org/fhir/request-priority";
477            case NULL: return null;
478            default: return "?";
479          }
480        }
481        public String getDefinition() {
482          switch (this) {
483            case ROUTINE: return "The request has normal priority";
484            case URGENT: return "The request should be actioned promptly - higher priority than routine";
485            case ASAP: return "The request should be actioned as soon as possible - higher priority than urgent";
486            case STAT: return "The request should be actioned immediately - highest possible priority.  E.g. an emergency";
487            case NULL: return null;
488            default: return "?";
489          }
490        }
491        public String getDisplay() {
492          switch (this) {
493            case ROUTINE: return "Routine";
494            case URGENT: return "Urgent";
495            case ASAP: return "ASAP";
496            case STAT: return "STAT";
497            case NULL: return null;
498            default: return "?";
499          }
500        }
501    }
502
503  public static class ProcedureRequestPriorityEnumFactory implements EnumFactory<ProcedureRequestPriority> {
504    public ProcedureRequestPriority fromCode(String codeString) throws IllegalArgumentException {
505      if (codeString == null || "".equals(codeString))
506            if (codeString == null || "".equals(codeString))
507                return null;
508        if ("routine".equals(codeString))
509          return ProcedureRequestPriority.ROUTINE;
510        if ("urgent".equals(codeString))
511          return ProcedureRequestPriority.URGENT;
512        if ("asap".equals(codeString))
513          return ProcedureRequestPriority.ASAP;
514        if ("stat".equals(codeString))
515          return ProcedureRequestPriority.STAT;
516        throw new IllegalArgumentException("Unknown ProcedureRequestPriority code '"+codeString+"'");
517        }
518        public Enumeration<ProcedureRequestPriority> fromType(PrimitiveType<?> code) throws FHIRException {
519          if (code == null)
520            return null;
521          if (code.isEmpty())
522            return new Enumeration<ProcedureRequestPriority>(this);
523          String codeString = code.asStringValue();
524          if (codeString == null || "".equals(codeString))
525            return null;
526        if ("routine".equals(codeString))
527          return new Enumeration<ProcedureRequestPriority>(this, ProcedureRequestPriority.ROUTINE);
528        if ("urgent".equals(codeString))
529          return new Enumeration<ProcedureRequestPriority>(this, ProcedureRequestPriority.URGENT);
530        if ("asap".equals(codeString))
531          return new Enumeration<ProcedureRequestPriority>(this, ProcedureRequestPriority.ASAP);
532        if ("stat".equals(codeString))
533          return new Enumeration<ProcedureRequestPriority>(this, ProcedureRequestPriority.STAT);
534        throw new FHIRException("Unknown ProcedureRequestPriority code '"+codeString+"'");
535        }
536    public String toCode(ProcedureRequestPriority code) {
537      if (code == ProcedureRequestPriority.ROUTINE)
538        return "routine";
539      if (code == ProcedureRequestPriority.URGENT)
540        return "urgent";
541      if (code == ProcedureRequestPriority.ASAP)
542        return "asap";
543      if (code == ProcedureRequestPriority.STAT)
544        return "stat";
545      return "?";
546      }
547    public String toSystem(ProcedureRequestPriority code) {
548      return code.getSystem();
549      }
550    }
551
552    @Block()
553    public static class ProcedureRequestRequesterComponent extends BackboneElement implements IBaseBackboneElement {
554        /**
555         * The device, practitioner or organization who initiated the request.
556         */
557        @Child(name = "agent", type = {Device.class, Practitioner.class, Organization.class}, order=1, min=1, max=1, modifier=false, summary=true)
558        @Description(shortDefinition="Individual making the request", formalDefinition="The device, practitioner or organization who initiated the request." )
559        protected Reference agent;
560
561        /**
562         * The actual object that is the target of the reference (The device, practitioner or organization who initiated the request.)
563         */
564        protected Resource agentTarget;
565
566        /**
567         * The organization the device or practitioner was acting on behalf of.
568         */
569        @Child(name = "onBehalfOf", type = {Organization.class}, order=2, min=0, max=1, modifier=false, summary=true)
570        @Description(shortDefinition="Organization agent is acting for", formalDefinition="The organization the device or practitioner was acting on behalf of." )
571        protected Reference onBehalfOf;
572
573        /**
574         * The actual object that is the target of the reference (The organization the device or practitioner was acting on behalf of.)
575         */
576        protected Organization onBehalfOfTarget;
577
578        private static final long serialVersionUID = -71453027L;
579
580    /**
581     * Constructor
582     */
583      public ProcedureRequestRequesterComponent() {
584        super();
585      }
586
587    /**
588     * Constructor
589     */
590      public ProcedureRequestRequesterComponent(Reference agent) {
591        super();
592        this.agent = agent;
593      }
594
595        /**
596         * @return {@link #agent} (The device, practitioner or organization who initiated the request.)
597         */
598        public Reference getAgent() { 
599          if (this.agent == null)
600            if (Configuration.errorOnAutoCreate())
601              throw new Error("Attempt to auto-create ProcedureRequestRequesterComponent.agent");
602            else if (Configuration.doAutoCreate())
603              this.agent = new Reference(); // cc
604          return this.agent;
605        }
606
607        public boolean hasAgent() { 
608          return this.agent != null && !this.agent.isEmpty();
609        }
610
611        /**
612         * @param value {@link #agent} (The device, practitioner or organization who initiated the request.)
613         */
614        public ProcedureRequestRequesterComponent setAgent(Reference value)  { 
615          this.agent = value;
616          return this;
617        }
618
619        /**
620         * @return {@link #agent} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The device, practitioner or organization who initiated the request.)
621         */
622        public Resource getAgentTarget() { 
623          return this.agentTarget;
624        }
625
626        /**
627         * @param value {@link #agent} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The device, practitioner or organization who initiated the request.)
628         */
629        public ProcedureRequestRequesterComponent setAgentTarget(Resource value) { 
630          this.agentTarget = value;
631          return this;
632        }
633
634        /**
635         * @return {@link #onBehalfOf} (The organization the device or practitioner was acting on behalf of.)
636         */
637        public Reference getOnBehalfOf() { 
638          if (this.onBehalfOf == null)
639            if (Configuration.errorOnAutoCreate())
640              throw new Error("Attempt to auto-create ProcedureRequestRequesterComponent.onBehalfOf");
641            else if (Configuration.doAutoCreate())
642              this.onBehalfOf = new Reference(); // cc
643          return this.onBehalfOf;
644        }
645
646        public boolean hasOnBehalfOf() { 
647          return this.onBehalfOf != null && !this.onBehalfOf.isEmpty();
648        }
649
650        /**
651         * @param value {@link #onBehalfOf} (The organization the device or practitioner was acting on behalf of.)
652         */
653        public ProcedureRequestRequesterComponent setOnBehalfOf(Reference value)  { 
654          this.onBehalfOf = value;
655          return this;
656        }
657
658        /**
659         * @return {@link #onBehalfOf} 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 organization the device or practitioner was acting on behalf of.)
660         */
661        public Organization getOnBehalfOfTarget() { 
662          if (this.onBehalfOfTarget == null)
663            if (Configuration.errorOnAutoCreate())
664              throw new Error("Attempt to auto-create ProcedureRequestRequesterComponent.onBehalfOf");
665            else if (Configuration.doAutoCreate())
666              this.onBehalfOfTarget = new Organization(); // aa
667          return this.onBehalfOfTarget;
668        }
669
670        /**
671         * @param value {@link #onBehalfOf} 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 organization the device or practitioner was acting on behalf of.)
672         */
673        public ProcedureRequestRequesterComponent setOnBehalfOfTarget(Organization value) { 
674          this.onBehalfOfTarget = value;
675          return this;
676        }
677
678        protected void listChildren(List<Property> children) {
679          super.listChildren(children);
680          children.add(new Property("agent", "Reference(Device|Practitioner|Organization)", "The device, practitioner or organization who initiated the request.", 0, 1, agent));
681          children.add(new Property("onBehalfOf", "Reference(Organization)", "The organization the device or practitioner was acting on behalf of.", 0, 1, onBehalfOf));
682        }
683
684        @Override
685        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
686          switch (_hash) {
687          case 92750597: /*agent*/  return new Property("agent", "Reference(Device|Practitioner|Organization)", "The device, practitioner or organization who initiated the request.", 0, 1, agent);
688          case -14402964: /*onBehalfOf*/  return new Property("onBehalfOf", "Reference(Organization)", "The organization the device or practitioner was acting on behalf of.", 0, 1, onBehalfOf);
689          default: return super.getNamedProperty(_hash, _name, _checkValid);
690          }
691
692        }
693
694      @Override
695      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
696        switch (hash) {
697        case 92750597: /*agent*/ return this.agent == null ? new Base[0] : new Base[] {this.agent}; // Reference
698        case -14402964: /*onBehalfOf*/ return this.onBehalfOf == null ? new Base[0] : new Base[] {this.onBehalfOf}; // Reference
699        default: return super.getProperty(hash, name, checkValid);
700        }
701
702      }
703
704      @Override
705      public Base setProperty(int hash, String name, Base value) throws FHIRException {
706        switch (hash) {
707        case 92750597: // agent
708          this.agent = castToReference(value); // Reference
709          return value;
710        case -14402964: // onBehalfOf
711          this.onBehalfOf = castToReference(value); // Reference
712          return value;
713        default: return super.setProperty(hash, name, value);
714        }
715
716      }
717
718      @Override
719      public Base setProperty(String name, Base value) throws FHIRException {
720        if (name.equals("agent")) {
721          this.agent = castToReference(value); // Reference
722        } else if (name.equals("onBehalfOf")) {
723          this.onBehalfOf = castToReference(value); // Reference
724        } else
725          return super.setProperty(name, value);
726        return value;
727      }
728
729      @Override
730      public Base makeProperty(int hash, String name) throws FHIRException {
731        switch (hash) {
732        case 92750597:  return getAgent(); 
733        case -14402964:  return getOnBehalfOf(); 
734        default: return super.makeProperty(hash, name);
735        }
736
737      }
738
739      @Override
740      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
741        switch (hash) {
742        case 92750597: /*agent*/ return new String[] {"Reference"};
743        case -14402964: /*onBehalfOf*/ return new String[] {"Reference"};
744        default: return super.getTypesForProperty(hash, name);
745        }
746
747      }
748
749      @Override
750      public Base addChild(String name) throws FHIRException {
751        if (name.equals("agent")) {
752          this.agent = new Reference();
753          return this.agent;
754        }
755        else if (name.equals("onBehalfOf")) {
756          this.onBehalfOf = new Reference();
757          return this.onBehalfOf;
758        }
759        else
760          return super.addChild(name);
761      }
762
763      public ProcedureRequestRequesterComponent copy() {
764        ProcedureRequestRequesterComponent dst = new ProcedureRequestRequesterComponent();
765        copyValues(dst);
766        dst.agent = agent == null ? null : agent.copy();
767        dst.onBehalfOf = onBehalfOf == null ? null : onBehalfOf.copy();
768        return dst;
769      }
770
771      @Override
772      public boolean equalsDeep(Base other_) {
773        if (!super.equalsDeep(other_))
774          return false;
775        if (!(other_ instanceof ProcedureRequestRequesterComponent))
776          return false;
777        ProcedureRequestRequesterComponent o = (ProcedureRequestRequesterComponent) other_;
778        return compareDeep(agent, o.agent, true) && compareDeep(onBehalfOf, o.onBehalfOf, true);
779      }
780
781      @Override
782      public boolean equalsShallow(Base other_) {
783        if (!super.equalsShallow(other_))
784          return false;
785        if (!(other_ instanceof ProcedureRequestRequesterComponent))
786          return false;
787        ProcedureRequestRequesterComponent o = (ProcedureRequestRequesterComponent) other_;
788        return true;
789      }
790
791      public boolean isEmpty() {
792        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(agent, onBehalfOf);
793      }
794
795  public String fhirType() {
796    return "ProcedureRequest.requester";
797
798  }
799
800  }
801
802    /**
803     * Identifiers assigned to this order instance by the orderer and/or the receiver and/or order fulfiller.
804     */
805    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
806    @Description(shortDefinition="Identifiers assigned to this order", formalDefinition="Identifiers assigned to this order instance by the orderer and/or the receiver and/or order fulfiller." )
807    protected List<Identifier> identifier;
808
809    /**
810     * Protocol or definition followed by this request.
811     */
812    @Child(name = "definition", type = {ActivityDefinition.class, PlanDefinition.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
813    @Description(shortDefinition="Protocol or definition", formalDefinition="Protocol or definition followed by this request." )
814    protected List<Reference> definition;
815    /**
816     * The actual objects that are the target of the reference (Protocol or definition followed by this request.)
817     */
818    protected List<Resource> definitionTarget;
819
820
821    /**
822     * Plan/proposal/order fulfilled by this request.
823     */
824    @Child(name = "basedOn", type = {Reference.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
825    @Description(shortDefinition="What request fulfills", formalDefinition="Plan/proposal/order fulfilled by this request." )
826    protected List<Reference> basedOn;
827    /**
828     * The actual objects that are the target of the reference (Plan/proposal/order fulfilled by this request.)
829     */
830    protected List<Resource> basedOnTarget;
831
832
833    /**
834     * The request takes the place of the referenced completed or terminated request(s).
835     */
836    @Child(name = "replaces", type = {Reference.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
837    @Description(shortDefinition="What request replaces", formalDefinition="The request takes the place of the referenced completed or terminated request(s)." )
838    protected List<Reference> replaces;
839    /**
840     * The actual objects that are the target of the reference (The request takes the place of the referenced completed or terminated request(s).)
841     */
842    protected List<Resource> replacesTarget;
843
844
845    /**
846     * A shared identifier common to all procedure or diagnostic requests that were authorized more or less simultaneously by a single author, representing the composite or group identifier.
847     */
848    @Child(name = "requisition", type = {Identifier.class}, order=4, min=0, max=1, modifier=false, summary=true)
849    @Description(shortDefinition="Composite Request ID", formalDefinition="A shared identifier common to all procedure or diagnostic requests that were authorized more or less simultaneously by a single author, representing the composite or group identifier." )
850    protected Identifier requisition;
851
852    /**
853     * The status of the order.
854     */
855    @Child(name = "status", type = {CodeType.class}, order=5, min=1, max=1, modifier=true, summary=true)
856    @Description(shortDefinition="draft | active | suspended | completed | entered-in-error | cancelled", formalDefinition="The status of the order." )
857    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-status")
858    protected Enumeration<ProcedureRequestStatus> status;
859
860    /**
861     * Whether the request is a proposal, plan, an original order or a reflex order.
862     */
863    @Child(name = "intent", type = {CodeType.class}, order=6, min=1, max=1, modifier=true, summary=true)
864    @Description(shortDefinition="proposal | plan | order +", formalDefinition="Whether the request is a proposal, plan, an original order or a reflex order." )
865    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-intent")
866    protected Enumeration<ProcedureRequestIntent> intent;
867
868    /**
869     * Indicates how quickly the ProcedureRequest should be addressed with respect to other requests.
870     */
871    @Child(name = "priority", type = {CodeType.class}, order=7, min=0, max=1, modifier=false, summary=true)
872    @Description(shortDefinition="routine | urgent | asap | stat", formalDefinition="Indicates how quickly the ProcedureRequest should be addressed with respect to other requests." )
873    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-priority")
874    protected Enumeration<ProcedureRequestPriority> priority;
875
876    /**
877     * Set this to true if the record is saying that the procedure should NOT be performed.
878     */
879    @Child(name = "doNotPerform", type = {BooleanType.class}, order=8, min=0, max=1, modifier=true, summary=true)
880    @Description(shortDefinition="True if procedure should not be performed", formalDefinition="Set this to true if the record is saying that the procedure should NOT be performed." )
881    protected BooleanType doNotPerform;
882
883    /**
884     * A code that classifies the procedure for searching, sorting and display purposes (e.g. "Surgical Procedure").
885     */
886    @Child(name = "category", type = {CodeableConcept.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
887    @Description(shortDefinition="Classification of procedure", formalDefinition="A code that classifies the procedure for searching, sorting and display purposes (e.g. \"Surgical Procedure\")." )
888    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-category")
889    protected List<CodeableConcept> category;
890
891    /**
892     * A code that identifies a particular procedure, diagnostic investigation, or panel of investigations, that have been requested.
893     */
894    @Child(name = "code", type = {CodeableConcept.class}, order=10, min=1, max=1, modifier=false, summary=true)
895    @Description(shortDefinition="What is being requested/ordered", formalDefinition="A code that identifies a particular procedure, diagnostic investigation, or panel of investigations, that have been requested." )
896    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-code")
897    protected CodeableConcept code;
898
899    /**
900     * On whom or what the procedure or diagnostic is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans).
901     */
902    @Child(name = "subject", type = {Patient.class, Group.class, Location.class, Device.class}, order=11, min=1, max=1, modifier=false, summary=true)
903    @Description(shortDefinition="Individual the service is ordered for", formalDefinition="On whom or what the procedure or diagnostic is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans)." )
904    protected Reference subject;
905
906    /**
907     * The actual object that is the target of the reference (On whom or what the procedure or diagnostic is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans).)
908     */
909    protected Resource subjectTarget;
910
911    /**
912     * An encounter or episode of care that provides additional information about the healthcare context in which this request is made.
913     */
914    @Child(name = "context", type = {Encounter.class, EpisodeOfCare.class}, order=12, min=0, max=1, modifier=false, summary=true)
915    @Description(shortDefinition="Encounter or Episode during which request was created", formalDefinition="An encounter or episode of care that provides additional information about the healthcare context in which this request is made." )
916    protected Reference context;
917
918    /**
919     * The actual object that is the target of the reference (An encounter or episode of care that provides additional information about the healthcare context in which this request is made.)
920     */
921    protected Resource contextTarget;
922
923    /**
924     * The date/time at which the diagnostic testing should occur.
925     */
926    @Child(name = "occurrence", type = {DateTimeType.class, Period.class, Timing.class}, order=13, min=0, max=1, modifier=false, summary=true)
927    @Description(shortDefinition="When procedure should occur", formalDefinition="The date/time at which the diagnostic testing should occur." )
928    protected Type occurrence;
929
930    /**
931     * If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example "pain", "on flare-up", etc.
932     */
933    @Child(name = "asNeeded", type = {BooleanType.class, CodeableConcept.class}, order=14, min=0, max=1, modifier=false, summary=true)
934    @Description(shortDefinition="Preconditions for procedure or diagnostic", formalDefinition="If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example \"pain\", \"on flare-up\", etc." )
935    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/medication-as-needed-reason")
936    protected Type asNeeded;
937
938    /**
939     * When the request transitioned to being actionable.
940     */
941    @Child(name = "authoredOn", type = {DateTimeType.class}, order=15, min=0, max=1, modifier=false, summary=true)
942    @Description(shortDefinition="Date request signed", formalDefinition="When the request transitioned to being actionable." )
943    protected DateTimeType authoredOn;
944
945    /**
946     * The individual who initiated the request and has responsibility for its activation.
947     */
948    @Child(name = "requester", type = {}, order=16, min=0, max=1, modifier=false, summary=true)
949    @Description(shortDefinition="Who/what is requesting procedure or diagnostic", formalDefinition="The individual who initiated the request and has responsibility for its activation." )
950    protected ProcedureRequestRequesterComponent requester;
951
952    /**
953     * Desired type of performer for doing the diagnostic testing.
954     */
955    @Child(name = "performerType", type = {CodeableConcept.class}, order=17, min=0, max=1, modifier=false, summary=true)
956    @Description(shortDefinition="Performer role", formalDefinition="Desired type of performer for doing the diagnostic testing." )
957    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/participant-role")
958    protected CodeableConcept performerType;
959
960    /**
961     * The desired perfomer for doing the diagnostic testing.  For example, the surgeon, dermatopathologist, endoscopist, etc.
962     */
963    @Child(name = "performer", type = {Practitioner.class, Organization.class, Patient.class, Device.class, RelatedPerson.class, HealthcareService.class}, order=18, min=0, max=1, modifier=false, summary=true)
964    @Description(shortDefinition="Requested perfomer", formalDefinition="The desired perfomer for doing the diagnostic testing.  For example, the surgeon, dermatopathologist, endoscopist, etc." )
965    protected Reference performer;
966
967    /**
968     * The actual object that is the target of the reference (The desired perfomer for doing the diagnostic testing.  For example, the surgeon, dermatopathologist, endoscopist, etc.)
969     */
970    protected Resource performerTarget;
971
972    /**
973     * An explanation or justification for why this diagnostic investigation is being requested in coded or textual form.   This is often for billing purposes.  May relate to the resources referred to in supportingInformation.
974     */
975    @Child(name = "reasonCode", type = {CodeableConcept.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
976    @Description(shortDefinition="Explanation/Justification for test", formalDefinition="An explanation or justification for why this diagnostic investigation is being requested in coded or textual form.   This is often for billing purposes.  May relate to the resources referred to in supportingInformation." )
977    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-reason")
978    protected List<CodeableConcept> reasonCode;
979
980    /**
981     * Indicates another resource that provides a justification for why this diagnostic investigation is being requested.   May relate to the resources referred to in supportingInformation.
982     */
983    @Child(name = "reasonReference", type = {Condition.class, Observation.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
984    @Description(shortDefinition="Explanation/Justification for test", formalDefinition="Indicates another resource that provides a justification for why this diagnostic investigation is being requested.   May relate to the resources referred to in supportingInformation." )
985    protected List<Reference> reasonReference;
986    /**
987     * The actual objects that are the target of the reference (Indicates another resource that provides a justification for why this diagnostic investigation is being requested.   May relate to the resources referred to in supportingInformation.)
988     */
989    protected List<Resource> reasonReferenceTarget;
990
991
992    /**
993     * Additional clinical information about the patient or specimen that may influence the procedure or diagnostics or their interpretations.     This information includes diagnosis, clinical findings and other observations.  In laboratory ordering these are typically referred to as "ask at order entry questions (AOEs)".  This includes observations explicitly requested by the producer (filler) to provide context or supporting information needed to complete the order. For example,  reporting the amount of inspired oxygen for blood gas measurements.
994     */
995    @Child(name = "supportingInfo", type = {Reference.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
996    @Description(shortDefinition="Additional clinical information", formalDefinition="Additional clinical information about the patient or specimen that may influence the procedure or diagnostics or their interpretations.     This information includes diagnosis, clinical findings and other observations.  In laboratory ordering these are typically referred to as \"ask at order entry questions (AOEs)\".  This includes observations explicitly requested by the producer (filler) to provide context or supporting information needed to complete the order. For example,  reporting the amount of inspired oxygen for blood gas measurements." )
997    protected List<Reference> supportingInfo;
998    /**
999     * The actual objects that are the target of the reference (Additional clinical information about the patient or specimen that may influence the procedure or diagnostics or their interpretations.     This information includes diagnosis, clinical findings and other observations.  In laboratory ordering these are typically referred to as "ask at order entry questions (AOEs)".  This includes observations explicitly requested by the producer (filler) to provide context or supporting information needed to complete the order. For example,  reporting the amount of inspired oxygen for blood gas measurements.)
1000     */
1001    protected List<Resource> supportingInfoTarget;
1002
1003
1004    /**
1005     * One or more specimens that the laboratory procedure will use.
1006     */
1007    @Child(name = "specimen", type = {Specimen.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1008    @Description(shortDefinition="Procedure Samples", formalDefinition="One or more specimens that the laboratory procedure will use." )
1009    protected List<Reference> specimen;
1010    /**
1011     * The actual objects that are the target of the reference (One or more specimens that the laboratory procedure will use.)
1012     */
1013    protected List<Specimen> specimenTarget;
1014
1015
1016    /**
1017     * Anatomic location where the procedure should be performed. This is the target site.
1018     */
1019    @Child(name = "bodySite", type = {CodeableConcept.class}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1020    @Description(shortDefinition="Location on Body", formalDefinition="Anatomic location where the procedure should be performed. This is the target site." )
1021    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/body-site")
1022    protected List<CodeableConcept> bodySite;
1023
1024    /**
1025     * Any other notes and comments made about the service request. For example, letting provider know that "patient hates needles" or other provider instructions.
1026     */
1027    @Child(name = "note", type = {Annotation.class}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1028    @Description(shortDefinition="Comments", formalDefinition="Any other notes and comments made about the service request. For example, letting provider know that \"patient hates needles\" or other provider instructions." )
1029    protected List<Annotation> note;
1030
1031    /**
1032     * Key events in the history of the request.
1033     */
1034    @Child(name = "relevantHistory", type = {Provenance.class}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1035    @Description(shortDefinition="Request provenance", formalDefinition="Key events in the history of the request." )
1036    protected List<Reference> relevantHistory;
1037    /**
1038     * The actual objects that are the target of the reference (Key events in the history of the request.)
1039     */
1040    protected List<Provenance> relevantHistoryTarget;
1041
1042
1043    private static final long serialVersionUID = 184396216L;
1044
1045  /**
1046   * Constructor
1047   */
1048    public ProcedureRequest() {
1049      super();
1050    }
1051
1052  /**
1053   * Constructor
1054   */
1055    public ProcedureRequest(Enumeration<ProcedureRequestStatus> status, Enumeration<ProcedureRequestIntent> intent, CodeableConcept code, Reference subject) {
1056      super();
1057      this.status = status;
1058      this.intent = intent;
1059      this.code = code;
1060      this.subject = subject;
1061    }
1062
1063    /**
1064     * @return {@link #identifier} (Identifiers assigned to this order instance by the orderer and/or the receiver and/or order fulfiller.)
1065     */
1066    public List<Identifier> getIdentifier() { 
1067      if (this.identifier == null)
1068        this.identifier = new ArrayList<Identifier>();
1069      return this.identifier;
1070    }
1071
1072    /**
1073     * @return Returns a reference to <code>this</code> for easy method chaining
1074     */
1075    public ProcedureRequest setIdentifier(List<Identifier> theIdentifier) { 
1076      this.identifier = theIdentifier;
1077      return this;
1078    }
1079
1080    public boolean hasIdentifier() { 
1081      if (this.identifier == null)
1082        return false;
1083      for (Identifier item : this.identifier)
1084        if (!item.isEmpty())
1085          return true;
1086      return false;
1087    }
1088
1089    public Identifier addIdentifier() { //3
1090      Identifier t = new Identifier();
1091      if (this.identifier == null)
1092        this.identifier = new ArrayList<Identifier>();
1093      this.identifier.add(t);
1094      return t;
1095    }
1096
1097    public ProcedureRequest addIdentifier(Identifier t) { //3
1098      if (t == null)
1099        return this;
1100      if (this.identifier == null)
1101        this.identifier = new ArrayList<Identifier>();
1102      this.identifier.add(t);
1103      return this;
1104    }
1105
1106    /**
1107     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1108     */
1109    public Identifier getIdentifierFirstRep() { 
1110      if (getIdentifier().isEmpty()) {
1111        addIdentifier();
1112      }
1113      return getIdentifier().get(0);
1114    }
1115
1116    /**
1117     * @return {@link #definition} (Protocol or definition followed by this request.)
1118     */
1119    public List<Reference> getDefinition() { 
1120      if (this.definition == null)
1121        this.definition = new ArrayList<Reference>();
1122      return this.definition;
1123    }
1124
1125    /**
1126     * @return Returns a reference to <code>this</code> for easy method chaining
1127     */
1128    public ProcedureRequest setDefinition(List<Reference> theDefinition) { 
1129      this.definition = theDefinition;
1130      return this;
1131    }
1132
1133    public boolean hasDefinition() { 
1134      if (this.definition == null)
1135        return false;
1136      for (Reference item : this.definition)
1137        if (!item.isEmpty())
1138          return true;
1139      return false;
1140    }
1141
1142    public Reference addDefinition() { //3
1143      Reference t = new Reference();
1144      if (this.definition == null)
1145        this.definition = new ArrayList<Reference>();
1146      this.definition.add(t);
1147      return t;
1148    }
1149
1150    public ProcedureRequest addDefinition(Reference t) { //3
1151      if (t == null)
1152        return this;
1153      if (this.definition == null)
1154        this.definition = new ArrayList<Reference>();
1155      this.definition.add(t);
1156      return this;
1157    }
1158
1159    /**
1160     * @return The first repetition of repeating field {@link #definition}, creating it if it does not already exist
1161     */
1162    public Reference getDefinitionFirstRep() { 
1163      if (getDefinition().isEmpty()) {
1164        addDefinition();
1165      }
1166      return getDefinition().get(0);
1167    }
1168
1169    /**
1170     * @deprecated Use Reference#setResource(IBaseResource) instead
1171     */
1172    @Deprecated
1173    public List<Resource> getDefinitionTarget() { 
1174      if (this.definitionTarget == null)
1175        this.definitionTarget = new ArrayList<Resource>();
1176      return this.definitionTarget;
1177    }
1178
1179    /**
1180     * @return {@link #basedOn} (Plan/proposal/order fulfilled by this request.)
1181     */
1182    public List<Reference> getBasedOn() { 
1183      if (this.basedOn == null)
1184        this.basedOn = new ArrayList<Reference>();
1185      return this.basedOn;
1186    }
1187
1188    /**
1189     * @return Returns a reference to <code>this</code> for easy method chaining
1190     */
1191    public ProcedureRequest setBasedOn(List<Reference> theBasedOn) { 
1192      this.basedOn = theBasedOn;
1193      return this;
1194    }
1195
1196    public boolean hasBasedOn() { 
1197      if (this.basedOn == null)
1198        return false;
1199      for (Reference item : this.basedOn)
1200        if (!item.isEmpty())
1201          return true;
1202      return false;
1203    }
1204
1205    public Reference addBasedOn() { //3
1206      Reference t = new Reference();
1207      if (this.basedOn == null)
1208        this.basedOn = new ArrayList<Reference>();
1209      this.basedOn.add(t);
1210      return t;
1211    }
1212
1213    public ProcedureRequest addBasedOn(Reference t) { //3
1214      if (t == null)
1215        return this;
1216      if (this.basedOn == null)
1217        this.basedOn = new ArrayList<Reference>();
1218      this.basedOn.add(t);
1219      return this;
1220    }
1221
1222    /**
1223     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist
1224     */
1225    public Reference getBasedOnFirstRep() { 
1226      if (getBasedOn().isEmpty()) {
1227        addBasedOn();
1228      }
1229      return getBasedOn().get(0);
1230    }
1231
1232    /**
1233     * @deprecated Use Reference#setResource(IBaseResource) instead
1234     */
1235    @Deprecated
1236    public List<Resource> getBasedOnTarget() { 
1237      if (this.basedOnTarget == null)
1238        this.basedOnTarget = new ArrayList<Resource>();
1239      return this.basedOnTarget;
1240    }
1241
1242    /**
1243     * @return {@link #replaces} (The request takes the place of the referenced completed or terminated request(s).)
1244     */
1245    public List<Reference> getReplaces() { 
1246      if (this.replaces == null)
1247        this.replaces = new ArrayList<Reference>();
1248      return this.replaces;
1249    }
1250
1251    /**
1252     * @return Returns a reference to <code>this</code> for easy method chaining
1253     */
1254    public ProcedureRequest setReplaces(List<Reference> theReplaces) { 
1255      this.replaces = theReplaces;
1256      return this;
1257    }
1258
1259    public boolean hasReplaces() { 
1260      if (this.replaces == null)
1261        return false;
1262      for (Reference item : this.replaces)
1263        if (!item.isEmpty())
1264          return true;
1265      return false;
1266    }
1267
1268    public Reference addReplaces() { //3
1269      Reference t = new Reference();
1270      if (this.replaces == null)
1271        this.replaces = new ArrayList<Reference>();
1272      this.replaces.add(t);
1273      return t;
1274    }
1275
1276    public ProcedureRequest addReplaces(Reference t) { //3
1277      if (t == null)
1278        return this;
1279      if (this.replaces == null)
1280        this.replaces = new ArrayList<Reference>();
1281      this.replaces.add(t);
1282      return this;
1283    }
1284
1285    /**
1286     * @return The first repetition of repeating field {@link #replaces}, creating it if it does not already exist
1287     */
1288    public Reference getReplacesFirstRep() { 
1289      if (getReplaces().isEmpty()) {
1290        addReplaces();
1291      }
1292      return getReplaces().get(0);
1293    }
1294
1295    /**
1296     * @deprecated Use Reference#setResource(IBaseResource) instead
1297     */
1298    @Deprecated
1299    public List<Resource> getReplacesTarget() { 
1300      if (this.replacesTarget == null)
1301        this.replacesTarget = new ArrayList<Resource>();
1302      return this.replacesTarget;
1303    }
1304
1305    /**
1306     * @return {@link #requisition} (A shared identifier common to all procedure or diagnostic requests that were authorized more or less simultaneously by a single author, representing the composite or group identifier.)
1307     */
1308    public Identifier getRequisition() { 
1309      if (this.requisition == null)
1310        if (Configuration.errorOnAutoCreate())
1311          throw new Error("Attempt to auto-create ProcedureRequest.requisition");
1312        else if (Configuration.doAutoCreate())
1313          this.requisition = new Identifier(); // cc
1314      return this.requisition;
1315    }
1316
1317    public boolean hasRequisition() { 
1318      return this.requisition != null && !this.requisition.isEmpty();
1319    }
1320
1321    /**
1322     * @param value {@link #requisition} (A shared identifier common to all procedure or diagnostic requests that were authorized more or less simultaneously by a single author, representing the composite or group identifier.)
1323     */
1324    public ProcedureRequest setRequisition(Identifier value)  { 
1325      this.requisition = value;
1326      return this;
1327    }
1328
1329    /**
1330     * @return {@link #status} (The status of the order.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1331     */
1332    public Enumeration<ProcedureRequestStatus> getStatusElement() { 
1333      if (this.status == null)
1334        if (Configuration.errorOnAutoCreate())
1335          throw new Error("Attempt to auto-create ProcedureRequest.status");
1336        else if (Configuration.doAutoCreate())
1337          this.status = new Enumeration<ProcedureRequestStatus>(new ProcedureRequestStatusEnumFactory()); // bb
1338      return this.status;
1339    }
1340
1341    public boolean hasStatusElement() { 
1342      return this.status != null && !this.status.isEmpty();
1343    }
1344
1345    public boolean hasStatus() { 
1346      return this.status != null && !this.status.isEmpty();
1347    }
1348
1349    /**
1350     * @param value {@link #status} (The status of the order.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1351     */
1352    public ProcedureRequest setStatusElement(Enumeration<ProcedureRequestStatus> value) { 
1353      this.status = value;
1354      return this;
1355    }
1356
1357    /**
1358     * @return The status of the order.
1359     */
1360    public ProcedureRequestStatus getStatus() { 
1361      return this.status == null ? null : this.status.getValue();
1362    }
1363
1364    /**
1365     * @param value The status of the order.
1366     */
1367    public ProcedureRequest setStatus(ProcedureRequestStatus value) { 
1368        if (this.status == null)
1369          this.status = new Enumeration<ProcedureRequestStatus>(new ProcedureRequestStatusEnumFactory());
1370        this.status.setValue(value);
1371      return this;
1372    }
1373
1374    /**
1375     * @return {@link #intent} (Whether the request is a proposal, plan, an original order or a reflex order.). This is the underlying object with id, value and extensions. The accessor "getIntent" gives direct access to the value
1376     */
1377    public Enumeration<ProcedureRequestIntent> getIntentElement() { 
1378      if (this.intent == null)
1379        if (Configuration.errorOnAutoCreate())
1380          throw new Error("Attempt to auto-create ProcedureRequest.intent");
1381        else if (Configuration.doAutoCreate())
1382          this.intent = new Enumeration<ProcedureRequestIntent>(new ProcedureRequestIntentEnumFactory()); // bb
1383      return this.intent;
1384    }
1385
1386    public boolean hasIntentElement() { 
1387      return this.intent != null && !this.intent.isEmpty();
1388    }
1389
1390    public boolean hasIntent() { 
1391      return this.intent != null && !this.intent.isEmpty();
1392    }
1393
1394    /**
1395     * @param value {@link #intent} (Whether the request is a proposal, plan, an original order or a reflex order.). This is the underlying object with id, value and extensions. The accessor "getIntent" gives direct access to the value
1396     */
1397    public ProcedureRequest setIntentElement(Enumeration<ProcedureRequestIntent> value) { 
1398      this.intent = value;
1399      return this;
1400    }
1401
1402    /**
1403     * @return Whether the request is a proposal, plan, an original order or a reflex order.
1404     */
1405    public ProcedureRequestIntent getIntent() { 
1406      return this.intent == null ? null : this.intent.getValue();
1407    }
1408
1409    /**
1410     * @param value Whether the request is a proposal, plan, an original order or a reflex order.
1411     */
1412    public ProcedureRequest setIntent(ProcedureRequestIntent value) { 
1413        if (this.intent == null)
1414          this.intent = new Enumeration<ProcedureRequestIntent>(new ProcedureRequestIntentEnumFactory());
1415        this.intent.setValue(value);
1416      return this;
1417    }
1418
1419    /**
1420     * @return {@link #priority} (Indicates how quickly the ProcedureRequest 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
1421     */
1422    public Enumeration<ProcedureRequestPriority> getPriorityElement() { 
1423      if (this.priority == null)
1424        if (Configuration.errorOnAutoCreate())
1425          throw new Error("Attempt to auto-create ProcedureRequest.priority");
1426        else if (Configuration.doAutoCreate())
1427          this.priority = new Enumeration<ProcedureRequestPriority>(new ProcedureRequestPriorityEnumFactory()); // bb
1428      return this.priority;
1429    }
1430
1431    public boolean hasPriorityElement() { 
1432      return this.priority != null && !this.priority.isEmpty();
1433    }
1434
1435    public boolean hasPriority() { 
1436      return this.priority != null && !this.priority.isEmpty();
1437    }
1438
1439    /**
1440     * @param value {@link #priority} (Indicates how quickly the ProcedureRequest 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
1441     */
1442    public ProcedureRequest setPriorityElement(Enumeration<ProcedureRequestPriority> value) { 
1443      this.priority = value;
1444      return this;
1445    }
1446
1447    /**
1448     * @return Indicates how quickly the ProcedureRequest should be addressed with respect to other requests.
1449     */
1450    public ProcedureRequestPriority getPriority() { 
1451      return this.priority == null ? null : this.priority.getValue();
1452    }
1453
1454    /**
1455     * @param value Indicates how quickly the ProcedureRequest should be addressed with respect to other requests.
1456     */
1457    public ProcedureRequest setPriority(ProcedureRequestPriority value) { 
1458      if (value == null)
1459        this.priority = null;
1460      else {
1461        if (this.priority == null)
1462          this.priority = new Enumeration<ProcedureRequestPriority>(new ProcedureRequestPriorityEnumFactory());
1463        this.priority.setValue(value);
1464      }
1465      return this;
1466    }
1467
1468    /**
1469     * @return {@link #doNotPerform} (Set this to true if the record is saying that the procedure should NOT be performed.). This is the underlying object with id, value and extensions. The accessor "getDoNotPerform" gives direct access to the value
1470     */
1471    public BooleanType getDoNotPerformElement() { 
1472      if (this.doNotPerform == null)
1473        if (Configuration.errorOnAutoCreate())
1474          throw new Error("Attempt to auto-create ProcedureRequest.doNotPerform");
1475        else if (Configuration.doAutoCreate())
1476          this.doNotPerform = new BooleanType(); // bb
1477      return this.doNotPerform;
1478    }
1479
1480    public boolean hasDoNotPerformElement() { 
1481      return this.doNotPerform != null && !this.doNotPerform.isEmpty();
1482    }
1483
1484    public boolean hasDoNotPerform() { 
1485      return this.doNotPerform != null && !this.doNotPerform.isEmpty();
1486    }
1487
1488    /**
1489     * @param value {@link #doNotPerform} (Set this to true if the record is saying that the procedure should NOT be performed.). This is the underlying object with id, value and extensions. The accessor "getDoNotPerform" gives direct access to the value
1490     */
1491    public ProcedureRequest setDoNotPerformElement(BooleanType value) { 
1492      this.doNotPerform = value;
1493      return this;
1494    }
1495
1496    /**
1497     * @return Set this to true if the record is saying that the procedure should NOT be performed.
1498     */
1499    public boolean getDoNotPerform() { 
1500      return this.doNotPerform == null || this.doNotPerform.isEmpty() ? false : this.doNotPerform.getValue();
1501    }
1502
1503    /**
1504     * @param value Set this to true if the record is saying that the procedure should NOT be performed.
1505     */
1506    public ProcedureRequest setDoNotPerform(boolean value) { 
1507        if (this.doNotPerform == null)
1508          this.doNotPerform = new BooleanType();
1509        this.doNotPerform.setValue(value);
1510      return this;
1511    }
1512
1513    /**
1514     * @return {@link #category} (A code that classifies the procedure for searching, sorting and display purposes (e.g. "Surgical Procedure").)
1515     */
1516    public List<CodeableConcept> getCategory() { 
1517      if (this.category == null)
1518        this.category = new ArrayList<CodeableConcept>();
1519      return this.category;
1520    }
1521
1522    /**
1523     * @return Returns a reference to <code>this</code> for easy method chaining
1524     */
1525    public ProcedureRequest setCategory(List<CodeableConcept> theCategory) { 
1526      this.category = theCategory;
1527      return this;
1528    }
1529
1530    public boolean hasCategory() { 
1531      if (this.category == null)
1532        return false;
1533      for (CodeableConcept item : this.category)
1534        if (!item.isEmpty())
1535          return true;
1536      return false;
1537    }
1538
1539    public CodeableConcept addCategory() { //3
1540      CodeableConcept t = new CodeableConcept();
1541      if (this.category == null)
1542        this.category = new ArrayList<CodeableConcept>();
1543      this.category.add(t);
1544      return t;
1545    }
1546
1547    public ProcedureRequest addCategory(CodeableConcept t) { //3
1548      if (t == null)
1549        return this;
1550      if (this.category == null)
1551        this.category = new ArrayList<CodeableConcept>();
1552      this.category.add(t);
1553      return this;
1554    }
1555
1556    /**
1557     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist
1558     */
1559    public CodeableConcept getCategoryFirstRep() { 
1560      if (getCategory().isEmpty()) {
1561        addCategory();
1562      }
1563      return getCategory().get(0);
1564    }
1565
1566    /**
1567     * @return {@link #code} (A code that identifies a particular procedure, diagnostic investigation, or panel of investigations, that have been requested.)
1568     */
1569    public CodeableConcept getCode() { 
1570      if (this.code == null)
1571        if (Configuration.errorOnAutoCreate())
1572          throw new Error("Attempt to auto-create ProcedureRequest.code");
1573        else if (Configuration.doAutoCreate())
1574          this.code = new CodeableConcept(); // cc
1575      return this.code;
1576    }
1577
1578    public boolean hasCode() { 
1579      return this.code != null && !this.code.isEmpty();
1580    }
1581
1582    /**
1583     * @param value {@link #code} (A code that identifies a particular procedure, diagnostic investigation, or panel of investigations, that have been requested.)
1584     */
1585    public ProcedureRequest setCode(CodeableConcept value)  { 
1586      this.code = value;
1587      return this;
1588    }
1589
1590    /**
1591     * @return {@link #subject} (On whom or what the procedure or diagnostic is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans).)
1592     */
1593    public Reference getSubject() { 
1594      if (this.subject == null)
1595        if (Configuration.errorOnAutoCreate())
1596          throw new Error("Attempt to auto-create ProcedureRequest.subject");
1597        else if (Configuration.doAutoCreate())
1598          this.subject = new Reference(); // cc
1599      return this.subject;
1600    }
1601
1602    public boolean hasSubject() { 
1603      return this.subject != null && !this.subject.isEmpty();
1604    }
1605
1606    /**
1607     * @param value {@link #subject} (On whom or what the procedure or diagnostic is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans).)
1608     */
1609    public ProcedureRequest setSubject(Reference value)  { 
1610      this.subject = value;
1611      return this;
1612    }
1613
1614    /**
1615     * @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. (On whom or what the procedure or diagnostic is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans).)
1616     */
1617    public Resource getSubjectTarget() { 
1618      return this.subjectTarget;
1619    }
1620
1621    /**
1622     * @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. (On whom or what the procedure or diagnostic is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans).)
1623     */
1624    public ProcedureRequest setSubjectTarget(Resource value) { 
1625      this.subjectTarget = value;
1626      return this;
1627    }
1628
1629    /**
1630     * @return {@link #context} (An encounter or episode of care that provides additional information about the healthcare context in which this request is made.)
1631     */
1632    public Reference getContext() { 
1633      if (this.context == null)
1634        if (Configuration.errorOnAutoCreate())
1635          throw new Error("Attempt to auto-create ProcedureRequest.context");
1636        else if (Configuration.doAutoCreate())
1637          this.context = new Reference(); // cc
1638      return this.context;
1639    }
1640
1641    public boolean hasContext() { 
1642      return this.context != null && !this.context.isEmpty();
1643    }
1644
1645    /**
1646     * @param value {@link #context} (An encounter or episode of care that provides additional information about the healthcare context in which this request is made.)
1647     */
1648    public ProcedureRequest setContext(Reference value)  { 
1649      this.context = value;
1650      return this;
1651    }
1652
1653    /**
1654     * @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. (An encounter or episode of care that provides additional information about the healthcare context in which this request is made.)
1655     */
1656    public Resource getContextTarget() { 
1657      return this.contextTarget;
1658    }
1659
1660    /**
1661     * @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. (An encounter or episode of care that provides additional information about the healthcare context in which this request is made.)
1662     */
1663    public ProcedureRequest setContextTarget(Resource value) { 
1664      this.contextTarget = value;
1665      return this;
1666    }
1667
1668    /**
1669     * @return {@link #occurrence} (The date/time at which the diagnostic testing should occur.)
1670     */
1671    public Type getOccurrence() { 
1672      return this.occurrence;
1673    }
1674
1675    /**
1676     * @return {@link #occurrence} (The date/time at which the diagnostic testing should occur.)
1677     */
1678    public DateTimeType getOccurrenceDateTimeType() throws FHIRException { 
1679      if (this.occurrence == null)
1680        return null;
1681      if (!(this.occurrence instanceof DateTimeType))
1682        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1683      return (DateTimeType) this.occurrence;
1684    }
1685
1686    public boolean hasOccurrenceDateTimeType() { 
1687      return this != null && this.occurrence instanceof DateTimeType;
1688    }
1689
1690    /**
1691     * @return {@link #occurrence} (The date/time at which the diagnostic testing should occur.)
1692     */
1693    public Period getOccurrencePeriod() throws FHIRException { 
1694      if (this.occurrence == null)
1695        return null;
1696      if (!(this.occurrence instanceof Period))
1697        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1698      return (Period) this.occurrence;
1699    }
1700
1701    public boolean hasOccurrencePeriod() { 
1702      return this != null && this.occurrence instanceof Period;
1703    }
1704
1705    /**
1706     * @return {@link #occurrence} (The date/time at which the diagnostic testing should occur.)
1707     */
1708    public Timing getOccurrenceTiming() throws FHIRException { 
1709      if (this.occurrence == null)
1710        return null;
1711      if (!(this.occurrence instanceof Timing))
1712        throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1713      return (Timing) this.occurrence;
1714    }
1715
1716    public boolean hasOccurrenceTiming() { 
1717      return this != null && this.occurrence instanceof Timing;
1718    }
1719
1720    public boolean hasOccurrence() { 
1721      return this.occurrence != null && !this.occurrence.isEmpty();
1722    }
1723
1724    /**
1725     * @param value {@link #occurrence} (The date/time at which the diagnostic testing should occur.)
1726     */
1727    public ProcedureRequest setOccurrence(Type value) throws FHIRFormatError { 
1728      if (value != null && !(value instanceof DateTimeType || value instanceof Period || value instanceof Timing))
1729        throw new FHIRFormatError("Not the right type for ProcedureRequest.occurrence[x]: "+value.fhirType());
1730      this.occurrence = value;
1731      return this;
1732    }
1733
1734    /**
1735     * @return {@link #asNeeded} (If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example "pain", "on flare-up", etc.)
1736     */
1737    public Type getAsNeeded() { 
1738      return this.asNeeded;
1739    }
1740
1741    /**
1742     * @return {@link #asNeeded} (If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example "pain", "on flare-up", etc.)
1743     */
1744    public BooleanType getAsNeededBooleanType() throws FHIRException { 
1745      if (this.asNeeded == null)
1746        return null;
1747      if (!(this.asNeeded instanceof BooleanType))
1748        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.asNeeded.getClass().getName()+" was encountered");
1749      return (BooleanType) this.asNeeded;
1750    }
1751
1752    public boolean hasAsNeededBooleanType() { 
1753      return this != null && this.asNeeded instanceof BooleanType;
1754    }
1755
1756    /**
1757     * @return {@link #asNeeded} (If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example "pain", "on flare-up", etc.)
1758     */
1759    public CodeableConcept getAsNeededCodeableConcept() throws FHIRException { 
1760      if (this.asNeeded == null)
1761        return null;
1762      if (!(this.asNeeded instanceof CodeableConcept))
1763        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.asNeeded.getClass().getName()+" was encountered");
1764      return (CodeableConcept) this.asNeeded;
1765    }
1766
1767    public boolean hasAsNeededCodeableConcept() { 
1768      return this != null && this.asNeeded instanceof CodeableConcept;
1769    }
1770
1771    public boolean hasAsNeeded() { 
1772      return this.asNeeded != null && !this.asNeeded.isEmpty();
1773    }
1774
1775    /**
1776     * @param value {@link #asNeeded} (If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example "pain", "on flare-up", etc.)
1777     */
1778    public ProcedureRequest setAsNeeded(Type value) throws FHIRFormatError { 
1779      if (value != null && !(value instanceof BooleanType || value instanceof CodeableConcept))
1780        throw new FHIRFormatError("Not the right type for ProcedureRequest.asNeeded[x]: "+value.fhirType());
1781      this.asNeeded = value;
1782      return this;
1783    }
1784
1785    /**
1786     * @return {@link #authoredOn} (When the request transitioned to being actionable.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
1787     */
1788    public DateTimeType getAuthoredOnElement() { 
1789      if (this.authoredOn == null)
1790        if (Configuration.errorOnAutoCreate())
1791          throw new Error("Attempt to auto-create ProcedureRequest.authoredOn");
1792        else if (Configuration.doAutoCreate())
1793          this.authoredOn = new DateTimeType(); // bb
1794      return this.authoredOn;
1795    }
1796
1797    public boolean hasAuthoredOnElement() { 
1798      return this.authoredOn != null && !this.authoredOn.isEmpty();
1799    }
1800
1801    public boolean hasAuthoredOn() { 
1802      return this.authoredOn != null && !this.authoredOn.isEmpty();
1803    }
1804
1805    /**
1806     * @param value {@link #authoredOn} (When the request transitioned to being actionable.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
1807     */
1808    public ProcedureRequest setAuthoredOnElement(DateTimeType value) { 
1809      this.authoredOn = value;
1810      return this;
1811    }
1812
1813    /**
1814     * @return When the request transitioned to being actionable.
1815     */
1816    public Date getAuthoredOn() { 
1817      return this.authoredOn == null ? null : this.authoredOn.getValue();
1818    }
1819
1820    /**
1821     * @param value When the request transitioned to being actionable.
1822     */
1823    public ProcedureRequest setAuthoredOn(Date value) { 
1824      if (value == null)
1825        this.authoredOn = null;
1826      else {
1827        if (this.authoredOn == null)
1828          this.authoredOn = new DateTimeType();
1829        this.authoredOn.setValue(value);
1830      }
1831      return this;
1832    }
1833
1834    /**
1835     * @return {@link #requester} (The individual who initiated the request and has responsibility for its activation.)
1836     */
1837    public ProcedureRequestRequesterComponent getRequester() { 
1838      if (this.requester == null)
1839        if (Configuration.errorOnAutoCreate())
1840          throw new Error("Attempt to auto-create ProcedureRequest.requester");
1841        else if (Configuration.doAutoCreate())
1842          this.requester = new ProcedureRequestRequesterComponent(); // cc
1843      return this.requester;
1844    }
1845
1846    public boolean hasRequester() { 
1847      return this.requester != null && !this.requester.isEmpty();
1848    }
1849
1850    /**
1851     * @param value {@link #requester} (The individual who initiated the request and has responsibility for its activation.)
1852     */
1853    public ProcedureRequest setRequester(ProcedureRequestRequesterComponent value)  { 
1854      this.requester = value;
1855      return this;
1856    }
1857
1858    /**
1859     * @return {@link #performerType} (Desired type of performer for doing the diagnostic testing.)
1860     */
1861    public CodeableConcept getPerformerType() { 
1862      if (this.performerType == null)
1863        if (Configuration.errorOnAutoCreate())
1864          throw new Error("Attempt to auto-create ProcedureRequest.performerType");
1865        else if (Configuration.doAutoCreate())
1866          this.performerType = new CodeableConcept(); // cc
1867      return this.performerType;
1868    }
1869
1870    public boolean hasPerformerType() { 
1871      return this.performerType != null && !this.performerType.isEmpty();
1872    }
1873
1874    /**
1875     * @param value {@link #performerType} (Desired type of performer for doing the diagnostic testing.)
1876     */
1877    public ProcedureRequest setPerformerType(CodeableConcept value)  { 
1878      this.performerType = value;
1879      return this;
1880    }
1881
1882    /**
1883     * @return {@link #performer} (The desired perfomer for doing the diagnostic testing.  For example, the surgeon, dermatopathologist, endoscopist, etc.)
1884     */
1885    public Reference getPerformer() { 
1886      if (this.performer == null)
1887        if (Configuration.errorOnAutoCreate())
1888          throw new Error("Attempt to auto-create ProcedureRequest.performer");
1889        else if (Configuration.doAutoCreate())
1890          this.performer = new Reference(); // cc
1891      return this.performer;
1892    }
1893
1894    public boolean hasPerformer() { 
1895      return this.performer != null && !this.performer.isEmpty();
1896    }
1897
1898    /**
1899     * @param value {@link #performer} (The desired perfomer for doing the diagnostic testing.  For example, the surgeon, dermatopathologist, endoscopist, etc.)
1900     */
1901    public ProcedureRequest setPerformer(Reference value)  { 
1902      this.performer = value;
1903      return this;
1904    }
1905
1906    /**
1907     * @return {@link #performer} 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 desired perfomer for doing the diagnostic testing.  For example, the surgeon, dermatopathologist, endoscopist, etc.)
1908     */
1909    public Resource getPerformerTarget() { 
1910      return this.performerTarget;
1911    }
1912
1913    /**
1914     * @param value {@link #performer} 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 desired perfomer for doing the diagnostic testing.  For example, the surgeon, dermatopathologist, endoscopist, etc.)
1915     */
1916    public ProcedureRequest setPerformerTarget(Resource value) { 
1917      this.performerTarget = value;
1918      return this;
1919    }
1920
1921    /**
1922     * @return {@link #reasonCode} (An explanation or justification for why this diagnostic investigation is being requested in coded or textual form.   This is often for billing purposes.  May relate to the resources referred to in supportingInformation.)
1923     */
1924    public List<CodeableConcept> getReasonCode() { 
1925      if (this.reasonCode == null)
1926        this.reasonCode = new ArrayList<CodeableConcept>();
1927      return this.reasonCode;
1928    }
1929
1930    /**
1931     * @return Returns a reference to <code>this</code> for easy method chaining
1932     */
1933    public ProcedureRequest setReasonCode(List<CodeableConcept> theReasonCode) { 
1934      this.reasonCode = theReasonCode;
1935      return this;
1936    }
1937
1938    public boolean hasReasonCode() { 
1939      if (this.reasonCode == null)
1940        return false;
1941      for (CodeableConcept item : this.reasonCode)
1942        if (!item.isEmpty())
1943          return true;
1944      return false;
1945    }
1946
1947    public CodeableConcept addReasonCode() { //3
1948      CodeableConcept t = new CodeableConcept();
1949      if (this.reasonCode == null)
1950        this.reasonCode = new ArrayList<CodeableConcept>();
1951      this.reasonCode.add(t);
1952      return t;
1953    }
1954
1955    public ProcedureRequest addReasonCode(CodeableConcept t) { //3
1956      if (t == null)
1957        return this;
1958      if (this.reasonCode == null)
1959        this.reasonCode = new ArrayList<CodeableConcept>();
1960      this.reasonCode.add(t);
1961      return this;
1962    }
1963
1964    /**
1965     * @return The first repetition of repeating field {@link #reasonCode}, creating it if it does not already exist
1966     */
1967    public CodeableConcept getReasonCodeFirstRep() { 
1968      if (getReasonCode().isEmpty()) {
1969        addReasonCode();
1970      }
1971      return getReasonCode().get(0);
1972    }
1973
1974    /**
1975     * @return {@link #reasonReference} (Indicates another resource that provides a justification for why this diagnostic investigation is being requested.   May relate to the resources referred to in supportingInformation.)
1976     */
1977    public List<Reference> getReasonReference() { 
1978      if (this.reasonReference == null)
1979        this.reasonReference = new ArrayList<Reference>();
1980      return this.reasonReference;
1981    }
1982
1983    /**
1984     * @return Returns a reference to <code>this</code> for easy method chaining
1985     */
1986    public ProcedureRequest setReasonReference(List<Reference> theReasonReference) { 
1987      this.reasonReference = theReasonReference;
1988      return this;
1989    }
1990
1991    public boolean hasReasonReference() { 
1992      if (this.reasonReference == null)
1993        return false;
1994      for (Reference item : this.reasonReference)
1995        if (!item.isEmpty())
1996          return true;
1997      return false;
1998    }
1999
2000    public Reference addReasonReference() { //3
2001      Reference t = new Reference();
2002      if (this.reasonReference == null)
2003        this.reasonReference = new ArrayList<Reference>();
2004      this.reasonReference.add(t);
2005      return t;
2006    }
2007
2008    public ProcedureRequest addReasonReference(Reference t) { //3
2009      if (t == null)
2010        return this;
2011      if (this.reasonReference == null)
2012        this.reasonReference = new ArrayList<Reference>();
2013      this.reasonReference.add(t);
2014      return this;
2015    }
2016
2017    /**
2018     * @return The first repetition of repeating field {@link #reasonReference}, creating it if it does not already exist
2019     */
2020    public Reference getReasonReferenceFirstRep() { 
2021      if (getReasonReference().isEmpty()) {
2022        addReasonReference();
2023      }
2024      return getReasonReference().get(0);
2025    }
2026
2027    /**
2028     * @deprecated Use Reference#setResource(IBaseResource) instead
2029     */
2030    @Deprecated
2031    public List<Resource> getReasonReferenceTarget() { 
2032      if (this.reasonReferenceTarget == null)
2033        this.reasonReferenceTarget = new ArrayList<Resource>();
2034      return this.reasonReferenceTarget;
2035    }
2036
2037    /**
2038     * @return {@link #supportingInfo} (Additional clinical information about the patient or specimen that may influence the procedure or diagnostics or their interpretations.     This information includes diagnosis, clinical findings and other observations.  In laboratory ordering these are typically referred to as "ask at order entry questions (AOEs)".  This includes observations explicitly requested by the producer (filler) to provide context or supporting information needed to complete the order. For example,  reporting the amount of inspired oxygen for blood gas measurements.)
2039     */
2040    public List<Reference> getSupportingInfo() { 
2041      if (this.supportingInfo == null)
2042        this.supportingInfo = new ArrayList<Reference>();
2043      return this.supportingInfo;
2044    }
2045
2046    /**
2047     * @return Returns a reference to <code>this</code> for easy method chaining
2048     */
2049    public ProcedureRequest setSupportingInfo(List<Reference> theSupportingInfo) { 
2050      this.supportingInfo = theSupportingInfo;
2051      return this;
2052    }
2053
2054    public boolean hasSupportingInfo() { 
2055      if (this.supportingInfo == null)
2056        return false;
2057      for (Reference item : this.supportingInfo)
2058        if (!item.isEmpty())
2059          return true;
2060      return false;
2061    }
2062
2063    public Reference addSupportingInfo() { //3
2064      Reference t = new Reference();
2065      if (this.supportingInfo == null)
2066        this.supportingInfo = new ArrayList<Reference>();
2067      this.supportingInfo.add(t);
2068      return t;
2069    }
2070
2071    public ProcedureRequest addSupportingInfo(Reference t) { //3
2072      if (t == null)
2073        return this;
2074      if (this.supportingInfo == null)
2075        this.supportingInfo = new ArrayList<Reference>();
2076      this.supportingInfo.add(t);
2077      return this;
2078    }
2079
2080    /**
2081     * @return The first repetition of repeating field {@link #supportingInfo}, creating it if it does not already exist
2082     */
2083    public Reference getSupportingInfoFirstRep() { 
2084      if (getSupportingInfo().isEmpty()) {
2085        addSupportingInfo();
2086      }
2087      return getSupportingInfo().get(0);
2088    }
2089
2090    /**
2091     * @deprecated Use Reference#setResource(IBaseResource) instead
2092     */
2093    @Deprecated
2094    public List<Resource> getSupportingInfoTarget() { 
2095      if (this.supportingInfoTarget == null)
2096        this.supportingInfoTarget = new ArrayList<Resource>();
2097      return this.supportingInfoTarget;
2098    }
2099
2100    /**
2101     * @return {@link #specimen} (One or more specimens that the laboratory procedure will use.)
2102     */
2103    public List<Reference> getSpecimen() { 
2104      if (this.specimen == null)
2105        this.specimen = new ArrayList<Reference>();
2106      return this.specimen;
2107    }
2108
2109    /**
2110     * @return Returns a reference to <code>this</code> for easy method chaining
2111     */
2112    public ProcedureRequest setSpecimen(List<Reference> theSpecimen) { 
2113      this.specimen = theSpecimen;
2114      return this;
2115    }
2116
2117    public boolean hasSpecimen() { 
2118      if (this.specimen == null)
2119        return false;
2120      for (Reference item : this.specimen)
2121        if (!item.isEmpty())
2122          return true;
2123      return false;
2124    }
2125
2126    public Reference addSpecimen() { //3
2127      Reference t = new Reference();
2128      if (this.specimen == null)
2129        this.specimen = new ArrayList<Reference>();
2130      this.specimen.add(t);
2131      return t;
2132    }
2133
2134    public ProcedureRequest addSpecimen(Reference t) { //3
2135      if (t == null)
2136        return this;
2137      if (this.specimen == null)
2138        this.specimen = new ArrayList<Reference>();
2139      this.specimen.add(t);
2140      return this;
2141    }
2142
2143    /**
2144     * @return The first repetition of repeating field {@link #specimen}, creating it if it does not already exist
2145     */
2146    public Reference getSpecimenFirstRep() { 
2147      if (getSpecimen().isEmpty()) {
2148        addSpecimen();
2149      }
2150      return getSpecimen().get(0);
2151    }
2152
2153    /**
2154     * @deprecated Use Reference#setResource(IBaseResource) instead
2155     */
2156    @Deprecated
2157    public List<Specimen> getSpecimenTarget() { 
2158      if (this.specimenTarget == null)
2159        this.specimenTarget = new ArrayList<Specimen>();
2160      return this.specimenTarget;
2161    }
2162
2163    /**
2164     * @deprecated Use Reference#setResource(IBaseResource) instead
2165     */
2166    @Deprecated
2167    public Specimen addSpecimenTarget() { 
2168      Specimen r = new Specimen();
2169      if (this.specimenTarget == null)
2170        this.specimenTarget = new ArrayList<Specimen>();
2171      this.specimenTarget.add(r);
2172      return r;
2173    }
2174
2175    /**
2176     * @return {@link #bodySite} (Anatomic location where the procedure should be performed. This is the target site.)
2177     */
2178    public List<CodeableConcept> getBodySite() { 
2179      if (this.bodySite == null)
2180        this.bodySite = new ArrayList<CodeableConcept>();
2181      return this.bodySite;
2182    }
2183
2184    /**
2185     * @return Returns a reference to <code>this</code> for easy method chaining
2186     */
2187    public ProcedureRequest setBodySite(List<CodeableConcept> theBodySite) { 
2188      this.bodySite = theBodySite;
2189      return this;
2190    }
2191
2192    public boolean hasBodySite() { 
2193      if (this.bodySite == null)
2194        return false;
2195      for (CodeableConcept item : this.bodySite)
2196        if (!item.isEmpty())
2197          return true;
2198      return false;
2199    }
2200
2201    public CodeableConcept addBodySite() { //3
2202      CodeableConcept t = new CodeableConcept();
2203      if (this.bodySite == null)
2204        this.bodySite = new ArrayList<CodeableConcept>();
2205      this.bodySite.add(t);
2206      return t;
2207    }
2208
2209    public ProcedureRequest addBodySite(CodeableConcept t) { //3
2210      if (t == null)
2211        return this;
2212      if (this.bodySite == null)
2213        this.bodySite = new ArrayList<CodeableConcept>();
2214      this.bodySite.add(t);
2215      return this;
2216    }
2217
2218    /**
2219     * @return The first repetition of repeating field {@link #bodySite}, creating it if it does not already exist
2220     */
2221    public CodeableConcept getBodySiteFirstRep() { 
2222      if (getBodySite().isEmpty()) {
2223        addBodySite();
2224      }
2225      return getBodySite().get(0);
2226    }
2227
2228    /**
2229     * @return {@link #note} (Any other notes and comments made about the service request. For example, letting provider know that "patient hates needles" or other provider instructions.)
2230     */
2231    public List<Annotation> getNote() { 
2232      if (this.note == null)
2233        this.note = new ArrayList<Annotation>();
2234      return this.note;
2235    }
2236
2237    /**
2238     * @return Returns a reference to <code>this</code> for easy method chaining
2239     */
2240    public ProcedureRequest setNote(List<Annotation> theNote) { 
2241      this.note = theNote;
2242      return this;
2243    }
2244
2245    public boolean hasNote() { 
2246      if (this.note == null)
2247        return false;
2248      for (Annotation item : this.note)
2249        if (!item.isEmpty())
2250          return true;
2251      return false;
2252    }
2253
2254    public Annotation addNote() { //3
2255      Annotation t = new Annotation();
2256      if (this.note == null)
2257        this.note = new ArrayList<Annotation>();
2258      this.note.add(t);
2259      return t;
2260    }
2261
2262    public ProcedureRequest addNote(Annotation t) { //3
2263      if (t == null)
2264        return this;
2265      if (this.note == null)
2266        this.note = new ArrayList<Annotation>();
2267      this.note.add(t);
2268      return this;
2269    }
2270
2271    /**
2272     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
2273     */
2274    public Annotation getNoteFirstRep() { 
2275      if (getNote().isEmpty()) {
2276        addNote();
2277      }
2278      return getNote().get(0);
2279    }
2280
2281    /**
2282     * @return {@link #relevantHistory} (Key events in the history of the request.)
2283     */
2284    public List<Reference> getRelevantHistory() { 
2285      if (this.relevantHistory == null)
2286        this.relevantHistory = new ArrayList<Reference>();
2287      return this.relevantHistory;
2288    }
2289
2290    /**
2291     * @return Returns a reference to <code>this</code> for easy method chaining
2292     */
2293    public ProcedureRequest setRelevantHistory(List<Reference> theRelevantHistory) { 
2294      this.relevantHistory = theRelevantHistory;
2295      return this;
2296    }
2297
2298    public boolean hasRelevantHistory() { 
2299      if (this.relevantHistory == null)
2300        return false;
2301      for (Reference item : this.relevantHistory)
2302        if (!item.isEmpty())
2303          return true;
2304      return false;
2305    }
2306
2307    public Reference addRelevantHistory() { //3
2308      Reference t = new Reference();
2309      if (this.relevantHistory == null)
2310        this.relevantHistory = new ArrayList<Reference>();
2311      this.relevantHistory.add(t);
2312      return t;
2313    }
2314
2315    public ProcedureRequest addRelevantHistory(Reference t) { //3
2316      if (t == null)
2317        return this;
2318      if (this.relevantHistory == null)
2319        this.relevantHistory = new ArrayList<Reference>();
2320      this.relevantHistory.add(t);
2321      return this;
2322    }
2323
2324    /**
2325     * @return The first repetition of repeating field {@link #relevantHistory}, creating it if it does not already exist
2326     */
2327    public Reference getRelevantHistoryFirstRep() { 
2328      if (getRelevantHistory().isEmpty()) {
2329        addRelevantHistory();
2330      }
2331      return getRelevantHistory().get(0);
2332    }
2333
2334    /**
2335     * @deprecated Use Reference#setResource(IBaseResource) instead
2336     */
2337    @Deprecated
2338    public List<Provenance> getRelevantHistoryTarget() { 
2339      if (this.relevantHistoryTarget == null)
2340        this.relevantHistoryTarget = new ArrayList<Provenance>();
2341      return this.relevantHistoryTarget;
2342    }
2343
2344    /**
2345     * @deprecated Use Reference#setResource(IBaseResource) instead
2346     */
2347    @Deprecated
2348    public Provenance addRelevantHistoryTarget() { 
2349      Provenance r = new Provenance();
2350      if (this.relevantHistoryTarget == null)
2351        this.relevantHistoryTarget = new ArrayList<Provenance>();
2352      this.relevantHistoryTarget.add(r);
2353      return r;
2354    }
2355
2356      protected void listChildren(List<Property> children) {
2357        super.listChildren(children);
2358        children.add(new Property("identifier", "Identifier", "Identifiers assigned to this order instance by the orderer and/or the receiver and/or order fulfiller.", 0, java.lang.Integer.MAX_VALUE, identifier));
2359        children.add(new Property("definition", "Reference(ActivityDefinition|PlanDefinition)", "Protocol or definition followed by this request.", 0, java.lang.Integer.MAX_VALUE, definition));
2360        children.add(new Property("basedOn", "Reference(Any)", "Plan/proposal/order fulfilled by this request.", 0, java.lang.Integer.MAX_VALUE, basedOn));
2361        children.add(new Property("replaces", "Reference(Any)", "The request takes the place of the referenced completed or terminated request(s).", 0, java.lang.Integer.MAX_VALUE, replaces));
2362        children.add(new Property("requisition", "Identifier", "A shared identifier common to all procedure or diagnostic requests that were authorized more or less simultaneously by a single author, representing the composite or group identifier.", 0, 1, requisition));
2363        children.add(new Property("status", "code", "The status of the order.", 0, 1, status));
2364        children.add(new Property("intent", "code", "Whether the request is a proposal, plan, an original order or a reflex order.", 0, 1, intent));
2365        children.add(new Property("priority", "code", "Indicates how quickly the ProcedureRequest should be addressed with respect to other requests.", 0, 1, priority));
2366        children.add(new Property("doNotPerform", "boolean", "Set this to true if the record is saying that the procedure should NOT be performed.", 0, 1, doNotPerform));
2367        children.add(new Property("category", "CodeableConcept", "A code that classifies the procedure for searching, sorting and display purposes (e.g. \"Surgical Procedure\").", 0, java.lang.Integer.MAX_VALUE, category));
2368        children.add(new Property("code", "CodeableConcept", "A code that identifies a particular procedure, diagnostic investigation, or panel of investigations, that have been requested.", 0, 1, code));
2369        children.add(new Property("subject", "Reference(Patient|Group|Location|Device)", "On whom or what the procedure or diagnostic is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans).", 0, 1, subject));
2370        children.add(new Property("context", "Reference(Encounter|EpisodeOfCare)", "An encounter or episode of care that provides additional information about the healthcare context in which this request is made.", 0, 1, context));
2371        children.add(new Property("occurrence[x]", "dateTime|Period|Timing", "The date/time at which the diagnostic testing should occur.", 0, 1, occurrence));
2372        children.add(new Property("asNeeded[x]", "boolean|CodeableConcept", "If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example \"pain\", \"on flare-up\", etc.", 0, 1, asNeeded));
2373        children.add(new Property("authoredOn", "dateTime", "When the request transitioned to being actionable.", 0, 1, authoredOn));
2374        children.add(new Property("requester", "", "The individual who initiated the request and has responsibility for its activation.", 0, 1, requester));
2375        children.add(new Property("performerType", "CodeableConcept", "Desired type of performer for doing the diagnostic testing.", 0, 1, performerType));
2376        children.add(new Property("performer", "Reference(Practitioner|Organization|Patient|Device|RelatedPerson|HealthcareService)", "The desired perfomer for doing the diagnostic testing.  For example, the surgeon, dermatopathologist, endoscopist, etc.", 0, 1, performer));
2377        children.add(new Property("reasonCode", "CodeableConcept", "An explanation or justification for why this diagnostic investigation is being requested in coded or textual form.   This is often for billing purposes.  May relate to the resources referred to in supportingInformation.", 0, java.lang.Integer.MAX_VALUE, reasonCode));
2378        children.add(new Property("reasonReference", "Reference(Condition|Observation)", "Indicates another resource that provides a justification for why this diagnostic investigation is being requested.   May relate to the resources referred to in supportingInformation.", 0, java.lang.Integer.MAX_VALUE, reasonReference));
2379        children.add(new Property("supportingInfo", "Reference(Any)", "Additional clinical information about the patient or specimen that may influence the procedure or diagnostics or their interpretations.     This information includes diagnosis, clinical findings and other observations.  In laboratory ordering these are typically referred to as \"ask at order entry questions (AOEs)\".  This includes observations explicitly requested by the producer (filler) to provide context or supporting information needed to complete the order. For example,  reporting the amount of inspired oxygen for blood gas measurements.", 0, java.lang.Integer.MAX_VALUE, supportingInfo));
2380        children.add(new Property("specimen", "Reference(Specimen)", "One or more specimens that the laboratory procedure will use.", 0, java.lang.Integer.MAX_VALUE, specimen));
2381        children.add(new Property("bodySite", "CodeableConcept", "Anatomic location where the procedure should be performed. This is the target site.", 0, java.lang.Integer.MAX_VALUE, bodySite));
2382        children.add(new Property("note", "Annotation", "Any other notes and comments made about the service request. For example, letting provider know that \"patient hates needles\" or other provider instructions.", 0, java.lang.Integer.MAX_VALUE, note));
2383        children.add(new Property("relevantHistory", "Reference(Provenance)", "Key events in the history of the request.", 0, java.lang.Integer.MAX_VALUE, relevantHistory));
2384      }
2385
2386      @Override
2387      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2388        switch (_hash) {
2389        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Identifiers assigned to this order instance by the orderer and/or the receiver and/or order fulfiller.", 0, java.lang.Integer.MAX_VALUE, identifier);
2390        case -1014418093: /*definition*/  return new Property("definition", "Reference(ActivityDefinition|PlanDefinition)", "Protocol or definition followed by this request.", 0, java.lang.Integer.MAX_VALUE, definition);
2391        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(Any)", "Plan/proposal/order fulfilled by this request.", 0, java.lang.Integer.MAX_VALUE, basedOn);
2392        case -430332865: /*replaces*/  return new Property("replaces", "Reference(Any)", "The request takes the place of the referenced completed or terminated request(s).", 0, java.lang.Integer.MAX_VALUE, replaces);
2393        case 395923612: /*requisition*/  return new Property("requisition", "Identifier", "A shared identifier common to all procedure or diagnostic requests that were authorized more or less simultaneously by a single author, representing the composite or group identifier.", 0, 1, requisition);
2394        case -892481550: /*status*/  return new Property("status", "code", "The status of the order.", 0, 1, status);
2395        case -1183762788: /*intent*/  return new Property("intent", "code", "Whether the request is a proposal, plan, an original order or a reflex order.", 0, 1, intent);
2396        case -1165461084: /*priority*/  return new Property("priority", "code", "Indicates how quickly the ProcedureRequest should be addressed with respect to other requests.", 0, 1, priority);
2397        case -1788508167: /*doNotPerform*/  return new Property("doNotPerform", "boolean", "Set this to true if the record is saying that the procedure should NOT be performed.", 0, 1, doNotPerform);
2398        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "A code that classifies the procedure for searching, sorting and display purposes (e.g. \"Surgical Procedure\").", 0, java.lang.Integer.MAX_VALUE, category);
2399        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A code that identifies a particular procedure, diagnostic investigation, or panel of investigations, that have been requested.", 0, 1, code);
2400        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group|Location|Device)", "On whom or what the procedure or diagnostic is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans).", 0, 1, subject);
2401        case 951530927: /*context*/  return new Property("context", "Reference(Encounter|EpisodeOfCare)", "An encounter or episode of care that provides additional information about the healthcare context in which this request is made.", 0, 1, context);
2402        case -2022646513: /*occurrence[x]*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "The date/time at which the diagnostic testing should occur.", 0, 1, occurrence);
2403        case 1687874001: /*occurrence*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "The date/time at which the diagnostic testing should occur.", 0, 1, occurrence);
2404        case -298443636: /*occurrenceDateTime*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "The date/time at which the diagnostic testing should occur.", 0, 1, occurrence);
2405        case 1397156594: /*occurrencePeriod*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "The date/time at which the diagnostic testing should occur.", 0, 1, occurrence);
2406        case 1515218299: /*occurrenceTiming*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "The date/time at which the diagnostic testing should occur.", 0, 1, occurrence);
2407        case -544329575: /*asNeeded[x]*/  return new Property("asNeeded[x]", "boolean|CodeableConcept", "If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example \"pain\", \"on flare-up\", etc.", 0, 1, asNeeded);
2408        case -1432923513: /*asNeeded*/  return new Property("asNeeded[x]", "boolean|CodeableConcept", "If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example \"pain\", \"on flare-up\", etc.", 0, 1, asNeeded);
2409        case -591717471: /*asNeededBoolean*/  return new Property("asNeeded[x]", "boolean|CodeableConcept", "If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example \"pain\", \"on flare-up\", etc.", 0, 1, asNeeded);
2410        case 1556420122: /*asNeededCodeableConcept*/  return new Property("asNeeded[x]", "boolean|CodeableConcept", "If a CodeableConcept is present, it indicates the pre-condition for performing the procedure.  For example \"pain\", \"on flare-up\", etc.", 0, 1, asNeeded);
2411        case -1500852503: /*authoredOn*/  return new Property("authoredOn", "dateTime", "When the request transitioned to being actionable.", 0, 1, authoredOn);
2412        case 693933948: /*requester*/  return new Property("requester", "", "The individual who initiated the request and has responsibility for its activation.", 0, 1, requester);
2413        case -901444568: /*performerType*/  return new Property("performerType", "CodeableConcept", "Desired type of performer for doing the diagnostic testing.", 0, 1, performerType);
2414        case 481140686: /*performer*/  return new Property("performer", "Reference(Practitioner|Organization|Patient|Device|RelatedPerson|HealthcareService)", "The desired perfomer for doing the diagnostic testing.  For example, the surgeon, dermatopathologist, endoscopist, etc.", 0, 1, performer);
2415        case 722137681: /*reasonCode*/  return new Property("reasonCode", "CodeableConcept", "An explanation or justification for why this diagnostic investigation is being requested in coded or textual form.   This is often for billing purposes.  May relate to the resources referred to in supportingInformation.", 0, java.lang.Integer.MAX_VALUE, reasonCode);
2416        case -1146218137: /*reasonReference*/  return new Property("reasonReference", "Reference(Condition|Observation)", "Indicates another resource that provides a justification for why this diagnostic investigation is being requested.   May relate to the resources referred to in supportingInformation.", 0, java.lang.Integer.MAX_VALUE, reasonReference);
2417        case 1922406657: /*supportingInfo*/  return new Property("supportingInfo", "Reference(Any)", "Additional clinical information about the patient or specimen that may influence the procedure or diagnostics or their interpretations.     This information includes diagnosis, clinical findings and other observations.  In laboratory ordering these are typically referred to as \"ask at order entry questions (AOEs)\".  This includes observations explicitly requested by the producer (filler) to provide context or supporting information needed to complete the order. For example,  reporting the amount of inspired oxygen for blood gas measurements.", 0, java.lang.Integer.MAX_VALUE, supportingInfo);
2418        case -2132868344: /*specimen*/  return new Property("specimen", "Reference(Specimen)", "One or more specimens that the laboratory procedure will use.", 0, java.lang.Integer.MAX_VALUE, specimen);
2419        case 1702620169: /*bodySite*/  return new Property("bodySite", "CodeableConcept", "Anatomic location where the procedure should be performed. This is the target site.", 0, java.lang.Integer.MAX_VALUE, bodySite);
2420        case 3387378: /*note*/  return new Property("note", "Annotation", "Any other notes and comments made about the service request. For example, letting provider know that \"patient hates needles\" or other provider instructions.", 0, java.lang.Integer.MAX_VALUE, note);
2421        case 1538891575: /*relevantHistory*/  return new Property("relevantHistory", "Reference(Provenance)", "Key events in the history of the request.", 0, java.lang.Integer.MAX_VALUE, relevantHistory);
2422        default: return super.getNamedProperty(_hash, _name, _checkValid);
2423        }
2424
2425      }
2426
2427      @Override
2428      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2429        switch (hash) {
2430        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2431        case -1014418093: /*definition*/ return this.definition == null ? new Base[0] : this.definition.toArray(new Base[this.definition.size()]); // Reference
2432        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
2433        case -430332865: /*replaces*/ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // Reference
2434        case 395923612: /*requisition*/ return this.requisition == null ? new Base[0] : new Base[] {this.requisition}; // Identifier
2435        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ProcedureRequestStatus>
2436        case -1183762788: /*intent*/ return this.intent == null ? new Base[0] : new Base[] {this.intent}; // Enumeration<ProcedureRequestIntent>
2437        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // Enumeration<ProcedureRequestPriority>
2438        case -1788508167: /*doNotPerform*/ return this.doNotPerform == null ? new Base[0] : new Base[] {this.doNotPerform}; // BooleanType
2439        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
2440        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
2441        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
2442        case 951530927: /*context*/ return this.context == null ? new Base[0] : new Base[] {this.context}; // Reference
2443        case 1687874001: /*occurrence*/ return this.occurrence == null ? new Base[0] : new Base[] {this.occurrence}; // Type
2444        case -1432923513: /*asNeeded*/ return this.asNeeded == null ? new Base[0] : new Base[] {this.asNeeded}; // Type
2445        case -1500852503: /*authoredOn*/ return this.authoredOn == null ? new Base[0] : new Base[] {this.authoredOn}; // DateTimeType
2446        case 693933948: /*requester*/ return this.requester == null ? new Base[0] : new Base[] {this.requester}; // ProcedureRequestRequesterComponent
2447        case -901444568: /*performerType*/ return this.performerType == null ? new Base[0] : new Base[] {this.performerType}; // CodeableConcept
2448        case 481140686: /*performer*/ return this.performer == null ? new Base[0] : new Base[] {this.performer}; // Reference
2449        case 722137681: /*reasonCode*/ return this.reasonCode == null ? new Base[0] : this.reasonCode.toArray(new Base[this.reasonCode.size()]); // CodeableConcept
2450        case -1146218137: /*reasonReference*/ return this.reasonReference == null ? new Base[0] : this.reasonReference.toArray(new Base[this.reasonReference.size()]); // Reference
2451        case 1922406657: /*supportingInfo*/ return this.supportingInfo == null ? new Base[0] : this.supportingInfo.toArray(new Base[this.supportingInfo.size()]); // Reference
2452        case -2132868344: /*specimen*/ return this.specimen == null ? new Base[0] : this.specimen.toArray(new Base[this.specimen.size()]); // Reference
2453        case 1702620169: /*bodySite*/ return this.bodySite == null ? new Base[0] : this.bodySite.toArray(new Base[this.bodySite.size()]); // CodeableConcept
2454        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
2455        case 1538891575: /*relevantHistory*/ return this.relevantHistory == null ? new Base[0] : this.relevantHistory.toArray(new Base[this.relevantHistory.size()]); // Reference
2456        default: return super.getProperty(hash, name, checkValid);
2457        }
2458
2459      }
2460
2461      @Override
2462      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2463        switch (hash) {
2464        case -1618432855: // identifier
2465          this.getIdentifier().add(castToIdentifier(value)); // Identifier
2466          return value;
2467        case -1014418093: // definition
2468          this.getDefinition().add(castToReference(value)); // Reference
2469          return value;
2470        case -332612366: // basedOn
2471          this.getBasedOn().add(castToReference(value)); // Reference
2472          return value;
2473        case -430332865: // replaces
2474          this.getReplaces().add(castToReference(value)); // Reference
2475          return value;
2476        case 395923612: // requisition
2477          this.requisition = castToIdentifier(value); // Identifier
2478          return value;
2479        case -892481550: // status
2480          value = new ProcedureRequestStatusEnumFactory().fromType(castToCode(value));
2481          this.status = (Enumeration) value; // Enumeration<ProcedureRequestStatus>
2482          return value;
2483        case -1183762788: // intent
2484          value = new ProcedureRequestIntentEnumFactory().fromType(castToCode(value));
2485          this.intent = (Enumeration) value; // Enumeration<ProcedureRequestIntent>
2486          return value;
2487        case -1165461084: // priority
2488          value = new ProcedureRequestPriorityEnumFactory().fromType(castToCode(value));
2489          this.priority = (Enumeration) value; // Enumeration<ProcedureRequestPriority>
2490          return value;
2491        case -1788508167: // doNotPerform
2492          this.doNotPerform = castToBoolean(value); // BooleanType
2493          return value;
2494        case 50511102: // category
2495          this.getCategory().add(castToCodeableConcept(value)); // CodeableConcept
2496          return value;
2497        case 3059181: // code
2498          this.code = castToCodeableConcept(value); // CodeableConcept
2499          return value;
2500        case -1867885268: // subject
2501          this.subject = castToReference(value); // Reference
2502          return value;
2503        case 951530927: // context
2504          this.context = castToReference(value); // Reference
2505          return value;
2506        case 1687874001: // occurrence
2507          this.occurrence = castToType(value); // Type
2508          return value;
2509        case -1432923513: // asNeeded
2510          this.asNeeded = castToType(value); // Type
2511          return value;
2512        case -1500852503: // authoredOn
2513          this.authoredOn = castToDateTime(value); // DateTimeType
2514          return value;
2515        case 693933948: // requester
2516          this.requester = (ProcedureRequestRequesterComponent) value; // ProcedureRequestRequesterComponent
2517          return value;
2518        case -901444568: // performerType
2519          this.performerType = castToCodeableConcept(value); // CodeableConcept
2520          return value;
2521        case 481140686: // performer
2522          this.performer = castToReference(value); // Reference
2523          return value;
2524        case 722137681: // reasonCode
2525          this.getReasonCode().add(castToCodeableConcept(value)); // CodeableConcept
2526          return value;
2527        case -1146218137: // reasonReference
2528          this.getReasonReference().add(castToReference(value)); // Reference
2529          return value;
2530        case 1922406657: // supportingInfo
2531          this.getSupportingInfo().add(castToReference(value)); // Reference
2532          return value;
2533        case -2132868344: // specimen
2534          this.getSpecimen().add(castToReference(value)); // Reference
2535          return value;
2536        case 1702620169: // bodySite
2537          this.getBodySite().add(castToCodeableConcept(value)); // CodeableConcept
2538          return value;
2539        case 3387378: // note
2540          this.getNote().add(castToAnnotation(value)); // Annotation
2541          return value;
2542        case 1538891575: // relevantHistory
2543          this.getRelevantHistory().add(castToReference(value)); // Reference
2544          return value;
2545        default: return super.setProperty(hash, name, value);
2546        }
2547
2548      }
2549
2550      @Override
2551      public Base setProperty(String name, Base value) throws FHIRException {
2552        if (name.equals("identifier")) {
2553          this.getIdentifier().add(castToIdentifier(value));
2554        } else if (name.equals("definition")) {
2555          this.getDefinition().add(castToReference(value));
2556        } else if (name.equals("basedOn")) {
2557          this.getBasedOn().add(castToReference(value));
2558        } else if (name.equals("replaces")) {
2559          this.getReplaces().add(castToReference(value));
2560        } else if (name.equals("requisition")) {
2561          this.requisition = castToIdentifier(value); // Identifier
2562        } else if (name.equals("status")) {
2563          value = new ProcedureRequestStatusEnumFactory().fromType(castToCode(value));
2564          this.status = (Enumeration) value; // Enumeration<ProcedureRequestStatus>
2565        } else if (name.equals("intent")) {
2566          value = new ProcedureRequestIntentEnumFactory().fromType(castToCode(value));
2567          this.intent = (Enumeration) value; // Enumeration<ProcedureRequestIntent>
2568        } else if (name.equals("priority")) {
2569          value = new ProcedureRequestPriorityEnumFactory().fromType(castToCode(value));
2570          this.priority = (Enumeration) value; // Enumeration<ProcedureRequestPriority>
2571        } else if (name.equals("doNotPerform")) {
2572          this.doNotPerform = castToBoolean(value); // BooleanType
2573        } else if (name.equals("category")) {
2574          this.getCategory().add(castToCodeableConcept(value));
2575        } else if (name.equals("code")) {
2576          this.code = castToCodeableConcept(value); // CodeableConcept
2577        } else if (name.equals("subject")) {
2578          this.subject = castToReference(value); // Reference
2579        } else if (name.equals("context")) {
2580          this.context = castToReference(value); // Reference
2581        } else if (name.equals("occurrence[x]")) {
2582          this.occurrence = castToType(value); // Type
2583        } else if (name.equals("asNeeded[x]")) {
2584          this.asNeeded = castToType(value); // Type
2585        } else if (name.equals("authoredOn")) {
2586          this.authoredOn = castToDateTime(value); // DateTimeType
2587        } else if (name.equals("requester")) {
2588          this.requester = (ProcedureRequestRequesterComponent) value; // ProcedureRequestRequesterComponent
2589        } else if (name.equals("performerType")) {
2590          this.performerType = castToCodeableConcept(value); // CodeableConcept
2591        } else if (name.equals("performer")) {
2592          this.performer = castToReference(value); // Reference
2593        } else if (name.equals("reasonCode")) {
2594          this.getReasonCode().add(castToCodeableConcept(value));
2595        } else if (name.equals("reasonReference")) {
2596          this.getReasonReference().add(castToReference(value));
2597        } else if (name.equals("supportingInfo")) {
2598          this.getSupportingInfo().add(castToReference(value));
2599        } else if (name.equals("specimen")) {
2600          this.getSpecimen().add(castToReference(value));
2601        } else if (name.equals("bodySite")) {
2602          this.getBodySite().add(castToCodeableConcept(value));
2603        } else if (name.equals("note")) {
2604          this.getNote().add(castToAnnotation(value));
2605        } else if (name.equals("relevantHistory")) {
2606          this.getRelevantHistory().add(castToReference(value));
2607        } else
2608          return super.setProperty(name, value);
2609        return value;
2610      }
2611
2612      @Override
2613      public Base makeProperty(int hash, String name) throws FHIRException {
2614        switch (hash) {
2615        case -1618432855:  return addIdentifier(); 
2616        case -1014418093:  return addDefinition(); 
2617        case -332612366:  return addBasedOn(); 
2618        case -430332865:  return addReplaces(); 
2619        case 395923612:  return getRequisition(); 
2620        case -892481550:  return getStatusElement();
2621        case -1183762788:  return getIntentElement();
2622        case -1165461084:  return getPriorityElement();
2623        case -1788508167:  return getDoNotPerformElement();
2624        case 50511102:  return addCategory(); 
2625        case 3059181:  return getCode(); 
2626        case -1867885268:  return getSubject(); 
2627        case 951530927:  return getContext(); 
2628        case -2022646513:  return getOccurrence(); 
2629        case 1687874001:  return getOccurrence(); 
2630        case -544329575:  return getAsNeeded(); 
2631        case -1432923513:  return getAsNeeded(); 
2632        case -1500852503:  return getAuthoredOnElement();
2633        case 693933948:  return getRequester(); 
2634        case -901444568:  return getPerformerType(); 
2635        case 481140686:  return getPerformer(); 
2636        case 722137681:  return addReasonCode(); 
2637        case -1146218137:  return addReasonReference(); 
2638        case 1922406657:  return addSupportingInfo(); 
2639        case -2132868344:  return addSpecimen(); 
2640        case 1702620169:  return addBodySite(); 
2641        case 3387378:  return addNote(); 
2642        case 1538891575:  return addRelevantHistory(); 
2643        default: return super.makeProperty(hash, name);
2644        }
2645
2646      }
2647
2648      @Override
2649      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2650        switch (hash) {
2651        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2652        case -1014418093: /*definition*/ return new String[] {"Reference"};
2653        case -332612366: /*basedOn*/ return new String[] {"Reference"};
2654        case -430332865: /*replaces*/ return new String[] {"Reference"};
2655        case 395923612: /*requisition*/ return new String[] {"Identifier"};
2656        case -892481550: /*status*/ return new String[] {"code"};
2657        case -1183762788: /*intent*/ return new String[] {"code"};
2658        case -1165461084: /*priority*/ return new String[] {"code"};
2659        case -1788508167: /*doNotPerform*/ return new String[] {"boolean"};
2660        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
2661        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2662        case -1867885268: /*subject*/ return new String[] {"Reference"};
2663        case 951530927: /*context*/ return new String[] {"Reference"};
2664        case 1687874001: /*occurrence*/ return new String[] {"dateTime", "Period", "Timing"};
2665        case -1432923513: /*asNeeded*/ return new String[] {"boolean", "CodeableConcept"};
2666        case -1500852503: /*authoredOn*/ return new String[] {"dateTime"};
2667        case 693933948: /*requester*/ return new String[] {};
2668        case -901444568: /*performerType*/ return new String[] {"CodeableConcept"};
2669        case 481140686: /*performer*/ return new String[] {"Reference"};
2670        case 722137681: /*reasonCode*/ return new String[] {"CodeableConcept"};
2671        case -1146218137: /*reasonReference*/ return new String[] {"Reference"};
2672        case 1922406657: /*supportingInfo*/ return new String[] {"Reference"};
2673        case -2132868344: /*specimen*/ return new String[] {"Reference"};
2674        case 1702620169: /*bodySite*/ return new String[] {"CodeableConcept"};
2675        case 3387378: /*note*/ return new String[] {"Annotation"};
2676        case 1538891575: /*relevantHistory*/ return new String[] {"Reference"};
2677        default: return super.getTypesForProperty(hash, name);
2678        }
2679
2680      }
2681
2682      @Override
2683      public Base addChild(String name) throws FHIRException {
2684        if (name.equals("identifier")) {
2685          return addIdentifier();
2686        }
2687        else if (name.equals("definition")) {
2688          return addDefinition();
2689        }
2690        else if (name.equals("basedOn")) {
2691          return addBasedOn();
2692        }
2693        else if (name.equals("replaces")) {
2694          return addReplaces();
2695        }
2696        else if (name.equals("requisition")) {
2697          this.requisition = new Identifier();
2698          return this.requisition;
2699        }
2700        else if (name.equals("status")) {
2701          throw new FHIRException("Cannot call addChild on a singleton property ProcedureRequest.status");
2702        }
2703        else if (name.equals("intent")) {
2704          throw new FHIRException("Cannot call addChild on a singleton property ProcedureRequest.intent");
2705        }
2706        else if (name.equals("priority")) {
2707          throw new FHIRException("Cannot call addChild on a singleton property ProcedureRequest.priority");
2708        }
2709        else if (name.equals("doNotPerform")) {
2710          throw new FHIRException("Cannot call addChild on a singleton property ProcedureRequest.doNotPerform");
2711        }
2712        else if (name.equals("category")) {
2713          return addCategory();
2714        }
2715        else if (name.equals("code")) {
2716          this.code = new CodeableConcept();
2717          return this.code;
2718        }
2719        else if (name.equals("subject")) {
2720          this.subject = new Reference();
2721          return this.subject;
2722        }
2723        else if (name.equals("context")) {
2724          this.context = new Reference();
2725          return this.context;
2726        }
2727        else if (name.equals("occurrenceDateTime")) {
2728          this.occurrence = new DateTimeType();
2729          return this.occurrence;
2730        }
2731        else if (name.equals("occurrencePeriod")) {
2732          this.occurrence = new Period();
2733          return this.occurrence;
2734        }
2735        else if (name.equals("occurrenceTiming")) {
2736          this.occurrence = new Timing();
2737          return this.occurrence;
2738        }
2739        else if (name.equals("asNeededBoolean")) {
2740          this.asNeeded = new BooleanType();
2741          return this.asNeeded;
2742        }
2743        else if (name.equals("asNeededCodeableConcept")) {
2744          this.asNeeded = new CodeableConcept();
2745          return this.asNeeded;
2746        }
2747        else if (name.equals("authoredOn")) {
2748          throw new FHIRException("Cannot call addChild on a singleton property ProcedureRequest.authoredOn");
2749        }
2750        else if (name.equals("requester")) {
2751          this.requester = new ProcedureRequestRequesterComponent();
2752          return this.requester;
2753        }
2754        else if (name.equals("performerType")) {
2755          this.performerType = new CodeableConcept();
2756          return this.performerType;
2757        }
2758        else if (name.equals("performer")) {
2759          this.performer = new Reference();
2760          return this.performer;
2761        }
2762        else if (name.equals("reasonCode")) {
2763          return addReasonCode();
2764        }
2765        else if (name.equals("reasonReference")) {
2766          return addReasonReference();
2767        }
2768        else if (name.equals("supportingInfo")) {
2769          return addSupportingInfo();
2770        }
2771        else if (name.equals("specimen")) {
2772          return addSpecimen();
2773        }
2774        else if (name.equals("bodySite")) {
2775          return addBodySite();
2776        }
2777        else if (name.equals("note")) {
2778          return addNote();
2779        }
2780        else if (name.equals("relevantHistory")) {
2781          return addRelevantHistory();
2782        }
2783        else
2784          return super.addChild(name);
2785      }
2786
2787  public String fhirType() {
2788    return "ProcedureRequest";
2789
2790  }
2791
2792      public ProcedureRequest copy() {
2793        ProcedureRequest dst = new ProcedureRequest();
2794        copyValues(dst);
2795        if (identifier != null) {
2796          dst.identifier = new ArrayList<Identifier>();
2797          for (Identifier i : identifier)
2798            dst.identifier.add(i.copy());
2799        };
2800        if (definition != null) {
2801          dst.definition = new ArrayList<Reference>();
2802          for (Reference i : definition)
2803            dst.definition.add(i.copy());
2804        };
2805        if (basedOn != null) {
2806          dst.basedOn = new ArrayList<Reference>();
2807          for (Reference i : basedOn)
2808            dst.basedOn.add(i.copy());
2809        };
2810        if (replaces != null) {
2811          dst.replaces = new ArrayList<Reference>();
2812          for (Reference i : replaces)
2813            dst.replaces.add(i.copy());
2814        };
2815        dst.requisition = requisition == null ? null : requisition.copy();
2816        dst.status = status == null ? null : status.copy();
2817        dst.intent = intent == null ? null : intent.copy();
2818        dst.priority = priority == null ? null : priority.copy();
2819        dst.doNotPerform = doNotPerform == null ? null : doNotPerform.copy();
2820        if (category != null) {
2821          dst.category = new ArrayList<CodeableConcept>();
2822          for (CodeableConcept i : category)
2823            dst.category.add(i.copy());
2824        };
2825        dst.code = code == null ? null : code.copy();
2826        dst.subject = subject == null ? null : subject.copy();
2827        dst.context = context == null ? null : context.copy();
2828        dst.occurrence = occurrence == null ? null : occurrence.copy();
2829        dst.asNeeded = asNeeded == null ? null : asNeeded.copy();
2830        dst.authoredOn = authoredOn == null ? null : authoredOn.copy();
2831        dst.requester = requester == null ? null : requester.copy();
2832        dst.performerType = performerType == null ? null : performerType.copy();
2833        dst.performer = performer == null ? null : performer.copy();
2834        if (reasonCode != null) {
2835          dst.reasonCode = new ArrayList<CodeableConcept>();
2836          for (CodeableConcept i : reasonCode)
2837            dst.reasonCode.add(i.copy());
2838        };
2839        if (reasonReference != null) {
2840          dst.reasonReference = new ArrayList<Reference>();
2841          for (Reference i : reasonReference)
2842            dst.reasonReference.add(i.copy());
2843        };
2844        if (supportingInfo != null) {
2845          dst.supportingInfo = new ArrayList<Reference>();
2846          for (Reference i : supportingInfo)
2847            dst.supportingInfo.add(i.copy());
2848        };
2849        if (specimen != null) {
2850          dst.specimen = new ArrayList<Reference>();
2851          for (Reference i : specimen)
2852            dst.specimen.add(i.copy());
2853        };
2854        if (bodySite != null) {
2855          dst.bodySite = new ArrayList<CodeableConcept>();
2856          for (CodeableConcept i : bodySite)
2857            dst.bodySite.add(i.copy());
2858        };
2859        if (note != null) {
2860          dst.note = new ArrayList<Annotation>();
2861          for (Annotation i : note)
2862            dst.note.add(i.copy());
2863        };
2864        if (relevantHistory != null) {
2865          dst.relevantHistory = new ArrayList<Reference>();
2866          for (Reference i : relevantHistory)
2867            dst.relevantHistory.add(i.copy());
2868        };
2869        return dst;
2870      }
2871
2872      protected ProcedureRequest typedCopy() {
2873        return copy();
2874      }
2875
2876      @Override
2877      public boolean equalsDeep(Base other_) {
2878        if (!super.equalsDeep(other_))
2879          return false;
2880        if (!(other_ instanceof ProcedureRequest))
2881          return false;
2882        ProcedureRequest o = (ProcedureRequest) other_;
2883        return compareDeep(identifier, o.identifier, true) && compareDeep(definition, o.definition, true)
2884           && compareDeep(basedOn, o.basedOn, true) && compareDeep(replaces, o.replaces, true) && compareDeep(requisition, o.requisition, true)
2885           && compareDeep(status, o.status, true) && compareDeep(intent, o.intent, true) && compareDeep(priority, o.priority, true)
2886           && compareDeep(doNotPerform, o.doNotPerform, true) && compareDeep(category, o.category, true) && compareDeep(code, o.code, true)
2887           && compareDeep(subject, o.subject, true) && compareDeep(context, o.context, true) && compareDeep(occurrence, o.occurrence, true)
2888           && compareDeep(asNeeded, o.asNeeded, true) && compareDeep(authoredOn, o.authoredOn, true) && compareDeep(requester, o.requester, true)
2889           && compareDeep(performerType, o.performerType, true) && compareDeep(performer, o.performer, true)
2890           && compareDeep(reasonCode, o.reasonCode, true) && compareDeep(reasonReference, o.reasonReference, true)
2891           && compareDeep(supportingInfo, o.supportingInfo, true) && compareDeep(specimen, o.specimen, true)
2892           && compareDeep(bodySite, o.bodySite, true) && compareDeep(note, o.note, true) && compareDeep(relevantHistory, o.relevantHistory, true)
2893          ;
2894      }
2895
2896      @Override
2897      public boolean equalsShallow(Base other_) {
2898        if (!super.equalsShallow(other_))
2899          return false;
2900        if (!(other_ instanceof ProcedureRequest))
2901          return false;
2902        ProcedureRequest o = (ProcedureRequest) other_;
2903        return compareValues(status, o.status, true) && compareValues(intent, o.intent, true) && compareValues(priority, o.priority, true)
2904           && compareValues(doNotPerform, o.doNotPerform, true) && compareValues(authoredOn, o.authoredOn, true)
2905          ;
2906      }
2907
2908      public boolean isEmpty() {
2909        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, definition, basedOn
2910          , replaces, requisition, status, intent, priority, doNotPerform, category, code
2911          , subject, context, occurrence, asNeeded, authoredOn, requester, performerType
2912          , performer, reasonCode, reasonReference, supportingInfo, specimen, bodySite, note
2913          , relevantHistory);
2914      }
2915
2916  @Override
2917  public ResourceType getResourceType() {
2918    return ResourceType.ProcedureRequest;
2919   }
2920
2921 /**
2922   * Search parameter: <b>authored</b>
2923   * <p>
2924   * Description: <b>Date request signed</b><br>
2925   * Type: <b>date</b><br>
2926   * Path: <b>ProcedureRequest.authoredOn</b><br>
2927   * </p>
2928   */
2929  @SearchParamDefinition(name="authored", path="ProcedureRequest.authoredOn", description="Date request signed", type="date" )
2930  public static final String SP_AUTHORED = "authored";
2931 /**
2932   * <b>Fluent Client</b> search parameter constant for <b>authored</b>
2933   * <p>
2934   * Description: <b>Date request signed</b><br>
2935   * Type: <b>date</b><br>
2936   * Path: <b>ProcedureRequest.authoredOn</b><br>
2937   * </p>
2938   */
2939  public static final ca.uhn.fhir.rest.gclient.DateClientParam AUTHORED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_AUTHORED);
2940
2941 /**
2942   * Search parameter: <b>requester</b>
2943   * <p>
2944   * Description: <b>Individual making the request</b><br>
2945   * Type: <b>reference</b><br>
2946   * Path: <b>ProcedureRequest.requester.agent</b><br>
2947   * </p>
2948   */
2949  @SearchParamDefinition(name="requester", path="ProcedureRequest.requester.agent", description="Individual making the request", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Device.class, Organization.class, Practitioner.class } )
2950  public static final String SP_REQUESTER = "requester";
2951 /**
2952   * <b>Fluent Client</b> search parameter constant for <b>requester</b>
2953   * <p>
2954   * Description: <b>Individual making the request</b><br>
2955   * Type: <b>reference</b><br>
2956   * Path: <b>ProcedureRequest.requester.agent</b><br>
2957   * </p>
2958   */
2959  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUESTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUESTER);
2960
2961/**
2962   * Constant for fluent queries to be used to add include statements. Specifies
2963   * the path value of "<b>ProcedureRequest:requester</b>".
2964   */
2965  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUESTER = new ca.uhn.fhir.model.api.Include("ProcedureRequest:requester").toLocked();
2966
2967 /**
2968   * Search parameter: <b>identifier</b>
2969   * <p>
2970   * Description: <b>Identifiers assigned to this order</b><br>
2971   * Type: <b>token</b><br>
2972   * Path: <b>ProcedureRequest.identifier</b><br>
2973   * </p>
2974   */
2975  @SearchParamDefinition(name="identifier", path="ProcedureRequest.identifier", description="Identifiers assigned to this order", type="token" )
2976  public static final String SP_IDENTIFIER = "identifier";
2977 /**
2978   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2979   * <p>
2980   * Description: <b>Identifiers assigned to this order</b><br>
2981   * Type: <b>token</b><br>
2982   * Path: <b>ProcedureRequest.identifier</b><br>
2983   * </p>
2984   */
2985  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2986
2987 /**
2988   * Search parameter: <b>code</b>
2989   * <p>
2990   * Description: <b>What is being requested/ordered</b><br>
2991   * Type: <b>token</b><br>
2992   * Path: <b>ProcedureRequest.code</b><br>
2993   * </p>
2994   */
2995  @SearchParamDefinition(name="code", path="ProcedureRequest.code", description="What is being requested/ordered", type="token" )
2996  public static final String SP_CODE = "code";
2997 /**
2998   * <b>Fluent Client</b> search parameter constant for <b>code</b>
2999   * <p>
3000   * Description: <b>What is being requested/ordered</b><br>
3001   * Type: <b>token</b><br>
3002   * Path: <b>ProcedureRequest.code</b><br>
3003   * </p>
3004   */
3005  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
3006
3007 /**
3008   * Search parameter: <b>performer</b>
3009   * <p>
3010   * Description: <b>Requested perfomer</b><br>
3011   * Type: <b>reference</b><br>
3012   * Path: <b>ProcedureRequest.performer</b><br>
3013   * </p>
3014   */
3015  @SearchParamDefinition(name="performer", path="ProcedureRequest.performer", description="Requested perfomer", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @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={Device.class, HealthcareService.class, Organization.class, Patient.class, Practitioner.class, RelatedPerson.class } )
3016  public static final String SP_PERFORMER = "performer";
3017 /**
3018   * <b>Fluent Client</b> search parameter constant for <b>performer</b>
3019   * <p>
3020   * Description: <b>Requested perfomer</b><br>
3021   * Type: <b>reference</b><br>
3022   * Path: <b>ProcedureRequest.performer</b><br>
3023   * </p>
3024   */
3025  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PERFORMER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PERFORMER);
3026
3027/**
3028   * Constant for fluent queries to be used to add include statements. Specifies
3029   * the path value of "<b>ProcedureRequest:performer</b>".
3030   */
3031  public static final ca.uhn.fhir.model.api.Include INCLUDE_PERFORMER = new ca.uhn.fhir.model.api.Include("ProcedureRequest:performer").toLocked();
3032
3033 /**
3034   * Search parameter: <b>requisition</b>
3035   * <p>
3036   * Description: <b>Composite Request ID</b><br>
3037   * Type: <b>token</b><br>
3038   * Path: <b>ProcedureRequest.requisition</b><br>
3039   * </p>
3040   */
3041  @SearchParamDefinition(name="requisition", path="ProcedureRequest.requisition", description="Composite Request ID", type="token" )
3042  public static final String SP_REQUISITION = "requisition";
3043 /**
3044   * <b>Fluent Client</b> search parameter constant for <b>requisition</b>
3045   * <p>
3046   * Description: <b>Composite Request ID</b><br>
3047   * Type: <b>token</b><br>
3048   * Path: <b>ProcedureRequest.requisition</b><br>
3049   * </p>
3050   */
3051  public static final ca.uhn.fhir.rest.gclient.TokenClientParam REQUISITION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_REQUISITION);
3052
3053 /**
3054   * Search parameter: <b>replaces</b>
3055   * <p>
3056   * Description: <b>What request replaces</b><br>
3057   * Type: <b>reference</b><br>
3058   * Path: <b>ProcedureRequest.replaces</b><br>
3059   * </p>
3060   */
3061  @SearchParamDefinition(name="replaces", path="ProcedureRequest.replaces", description="What request replaces", type="reference" )
3062  public static final String SP_REPLACES = "replaces";
3063 /**
3064   * <b>Fluent Client</b> search parameter constant for <b>replaces</b>
3065   * <p>
3066   * Description: <b>What request replaces</b><br>
3067   * Type: <b>reference</b><br>
3068   * Path: <b>ProcedureRequest.replaces</b><br>
3069   * </p>
3070   */
3071  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REPLACES = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REPLACES);
3072
3073/**
3074   * Constant for fluent queries to be used to add include statements. Specifies
3075   * the path value of "<b>ProcedureRequest:replaces</b>".
3076   */
3077  public static final ca.uhn.fhir.model.api.Include INCLUDE_REPLACES = new ca.uhn.fhir.model.api.Include("ProcedureRequest:replaces").toLocked();
3078
3079 /**
3080   * Search parameter: <b>subject</b>
3081   * <p>
3082   * Description: <b>Search by subject</b><br>
3083   * Type: <b>reference</b><br>
3084   * Path: <b>ProcedureRequest.subject</b><br>
3085   * </p>
3086   */
3087  @SearchParamDefinition(name="subject", path="ProcedureRequest.subject", description="Search by subject", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Device.class, Group.class, Location.class, Patient.class } )
3088  public static final String SP_SUBJECT = "subject";
3089 /**
3090   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
3091   * <p>
3092   * Description: <b>Search by subject</b><br>
3093   * Type: <b>reference</b><br>
3094   * Path: <b>ProcedureRequest.subject</b><br>
3095   * </p>
3096   */
3097  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
3098
3099/**
3100   * Constant for fluent queries to be used to add include statements. Specifies
3101   * the path value of "<b>ProcedureRequest:subject</b>".
3102   */
3103  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("ProcedureRequest:subject").toLocked();
3104
3105 /**
3106   * Search parameter: <b>encounter</b>
3107   * <p>
3108   * Description: <b>An encounter in which this request is made</b><br>
3109   * Type: <b>reference</b><br>
3110   * Path: <b>ProcedureRequest.context</b><br>
3111   * </p>
3112   */
3113  @SearchParamDefinition(name="encounter", path="ProcedureRequest.context", description="An encounter in which this request is made", type="reference", target={Encounter.class } )
3114  public static final String SP_ENCOUNTER = "encounter";
3115 /**
3116   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
3117   * <p>
3118   * Description: <b>An encounter in which this request is made</b><br>
3119   * Type: <b>reference</b><br>
3120   * Path: <b>ProcedureRequest.context</b><br>
3121   * </p>
3122   */
3123  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
3124
3125/**
3126   * Constant for fluent queries to be used to add include statements. Specifies
3127   * the path value of "<b>ProcedureRequest:encounter</b>".
3128   */
3129  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("ProcedureRequest:encounter").toLocked();
3130
3131 /**
3132   * Search parameter: <b>occurrence</b>
3133   * <p>
3134   * Description: <b>When procedure should occur</b><br>
3135   * Type: <b>date</b><br>
3136   * Path: <b>ProcedureRequest.occurrence[x]</b><br>
3137   * </p>
3138   */
3139  @SearchParamDefinition(name="occurrence", path="ProcedureRequest.occurrence", description="When procedure should occur", type="date" )
3140  public static final String SP_OCCURRENCE = "occurrence";
3141 /**
3142   * <b>Fluent Client</b> search parameter constant for <b>occurrence</b>
3143   * <p>
3144   * Description: <b>When procedure should occur</b><br>
3145   * Type: <b>date</b><br>
3146   * Path: <b>ProcedureRequest.occurrence[x]</b><br>
3147   * </p>
3148   */
3149  public static final ca.uhn.fhir.rest.gclient.DateClientParam OCCURRENCE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_OCCURRENCE);
3150
3151 /**
3152   * Search parameter: <b>priority</b>
3153   * <p>
3154   * Description: <b>routine | urgent | asap | stat</b><br>
3155   * Type: <b>token</b><br>
3156   * Path: <b>ProcedureRequest.priority</b><br>
3157   * </p>
3158   */
3159  @SearchParamDefinition(name="priority", path="ProcedureRequest.priority", description="routine | urgent | asap | stat", type="token" )
3160  public static final String SP_PRIORITY = "priority";
3161 /**
3162   * <b>Fluent Client</b> search parameter constant for <b>priority</b>
3163   * <p>
3164   * Description: <b>routine | urgent | asap | stat</b><br>
3165   * Type: <b>token</b><br>
3166   * Path: <b>ProcedureRequest.priority</b><br>
3167   * </p>
3168   */
3169  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PRIORITY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PRIORITY);
3170
3171 /**
3172   * Search parameter: <b>intent</b>
3173   * <p>
3174   * Description: <b>proposal | plan | order +</b><br>
3175   * Type: <b>token</b><br>
3176   * Path: <b>ProcedureRequest.intent</b><br>
3177   * </p>
3178   */
3179  @SearchParamDefinition(name="intent", path="ProcedureRequest.intent", description="proposal | plan | order +", type="token" )
3180  public static final String SP_INTENT = "intent";
3181 /**
3182   * <b>Fluent Client</b> search parameter constant for <b>intent</b>
3183   * <p>
3184   * Description: <b>proposal | plan | order +</b><br>
3185   * Type: <b>token</b><br>
3186   * Path: <b>ProcedureRequest.intent</b><br>
3187   * </p>
3188   */
3189  public static final ca.uhn.fhir.rest.gclient.TokenClientParam INTENT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_INTENT);
3190
3191 /**
3192   * Search parameter: <b>performer-type</b>
3193   * <p>
3194   * Description: <b>Performer role</b><br>
3195   * Type: <b>token</b><br>
3196   * Path: <b>ProcedureRequest.performerType</b><br>
3197   * </p>
3198   */
3199  @SearchParamDefinition(name="performer-type", path="ProcedureRequest.performerType", description="Performer role", type="token" )
3200  public static final String SP_PERFORMER_TYPE = "performer-type";
3201 /**
3202   * <b>Fluent Client</b> search parameter constant for <b>performer-type</b>
3203   * <p>
3204   * Description: <b>Performer role</b><br>
3205   * Type: <b>token</b><br>
3206   * Path: <b>ProcedureRequest.performerType</b><br>
3207   * </p>
3208   */
3209  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PERFORMER_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PERFORMER_TYPE);
3210
3211 /**
3212   * Search parameter: <b>based-on</b>
3213   * <p>
3214   * Description: <b>What request fulfills</b><br>
3215   * Type: <b>reference</b><br>
3216   * Path: <b>ProcedureRequest.basedOn</b><br>
3217   * </p>
3218   */
3219  @SearchParamDefinition(name="based-on", path="ProcedureRequest.basedOn", description="What request fulfills", type="reference" )
3220  public static final String SP_BASED_ON = "based-on";
3221 /**
3222   * <b>Fluent Client</b> search parameter constant for <b>based-on</b>
3223   * <p>
3224   * Description: <b>What request fulfills</b><br>
3225   * Type: <b>reference</b><br>
3226   * Path: <b>ProcedureRequest.basedOn</b><br>
3227   * </p>
3228   */
3229  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASED_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASED_ON);
3230
3231/**
3232   * Constant for fluent queries to be used to add include statements. Specifies
3233   * the path value of "<b>ProcedureRequest:based-on</b>".
3234   */
3235  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASED_ON = new ca.uhn.fhir.model.api.Include("ProcedureRequest:based-on").toLocked();
3236
3237 /**
3238   * Search parameter: <b>patient</b>
3239   * <p>
3240   * Description: <b>Search by subject - a patient</b><br>
3241   * Type: <b>reference</b><br>
3242   * Path: <b>ProcedureRequest.subject</b><br>
3243   * </p>
3244   */
3245  @SearchParamDefinition(name="patient", path="ProcedureRequest.subject", description="Search by subject - a patient", type="reference", target={Patient.class } )
3246  public static final String SP_PATIENT = "patient";
3247 /**
3248   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3249   * <p>
3250   * Description: <b>Search by subject - a patient</b><br>
3251   * Type: <b>reference</b><br>
3252   * Path: <b>ProcedureRequest.subject</b><br>
3253   * </p>
3254   */
3255  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3256
3257/**
3258   * Constant for fluent queries to be used to add include statements. Specifies
3259   * the path value of "<b>ProcedureRequest:patient</b>".
3260   */
3261  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("ProcedureRequest:patient").toLocked();
3262
3263 /**
3264   * Search parameter: <b>specimen</b>
3265   * <p>
3266   * Description: <b>Specimen to be tested</b><br>
3267   * Type: <b>reference</b><br>
3268   * Path: <b>ProcedureRequest.specimen</b><br>
3269   * </p>
3270   */
3271  @SearchParamDefinition(name="specimen", path="ProcedureRequest.specimen", description="Specimen to be tested", type="reference", target={Specimen.class } )
3272  public static final String SP_SPECIMEN = "specimen";
3273 /**
3274   * <b>Fluent Client</b> search parameter constant for <b>specimen</b>
3275   * <p>
3276   * Description: <b>Specimen to be tested</b><br>
3277   * Type: <b>reference</b><br>
3278   * Path: <b>ProcedureRequest.specimen</b><br>
3279   * </p>
3280   */
3281  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SPECIMEN = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SPECIMEN);
3282
3283/**
3284   * Constant for fluent queries to be used to add include statements. Specifies
3285   * the path value of "<b>ProcedureRequest:specimen</b>".
3286   */
3287  public static final ca.uhn.fhir.model.api.Include INCLUDE_SPECIMEN = new ca.uhn.fhir.model.api.Include("ProcedureRequest:specimen").toLocked();
3288
3289 /**
3290   * Search parameter: <b>context</b>
3291   * <p>
3292   * Description: <b>Encounter or Episode during which request was created</b><br>
3293   * Type: <b>reference</b><br>
3294   * Path: <b>ProcedureRequest.context</b><br>
3295   * </p>
3296   */
3297  @SearchParamDefinition(name="context", path="ProcedureRequest.context", description="Encounter or Episode during which request was created", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Encounter") }, target={Encounter.class, EpisodeOfCare.class } )
3298  public static final String SP_CONTEXT = "context";
3299 /**
3300   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3301   * <p>
3302   * Description: <b>Encounter or Episode during which request was created</b><br>
3303   * Type: <b>reference</b><br>
3304   * Path: <b>ProcedureRequest.context</b><br>
3305   * </p>
3306   */
3307  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CONTEXT);
3308
3309/**
3310   * Constant for fluent queries to be used to add include statements. Specifies
3311   * the path value of "<b>ProcedureRequest:context</b>".
3312   */
3313  public static final ca.uhn.fhir.model.api.Include INCLUDE_CONTEXT = new ca.uhn.fhir.model.api.Include("ProcedureRequest:context").toLocked();
3314
3315 /**
3316   * Search parameter: <b>definition</b>
3317   * <p>
3318   * Description: <b>Protocol or definition</b><br>
3319   * Type: <b>reference</b><br>
3320   * Path: <b>ProcedureRequest.definition</b><br>
3321   * </p>
3322   */
3323  @SearchParamDefinition(name="definition", path="ProcedureRequest.definition", description="Protocol or definition", type="reference", target={ActivityDefinition.class, PlanDefinition.class } )
3324  public static final String SP_DEFINITION = "definition";
3325 /**
3326   * <b>Fluent Client</b> search parameter constant for <b>definition</b>
3327   * <p>
3328   * Description: <b>Protocol or definition</b><br>
3329   * Type: <b>reference</b><br>
3330   * Path: <b>ProcedureRequest.definition</b><br>
3331   * </p>
3332   */
3333  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DEFINITION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DEFINITION);
3334
3335/**
3336   * Constant for fluent queries to be used to add include statements. Specifies
3337   * the path value of "<b>ProcedureRequest:definition</b>".
3338   */
3339  public static final ca.uhn.fhir.model.api.Include INCLUDE_DEFINITION = new ca.uhn.fhir.model.api.Include("ProcedureRequest:definition").toLocked();
3340
3341 /**
3342   * Search parameter: <b>body-site</b>
3343   * <p>
3344   * Description: <b>Where procedure is going to be done</b><br>
3345   * Type: <b>token</b><br>
3346   * Path: <b>ProcedureRequest.bodySite</b><br>
3347   * </p>
3348   */
3349  @SearchParamDefinition(name="body-site", path="ProcedureRequest.bodySite", description="Where procedure is going to be done", type="token" )
3350  public static final String SP_BODY_SITE = "body-site";
3351 /**
3352   * <b>Fluent Client</b> search parameter constant for <b>body-site</b>
3353   * <p>
3354   * Description: <b>Where procedure is going to be done</b><br>
3355   * Type: <b>token</b><br>
3356   * Path: <b>ProcedureRequest.bodySite</b><br>
3357   * </p>
3358   */
3359  public static final ca.uhn.fhir.rest.gclient.TokenClientParam BODY_SITE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_BODY_SITE);
3360
3361 /**
3362   * Search parameter: <b>status</b>
3363   * <p>
3364   * Description: <b>draft | active | suspended | completed | entered-in-error | cancelled</b><br>
3365   * Type: <b>token</b><br>
3366   * Path: <b>ProcedureRequest.status</b><br>
3367   * </p>
3368   */
3369  @SearchParamDefinition(name="status", path="ProcedureRequest.status", description="draft | active | suspended | completed | entered-in-error | cancelled", type="token" )
3370  public static final String SP_STATUS = "status";
3371 /**
3372   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3373   * <p>
3374   * Description: <b>draft | active | suspended | completed | entered-in-error | cancelled</b><br>
3375   * Type: <b>token</b><br>
3376   * Path: <b>ProcedureRequest.status</b><br>
3377   * </p>
3378   */
3379  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3380
3381
3382}