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